This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/TM4C1292NCPDT:定时器中断优先级与 HWI 中断优先级

Guru**** 2482105 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/700155/rtos-tm4c1292ncpdt-timer-interrupt-priority-versus-hwi-interrupt-priority

器件型号:TM4C1292NCPDT

工具/软件:TI-RTOS

您好!

我使用.cfg 文件创建了两个 Hwi ISR、默认优先级设置为-1、表示 GPIO (中断编号23)和 SPI-DMA (中断编号46)、我还使用 cfg 文件创建了两个计时器 ISR (计时器1和计时器3)。 两个计时器都是递增计数器、并定期运行。 在 cfg 文件中没有任何选项可设置计时器优先级。

现在、我想了解如何设置计时器 ISR 的优先级? 如果定时器 ISR 的优先级高于 HWI ISR、则需要降低其优先级。 如果定时器和 HWI ISR 都以相同的优先级运行、则没有任何问题。

此致

巴拉

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    当你在 BIOS 中创建一个定时器时、定时器模块自动为定时器中断创建一个 Hwi 实例。
    您应该能够更改此 HWI 实例的优先级。

    我建议您浏览 SPRUEX3T 的第8.3节(www.ti.com/.../spruex3t.pdf)

    希望这能有所帮助。

    BR、
    Pranav。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Pranav、

    [引述 USER="Pranav Saraswala ]]我鼓励您浏览 SPRUEX3T 的第8.3节(www.ti.com/.../spruex3t.pdf)Weblink不直接指向正确的网页。 我已浏览   并在 weblink 中找到该文档。  在本文档中、并未描述与定时器 ISR (如 HWI)的优先级设置相关的任何内容。  

    我还参考了 Timer_Params 定义、找不到优先级参数定义。

    我已经检查了 ROV 中详述的 HWI。 在这里、我可以看到所有 HWI (HWI、定时器、EMAC 和 WDT)都设置为224优先级、优先级组设置为7。 它们是否以高优先级运行?

    此致

    巴拉

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    请找到 HWI 详细视图的 ROV。

    有一些未知的 HWI 是以比其他 HWI 高的优先级生成(突出显示)的。 如何获取有关这些中断的信息? 如果特定于 CPU、它们会定期运行还是在启动期间运行?

    巴拉

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bala、
    我认为这个帖子可以回答您关于更改计时器优先级的问题。
    e2e.ti.com/.../566475
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不要做这么多的摆动、使用 Tiwavare API 调用来配置计时器是否更容易?

    必须有一些更简单的方法来访问 BIOS 定时器 Hwi 的优先级!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、你可以使用 TivaWare 来配置(即设置周期)定时器、但是让 Hwi 来管理定时器的中断。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    我已经了解了设置定时器 HWI 优先级的方法、它运行良好。 正如 Pranav 所说的那样、应该有一个最简单的方法来设定时间 HWI 的优先级。

    我还有另外一个澄清。 作为设计缩进、我的应用正在使用 Tivaware I2C 库调用在 HWI 上下文中执行 I2C 读取、并且 HWI 已设置为 TI RTOS 的默认优先级。 就我的 ROV 而言、它的优先级为224、组优先级为7。

    是否有任何其他使用的 RTOS HWI 将中断我的 I2C 读取事务? 在 HWI 上下文中使用 TIvaware 库时、是否需要注意任何事项? 因为如果在 I2C 事务的中间发生中断、则会发生 I2C 总线错误、并导致器件重启以实现正常运行。

    此致
    巴拉
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bala、

     如果您查看数据表、I2C0的中断向量编号为24。 这意味着任何具有更高优先级的外设或异常都将优先于 I2C。

     如果您希望 I2C 具有比其他 I2C 更高的组优先级、请参阅数据表中的 NVIC 部分以更改 I2C 的组优先级。 例如、您可以将 I2C 更改为组优先级为0而不是7、这将使 I2C 的优先级高于其他外设。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    请查看我于2018年6月18日上午11:44在论坛上发布的有关 HWI 详细视图的快照。 在这里、我相信所有 ISR 都被分配了 TI RTOS 默认优先级(224)和优先级组(7)。 由于所有 ISR 都分配了相同的优先级和优先级组、因此一个 ISR 将中断其他 ISR。 我是对的吗?

    此致
    巴拉
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bala、

    首先、TM4C 中实现的 NIVC (嵌套中断矢量控制器)只能支持8个优先级、因为每个中断请求只能实现3个位。 TI-RTOS 似乎正在将所有中断请求配置为优先级7。 请注意、优先级0的优先级将高于优先级1、2、3...、7。

    话虽如此、如果所有中断请求被配置为相同的优先级7、那么如果多个中断同时挂起、则首先处理 IRQ 编号最小的中断。

    如果你参考我在上次答复中显示的表格、如果 GPIOA 在 I2C0 iISR 中间变为挂起、那么 GPIOA 将优先于 I2C0、因为这两个都配置了相同的优先级。 这就是我说过的、如果你希望 I2C0的优先级高于 GPIOA、那么你需要改变 I2C0的优先级。 例如、您可以将 I2C0的优先级更改为0级、甚至6级的优先级都比7级高。

    有关优先级处理的详细信息、请参考数据表 Cortex-M4F 处理器一章中的子部分"异常优先级"和"中断优先级分组"。 要更改优先级、您需要在 NVIC 模块中配置 Prix 寄存器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    感谢您的详细回答、这真的很有帮助。

    [报价用户="Charles Tsaaa">要更改优先级、您需要在 NVIC 模块中配置 Prix 寄存器。如果我们更改 cfg 文件中 HWI ISR 的优先级、它是否会更改 NVIC 模块中的 Prix 寄存器? 或者、我们是否需要使用单独的 API 调用来设置该寄存器?

    此致

    巴拉

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    我查看了您指出的数据表、发现它与您的陈述相矛盾。

    [引用用户="Charles Tsaaaia"]如果参考我在上次答复中显示的表,如果 GPIOA 在 I2C0 iISR 中间变为挂起状态,那么 GPIOA 将优先于 I2C0,因为这两个都配置了相同的优先级。,但数据表显示

    请您澄清一下吗?

    我还应该使用什么 API 来更改 TI RTOS 中的优先级组?

    此致

    巴拉

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bala、
    感谢您引用数据表中的陈述。 对于占先处理是正确的、这样即使异常编号较低、已经被处理的中断也不会被同一优先级的另一个中断抢占。 但是、请记住、如果两个中断具有相同的优先级并且同时挂起、那么具有较低例外编号的中断将优先处理。

    要更改优先级,请使用 IntPrioritySet() API。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    感谢您的说明。

    我的应用程序中遇到了一个严重问题、我无法使其更接近。

    请查看我于2018年6月18日上午11:44在论坛上发布的有关 HWI 详细视图的快照。 在这里、我只创建了两个属于中断编号23和46的 HWI。 我相信其余的 HWI 是根据我的应用任务(用于 I2C、SPI、EMAC 等外设驱动程序)中使用的接口从 RTOS 生成的。 不知怎么说、我的 ISR 属于46、被其他较高优先级任务离开 I2C 总线故障所取代。 如何找到哪个 ISR 被抢占 HWI 46?

    我还尝试将 HWI 46的优先级更改为更高。 但它在 RTOS 使用的其他一些 HWI 中失败。

    你有什么建议吗?

    此致
    巴拉
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bala、

     46是 GPIOF。 您是否根据外部输入的边沿检测生成 GPIOF 中断? 如果是、输入速度有多快? 您能详细说明吗?

     23是什么? 根据数据表、23应为 SSI0。 但在您的 ROV 中、它显示的是 ADC。 我在这里感到困惑。  

     哪个 I2C 会产生总线故障? 当您说总线故障时、您是否意味着总线故障、如下面显示的矢量5中所示?

     我不认为这46被其他人抢先、因为你说所有中断具有相同的优先级。 正如我们刚刚完成优先级处理讨论时、如果两个中断(即46和23)具有相同的优先级、并且两个中断同时挂起、那么较低的异常号中断(即23)将获得优先级服务。 这不同于在中断处理过程中被抢先的46。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    [引用用户="Charles Tsaaa"] 46是 GPIOF。 您是否根据外部输入的边沿检测生成 GPIOF 中断? 如果是、输入速度有多快? 您能详细说明吗?[/引述]

    这被配置为电平触发。 中断频率将以微秒为间隔。

    [引用用户="Charles Tsaaa">这23是什么? 根据数据表、23应为 SSI0。 但在您的 ROV 中、它显示的是 ADC。 我在这里感到困惑[/quot]该 SSI0 DMA 中断将用于外部 ADC。

    [报价用户="Charles Tsaa"] 哪个 I2C 会造成总线故障? 当您说总线故障时、您的意思是总线故障、如下面显示的矢量5中所示?我的意思是、i2c 总线事务在传输过程中中断。

    [引用用户="Charles Tsaa"] 我不认为这46被别人抢先、因为你说所有中断都具有相同的优先级。 正如我们刚刚完成优先级处理讨论时、如果两个中断(即46和23)具有相同的优先级、并且两个中断同时挂起、那么较低的异常号中断(即23)将获得优先级服务。 这与中断处理过程中的46不同。是的、根据数据表、不应将其抢先。 是否有可能使用 TI RTOS 硬件资源生成一个可被配置为更高优先级组的中断?

    此致

    巴拉

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bala、
    不确定您是否在这里取得了一些进展。 您是否尝试手动使 I2C 的优先级高于所有其他优先级?
    此外、您不使 GPIOF 边沿触发而是电平触发的原因是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    是的。 通过我的测试、当我们将所有器件设置为具有相同优先级时、发现没有发生 HWI 抢占。 我们现在正在调试的另一个问题。

    [引用用户="Charles Tsaa"]您不进行 GPIOF 边沿触发而是电平触发的原因是什么?其外部器件设计打算将其配置为电平触发。 请在以下主题中详细介绍此对话。

    此致

    巴拉