繁体   English   中英

为ARM Cortex-M4中的每个中断配置256个不同的优先级

[英]Configuring 256 different priority levels for each interrupt in ARM Cortex-M4

我正在使用 ARM Cortex-M4 中断。 我已经使核心能够处理最多 240 个中断。 我还启用了中断。 但是在尝试设置中断的优先级时,我发现它没有按预期工作。 如果我有 50 个中断进入,比方说,我想将第 50 个信号的优先级设置为 50,那是行不通的。 从我所看到的 ( https://i.stack.imgur.com/puqs1.png ) 来看,优先级字段似乎只支持 4 位。 所以这将给我一个非常有限的选择,将优先级设置为 16。有没有办法将优先级设置为等于 256 的数字,因为他们已经提到我们最多可以有 256 级中断优先级。 我是否遗漏了什么或误解了这个概念?!

情况1:

  1. 启用所有 50 个中断。
  2. 使用(NVIC_SetPriority((IRQn_Type) 1, 1)), NVIC_SetPriority((IRQn_Type) 50, 50)设置中断优先级,第一个 Int 的优先级为 1,50 的优先级为 50。
  3. 一次激活所有 50 个中断。 预期行为:1 个首先得到服务,50 个最后得到服务。 实际行为:完全随机的中断服务。 未遵循优先级。

案例 2:

  1. 启用了几个中断。
  2. 将优先级设置为 16 个中断 (1-16) 按预期工作,第一个中断首先得到服务,第 16 个中断在最后得到服务。

ARM 由芯片供应商决定要实现多少级别的中断优先级,最多为 256。他们通常不实现最大值,因为这会增加成本、尺寸和功耗。

芯片供应商通过常量__NVIC_PRIO_BITS告诉软件工程师他们在 CMSIS 标头中选择了多少。

我亲自处理过它的值为 2、3 或 4 的部分。听起来你的部分有 4,有 16 个优先级。

16 级中断优先级对于几乎任何现实世界的应用程序来说都是绝对负载。 如果您需要的不止于此,我建议您 go 回到您的系统级设计!

没有必要像您尝试的那样为每个中断赋予自己的优先级。 你应该让你的例程保持良好和简短,这样延迟对于那些不得不等待的人来说是可以接受的。

您还应该注意,处理中断的顺序始终是完全确定的,绝不会像您抱怨的那样随机。 如果你给两个中断相同的优先级并且它们在同一时间发生,那么中断编号较小的中断将始终首先得到服务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM