use sleep mode and visualize it using LED2

This commit is contained in:
matthias.ringwald@gmail.com 2014-10-02 19:46:38 +00:00
parent df60a1e976
commit 80b1e4cba6

View File

@ -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.