LPC11xx.h 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. /**************************************************************************//**
  2. * @file LPC11xx.h
  3. * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File for
  4. * NXP LPC11xx Device Series
  5. * @version V1.00
  6. * @date 17. November 2009
  7. *
  8. * @note
  9. * Copyright (C) 2009 ARM Limited. All rights reserved.
  10. *
  11. * @par
  12. * ARM Limited (ARM) is supplying this software for use with Cortex-M
  13. * processor based microcontrollers. This file can be freely distributed
  14. * within development tools that are supporting such ARM based processors.
  15. *
  16. * @par
  17. * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
  18. * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
  19. * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
  20. * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
  21. * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
  22. *
  23. ******************************************************************************/
  24. #ifndef __LPC11xx_H__
  25. #define __LPC11xx_H__
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29. /** @addtogroup LPC11xx_Definitions LPC11xx Definitions
  30. This file defines all structures and symbols for LPC11xx:
  31. - Registers and bitfields
  32. - peripheral base address
  33. - peripheral ID
  34. - PIO definitions
  35. @{
  36. */
  37. /******************************************************************************/
  38. /* Processor and Core Peripherals */
  39. /******************************************************************************/
  40. /** @addtogroup LPC11xx_CMSIS LPC11xx CMSIS Definitions
  41. Configuration of the Cortex-M0 Processor and Core Peripherals
  42. @{
  43. */
  44. /*
  45. * ==========================================================================
  46. * ---------- Interrupt Number Definition -----------------------------------
  47. * ==========================================================================
  48. */
  49. typedef enum IRQn
  50. {
  51. /****** Cortex-M0 Processor Exceptions Numbers ***************************************************/
  52. NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */
  53. HardFault_IRQn = -13, /*!< 3 Cortex-M0 Hard Fault Interrupt */
  54. SVCall_IRQn = -5, /*!< 11 Cortex-M0 SV Call Interrupt */
  55. PendSV_IRQn = -2, /*!< 14 Cortex-M0 Pend SV Interrupt */
  56. SysTick_IRQn = -1, /*!< 15 Cortex-M0 System Tick Interrupt */
  57. /****** LPC11xx Specific Interrupt Numbers *******************************************************/
  58. WAKEUP0_IRQn = 0, /*!< All I/O pins can be used as wakeup source. */
  59. WAKEUP1_IRQn = 1, /*!< There are 13 pins in total for LPC11xx */
  60. WAKEUP2_IRQn = 2,
  61. WAKEUP3_IRQn = 3,
  62. WAKEUP4_IRQn = 4,
  63. WAKEUP5_IRQn = 5,
  64. WAKEUP6_IRQn = 6,
  65. WAKEUP7_IRQn = 7,
  66. WAKEUP8_IRQn = 8,
  67. WAKEUP9_IRQn = 9,
  68. WAKEUP10_IRQn = 10,
  69. WAKEUP11_IRQn = 11,
  70. WAKEUP12_IRQn = 12,
  71. SSP1_IRQn = 14, /*!< SSP1 Interrupt */
  72. I2C_IRQn = 15, /*!< I2C Interrupt */
  73. TIMER_16_0_IRQn = 16, /*!< 16-bit Timer0 Interrupt */
  74. TIMER_16_1_IRQn = 17, /*!< 16-bit Timer1 Interrupt */
  75. TIMER_32_0_IRQn = 18, /*!< 32-bit Timer0 Interrupt */
  76. TIMER_32_1_IRQn = 19, /*!< 32-bit Timer1 Interrupt */
  77. SSP0_IRQn = 20, /*!< SSP0 Interrupt */
  78. UART_IRQn = 21, /*!< UART Interrupt */
  79. ADC_IRQn = 24, /*!< A/D Converter Interrupt */
  80. WDT_IRQn = 25, /*!< Watchdog timer Interrupt */
  81. BOD_IRQn = 26, /*!< Brown Out Detect(BOD) Interrupt */
  82. EINT3_IRQn = 28, /*!< External Interrupt 3 Interrupt */
  83. EINT2_IRQn = 29, /*!< External Interrupt 2 Interrupt */
  84. EINT1_IRQn = 30, /*!< External Interrupt 1 Interrupt */
  85. EINT0_IRQn = 31, /*!< External Interrupt 0 Interrupt */
  86. } IRQn_Type;
  87. /*
  88. * ==========================================================================
  89. * ----------- Processor and Core Peripheral Section ------------------------
  90. * ==========================================================================
  91. */
  92. /* Configuration of the Cortex-M3 Processor and Core Peripherals */
  93. #define __MPU_PRESENT 0 /*!< MPU present or not */
  94. #define __NVIC_PRIO_BITS 3 /*!< Number of Bits used for Priority Levels */
  95. #define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */
  96. /*@}*/ /* end of group LPC11xx_CMSIS */
  97. #include "core_cm0.h" /* Cortex-M0 processor and core peripherals */
  98. #include "system_LPC11xx.h" /* System Header */
  99. /******************************************************************************/
  100. /* Device Specific Peripheral Registers structures */
  101. /******************************************************************************/
  102. #if defined ( __CC_ARM )
  103. #pragma anon_unions
  104. #endif
  105. /*------------- System Control (SYSCON) --------------------------------------*/
  106. /** @addtogroup LPC11xx_SYSCON LPC11xx System Control Block
  107. @{
  108. */
  109. typedef struct
  110. {
  111. __IO uint32_t SYSMEMREMAP; /*!< Offset: 0x000 System memory remap (R/W) */
  112. __IO uint32_t PRESETCTRL; /*!< Offset: 0x004 Peripheral reset control (R/W) */
  113. __IO uint32_t SYSPLLCTRL; /*!< Offset: 0x008 System PLL control (R/W) */
  114. __IO uint32_t SYSPLLSTAT; /*!< Offset: 0x00C System PLL status (R/ ) */
  115. uint32_t RESERVED0[4];
  116. __IO uint32_t SYSOSCCTRL; /*!< Offset: 0x020 System oscillator control (R/W) */
  117. __IO uint32_t WDTOSCCTRL; /*!< Offset: 0x024 Watchdog oscillator control (R/W) */
  118. __IO uint32_t IRCCTRL; /*!< Offset: 0x028 IRC control (R/W) */
  119. uint32_t RESERVED1[1];
  120. __IO uint32_t SYSRESSTAT; /*!< Offset: 0x030 System reset status Register (R/ ) */
  121. uint32_t RESERVED2[3];
  122. __IO uint32_t SYSPLLCLKSEL; /*!< Offset: 0x040 System PLL clock source select (R/W) */
  123. __IO uint32_t SYSPLLCLKUEN; /*!< Offset: 0x044 System PLL clock source update enable (R/W) */
  124. uint32_t RESERVED3[10];
  125. __IO uint32_t MAINCLKSEL; /*!< Offset: 0x070 Main clock source select (R/W) */
  126. __IO uint32_t MAINCLKUEN; /*!< Offset: 0x074 Main clock source update enable (R/W) */
  127. __IO uint32_t SYSAHBCLKDIV; /*!< Offset: 0x078 System AHB clock divider (R/W) */
  128. uint32_t RESERVED4[1];
  129. __IO uint32_t SYSAHBCLKCTRL; /*!< Offset: 0x080 System AHB clock control (R/W) */
  130. uint32_t RESERVED5[4];
  131. __IO uint32_t SSP0CLKDIV; /*!< Offset: 0x094 SSP0 clock divider (R/W) */
  132. __IO uint32_t UARTCLKDIV; /*!< Offset: 0x098 UART clock divider (R/W) */
  133. __IO uint32_t SSP1CLKDIV; /*!< Offset: 0x09C SSP1 clock divider (R/W) */
  134. uint32_t RESERVED6[4];
  135. __IO uint32_t SYSTICKCLKDIV; /*!< Offset: 0x0B0 SYSTICK clock divider (R/W) */
  136. uint32_t RESERVED7[7];
  137. __IO uint32_t WDTCLKSEL; /*!< Offset: 0x0D0 WDT clock source select (R/W) */
  138. __IO uint32_t WDTCLKUEN; /*!< Offset: 0x0D4 WDT clock source update enable (R/W) */
  139. __IO uint32_t WDTCLKDIV; /*!< Offset: 0x0D8 WDT clock divider (R/W) */
  140. uint32_t RESERVED8[1];
  141. __IO uint32_t CLKOUTCLKSEL; /*!< Offset: 0x0E0 CLKOUT clock source select (R/W) */
  142. __IO uint32_t CLKOUTUEN; /*!< Offset: 0x0E4 CLKOUT clock source update enable (R/W) */
  143. __IO uint32_t CLKOUTDIV; /*!< Offset: 0x0E8 CLKOUT clock divider (R/W) */
  144. uint32_t RESERVED9[5];
  145. __IO uint32_t PIOPORCAP0; /*!< Offset: 0x100 POR captured PIO status 0 (R/ ) */
  146. __IO uint32_t PIOPORCAP1; /*!< Offset: 0x104 POR captured PIO status 1 (R/ ) */
  147. uint32_t RESERVED10[18];
  148. __IO uint32_t BODCTRL; /*!< Offset: 0x150 BOD control (R/W) */
  149. uint32_t RESERVED11[1];
  150. __IO uint32_t SYSTCKCAL; /*!< Offset: 0x158 System tick counter calibration (R/W) */
  151. uint32_t RESERVED12[41];
  152. __IO uint32_t STARTAPRP0; /*!< Offset: 0x200 Start logic edge control Register 0 (R/W) */
  153. __IO uint32_t STARTERP0; /*!< Offset: 0x204 Start logic signal enable Register 0 (R/W) */
  154. __IO uint32_t STARTRSRP0CLR; /*!< Offset: 0x208 Start logic reset Register 0 ( /W) */
  155. __IO uint32_t STARTSRP0; /*!< Offset: 0x20C Start logic status Register 0 (R/W) */
  156. uint32_t RESERVED14[8];
  157. __IO uint32_t PDSLEEPCFG; /*!< Offset: 0x230 Power-down states in Deep-sleep mode (R/W) */
  158. __IO uint32_t PDAWAKECFG; /*!< Offset: 0x234 Power-down states after wake-up (R/W) */
  159. __IO uint32_t PDRUNCFG; /*!< Offset: 0x238 Power-down configuration Register (R/W) */
  160. uint32_t RESERVED15[110];
  161. __I uint32_t DEVICE_ID; /*!< Offset: 0x3F4 Device ID (R/ ) */
  162. } LPC_SYSCON_TypeDef;
  163. /*@}*/ /* end of group LPC11xx_SYSCON */
  164. /*------------- Pin Connect Block (IOCON) --------------------------------*/
  165. /** @addtogroup LPC11xx_IOCON LPC11xx I/O Configuration Block
  166. @{
  167. */
  168. typedef struct
  169. {
  170. __IO uint32_t PIO2_6; /*!< Offset: 0x000 I/O configuration for pin PIO2_6 (R/W) */
  171. uint32_t RESERVED0[1];
  172. __IO uint32_t PIO2_0; /*!< Offset: 0x008 I/O configuration for pin PIO2_0/DTR/SSEL1 (R/W) */
  173. __IO uint32_t RESET_PIO0_0; /*!< Offset: 0x00C I/O configuration for pin RESET/PIO0_0 (R/W) */
  174. __IO uint32_t PIO0_1; /*!< Offset: 0x010 I/O configuration for pin PIO0_1/CLKOUT/CT32B0_MAT2 (R/W) */
  175. __IO uint32_t PIO1_8; /*!< Offset: 0x014 I/O configuration for pin PIO1_8/CT16B1_CAP0 (R/W) */
  176. uint32_t RESERVED1[1];
  177. __IO uint32_t PIO0_2; /*!< Offset: 0x01C I/O configuration for pin PIO0_2/SSEL0/CT16B0_CAP0 (R/W) */
  178. __IO uint32_t PIO2_7; /*!< Offset: 0x020 I/O configuration for pin PIO2_7 (R/W) */
  179. __IO uint32_t PIO2_8; /*!< Offset: 0x024 I/O configuration for pin PIO2_8 (R/W) */
  180. __IO uint32_t PIO2_1; /*!< Offset: 0x028 I/O configuration for pin PIO2_1/nDSR/SCK1 (R/W) */
  181. __IO uint32_t PIO0_3; /*!< Offset: 0x02C I/O configuration for pin PIO0_3 (R/W) */
  182. __IO uint32_t PIO0_4; /*!< Offset: 0x030 I/O configuration for pin PIO0_4/SCL (R/W) */
  183. __IO uint32_t PIO0_5; /*!< Offset: 0x034 I/O configuration for pin PIO0_5/SDA (R/W) */
  184. __IO uint32_t PIO1_9; /*!< Offset: 0x038 I/O configuration for pin PIO1_9/CT16B1_MAT0 (R/W) */
  185. __IO uint32_t PIO3_4; /*!< Offset: 0x03C I/O configuration for pin PIO3_4 (R/W) */
  186. __IO uint32_t PIO2_4; /*!< Offset: 0x040 I/O configuration for pin PIO2_4 (R/W) */
  187. __IO uint32_t PIO2_5; /*!< Offset: 0x044 I/O configuration for pin PIO2_5 (R/W) */
  188. __IO uint32_t PIO3_5; /*!< Offset: 0x048 I/O configuration for pin PIO3_5 (R/W) */
  189. __IO uint32_t PIO0_6; /*!< Offset: 0x04C I/O configuration for pin PIO0_6/SCK0 (R/W) */
  190. __IO uint32_t PIO0_7; /*!< Offset: 0x050 I/O configuration for pin PIO0_7/nCTS (R/W) */
  191. __IO uint32_t PIO2_9; /*!< Offset: 0x054 I/O configuration for pin PIO2_9 (R/W) */
  192. __IO uint32_t PIO2_10; /*!< Offset: 0x058 I/O configuration for pin PIO2_10 (R/W) */
  193. __IO uint32_t PIO2_2; /*!< Offset: 0x05C I/O configuration for pin PIO2_2/DCD/MISO1 (R/W) */
  194. __IO uint32_t PIO0_8; /*!< Offset: 0x060 I/O configuration for pin PIO0_8/MISO0/CT16B0_MAT0 (R/W) */
  195. __IO uint32_t PIO0_9; /*!< Offset: 0x064 I/O configuration for pin PIO0_9/MOSI0/CT16B0_MAT1 (R/W) */
  196. __IO uint32_t JTAG_TCK_PIO0_10; /*!< Offset: 0x068 I/O configuration for pin SWCLK/PIO0_10/SCK0/CT16B0_MAT2 (R/W) */
  197. __IO uint32_t PIO1_10; /*!< Offset: 0x06C I/O configuration for pin PIO1_10/AD6/CT16B1_MAT1 (R/W) */
  198. __IO uint32_t PIO2_11; /*!< Offset: 0x070 I/O configuration for pin PIO2_11/SCK0 (R/W) */
  199. __IO uint32_t JTAG_TDI_PIO0_11; /*!< Offset: 0x074 I/O configuration for pin TDI/PIO0_11/AD0/CT32B0_MAT3 (R/W) */
  200. __IO uint32_t JTAG_TMS_PIO1_0; /*!< Offset: 0x078 I/O configuration for pin TMS/PIO1_0/AD1/CT32B1_CAP0 (R/W) */
  201. __IO uint32_t JTAG_TDO_PIO1_1; /*!< Offset: 0x07C I/O configuration for pin TDO/PIO1_1/AD2/CT32B1_MAT0 (R/W) */
  202. __IO uint32_t JTAG_nTRST_PIO1_2; /*!< Offset: 0x080 I/O configuration for pin nTRST/PIO1_2/AD3/CT32B1_MAT1 (R/W) */
  203. __IO uint32_t PIO3_0; /*!< Offset: 0x084 I/O configuration for pin PIO3_0/nDTR (R/W) */
  204. __IO uint32_t PIO3_1; /*!< Offset: 0x088 I/O configuration for pin PIO3_1/nDSR (R/W) */
  205. __IO uint32_t PIO2_3; /*!< Offset: 0x08C I/O configuration for pin PIO2_3/RI/MOSI1 (R/W) */
  206. __IO uint32_t ARM_SWDIO_PIO1_3; /*!< Offset: 0x090 I/O configuration for pin SWDIO/PIO1_3/AD4/CT32B1_MAT2 (R/W) */
  207. __IO uint32_t PIO1_4; /*!< Offset: 0x094 I/O configuration for pin PIO1_4/AD5/CT32B1_MAT3 (R/W) */
  208. __IO uint32_t PIO1_11; /*!< Offset: 0x098 I/O configuration for pin PIO1_11/AD7 (R/W) */
  209. __IO uint32_t PIO3_2; /*!< Offset: 0x09C I/O configuration for pin PIO3_2/nDCD (R/W) */
  210. __IO uint32_t PIO1_5; /*!< Offset: 0x0A0 I/O configuration for pin PIO1_5/nRTS/CT32B0_CAP0 (R/W) */
  211. __IO uint32_t PIO1_6; /*!< Offset: 0x0A4 I/O configuration for pin PIO1_6/RXD/CT32B0_MAT0 (R/W) */
  212. __IO uint32_t PIO1_7; /*!< Offset: 0x0A8 I/O configuration for pin PIO1_7/TXD/CT32B0_MAT1 (R/W) */
  213. __IO uint32_t PIO3_3; /*!< Offset: 0x0AC I/O configuration for pin PIO3_3/nRI (R/W) */
  214. __IO uint32_t SCK_LOC; /*!< Offset: 0x0B0 SCK pin location select Register (R/W) */
  215. __IO uint32_t DSR_LOC; /*!< Offset: 0x0B4 DSR pin location select Register (R/W) */
  216. __IO uint32_t DCD_LOC; /*!< Offset: 0x0B8 DCD pin location select Register (R/W) */
  217. __IO uint32_t RI_LOC; /*!< Offset: 0x0BC RI pin location Register (R/W) */
  218. } LPC_IOCON_TypeDef;
  219. /*@}*/ /* end of group LPC11xx_IOCON */
  220. /*------------- Power Management Unit (PMU) --------------------------*/
  221. /** @addtogroup LPC11xx_PMU LPC11xx Power Management Unit
  222. @{
  223. */
  224. typedef struct
  225. {
  226. __IO uint32_t PCON; /*!< Offset: 0x000 Power control Register (R/W) */
  227. __IO uint32_t GPREG0; /*!< Offset: 0x004 General purpose Register 0 (R/W) */
  228. __IO uint32_t GPREG1; /*!< Offset: 0x008 General purpose Register 1 (R/W) */
  229. __IO uint32_t GPREG2; /*!< Offset: 0x00C General purpose Register 2 (R/W) */
  230. __IO uint32_t GPREG3; /*!< Offset: 0x010 General purpose Register 3 (R/W) */
  231. __IO uint32_t GPREG4; /*!< Offset: 0x014 General purpose Register 4 (R/W) */
  232. } LPC_PMU_TypeDef;
  233. /*@}*/ /* end of group LPC11xx_PMU */
  234. /*------------- General Purpose Input/Output (GPIO) --------------------------*/
  235. /** @addtogroup LPC11xx_GPIO LPC11xx General Purpose Input/Output
  236. @{
  237. */
  238. typedef struct
  239. {
  240. union {
  241. __IO uint32_t MASKED_ACCESS[4096]; /*!< Offset: 0x0000 to 0x3FFC Port data Register for pins PIOn_0 to PIOn_11 (R/W) */
  242. struct {
  243. uint32_t RESERVED0[4095];
  244. __IO uint32_t DATA; /*!< Offset: 0x3FFC Port data Register (R/W) */
  245. };
  246. };
  247. uint32_t RESERVED1[4096];
  248. __IO uint32_t DIR; /*!< Offset: 0x8000 Data direction Register (R/W) */
  249. __IO uint32_t IS; /*!< Offset: 0x8004 Interrupt sense Register (R/W) */
  250. __IO uint32_t IBE; /*!< Offset: 0x8008 Interrupt both edges Register (R/W) */
  251. __IO uint32_t IEV; /*!< Offset: 0x800C Interrupt event Register (R/W) */
  252. __IO uint32_t IE; /*!< Offset: 0x8010 Interrupt mask Register (R/W) */
  253. __IO uint32_t RIS; /*!< Offset: 0x8014 Raw interrupt status Register (R/ ) */
  254. __IO uint32_t MIS; /*!< Offset: 0x8018 Masked interrupt status Register (R/ ) */
  255. __IO uint32_t IC; /*!< Offset: 0x801C Interrupt clear Register (R/W) */
  256. } LPC_GPIO_TypeDef;
  257. /*@}*/ /* end of group LPC11xx_GPIO */
  258. /*------------- Timer (TMR) --------------------------------------------------*/
  259. /** @addtogroup LPC11xx_TMR LPC11xx 16/32-bit Counter/Timer
  260. @{
  261. */
  262. typedef struct
  263. {
  264. __IO uint32_t IR; /*!< Offset: 0x000 Interrupt Register (R/W) */
  265. __IO uint32_t TCR; /*!< Offset: 0x004 Timer Control Register (R/W) */
  266. __IO uint32_t TC; /*!< Offset: 0x008 Timer Counter Register (R/W) */
  267. __IO uint32_t PR; /*!< Offset: 0x00C Prescale Register (R/W) */
  268. __IO uint32_t PC; /*!< Offset: 0x010 Prescale Counter Register (R/W) */
  269. __IO uint32_t MCR; /*!< Offset: 0x014 Match Control Register (R/W) */
  270. __IO uint32_t MR0; /*!< Offset: 0x018 Match Register 0 (R/W) */
  271. __IO uint32_t MR1; /*!< Offset: 0x01C Match Register 1 (R/W) */
  272. __IO uint32_t MR2; /*!< Offset: 0x020 Match Register 2 (R/W) */
  273. __IO uint32_t MR3; /*!< Offset: 0x024 Match Register 3 (R/W) */
  274. __IO uint32_t CCR; /*!< Offset: 0x028 Capture Control Register (R/W) */
  275. __I uint32_t CR0; /*!< Offset: 0x02C Capture Register 0 (R/ ) */
  276. uint32_t RESERVED1[3];
  277. __IO uint32_t EMR; /*!< Offset: 0x03C External Match Register (R/W) */
  278. uint32_t RESERVED2[12];
  279. __IO uint32_t CTCR; /*!< Offset: 0x070 Count Control Register (R/W) */
  280. __IO uint32_t PWMC; /*!< Offset: 0x074 PWM Control Register (R/W) */
  281. } LPC_TMR_TypeDef;
  282. /*@}*/ /* end of group LPC11xx_TMR */
  283. /*------------- Universal Asynchronous Receiver Transmitter (UART) -----------*/
  284. /** @addtogroup LPC11xx_UART LPC11xx Universal Asynchronous Receiver/Transmitter
  285. @{
  286. */
  287. typedef struct
  288. {
  289. union {
  290. __I uint32_t RBR; /*!< Offset: 0x000 Receiver Buffer Register (R/ ) */
  291. __O uint32_t THR; /*!< Offset: 0x000 Transmit Holding Register ( /W) */
  292. __IO uint32_t DLL; /*!< Offset: 0x000 Divisor Latch LSB (R/W) */
  293. };
  294. union {
  295. __IO uint32_t DLM; /*!< Offset: 0x004 Divisor Latch MSB (R/W) */
  296. __IO uint32_t IER; /*!< Offset: 0x000 Interrupt Enable Register (R/W) */
  297. };
  298. union {
  299. __I uint32_t IIR; /*!< Offset: 0x008 Interrupt ID Register (R/ ) */
  300. __O uint32_t FCR; /*!< Offset: 0x008 FIFO Control Register ( /W) */
  301. };
  302. __IO uint32_t LCR; /*!< Offset: 0x00C Line Control Register (R/W) */
  303. __IO uint32_t MCR; /*!< Offset: 0x010 Modem control Register (R/W) */
  304. __I uint32_t LSR; /*!< Offset: 0x014 Line Status Register (R/ ) */
  305. __I uint32_t MSR; /*!< Offset: 0x018 Modem status Register (R/ ) */
  306. __IO uint32_t SCR; /*!< Offset: 0x01C Scratch Pad Register (R/W) */
  307. __IO uint32_t ACR; /*!< Offset: 0x020 Auto-baud Control Register (R/W) */
  308. uint32_t RESERVED0;
  309. __IO uint32_t FDR; /*!< Offset: 0x028 Fractional Divider Register (R/W) */
  310. uint32_t RESERVED1;
  311. __IO uint32_t TER; /*!< Offset: 0x030 Transmit Enable Register (R/W) */
  312. uint32_t RESERVED2[6];
  313. __IO uint32_t RS485CTRL; /*!< Offset: 0x04C RS-485/EIA-485 Control Register (R/W) */
  314. __IO uint32_t ADRMATCH; /*!< Offset: 0x050 RS-485/EIA-485 address match Register (R/W) */
  315. __IO uint32_t RS485DLY; /*!< Offset: 0x054 RS-485/EIA-485 direction control delay Register (R/W) */
  316. __I uint32_t FIFOLVL; /*!< Offset: 0x058 FIFO Level Register (R/ ) */
  317. } LPC_UART_TypeDef;
  318. /*@}*/ /* end of group LPC11xx_UART */
  319. /*------------- Synchronous Serial Communication (SSP) -----------------------*/
  320. /** @addtogroup LPC11xx_SSP LPC11xx Synchronous Serial Port
  321. @{
  322. */
  323. typedef struct
  324. {
  325. __IO uint32_t CR0; /*!< Offset: 0x000 Control Register 0 (R/W) */
  326. __IO uint32_t CR1; /*!< Offset: 0x004 Control Register 1 (R/W) */
  327. __IO uint32_t DR; /*!< Offset: 0x008 Data Register (R/W) */
  328. __I uint32_t SR; /*!< Offset: 0x00C Status Registe (R/ ) */
  329. __IO uint32_t CPSR; /*!< Offset: 0x010 Clock Prescale Register (R/W) */
  330. __IO uint32_t IMSC; /*!< Offset: 0x014 Interrupt Mask Set and Clear Register (R/W) */
  331. __IO uint32_t RIS; /*!< Offset: 0x018 Raw Interrupt Status Register (R/W) */
  332. __IO uint32_t MIS; /*!< Offset: 0x01C Masked Interrupt Status Register (R/W) */
  333. __IO uint32_t ICR; /*!< Offset: 0x020 SSPICR Interrupt Clear Register (R/W) */
  334. } LPC_SSP_TypeDef;
  335. /*@}*/ /* end of group LPC11xx_SSP */
  336. /*------------- Inter-Integrated Circuit (I2C) -------------------------------*/
  337. /** @addtogroup LPC11xx_I2C LPC11xx I2C-Bus Interface
  338. @{
  339. */
  340. typedef struct
  341. {
  342. __IO uint32_t CONSET; /*!< Offset: 0x000 I2C Control Set Register (R/W) */
  343. __I uint32_t STAT; /*!< Offset: 0x004 I2C Status Register (R/ ) */
  344. __IO uint32_t DAT; /*!< Offset: 0x008 I2C Data Register (R/W) */
  345. __IO uint32_t ADR0; /*!< Offset: 0x00C I2C Slave Address Register 0 (R/W) */
  346. __IO uint32_t SCLH; /*!< Offset: 0x010 SCH Duty Cycle Register High Half Word (R/W) */
  347. __IO uint32_t SCLL; /*!< Offset: 0x014 SCL Duty Cycle Register Low Half Word (R/W) */
  348. __O uint32_t CONCLR; /*!< Offset: 0x018 I2C Control Clear Register ( /W) */
  349. __IO uint32_t MMCTRL; /*!< Offset: 0x01C Monitor mode control register (R/W) */
  350. __IO uint32_t ADR1; /*!< Offset: 0x020 I2C Slave Address Register 1 (R/W) */
  351. __IO uint32_t ADR2; /*!< Offset: 0x024 I2C Slave Address Register 2 (R/W) */
  352. __IO uint32_t ADR3; /*!< Offset: 0x028 I2C Slave Address Register 3 (R/W) */
  353. __I uint32_t DATA_BUFFER; /*!< Offset: 0x02C Data buffer register ( /W) */
  354. __IO uint32_t MASK0; /*!< Offset: 0x030 I2C Slave address mask register 0 (R/W) */
  355. __IO uint32_t MASK1; /*!< Offset: 0x034 I2C Slave address mask register 1 (R/W) */
  356. __IO uint32_t MASK2; /*!< Offset: 0x038 I2C Slave address mask register 2 (R/W) */
  357. __IO uint32_t MASK3; /*!< Offset: 0x03C I2C Slave address mask register 3 (R/W) */
  358. } LPC_I2C_TypeDef;
  359. /*@}*/ /* end of group LPC11xx_I2C */
  360. /*------------- Watchdog Timer (WDT) -----------------------------------------*/
  361. /** @addtogroup LPC11xx_WDT LPC11xx WatchDog Timer
  362. @{
  363. */
  364. typedef struct
  365. {
  366. __IO uint32_t MOD; /*!< Offset: 0x000 Watchdog mode register (R/W) */
  367. __IO uint32_t TC; /*!< Offset: 0x004 Watchdog timer constant register (R/W) */
  368. __O uint32_t FEED; /*!< Offset: 0x008 Watchdog feed sequence register ( /W) */
  369. __I uint32_t TV; /*!< Offset: 0x00C Watchdog timer value register (R/ ) */
  370. } LPC_WDT_TypeDef;
  371. /*@}*/ /* end of group LPC11xx_WDT */
  372. /*------------- Analog-to-Digital Converter (ADC) ----------------------------*/
  373. /** @addtogroup LPC11xx_ADC LPC11xx Analog-to-Digital Converter
  374. @{
  375. */
  376. typedef struct
  377. {
  378. __IO uint32_t CR; /*!< Offset: 0x000 A/D Control Register (R/W) */
  379. __IO uint32_t GDR; /*!< Offset: 0x004 A/D Global Data Register (R/W) */
  380. uint32_t RESERVED0;
  381. __IO uint32_t INTEN; /*!< Offset: 0x00C A/D Interrupt Enable Register (R/W) */
  382. __IO uint32_t DR[8]; /*!< Offset: 0x010-0x02C A/D Channel 0..7 Data Register (R/W) */
  383. __I uint32_t STAT; /*!< Offset: 0x030 A/D Status Register (R/ ) */
  384. } LPC_ADC_TypeDef;
  385. /*@}*/ /* end of group LPC11xx_ADC */
  386. #if defined ( __CC_ARM )
  387. #pragma no_anon_unions
  388. #endif
  389. /******************************************************************************/
  390. /* Peripheral memory map */
  391. /******************************************************************************/
  392. /* Base addresses */
  393. #define LPC_FLASH_BASE (0x00000000UL)
  394. #define LPC_RAM_BASE (0x10000000UL)
  395. #define LPC_APB0_BASE (0x40000000UL)
  396. #define LPC_AHB_BASE (0x50000000UL)
  397. /* APB0 peripherals */
  398. #define LPC_I2C_BASE (LPC_APB0_BASE + 0x00000)
  399. #define LPC_WDT_BASE (LPC_APB0_BASE + 0x04000)
  400. #define LPC_UART_BASE (LPC_APB0_BASE + 0x08000)
  401. #define LPC_CT16B0_BASE (LPC_APB0_BASE + 0x0C000)
  402. #define LPC_CT16B1_BASE (LPC_APB0_BASE + 0x10000)
  403. #define LPC_CT32B0_BASE (LPC_APB0_BASE + 0x14000)
  404. #define LPC_CT32B1_BASE (LPC_APB0_BASE + 0x18000)
  405. #define LPC_ADC_BASE (LPC_APB0_BASE + 0x1C000)
  406. #define LPC_PMU_BASE (LPC_APB0_BASE + 0x38000)
  407. #define LPC_SSP0_BASE (LPC_APB0_BASE + 0x40000)
  408. #define LPC_IOCON_BASE (LPC_APB0_BASE + 0x44000)
  409. #define LPC_SYSCON_BASE (LPC_APB0_BASE + 0x48000)
  410. #define LPC_SSP1_BASE (LPC_APB0_BASE + 0x58000)
  411. /* AHB peripherals */
  412. #define LPC_GPIO_BASE (LPC_AHB_BASE + 0x00000)
  413. #define LPC_GPIO0_BASE (LPC_AHB_BASE + 0x00000)
  414. #define LPC_GPIO1_BASE (LPC_AHB_BASE + 0x10000)
  415. #define LPC_GPIO2_BASE (LPC_AHB_BASE + 0x20000)
  416. #define LPC_GPIO3_BASE (LPC_AHB_BASE + 0x30000)
  417. /******************************************************************************/
  418. /* Peripheral declaration */
  419. /******************************************************************************/
  420. #define LPC_I2C ((LPC_I2C_TypeDef *) LPC_I2C_BASE )
  421. #define LPC_WDT ((LPC_WDT_TypeDef *) LPC_WDT_BASE )
  422. #define LPC_UART ((LPC_UART_TypeDef *) LPC_UART_BASE )
  423. #define LPC_TMR16B0 ((LPC_TMR_TypeDef *) LPC_CT16B0_BASE)
  424. #define LPC_TMR16B1 ((LPC_TMR_TypeDef *) LPC_CT16B1_BASE)
  425. #define LPC_TMR32B0 ((LPC_TMR_TypeDef *) LPC_CT32B0_BASE)
  426. #define LPC_TMR32B1 ((LPC_TMR_TypeDef *) LPC_CT32B1_BASE)
  427. #define LPC_ADC ((LPC_ADC_TypeDef *) LPC_ADC_BASE )
  428. #define LPC_PMU ((LPC_PMU_TypeDef *) LPC_PMU_BASE )
  429. #define LPC_SSP0 ((LPC_SSP_TypeDef *) LPC_SSP0_BASE )
  430. #define LPC_SSP1 ((LPC_SSP_TypeDef *) LPC_SSP1_BASE )
  431. #define LPC_IOCON ((LPC_IOCON_TypeDef *) LPC_IOCON_BASE )
  432. #define LPC_SYSCON ((LPC_SYSCON_TypeDef *) LPC_SYSCON_BASE)
  433. #define LPC_GPIO0 ((LPC_GPIO_TypeDef *) LPC_GPIO0_BASE )
  434. #define LPC_GPIO1 ((LPC_GPIO_TypeDef *) LPC_GPIO1_BASE )
  435. #define LPC_GPIO2 ((LPC_GPIO_TypeDef *) LPC_GPIO2_BASE )
  436. #define LPC_GPIO3 ((LPC_GPIO_TypeDef *) LPC_GPIO3_BASE )
  437. #ifdef __cplusplus
  438. }
  439. #endif
  440. #endif /* __LPC11xx_H__ */