diff options
author | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2009-07-17 15:16:50 +0000 |
---|---|---|
committer | Thomas Doerfler <Thomas.Doerfler@embedded-brains.de> | 2009-07-17 15:16:50 +0000 |
commit | 9364cf663fc1dcebcc1b87cc4cec7beae5490031 (patch) | |
tree | a3788a17e3f6a72264a9bde798274805c56d9257 /c/src/lib/libbsp/arm/lpc24xx/include | |
parent | remove obsolete files (diff) | |
download | rtems-9364cf663fc1dcebcc1b87cc4cec7beae5490031.tar.bz2 |
adding lpc24xx BSP parts
Diffstat (limited to 'c/src/lib/libbsp/arm/lpc24xx/include')
-rw-r--r-- | c/src/lib/libbsp/arm/lpc24xx/include/i2c.h | 41 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/lpc24xx/include/idle.h | 41 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/lpc24xx/include/io.h | 166 |
3 files changed, 248 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/arm/lpc24xx/include/i2c.h b/c/src/lib/libbsp/arm/lpc24xx/include/i2c.h new file mode 100644 index 0000000000..f15ade1aad --- /dev/null +++ b/c/src/lib/libbsp/arm/lpc24xx/include/i2c.h @@ -0,0 +1,41 @@ +/** + * @file + * + * @ingroup lpc24xx + * + * LibI2C bus driver for the I2C modules. + */ + +/* + * Copyright (c) 2009 + * embedded brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * <rtems@embedded-brains.de> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + */ + +#ifndef LIBBSP_ARM_LPC24XX_I2C_H +#define LIBBSP_ARM_LPC24XX_I2C_H + +#include <rtems/libi2c.h> + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +extern rtems_libi2c_bus_t * const lpc24xx_i2c_0; + +extern rtems_libi2c_bus_t * const lpc24xx_i2c_1; + +extern rtems_libi2c_bus_t * const lpc24xx_i2c_2; + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* LIBBSP_ARM_LPC24XX_I2C_H */ diff --git a/c/src/lib/libbsp/arm/lpc24xx/include/idle.h b/c/src/lib/libbsp/arm/lpc24xx/include/idle.h new file mode 100644 index 0000000000..116842b465 --- /dev/null +++ b/c/src/lib/libbsp/arm/lpc24xx/include/idle.h @@ -0,0 +1,41 @@ +/** + * @file + * + * @author Sebastian Huber <sebastian.huber@embedded-brains.de> + * + * @ingroup lpc24xx + * + * @brief Idle task + */ + +/* + * Copyright (c) 2009 + * Embedded Brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * rtems@embedded-brains.de + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + */ + +#ifndef LIBBSP_ARM_LPC24XX_IDLE_H +#define LIBBSP_ARM_LPC24XX_IDLE_H + +#include <rtems.h> + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +Thread lpc24xx_idle( uint32_t ignored); + +#define BSP_IDLE_TASK_BODY lpc24xx_idle + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* LIBBSP_ARM_LPC24XX_IDLE_H */ diff --git a/c/src/lib/libbsp/arm/lpc24xx/include/io.h b/c/src/lib/libbsp/arm/lpc24xx/include/io.h new file mode 100644 index 0000000000..c40d29e631 --- /dev/null +++ b/c/src/lib/libbsp/arm/lpc24xx/include/io.h @@ -0,0 +1,166 @@ +/** + * @file + * + * @ingroup lpc24xx + * + * Input and output module. + */ + +/* + * Copyright (c) 2009 + * embedded brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * <rtems@embedded-brains.de> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + */ + +#ifndef LIBBSP_ARM_LPC24XX_IO_H +#define LIBBSP_ARM_LPC24XX_IO_H + +#include <rtems.h> + +#include <bsp/lpc24xx.h> + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#define LPC24XX_IO_PORT_COUNT 5U + +#define LPC24XX_IO_INDEX_MAX (LPC24XX_IO_PORT_COUNT * 32U) + +#define LPC24XX_IO_INDEX_BY_PORT( port, bit) (((port) << 5U) + (bit)) + +#define LPC24XX_IO_PORT( index) (index >> 5U) + +#define LPC24XX_IO_PORT_BIT( index) (index & 0x1fU) + +typedef enum { + LPC24XX_MODULE_ACF, + LPC24XX_MODULE_ADC, + LPC24XX_MODULE_BAT_RAM, + LPC24XX_MODULE_CAN, + LPC24XX_MODULE_DAC, + LPC24XX_MODULE_EMC, + LPC24XX_MODULE_ETHERNET, + LPC24XX_MODULE_GPDMA, + LPC24XX_MODULE_GPIO, + LPC24XX_MODULE_I2C, + LPC24XX_MODULE_I2S, + LPC24XX_MODULE_LCD, + LPC24XX_MODULE_MCI, + LPC24XX_MODULE_PCB, + LPC24XX_MODULE_PWM, + LPC24XX_MODULE_RTC, + LPC24XX_MODULE_SPI, + LPC24XX_MODULE_SSP, + LPC24XX_MODULE_SYSCON, + LPC24XX_MODULE_TIMER, + LPC24XX_MODULE_UART, + LPC24XX_MODULE_USB, + LPC24XX_MODULE_WDT, + LPC24XX_MODULE_NUMBER +} lpc24xx_module; + +typedef enum { + LPC24XX_MODULE_PCLK_DEFAULT = 0x0U, + LPC24XX_MODULE_CCLK = 0x1U, + LPC24XX_MODULE_CCLK_2 = 0x2U, + LPC24XX_MODULE_CCLK_4 = 0x0U, + LPC24XX_MODULE_CCLK_6 = 0x3U, + LPC24XX_MODULE_CCLK_8 = 0x3U +} lpc24xx_module_clock; + +#define LPC24XX_MODULE_CLOCK_MASK 0x3U + +typedef enum { + LPC24XX_GPIO_DEFAULT = 0x0U, + LPC24XX_GPIO_RESISTOR_DEFAULT = 0x0U, + LPC24XX_GPIO_RESISTOR_NONE = 0x1U, + LPC24XX_GPIO_RESISTOR_PULL_UP = 0x2U, + LPC24XX_GPIO_RESISTOR_PULL_DOWN = 0x3U, + LPC24XX_GPIO_INPUT = 0x0U, + LPC24XX_GPIO_OUTPUT = 0x8U +} lpc24xx_gpio_settings; + +#define LPC24XX_GPIO_RESISTOR_MASK 0x3U + +rtems_status_code lpc24xx_module_enable( + lpc24xx_module module, + unsigned index, + lpc24xx_module_clock clock +); + +rtems_status_code lpc24xx_module_disable( + lpc24xx_module module, + unsigned index +); + +rtems_status_code lpc24xx_io_config( + lpc24xx_module module, + unsigned index, + unsigned config +); + +rtems_status_code lpc24xx_io_release( + lpc24xx_module module, + unsigned index, + unsigned config +); + +rtems_status_code lpc24xx_gpio_config( + unsigned index, + lpc24xx_gpio_settings settings +); + +static inline void lpc24xx_gpio_set( unsigned index) +{ + if (index <= LPC24XX_IO_INDEX_MAX) { + unsigned port = LPC24XX_IO_PORT( index); + unsigned bit = LPC24XX_IO_PORT_BIT( index); + + LPC24XX_FIO [port].set = 1U << bit; + } +} + +static inline void lpc24xx_gpio_clear( unsigned index) +{ + if (index <= LPC24XX_IO_INDEX_MAX) { + unsigned port = LPC24XX_IO_PORT( index); + unsigned bit = LPC24XX_IO_PORT_BIT( index); + + LPC24XX_FIO [port].clr = 1U << bit; + } +} + +static inline void lpc24xx_gpio_write( unsigned index, bool value) +{ + if (value) { + lpc24xx_gpio_set( index); + } else { + lpc24xx_gpio_clear( index); + } +} + +static inline bool lpc24xx_gpio_get( unsigned index) +{ + if (index <= LPC24XX_IO_INDEX_MAX) { + unsigned port = LPC24XX_IO_PORT( index); + unsigned bit = LPC24XX_IO_PORT_BIT( index); + + return (LPC24XX_FIO [port].pin & (1U << bit)) != 0; + } else { + return false; + } +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* LIBBSP_ARM_LPC24XX_IO_H */ |