M0中断控制

CONTROL寄存器:

M0中有两个栈指针,一个是由线程模式下。

第【1】位

handle模式总是置0.在线程中可以为0或者1.

复位以后MSP(主堆栈指针,估计用来指引中断向量表的)使用,在线程模式下(估计就是执行主函数)转换到PSP(进程指针),同时设置CONTROL第1为为1.

当处理器在HANDLE模式下(执行异常),第一位为0,所以MSP使用,CONTROL只可以在线程模式下设置,或者通过中断返回或者中断进入设置。

第【0】位

该位只可以通过MSR,MRS特权级下操作时才允许写该位。一旦进入用户级,唯一返回特权级的途径,就是出发一个中断,再由服务例程改写该位。

操作模式

异常的handle

主程序的代码都是线程模式。

  当处理器处在线程状态下时,既可以使用特权级,也可以使用用户级;另一方面, handler模式总是特权级的。在复位后,处理器进入线程模式+特权级。   在线程模式+用户级下,对系统控制空间(SCS)的访问将被阻止——该空间包含了配置寄存器 以及调试组件的寄存器 。除此之外,还禁止使用 MSR 访问刚才讲到的特殊功能寄存器——除了 APSR 有例外。否则会出错。 
  在特权级下的代码可以通过置位 CONTROL[0]来进入用户级。而不管是任何原因产生了任何异常,处理器都将以特权级来运行其服务例程,异常返回后将回到产生异常之前的特权级。用户级下的代码不能再试图修改CONTROL[0]来回到特权级。它必须通过一个异常handler由那个异常 handler 来修改 CONTROL[0],才能在返回到线程模式后拿到特权级。 

fault伺候:越权访问。


control【0】=0(应该是中断嵌套模式)


control【0】=1正常的中断模式。



用户级程序如果想进入特权级,通常都是使用一条“系统服务调用指令”SVC来出发“SVC异常”,该异常的服务例程可以是具体情况而修改CONTROL【0】。

NMI

在多数情况下,NMI被连接到一个看门狗定时器,有事也会是电压监视功能块,以便在电压掉至危险级别后警告处理。NMI可以再任何时间呗激活,不可屏蔽中断。。

特殊功能寄存器:

程序状态寄存器(xPSRs)(一共三个):应用程序PSP,中断号PSR,执行PSP。


中断屏蔽寄存器(PRIMASK(ARMV6只有这个),ARMV7还有两个FAULTMASK、BASEPRI)

控制寄存器(CONTROL)

在 NVIC的中断控制及状态寄存器中,有一个 VECTACTIVE 位段;另外,还有一个特殊功能寄存器 IPSR。在它们二者的里面,都记录了当前正服务异常的编号。 
请注意:这里所讲的中断号,都是指 NVIC 所使用的中断号。另一方面,芯片一些管脚的名字也可能被取为类似”IRQ #”的名字,请不要混淆这两者,它们没有必然联系。常见的情况是,编号最靠前的几个中断源被指定到片上外设,接下来的中断源才给外部中断引脚使用,因此还是要参阅芯片的数据手册来弄清楚。 
          如果一个发生的异常不能被即刻响应,就称它被“
悬起”(pending)。不过,少数 fault异常是不允许被悬起的。一个异常被悬起的原因,可能是系统当前正在执行一个更高优先级异常的服务例程,或者因相关掩蔽位的设置导致该异常被除能。对于每个异常源,在被悬起的情况下,都会有一个对应的“悬起状态寄存器”保存其异常请求,直到该异常能够执行为止,这与传统的 ARM 是完全不同的。在以前,是由产生中断的设备保持住请求信号。

优先级 

优先级数值越小,优先级越高。内核异常中有几个优先级是固定的。


复位优先级最高,NMI其次。其余都是可配置的,不可配置为负值。


前两位用来设置优先级,0-3.





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值