mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-26 11:37:10 +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)();
|
||||
}
|
||||
|
||||
// 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
|
||||
#include <btstack/hal_cpu.h>
|
||||
|
||||
__attribute__(( always_inline ))
|
||||
inline void hal_cpu_disable_irqs(){
|
||||
void hal_cpu_disable_irqs(){
|
||||
__disable_irq();
|
||||
// __asm volatile ("cpsid i" : : : "memory");
|
||||
}
|
||||
|
||||
__attribute__(( always_inline ))
|
||||
inline void hal_cpu_enable_irqs(){
|
||||
void hal_cpu_enable_irqs(){
|
||||
__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();
|
||||
// __asm volatile ("cpsie i" : : : "memory");
|
||||
// TODO: pick power mode for sleep depening on need for UART
|
||||
}
|
||||
|
||||
|
||||
// hal_led.h implementation
|
||||
#include <btstack/hal_led.h>
|
||||
|
||||
void hal_led_toggle(void){
|
||||
gpio_toggle(GPIOA, GPIO_LED2);
|
||||
__WFI();
|
||||
// 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_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 (*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
|
||||
void dma1_channel2_isr(void) {
|
||||
if ((DMA1_ISR & DMA_ISR_TCIF2) != 0) {
|
||||
@ -124,7 +133,6 @@ void dma1_channel3_isr(void){
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// CTS RISING ISR
|
||||
void exti15_10_isr(void){
|
||||
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);
|
||||
}
|
||||
|
||||
void hal_uart_dma_set_sleep(uint8_t sleep){
|
||||
hal_uart_needed_during_sleep = !sleep;
|
||||
}
|
||||
// end of hal_uart
|
||||
|
||||
/**
|
||||
* Use USART_CONSOLE as a console.
|
||||
|
Loading…
x
Reference in New Issue
Block a user