Simple mbed library with macros
Dependents: SimpleTimer SimpleUART SimpleTimer Stoppuhr1
Revision 6:9e1310782abf, committed 2010-11-13
- Comitter:
- Alkorin
- Date:
- Sat Nov 13 14:47:51 2010 +0000
- Parent:
- 5:b3aa0a49e21f
- Child:
- 7:8443cecf62d1
- Commit message:
- Fixed a bug in SERIAL_SETBAUD
Changed in this revision
--- a/leds.h Sat Nov 13 11:20:42 2010 +0000 +++ b/leds.h Sat Nov 13 14:47:51 2010 +0000 @@ -13,7 +13,9 @@ /** Macros **/ #define LEDS_INIT() LPC_GPIO1->FIODIR |= LEDS_MASK; -#define LEDS_SET(value) LPC_GPIO1->FIOMASK = ~LEDS_MASK; \ - LPC_GPIO1->FIOPIN = (value); +#define LEDS_SET(value) { \ + LPC_GPIO1->FIOMASK = ~LEDS_MASK; \ + LPC_GPIO1->FIOPIN = (value); \ + } #endif \ No newline at end of file
--- a/mbed_globals.h Sat Nov 13 11:20:42 2010 +0000 +++ b/mbed_globals.h Sat Nov 13 14:47:51 2010 +0000 @@ -14,8 +14,9 @@ // See 34.3.2.5 p740 #define BIT_BANDING_ADDRESS(reg, bit) (((reg) & 0xF0000000) | (0x02000000) | (((reg) & 0x000FFFFF) << 5) | ((bit) << 2)) -#define GET_BIT_VALUE(reg, bit) GET_REGISTER32(BIT_BANDING_ADDRESS(((uint32_t)®), bit)) -#define SET_BIT_VALUE(reg, bit, value) SET_REGISTER32(BIT_BANDING_ADDRESS(((uint32_t)®), bit), (value)) +#define GET_BIT_ADDRESS(reg, bit) BIT_BANDING_ADDRESS(((uint32_t)&(reg)), (bit)) +#define GET_BIT_VALUE(reg, bit) GET_REGISTER32(GET_BIT_ADDRESS((reg), (bit))) +#define SET_BIT_VALUE(reg, bit, value) SET_REGISTER32(GET_BIT_ADDRESS((reg), (bit)), (value)) // Macro tools #define TOKENPASTE(x, y) x ## y
--- a/serial.h Sat Nov 13 11:20:42 2010 +0000 +++ b/serial.h Sat Nov 13 14:47:51 2010 +0000 @@ -46,7 +46,8 @@ // 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)); - + +// UART0 is enabled by default ? #define SERIAL_INIT() LPC_SC->PCONP |= (1UL << 3); \ UART_BASE->FCR = 0x07; \ UART_BASE->LCR = 0x03; \ @@ -55,7 +56,7 @@ LPC_PINCON->PINSEL0 &= ~(1UL << 4); \ LPC_PINCON->PINSEL0 |= (1UL << 4); \ LPC_PINCON->PINSEL0 &= ~(1UL << 6); \ - LPC_PINCON->PINSEL0 |= (1UL << 6); \ + LPC_PINCON->PINSEL0 |= (1UL << 6); // See 14.4.5 p303 inline int SERIAL_CHECK_INTERRUPT(void) { @@ -77,10 +78,10 @@ uint16_t divisorValue = ((SystemCoreClock / 16 / baud) * divisors[UART_PCLK]); - SET_BIT_VALUE(UART_BASE->LCR, DLA_BIT, 1); + UART_BASE->LCR |= (1 << DLA_BIT); UART_BASE->DLM = (uint8_t) (divisorValue >> 8); UART_BASE->DLL = (uint8_t) divisorValue; - SET_BIT_VALUE(UART_BASE->LCR, DLA_BIT, 0); + UART_BASE->LCR &= ~(1 << DLA_BIT); } #endif \ No newline at end of file