一、Cortex-M3部分
1、Thumb-2指令不是全部都是16位的,包括了16位和32位的指令,代码密度更高
2、总线是哈佛结构,而不是改进型的哈佛结构。也就是只是分开了指令和数据总线,而没有把数据总线的读写分开。
3、硬件乘法。单周期乘法,单周期乘累加。不管是16b*16b还是32b*16b或者是32b*32b只要结果是32b,都只需要一个周期
4、硬件除法。指令时间不是单周期的,而是2到12周期,由除数和被除数决定。
5、中断NVIC
a 异常工作在特权模式下
b 处理器自动保存和恢复现场
c 主要的两个比较先进的机制是末尾连锁和迟来,保证了中断嵌套的实时高效性
d 进入中断。处理器自动保存现场PC, xPSR, R0-R3, R12, LR,同时ISR预取,应该是在保存现场的时候开启流水线,对ISR进行预取址,这样在保存完毕之后马上就可以执行ISR程序。
e 迟来。迟来请客就是在处理器响应了一个中断正在自动保存现场的时候又来了一个优先级更高的中断,那么就会原先的那个ISR会被挂起,而转而去执行优先级高的那个ISR。这样不用再去保存一次现场,只需要对新的ISR进行预取。
f 末尾连锁(咬尾机制)。当一个中断ISR在被执行的时候,来了另外一个优先级一样的中断。如果是ARM7的话,那会先等这个ISR执行完毕,然后进行现场恢复,退出异常,接着再进入中断,保存现场,执行ISR,完了之后再恢复再退出。咬尾机制的作用就体现在这里,在第一个ISR执行完毕之后,不进行现场恢复而是做一些处理之后马上执行第二个ISR,全部执行完成之后再退出恢复现场。
NVIC中每个中断都要配置两个中断优先级,抢占优先级和非抢占优先级,系统在判断优先级高低会先看抢占式优先级哪个高,如果一样再去判断非抢占式。
g Cortex在设计的时候留了8个优先级位,所以理论上可以有256级中断,STM32用了其中的4位,所以STM32的优先级是16个。在这4位中,你又可以分配几个抢占几个非抢占优先级位。比如配置抢占为1位,非抢占为3位。那么抢占优先级可以分配两个0、1。非抢占则可以分配8个从000-111