X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcpu%2Fmsp430%2Fdrv%2Fkdebug_msp430.c;fp=bertos%2Fcpu%2Fmsp430%2Fdrv%2Fkdebug_msp430.c;h=b263efca7f400e189bc6b1d7aab8e3ac1be8b8a1;hb=a3f9ca9d86b7f8da31204746cc32e13c2dbe5ed0;hp=0000000000000000000000000000000000000000;hpb=14c4531e5f8c34a4454a44f7f1e1cb3e8be96f25;p=bertos.git diff --git a/bertos/cpu/msp430/drv/kdebug_msp430.c b/bertos/cpu/msp430/drv/kdebug_msp430.c new file mode 100644 index 00000000..b263efca --- /dev/null +++ b/bertos/cpu/msp430/drv/kdebug_msp430.c @@ -0,0 +1,121 @@ +/** + * \file + * + * + * \brief MSP430 debug support (implementation). + * + * \author Mohamed Tarek + */ + +#include /* for CPU_FREQ */ +#include "hw/hw_ser.h" /* bus macros overrides */ + +#include "cfg/cfg_debug.h" +#include /* for DIV_ROUND */ + +#include +#include + +#include + +#if CONFIG_KDEBUG_PORT == 0 + + #ifndef KDBG_UART0_BUS_INIT + #define KDBG_UART0_BUS_INIT do {} while (0) + #endif + #ifndef KDBG_UART0_BUS_RX + #define KDBG_UART0_BUS_RX do {} while (0) + #endif + #ifndef KDBG_UART0_BUS_TX + #define KDBG_UART0_BUS_TX do {} while (0) + #endif + + /* USCI Register definitions */ + #define UCSTAT UCA0STAT + #define UCTXBUF UCA0TXBUF + #define UCRXBUF UCA0RXBUF + #define UCTXIFG UCA0TXIFG + #define UCRXIFG UCA0RXIFG + #define UCTXIE UCA0TXIE + #define UCRXIE UCA0RXIE + #define UCCTL0 UCA0CTL0 + #define UCCTL1 UCA0CTL1 + #define UCBR0 UCA0BR0 + #define UCBR1 UCA0BR1 + #define UCMCTL UCA0MCTL + #define IE IE2 + #define IFG IFG2 + + #if (CPU_MSP430_2274) + #define KDBG_MSP430_UART_PINS_INIT() do{ P3SEL = 0x30; }while(0) + #endif + +#else + + #if (CPU_MSP430_2274) + #error only 1 UART availbale, CONFIG_KDEBUG_PORT should be 0 + #endif + +#endif + +#define KDBG_WAIT_READY() do { while((UCSTAT & UCBUSY)); } while(0) +#define KDBG_WAIT_TXDONE() do { while(!(IFG & UCTXIFG)); } while(0) + +#define KDBG_WRITE_CHAR(c) do { UCTXBUF = (c); } while(0) + +#define KDBG_MASK_IRQ(old) do { \ + (old) = IE; \ + IE &= ~(UCTXIE|UCRXIE);\ +} while(0) + +#define KDBG_RESTORE_IRQ(old) do { \ + KDBG_WAIT_TXDONE(); \ + IE = (old); \ +} while(0) + +typedef uint8_t kdbg_irqsave_t; + +INLINE void kdbg_hw_init(void) +{ + /* Assume SMCLK = MCLK = DCO = CPU_FREQ */ + /* Compute the baud rate */ + uint16_t quot = DIV_ROUND(CPU_FREQ, CONFIG_KDEBUG_BAUDRATE); + KDBG_MSP430_UART_PINS_INIT(); // Configure USCI TX/RX pins + UCCTL1 |= UCSSEL_2; // use SMCLK + UCBR0 = quot & 0xFF; + UCBR1 = quot >> 8; + UCMCTL = UCBRS0; // No Modulation + UCCTL0 = 0; // Default UART settings (8N1) + UCCTL1 &= ~UCSWRST; // Initialize USCI state machine + KDBG_MASK_IRQ(IE2); // Disable USCI interrupts +} +