以下几张是lpc的nvic截图,需要开启在线仿真后再截图~
从中可以看出,编号2-16的异常是cm3内核独有的,不是外设芯片的,也就是说,只要是cm3内核就必须有这些异常。
2和3的异常的优先级是固定为-2,-1的不能更改的,见下表的4.8的框图,这个是f10x的内核技术手册,是cm3技术手册的部分摘录说明的,因此也是很不错的参考资料。中文翻译就是:系统异常优先级寄存器吧,并且是字节访问的,SHPR1-SHPR3 are byte accessible.通常情况下,我们可以更该部分优先级的,比如PendSV 和SysTick,尤其是在有rtos的情况下,就需要根据情况来更改两者的优先级。
lpc1768中,我配置systick=31,因为在lpc的参考手册中是使用了5个bit来表示优先级分组或子优先级的。
来看看是怎么分配31的,这里的配置函数:等价于NVIC_SetPriority (-1,31);
这里等价于:SCB->SHP[11] = ((31<<3)&0xff)=0xF8,如此就将这个字节的高5位填充为1,lpc的优先级是比stm32多一位的,stm32只用了4位。
细看,这里的优先级分组是配置SCB_AIRCR的值=0xfa050000,
在Cortex™ -M3 r2p0 Technical Reference Manual手册中是这么描述的。0b000对应了128抢占优先级和2个子优先级,但是我找不到lpc的内核手册,所以无法明确具体的分组情况。因此保留了复位的值,0xfa050000,
另外外设的优先级我配置了9,来看看怎么配置的,
/* preemption = 1, sub-priority = 1 */
NVIC_SetPriority(TIMER1_IRQn, ((0x01 << 3) | 0x01));
===等价于
/* preemption = 1, sub-priority = 1 */
NVIC_SetPriority(2, ((0x01 << 3) | 0x01));
转到:下面的语句
NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); }
===等价于
NVIC->IP[2] = 0x48,cm3内核规定的总共240个优先级寄存器,0x48就是他的优先级使用的高五位的。
下面是stm32的nvic截图,systick中断优先级=240,其实之用了高4位,就是0xf=15
上一篇:新唐科技推出高泛用性Arm Cortex-M4 M433微控制器系列
下一篇:lpc1768的时钟树梳理和小结
推荐阅读最新更新时间:2024-11-04 22:09
设计资源 培训 开发板 精华推荐
- 使用 MaxLinear, Inc 的 SPX385AN-1.2/TR 的参考设计
- 使用 ROHM Semiconductor 的 BU4936 的参考设计
- LT1117CM-2.85 具有自动光控制功能的低压差正稳压器的典型应用
- ADR525 高精度并联模式电压基准的典型应用
- AL8400EV1,基于 AL8400 线性 LED 驱动器的评估板
- LTC4079 的典型应用 - 具有低静态电流的 60V、250mA 线性充电器
- esp s3 mp3
- 电子呼吸灯设计
- LTM4632IV 2 模块并联、3.6V 至 15V 输入、1.2V/6A VDDQ、0.6V/±6A VTT 和 10mA VTTR 设计的典型应用电路
- LT1161CSW 受保护四通道高端 MOSFET 驱动器的典型应用电路