CortexM3异常和中断基于NXPLPC177x8x
分类:我的小问题集2013041008261805人阅读评论0收藏举报
目录
0前言
本文想解决的问题有:
如何开启、关闭中断如何开启、关闭异常LPC177x8x支持的中断优先级个数复位后,异常中断默认的优先级如何设置异常中断的优先级什么是优先级组,如何设置优先级组,复位后的优先级组
1CortexM3的异常中断屏蔽寄存器组
注只有在特权级下,才允许访问这3个寄存器。
名字PRIMASKFAULTMASKBASEPRI
功能描述只有单一比特的寄存器。置为1后,就关掉所有可屏蔽异常,只剩下NMI和硬Fault可以响应。默认值是0,表示没有关闭中断。只有单一比特的寄存器。置为1后,只有NMI可以响应。默认值为0,表示没有关异常。该寄存器最多有9位(由表达优先级的位数决定)。定义了被屏蔽优先级的阈值。当它被设置为某个值后,所有优先级号大于等于此值的中断都被关。若设置成0,则不关断任何中断,0为默认值。
注:寄存器BASEPRI的有效位数受系统中表达优先级的位数影响,如果系统中只使用3个位来表达优先级,则BASEPRI有意义的值仅为0x00、0x20、0x40、0x60、0x80、0xA0、0xC0和0xE0使用MRSMSR指令访问这三个寄存器,比如:
MRSR0BASEPRI读取BASEPRI到R0中
fMSR
BASEPRIR0
将R0数据写入到BASEPRI中
为了快速的开关中断,CM3还专门设置了一条CPS指令,有四种用法:
CPSIDCPSIECPSIDCPSIEIIFF;PRIMASK1,关中断;PRIMASK0,开中断;FAULTMASK1,关异常;FAULTMASK0,开异常
CMSISM3微控制器软件接口标准中的core_cm3h给出了开关中断或异常的函数:11开关中断
1234567briefparamSettheprioritymaskbiti
theprioritymaskregisterpriMaskPriMaskSetthePriorityMaskvalue
8static__INLINEvoid__set_PRIMASKui
t32_tpriMask9101112registerui
t32_t__regPriMask__regPriMaskpriMask__ASM