zoukankan      html  css  js  c++  java
  • cortex-m3内核的芯片截图,以及内核学习

    以下几张是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

     

      

  • 相关阅读:
    钱多多软件制作04
    团队项目01应用场景
    HDU 4411 arrest
    HDU 4406 GPA
    HDU 3315 My Brute
    HDU 3667 Transportation
    HDU 2676 Matrix
    欧拉回路三水题 POJ 1041 POJ 2230 POJ 1386
    SPOJ 371 BOXES
    POJ 3422 Kaka's Matrix Travels
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/14137050.html
Copyright © 2011-2022 走看看