mbed library sources

Fork of mbed-src by mbed official

Committer:
lzbpli
Date:
Thu Jul 07 06:48:59 2016 +0000
Revision:
636:b0d178e9fa10
Parent:
554:edd95c0879f8
l053

Who changed what in which revision?

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