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:
390:35c2c1cf29cd
l053

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 390:35c2c1cf29cd 1 /**************************************************************************//**
mbed_official 390:35c2c1cf29cd 2 * @file core_ca9.h
mbed_official 390:35c2c1cf29cd 3 * @brief CMSIS Cortex-A9 Core Peripheral Access Layer Header File
mbed_official 390:35c2c1cf29cd 4 * @version
mbed_official 390:35c2c1cf29cd 5 * @date 25 March 2013
mbed_official 390:35c2c1cf29cd 6 *
mbed_official 390:35c2c1cf29cd 7 * @note
mbed_official 390:35c2c1cf29cd 8 *
mbed_official 390:35c2c1cf29cd 9 ******************************************************************************/
mbed_official 390:35c2c1cf29cd 10 /* Copyright (c) 2009 - 2012 ARM LIMITED
mbed_official 390:35c2c1cf29cd 11
mbed_official 390:35c2c1cf29cd 12 All rights reserved.
mbed_official 390:35c2c1cf29cd 13 Redistribution and use in source and binary forms, with or without
mbed_official 390:35c2c1cf29cd 14 modification, are permitted provided that the following conditions are met:
mbed_official 390:35c2c1cf29cd 15 - Redistributions of source code must retain the above copyright
mbed_official 390:35c2c1cf29cd 16 notice, this list of conditions and the following disclaimer.
mbed_official 390:35c2c1cf29cd 17 - Redistributions in binary form must reproduce the above copyright
mbed_official 390:35c2c1cf29cd 18 notice, this list of conditions and the following disclaimer in the
mbed_official 390:35c2c1cf29cd 19 documentation and/or other materials provided with the distribution.
mbed_official 390:35c2c1cf29cd 20 - Neither the name of ARM nor the names of its contributors may be used
mbed_official 390:35c2c1cf29cd 21 to endorse or promote products derived from this software without
mbed_official 390:35c2c1cf29cd 22 specific prior written permission.
mbed_official 390:35c2c1cf29cd 23 *
mbed_official 390:35c2c1cf29cd 24 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
mbed_official 390:35c2c1cf29cd 25 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
mbed_official 390:35c2c1cf29cd 26 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
mbed_official 390:35c2c1cf29cd 27 ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
mbed_official 390:35c2c1cf29cd 28 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
mbed_official 390:35c2c1cf29cd 29 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
mbed_official 390:35c2c1cf29cd 30 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
mbed_official 390:35c2c1cf29cd 31 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
mbed_official 390:35c2c1cf29cd 32 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
mbed_official 390:35c2c1cf29cd 33 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
mbed_official 390:35c2c1cf29cd 34 POSSIBILITY OF SUCH DAMAGE.
mbed_official 390:35c2c1cf29cd 35 ---------------------------------------------------------------------------*/
mbed_official 390:35c2c1cf29cd 36
mbed_official 390:35c2c1cf29cd 37
mbed_official 390:35c2c1cf29cd 38 #if defined ( __ICCARM__ )
mbed_official 390:35c2c1cf29cd 39 #pragma system_include /* treat file as system include file for MISRA check */
mbed_official 390:35c2c1cf29cd 40 #endif
mbed_official 390:35c2c1cf29cd 41
mbed_official 390:35c2c1cf29cd 42 #ifdef __cplusplus
mbed_official 390:35c2c1cf29cd 43 extern "C" {
mbed_official 390:35c2c1cf29cd 44 #endif
mbed_official 390:35c2c1cf29cd 45
mbed_official 390:35c2c1cf29cd 46 #ifndef __CORE_CA9_H_GENERIC
mbed_official 390:35c2c1cf29cd 47 #define __CORE_CA9_H_GENERIC
mbed_official 390:35c2c1cf29cd 48
mbed_official 390:35c2c1cf29cd 49
mbed_official 390:35c2c1cf29cd 50 /** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions
mbed_official 390:35c2c1cf29cd 51 CMSIS violates the following MISRA-C:2004 rules:
mbed_official 390:35c2c1cf29cd 52
mbed_official 390:35c2c1cf29cd 53 \li Required Rule 8.5, object/function definition in header file.<br>
mbed_official 390:35c2c1cf29cd 54 Function definitions in header files are used to allow 'inlining'.
mbed_official 390:35c2c1cf29cd 55
mbed_official 390:35c2c1cf29cd 56 \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>
mbed_official 390:35c2c1cf29cd 57 Unions are used for effective representation of core registers.
mbed_official 390:35c2c1cf29cd 58
mbed_official 390:35c2c1cf29cd 59 \li Advisory Rule 19.7, Function-like macro defined.<br>
mbed_official 390:35c2c1cf29cd 60 Function-like macros are used to allow more efficient code.
mbed_official 390:35c2c1cf29cd 61 */
mbed_official 390:35c2c1cf29cd 62
mbed_official 390:35c2c1cf29cd 63
mbed_official 390:35c2c1cf29cd 64 /*******************************************************************************
mbed_official 390:35c2c1cf29cd 65 * CMSIS definitions
mbed_official 390:35c2c1cf29cd 66 ******************************************************************************/
mbed_official 390:35c2c1cf29cd 67 /** \ingroup Cortex_A9
mbed_official 390:35c2c1cf29cd 68 @{
mbed_official 390:35c2c1cf29cd 69 */
mbed_official 390:35c2c1cf29cd 70
mbed_official 390:35c2c1cf29cd 71 /* CMSIS CA9 definitions */
mbed_official 390:35c2c1cf29cd 72 #define __CA9_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */
mbed_official 390:35c2c1cf29cd 73 #define __CA9_CMSIS_VERSION_SUB (0x10) /*!< [15:0] CMSIS HAL sub version */
mbed_official 390:35c2c1cf29cd 74 #define __CA9_CMSIS_VERSION ((__CA9_CMSIS_VERSION_MAIN << 16) | \
mbed_official 390:35c2c1cf29cd 75 __CA9_CMSIS_VERSION_SUB ) /*!< CMSIS HAL version number */
mbed_official 390:35c2c1cf29cd 76
mbed_official 390:35c2c1cf29cd 77 #define __CORTEX_A (0x09) /*!< Cortex-A Core */
mbed_official 390:35c2c1cf29cd 78
mbed_official 390:35c2c1cf29cd 79
mbed_official 390:35c2c1cf29cd 80 #if defined ( __CC_ARM )
mbed_official 390:35c2c1cf29cd 81 #define __ASM __asm /*!< asm keyword for ARM Compiler */
mbed_official 390:35c2c1cf29cd 82 #define __INLINE __inline /*!< inline keyword for ARM Compiler */
mbed_official 390:35c2c1cf29cd 83 #define __STATIC_INLINE static __inline
mbed_official 390:35c2c1cf29cd 84 #define __STATIC_ASM static __asm
mbed_official 390:35c2c1cf29cd 85
mbed_official 390:35c2c1cf29cd 86 #elif defined ( __ICCARM__ )
mbed_official 390:35c2c1cf29cd 87 #define __ASM __asm /*!< asm keyword for IAR Compiler */
mbed_official 390:35c2c1cf29cd 88 #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */
mbed_official 390:35c2c1cf29cd 89 #define __STATIC_INLINE static inline
mbed_official 390:35c2c1cf29cd 90 #define __STATIC_ASM static __asm
mbed_official 390:35c2c1cf29cd 91
mbed_official 390:35c2c1cf29cd 92 #elif defined ( __TMS470__ )
mbed_official 390:35c2c1cf29cd 93 #define __ASM __asm /*!< asm keyword for TI CCS Compiler */
mbed_official 390:35c2c1cf29cd 94 #define __STATIC_INLINE static inline
mbed_official 390:35c2c1cf29cd 95 #define __STATIC_ASM static __asm
mbed_official 390:35c2c1cf29cd 96
mbed_official 390:35c2c1cf29cd 97 #elif defined ( __GNUC__ )
mbed_official 390:35c2c1cf29cd 98 #define __ASM __asm /*!< asm keyword for GNU Compiler */
mbed_official 390:35c2c1cf29cd 99 #define __INLINE inline /*!< inline keyword for GNU Compiler */
mbed_official 390:35c2c1cf29cd 100 #define __STATIC_INLINE static inline
mbed_official 390:35c2c1cf29cd 101 #define __STATIC_ASM static __asm
mbed_official 390:35c2c1cf29cd 102
mbed_official 390:35c2c1cf29cd 103 #elif defined ( __TASKING__ )
mbed_official 390:35c2c1cf29cd 104 #define __ASM __asm /*!< asm keyword for TASKING Compiler */
mbed_official 390:35c2c1cf29cd 105 #define __INLINE inline /*!< inline keyword for TASKING Compiler */
mbed_official 390:35c2c1cf29cd 106 #define __STATIC_INLINE static inline
mbed_official 390:35c2c1cf29cd 107 #define __STATIC_ASM static __asm
mbed_official 390:35c2c1cf29cd 108
mbed_official 390:35c2c1cf29cd 109 #endif
mbed_official 390:35c2c1cf29cd 110
mbed_official 390:35c2c1cf29cd 111 /** __FPU_USED indicates whether an FPU is used or not. For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions.
mbed_official 390:35c2c1cf29cd 112 */
mbed_official 390:35c2c1cf29cd 113 #if defined ( __CC_ARM )
mbed_official 390:35c2c1cf29cd 114 #if defined __TARGET_FPU_VFP
mbed_official 390:35c2c1cf29cd 115 #if (__FPU_PRESENT == 1)
mbed_official 390:35c2c1cf29cd 116 #define __FPU_USED 1
mbed_official 390:35c2c1cf29cd 117 #else
mbed_official 390:35c2c1cf29cd 118 #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
mbed_official 390:35c2c1cf29cd 119 #define __FPU_USED 0
mbed_official 390:35c2c1cf29cd 120 #endif
mbed_official 390:35c2c1cf29cd 121 #else
mbed_official 390:35c2c1cf29cd 122 #define __FPU_USED 0
mbed_official 390:35c2c1cf29cd 123 #endif
mbed_official 390:35c2c1cf29cd 124
mbed_official 390:35c2c1cf29cd 125 #elif defined ( __ICCARM__ )
mbed_official 390:35c2c1cf29cd 126 #if defined __ARMVFP__
mbed_official 390:35c2c1cf29cd 127 #if (__FPU_PRESENT == 1)
mbed_official 390:35c2c1cf29cd 128 #define __FPU_USED 1
mbed_official 390:35c2c1cf29cd 129 #else
mbed_official 390:35c2c1cf29cd 130 #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
mbed_official 390:35c2c1cf29cd 131 #define __FPU_USED 0
mbed_official 390:35c2c1cf29cd 132 #endif
mbed_official 390:35c2c1cf29cd 133 #else
mbed_official 390:35c2c1cf29cd 134 #define __FPU_USED 0
mbed_official 390:35c2c1cf29cd 135 #endif
mbed_official 390:35c2c1cf29cd 136
mbed_official 390:35c2c1cf29cd 137 #elif defined ( __TMS470__ )
mbed_official 390:35c2c1cf29cd 138 #if defined __TI_VFP_SUPPORT__
mbed_official 390:35c2c1cf29cd 139 #if (__FPU_PRESENT == 1)
mbed_official 390:35c2c1cf29cd 140 #define __FPU_USED 1
mbed_official 390:35c2c1cf29cd 141 #else
mbed_official 390:35c2c1cf29cd 142 #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
mbed_official 390:35c2c1cf29cd 143 #define __FPU_USED 0
mbed_official 390:35c2c1cf29cd 144 #endif
mbed_official 390:35c2c1cf29cd 145 #else
mbed_official 390:35c2c1cf29cd 146 #define __FPU_USED 0
mbed_official 390:35c2c1cf29cd 147 #endif
mbed_official 390:35c2c1cf29cd 148
mbed_official 390:35c2c1cf29cd 149 #elif defined ( __GNUC__ )
mbed_official 390:35c2c1cf29cd 150 #if defined (__VFP_FP__) && !defined(__SOFTFP__)
mbed_official 390:35c2c1cf29cd 151 #if (__FPU_PRESENT == 1)
mbed_official 390:35c2c1cf29cd 152 #define __FPU_USED 1
mbed_official 390:35c2c1cf29cd 153 #else
mbed_official 390:35c2c1cf29cd 154 #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
mbed_official 390:35c2c1cf29cd 155 #define __FPU_USED 0
mbed_official 390:35c2c1cf29cd 156 #endif
mbed_official 390:35c2c1cf29cd 157 #else
mbed_official 390:35c2c1cf29cd 158 #define __FPU_USED 0
mbed_official 390:35c2c1cf29cd 159 #endif
mbed_official 390:35c2c1cf29cd 160
mbed_official 390:35c2c1cf29cd 161 #elif defined ( __TASKING__ )
mbed_official 390:35c2c1cf29cd 162 #if defined __FPU_VFP__
mbed_official 390:35c2c1cf29cd 163 #if (__FPU_PRESENT == 1)
mbed_official 390:35c2c1cf29cd 164 #define __FPU_USED 1
mbed_official 390:35c2c1cf29cd 165 #else
mbed_official 390:35c2c1cf29cd 166 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
mbed_official 390:35c2c1cf29cd 167 #define __FPU_USED 0
mbed_official 390:35c2c1cf29cd 168 #endif
mbed_official 390:35c2c1cf29cd 169 #else
mbed_official 390:35c2c1cf29cd 170 #define __FPU_USED 0
mbed_official 390:35c2c1cf29cd 171 #endif
mbed_official 390:35c2c1cf29cd 172 #endif
mbed_official 390:35c2c1cf29cd 173
mbed_official 390:35c2c1cf29cd 174 #include <stdint.h> /*!< standard types definitions */
mbed_official 390:35c2c1cf29cd 175 #include "core_caInstr.h" /*!< Core Instruction Access */
mbed_official 390:35c2c1cf29cd 176 #include "core_caFunc.h" /*!< Core Function Access */
mbed_official 390:35c2c1cf29cd 177 #include "core_cm4_simd.h" /*!< Compiler specific SIMD Intrinsics */
mbed_official 390:35c2c1cf29cd 178
mbed_official 390:35c2c1cf29cd 179 #endif /* __CORE_CA9_H_GENERIC */
mbed_official 390:35c2c1cf29cd 180
mbed_official 390:35c2c1cf29cd 181 #ifndef __CMSIS_GENERIC
mbed_official 390:35c2c1cf29cd 182
mbed_official 390:35c2c1cf29cd 183 #ifndef __CORE_CA9_H_DEPENDANT
mbed_official 390:35c2c1cf29cd 184 #define __CORE_CA9_H_DEPENDANT
mbed_official 390:35c2c1cf29cd 185
mbed_official 390:35c2c1cf29cd 186 /* check device defines and use defaults */
mbed_official 390:35c2c1cf29cd 187 #if defined __CHECK_DEVICE_DEFINES
mbed_official 390:35c2c1cf29cd 188 #ifndef __CA9_REV
mbed_official 390:35c2c1cf29cd 189 #define __CA9_REV 0x0000
mbed_official 390:35c2c1cf29cd 190 #warning "__CA9_REV not defined in device header file; using default!"
mbed_official 390:35c2c1cf29cd 191 #endif
mbed_official 390:35c2c1cf29cd 192
mbed_official 390:35c2c1cf29cd 193 #ifndef __FPU_PRESENT
mbed_official 390:35c2c1cf29cd 194 #define __FPU_PRESENT 1
mbed_official 390:35c2c1cf29cd 195 #warning "__FPU_PRESENT not defined in device header file; using default!"
mbed_official 390:35c2c1cf29cd 196 #endif
mbed_official 390:35c2c1cf29cd 197
mbed_official 390:35c2c1cf29cd 198 #ifndef __Vendor_SysTickConfig
mbed_official 390:35c2c1cf29cd 199 #define __Vendor_SysTickConfig 1
mbed_official 390:35c2c1cf29cd 200 #endif
mbed_official 390:35c2c1cf29cd 201
mbed_official 390:35c2c1cf29cd 202 #if __Vendor_SysTickConfig == 0
mbed_official 390:35c2c1cf29cd 203 #error "__Vendor_SysTickConfig set to 0, but vendor systick timer must be supplied for Cortex-A9"
mbed_official 390:35c2c1cf29cd 204 #endif
mbed_official 390:35c2c1cf29cd 205 #endif
mbed_official 390:35c2c1cf29cd 206
mbed_official 390:35c2c1cf29cd 207 /* IO definitions (access restrictions to peripheral registers) */
mbed_official 390:35c2c1cf29cd 208 /**
mbed_official 390:35c2c1cf29cd 209 \defgroup CMSIS_glob_defs CMSIS Global Defines
mbed_official 390:35c2c1cf29cd 210
mbed_official 390:35c2c1cf29cd 211 <strong>IO Type Qualifiers</strong> are used
mbed_official 390:35c2c1cf29cd 212 \li to specify the access to peripheral variables.
mbed_official 390:35c2c1cf29cd 213 \li for automatic generation of peripheral register debug information.
mbed_official 390:35c2c1cf29cd 214 */
mbed_official 390:35c2c1cf29cd 215 #ifdef __cplusplus
mbed_official 390:35c2c1cf29cd 216 #define __I volatile /*!< Defines 'read only' permissions */
mbed_official 390:35c2c1cf29cd 217 #else
mbed_official 390:35c2c1cf29cd 218 #define __I volatile const /*!< Defines 'read only' permissions */
mbed_official 390:35c2c1cf29cd 219 #endif
mbed_official 390:35c2c1cf29cd 220 #define __O volatile /*!< Defines 'write only' permissions */
mbed_official 390:35c2c1cf29cd 221 #define __IO volatile /*!< Defines 'read / write' permissions */
mbed_official 390:35c2c1cf29cd 222
mbed_official 390:35c2c1cf29cd 223 /*@} end of group Cortex_A9 */
mbed_official 390:35c2c1cf29cd 224
mbed_official 390:35c2c1cf29cd 225
mbed_official 390:35c2c1cf29cd 226 /*******************************************************************************
mbed_official 390:35c2c1cf29cd 227 * Register Abstraction
mbed_official 390:35c2c1cf29cd 228 ******************************************************************************/
mbed_official 390:35c2c1cf29cd 229 /** \defgroup CMSIS_core_register Defines and Type Definitions
mbed_official 390:35c2c1cf29cd 230 \brief Type definitions and defines for Cortex-A processor based devices.
mbed_official 390:35c2c1cf29cd 231 */
mbed_official 390:35c2c1cf29cd 232
mbed_official 390:35c2c1cf29cd 233 /** \ingroup CMSIS_core_register
mbed_official 390:35c2c1cf29cd 234 \defgroup CMSIS_CORE Status and Control Registers
mbed_official 390:35c2c1cf29cd 235 \brief Core Register type definitions.
mbed_official 390:35c2c1cf29cd 236 @{
mbed_official 390:35c2c1cf29cd 237 */
mbed_official 390:35c2c1cf29cd 238
mbed_official 390:35c2c1cf29cd 239 /** \brief Union type to access the Application Program Status Register (APSR).
mbed_official 390:35c2c1cf29cd 240 */
mbed_official 390:35c2c1cf29cd 241 typedef union
mbed_official 390:35c2c1cf29cd 242 {
mbed_official 390:35c2c1cf29cd 243 struct
mbed_official 390:35c2c1cf29cd 244 {
mbed_official 390:35c2c1cf29cd 245 uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */
mbed_official 390:35c2c1cf29cd 246 uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */
mbed_official 390:35c2c1cf29cd 247 uint32_t reserved1:7; /*!< bit: 20..23 Reserved */
mbed_official 390:35c2c1cf29cd 248 uint32_t Q:1; /*!< bit: 27 Saturation condition flag */
mbed_official 390:35c2c1cf29cd 249 uint32_t V:1; /*!< bit: 28 Overflow condition code flag */
mbed_official 390:35c2c1cf29cd 250 uint32_t C:1; /*!< bit: 29 Carry condition code flag */
mbed_official 390:35c2c1cf29cd 251 uint32_t Z:1; /*!< bit: 30 Zero condition code flag */
mbed_official 390:35c2c1cf29cd 252 uint32_t N:1; /*!< bit: 31 Negative condition code flag */
mbed_official 390:35c2c1cf29cd 253 } b; /*!< Structure used for bit access */
mbed_official 390:35c2c1cf29cd 254 uint32_t w; /*!< Type used for word access */
mbed_official 390:35c2c1cf29cd 255 } APSR_Type;
mbed_official 390:35c2c1cf29cd 256
mbed_official 390:35c2c1cf29cd 257
mbed_official 390:35c2c1cf29cd 258 /*@} end of group CMSIS_CORE */
mbed_official 390:35c2c1cf29cd 259
mbed_official 390:35c2c1cf29cd 260 /*@} end of CMSIS_Core_FPUFunctions */
mbed_official 390:35c2c1cf29cd 261
mbed_official 390:35c2c1cf29cd 262
mbed_official 390:35c2c1cf29cd 263 #endif /* __CORE_CA9_H_GENERIC */
mbed_official 390:35c2c1cf29cd 264
mbed_official 390:35c2c1cf29cd 265 #endif /* __CMSIS_GENERIC */
mbed_official 390:35c2c1cf29cd 266
mbed_official 390:35c2c1cf29cd 267 #ifdef __cplusplus
mbed_official 390:35c2c1cf29cd 268 }
mbed_official 390:35c2c1cf29cd 269
mbed_official 390:35c2c1cf29cd 270
mbed_official 390:35c2c1cf29cd 271 #endif