Support for MSP430 launchpad.

Fork of mbed by mbed official

Committer:
emilmont
Date:
Tue Feb 19 10:00:15 2013 +0000
Revision:
60:3d0ef94e36ec
Add Freescale FRDM-KL25Z

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 60:3d0ef94e36ec 1 /**************************************************************************//**
emilmont 60:3d0ef94e36ec 2 * @file core_cm0plus.h
emilmont 60:3d0ef94e36ec 3 * @brief CMSIS Cortex-M0+ Core Peripheral Access Layer Header File
emilmont 60:3d0ef94e36ec 4 * @version V3.02
emilmont 60:3d0ef94e36ec 5 * @date 05. November 2012
emilmont 60:3d0ef94e36ec 6 *
emilmont 60:3d0ef94e36ec 7 * @note
emilmont 60:3d0ef94e36ec 8 * Copyright (C) 2009-2012 ARM Limited. All rights reserved.
emilmont 60:3d0ef94e36ec 9 *
emilmont 60:3d0ef94e36ec 10 * @par
emilmont 60:3d0ef94e36ec 11 * ARM Limited (ARM) is supplying this software for use with Cortex-M
emilmont 60:3d0ef94e36ec 12 * processor based microcontrollers. This file can be freely distributed
emilmont 60:3d0ef94e36ec 13 * within development tools that are supporting such ARM based processors.
emilmont 60:3d0ef94e36ec 14 *
emilmont 60:3d0ef94e36ec 15 * @par
emilmont 60:3d0ef94e36ec 16 * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
emilmont 60:3d0ef94e36ec 17 * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
emilmont 60:3d0ef94e36ec 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
emilmont 60:3d0ef94e36ec 19 * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
emilmont 60:3d0ef94e36ec 20 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
emilmont 60:3d0ef94e36ec 21 *
emilmont 60:3d0ef94e36ec 22 ******************************************************************************/
emilmont 60:3d0ef94e36ec 23 #if defined ( __ICCARM__ )
emilmont 60:3d0ef94e36ec 24 #pragma system_include /* treat file as system include file for MISRA check */
emilmont 60:3d0ef94e36ec 25 #endif
emilmont 60:3d0ef94e36ec 26
emilmont 60:3d0ef94e36ec 27 #ifdef __cplusplus
emilmont 60:3d0ef94e36ec 28 extern "C" {
emilmont 60:3d0ef94e36ec 29 #endif
emilmont 60:3d0ef94e36ec 30
emilmont 60:3d0ef94e36ec 31 #ifndef __CORE_CM0PLUS_H_GENERIC
emilmont 60:3d0ef94e36ec 32 #define __CORE_CM0PLUS_H_GENERIC
emilmont 60:3d0ef94e36ec 33
emilmont 60:3d0ef94e36ec 34 /** \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions
emilmont 60:3d0ef94e36ec 35 CMSIS violates the following MISRA-C:2004 rules:
emilmont 60:3d0ef94e36ec 36
emilmont 60:3d0ef94e36ec 37 \li Required Rule 8.5, object/function definition in header file.<br>
emilmont 60:3d0ef94e36ec 38 Function definitions in header files are used to allow 'inlining'.
emilmont 60:3d0ef94e36ec 39
emilmont 60:3d0ef94e36ec 40 \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>
emilmont 60:3d0ef94e36ec 41 Unions are used for effective representation of core registers.
emilmont 60:3d0ef94e36ec 42
emilmont 60:3d0ef94e36ec 43 \li Advisory Rule 19.7, Function-like macro defined.<br>
emilmont 60:3d0ef94e36ec 44 Function-like macros are used to allow more efficient code.
emilmont 60:3d0ef94e36ec 45 */
emilmont 60:3d0ef94e36ec 46
emilmont 60:3d0ef94e36ec 47
emilmont 60:3d0ef94e36ec 48 /*******************************************************************************
emilmont 60:3d0ef94e36ec 49 * CMSIS definitions
emilmont 60:3d0ef94e36ec 50 ******************************************************************************/
emilmont 60:3d0ef94e36ec 51 /** \ingroup Cortex-M0+
emilmont 60:3d0ef94e36ec 52 @{
emilmont 60:3d0ef94e36ec 53 */
emilmont 60:3d0ef94e36ec 54
emilmont 60:3d0ef94e36ec 55 /* CMSIS CM0P definitions */
emilmont 60:3d0ef94e36ec 56 #define __CM0PLUS_CMSIS_VERSION_MAIN (0x03) /*!< [31:16] CMSIS HAL main version */
emilmont 60:3d0ef94e36ec 57 #define __CM0PLUS_CMSIS_VERSION_SUB (0x01) /*!< [15:0] CMSIS HAL sub version */
emilmont 60:3d0ef94e36ec 58 #define __CM0PLUS_CMSIS_VERSION ((__CM0PLUS_CMSIS_VERSION_MAIN << 16) | \
emilmont 60:3d0ef94e36ec 59 __CM0PLUS_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number */
emilmont 60:3d0ef94e36ec 60
emilmont 60:3d0ef94e36ec 61 #define __CORTEX_M (0x00) /*!< Cortex-M Core */
emilmont 60:3d0ef94e36ec 62
emilmont 60:3d0ef94e36ec 63
emilmont 60:3d0ef94e36ec 64 #if defined ( __CC_ARM )
emilmont 60:3d0ef94e36ec 65 #define __ASM __asm /*!< asm keyword for ARM Compiler */
emilmont 60:3d0ef94e36ec 66 #define __INLINE __inline /*!< inline keyword for ARM Compiler */
emilmont 60:3d0ef94e36ec 67 #define __STATIC_INLINE static __inline
emilmont 60:3d0ef94e36ec 68
emilmont 60:3d0ef94e36ec 69 #elif defined ( __ICCARM__ )
emilmont 60:3d0ef94e36ec 70 #define __ASM __asm /*!< asm keyword for IAR Compiler */
emilmont 60:3d0ef94e36ec 71 #define __INLINE inline /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */
emilmont 60:3d0ef94e36ec 72 #define __STATIC_INLINE static inline
emilmont 60:3d0ef94e36ec 73
emilmont 60:3d0ef94e36ec 74 #elif defined ( __GNUC__ )
emilmont 60:3d0ef94e36ec 75 #define __ASM __asm /*!< asm keyword for GNU Compiler */
emilmont 60:3d0ef94e36ec 76 #define __INLINE inline /*!< inline keyword for GNU Compiler */
emilmont 60:3d0ef94e36ec 77 #define __STATIC_INLINE static inline
emilmont 60:3d0ef94e36ec 78
emilmont 60:3d0ef94e36ec 79 #elif defined ( __TASKING__ )
emilmont 60:3d0ef94e36ec 80 #define __ASM __asm /*!< asm keyword for TASKING Compiler */
emilmont 60:3d0ef94e36ec 81 #define __INLINE inline /*!< inline keyword for TASKING Compiler */
emilmont 60:3d0ef94e36ec 82 #define __STATIC_INLINE static inline
emilmont 60:3d0ef94e36ec 83
emilmont 60:3d0ef94e36ec 84 #endif
emilmont 60:3d0ef94e36ec 85
emilmont 60:3d0ef94e36ec 86 /** __FPU_USED indicates whether an FPU is used or not. This core does not support an FPU at all
emilmont 60:3d0ef94e36ec 87 */
emilmont 60:3d0ef94e36ec 88 #define __FPU_USED 0
emilmont 60:3d0ef94e36ec 89
emilmont 60:3d0ef94e36ec 90 #if defined ( __CC_ARM )
emilmont 60:3d0ef94e36ec 91 #if defined __TARGET_FPU_VFP
emilmont 60:3d0ef94e36ec 92 #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
emilmont 60:3d0ef94e36ec 93 #endif
emilmont 60:3d0ef94e36ec 94
emilmont 60:3d0ef94e36ec 95 #elif defined ( __ICCARM__ )
emilmont 60:3d0ef94e36ec 96 #if defined __ARMVFP__
emilmont 60:3d0ef94e36ec 97 #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
emilmont 60:3d0ef94e36ec 98 #endif
emilmont 60:3d0ef94e36ec 99
emilmont 60:3d0ef94e36ec 100 #elif defined ( __GNUC__ )
emilmont 60:3d0ef94e36ec 101 #if defined (__VFP_FP__) && !defined(__SOFTFP__)
emilmont 60:3d0ef94e36ec 102 #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
emilmont 60:3d0ef94e36ec 103 #endif
emilmont 60:3d0ef94e36ec 104
emilmont 60:3d0ef94e36ec 105 #elif defined ( __TASKING__ )
emilmont 60:3d0ef94e36ec 106 #if defined __FPU_VFP__
emilmont 60:3d0ef94e36ec 107 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
emilmont 60:3d0ef94e36ec 108 #endif
emilmont 60:3d0ef94e36ec 109 #endif
emilmont 60:3d0ef94e36ec 110
emilmont 60:3d0ef94e36ec 111 #include <stdint.h> /* standard types definitions */
emilmont 60:3d0ef94e36ec 112 #include <core_cmInstr.h> /* Core Instruction Access */
emilmont 60:3d0ef94e36ec 113 #include <core_cmFunc.h> /* Core Function Access */
emilmont 60:3d0ef94e36ec 114
emilmont 60:3d0ef94e36ec 115 #endif /* __CORE_CM0PLUS_H_GENERIC */
emilmont 60:3d0ef94e36ec 116
emilmont 60:3d0ef94e36ec 117 #ifndef __CMSIS_GENERIC
emilmont 60:3d0ef94e36ec 118
emilmont 60:3d0ef94e36ec 119 #ifndef __CORE_CM0PLUS_H_DEPENDANT
emilmont 60:3d0ef94e36ec 120 #define __CORE_CM0PLUS_H_DEPENDANT
emilmont 60:3d0ef94e36ec 121
emilmont 60:3d0ef94e36ec 122 /* check device defines and use defaults */
emilmont 60:3d0ef94e36ec 123 #if defined __CHECK_DEVICE_DEFINES
emilmont 60:3d0ef94e36ec 124 #ifndef __CM0PLUS_REV
emilmont 60:3d0ef94e36ec 125 #define __CM0PLUS_REV 0x0000
emilmont 60:3d0ef94e36ec 126 #warning "__CM0PLUS_REV not defined in device header file; using default!"
emilmont 60:3d0ef94e36ec 127 #endif
emilmont 60:3d0ef94e36ec 128
emilmont 60:3d0ef94e36ec 129 #ifndef __MPU_PRESENT
emilmont 60:3d0ef94e36ec 130 #define __MPU_PRESENT 0
emilmont 60:3d0ef94e36ec 131 #warning "__MPU_PRESENT not defined in device header file; using default!"
emilmont 60:3d0ef94e36ec 132 #endif
emilmont 60:3d0ef94e36ec 133
emilmont 60:3d0ef94e36ec 134 #ifndef __VTOR_PRESENT
emilmont 60:3d0ef94e36ec 135 #define __VTOR_PRESENT 0
emilmont 60:3d0ef94e36ec 136 #warning "__VTOR_PRESENT not defined in device header file; using default!"
emilmont 60:3d0ef94e36ec 137 #endif
emilmont 60:3d0ef94e36ec 138
emilmont 60:3d0ef94e36ec 139 #ifndef __NVIC_PRIO_BITS
emilmont 60:3d0ef94e36ec 140 #define __NVIC_PRIO_BITS 2
emilmont 60:3d0ef94e36ec 141 #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
emilmont 60:3d0ef94e36ec 142 #endif
emilmont 60:3d0ef94e36ec 143
emilmont 60:3d0ef94e36ec 144 #ifndef __Vendor_SysTickConfig
emilmont 60:3d0ef94e36ec 145 #define __Vendor_SysTickConfig 0
emilmont 60:3d0ef94e36ec 146 #warning "__Vendor_SysTickConfig not defined in device header file; using default!"
emilmont 60:3d0ef94e36ec 147 #endif
emilmont 60:3d0ef94e36ec 148 #endif
emilmont 60:3d0ef94e36ec 149
emilmont 60:3d0ef94e36ec 150 /* IO definitions (access restrictions to peripheral registers) */
emilmont 60:3d0ef94e36ec 151 /**
emilmont 60:3d0ef94e36ec 152 \defgroup CMSIS_glob_defs CMSIS Global Defines
emilmont 60:3d0ef94e36ec 153
emilmont 60:3d0ef94e36ec 154 <strong>IO Type Qualifiers</strong> are used
emilmont 60:3d0ef94e36ec 155 \li to specify the access to peripheral variables.
emilmont 60:3d0ef94e36ec 156 \li for automatic generation of peripheral register debug information.
emilmont 60:3d0ef94e36ec 157 */
emilmont 60:3d0ef94e36ec 158 #ifdef __cplusplus
emilmont 60:3d0ef94e36ec 159 #define __I volatile /*!< Defines 'read only' permissions */
emilmont 60:3d0ef94e36ec 160 #else
emilmont 60:3d0ef94e36ec 161 #define __I volatile const /*!< Defines 'read only' permissions */
emilmont 60:3d0ef94e36ec 162 #endif
emilmont 60:3d0ef94e36ec 163 #define __O volatile /*!< Defines 'write only' permissions */
emilmont 60:3d0ef94e36ec 164 #define __IO volatile /*!< Defines 'read / write' permissions */
emilmont 60:3d0ef94e36ec 165
emilmont 60:3d0ef94e36ec 166 /*@} end of group Cortex-M0+ */
emilmont 60:3d0ef94e36ec 167
emilmont 60:3d0ef94e36ec 168
emilmont 60:3d0ef94e36ec 169
emilmont 60:3d0ef94e36ec 170 /*******************************************************************************
emilmont 60:3d0ef94e36ec 171 * Register Abstraction
emilmont 60:3d0ef94e36ec 172 Core Register contain:
emilmont 60:3d0ef94e36ec 173 - Core Register
emilmont 60:3d0ef94e36ec 174 - Core NVIC Register
emilmont 60:3d0ef94e36ec 175 - Core SCB Register
emilmont 60:3d0ef94e36ec 176 - Core SysTick Register
emilmont 60:3d0ef94e36ec 177 - Core MPU Register
emilmont 60:3d0ef94e36ec 178 ******************************************************************************/
emilmont 60:3d0ef94e36ec 179 /** \defgroup CMSIS_core_register Defines and Type Definitions
emilmont 60:3d0ef94e36ec 180 \brief Type definitions and defines for Cortex-M processor based devices.
emilmont 60:3d0ef94e36ec 181 */
emilmont 60:3d0ef94e36ec 182
emilmont 60:3d0ef94e36ec 183 /** \ingroup CMSIS_core_register
emilmont 60:3d0ef94e36ec 184 \defgroup CMSIS_CORE Status and Control Registers
emilmont 60:3d0ef94e36ec 185 \brief Core Register type definitions.
emilmont 60:3d0ef94e36ec 186 @{
emilmont 60:3d0ef94e36ec 187 */
emilmont 60:3d0ef94e36ec 188
emilmont 60:3d0ef94e36ec 189 /** \brief Union type to access the Application Program Status Register (APSR).
emilmont 60:3d0ef94e36ec 190 */
emilmont 60:3d0ef94e36ec 191 typedef union
emilmont 60:3d0ef94e36ec 192 {
emilmont 60:3d0ef94e36ec 193 struct
emilmont 60:3d0ef94e36ec 194 {
emilmont 60:3d0ef94e36ec 195 #if (__CORTEX_M != 0x04)
emilmont 60:3d0ef94e36ec 196 uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */
emilmont 60:3d0ef94e36ec 197 #else
emilmont 60:3d0ef94e36ec 198 uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */
emilmont 60:3d0ef94e36ec 199 uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */
emilmont 60:3d0ef94e36ec 200 uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */
emilmont 60:3d0ef94e36ec 201 #endif
emilmont 60:3d0ef94e36ec 202 uint32_t Q:1; /*!< bit: 27 Saturation condition flag */
emilmont 60:3d0ef94e36ec 203 uint32_t V:1; /*!< bit: 28 Overflow condition code flag */
emilmont 60:3d0ef94e36ec 204 uint32_t C:1; /*!< bit: 29 Carry condition code flag */
emilmont 60:3d0ef94e36ec 205 uint32_t Z:1; /*!< bit: 30 Zero condition code flag */
emilmont 60:3d0ef94e36ec 206 uint32_t N:1; /*!< bit: 31 Negative condition code flag */
emilmont 60:3d0ef94e36ec 207 } b; /*!< Structure used for bit access */
emilmont 60:3d0ef94e36ec 208 uint32_t w; /*!< Type used for word access */
emilmont 60:3d0ef94e36ec 209 } APSR_Type;
emilmont 60:3d0ef94e36ec 210
emilmont 60:3d0ef94e36ec 211
emilmont 60:3d0ef94e36ec 212 /** \brief Union type to access the Interrupt Program Status Register (IPSR).
emilmont 60:3d0ef94e36ec 213 */
emilmont 60:3d0ef94e36ec 214 typedef union
emilmont 60:3d0ef94e36ec 215 {
emilmont 60:3d0ef94e36ec 216 struct
emilmont 60:3d0ef94e36ec 217 {
emilmont 60:3d0ef94e36ec 218 uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */
emilmont 60:3d0ef94e36ec 219 uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */
emilmont 60:3d0ef94e36ec 220 } b; /*!< Structure used for bit access */
emilmont 60:3d0ef94e36ec 221 uint32_t w; /*!< Type used for word access */
emilmont 60:3d0ef94e36ec 222 } IPSR_Type;
emilmont 60:3d0ef94e36ec 223
emilmont 60:3d0ef94e36ec 224
emilmont 60:3d0ef94e36ec 225 /** \brief Union type to access the Special-Purpose Program Status Registers (xPSR).
emilmont 60:3d0ef94e36ec 226 */
emilmont 60:3d0ef94e36ec 227 typedef union
emilmont 60:3d0ef94e36ec 228 {
emilmont 60:3d0ef94e36ec 229 struct
emilmont 60:3d0ef94e36ec 230 {
emilmont 60:3d0ef94e36ec 231 uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */
emilmont 60:3d0ef94e36ec 232 #if (__CORTEX_M != 0x04)
emilmont 60:3d0ef94e36ec 233 uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */
emilmont 60:3d0ef94e36ec 234 #else
emilmont 60:3d0ef94e36ec 235 uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */
emilmont 60:3d0ef94e36ec 236 uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */
emilmont 60:3d0ef94e36ec 237 uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */
emilmont 60:3d0ef94e36ec 238 #endif
emilmont 60:3d0ef94e36ec 239 uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */
emilmont 60:3d0ef94e36ec 240 uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */
emilmont 60:3d0ef94e36ec 241 uint32_t Q:1; /*!< bit: 27 Saturation condition flag */
emilmont 60:3d0ef94e36ec 242 uint32_t V:1; /*!< bit: 28 Overflow condition code flag */
emilmont 60:3d0ef94e36ec 243 uint32_t C:1; /*!< bit: 29 Carry condition code flag */
emilmont 60:3d0ef94e36ec 244 uint32_t Z:1; /*!< bit: 30 Zero condition code flag */
emilmont 60:3d0ef94e36ec 245 uint32_t N:1; /*!< bit: 31 Negative condition code flag */
emilmont 60:3d0ef94e36ec 246 } b; /*!< Structure used for bit access */
emilmont 60:3d0ef94e36ec 247 uint32_t w; /*!< Type used for word access */
emilmont 60:3d0ef94e36ec 248 } xPSR_Type;
emilmont 60:3d0ef94e36ec 249
emilmont 60:3d0ef94e36ec 250
emilmont 60:3d0ef94e36ec 251 /** \brief Union type to access the Control Registers (CONTROL).
emilmont 60:3d0ef94e36ec 252 */
emilmont 60:3d0ef94e36ec 253 typedef union
emilmont 60:3d0ef94e36ec 254 {
emilmont 60:3d0ef94e36ec 255 struct
emilmont 60:3d0ef94e36ec 256 {
emilmont 60:3d0ef94e36ec 257 uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */
emilmont 60:3d0ef94e36ec 258 uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */
emilmont 60:3d0ef94e36ec 259 uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */
emilmont 60:3d0ef94e36ec 260 uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */
emilmont 60:3d0ef94e36ec 261 } b; /*!< Structure used for bit access */
emilmont 60:3d0ef94e36ec 262 uint32_t w; /*!< Type used for word access */
emilmont 60:3d0ef94e36ec 263 } CONTROL_Type;
emilmont 60:3d0ef94e36ec 264
emilmont 60:3d0ef94e36ec 265 /*@} end of group CMSIS_CORE */
emilmont 60:3d0ef94e36ec 266
emilmont 60:3d0ef94e36ec 267
emilmont 60:3d0ef94e36ec 268 /** \ingroup CMSIS_core_register
emilmont 60:3d0ef94e36ec 269 \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC)
emilmont 60:3d0ef94e36ec 270 \brief Type definitions for the NVIC Registers
emilmont 60:3d0ef94e36ec 271 @{
emilmont 60:3d0ef94e36ec 272 */
emilmont 60:3d0ef94e36ec 273
emilmont 60:3d0ef94e36ec 274 /** \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC).
emilmont 60:3d0ef94e36ec 275 */
emilmont 60:3d0ef94e36ec 276 typedef struct
emilmont 60:3d0ef94e36ec 277 {
emilmont 60:3d0ef94e36ec 278 __IO uint32_t ISER[1]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */
emilmont 60:3d0ef94e36ec 279 uint32_t RESERVED0[31];
emilmont 60:3d0ef94e36ec 280 __IO uint32_t ICER[1]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */
emilmont 60:3d0ef94e36ec 281 uint32_t RSERVED1[31];
emilmont 60:3d0ef94e36ec 282 __IO uint32_t ISPR[1]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */
emilmont 60:3d0ef94e36ec 283 uint32_t RESERVED2[31];
emilmont 60:3d0ef94e36ec 284 __IO uint32_t ICPR[1]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */
emilmont 60:3d0ef94e36ec 285 uint32_t RESERVED3[31];
emilmont 60:3d0ef94e36ec 286 uint32_t RESERVED4[64];
emilmont 60:3d0ef94e36ec 287 __IO uint32_t IP[8]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */
emilmont 60:3d0ef94e36ec 288 } NVIC_Type;
emilmont 60:3d0ef94e36ec 289
emilmont 60:3d0ef94e36ec 290 /*@} end of group CMSIS_NVIC */
emilmont 60:3d0ef94e36ec 291
emilmont 60:3d0ef94e36ec 292
emilmont 60:3d0ef94e36ec 293 /** \ingroup CMSIS_core_register
emilmont 60:3d0ef94e36ec 294 \defgroup CMSIS_SCB System Control Block (SCB)
emilmont 60:3d0ef94e36ec 295 \brief Type definitions for the System Control Block Registers
emilmont 60:3d0ef94e36ec 296 @{
emilmont 60:3d0ef94e36ec 297 */
emilmont 60:3d0ef94e36ec 298
emilmont 60:3d0ef94e36ec 299 /** \brief Structure type to access the System Control Block (SCB).
emilmont 60:3d0ef94e36ec 300 */
emilmont 60:3d0ef94e36ec 301 typedef struct
emilmont 60:3d0ef94e36ec 302 {
emilmont 60:3d0ef94e36ec 303 __I uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */
emilmont 60:3d0ef94e36ec 304 __IO uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */
emilmont 60:3d0ef94e36ec 305 #if (__VTOR_PRESENT == 1)
emilmont 60:3d0ef94e36ec 306 __IO uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */
emilmont 60:3d0ef94e36ec 307 #else
emilmont 60:3d0ef94e36ec 308 uint32_t RESERVED0;
emilmont 60:3d0ef94e36ec 309 #endif
emilmont 60:3d0ef94e36ec 310 __IO uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */
emilmont 60:3d0ef94e36ec 311 __IO uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */
emilmont 60:3d0ef94e36ec 312 __IO uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */
emilmont 60:3d0ef94e36ec 313 uint32_t RESERVED1;
emilmont 60:3d0ef94e36ec 314 __IO uint32_t SHP[2]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */
emilmont 60:3d0ef94e36ec 315 __IO uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */
emilmont 60:3d0ef94e36ec 316 } SCB_Type;
emilmont 60:3d0ef94e36ec 317
emilmont 60:3d0ef94e36ec 318 /* SCB CPUID Register Definitions */
emilmont 60:3d0ef94e36ec 319 #define SCB_CPUID_IMPLEMENTER_Pos 24 /*!< SCB CPUID: IMPLEMENTER Position */
emilmont 60:3d0ef94e36ec 320 #define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */
emilmont 60:3d0ef94e36ec 321
emilmont 60:3d0ef94e36ec 322 #define SCB_CPUID_VARIANT_Pos 20 /*!< SCB CPUID: VARIANT Position */
emilmont 60:3d0ef94e36ec 323 #define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */
emilmont 60:3d0ef94e36ec 324
emilmont 60:3d0ef94e36ec 325 #define SCB_CPUID_ARCHITECTURE_Pos 16 /*!< SCB CPUID: ARCHITECTURE Position */
emilmont 60:3d0ef94e36ec 326 #define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */
emilmont 60:3d0ef94e36ec 327
emilmont 60:3d0ef94e36ec 328 #define SCB_CPUID_PARTNO_Pos 4 /*!< SCB CPUID: PARTNO Position */
emilmont 60:3d0ef94e36ec 329 #define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */
emilmont 60:3d0ef94e36ec 330
emilmont 60:3d0ef94e36ec 331 #define SCB_CPUID_REVISION_Pos 0 /*!< SCB CPUID: REVISION Position */
emilmont 60:3d0ef94e36ec 332 #define SCB_CPUID_REVISION_Msk (0xFUL << SCB_CPUID_REVISION_Pos) /*!< SCB CPUID: REVISION Mask */
emilmont 60:3d0ef94e36ec 333
emilmont 60:3d0ef94e36ec 334 /* SCB Interrupt Control State Register Definitions */
emilmont 60:3d0ef94e36ec 335 #define SCB_ICSR_NMIPENDSET_Pos 31 /*!< SCB ICSR: NMIPENDSET Position */
emilmont 60:3d0ef94e36ec 336 #define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */
emilmont 60:3d0ef94e36ec 337
emilmont 60:3d0ef94e36ec 338 #define SCB_ICSR_PENDSVSET_Pos 28 /*!< SCB ICSR: PENDSVSET Position */
emilmont 60:3d0ef94e36ec 339 #define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */
emilmont 60:3d0ef94e36ec 340
emilmont 60:3d0ef94e36ec 341 #define SCB_ICSR_PENDSVCLR_Pos 27 /*!< SCB ICSR: PENDSVCLR Position */
emilmont 60:3d0ef94e36ec 342 #define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */
emilmont 60:3d0ef94e36ec 343
emilmont 60:3d0ef94e36ec 344 #define SCB_ICSR_PENDSTSET_Pos 26 /*!< SCB ICSR: PENDSTSET Position */
emilmont 60:3d0ef94e36ec 345 #define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */
emilmont 60:3d0ef94e36ec 346
emilmont 60:3d0ef94e36ec 347 #define SCB_ICSR_PENDSTCLR_Pos 25 /*!< SCB ICSR: PENDSTCLR Position */
emilmont 60:3d0ef94e36ec 348 #define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */
emilmont 60:3d0ef94e36ec 349
emilmont 60:3d0ef94e36ec 350 #define SCB_ICSR_ISRPREEMPT_Pos 23 /*!< SCB ICSR: ISRPREEMPT Position */
emilmont 60:3d0ef94e36ec 351 #define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */
emilmont 60:3d0ef94e36ec 352
emilmont 60:3d0ef94e36ec 353 #define SCB_ICSR_ISRPENDING_Pos 22 /*!< SCB ICSR: ISRPENDING Position */
emilmont 60:3d0ef94e36ec 354 #define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */
emilmont 60:3d0ef94e36ec 355
emilmont 60:3d0ef94e36ec 356 #define SCB_ICSR_VECTPENDING_Pos 12 /*!< SCB ICSR: VECTPENDING Position */
emilmont 60:3d0ef94e36ec 357 #define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */
emilmont 60:3d0ef94e36ec 358
emilmont 60:3d0ef94e36ec 359 #define SCB_ICSR_VECTACTIVE_Pos 0 /*!< SCB ICSR: VECTACTIVE Position */
emilmont 60:3d0ef94e36ec 360 #define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL << SCB_ICSR_VECTACTIVE_Pos) /*!< SCB ICSR: VECTACTIVE Mask */
emilmont 60:3d0ef94e36ec 361
emilmont 60:3d0ef94e36ec 362 #if (__VTOR_PRESENT == 1)
emilmont 60:3d0ef94e36ec 363 /* SCB Interrupt Control State Register Definitions */
emilmont 60:3d0ef94e36ec 364 #define SCB_VTOR_TBLOFF_Pos 7 /*!< SCB VTOR: TBLOFF Position */
emilmont 60:3d0ef94e36ec 365 #define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */
emilmont 60:3d0ef94e36ec 366 #endif
emilmont 60:3d0ef94e36ec 367
emilmont 60:3d0ef94e36ec 368 /* SCB Application Interrupt and Reset Control Register Definitions */
emilmont 60:3d0ef94e36ec 369 #define SCB_AIRCR_VECTKEY_Pos 16 /*!< SCB AIRCR: VECTKEY Position */
emilmont 60:3d0ef94e36ec 370 #define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */
emilmont 60:3d0ef94e36ec 371
emilmont 60:3d0ef94e36ec 372 #define SCB_AIRCR_VECTKEYSTAT_Pos 16 /*!< SCB AIRCR: VECTKEYSTAT Position */
emilmont 60:3d0ef94e36ec 373 #define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */
emilmont 60:3d0ef94e36ec 374
emilmont 60:3d0ef94e36ec 375 #define SCB_AIRCR_ENDIANESS_Pos 15 /*!< SCB AIRCR: ENDIANESS Position */
emilmont 60:3d0ef94e36ec 376 #define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */
emilmont 60:3d0ef94e36ec 377
emilmont 60:3d0ef94e36ec 378 #define SCB_AIRCR_SYSRESETREQ_Pos 2 /*!< SCB AIRCR: SYSRESETREQ Position */
emilmont 60:3d0ef94e36ec 379 #define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */
emilmont 60:3d0ef94e36ec 380
emilmont 60:3d0ef94e36ec 381 #define SCB_AIRCR_VECTCLRACTIVE_Pos 1 /*!< SCB AIRCR: VECTCLRACTIVE Position */
emilmont 60:3d0ef94e36ec 382 #define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */
emilmont 60:3d0ef94e36ec 383
emilmont 60:3d0ef94e36ec 384 /* SCB System Control Register Definitions */
emilmont 60:3d0ef94e36ec 385 #define SCB_SCR_SEVONPEND_Pos 4 /*!< SCB SCR: SEVONPEND Position */
emilmont 60:3d0ef94e36ec 386 #define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */
emilmont 60:3d0ef94e36ec 387
emilmont 60:3d0ef94e36ec 388 #define SCB_SCR_SLEEPDEEP_Pos 2 /*!< SCB SCR: SLEEPDEEP Position */
emilmont 60:3d0ef94e36ec 389 #define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */
emilmont 60:3d0ef94e36ec 390
emilmont 60:3d0ef94e36ec 391 #define SCB_SCR_SLEEPONEXIT_Pos 1 /*!< SCB SCR: SLEEPONEXIT Position */
emilmont 60:3d0ef94e36ec 392 #define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */
emilmont 60:3d0ef94e36ec 393
emilmont 60:3d0ef94e36ec 394 /* SCB Configuration Control Register Definitions */
emilmont 60:3d0ef94e36ec 395 #define SCB_CCR_STKALIGN_Pos 9 /*!< SCB CCR: STKALIGN Position */
emilmont 60:3d0ef94e36ec 396 #define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */
emilmont 60:3d0ef94e36ec 397
emilmont 60:3d0ef94e36ec 398 #define SCB_CCR_UNALIGN_TRP_Pos 3 /*!< SCB CCR: UNALIGN_TRP Position */
emilmont 60:3d0ef94e36ec 399 #define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */
emilmont 60:3d0ef94e36ec 400
emilmont 60:3d0ef94e36ec 401 /* SCB System Handler Control and State Register Definitions */
emilmont 60:3d0ef94e36ec 402 #define SCB_SHCSR_SVCALLPENDED_Pos 15 /*!< SCB SHCSR: SVCALLPENDED Position */
emilmont 60:3d0ef94e36ec 403 #define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */
emilmont 60:3d0ef94e36ec 404
emilmont 60:3d0ef94e36ec 405 /*@} end of group CMSIS_SCB */
emilmont 60:3d0ef94e36ec 406
emilmont 60:3d0ef94e36ec 407
emilmont 60:3d0ef94e36ec 408 /** \ingroup CMSIS_core_register
emilmont 60:3d0ef94e36ec 409 \defgroup CMSIS_SysTick System Tick Timer (SysTick)
emilmont 60:3d0ef94e36ec 410 \brief Type definitions for the System Timer Registers.
emilmont 60:3d0ef94e36ec 411 @{
emilmont 60:3d0ef94e36ec 412 */
emilmont 60:3d0ef94e36ec 413
emilmont 60:3d0ef94e36ec 414 /** \brief Structure type to access the System Timer (SysTick).
emilmont 60:3d0ef94e36ec 415 */
emilmont 60:3d0ef94e36ec 416 typedef struct
emilmont 60:3d0ef94e36ec 417 {
emilmont 60:3d0ef94e36ec 418 __IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */
emilmont 60:3d0ef94e36ec 419 __IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */
emilmont 60:3d0ef94e36ec 420 __IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */
emilmont 60:3d0ef94e36ec 421 __I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */
emilmont 60:3d0ef94e36ec 422 } SysTick_Type;
emilmont 60:3d0ef94e36ec 423
emilmont 60:3d0ef94e36ec 424 /* SysTick Control / Status Register Definitions */
emilmont 60:3d0ef94e36ec 425 #define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */
emilmont 60:3d0ef94e36ec 426 #define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */
emilmont 60:3d0ef94e36ec 427
emilmont 60:3d0ef94e36ec 428 #define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */
emilmont 60:3d0ef94e36ec 429 #define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */
emilmont 60:3d0ef94e36ec 430
emilmont 60:3d0ef94e36ec 431 #define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */
emilmont 60:3d0ef94e36ec 432 #define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */
emilmont 60:3d0ef94e36ec 433
emilmont 60:3d0ef94e36ec 434 #define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */
emilmont 60:3d0ef94e36ec 435 #define SysTick_CTRL_ENABLE_Msk (1UL << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */
emilmont 60:3d0ef94e36ec 436
emilmont 60:3d0ef94e36ec 437 /* SysTick Reload Register Definitions */
emilmont 60:3d0ef94e36ec 438 #define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */
emilmont 60:3d0ef94e36ec 439 #define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */
emilmont 60:3d0ef94e36ec 440
emilmont 60:3d0ef94e36ec 441 /* SysTick Current Register Definitions */
emilmont 60:3d0ef94e36ec 442 #define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */
emilmont 60:3d0ef94e36ec 443 #define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick VAL: CURRENT Mask */
emilmont 60:3d0ef94e36ec 444
emilmont 60:3d0ef94e36ec 445 /* SysTick Calibration Register Definitions */
emilmont 60:3d0ef94e36ec 446 #define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */
emilmont 60:3d0ef94e36ec 447 #define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */
emilmont 60:3d0ef94e36ec 448
emilmont 60:3d0ef94e36ec 449 #define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */
emilmont 60:3d0ef94e36ec 450 #define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */
emilmont 60:3d0ef94e36ec 451
emilmont 60:3d0ef94e36ec 452 #define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */
emilmont 60:3d0ef94e36ec 453 #define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */
emilmont 60:3d0ef94e36ec 454
emilmont 60:3d0ef94e36ec 455 /*@} end of group CMSIS_SysTick */
emilmont 60:3d0ef94e36ec 456
emilmont 60:3d0ef94e36ec 457 #if (__MPU_PRESENT == 1)
emilmont 60:3d0ef94e36ec 458 /** \ingroup CMSIS_core_register
emilmont 60:3d0ef94e36ec 459 \defgroup CMSIS_MPU Memory Protection Unit (MPU)
emilmont 60:3d0ef94e36ec 460 \brief Type definitions for the Memory Protection Unit (MPU)
emilmont 60:3d0ef94e36ec 461 @{
emilmont 60:3d0ef94e36ec 462 */
emilmont 60:3d0ef94e36ec 463
emilmont 60:3d0ef94e36ec 464 /** \brief Structure type to access the Memory Protection Unit (MPU).
emilmont 60:3d0ef94e36ec 465 */
emilmont 60:3d0ef94e36ec 466 typedef struct
emilmont 60:3d0ef94e36ec 467 {
emilmont 60:3d0ef94e36ec 468 __I uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */
emilmont 60:3d0ef94e36ec 469 __IO uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */
emilmont 60:3d0ef94e36ec 470 __IO uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */
emilmont 60:3d0ef94e36ec 471 __IO uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */
emilmont 60:3d0ef94e36ec 472 __IO uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */
emilmont 60:3d0ef94e36ec 473 } MPU_Type;
emilmont 60:3d0ef94e36ec 474
emilmont 60:3d0ef94e36ec 475 /* MPU Type Register */
emilmont 60:3d0ef94e36ec 476 #define MPU_TYPE_IREGION_Pos 16 /*!< MPU TYPE: IREGION Position */
emilmont 60:3d0ef94e36ec 477 #define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */
emilmont 60:3d0ef94e36ec 478
emilmont 60:3d0ef94e36ec 479 #define MPU_TYPE_DREGION_Pos 8 /*!< MPU TYPE: DREGION Position */
emilmont 60:3d0ef94e36ec 480 #define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */
emilmont 60:3d0ef94e36ec 481
emilmont 60:3d0ef94e36ec 482 #define MPU_TYPE_SEPARATE_Pos 0 /*!< MPU TYPE: SEPARATE Position */
emilmont 60:3d0ef94e36ec 483 #define MPU_TYPE_SEPARATE_Msk (1UL << MPU_TYPE_SEPARATE_Pos) /*!< MPU TYPE: SEPARATE Mask */
emilmont 60:3d0ef94e36ec 484
emilmont 60:3d0ef94e36ec 485 /* MPU Control Register */
emilmont 60:3d0ef94e36ec 486 #define MPU_CTRL_PRIVDEFENA_Pos 2 /*!< MPU CTRL: PRIVDEFENA Position */
emilmont 60:3d0ef94e36ec 487 #define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */
emilmont 60:3d0ef94e36ec 488
emilmont 60:3d0ef94e36ec 489 #define MPU_CTRL_HFNMIENA_Pos 1 /*!< MPU CTRL: HFNMIENA Position */
emilmont 60:3d0ef94e36ec 490 #define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */
emilmont 60:3d0ef94e36ec 491
emilmont 60:3d0ef94e36ec 492 #define MPU_CTRL_ENABLE_Pos 0 /*!< MPU CTRL: ENABLE Position */
emilmont 60:3d0ef94e36ec 493 #define MPU_CTRL_ENABLE_Msk (1UL << MPU_CTRL_ENABLE_Pos) /*!< MPU CTRL: ENABLE Mask */
emilmont 60:3d0ef94e36ec 494
emilmont 60:3d0ef94e36ec 495 /* MPU Region Number Register */
emilmont 60:3d0ef94e36ec 496 #define MPU_RNR_REGION_Pos 0 /*!< MPU RNR: REGION Position */
emilmont 60:3d0ef94e36ec 497 #define MPU_RNR_REGION_Msk (0xFFUL << MPU_RNR_REGION_Pos) /*!< MPU RNR: REGION Mask */
emilmont 60:3d0ef94e36ec 498
emilmont 60:3d0ef94e36ec 499 /* MPU Region Base Address Register */
emilmont 60:3d0ef94e36ec 500 #define MPU_RBAR_ADDR_Pos 8 /*!< MPU RBAR: ADDR Position */
emilmont 60:3d0ef94e36ec 501 #define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */
emilmont 60:3d0ef94e36ec 502
emilmont 60:3d0ef94e36ec 503 #define MPU_RBAR_VALID_Pos 4 /*!< MPU RBAR: VALID Position */
emilmont 60:3d0ef94e36ec 504 #define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */
emilmont 60:3d0ef94e36ec 505
emilmont 60:3d0ef94e36ec 506 #define MPU_RBAR_REGION_Pos 0 /*!< MPU RBAR: REGION Position */
emilmont 60:3d0ef94e36ec 507 #define MPU_RBAR_REGION_Msk (0xFUL << MPU_RBAR_REGION_Pos) /*!< MPU RBAR: REGION Mask */
emilmont 60:3d0ef94e36ec 508
emilmont 60:3d0ef94e36ec 509 /* MPU Region Attribute and Size Register */
emilmont 60:3d0ef94e36ec 510 #define MPU_RASR_ATTRS_Pos 16 /*!< MPU RASR: MPU Region Attribute field Position */
emilmont 60:3d0ef94e36ec 511 #define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */
emilmont 60:3d0ef94e36ec 512
emilmont 60:3d0ef94e36ec 513 #define MPU_RASR_XN_Pos 28 /*!< MPU RASR: ATTRS.XN Position */
emilmont 60:3d0ef94e36ec 514 #define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */
emilmont 60:3d0ef94e36ec 515
emilmont 60:3d0ef94e36ec 516 #define MPU_RASR_AP_Pos 24 /*!< MPU RASR: ATTRS.AP Position */
emilmont 60:3d0ef94e36ec 517 #define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */
emilmont 60:3d0ef94e36ec 518
emilmont 60:3d0ef94e36ec 519 #define MPU_RASR_TEX_Pos 19 /*!< MPU RASR: ATTRS.TEX Position */
emilmont 60:3d0ef94e36ec 520 #define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */
emilmont 60:3d0ef94e36ec 521
emilmont 60:3d0ef94e36ec 522 #define MPU_RASR_S_Pos 18 /*!< MPU RASR: ATTRS.S Position */
emilmont 60:3d0ef94e36ec 523 #define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */
emilmont 60:3d0ef94e36ec 524
emilmont 60:3d0ef94e36ec 525 #define MPU_RASR_C_Pos 17 /*!< MPU RASR: ATTRS.C Position */
emilmont 60:3d0ef94e36ec 526 #define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */
emilmont 60:3d0ef94e36ec 527
emilmont 60:3d0ef94e36ec 528 #define MPU_RASR_B_Pos 16 /*!< MPU RASR: ATTRS.B Position */
emilmont 60:3d0ef94e36ec 529 #define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */
emilmont 60:3d0ef94e36ec 530
emilmont 60:3d0ef94e36ec 531 #define MPU_RASR_SRD_Pos 8 /*!< MPU RASR: Sub-Region Disable Position */
emilmont 60:3d0ef94e36ec 532 #define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */
emilmont 60:3d0ef94e36ec 533
emilmont 60:3d0ef94e36ec 534 #define MPU_RASR_SIZE_Pos 1 /*!< MPU RASR: Region Size Field Position */
emilmont 60:3d0ef94e36ec 535 #define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */
emilmont 60:3d0ef94e36ec 536
emilmont 60:3d0ef94e36ec 537 #define MPU_RASR_ENABLE_Pos 0 /*!< MPU RASR: Region enable bit Position */
emilmont 60:3d0ef94e36ec 538 #define MPU_RASR_ENABLE_Msk (1UL << MPU_RASR_ENABLE_Pos) /*!< MPU RASR: Region enable bit Disable Mask */
emilmont 60:3d0ef94e36ec 539
emilmont 60:3d0ef94e36ec 540 /*@} end of group CMSIS_MPU */
emilmont 60:3d0ef94e36ec 541 #endif
emilmont 60:3d0ef94e36ec 542
emilmont 60:3d0ef94e36ec 543
emilmont 60:3d0ef94e36ec 544 /** \ingroup CMSIS_core_register
emilmont 60:3d0ef94e36ec 545 \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug)
emilmont 60:3d0ef94e36ec 546 \brief Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR)
emilmont 60:3d0ef94e36ec 547 are only accessible over DAP and not via processor. Therefore
emilmont 60:3d0ef94e36ec 548 they are not covered by the Cortex-M0 header file.
emilmont 60:3d0ef94e36ec 549 @{
emilmont 60:3d0ef94e36ec 550 */
emilmont 60:3d0ef94e36ec 551 /*@} end of group CMSIS_CoreDebug */
emilmont 60:3d0ef94e36ec 552
emilmont 60:3d0ef94e36ec 553
emilmont 60:3d0ef94e36ec 554 /** \ingroup CMSIS_core_register
emilmont 60:3d0ef94e36ec 555 \defgroup CMSIS_core_base Core Definitions
emilmont 60:3d0ef94e36ec 556 \brief Definitions for base addresses, unions, and structures.
emilmont 60:3d0ef94e36ec 557 @{
emilmont 60:3d0ef94e36ec 558 */
emilmont 60:3d0ef94e36ec 559
emilmont 60:3d0ef94e36ec 560 /* Memory mapping of Cortex-M0+ Hardware */
emilmont 60:3d0ef94e36ec 561 #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */
emilmont 60:3d0ef94e36ec 562 #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */
emilmont 60:3d0ef94e36ec 563 #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */
emilmont 60:3d0ef94e36ec 564 #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */
emilmont 60:3d0ef94e36ec 565
emilmont 60:3d0ef94e36ec 566 #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */
emilmont 60:3d0ef94e36ec 567 #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */
emilmont 60:3d0ef94e36ec 568 #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */
emilmont 60:3d0ef94e36ec 569
emilmont 60:3d0ef94e36ec 570 #if (__MPU_PRESENT == 1)
emilmont 60:3d0ef94e36ec 571 #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */
emilmont 60:3d0ef94e36ec 572 #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */
emilmont 60:3d0ef94e36ec 573 #endif
emilmont 60:3d0ef94e36ec 574
emilmont 60:3d0ef94e36ec 575 /*@} */
emilmont 60:3d0ef94e36ec 576
emilmont 60:3d0ef94e36ec 577
emilmont 60:3d0ef94e36ec 578
emilmont 60:3d0ef94e36ec 579 /*******************************************************************************
emilmont 60:3d0ef94e36ec 580 * Hardware Abstraction Layer
emilmont 60:3d0ef94e36ec 581 Core Function Interface contains:
emilmont 60:3d0ef94e36ec 582 - Core NVIC Functions
emilmont 60:3d0ef94e36ec 583 - Core SysTick Functions
emilmont 60:3d0ef94e36ec 584 - Core Register Access Functions
emilmont 60:3d0ef94e36ec 585 ******************************************************************************/
emilmont 60:3d0ef94e36ec 586 /** \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference
emilmont 60:3d0ef94e36ec 587 */
emilmont 60:3d0ef94e36ec 588
emilmont 60:3d0ef94e36ec 589
emilmont 60:3d0ef94e36ec 590
emilmont 60:3d0ef94e36ec 591 /* ########################## NVIC functions #################################### */
emilmont 60:3d0ef94e36ec 592 /** \ingroup CMSIS_Core_FunctionInterface
emilmont 60:3d0ef94e36ec 593 \defgroup CMSIS_Core_NVICFunctions NVIC Functions
emilmont 60:3d0ef94e36ec 594 \brief Functions that manage interrupts and exceptions via the NVIC.
emilmont 60:3d0ef94e36ec 595 @{
emilmont 60:3d0ef94e36ec 596 */
emilmont 60:3d0ef94e36ec 597
emilmont 60:3d0ef94e36ec 598 /* Interrupt Priorities are WORD accessible only under ARMv6M */
emilmont 60:3d0ef94e36ec 599 /* The following MACROS handle generation of the register offset and byte masks */
emilmont 60:3d0ef94e36ec 600 #define _BIT_SHIFT(IRQn) ( (((uint32_t)(IRQn) ) & 0x03) * 8 )
emilmont 60:3d0ef94e36ec 601 #define _SHP_IDX(IRQn) ( ((((uint32_t)(IRQn) & 0x0F)-8) >> 2) )
emilmont 60:3d0ef94e36ec 602 #define _IP_IDX(IRQn) ( ((uint32_t)(IRQn) >> 2) )
emilmont 60:3d0ef94e36ec 603
emilmont 60:3d0ef94e36ec 604
emilmont 60:3d0ef94e36ec 605 /** \brief Enable External Interrupt
emilmont 60:3d0ef94e36ec 606
emilmont 60:3d0ef94e36ec 607 The function enables a device-specific interrupt in the NVIC interrupt controller.
emilmont 60:3d0ef94e36ec 608
emilmont 60:3d0ef94e36ec 609 \param [in] IRQn External interrupt number. Value cannot be negative.
emilmont 60:3d0ef94e36ec 610 */
emilmont 60:3d0ef94e36ec 611 __STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
emilmont 60:3d0ef94e36ec 612 {
emilmont 60:3d0ef94e36ec 613 NVIC->ISER[0] = (1 << ((uint32_t)(IRQn) & 0x1F));
emilmont 60:3d0ef94e36ec 614 }
emilmont 60:3d0ef94e36ec 615
emilmont 60:3d0ef94e36ec 616
emilmont 60:3d0ef94e36ec 617 /** \brief Disable External Interrupt
emilmont 60:3d0ef94e36ec 618
emilmont 60:3d0ef94e36ec 619 The function disables a device-specific interrupt in the NVIC interrupt controller.
emilmont 60:3d0ef94e36ec 620
emilmont 60:3d0ef94e36ec 621 \param [in] IRQn External interrupt number. Value cannot be negative.
emilmont 60:3d0ef94e36ec 622 */
emilmont 60:3d0ef94e36ec 623 __STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn)
emilmont 60:3d0ef94e36ec 624 {
emilmont 60:3d0ef94e36ec 625 NVIC->ICER[0] = (1 << ((uint32_t)(IRQn) & 0x1F));
emilmont 60:3d0ef94e36ec 626 }
emilmont 60:3d0ef94e36ec 627
emilmont 60:3d0ef94e36ec 628
emilmont 60:3d0ef94e36ec 629 /** \brief Get Pending Interrupt
emilmont 60:3d0ef94e36ec 630
emilmont 60:3d0ef94e36ec 631 The function reads the pending register in the NVIC and returns the pending bit
emilmont 60:3d0ef94e36ec 632 for the specified interrupt.
emilmont 60:3d0ef94e36ec 633
emilmont 60:3d0ef94e36ec 634 \param [in] IRQn Interrupt number.
emilmont 60:3d0ef94e36ec 635
emilmont 60:3d0ef94e36ec 636 \return 0 Interrupt status is not pending.
emilmont 60:3d0ef94e36ec 637 \return 1 Interrupt status is pending.
emilmont 60:3d0ef94e36ec 638 */
emilmont 60:3d0ef94e36ec 639 __STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn)
emilmont 60:3d0ef94e36ec 640 {
emilmont 60:3d0ef94e36ec 641 return((uint32_t) ((NVIC->ISPR[0] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0));
emilmont 60:3d0ef94e36ec 642 }
emilmont 60:3d0ef94e36ec 643
emilmont 60:3d0ef94e36ec 644
emilmont 60:3d0ef94e36ec 645 /** \brief Set Pending Interrupt
emilmont 60:3d0ef94e36ec 646
emilmont 60:3d0ef94e36ec 647 The function sets the pending bit of an external interrupt.
emilmont 60:3d0ef94e36ec 648
emilmont 60:3d0ef94e36ec 649 \param [in] IRQn Interrupt number. Value cannot be negative.
emilmont 60:3d0ef94e36ec 650 */
emilmont 60:3d0ef94e36ec 651 __STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn)
emilmont 60:3d0ef94e36ec 652 {
emilmont 60:3d0ef94e36ec 653 NVIC->ISPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F));
emilmont 60:3d0ef94e36ec 654 }
emilmont 60:3d0ef94e36ec 655
emilmont 60:3d0ef94e36ec 656
emilmont 60:3d0ef94e36ec 657 /** \brief Clear Pending Interrupt
emilmont 60:3d0ef94e36ec 658
emilmont 60:3d0ef94e36ec 659 The function clears the pending bit of an external interrupt.
emilmont 60:3d0ef94e36ec 660
emilmont 60:3d0ef94e36ec 661 \param [in] IRQn External interrupt number. Value cannot be negative.
emilmont 60:3d0ef94e36ec 662 */
emilmont 60:3d0ef94e36ec 663 __STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn)
emilmont 60:3d0ef94e36ec 664 {
emilmont 60:3d0ef94e36ec 665 NVIC->ICPR[0] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */
emilmont 60:3d0ef94e36ec 666 }
emilmont 60:3d0ef94e36ec 667
emilmont 60:3d0ef94e36ec 668
emilmont 60:3d0ef94e36ec 669 /** \brief Set Interrupt Priority
emilmont 60:3d0ef94e36ec 670
emilmont 60:3d0ef94e36ec 671 The function sets the priority of an interrupt.
emilmont 60:3d0ef94e36ec 672
emilmont 60:3d0ef94e36ec 673 \note The priority cannot be set for every core interrupt.
emilmont 60:3d0ef94e36ec 674
emilmont 60:3d0ef94e36ec 675 \param [in] IRQn Interrupt number.
emilmont 60:3d0ef94e36ec 676 \param [in] priority Priority to set.
emilmont 60:3d0ef94e36ec 677 */
emilmont 60:3d0ef94e36ec 678 __STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
emilmont 60:3d0ef94e36ec 679 {
emilmont 60:3d0ef94e36ec 680 if(IRQn < 0) {
emilmont 60:3d0ef94e36ec 681 SCB->SHP[_SHP_IDX(IRQn)] = (SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) |
emilmont 60:3d0ef94e36ec 682 (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); }
emilmont 60:3d0ef94e36ec 683 else {
emilmont 60:3d0ef94e36ec 684 NVIC->IP[_IP_IDX(IRQn)] = (NVIC->IP[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) |
emilmont 60:3d0ef94e36ec 685 (((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); }
emilmont 60:3d0ef94e36ec 686 }
emilmont 60:3d0ef94e36ec 687
emilmont 60:3d0ef94e36ec 688
emilmont 60:3d0ef94e36ec 689 /** \brief Get Interrupt Priority
emilmont 60:3d0ef94e36ec 690
emilmont 60:3d0ef94e36ec 691 The function reads the priority of an interrupt. The interrupt
emilmont 60:3d0ef94e36ec 692 number can be positive to specify an external (device specific)
emilmont 60:3d0ef94e36ec 693 interrupt, or negative to specify an internal (core) interrupt.
emilmont 60:3d0ef94e36ec 694
emilmont 60:3d0ef94e36ec 695
emilmont 60:3d0ef94e36ec 696 \param [in] IRQn Interrupt number.
emilmont 60:3d0ef94e36ec 697 \return Interrupt Priority. Value is aligned automatically to the implemented
emilmont 60:3d0ef94e36ec 698 priority bits of the microcontroller.
emilmont 60:3d0ef94e36ec 699 */
emilmont 60:3d0ef94e36ec 700 __STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn)
emilmont 60:3d0ef94e36ec 701 {
emilmont 60:3d0ef94e36ec 702
emilmont 60:3d0ef94e36ec 703 if(IRQn < 0) {
emilmont 60:3d0ef94e36ec 704 return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for Cortex-M0 system interrupts */
emilmont 60:3d0ef94e36ec 705 else {
emilmont 60:3d0ef94e36ec 706 return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & 0xFF) >> (8 - __NVIC_PRIO_BITS))); } /* get priority for device specific interrupts */
emilmont 60:3d0ef94e36ec 707 }
emilmont 60:3d0ef94e36ec 708
emilmont 60:3d0ef94e36ec 709
emilmont 60:3d0ef94e36ec 710 /** \brief System Reset
emilmont 60:3d0ef94e36ec 711
emilmont 60:3d0ef94e36ec 712 The function initiates a system reset request to reset the MCU.
emilmont 60:3d0ef94e36ec 713 */
emilmont 60:3d0ef94e36ec 714 __STATIC_INLINE void NVIC_SystemReset(void)
emilmont 60:3d0ef94e36ec 715 {
emilmont 60:3d0ef94e36ec 716 __DSB(); /* Ensure all outstanding memory accesses included
emilmont 60:3d0ef94e36ec 717 buffered write are completed before reset */
emilmont 60:3d0ef94e36ec 718 SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) |
emilmont 60:3d0ef94e36ec 719 SCB_AIRCR_SYSRESETREQ_Msk);
emilmont 60:3d0ef94e36ec 720 __DSB(); /* Ensure completion of memory access */
emilmont 60:3d0ef94e36ec 721 while(1); /* wait until reset */
emilmont 60:3d0ef94e36ec 722 }
emilmont 60:3d0ef94e36ec 723
emilmont 60:3d0ef94e36ec 724 /*@} end of CMSIS_Core_NVICFunctions */
emilmont 60:3d0ef94e36ec 725
emilmont 60:3d0ef94e36ec 726
emilmont 60:3d0ef94e36ec 727
emilmont 60:3d0ef94e36ec 728 /* ################################## SysTick function ############################################ */
emilmont 60:3d0ef94e36ec 729 /** \ingroup CMSIS_Core_FunctionInterface
emilmont 60:3d0ef94e36ec 730 \defgroup CMSIS_Core_SysTickFunctions SysTick Functions
emilmont 60:3d0ef94e36ec 731 \brief Functions that configure the System.
emilmont 60:3d0ef94e36ec 732 @{
emilmont 60:3d0ef94e36ec 733 */
emilmont 60:3d0ef94e36ec 734
emilmont 60:3d0ef94e36ec 735 #if (__Vendor_SysTickConfig == 0)
emilmont 60:3d0ef94e36ec 736
emilmont 60:3d0ef94e36ec 737 /** \brief System Tick Configuration
emilmont 60:3d0ef94e36ec 738
emilmont 60:3d0ef94e36ec 739 The function initializes the System Timer and its interrupt, and starts the System Tick Timer.
emilmont 60:3d0ef94e36ec 740 Counter is in free running mode to generate periodic interrupts.
emilmont 60:3d0ef94e36ec 741
emilmont 60:3d0ef94e36ec 742 \param [in] ticks Number of ticks between two interrupts.
emilmont 60:3d0ef94e36ec 743
emilmont 60:3d0ef94e36ec 744 \return 0 Function succeeded.
emilmont 60:3d0ef94e36ec 745 \return 1 Function failed.
emilmont 60:3d0ef94e36ec 746
emilmont 60:3d0ef94e36ec 747 \note When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the
emilmont 60:3d0ef94e36ec 748 function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>
emilmont 60:3d0ef94e36ec 749 must contain a vendor-specific implementation of this function.
emilmont 60:3d0ef94e36ec 750
emilmont 60:3d0ef94e36ec 751 */
emilmont 60:3d0ef94e36ec 752 __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
emilmont 60:3d0ef94e36ec 753 {
emilmont 60:3d0ef94e36ec 754 if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
emilmont 60:3d0ef94e36ec 755
emilmont 60:3d0ef94e36ec 756 SysTick->LOAD = ticks - 1; /* set reload register */
emilmont 60:3d0ef94e36ec 757 NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */
emilmont 60:3d0ef94e36ec 758 SysTick->VAL = 0; /* Load the SysTick Counter Value */
emilmont 60:3d0ef94e36ec 759 SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
emilmont 60:3d0ef94e36ec 760 SysTick_CTRL_TICKINT_Msk |
emilmont 60:3d0ef94e36ec 761 SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
emilmont 60:3d0ef94e36ec 762 return (0); /* Function successful */
emilmont 60:3d0ef94e36ec 763 }
emilmont 60:3d0ef94e36ec 764
emilmont 60:3d0ef94e36ec 765 #endif
emilmont 60:3d0ef94e36ec 766
emilmont 60:3d0ef94e36ec 767 /*@} end of CMSIS_Core_SysTickFunctions */
emilmont 60:3d0ef94e36ec 768
emilmont 60:3d0ef94e36ec 769
emilmont 60:3d0ef94e36ec 770
emilmont 60:3d0ef94e36ec 771
emilmont 60:3d0ef94e36ec 772 #endif /* __CORE_CM0PLUS_H_DEPENDANT */
emilmont 60:3d0ef94e36ec 773
emilmont 60:3d0ef94e36ec 774 #endif /* __CMSIS_GENERIC */
emilmont 60:3d0ef94e36ec 775
emilmont 60:3d0ef94e36ec 776 #ifdef __cplusplus
emilmont 60:3d0ef94e36ec 777 }
emilmont 60:3d0ef94e36ec 778 #endif