mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			
		
			
				
	
	
		
			277 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			277 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
/**************************************************************************//**
 | 
						|
 * @file     core_ca9.h
 | 
						|
 * @brief    CMSIS Cortex-A9 Core Peripheral Access Layer Header File
 | 
						|
 * @version
 | 
						|
 * @date     25 March 2013
 | 
						|
 *
 | 
						|
 * @note
 | 
						|
 *
 | 
						|
 ******************************************************************************/
 | 
						|
/* Copyright (c) 2009 - 2012 ARM LIMITED
 | 
						|
 | 
						|
   All rights reserved.
 | 
						|
   Redistribution and use in source and binary forms, with or without
 | 
						|
   modification, are permitted provided that the following conditions are met:
 | 
						|
   - Redistributions of source code must retain the above copyright
 | 
						|
     notice, this list of conditions and the following disclaimer.
 | 
						|
   - Redistributions in binary form must reproduce the above copyright
 | 
						|
     notice, this list of conditions and the following disclaimer in the
 | 
						|
     documentation and/or other materials provided with the distribution.
 | 
						|
   - Neither the name of ARM nor the names of its contributors may be used
 | 
						|
     to endorse or promote products derived from this software without
 | 
						|
     specific prior written permission.
 | 
						|
   *
 | 
						|
   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
						|
   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
						|
   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
						|
   ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
 | 
						|
   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | 
						|
   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | 
						|
   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | 
						|
   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | 
						|
   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
						|
   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
						|
   POSSIBILITY OF SUCH DAMAGE.
 | 
						|
   ---------------------------------------------------------------------------*/
 | 
						|
 | 
						|
 | 
						|
#if defined ( __ICCARM__ )
 | 
						|
 #pragma system_include  /* treat file as system include file for MISRA check */
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
 extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
#ifndef __CORE_CA9_H_GENERIC
 | 
						|
#define __CORE_CA9_H_GENERIC
 | 
						|
 | 
						|
 | 
						|
/** \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions
 | 
						|
  CMSIS violates the following MISRA-C:2004 rules:
 | 
						|
 | 
						|
   \li Required Rule 8.5, object/function definition in header file.<br>
 | 
						|
     Function definitions in header files are used to allow 'inlining'.
 | 
						|
 | 
						|
   \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>
 | 
						|
     Unions are used for effective representation of core registers.
 | 
						|
 | 
						|
   \li Advisory Rule 19.7, Function-like macro defined.<br>
 | 
						|
     Function-like macros are used to allow more efficient code.
 | 
						|
 */
 | 
						|
 | 
						|
 | 
						|
/*******************************************************************************
 | 
						|
 *                 CMSIS definitions
 | 
						|
 ******************************************************************************/
 | 
						|
/** \ingroup Cortex_A9
 | 
						|
  @{
 | 
						|
 */
 | 
						|
 | 
						|
/*  CMSIS CA9 definitions */
 | 
						|
#define __CA9_CMSIS_VERSION_MAIN  (0x03)                                   /*!< [31:16] CMSIS HAL main version   */
 | 
						|
#define __CA9_CMSIS_VERSION_SUB   (0x10)                                   /*!< [15:0]  CMSIS HAL sub version    */
 | 
						|
#define __CA9_CMSIS_VERSION       ((__CA9_CMSIS_VERSION_MAIN << 16) | \
 | 
						|
                                    __CA9_CMSIS_VERSION_SUB          )     /*!< CMSIS HAL version number         */
 | 
						|
 | 
						|
#define __CORTEX_A                (0x09)                                   /*!< Cortex-A Core                    */
 | 
						|
 | 
						|
 | 
						|
#if   defined ( __CC_ARM )
 | 
						|
  #define __ASM            __asm                                      /*!< asm keyword for ARM Compiler          */
 | 
						|
  #define __INLINE         __inline                                   /*!< inline keyword for ARM Compiler       */
 | 
						|
  #define __STATIC_INLINE  static __inline
 | 
						|
  #define __STATIC_ASM     static __asm
 | 
						|
 | 
						|
#elif defined ( __ICCARM__ )
 | 
						|
  #define __ASM            __asm                                      /*!< asm keyword for IAR Compiler          */
 | 
						|
  #define __INLINE         inline                                     /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */
 | 
						|
  #define __STATIC_INLINE  static inline
 | 
						|
  #define __STATIC_ASM     static __asm
 | 
						|
 | 
						|
#include <stdint.h>
 | 
						|
inline uint32_t __get_PSR(void) {
 | 
						|
	__ASM("mrs r0, cpsr");
 | 
						|
}
 | 
						|
 | 
						|
#elif defined ( __TMS470__ )
 | 
						|
  #define __ASM            __asm                                      /*!< asm keyword for TI CCS Compiler       */
 | 
						|
  #define __STATIC_INLINE  static inline
 | 
						|
  #define __STATIC_ASM     static __asm
 | 
						|
 | 
						|
#elif defined ( __GNUC__ )
 | 
						|
  #define __ASM            __asm                                      /*!< asm keyword for GNU Compiler          */
 | 
						|
  #define __INLINE         inline                                     /*!< inline keyword for GNU Compiler       */
 | 
						|
  #define __STATIC_INLINE  static inline
 | 
						|
  #define __STATIC_ASM     static __asm
 | 
						|
 | 
						|
#elif defined ( __TASKING__ )
 | 
						|
  #define __ASM            __asm                                      /*!< asm keyword for TASKING Compiler      */
 | 
						|
  #define __INLINE         inline                                     /*!< inline keyword for TASKING Compiler   */
 | 
						|
  #define __STATIC_INLINE  static inline
 | 
						|
  #define __STATIC_ASM     static __asm
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
/** __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.
 | 
						|
*/
 | 
						|
#if defined ( __CC_ARM )
 | 
						|
  #if defined __TARGET_FPU_VFP
 | 
						|
    #if (__FPU_PRESENT == 1)
 | 
						|
      #define __FPU_USED       1
 | 
						|
    #else
 | 
						|
      #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
						|
      #define __FPU_USED       0
 | 
						|
    #endif
 | 
						|
  #else
 | 
						|
    #define __FPU_USED         0
 | 
						|
  #endif
 | 
						|
 | 
						|
#elif defined ( __ICCARM__ )
 | 
						|
  #if defined __ARMVFP__
 | 
						|
    #if (__FPU_PRESENT == 1)
 | 
						|
      #define __FPU_USED       1
 | 
						|
    #else
 | 
						|
      #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
						|
      #define __FPU_USED       0
 | 
						|
    #endif
 | 
						|
  #else
 | 
						|
    #define __FPU_USED         0
 | 
						|
  #endif
 | 
						|
 | 
						|
#elif defined ( __TMS470__ )
 | 
						|
  #if defined __TI_VFP_SUPPORT__
 | 
						|
    #if (__FPU_PRESENT == 1)
 | 
						|
      #define __FPU_USED       1
 | 
						|
    #else
 | 
						|
      #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
						|
      #define __FPU_USED       0
 | 
						|
    #endif
 | 
						|
  #else
 | 
						|
    #define __FPU_USED         0
 | 
						|
  #endif
 | 
						|
 | 
						|
#elif defined ( __GNUC__ )
 | 
						|
  #if defined (__VFP_FP__) && !defined(__SOFTFP__)
 | 
						|
    #if (__FPU_PRESENT == 1)
 | 
						|
      #define __FPU_USED       1
 | 
						|
    #else
 | 
						|
      #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
						|
      #define __FPU_USED       0
 | 
						|
    #endif
 | 
						|
  #else
 | 
						|
    #define __FPU_USED         0
 | 
						|
  #endif
 | 
						|
 | 
						|
#elif defined ( __TASKING__ )
 | 
						|
  #if defined __FPU_VFP__
 | 
						|
    #if (__FPU_PRESENT == 1)
 | 
						|
      #define __FPU_USED       1
 | 
						|
    #else
 | 
						|
      #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
 | 
						|
      #define __FPU_USED       0
 | 
						|
    #endif
 | 
						|
  #else
 | 
						|
    #define __FPU_USED         0
 | 
						|
  #endif
 | 
						|
#endif
 | 
						|
 | 
						|
#include <stdint.h>                      /*!< standard types definitions                      */
 | 
						|
#include "core_caInstr.h"                /*!< Core Instruction Access                         */
 | 
						|
#include "core_caFunc.h"                 /*!< Core Function Access                            */
 | 
						|
#include "core_cm4_simd.h"               /*!< Compiler specific SIMD Intrinsics               */
 | 
						|
 | 
						|
#endif /* __CORE_CA9_H_GENERIC */
 | 
						|
 | 
						|
#ifndef __CMSIS_GENERIC
 | 
						|
 | 
						|
#ifndef __CORE_CA9_H_DEPENDANT
 | 
						|
#define __CORE_CA9_H_DEPENDANT
 | 
						|
 | 
						|
/* check device defines and use defaults */
 | 
						|
#if defined __CHECK_DEVICE_DEFINES
 | 
						|
  #ifndef __CA9_REV
 | 
						|
    #define __CA9_REV               0x0000
 | 
						|
    #warning "__CA9_REV not defined in device header file; using default!"
 | 
						|
  #endif
 | 
						|
 | 
						|
  #ifndef __FPU_PRESENT
 | 
						|
    #define __FPU_PRESENT             1
 | 
						|
    #warning "__FPU_PRESENT not defined in device header file; using default!"
 | 
						|
  #endif
 | 
						|
 | 
						|
  #ifndef __Vendor_SysTickConfig
 | 
						|
    #define __Vendor_SysTickConfig    1
 | 
						|
  #endif
 | 
						|
 | 
						|
  #if __Vendor_SysTickConfig == 0
 | 
						|
    #error "__Vendor_SysTickConfig set to 0, but vendor systick timer must be supplied for Cortex-A9"
 | 
						|
  #endif
 | 
						|
#endif
 | 
						|
 | 
						|
/* IO definitions (access restrictions to peripheral registers) */
 | 
						|
/**
 | 
						|
    \defgroup CMSIS_glob_defs CMSIS Global Defines
 | 
						|
 | 
						|
    <strong>IO Type Qualifiers</strong> are used
 | 
						|
    \li to specify the access to peripheral variables.
 | 
						|
    \li for automatic generation of peripheral register debug information.
 | 
						|
*/
 | 
						|
#ifdef __cplusplus
 | 
						|
  #define   __I     volatile             /*!< Defines 'read only' permissions                 */
 | 
						|
#else
 | 
						|
  #define   __I     volatile const       /*!< Defines 'read only' permissions                 */
 | 
						|
#endif
 | 
						|
#define     __O     volatile             /*!< Defines 'write only' permissions                */
 | 
						|
#define     __IO    volatile             /*!< Defines 'read / write' permissions              */
 | 
						|
 | 
						|
/*@} end of group Cortex_A9 */
 | 
						|
 | 
						|
 | 
						|
/*******************************************************************************
 | 
						|
 *                 Register Abstraction
 | 
						|
 ******************************************************************************/
 | 
						|
/** \defgroup CMSIS_core_register Defines and Type Definitions
 | 
						|
    \brief Type definitions and defines for Cortex-A processor based devices.
 | 
						|
*/
 | 
						|
 | 
						|
/** \ingroup    CMSIS_core_register
 | 
						|
    \defgroup   CMSIS_CORE  Status and Control Registers
 | 
						|
    \brief  Core Register type definitions.
 | 
						|
  @{
 | 
						|
 */
 | 
						|
 | 
						|
/** \brief  Union type to access the Application Program Status Register (APSR).
 | 
						|
 */
 | 
						|
typedef union
 | 
						|
{
 | 
						|
  struct
 | 
						|
  {
 | 
						|
    uint32_t _reserved0:16;              /*!< bit:  0..15  Reserved                           */
 | 
						|
    uint32_t GE:4;                       /*!< bit: 16..19  Greater than or Equal flags        */
 | 
						|
    uint32_t reserved1:7;                /*!< bit: 20..23  Reserved                           */
 | 
						|
    uint32_t Q:1;                        /*!< bit:     27  Saturation condition flag          */
 | 
						|
    uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag       */
 | 
						|
    uint32_t C:1;                        /*!< bit:     29  Carry condition code flag          */
 | 
						|
    uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag           */
 | 
						|
    uint32_t N:1;                        /*!< bit:     31  Negative condition code flag       */
 | 
						|
  } b;                                   /*!< Structure used for bit  access                  */
 | 
						|
  uint32_t w;                            /*!< Type      used for word access                  */ 
 | 
						|
} APSR_Type;
 | 
						|
 | 
						|
 | 
						|
/*@} end of group CMSIS_CORE */
 | 
						|
 | 
						|
/*@} end of CMSIS_Core_FPUFunctions */
 | 
						|
 | 
						|
 | 
						|
#endif /* __CORE_CA9_H_GENERIC */
 | 
						|
 | 
						|
#endif /* __CMSIS_GENERIC */
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
#endif
 |