Simple mbed library with macros
Dependents: SimpleTimer SimpleUART SimpleTimer Stoppuhr1
Revision 4:afddc4848b6c, committed 2010-11-09
- Comitter:
- Alkorin
- Date:
- Tue Nov 09 12:40:55 2010 +0000
- Parent:
- 3:0b94bf95c552
- Child:
- 5:b3aa0a49e21f
- Commit message:
- Added interrupt names and default handlers (from CMSIS)
Changed in this revision
--- a/interrupt.h Mon Nov 08 12:34:34 2010 +0000 +++ b/interrupt.h Tue Nov 09 12:40:55 2010 +0000 @@ -1,16 +1,80 @@ -#ifndef __INTERRUPT_H__ -#define __INTERRUPT_H__ - -/** Interrupt Managment **/ -// Interrupt Set-Enable Register 0 (ISER0, 6.5.1 p79) -#define ISER0 (LPC_CM3_BASE + 0xE100) -// Interrupt Clear-Enable Register 0 (ICER0, 6.5.3 p79) -#define ICER0 (LPC_CM3_BASE + 0xE180) - -#define ENABLE_INTERRUPT(intr) SET_REGISTER32(ISER0, intr) -#define DISABLE_INTERRUPT(intr) SET_REGISTER32(ICER0, intr) - -// UART0 Interrupt (ISER0 - ICER0, 6.5.1 p77 - 6.5.3 p79) -#define INT_UART0 (1<<5) - +#ifndef __INTERRUPT_H__ +#define __INTERRUPT_H__ + +/** Interrupt Managment **/ +#define ENABLE_INTERRUPT(intr) NVIC_EnableIRQ(intr) +#define DISABLE_INTERRUPT(intr) NVIC_DisableIRQ(intr) + +/* Interrupts names + * WDT_IRQn Watchdog Timer Interrupt + * TIMER0_IRQn Timer0 Interrupt + * TIMER1_IRQn Timer1 Interrupt + * TIMER2_IRQn Timer2 Interrupt + * TIMER3_IRQn Timer3 Interrupt + * UART0_IRQn UART0 Interrupt + * UART1_IRQn UART1 Interrupt + * UART2_IRQn UART2 Interrupt + * UART3_IRQn UART3 Interrupt + * PWM1_IRQn PWM1 Interrupt + * I2C0_IRQn I2C0 Interrupt + * I2C1_IRQn I2C1 Interrupt + * I2C2_IRQn I2C2 Interrupt + * SPI_IRQn SPI Interrupt + * SSP0_IRQn SSP0 Interrupt + * SSP1_IRQn SSP1 Interrupt + * PLL0_IRQn PLL0 Lock (Main PLL) Interrupt + * RTC_IRQn Real Time Clock Interrupt + * EINT0_IRQn External Interrupt 0 Interrupt + * EINT1_IRQn External Interrupt 1 Interrupt + * EINT2_IRQn External Interrupt 2 Interrupt + * EINT3_IRQn External Interrupt 3 Interrupt + * ADC_IRQn A/D Converter Interrupt + * BOD_IRQn Brown-Out Detect Interrupt + * USB_IRQn USB Interrupt + * CAN_IRQn CAN Interrupt + * DMA_IRQn General Purpose DMA Interrupt + * I2S_IRQn I2S Interrupt + * ENET_IRQn Ethernet Interrupt + * RIT_IRQn Repetitive Interrupt Timer Interrupt + * MCPWM_IRQn Motor Control PWM Interrupt + * QEI_IRQn Quadrature Encoder Interface Interrupt + * PLL1_IRQn PLL1 Lock (USB PLL) Interrupt + */ + +/* Default interrupt handlers + * WDT_IRQHandler + * TIMER0_IRQHandler + * TIMER1_IRQHandler + * TIMER2_IRQHandler + * TIMER3_IRQHandler + * UART0_IRQHandler + * UART1_IRQHandler + * UART2_IRQHandler + * UART3_IRQHandler + * PWM1_IRQHandler + * I2C0_IRQHandler + * I2C1_IRQHandler + * I2C2_IRQHandler + * SPI_IRQHandler + * SSP0_IRQHandler + * SSP1_IRQHandler + * PLL0_IRQHandler + * RTC_IRQHandler + * EINT0_IRQHandler + * EINT1_IRQHandler + * EINT2_IRQHandler + * EINT3_IRQHandler + * ADC_IRQHandler + * BOD_IRQHandler + * USB_IRQHandler + * CAN_IRQHandler + * DMA_IRQHandler + * I2S_IRQHandler + * ENET_IRQHandler + * RIT_IRQHandler + * MCPWM_IRQHandler + * QEI_IRQHandler + * PLL1_IRQHandler +*/ + #endif \ No newline at end of file
--- a/leds.h Mon Nov 08 12:34:34 2010 +0000 +++ b/leds.h Tue Nov 09 12:40:55 2010 +0000 @@ -1,27 +1,19 @@ -#ifndef __LEDS_H__ -#define __LEDS_H__ - -#include "mbed_globals.h" - -/** Registers **/ -// GPIO1 Mask register, FIOMASK page 122 -#define LEDS_GPIO_MASK (LPC_GPIO1_BASE + 0x10) -// GPIO1 Pin register, FIOPIN page 122 -#define LEDS_GPIO_PIN (LPC_GPIO1_BASE + 0x14) -// GPIO1 Direction, FIO1DIR page 122 -#define LEDS_GPIO_DIR (LPC_GPIO1_BASE + 0x00) - -/** Bits **/ -#define LED1 (1 << 18) -#define LED2 (1 << 20) -#define LED3 (1 << 21) -#define LED4 (1 << 23) -#define LEDS_MASK (LED1 | LED2 | LED3 | LED4) - -/** Macros **/ -#define LEDS_INIT() GET_REGISTER32(LEDS_GPIO_DIR) |= LEDS_MASK; - -#define LEDS_SET(value) SET_REGISTER32(LEDS_GPIO_MASK, (~LEDS_MASK)); \ - SET_REGISTER32(LEDS_GPIO_PIN, (value)); - +#ifndef __LEDS_H__ +#define __LEDS_H__ + +#include "mbed_globals.h" + +/** Bits **/ +#define LED1 (1 << 18) +#define LED2 (1 << 20) +#define LED3 (1 << 21) +#define LED4 (1 << 23) +#define LEDS_MASK (LED1 | LED2 | LED3 | LED4) + +/** Macros **/ +#define LEDS_INIT() LPC_GPIO1->FIODIR |= LEDS_MASK; + +#define LEDS_SET(value) LPC_GPIO1->FIOMASK = ~LEDS_MASK; \ + LPC_GPIO1->FIOPIN = (value); + #endif \ No newline at end of file
--- a/mbed_globals.h Mon Nov 08 12:34:34 2010 +0000 +++ b/mbed_globals.h Tue Nov 09 12:40:55 2010 +0000 @@ -14,6 +14,7 @@ // 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(reg, bit)) +#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)) #endif \ No newline at end of file
--- a/serial.h Mon Nov 08 12:34:34 2010 +0000 +++ b/serial.h Tue Nov 09 12:40:55 2010 +0000 @@ -1,54 +1,42 @@ -#ifndef __SERIAL_H__ -#define __SERIAL_H__ - -#include "interrupt.h" -#include "mbed_globals.h" - -/** Serial port (Choose UARTn (0,2,3)) **/ -#define UART_BASE LPC_UART0_BASE - -/** Registers **/ -// UARTn Receiver Buffer Register -#define UnRBR 0x00 -// UARTn Transmit Holding Register -#define UnTHR 0x00 -// UARTn Interrupt Enable Register -#define UnIER 0x04 -// UARTn Interrupt Identification Register -#define UnIIR 0x08 -// UARTn Line Status Register -#define UnLSR 0x14 - -/** Bits **/ -// RBR Interrupt Enable (UnIER, 14.4.4 p302) -#define RBR_INT_BIT 0 -// Receiver Data Ready (UnLSR, 14.4.8 p306) -#define RDR_BIT 0 -// Transmitter Holding Register Empty (UnLSR, 14.4.8 p306) -#define THRE_BIT 5 - -/** Macros **/ -#define SERIAL_PUTCHAR(c) while (GET_BIT_VALUE(UART_BASE + UnLSR, THRE_BIT) == 0); \ - SET_REGISTER8(UART_BASE + UnTHR, c) - -#define SERIAL_DATA_TO_READ() (GET_BIT_VALUE(UART_BASE + UnLSR, RDR_BIT) == 1) - -#define SERIAL_GETCHAR() GET_REGISTER8(UART_BASE + UnRBR) - -// See 14.4.5 p303 -inline int SERIAL_CHECK_INTERRUPT(void) { - unsigned int serialStatus = GET_REGISTER32(UART_BASE + UnIIR); - - if (serialStatus & 1) // IntStatus, 1 = No Interrupt is pending. - return 0; - - serialStatus = (serialStatus >> 1) & 0x3; // IntId, 2 = More than threshold data to read, 6 = Some caracters to read - if (serialStatus != 2 && serialStatus != 6) - return 0; - - return 1; -} - -#define SERIAL_SETBAUD(baud) - +#ifndef __SERIAL_H__ +#define __SERIAL_H__ + +#include "interrupt.h" +#include "mbed_globals.h" + +/** Serial port (Choose UARTn (0,2,3)) **/ +#define UART_BASE LPC_UART0 + +/** Bits **/ +// RBR Interrupt Enable (UnIER, 14.4.4 p302) +#define RBR_INT_BIT 0 +// Receiver Data Ready (UnLSR, 14.4.8 p306) +#define RDR_BIT 0 +// Transmitter Holding Register Empty (UnLSR, 14.4.8 p306) +#define THRE_BIT 5 + +/** Macros **/ +#define SERIAL_PUTCHAR(c) 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) + +// See 14.4.5 p303 +inline int SERIAL_CHECK_INTERRUPT(void) { + uint32_t serialStatus = UART_BASE->IIR; + + if (serialStatus & 1) // IntStatus, 1 = No Interrupt is pending. + return 0; + + serialStatus = (serialStatus >> 1) & 0x3; // IntId, 2 = More than threshold data to read, 6 = Some caracters to read + if (serialStatus != 2 && serialStatus != 6) + return 0; + + return 1; +} + +#define SERIAL_SETBAUD(baud) + #endif \ No newline at end of file