diff --git a/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc/LPC11xx.h b/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc/LPC11xx.h
index 854f71969f..2cd1d38fb8 100644
--- a/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc/LPC11xx.h
+++ b/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc/LPC11xx.h
@@ -1,10 +1,10 @@
/****************************************************************************
- * $Id:: LPC11xx.h 3635 2010-06-02 00:31:46Z usb00423 $
+ * $Id:: LPC11xx.h 8860 2011-12-22 23:12:34Z usb00175 $
* Project: NXP LPC11xx software example
*
* Description:
* CMSIS Cortex-M0 Core Peripheral Access Layer Header File for
- * NXP LPC11xx Device Series
+ * NXP LPC11xx Device Series
*
****************************************************************************
* Software that is described herein is for illustrative purposes only
@@ -48,7 +48,6 @@
* ---------- Interrupt Number Definition -----------------------------------
* ==========================================================================
*/
-
typedef enum IRQn
{
/****** Cortex-M0 Processor Exceptions Numbers ***************************************************/
@@ -58,7 +57,7 @@ typedef enum IRQn
PendSV_IRQn = -2, /*!< 14 Cortex-M0 Pend SV Interrupt */
SysTick_IRQn = -1, /*!< 15 Cortex-M0 System Tick Interrupt */
-/****** LPC11xx Specific Interrupt Numbers *******************************************************/
+/****** LPC11Cxx or LPC11xx Specific Interrupt Numbers *******************************************************/
WAKEUP0_IRQn = 0, /*!< All I/O pins can be used as wakeup source. */
WAKEUP1_IRQn = 1, /*!< There are 13 pins in total for LPC11xx */
WAKEUP2_IRQn = 2,
@@ -81,23 +80,25 @@ typedef enum IRQn
TIMER_32_1_IRQn = 19, /*!< 32-bit Timer1 Interrupt */
SSP0_IRQn = 20, /*!< SSP0 Interrupt */
UART_IRQn = 21, /*!< UART Interrupt */
+ Reserved0_IRQn = 22, /*!< Reserved Interrupt */
+ Reserved1_IRQn = 23,
ADC_IRQn = 24, /*!< A/D Converter Interrupt */
WDT_IRQn = 25, /*!< Watchdog timer Interrupt */
BOD_IRQn = 26, /*!< Brown Out Detect(BOD) Interrupt */
+ FMC_IRQn = 27, /*!< Flash Memory Controller Interrupt */
EINT3_IRQn = 28, /*!< External Interrupt 3 Interrupt */
EINT2_IRQn = 29, /*!< External Interrupt 2 Interrupt */
EINT1_IRQn = 30, /*!< External Interrupt 1 Interrupt */
EINT0_IRQn = 31, /*!< External Interrupt 0 Interrupt */
} IRQn_Type;
-
/*
* ==========================================================================
* ----------- Processor and Core Peripheral Section ------------------------
* ==========================================================================
*/
-/* Configuration of the Cortex-M3 Processor and Core Peripherals */
+/* Configuration of the Cortex-M0 Processor and Core Peripherals */
#define __MPU_PRESENT 0 /*!< MPU present or not */
#define __NVIC_PRIO_BITS 2 /*!< Number of Bits used for Priority Levels */
#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */
@@ -126,14 +127,14 @@ typedef struct
__IO uint32_t SYSMEMREMAP; /*!< Offset: 0x000 System memory remap (R/W) */
__IO uint32_t PRESETCTRL; /*!< Offset: 0x004 Peripheral reset control (R/W) */
__IO uint32_t SYSPLLCTRL; /*!< Offset: 0x008 System PLL control (R/W) */
- __IO uint32_t SYSPLLSTAT; /*!< Offset: 0x00C System PLL status (R/ ) */
+ __IO uint32_t SYSPLLSTAT; /*!< Offset: 0x00C System PLL status (R/W ) */
uint32_t RESERVED0[4];
__IO uint32_t SYSOSCCTRL; /*!< Offset: 0x020 System oscillator control (R/W) */
__IO uint32_t WDTOSCCTRL; /*!< Offset: 0x024 Watchdog oscillator control (R/W) */
__IO uint32_t IRCCTRL; /*!< Offset: 0x028 IRC control (R/W) */
uint32_t RESERVED1[1];
- __IO uint32_t SYSRESSTAT; /*!< Offset: 0x030 System reset status Register (R/ ) */
+ __IO uint32_t SYSRSTSTAT; /*!< Offset: 0x030 System reset status Register (R/ ) */
uint32_t RESERVED2[3];
__IO uint32_t SYSPLLCLKSEL; /*!< Offset: 0x040 System PLL clock source select (R/W) */
__IO uint32_t SYSPLLCLKUEN; /*!< Offset: 0x044 System PLL clock source update enable (R/W) */
@@ -149,10 +150,7 @@ typedef struct
__IO uint32_t SSP0CLKDIV; /*!< Offset: 0x094 SSP0 clock divider (R/W) */
__IO uint32_t UARTCLKDIV; /*!< Offset: 0x098 UART clock divider (R/W) */
__IO uint32_t SSP1CLKDIV; /*!< Offset: 0x09C SSP1 clock divider (R/W) */
- uint32_t RESERVED6[4];
-
- __IO uint32_t SYSTICKCLKDIV; /*!< Offset: 0x0B0 SYSTICK clock divider (R/W) */
- uint32_t RESERVED7[7];
+ uint32_t RESERVED6[12];
__IO uint32_t WDTCLKSEL; /*!< Offset: 0x0D0 WDT clock source select (R/W) */
__IO uint32_t WDTCLKUEN; /*!< Offset: 0x0D4 WDT clock source update enable (R/W) */
@@ -166,27 +164,24 @@ typedef struct
__IO uint32_t PIOPORCAP0; /*!< Offset: 0x100 POR captured PIO status 0 (R/ ) */
__IO uint32_t PIOPORCAP1; /*!< Offset: 0x104 POR captured PIO status 1 (R/ ) */
uint32_t RESERVED10[18];
-
__IO uint32_t BODCTRL; /*!< Offset: 0x150 BOD control (R/W) */
- uint32_t RESERVED11[1];
- __IO uint32_t SYSTCKCAL; /*!< Offset: 0x158 System tick counter calibration (R/W) */
- uint32_t RESERVED12;
- __IO uint32_t MAINREGVOUT0CFG; /*!< Offset: 0x160 Main Regulator Voltage 0 Configuration */
- __IO uint32_t MAINREGVOUT1CFG; /*!< Offset: 0x164 Main Regulator Voltage 1 Configuration */
- uint32_t RESERVED13[38];
+ __IO uint32_t SYSTCKCAL; /*!< Offset: 0x154 System tick counter calibration (R/W) */
+ uint32_t RESERVED13[42];
__IO uint32_t STARTAPRP0; /*!< Offset: 0x200 Start logic edge control Register 0 (R/W) */
__IO uint32_t STARTERP0; /*!< Offset: 0x204 Start logic signal enable Register 0 (R/W) */
- __IO uint32_t STARTRSRP0CLR; /*!< Offset: 0x208 Start logic reset Register 0 ( /W) */
+ __O uint32_t STARTRSRP0CLR; /*!< Offset: 0x208 Start logic reset Register 0 ( /W) */
__IO uint32_t STARTSRP0; /*!< Offset: 0x20C Start logic status Register 0 (R/W) */
- uint32_t RESERVED14[8];
+ __IO uint32_t STARTAPRP1; /*!< Offset: 0x210 Start logic edge control Register 0 (R/W). (LPC11UXX only) */
+ __IO uint32_t STARTERP1; /*!< Offset: 0x214 Start logic signal enable Register 0 (R/W). (LPC11UXX only) */
+ __O uint32_t STARTRSRP1CLR; /*!< Offset: 0x218 Start logic reset Register 0 ( /W). (LPC11UXX only) */
+ __IO uint32_t STARTSRP1; /*!< Offset: 0x21C Start logic status Register 0 (R/W). (LPC11UXX only) */
+ uint32_t RESERVED17[4];
__IO uint32_t PDSLEEPCFG; /*!< Offset: 0x230 Power-down states in Deep-sleep mode (R/W) */
__IO uint32_t PDAWAKECFG; /*!< Offset: 0x234 Power-down states after wake-up (R/W) */
__IO uint32_t PDRUNCFG; /*!< Offset: 0x238 Power-down configuration Register (R/W) */
- uint32_t RESERVED15[101];
- __O uint32_t VOUTCFGPROT; /*!< Offset: 0x3D0 Voltage Output Configuration Protection Register (W) */
- uint32_t RESERVED16[8];
+ uint32_t RESERVED15[110];
__I uint32_t DEVICE_ID; /*!< Offset: 0x3F4 Device ID (R/ ) */
} LPC_SYSCON_TypeDef;
/*@}*/ /* end of group LPC11xx_SYSCON */
@@ -271,6 +266,29 @@ typedef struct
/*@}*/ /* end of group LPC11xx_PMU */
+
+// ------------------------------------------------------------------------------------------------
+// ----- FLASHCTRL -----
+// ------------------------------------------------------------------------------------------------
+
+typedef struct { /*!< (@ 0x4003C000) FLASHCTRL Structure */
+ __I uint32_t RESERVED0[4];
+ __IO uint32_t FLASHCFG; /*!< (@ 0x4003C010) Flash memory access time configuration register */
+ __I uint32_t RESERVED1[3];
+ __IO uint32_t FMSSTART; /*!< (@ 0x4003C020) Signature start address register */
+ __IO uint32_t FMSSTOP; /*!< (@ 0x4003C024) Signature stop-address register */
+ __I uint32_t RESERVED2[1];
+ __I uint32_t FMSW0; /*!< (@ 0x4003C02C) Word 0 [31:0] */
+ __I uint32_t FMSW1; /*!< (@ 0x4003C030) Word 1 [63:32] */
+ __I uint32_t FMSW2; /*!< (@ 0x4003C034) Word 2 [95:64] */
+ __I uint32_t FMSW3; /*!< (@ 0x4003C038) Word 3 [127:96] */
+ __I uint32_t RESERVED3[1001];
+ __I uint32_t FMSTAT; /*!< (@ 0x4003CFE0) Signature generation status register */
+ __I uint32_t RESERVED4[1];
+ __IO uint32_t FMSTATCLR; /*!< (@ 0x4003CFE8) Signature generation status clear register */
+} LPC_FLASHCTRL_Type;
+
+
/*------------- General Purpose Input/Output (GPIO) --------------------------*/
/** @addtogroup LPC11xx_GPIO LPC11xx General Purpose Input/Output
@{
@@ -296,7 +314,6 @@ typedef struct
} LPC_GPIO_TypeDef;
/*@}*/ /* end of group LPC11xx_GPIO */
-
/*------------- Timer (TMR) --------------------------------------------------*/
/** @addtogroup LPC11xx_TMR LPC11xx 16/32-bit Counter/Timer
@{
@@ -357,7 +374,7 @@ typedef struct
__IO uint32_t RS485CTRL; /*!< Offset: 0x04C RS-485/EIA-485 Control Register (R/W) */
__IO uint32_t ADRMATCH; /*!< Offset: 0x050 RS-485/EIA-485 address match Register (R/W) */
__IO uint32_t RS485DLY; /*!< Offset: 0x054 RS-485/EIA-485 direction control delay Register (R/W) */
- __I uint32_t FIFOLVL; /*!< Offset: 0x058 FIFO Level Register (R/ ) */
+ __I uint32_t FIFOLVL; /*!< Offset: 0x058 FIFO Level Register (R) */
} LPC_UART_TypeDef;
/*@}*/ /* end of group LPC11xx_UART */
@@ -415,11 +432,11 @@ typedef struct
{
__IO uint32_t MOD; /*!< Offset: 0x000 Watchdog mode register (R/W) */
__IO uint32_t TC; /*!< Offset: 0x004 Watchdog timer constant register (R/W) */
- __O uint32_t FEED; /*!< Offset: 0x008 Watchdog feed sequence register ( /W) */
- __I uint32_t TV; /*!< Offset: 0x00C Watchdog timer value register (R/ ) */
+ __O uint32_t FEED; /*!< Offset: 0x008 Watchdog feed sequence register (W) */
+ __I uint32_t TV; /*!< Offset: 0x00C Watchdog timer value register (R) */
uint32_t RESERVED0;
- __IO uint32_t WARNINT;
- __IO uint32_t WINDOW;
+ __IO uint32_t WARNINT; /*!< Offset: 0x014 Watchdog timer warning int. register (R/W) */
+ __IO uint32_t WINDOW; /*!< Offset: 0x018 Watchdog timer window value register (R/W) */
} LPC_WDT_TypeDef;
/*@}*/ /* end of group LPC11xx_WDT */
@@ -477,19 +494,19 @@ typedef struct
__IO uint32_t IF2_DA2;
__IO uint32_t IF2_DB1;
__IO uint32_t IF2_DB2;
- uint32_t RESERVED2[21];
+ uint32_t RESERVED2[21];
__I uint32_t TXREQ1; /* 0x100 */
__I uint32_t TXREQ2;
- uint32_t RESERVED3[6];
+ uint32_t RESERVED3[6];
__I uint32_t ND1; /* 0x120 */
__I uint32_t ND2;
- uint32_t RESERVED4[6];
+ uint32_t RESERVED4[6];
__I uint32_t IR1; /* 0x140 */
__I uint32_t IR2;
- uint32_t RESERVED5[6];
+ uint32_t RESERVED5[6];
__I uint32_t MSGV1; /* 0x160 */
__I uint32_t MSGV2;
- uint32_t RESERVED6[6];
+ uint32_t RESERVED6[6];
__IO uint32_t CLKDIV; /* 0x180 */
} LPC_CAN_TypeDef;
/*@}*/ /* end of group LPC11xx_CAN */
@@ -517,13 +534,14 @@ typedef struct
#define LPC_CT32B1_BASE (LPC_APB0_BASE + 0x18000)
#define LPC_ADC_BASE (LPC_APB0_BASE + 0x1C000)
#define LPC_PMU_BASE (LPC_APB0_BASE + 0x38000)
+#define LPC_FLASHCTRL_BASE (LPC_APB0_BASE + 0x3C000)
#define LPC_SSP0_BASE (LPC_APB0_BASE + 0x40000)
#define LPC_IOCON_BASE (LPC_APB0_BASE + 0x44000)
#define LPC_SYSCON_BASE (LPC_APB0_BASE + 0x48000)
#define LPC_CAN_BASE (LPC_APB0_BASE + 0x50000)
#define LPC_SSP1_BASE (LPC_APB0_BASE + 0x58000)
-/* AHB peripherals */
+/* AHB peripherals */
#define LPC_GPIO_BASE (LPC_AHB_BASE + 0x00000)
#define LPC_GPIO0_BASE (LPC_AHB_BASE + 0x00000)
#define LPC_GPIO1_BASE (LPC_AHB_BASE + 0x10000)
@@ -542,6 +560,7 @@ typedef struct
#define LPC_TMR32B1 ((LPC_TMR_TypeDef *) LPC_CT32B1_BASE)
#define LPC_ADC ((LPC_ADC_TypeDef *) LPC_ADC_BASE )
#define LPC_PMU ((LPC_PMU_TypeDef *) LPC_PMU_BASE )
+#define LPC_FLASHCTRL ((LPC_FLASHCTRL_Type *) LPC_FLASHCTRL_BASE)
#define LPC_SSP0 ((LPC_SSP_TypeDef *) LPC_SSP0_BASE )
#define LPC_SSP1 ((LPC_SSP_TypeDef *) LPC_SSP1_BASE )
#define LPC_CAN ((LPC_CAN_TypeDef *) LPC_CAN_BASE )
diff --git a/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/.cproject b/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/.cproject
index 171dfbe540..3b5e1f1b13 100644
--- a/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/.cproject
+++ b/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/.cproject
@@ -33,7 +33,7 @@
-
+
+
diff --git a/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/RegTest.c b/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/RegTest.c
index 61ac411544..b847d79f58 100644
--- a/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/RegTest.c
+++ b/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/RegTest.c
@@ -61,24 +61,24 @@ void vRegTest1Task( void )
".extern ulRegTest1LoopCounter \n"
" \n"
" /* Fill the core registers with known values. */ \n"
- " mov r1, #101 \n"
- " mov r2, #102 \n"
- " mov r3, #103 \n"
- " mov r4, #104 \n"
- " mov r5, #105 \n"
- " mov r6, #106 \n"
- " mov r7, #107 \n"
- " mov r0, #108 \n"
- " mov r8, r0 \n"
- " mov r0, #109 \n"
- " mov r9, r0 \n"
- " mov r0, #110 \n"
- " mov r10, r0 \n"
- " mov r0, #111 \n"
- " mov r11, r0 \n"
- " mov r0, #112 \n"
- " mov r12, r0 \n"
- " mov r0, #100 \n"
+ " movs r1, #101 \n"
+ " movs r2, #102 \n"
+ " movs r3, #103 \n"
+ " movs r4, #104 \n"
+ " movs r5, #105 \n"
+ " movs r6, #106 \n"
+ " movs r7, #107 \n"
+ " movs r0, #108 \n"
+ " mov r8, r0 \n"
+ " movs r0, #109 \n"
+ " mov r9, r0 \n"
+ " movs r0, #110 \n"
+ " mov r10, r0 \n"
+ " movs r0, #111 \n"
+ " mov r11, r0 \n"
+ " movs r0, #112 \n"
+ " mov r12, r0 \n"
+ " movs r0, #100 \n"
" \n"
"reg1_loop: \n"
" \n"
@@ -98,19 +98,19 @@ void vRegTest1Task( void )
" bne reg1_error_loop \n"
" cmp r7, #107 \n"
" bne reg1_error_loop \n"
- " mov r0, #108 \n"
+ " movs r0, #108 \n"
" cmp r8, r0 \n"
" bne reg1_error_loop \n"
- " mov r0, #109 \n"
+ " movs r0, #109 \n"
" cmp r9, r0 \n"
" bne reg1_error_loop \n"
- " mov r0, #110 \n"
+ " movs r0, #110 \n"
" cmp r10, r0 \n"
" bne reg1_error_loop \n"
- " mov r0, #111 \n"
+ " movs r0, #111 \n"
" cmp r11, r0 \n"
" bne reg1_error_loop \n"
- " mov r0, #112 \n"
+ " movs r0, #112 \n"
" cmp r12, r0 \n"
" bne reg1_error_loop \n"
" \n"
@@ -123,7 +123,7 @@ void vRegTest1Task( void )
" pop { r1 } \n"
" \n"
" /* Start again. */ \n"
- " mov r0, #100 \n"
+ " movs r0, #100 \n"
" b reg1_loop \n"
" \n"
"reg1_error_loop: \n"
@@ -142,24 +142,24 @@ void vRegTest2Task( void )
".extern ulRegTest2LoopCounter \n"
" \n"
" /* Fill the core registers with known values. */ \n"
- " mov r1, #1 \n"
- " mov r2, #2 \n"
- " mov r3, #3 \n"
- " mov r4, #4 \n"
- " mov r5, #5 \n"
- " mov r6, #6 \n"
- " mov r7, #7 \n"
- " mov r0, #8 \n"
- " mov r8, r0 \n"
- " mov r0, #9 \n"
- " mov r9, r0 \n"
- " mov r0, #10 \n"
- " mov r10, r0 \n"
- " mov r0, #11 \n"
- " mov r11, r0 \n"
- " mov r0, #12 \n"
- " mov r12, r0 \n"
- " mov r0, #10 \n"
+ " movs r1, #1 \n"
+ " movs r2, #2 \n"
+ " movs r3, #3 \n"
+ " movs r4, #4 \n"
+ " movs r5, #5 \n"
+ " movs r6, #6 \n"
+ " movs r7, #7 \n"
+ " movs r0, #8 \n"
+ " movs r8, r0 \n"
+ " movs r0, #9 \n"
+ " mov r9, r0 \n"
+ " movs r0, #10 \n"
+ " mov r10, r0 \n"
+ " movs r0, #11 \n"
+ " mov r11, r0 \n"
+ " movs r0, #12 \n"
+ " mov r12, r0 \n"
+ " movs r0, #10 \n"
" \n"
"reg2_loop: \n"
" \n"
@@ -179,19 +179,19 @@ void vRegTest2Task( void )
" bne reg2_error_loop \n"
" cmp r7, #7 \n"
" bne reg2_error_loop \n"
- " mov r0, #8 \n"
+ " movs r0, #8 \n"
" cmp r8, r0 \n"
" bne reg2_error_loop \n"
- " mov r0, #9 \n"
+ " movs r0, #9 \n"
" cmp r9, r0 \n"
" bne reg2_error_loop \n"
- " mov r0, #10 \n"
+ " movs r0, #10 \n"
" cmp r10, r0 \n"
" bne reg2_error_loop \n"
- " mov r0, #11 \n"
+ " movs r0, #11 \n"
" cmp r11, r0 \n"
" bne reg2_error_loop \n"
- " mov r0, #12 \n"
+ " movs r0, #12 \n"
" cmp r12, r0 \n"
" bne reg2_error_loop \n"
" \n"
@@ -204,7 +204,7 @@ void vRegTest2Task( void )
" pop { r1 } \n"
" \n"
" /* Start again. */ \n"
- " mov r0, #10 \n"
+ " movs r0, #10 \n"
" b reg2_loop \n"
" \n"
"reg2_error_loop: \n"
diff --git a/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/main-blinky.c b/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/main-blinky.c
index bb0aa9b031..66a2e71045 100644
--- a/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/main-blinky.c
+++ b/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/main-blinky.c
@@ -63,8 +63,8 @@
* required to configure the hardware, are defined in main.c.
******************************************************************************
*
- * main_blinky() creates one software timer, one queue, and two tasks. It then
- * starts the scheduler.
+ * main_blinky() creates one queue, and two tasks. It then starts the
+ * scheduler.
*
* The Queue Send Task:
* The queue send task is implemented by the prvQueueSendTask() function in
diff --git a/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/main.c b/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/main.c
index da6f3ea137..3c7cc63bea 100644
--- a/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/main.c
+++ b/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/main.c
@@ -265,7 +265,8 @@ long lHigherPriorityTaskWoken = pdFALSE;
/* This interrupt does nothing more than demonstrate how to synchronise a
task with an interrupt. A semaphore is used for this purpose. Note
- lHigherPriorityTaskWoken is initialised to zero. */
+ lHigherPriorityTaskWoken is initialised to zero. Only FreeRTOS API functions
+ that end in "FromISR" can be called from an ISR. */
xSemaphoreGiveFromISR( xTestSemaphore, &lHigherPriorityTaskWoken );
/* If there was a task that was blocked on the semaphore, and giving the