所用型号:MSP432P401R
今日继续我的MSP432电赛速通之路。
主要学习的是:中断优先级管理、软件挂起中断、屏蔽中断优先级
目录
MSP432具有8级可编程的中断优先级。
中断优先级管理库函数:
软件挂起中断:
屏蔽中断优先级:
MSP432具有8级可编程的中断优先级。
数据手册 slau356h.pdf 第82页:
各位看官看着全英文是否突然担心起了四六级?,莫怕!下面有翻译~
翻译后就是:
2.2个嵌套矢量中断控制器(NVIC)
本节介绍嵌套矢量中断控制器(NVIC)及其使用的寄存器。(请参见有关NVIC寄存器的位描述,请参见第2.4.3节)。
NVIC支持:
●64个中断。
●每个中断的可编程优先级为0-7。级别越高,优先级越低,0级中断优先级最高。
●低延迟异常和中断处理。
●支持中断信号的电平和脉冲检测。
●动态重新划分中断优先级。
●将优先级值分组为组优先级和子优先级字段。
组优先级高的可打断组优先级低的,
如果俩个中断组优先级相同,则子优先级高的会被执行,另一个挂起。
子优先级与硬件相绑定,已经内定设好,无法更改。
●外部不可屏蔽中断(NMI)。
●中断尾链。
处理器在进入异常时自动堆叠其状态,并在异常退出时拆解该状态,而没有指令开销,从而提供低延迟异常处理。
数据手册msp432p401r.pdf 第118页:
最左边一列为中断号,中断号越小,子优先级越高
中断优先级管理库函数:
该库函数在文件 interrupt.h 中
设置组优先级:
Interrupt_setPriority(interruptNumber,level);
由此可见,参数只要填对应中断,以及对应组优先级
需注意,此处的level,是一个八位的变量
但它只使用高三位,低五位忽略。配置时要左移五位
x<<5, x属于(0,7)
例如,我想将P1端口外部中断配置为 1 优先级:
Interrupt_setPriority(INT_PORT1,1<<5);
这个中断号在这里可以查阅选择:
软件挂起中断:
该库函数在文件 interrupt.h 中
软件挂起中断:
就是用软件触发挂起某个中断的服务函数
Interrupt_pendinterrupt(interruptNumber);
屏蔽中断优先级:
参数填上对应组优先级,大于或等于这个等级的中断,都会被屏蔽掉
但当参数填0的时候,就是关闭屏蔽了,就会恢复正常
Interrupt_setPriorityMask(level);