📄 core_cm0.h
字号:
/******************** (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 + -