/** * \file * * uart write routines * * \author * * Anthony "Asterisk" Ambuehl * * interrupt routines which must be in HOME bank. handles received data from UART. * */ #include "cc253x.h" #include "dev/uart0.h" #include "dev/uart1.h" #include "sys/energest.h" #if UART0_ENABLE static int (* uart0_input_handler)(unsigned char c); #endif #if UART1_ENABLE static int (* uart1_input_handler)(unsigned char c); #endif #if UART0_ENABLE /*---------------------------------------------------------------------------*/ void uart0_set_input(int (* input)(unsigned char c)) { uart0_input_handler = input; } /*---------------------------------------------------------------------------*/ #if UART0_CONF_WITH_INPUT /* avoid referencing bits since we're not using them */ #pragma save #if CC_CONF_OPTIMIZE_STACK_SIZE #pragma exclude bits #endif void uart0_rx_isr(void) __interrupt(URX0_VECTOR) { ENERGEST_ON(ENERGEST_TYPE_IRQ); URX0IF = 0; if(uart0_input_handler != NULL) { uart0_input_handler(U0DBUF); } ENERGEST_OFF(ENERGEST_TYPE_IRQ); } #pragma restore #endif #endif /* UART0_ENABLE */ #if UART1_ENABLE /*---------------------------------------------------------------------------*/ void uart1_set_input(int (* input)(unsigned char c)) { uart1_input_handler = input; } /*---------------------------------------------------------------------------*/ #if UART_ONE_CONF_WITH_INPUT /* avoid referencing bits since we're not using them */ #pragma save #if CC_CONF_OPTIMIZE_STACK_SIZE #pragma exclude bits #endif void uart1_rx_isr(void) __interrupt(URX1_VECTOR) { ENERGEST_ON(ENERGEST_TYPE_IRQ); URX1IF = 0; if(uart1_input_handler != NULL) { uart1_input_handler(U1DBUF); } ENERGEST_OFF(ENERGEST_TYPE_IRQ); } #pragma restore /*---------------------------------------------------------------------------*/ #endif /* UART_ONE_CONF_WITH_INPUT */ #endif /* UART1_ENABLE */