From d7ddfd4e6d75e50ca64a342181f5c52e9f4919af Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 23 Mar 2012 00:42:13 -0700 Subject: [PATCH] Use 16-bits for STM32 LED mask. Export serial I/O functions Signed-off-by: Keith Packard --- src/stm/ao_arch.h | 38 ++++++++++++++++++++++++++++++++++++++ src/stm/ao_led.c | 14 +++++++------- src/stm/ao_serial_stm.c | 26 +++++++++++++++++++------- 3 files changed, 64 insertions(+), 14 deletions(-) diff --git a/src/stm/ao_arch.h b/src/stm/ao_arch.h index 55976c89..fcc177ef 100644 --- a/src/stm/ao_arch.h +++ b/src/stm/ao_arch.h @@ -27,6 +27,8 @@ #define AO_STACK_SIZE 1024 +#define AO_LED_TYPE uint16_t + /* Various definitions to make GCC look more like SDCC */ #define ao_arch_naked_declare __attribute__((naked)) @@ -163,5 +165,41 @@ void ao_lcd_font_string(char *s); #define USE_SERIAL_STDIN (USE_SERIAL_1_STDIN + USE_SERIAL_2_STDIN + USE_SERIAL_3_STDIN) +char +ao_serial1_getchar(void); + +void +ao_serial1_putchar(char c); + +char +ao_serial1_pollchar(void); + +void +ao_serial1_set_speed(uint8_t speed); + +char +ao_serial2_getchar(void); + +void +ao_serial2_putchar(char c); + +char +ao_serial2_pollchar(void); + +void +ao_serial2_set_speed(uint8_t speed); + +char +ao_serial3_getchar(void); + +void +ao_serial3_putchar(char c); + +char +ao_serial3_pollchar(void); + +void +ao_serial3_set_speed(uint8_t speed); + #endif /* _AO_ARCH_H_ */ diff --git a/src/stm/ao_led.c b/src/stm/ao_led.c index 0574aa2a..d649f3d7 100644 --- a/src/stm/ao_led.c +++ b/src/stm/ao_led.c @@ -17,34 +17,34 @@ #include "ao.h" -__pdata uint8_t ao_led_enable; +__pdata uint16_t ao_led_enable; void -ao_led_on(uint8_t colors) +ao_led_on(uint16_t colors) { LED_PORT.odr |= (colors & ao_led_enable); } void -ao_led_off(uint8_t colors) +ao_led_off(uint16_t colors) { LED_PORT.odr &= ~(colors & ao_led_enable); } void -ao_led_set(uint8_t colors) +ao_led_set(uint16_t colors) { LED_PORT.odr = (LED_PORT.odr & ~(ao_led_enable)) | (colors & ao_led_enable); } void -ao_led_toggle(uint8_t colors) +ao_led_toggle(uint16_t colors) { LED_PORT.odr ^= (colors & ao_led_enable); } void -ao_led_for(uint8_t colors, uint16_t ticks) __reentrant +ao_led_for(uint16_t colors, uint16_t ticks) __reentrant { ao_led_on(colors); ao_delay(ticks); @@ -52,7 +52,7 @@ ao_led_for(uint8_t colors, uint16_t ticks) __reentrant } void -ao_led_init(uint8_t enable) +ao_led_init(uint16_t enable) { int bit; diff --git a/src/stm/ao_serial_stm.c b/src/stm/ao_serial_stm.c index 95189f0c..a8c10222 100644 --- a/src/stm/ao_serial_stm.c +++ b/src/stm/ao_serial_stm.c @@ -189,7 +189,6 @@ struct ao_stm_usart ao_stm_usart1; void stm_usart1_isr(void) { ao_usart_isr(&ao_stm_usart1, USE_SERIAL_1_STDIN); } -#if USE_SERIAL_1_STDIN char ao_serial1_getchar(void) { @@ -207,7 +206,12 @@ ao_serial1_pollchar(void) { return ao_usart_pollchar(&ao_stm_usart1); } -#endif /* USE_SERIAL_1_STDIN */ + +void +ao_serial1_set_speed(uint8_t speed) +{ + ao_usart_set_speed(&ao_stm_usart1, speed); +} #endif /* HAS_SERIAL_1 */ #if HAS_SERIAL_2 @@ -216,7 +220,6 @@ struct ao_stm_usart ao_stm_usart2; void stm_usart2_isr(void) { ao_usart_isr(&ao_stm_usart2, USE_SERIAL_2_STDIN); } -#if USE_SERIAL_2_STDIN char ao_serial2_getchar(void) { @@ -234,7 +237,12 @@ ao_serial2_pollchar(void) { return ao_usart_pollchar(&ao_stm_usart2); } -#endif /* USE_SERIAL_2_STDIN */ + +void +ao_serial2_set_speed(uint8_t speed) +{ + ao_usart_set_speed(&ao_stm_usart2, speed); +} #endif /* HAS_SERIAL_2 */ #if HAS_SERIAL_3 @@ -243,7 +251,6 @@ struct ao_stm_usart ao_stm_usart3; void stm_usart3_isr(void) { ao_usart_isr(&ao_stm_usart3, USE_SERIAL_3_STDIN); } -#if USE_SERIAL_3_STDIN char ao_serial3_getchar(void) { @@ -259,9 +266,14 @@ ao_serial3_putchar(char c) char ao_serial3_pollchar(void) { - return ao_usart_pollchar(&ao_stm_usart2); + return ao_usart_pollchar(&ao_stm_usart3); +} + +void +ao_serial3_set_speed(uint8_t speed) +{ + ao_usart_set_speed(&ao_stm_usart3, speed); } -#endif /* USE_SERIAL_3_STDIN */ #endif /* HAS_SERIAL_3 */ void -- 2.30.2