2010-01-25 23:12:09 +00:00
|
|
|
/**
|
|
|
|
* \file
|
|
|
|
*
|
|
|
|
* uart write routines
|
|
|
|
*
|
|
|
|
* \author
|
|
|
|
*
|
|
|
|
* Anthony "Asterisk" Ambuehl
|
|
|
|
*
|
|
|
|
* interrupt routines which must be in HOME bank. handles received data from UART.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include "cc2430_sfr.h"
|
|
|
|
|
|
|
|
#include "dev/leds.h"
|
2012-03-05 16:28:06 +00:00
|
|
|
#include "dev/uart0.h"
|
|
|
|
#include "dev/uart1.h"
|
|
|
|
#include "sys/energest.h"
|
2010-01-25 23:12:09 +00:00
|
|
|
|
2012-03-05 16:28:06 +00:00
|
|
|
#if UART_ZERO_ENABLE
|
2012-12-16 12:44:44 +00:00
|
|
|
static int (* uart0_input_handler)(unsigned char c);
|
2012-03-05 16:28:06 +00:00
|
|
|
#endif
|
|
|
|
#if UART_ONE_ENABLE
|
2012-12-16 12:44:44 +00:00
|
|
|
static int (* uart1_input_handler)(unsigned char c);
|
2012-03-05 16:28:06 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#if UART_ZERO_ENABLE
|
2010-01-25 23:12:09 +00:00
|
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
void
|
2012-12-16 12:44:44 +00:00
|
|
|
uart0_set_input(int (* input)(unsigned char c))
|
2010-01-25 23:12:09 +00:00
|
|
|
{
|
|
|
|
uart0_input_handler = input;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
2012-09-07 13:48:15 +00:00
|
|
|
#pragma save
|
|
|
|
#if CC_CONF_OPTIMIZE_STACK_SIZE
|
|
|
|
#pragma exclude bits
|
|
|
|
#endif
|
2010-01-25 23:12:09 +00:00
|
|
|
void
|
2012-12-16 12:44:44 +00:00
|
|
|
uart0_rx_ISR(void) __interrupt(URX0_VECTOR)
|
2010-01-25 23:12:09 +00:00
|
|
|
{
|
2012-03-05 16:28:06 +00:00
|
|
|
ENERGEST_ON(ENERGEST_TYPE_IRQ);
|
2010-01-25 23:12:09 +00:00
|
|
|
TCON_URX0IF = 0;
|
|
|
|
if(uart0_input_handler != NULL) {
|
|
|
|
uart0_input_handler(U0BUF);
|
|
|
|
}
|
2012-03-05 16:28:06 +00:00
|
|
|
ENERGEST_OFF(ENERGEST_TYPE_IRQ);
|
2010-01-25 23:12:09 +00:00
|
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
void
|
2012-12-16 12:44:44 +00:00
|
|
|
uart0_tx_ISR(void) __interrupt(UTX0_VECTOR)
|
2010-01-25 23:12:09 +00:00
|
|
|
{
|
|
|
|
}
|
2012-09-07 13:48:15 +00:00
|
|
|
#pragma restore
|
2012-03-05 16:28:06 +00:00
|
|
|
#endif /* UART_ZERO_ENABLE */
|
|
|
|
#if UART_ONE_ENABLE
|
2010-01-25 23:12:09 +00:00
|
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
void
|
2012-12-16 12:44:44 +00:00
|
|
|
uart1_set_input(int (* input)(unsigned char c))
|
2010-01-25 23:12:09 +00:00
|
|
|
{
|
|
|
|
uart1_input_handler = input;
|
|
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
2012-03-05 16:28:06 +00:00
|
|
|
#if UART_ONE_CONF_WITH_INPUT
|
2012-09-07 13:48:15 +00:00
|
|
|
#pragma save
|
|
|
|
#if CC_CONF_OPTIMIZE_STACK_SIZE
|
|
|
|
#pragma exclude bits
|
|
|
|
#endif
|
2010-01-25 23:12:09 +00:00
|
|
|
void
|
2012-12-16 12:44:44 +00:00
|
|
|
uart1_rx_ISR(void) __interrupt(URX1_VECTOR)
|
2010-01-25 23:12:09 +00:00
|
|
|
{
|
2012-03-05 16:28:06 +00:00
|
|
|
ENERGEST_ON(ENERGEST_TYPE_IRQ);
|
2010-01-25 23:12:09 +00:00
|
|
|
TCON_URX1IF = 0;
|
|
|
|
if(uart1_input_handler != NULL) {
|
|
|
|
uart1_input_handler(U1BUF);
|
|
|
|
}
|
2012-03-05 16:28:06 +00:00
|
|
|
ENERGEST_OFF(ENERGEST_TYPE_IRQ);
|
2010-01-25 23:12:09 +00:00
|
|
|
}
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
void
|
2012-12-16 12:44:44 +00:00
|
|
|
uart1_tx_ISR(void) __interrupt(UTX1_VECTOR)
|
2010-01-25 23:12:09 +00:00
|
|
|
{
|
|
|
|
}
|
2012-09-07 13:48:15 +00:00
|
|
|
#pragma restore
|
2010-01-25 23:12:09 +00:00
|
|
|
/*---------------------------------------------------------------------------*/
|
2012-03-05 16:28:06 +00:00
|
|
|
#endif /* UART_ONE_CONF_WITH_INPUT */
|
|
|
|
#endif /* UART_ONE_ENABLE */
|