Cortex-M3 cm3.h 关于开关总中断函数解释

 

0.前言

本文想解决的问题有:

  • 如何开启、关闭中断
  • 如何开启、关闭异常
  • LPC177x/8x支持的中断优先级个数
  • 复位后,异常/中断默认的优先级
  • 如何设置异常/中断的优先级
  • 什么是优先级组,如何设置优先级组,复位后的优先级组

 

1. Cortex-M3的异常/中断屏蔽寄存器组

注:只有在特权级下,才允许访问这3个寄存器。

 

 

 

名 字

功能描述

PRIMASK

只有单一比特的寄存器。置为1后,就关掉所有可屏蔽异常,只剩下NMI和硬Fault可以响应。默认值是0,表示没有关闭中断。

FAULTMASK

只有单一比特的寄存器。置为1后,只有NMI可以响应。默认值为0,表示没有关异常。

 

BASEPRI

该寄存器最多有9位(由表达优先级的位数决定)。定义了被屏蔽优先级的阈值。当它被设置为某个值后,所有优先级号大于等于此值的中断都被关。若设置成0,则不关断任何中断,0为默认值。

注:寄存器BASEPRI的有效位数受系统中表达优先级的位数影响,如果系统中只使用3个位来表达优先级,则BASEPRI有意义的值仅为0x00、0x20、0x40、0x60、0x80、0xA0、0xC0和0xE0

使用MRS/MSR指令访问这三个寄存器,比如:

  MRS    R0, BASEPRI            ;读取BASEPRI到R0中
  MSR    BASEPRI, R0            ;将R0数据写入到BASEPRI中

为了快速的开关中断,CM3还专门设置了一条CPS指令,有四种用法:

  CPSID    I    ;PRIMASK=1,关中断
  CPSIE    I    ;PRIMASK=0,开中断
  CPSID    F    ;FAULTMASK=1,关异常    
  CPSIE    F    ;FAULTMASK=0,开异常

CMSIS-M3微控制器软件接口标准中的core_cm3.h给出了开关中断或异常的函数:

1.1 开/关中断

   1: 
   8: static __INLINE void __set_PRIMASK(uint32_t priMask)
   9: {
  10:   register uint32_t __regPriMask         __ASM("primask");
  11:   __regPriMask = (priMask);
  12: }

       使用__set_PRIMASK(1)关闭中断;__setPRIMASK(0)开启中断。

       一些说明:__INLINE是宏定义,对应__inline,这是keil编译器自定义关键字,表示这个函数是内联函数,但并不是强制性内联,编译器最终决定是否内联。

       __ASM(“primask”): __ASM也是一个宏,对应__asm,这是keil编译器自定义关键字,关于这个关键字,有相当多的用法,可以在C中内嵌汇编语言、内嵌汇编函数、指定汇编标号以及本代码中的声明一个已命名寄存器变量。这里,已命名的寄存器是("primask"),也就是说寄存器变量__regPriMask等同于编译器已命名的primask。语法为:

        register type var-name __asm(reg);

keil编译器已命名的寄存器变量为:

 

 

 

寄存器

__asm修饰的字符串

处理器

APSR

"apsr"

All processors

CPSR

"cpsr"

All processors

BASEPRI

"basepri"

Cortex-M3, Cortex-M4

BASEPRI_MAX

"basepri_max"

Cortex-M3, Cortex-M4

CONTROL

"control"

Cortex-M0, Cortex-M1, Cortex-M3, Cortex-M4

DSP

"dsp"

Cortex-M0, Cortex-M1, Cortex-M3, Cortex-M4

EAPSR

"eapsr"

Cortex-M0, Cortex-M1, Cortex-M3, Cortex-M4

EPSR

"epsr"

Cortex-M0, Cortex-M1, Cortex-M3, Cortex-M4

FAULTMASK

"faultmask"

Cortex-M3, Cortex-M4

IAPSR

"iapsr"

Cortex-M0, Cortex-M1, Cortex-M3, Cortex-M4

IEPSR

"iepsr"

Cortex-M0, Cortex-M1, Cortex-M3, Cortex-M4

IPSR

"ipsr"

Cortex-M0, Cortex-M1, Cortex-M3, Cortex-M4

MSP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值