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/TM4C1231H6PGE:[已解决] TM4C1231H6PGE:永远不会触发 PWM 中断

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/809350/rtos-tm4c1231h6pge-resolved-tm4c1231h6pge-pwm-interrupt-never-fires

器件型号:TM4C1231H6PGE

工具/软件:TI-RTOS

我在使用 TivaC TI-RTOS 2.16.0.80、XDCtools 3.32.06_core 时遇到同样的问题。 由于 会自动生成 startup_ccs.c、因此无法解决已解决的问题。 我希望能够通过配置一个 Hwi 来注册 ISR 函数:

var m3Hwi0Params = new m3Hwi.Params ();
m3Hwi0Params.instance.name ="m3Hwi0";
m3Hwi0Params.priority = 0;//可选:用于定义非 BIOS
Program.global.m3Hwi0 = m3Hwi.create (150、"PWM1_GEN0_ISR"、m3Hwis")

 我尝试注册 API 时没有成功。

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

    Friedrich、

    我不清楚这是矢量注册问题,还是完全启用中断以传播到 CPU 的问题(与上一个线程的问题一样)。

    您是否通过 ROV 工具查看了 Hwi 模块的状态、以查看 ISR 是否正确注册?    如果没有,请在调试会话中选择 Tools->Runtime Object View,单击 Hwi 模块,然后查看“详细”和“矢量表”。  PWM1_GEN0_ISR 是否在正确的矢量位置注册?

    谢谢、
    Scott

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

    您好、Scott、

    感谢您的建议。 ISR (PWM_ISR = PWM1_GEN0_ISR)似乎已正确注册:

    我想对 PWM 脉冲进行计数、为此我在 ISR 外部使用静态变量。 我知道、这相当于上一个威胁中使用的 booelan 值。 我还尝试打开绿色/红色 LED。

    PWM 本身根据 PD0上的 LED 正常工作。 我可以即时更新周期和占空比。

    此致、  

    Friedrich

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

    您好、Friedrich、

    好的、感谢您的发送。  

    此时是否启用了全局中断?  这在 main ()末尾对 BIOS_start()的调用中发生。  (我问是因为那个旧线程在 main()中有一个循环)。  

    我知道您正在递增计数器,您是否还尝试在 PWM_ISR()上设置断点?

    此外、您能否显示用于初始化/启动 PWM 操作的完整序列?

    谢谢、
    Scott

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

    您好、Scott、

    我最终可以解决这个问题。 第一步是介绍一个从 ISR 发布的 Swi。 我返回到 TI-RTOS Workshop 解决方案文件2015以正确完成此操作。 然后我意识到、由于调试混淆、我错过了触发 PWM 中断使能。 以下序列与上一个线程内联、对我有效:

    PWMGenIntTrigEnable (PWM1_base、PWM_GEN_0、PWM_INT_CNT_ZERO);
    PWMIntEnable (PWM1_base、PWM_INT_GEN_0);
    
    IntEnable (INT_PWM1_0);
    IntMasterEnable(); 

    正如 您提到的那样,这需要通过调用 BIOS_start()来补充。

    我将相关源文件添加为 reference.e2e.ti.com/.../4314.main.ce2e.ti.com/.../pwm.ce2e.ti.com/.../steppercli.cfg