mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-29 13:20:39 +00:00
use sleep mode and visualize it using LED2
This commit is contained in:
parent
df60a1e976
commit
80b1e4cba6
@ -64,34 +64,39 @@ void sys_tick_handler(void)
|
|||||||
(*tick_handler)();
|
(*tick_handler)();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// hal_led.h implementation
|
||||||
|
#include <btstack/hal_led.h>
|
||||||
|
void hal_led_off(void);
|
||||||
|
void hal_led_on(void);
|
||||||
|
|
||||||
|
void hal_led_off(void){
|
||||||
|
gpio_clear(GPIOA, GPIO_LED2);
|
||||||
|
}
|
||||||
|
void hal_led_on(void){
|
||||||
|
gpio_set(GPIOA, GPIO_LED2);
|
||||||
|
}
|
||||||
|
void hal_led_toggle(void){
|
||||||
|
gpio_toggle(GPIOA, GPIO_LED2);
|
||||||
|
}
|
||||||
|
|
||||||
// hal_cpu.h implementation
|
// hal_cpu.h implementation
|
||||||
#include <btstack/hal_cpu.h>
|
#include <btstack/hal_cpu.h>
|
||||||
|
|
||||||
__attribute__(( always_inline ))
|
void hal_cpu_disable_irqs(){
|
||||||
inline void hal_cpu_disable_irqs(){
|
|
||||||
__disable_irq();
|
__disable_irq();
|
||||||
// __asm volatile ("cpsid i" : : : "memory");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__attribute__(( always_inline ))
|
void hal_cpu_enable_irqs(){
|
||||||
inline void hal_cpu_enable_irqs(){
|
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
// __asm volatile ("cpsie i" : : : "memory");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
__attribute__(( always_inline ))
|
|
||||||
inline void hal_cpu_enable_irqs_and_sleep(){
|
void hal_cpu_enable_irqs_and_sleep(){
|
||||||
|
hal_led_off();
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
// __asm volatile ("cpsie i" : : : "memory");
|
__WFI();
|
||||||
// TODO: pick power mode for sleep depening on need for UART
|
// note: hal_uart_needed_during_sleep can be used to disable peripheral clock if it's not needed for a timer
|
||||||
}
|
// todo: the transition from disabled IRQs into sleep mode should be atomic
|
||||||
|
hal_led_on();
|
||||||
|
|
||||||
// hal_led.h implementation
|
|
||||||
#include <btstack/hal_led.h>
|
|
||||||
|
|
||||||
void hal_led_toggle(void){
|
|
||||||
gpio_toggle(GPIOA, GPIO_LED2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// hal_uart_dma.c implementation
|
// hal_uart_dma.c implementation
|
||||||
@ -102,6 +107,10 @@ static void (*rx_done_handler)(void) = dummy_handler;
|
|||||||
static void (*tx_done_handler)(void) = dummy_handler;
|
static void (*tx_done_handler)(void) = dummy_handler;
|
||||||
static void (*cts_irq_handler)(void) = dummy_handler;
|
static void (*cts_irq_handler)(void) = dummy_handler;
|
||||||
|
|
||||||
|
void hal_uart_dma_set_sleep(uint8_t sleep){
|
||||||
|
hal_uart_needed_during_sleep = !sleep;
|
||||||
|
}
|
||||||
|
|
||||||
// DMA1_CHANNEL2 UART3_TX
|
// DMA1_CHANNEL2 UART3_TX
|
||||||
void dma1_channel2_isr(void) {
|
void dma1_channel2_isr(void) {
|
||||||
if ((DMA1_ISR & DMA_ISR_TCIF2) != 0) {
|
if ((DMA1_ISR & DMA_ISR_TCIF2) != 0) {
|
||||||
@ -124,7 +133,6 @@ void dma1_channel3_isr(void){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// CTS RISING ISR
|
// CTS RISING ISR
|
||||||
void exti15_10_isr(void){
|
void exti15_10_isr(void){
|
||||||
exti_reset_request(EXTI13);
|
exti_reset_request(EXTI13);
|
||||||
@ -209,9 +217,7 @@ void hal_uart_dma_receive_block(uint8_t *data, uint16_t size){
|
|||||||
usart_enable_rx_dma(USART3);
|
usart_enable_rx_dma(USART3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hal_uart_dma_set_sleep(uint8_t sleep){
|
// end of hal_uart
|
||||||
hal_uart_needed_during_sleep = !sleep;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Use USART_CONSOLE as a console.
|
* Use USART_CONSOLE as a console.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user