kinetis 中断默认优先级 优先级 默认 哪里

在用kl46做项目需要精确测量一脉沖高电平时间,脉冲触发外部中断默认优先级后用PIT1来计时实现为了精确测量,需要把外部中断默认优先级的优先级设为最高形成中断默认优先级嵌套。参考了官方的例程修改优先级

我现在把PORTD的中断默认优先级优先级设为最高但现在PORTD中断默认优先级还是无法中断默认优先级其它的中断默认优先级形成中断默认优先级嵌套,也无法精确测量脉冲高电平的时间其它中断默认优先级源还有PIT0,UART0,TPM。请问该如何处理谢谢

prio)函数设置了中断默认优先级优先級然后的时候,在寄存器窗口发现NVIC_IPRx寄存器的值并没有改变然后查看寄存器具体的地址的内存发现也没有改变, 后来将NVIC_IPRx寄存器地址的值賦给一个变量然后使用将该变量打印出来,发现第一次能够打印正确的值但是连续第二次打印,值又变为了0.当时感觉很奇怪然后仔細阅读了下ARM Cortex-M0的内核文档:The Definitive Guide to the ARM cortex M0.pdf.

发现对于中断默认优先级优先级的操作,和ARM Cortex-M4还是有的:主要在于对于M0+内核的NVIC_IPRx寄存器每次操作都是一组32位操作,若要改变寄存器的值首先先要读出相应的值,然后改变一个字节再将值写回到原来的地址上。M0内核文档是这么讲的:[size=0.83em]1.jpg

0

M4内核就不一样是可以字节操作的,这点在M4的内核文档上也可以找到

prio)函数不能实现优先级正确设置的原因之一,是由于采用了8位操作的方式如下:

第②从原来的代码可以看出,并不能准确的实现具体irq的定位与值的修改

可以看出,上面错误的代码只能实现irq=16值的修改原因其只是定位箌了NVIC_IPR4中的低字节,而没有在IPR44个字节做偏移所以只能修改irq=16的优先级

根据我们的reference manual可以知道在每组IPR中,具体定位IRQ可以通过8*(IRQ mod 4)+6的方法,注意mod是取余数程序中是“%”,不要理解为“/”.

只有小组成员才能发言

首先查询优先级是不可以更改和設置的这是一个中断默认优先级优先权排队的问题。是指多个中断默认优先级源同时产生中断默认优先级信号时中断默认优先级仲裁器选择对哪个中断默认优先级源优先处理的顺序。

  1. 设置中断默认优先级优先级的函数CMISIS已经写好,并嵌入到了编译器中

  2. 从上面函数可以看出,该函数有两个参数IRQn是指要设置的中断默认优先级向量,priority是中断默认优先级优先级优先级可以是0 1 2 3四个数,0的优先级最大3的优先級最小。

  3. 同一执行优先级中的中断默认优先级申请不止一个时则有一个中断默认优先级优先权排队问题。同一执行优先级的中断默认优先级优先权排队由中断默认优先级系统硬件确定的自然优先级形成,优先权自高到低的顺序即外部中断默认优先级0>定时/计数0>外部中断默認优先级1>定时/计数1>串行接口

经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域)建议您详细咨询相关领域专业人士。

我要回帖

更多关于 中断默认优先级 的文章

 

随机推荐