From cf5ff2bbb2f15854aa1c72809daaba3438809dfe Mon Sep 17 00:00:00 2001 From: adamdunkels Date: Sun, 3 Feb 2008 20:59:35 +0000 Subject: [PATCH] Made SLIP code coexist with ordinary serial code. If WITH_UIP=1, the SLIP code is used instead. --- cpu/msp430/Makefile.msp430 | 4 +- cpu/msp430/dev/uart1.c | 7 +++- cpu/msp430/slip_uart1.c | 78 ++++++-------------------------------- 3 files changed, 18 insertions(+), 71 deletions(-) diff --git a/cpu/msp430/Makefile.msp430 b/cpu/msp430/Makefile.msp430 index fe49d6eda..3d334cf93 100644 --- a/cpu/msp430/Makefile.msp430 +++ b/cpu/msp430/Makefile.msp430 @@ -1,4 +1,4 @@ -# $Id: Makefile.msp430,v 1.22 2008/01/08 08:01:01 adamdunkels Exp $ +# $Id: Makefile.msp430,v 1.23 2008/02/03 20:59:35 adamdunkels Exp $ ifdef nodeid CFLAGS += -DNODEID=$(nodeid) @@ -14,7 +14,7 @@ CONTIKI_CPU=$(CONTIKI)/cpu/msp430 CONTIKI_CPU_DIRS = . dev MSP430 = msp430.c flash.c clock.c leds.c leds-arch.c \ - watchdog.c lpm.c mtarch.c uart1.c rtimer-arch.c + watchdog.c lpm.c mtarch.c uart1.c slip_uart1.c rtimer-arch.c UIPDRIVERS = me.c me_tabs.c slip.c crc16.c #UIPDRIVERS = me.c me_tabs.c crc16.c ppp/ahdlc.c ppp/ipcp.c ppp/lcp.c ppp/pap.c ppp/ppp.c ppp/ppp_process.c SYSAPPS = #codeprop-tmp.c diff --git a/cpu/msp430/dev/uart1.c b/cpu/msp430/dev/uart1.c index ef519f200..5ea940087 100644 --- a/cpu/msp430/dev/uart1.c +++ b/cpu/msp430/dev/uart1.c @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)$Id: uart1.c,v 1.4 2008/01/08 08:04:09 adamdunkels Exp $ + * @(#)$Id: uart1.c,v 1.5 2008/02/03 20:59:35 adamdunkels Exp $ */ /* @@ -39,8 +39,8 @@ #include "lib/energest.h" #include "dev/uart1.h" - #include "dev/leds.h" +#include "dev/watchdog.h" static int (*uart1_input_handler)(unsigned char c); @@ -54,6 +54,7 @@ uart1_set_input(int (*input)(unsigned char c)) void uart1_writeb(unsigned char c) { + watchdog_periodic(); /* Loop until the transmission buffer is available. */ while((IFG2 & UTXIFG1) == 0); @@ -61,12 +62,14 @@ uart1_writeb(unsigned char c) TXBUF1 = c; } /*---------------------------------------------------------------------------*/ +#if ! WITH_UIP /* If WITH_UIP is defined, putchar() is defined by the SLIP driver */ int putchar(int c) { uart1_writeb((char)c); return c; } +#endif /* ! WITH_UIP */ /*---------------------------------------------------------------------------*/ /** * Initalize the RS232 port. diff --git a/cpu/msp430/slip_uart1.c b/cpu/msp430/slip_uart1.c index 30db74362..cbce71584 100644 --- a/cpu/msp430/slip_uart1.c +++ b/cpu/msp430/slip_uart1.c @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)$Id: slip_uart1.c,v 1.7 2007/05/22 21:00:27 adamdunkels Exp $ + * @(#)$Id: slip_uart1.c,v 1.8 2008/02/03 20:59:35 adamdunkels Exp $ */ /* @@ -39,23 +39,22 @@ #include "contiki.h" #include "dev/slip.h" - +#include "dev/uart1.h" +/*---------------------------------------------------------------------------*/ void slip_arch_writeb(unsigned char c) { - /* Loop until the transmission buffer is available. */ - while ((IFG2 & UTXIFG1) == 0); - - /* Transmit the data. */ - TXBUF1 = c; + uart1_writeb(c); } - +/*---------------------------------------------------------------------------*/ /* * The serial line is used to transfer IP packets using slip. To make * it possible to send debug output over the same line we send debug * output as slip frames (i.e delimeted by SLIP_END). * */ +/*---------------------------------------------------------------------------*/ +#if WITH_UIP int putchar(int c) { @@ -81,7 +80,8 @@ putchar(int c) return c; } - +#endif +/*---------------------------------------------------------------------------*/ /** * Initalize the RS232 port and the SLIP driver. * @@ -89,62 +89,6 @@ putchar(int c) void slip_arch_init(unsigned long ubr) { - /* RS232 */ - P3DIR &= ~0x80; /* Select P37 for input (UART1RX) */ - P3DIR |= 0x40; /* Select P36 for output (UART1TX) */ - P3SEL |= 0xC0; /* Select P36,P37 for UART1{TX,RX} */ - - UCTL1 = SWRST | CHAR; /* 8-bit character, UART mode */ - -#if 0 - U1RCTL &= ~URXEIE; /* even erroneous characters trigger interrupts */ -#endif - - UTCTL1 = SSEL1; /* UCLK = MCLK */ - - UBR01 = ubr; - UBR11 = ubr >> 8; /* always zero */ - /* - * UMCTL1 values calculated using - * http://mspgcc.sourceforge.net/baudrate.html and are not - * complete. Also the table assumes that F_CPU = 2,457,600 Hz. - */ - switch (ubr) { - case BAUD2UBR(115200): - UMCTL1 = 0x4a; - break; - case BAUD2UBR(57600): - UMCTL1 = 0x5b; - break; - case BAUD2UBR(19600): - UMCTL1 = 0x4a; - break; - default: - UMCTL1 = 0x00; - } - - ME2 &= ~USPIE1; /* USART1 SPI module disable */ - ME2 |= (UTXE1 | URXE1); /* Enable USART1 TXD/RXD */ - - UCTL1 &= ~SWRST; - - /* XXX Clear pending interrupts before enable!!! */ - - IE2 |= URXIE1; /* Enable USART1 RX interrupt */ -} - -interrupt(UART1RX_VECTOR) -__uart1_intr() -{ - ENERGEST_ON(ENERGEST_TYPE_IRQ); - /* Check status register for receive errors. */ - if(URCTL1 & RXERR) { - volatile unsigned dummy; - dummy = RXBUF1; /* Clear error flags by forcing a dummy read. */ - } else { - if(slip_input_byte(RXBUF1)) { - LPM4_EXIT; - } - } - ENERGEST_OFF(ENERGEST_TYPE_IRQ); + uart1_set_input(slip_input_byte); } +/*---------------------------------------------------------------------------*/