Simple mbed library with macros
Dependents: SimpleTimer SimpleUART SimpleTimer Stoppuhr1
Diff: serial.h
- Revision:
- 15:66150de7876b
- Parent:
- 14:23c6d41cb377
- Child:
- 16:73f0f5d18800
--- a/serial.h Sat Nov 13 23:20:15 2010 +0000 +++ b/serial.h Sun Nov 14 22:46:26 2010 +0000 @@ -37,14 +37,18 @@ #include "mbed_globals.h" #include "interrupts.h" -/* Simple Serial Managment * +/********************************** + * Simple Serial Managment * + ********************************** * The interrupt handler is : * * SERIAL_INTERRUPT_HANDLER(void) * * UART0 : Serial over USB * * UART1 : TX p13, RX p14 * * UART2 : TX p28, RX p27 * - * UART3 : TX p9, RX p10 */ + * UART3 : TX p9, RX p10 * + **********************************/ +/** Registers **/ // Serial port (Choose UARTn (0,1,2,3)) #define UART_NUMBER UART0 #define UART_BASE TOKENPASTE2(LPC_,UART_NUMBER) @@ -93,13 +97,13 @@ #define UART3TX_PINSEL_OFFSET 0 #define UARTTX_PINSEL_OFFSET TOKENPASTE2(UART_NUMBER,TX_PINSEL_OFFSET) -#define UART0_PINSEL_VALUE 1UL -#define UART1_PINSEL_VALUE 1UL -#define UART2_PINSEL_VALUE 1UL -#define UART3_PINSEL_VALUE 2UL +#define UART0_PINSEL_VALUE 1U +#define UART1_PINSEL_VALUE 1U +#define UART2_PINSEL_VALUE 1U +#define UART3_PINSEL_VALUE 2U #define UART_PINSEL_VALUE TOKENPASTE2(UART_NUMBER,_PINSEL_VALUE) -// Interrupt handlers +/** Interrupt handlers **/ #define SERIAL_INTERRUPT_HANDLER EXTERN_C void __IRQ TOKENPASTE2(UART_NUMBER,_IRQHandler) /** Bits **/ @@ -122,16 +126,20 @@ #define UART3_PCONP_BIT 25 /** Macros **/ -#define SERIAL_PUTCHAR(c) while (GET_BIT_VALUE(UART_BASE->LSR, THRE_BIT) == 0); \ - UART_BASE->THR = c; +#define SERIAL_PUTCHAR(c) do { \ + while (GET_BIT_VALUE(UART_BASE->LSR, THRE_BIT) == 0); \ + UART_BASE->THR = c; \ + } #define SERIAL_DATA_TO_READ() (GET_BIT_VALUE(UART_BASE->LSR, RDR_BIT) == 1) #define SERIAL_GETCHAR() (UART_BASE->RBR) // Enable interrupt for RX or TX (SERIAL_INT_RX and SERIAL_INT_TX) -#define SERIAL_ENABLE_INTERRUPT(value) UART_BASE->IER = value; \ - ENABLE_INTERRUPT(TOKENPASTE2(UART_NUMBER,_IRQn)); +#define SERIAL_ENABLE_INTERRUPT(value) do { \ + UART_BASE->IER = value; \ + ENABLE_INTERRUPT(TOKENPASTE2(UART_NUMBER,_IRQn)); \ + } while(0) extern __INLINE void SERIAL_INIT() { @@ -142,10 +150,10 @@ // 8-bits, No Parity, 1 stop bit (See 14.4.7 p306) UART_BASE->LCR = 0x03; // Set CCLK as Peripheral Clock for UART (96MHz with mbed library) - UART_PCLK_REG = (UART_PCLK_REG & (~(3UL << UART_PCLK_OFFSET))) | (1UL << UART_PCLK_OFFSET); + UART_PCLK_REG = (UART_PCLK_REG & (~(3UL << UART_PCLK_OFFSET))) | (1U << UART_PCLK_OFFSET); // Define Pin's functions as UART - UARTRX_PINSEL_REG = (UARTRX_PINSEL_REG & (~(3UL << UARTRX_PINSEL_OFFSET))) | (UART_PINSEL_VALUE << UARTRX_PINSEL_OFFSET); - UARTTX_PINSEL_REG = (UARTTX_PINSEL_REG & (~(3UL << UARTTX_PINSEL_OFFSET))) | (UART_PINSEL_VALUE << UARTTX_PINSEL_OFFSET); + UARTRX_PINSEL_REG = (UARTRX_PINSEL_REG & (~(3U << UARTRX_PINSEL_OFFSET))) | (UART_PINSEL_VALUE << UARTRX_PINSEL_OFFSET); + UARTTX_PINSEL_REG = (UARTTX_PINSEL_REG & (~(3U << UARTTX_PINSEL_OFFSET))) | (UART_PINSEL_VALUE << UARTTX_PINSEL_OFFSET); } // See 14.4.5 p303