added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
<>
Date:
Fri Sep 02 15:07:44 2016 +0100
Revision:
144:ef7eb2e8f9f7
Parent:
0:9b334a45a8ff
This updates the lib to the mbed lib v125

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /* mbed Microcontroller Library
<> 144:ef7eb2e8f9f7 2 * Copyright (C) 2008-2009 ARM Limited. All rights reserved.
<> 144:ef7eb2e8f9f7 3 *
<> 144:ef7eb2e8f9f7 4 * ARM7 version of CMSIS-like functionality - not advised for use outside mbed!
<> 144:ef7eb2e8f9f7 5 * based on core_cm3.h, V1.20
<> 144:ef7eb2e8f9f7 6 */
<> 144:ef7eb2e8f9f7 7
<> 144:ef7eb2e8f9f7 8 #ifndef __ARM7_CORE_H__
<> 144:ef7eb2e8f9f7 9 #define __ARM7_CORE_H__
<> 144:ef7eb2e8f9f7 10
<> 144:ef7eb2e8f9f7 11 #include "vector_defns.h"
<> 144:ef7eb2e8f9f7 12
<> 144:ef7eb2e8f9f7 13 #ifdef __cplusplus
<> 144:ef7eb2e8f9f7 14 extern "C" {
<> 144:ef7eb2e8f9f7 15 #endif
<> 144:ef7eb2e8f9f7 16
<> 144:ef7eb2e8f9f7 17 #define __CM3_CMSIS_VERSION_MAIN (0x01) /*!< [31:16] CMSIS HAL main version */
<> 144:ef7eb2e8f9f7 18 #define __CM3_CMSIS_VERSION_SUB (0x20) /*!< [15:0] CMSIS HAL sub version */
<> 144:ef7eb2e8f9f7 19 #define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16) | __CM3_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */
<> 144:ef7eb2e8f9f7 20
<> 144:ef7eb2e8f9f7 21 #define __CORTEX_M (0x03) /*!< Cortex core */
<> 144:ef7eb2e8f9f7 22
<> 144:ef7eb2e8f9f7 23 /**
<> 144:ef7eb2e8f9f7 24 * Lint configuration \n
<> 144:ef7eb2e8f9f7 25 * ----------------------- \n
<> 144:ef7eb2e8f9f7 26 *
<> 144:ef7eb2e8f9f7 27 * The following Lint messages will be suppressed and not shown: \n
<> 144:ef7eb2e8f9f7 28 * \n
<> 144:ef7eb2e8f9f7 29 * --- Error 10: --- \n
<> 144:ef7eb2e8f9f7 30 * register uint32_t __regBasePri __asm("basepri"); \n
<> 144:ef7eb2e8f9f7 31 * Error 10: Expecting ';' \n
<> 144:ef7eb2e8f9f7 32 * \n
<> 144:ef7eb2e8f9f7 33 * --- Error 530: --- \n
<> 144:ef7eb2e8f9f7 34 * return(__regBasePri); \n
<> 144:ef7eb2e8f9f7 35 * Warning 530: Symbol '__regBasePri' (line 264) not initialized \n
<> 144:ef7eb2e8f9f7 36 * \n
<> 144:ef7eb2e8f9f7 37 * --- Error 550: --- \n
<> 144:ef7eb2e8f9f7 38 * __regBasePri = (basePri & 0x1ff); \n
<> 144:ef7eb2e8f9f7 39 * } \n
<> 144:ef7eb2e8f9f7 40 * Warning 550: Symbol '__regBasePri' (line 271) not accessed \n
<> 144:ef7eb2e8f9f7 41 * \n
<> 144:ef7eb2e8f9f7 42 * --- Error 754: --- \n
<> 144:ef7eb2e8f9f7 43 * uint32_t RESERVED0[24]; \n
<> 144:ef7eb2e8f9f7 44 * Info 754: local structure member '<some, not used in the HAL>' (line 109, file ./cm3_core.h) not referenced \n
<> 144:ef7eb2e8f9f7 45 * \n
<> 144:ef7eb2e8f9f7 46 * --- Error 750: --- \n
<> 144:ef7eb2e8f9f7 47 * #define __CM3_CORE_H__ \n
<> 144:ef7eb2e8f9f7 48 * Info 750: local macro '__CM3_CORE_H__' (line 43, file./cm3_core.h) not referenced \n
<> 144:ef7eb2e8f9f7 49 * \n
<> 144:ef7eb2e8f9f7 50 * --- Error 528: --- \n
<> 144:ef7eb2e8f9f7 51 * static __INLINE void NVIC_DisableIRQ(uint32_t IRQn) \n
<> 144:ef7eb2e8f9f7 52 * Warning 528: Symbol 'NVIC_DisableIRQ(unsigned int)' (line 419, file ./cm3_core.h) not referenced \n
<> 144:ef7eb2e8f9f7 53 * \n
<> 144:ef7eb2e8f9f7 54 * --- Error 751: --- \n
<> 144:ef7eb2e8f9f7 55 * } InterruptType_Type; \n
<> 144:ef7eb2e8f9f7 56 * Info 751: local typedef 'InterruptType_Type' (line 170, file ./cm3_core.h) not referenced \n
<> 144:ef7eb2e8f9f7 57 * \n
<> 144:ef7eb2e8f9f7 58 * \n
<> 144:ef7eb2e8f9f7 59 * Note: To re-enable a Message, insert a space before 'lint' * \n
<> 144:ef7eb2e8f9f7 60 *
<> 144:ef7eb2e8f9f7 61 */
<> 144:ef7eb2e8f9f7 62
<> 144:ef7eb2e8f9f7 63 /*lint -save */
<> 144:ef7eb2e8f9f7 64 /*lint -e10 */
<> 144:ef7eb2e8f9f7 65 /*lint -e530 */
<> 144:ef7eb2e8f9f7 66 /*lint -e550 */
<> 144:ef7eb2e8f9f7 67 /*lint -e754 */
<> 144:ef7eb2e8f9f7 68 /*lint -e750 */
<> 144:ef7eb2e8f9f7 69 /*lint -e528 */
<> 144:ef7eb2e8f9f7 70 /*lint -e751 */
<> 144:ef7eb2e8f9f7 71
<> 144:ef7eb2e8f9f7 72 #include <stdint.h> /* Include standard types */
<> 144:ef7eb2e8f9f7 73
<> 144:ef7eb2e8f9f7 74 #if defined ( __CC_ARM )
<> 144:ef7eb2e8f9f7 75 /**
<> 144:ef7eb2e8f9f7 76 * @brief Return the Main Stack Pointer (current ARM7 stack)
<> 144:ef7eb2e8f9f7 77 *
<> 144:ef7eb2e8f9f7 78 * @param none
<> 144:ef7eb2e8f9f7 79 * @return uint32_t Main Stack Pointer
<> 144:ef7eb2e8f9f7 80 *
<> 144:ef7eb2e8f9f7 81 * Return the current value of the MSP (main stack pointer)
<> 144:ef7eb2e8f9f7 82 * Cortex processor register
<> 144:ef7eb2e8f9f7 83 */
<> 144:ef7eb2e8f9f7 84 extern uint32_t __get_MSP(void);
<> 144:ef7eb2e8f9f7 85 #endif
<> 144:ef7eb2e8f9f7 86
<> 144:ef7eb2e8f9f7 87
<> 144:ef7eb2e8f9f7 88 #if defined (__ICCARM__)
<> 144:ef7eb2e8f9f7 89 #include <intrinsics.h> /* IAR Intrinsics */
<> 144:ef7eb2e8f9f7 90 #endif
<> 144:ef7eb2e8f9f7 91
<> 144:ef7eb2e8f9f7 92
<> 144:ef7eb2e8f9f7 93 #ifndef __NVIC_PRIO_BITS
<> 144:ef7eb2e8f9f7 94 #define __NVIC_PRIO_BITS 4 /*!< standard definition for NVIC Priority Bits */
<> 144:ef7eb2e8f9f7 95 #endif
<> 144:ef7eb2e8f9f7 96
<> 144:ef7eb2e8f9f7 97 typedef struct
<> 144:ef7eb2e8f9f7 98 {
<> 144:ef7eb2e8f9f7 99 uint32_t IRQStatus;
<> 144:ef7eb2e8f9f7 100 uint32_t FIQStatus;
<> 144:ef7eb2e8f9f7 101 uint32_t RawIntr;
<> 144:ef7eb2e8f9f7 102 uint32_t IntSelect;
<> 144:ef7eb2e8f9f7 103 uint32_t IntEnable;
<> 144:ef7eb2e8f9f7 104 uint32_t IntEnClr;
<> 144:ef7eb2e8f9f7 105 uint32_t SoftInt;
<> 144:ef7eb2e8f9f7 106 uint32_t SoftIntClr;
<> 144:ef7eb2e8f9f7 107 uint32_t Protection;
<> 144:ef7eb2e8f9f7 108 uint32_t SWPriorityMask;
<> 144:ef7eb2e8f9f7 109 uint32_t RESERVED0[54];
<> 144:ef7eb2e8f9f7 110 uint32_t VectAddr[32];
<> 144:ef7eb2e8f9f7 111 uint32_t RESERVED1[32];
<> 144:ef7eb2e8f9f7 112 uint32_t VectPriority[32];
<> 144:ef7eb2e8f9f7 113 uint32_t RESERVED2[800];
<> 144:ef7eb2e8f9f7 114 uint32_t Address;
<> 144:ef7eb2e8f9f7 115 } NVIC_TypeDef;
<> 144:ef7eb2e8f9f7 116
<> 144:ef7eb2e8f9f7 117 #define NVIC_BASE (0xFFFFF000)
<> 144:ef7eb2e8f9f7 118 #define NVIC (( NVIC_TypeDef *) NVIC_BASE)
<> 144:ef7eb2e8f9f7 119
<> 144:ef7eb2e8f9f7 120
<> 144:ef7eb2e8f9f7 121
<> 144:ef7eb2e8f9f7 122 /**
<> 144:ef7eb2e8f9f7 123 * IO definitions
<> 144:ef7eb2e8f9f7 124 *
<> 144:ef7eb2e8f9f7 125 * define access restrictions to peripheral registers
<> 144:ef7eb2e8f9f7 126 */
<> 144:ef7eb2e8f9f7 127
<> 144:ef7eb2e8f9f7 128 #ifdef __cplusplus
<> 144:ef7eb2e8f9f7 129 #define __I volatile /*!< defines 'read only' permissions */
<> 144:ef7eb2e8f9f7 130 #else
<> 144:ef7eb2e8f9f7 131 #define __I volatile const /*!< defines 'read only' permissions */
<> 144:ef7eb2e8f9f7 132 #endif
<> 144:ef7eb2e8f9f7 133 #define __O volatile /*!< defines 'write only' permissions */
<> 144:ef7eb2e8f9f7 134 #define __IO volatile /*!< defines 'read / write' permissions */
<> 144:ef7eb2e8f9f7 135
<> 144:ef7eb2e8f9f7 136
<> 144:ef7eb2e8f9f7 137
<> 144:ef7eb2e8f9f7 138
<> 144:ef7eb2e8f9f7 139
<> 144:ef7eb2e8f9f7 140 #if defined ( __CC_ARM )
<> 144:ef7eb2e8f9f7 141 #define __ASM __asm /*!< asm keyword for ARM Compiler */
<> 144:ef7eb2e8f9f7 142 #define __INLINE __inline /*!< inline keyword for ARM Compiler */
<> 144:ef7eb2e8f9f7 143
<> 144:ef7eb2e8f9f7 144 #elif defined ( __ICCARM__ )
<> 144:ef7eb2e8f9f7 145 #define __ASM __asm /*!< asm keyword for IAR Compiler */
<> 144:ef7eb2e8f9f7 146 #define __INLINE inline /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */
<> 144:ef7eb2e8f9f7 147
<> 144:ef7eb2e8f9f7 148 #elif defined ( __GNUC__ )
<> 144:ef7eb2e8f9f7 149 #define __ASM __asm /*!< asm keyword for GNU Compiler */
<> 144:ef7eb2e8f9f7 150 #define __INLINE inline /*!< inline keyword for GNU Compiler */
<> 144:ef7eb2e8f9f7 151
<> 144:ef7eb2e8f9f7 152 #elif defined ( __TASKING__ )
<> 144:ef7eb2e8f9f7 153 #define __ASM __asm /*!< asm keyword for TASKING Compiler */
<> 144:ef7eb2e8f9f7 154 #define __INLINE inline /*!< inline keyword for TASKING Compiler */
<> 144:ef7eb2e8f9f7 155
<> 144:ef7eb2e8f9f7 156 #endif
<> 144:ef7eb2e8f9f7 157
<> 144:ef7eb2e8f9f7 158
<> 144:ef7eb2e8f9f7 159 /* ################### Compiler specific Intrinsics ########################### */
<> 144:ef7eb2e8f9f7 160
<> 144:ef7eb2e8f9f7 161 #if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/
<> 144:ef7eb2e8f9f7 162 /* ARM armcc specific functions */
<> 144:ef7eb2e8f9f7 163
<> 144:ef7eb2e8f9f7 164 #define __enable_fault_irq __enable_fiq
<> 144:ef7eb2e8f9f7 165 #define __disable_fault_irq __disable_fiq
<> 144:ef7eb2e8f9f7 166
<> 144:ef7eb2e8f9f7 167 #define __NOP __nop
<> 144:ef7eb2e8f9f7 168 //#define __WFI __wfi
<> 144:ef7eb2e8f9f7 169 //#define __WFE __wfe
<> 144:ef7eb2e8f9f7 170 //#define __SEV __sev
<> 144:ef7eb2e8f9f7 171 //#define __ISB() __isb(0)
<> 144:ef7eb2e8f9f7 172 //#define __DSB() __dsb(0)
<> 144:ef7eb2e8f9f7 173 //#define __DMB() __dmb(0)
<> 144:ef7eb2e8f9f7 174 //#define __REV __rev
<> 144:ef7eb2e8f9f7 175 //#define __RBIT __rbit
<> 144:ef7eb2e8f9f7 176 #define __LDREXB(ptr) ((unsigned char ) __ldrex(ptr))
<> 144:ef7eb2e8f9f7 177 #define __LDREXH(ptr) ((unsigned short) __ldrex(ptr))
<> 144:ef7eb2e8f9f7 178 #define __LDREXW(ptr) ((unsigned int ) __ldrex(ptr))
<> 144:ef7eb2e8f9f7 179 #define __STREXB(value, ptr) __strex(value, ptr)
<> 144:ef7eb2e8f9f7 180 #define __STREXH(value, ptr) __strex(value, ptr)
<> 144:ef7eb2e8f9f7 181 #define __STREXW(value, ptr) __strex(value, ptr)
<> 144:ef7eb2e8f9f7 182
<> 144:ef7eb2e8f9f7 183 #define __disable_irq() unsigned tmp_IntEnable = LPC_VIC->IntEnable; \
<> 144:ef7eb2e8f9f7 184 LPC_VIC->IntEnClr = 0xffffffff
<> 144:ef7eb2e8f9f7 185
<> 144:ef7eb2e8f9f7 186 #define __enable_irq() LPC_VIC->IntEnable = tmp_IntEnable
<> 144:ef7eb2e8f9f7 187
<> 144:ef7eb2e8f9f7 188 #elif (defined (__ICCARM__)) /*------------------ ICC Compiler -------------------*/
<> 144:ef7eb2e8f9f7 189
<> 144:ef7eb2e8f9f7 190 #define __enable_irq __enable_interrupt /*!< global Interrupt enable */
<> 144:ef7eb2e8f9f7 191 #define __disable_irq __disable_interrupt /*!< global Interrupt disable */
<> 144:ef7eb2e8f9f7 192 #define __NOP __no_operation() /*!< no operation intrinsic in IAR Compiler */
<> 144:ef7eb2e8f9f7 193
<> 144:ef7eb2e8f9f7 194 #elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/
<> 144:ef7eb2e8f9f7 195
<> 144:ef7eb2e8f9f7 196 static __INLINE void __enable_irq() {
<> 144:ef7eb2e8f9f7 197 unsigned long temp;
<> 144:ef7eb2e8f9f7 198 __asm__ __volatile__("mrs %0, cpsr\n"
<> 144:ef7eb2e8f9f7 199 "bic %0, %0, #0x80\n"
<> 144:ef7eb2e8f9f7 200 "msr cpsr_c, %0"
<> 144:ef7eb2e8f9f7 201 : "=r" (temp)
<> 144:ef7eb2e8f9f7 202 :
<> 144:ef7eb2e8f9f7 203 : "memory");
<> 144:ef7eb2e8f9f7 204 }
<> 144:ef7eb2e8f9f7 205
<> 144:ef7eb2e8f9f7 206 static __INLINE void __disable_irq() {
<> 144:ef7eb2e8f9f7 207 unsigned long old,temp;
<> 144:ef7eb2e8f9f7 208 __asm__ __volatile__("mrs %0, cpsr\n"
<> 144:ef7eb2e8f9f7 209 "orr %1, %0, #0xc0\n"
<> 144:ef7eb2e8f9f7 210 "msr cpsr_c, %1"
<> 144:ef7eb2e8f9f7 211 : "=r" (old), "=r" (temp)
<> 144:ef7eb2e8f9f7 212 :
<> 144:ef7eb2e8f9f7 213 : "memory");
<> 144:ef7eb2e8f9f7 214 // return (old & 0x80) == 0;
<> 144:ef7eb2e8f9f7 215 }
<> 144:ef7eb2e8f9f7 216
<> 144:ef7eb2e8f9f7 217 static __INLINE void __NOP() { __ASM volatile ("nop"); }
<> 144:ef7eb2e8f9f7 218
<> 144:ef7eb2e8f9f7 219 #elif (defined (__TASKING__)) /*------------------ TASKING Compiler ---------------------*/
<> 144:ef7eb2e8f9f7 220 /* TASKING carm specific functions */
<> 144:ef7eb2e8f9f7 221
<> 144:ef7eb2e8f9f7 222 /*
<> 144:ef7eb2e8f9f7 223 * The CMSIS functions have been implemented as intrinsics in the compiler.
<> 144:ef7eb2e8f9f7 224 * Please use "carm -?i" to get an up to date list of all instrinsics,
<> 144:ef7eb2e8f9f7 225 * Including the CMSIS ones.
<> 144:ef7eb2e8f9f7 226 */
<> 144:ef7eb2e8f9f7 227
<> 144:ef7eb2e8f9f7 228 #endif
<> 144:ef7eb2e8f9f7 229
<> 144:ef7eb2e8f9f7 230
<> 144:ef7eb2e8f9f7 231 /**
<> 144:ef7eb2e8f9f7 232 * @brief Enable Interrupt in NVIC Interrupt Controller
<> 144:ef7eb2e8f9f7 233 *
<> 144:ef7eb2e8f9f7 234 * @param IRQn_Type IRQn specifies the interrupt number
<> 144:ef7eb2e8f9f7 235 * @return none
<> 144:ef7eb2e8f9f7 236 *
<> 144:ef7eb2e8f9f7 237 * Enable a device specific interupt in the NVIC interrupt controller.
<> 144:ef7eb2e8f9f7 238 * The interrupt number cannot be a negative value.
<> 144:ef7eb2e8f9f7 239 */
<> 144:ef7eb2e8f9f7 240 static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
<> 144:ef7eb2e8f9f7 241 {
<> 144:ef7eb2e8f9f7 242 NVIC->IntEnable = 1 << (uint32_t)IRQn;
<> 144:ef7eb2e8f9f7 243 }
<> 144:ef7eb2e8f9f7 244
<> 144:ef7eb2e8f9f7 245
<> 144:ef7eb2e8f9f7 246 /**
<> 144:ef7eb2e8f9f7 247 * @brief Disable the interrupt line for external interrupt specified
<> 144:ef7eb2e8f9f7 248 *
<> 144:ef7eb2e8f9f7 249 * @param IRQn_Type IRQn is the positive number of the external interrupt
<> 144:ef7eb2e8f9f7 250 * @return none
<> 144:ef7eb2e8f9f7 251 *
<> 144:ef7eb2e8f9f7 252 * Disable a device specific interupt in the NVIC interrupt controller.
<> 144:ef7eb2e8f9f7 253 * The interrupt number cannot be a negative value.
<> 144:ef7eb2e8f9f7 254 */
<> 144:ef7eb2e8f9f7 255 static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn)
<> 144:ef7eb2e8f9f7 256 {
<> 144:ef7eb2e8f9f7 257 NVIC->IntEnClr = 1 << (uint32_t)IRQn;
<> 144:ef7eb2e8f9f7 258 }
<> 144:ef7eb2e8f9f7 259
<> 144:ef7eb2e8f9f7 260 static __INLINE uint32_t __get_IPSR(void)
<> 144:ef7eb2e8f9f7 261 {
<> 144:ef7eb2e8f9f7 262 unsigned i;
<> 144:ef7eb2e8f9f7 263
<> 144:ef7eb2e8f9f7 264 for(i = 0; i < 32; i ++)
<> 144:ef7eb2e8f9f7 265 if(NVIC->Address == NVIC->VectAddr[i])
<> 144:ef7eb2e8f9f7 266 return i;
<> 144:ef7eb2e8f9f7 267 return 1; // 1 is an invalid entry in the interrupt table on LPC2368
<> 144:ef7eb2e8f9f7 268 }
<> 144:ef7eb2e8f9f7 269
<> 144:ef7eb2e8f9f7 270 #ifdef __cplusplus
<> 144:ef7eb2e8f9f7 271 }
<> 144:ef7eb2e8f9f7 272 #endif
<> 144:ef7eb2e8f9f7 273
<> 144:ef7eb2e8f9f7 274 #endif /* __ARM7_CORE_H__ */
<> 144:ef7eb2e8f9f7 275
<> 144:ef7eb2e8f9f7 276 /*lint -restore */