⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 core_cm0.h

📁 LPC1114_例程和教程
💻 H
📖 第 1 页 / 共 2 页
字号:
/******************** (C) COPYRIGHT 2010 Embest Info&Tech Co.,LTD. ************
* 文件名: core_cm0.h
* 作者  : Wuhan R&D Center, Embest
* 日期  : 01/18/2010
* 描述  : CMSIS Cortex-M0核外围访问层头文件
*******************************************************************************
*******************************************************************************
* 历史:
* 01/18/2010		 : V1.0		   初始版本
*******************************************************************************/
/* Includes ------------------------------------------------------------------*/

#ifndef __CM0_CORE_H__
#define __CM0_CORE_H__

#ifdef __cplusplus
 extern "C" {
#endif 

#define __CM0_CMSIS_VERSION_MAIN  (0x01)                                                       /*!< [31:16] CMSIS HAL 主版本号 */
#define __CM0_CMSIS_VERSION_SUB   (0x20)                                                       /*!< [15:0]  CMSIS HAL 子版本号 */
#define __CM0_CMSIS_VERSION       ((__CM0_CMSIS_VERSION_MAIN << 16) | __CM0_CMSIS_VERSION_SUB) /*!< CMSIS HAL 版本号           */

#define __CORTEX_M                (0x00)                                                       /*!< Cortex 核                  */



#include <stdint.h>                           

#if defined (__ICCARM__)
  #include <intrinsics.h>                     /* IAR 内联  */
#endif


#ifndef __NVIC_PRIO_BITS
  #define __NVIC_PRIO_BITS    2               /*!< NVIC优先级位数定义*/
#endif




/**
 * IO 定义
 *
 * 定义外围寄存器访问权限
 */

#ifdef __cplusplus
#define     __I     volatile                  /*!< 'read only'允许             */
#else
#define     __I     volatile const            /*!< 'read only'允许             */
#endif
#define     __O     volatile                  /*!< 'write only'允许            */
#define     __IO    volatile                  /*!< 'read / write'可读写        */



/* Private typedef ------------------------------------------------------------*/
/* System Reset */
#define NVIC_VECTRESET              0         /*!< 向量表复位                  */
#define NVIC_SYSRESETREQ            2         /*!< 系统复位请求                */
#define NVIC_AIRCR_VECTKEY    (0x5FA << 16)   /*!< AIRCR Key用于写允许         */
#define NVIC_AIRCR_ENDIANESS        15        /*!< 端对齐                      */




/* 嵌套向量中断控制器(NVIC)寄存器映射 */
typedef struct
{
  __IO uint32_t ISER[1];                      /*!< 中断设置使能寄存器           */
       uint32_t RESERVED0[31];
  __IO uint32_t ICER[1];                      /*!< 中断清除使能寄存器           */
       uint32_t RSERVED1[31];
  __IO uint32_t ISPR[1];                      /*!< 中断设置悬起寄存器           */
       uint32_t RESERVED2[31];
  __IO uint32_t ICPR[1];                      /*!< 中断清除悬起寄存器           */
       uint32_t RESERVED3[31];
       uint32_t RESERVED4[64];
  __IO uint32_t IPR[8];                       /*!< 中断优先级寄存器             */
}  NVIC_Type;


/* 系统控制块寄存器映射 */
typedef struct
{
  __I  uint32_t CPUID;                        /*!< CPU ID基址寄存器              */
  __IO uint32_t ICSR;                         /*!< 中断控制状态寄存器            */
       uint32_t RESERVED0;
  __IO uint32_t AIRCR;                        /*!< 应用程序中断/复位控制寄存器   */
  __IO uint32_t SCR;                          /*!< 系统控制寄存器                */
  __IO uint32_t CCR;                          /*!< 配置控制寄存器                */
       uint32_t RESERVED1;
  __IO uint32_t SHP[2];                       /*!< 系统处理优先级寄存器,0位保留 */
  __IO uint32_t SHCSR;                        /*!< 系统处理控制和状态寄存器      */
       uint32_t RESERVED2[2];
  __IO uint32_t DFSR;                         /*!< 调试故障状态寄存器            */
} SCB_Type;


/* 系统滴答存储器映射 */
typedef struct
{
  __IO uint32_t CTRL;                         /*!< SysTick控制和状态寄存器       */
  __IO uint32_t LOAD;                         /*!< SysTick重装载值寄存器         */
  __IO uint32_t VAL;                          /*!< SysTick当前值寄存器           */
  __I  uint32_t CALIB;                        /*!< SysTick校验寄存器             */
} SysTick_Type;



/* 内核调试寄存器 */
typedef struct
{
  __IO uint32_t DHCSR;                        /*!< 调试停机控制和状态寄存器      */
  __O  uint32_t DCRSR;                        /*!< 调试内核寄存器选择寄存器      */
  __IO uint32_t DCRDR;                        /*!< 调试内核寄存器数据寄存器      */
  __IO uint32_t DEMCR;                        /*!< 调试异常和监控控制寄存器      */
} CoreDebug_Type;


/* Cortex-M0硬件存储器映射 */
#define SCS_BASE            (0xE000E000)                              /*!< 系统控制空间基地址  */
#define CoreDebug_BASE      (0xE000EDF0)                              /*!< 内核调试基地址      */
#define SysTick_BASE        (SCS_BASE +  0x0010)                      /*!< SysTick基地址       */
#define NVIC_BASE           (SCS_BASE +  0x0100)                      /*!< NVIC基地址          */
#define SCB_BASE            (SCS_BASE +  0x0D00)                      /*!< 系统控制块基地址    */

#define SCB                 ((SCB_Type *)           SCB_BASE)         /*!< SCB配置结构         */
#define SysTick             ((SysTick_Type *)       SysTick_BASE)     /*!< SysTick配置结构     */
#define NVIC                ((NVIC_Type *)          NVIC_BASE)        /*!< NVIC配置结构        */
#define CoreDebug           ((CoreDebug_Type *)     CoreDebug_BASE)   /*!< Core Debug配置结构  */


/*******************************************************************************
 *                硬件抽象层
 ******************************************************************************/


#if defined ( __CC_ARM   )
  #define __ASM            __asm                                      
  #define __INLINE         __inline                                  

#elif defined ( __ICCARM__ )
  #define __ASM           __asm                                      
  #define __INLINE        inline                                     

#elif defined   (  __GNUC__  )
  #define __ASM            __asm                                      
  #define __INLINE         inline                                     

#elif defined   (  __TASKING__  )
  #define __ASM            __asm                                      
  #define __INLINE         inline                                     

#endif


/* ###################  编译器特性相关  ########################### */

#if defined ( __CC_ARM   ) /*------------------RealView编译器 -----------------*/

#define __enable_fault_irq                __enable_fiq
#define __disable_fault_irq               __disable_fiq

#define __NOP                             __nop
#define __WFI                             __wfi
#define __WFE                             __wfe
#define __SEV                             __sev
#define __ISB()                           __isb(0)
#define __DSB()                           __dsb(0)
#define __DMB()                           __dmb(0)
#define __REV                             __rev


  /* intrinsic void __enable_irq();     */
  /* intrinsic void __disable_irq();    */



extern uint32_t __get_PSP(void);
extern void __set_PSP(uint32_t topOfProcStack);
extern uint32_t __get_MSP(void);
extern void __set_MSP(uint32_t topOfMainStack);
extern uint32_t __REV16(uint16_t value);
extern int32_t __REVSH(int16_t value);

#if (__ARMCC_VERSION < 400000)

extern uint32_t __get_PRIMASK(void);
extern void __set_PRIMASK(uint32_t priMask);
extern uint32_t __get_CONTROL(void);
extern void __set_CONTROL(uint32_t control);

#else  /* (__ARMCC_VERSION >= 400000)  */

 
/**
  * @函数名:__get_PRIMASK
  * @描述:获取优先级屏蔽状态
  * @参数: 无
  * @返回值:uint32_t PriMask
  */ 
static __INLINE uint32_t __get_PRIMASK(void)
{
  register uint32_t __regPriMask         __ASM("primask");
  return(__regPriMask);
}

/**
  * @函数名:__set_PRIMASK
  * @描述:配置优先级屏蔽寄存器
  * @参数: uint32_t PriMask
  * @返回值:无
  */
static __INLINE void __set_PRIMASK(uint32_t priMask)
{
  register uint32_t __regPriMask         __ASM("primask");
  __regPriMask = (priMask);
}


/**
  * @函数名:__get_CONTROL
  * @描述:返回控制寄存器值
  * @参数: 无
  * @返回值:uint32_t 控制寄存器值
  */
static __INLINE uint32_t __get_CONTROL(void)
{
  register uint32_t __regControl         __ASM("control");
  return(__regControl);
}


/**
  * @函数名:__set_CONTROL
  * @描述:设置控制寄存器
  * @参数: uint32_t 控制寄存器值
  * @返回值:无
  */ 
static __INLINE void __set_CONTROL(uint32_t control)
{
  register uint32_t __regControl         __ASM("control");
  __regControl = control;
}

#endif /* __ARMCC_VERSION  */ 



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -