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/TMS320F2.8075万:TIMER_START()有时不起作用

Guru**** 2555370 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/629619/rtos-tms320f28075-timer_start-does-not-work-every-now-and-then

部件号:TMS320F2.8075万

工具/软件:TI-RTOS

你(们)好

我使用的计时器1在cfg文件中具有以下配置:

var timer0Params = new Timer.Params();
timer0Params.instance.name ="Timer1_HWI";
timer0Params.period = 200;
timer0Params.startMode = XDC.module ("ti.sysbios.interfaces.ITimer").StartMode_USER;
Program.global.Timer1_HWI = Timer.create(1), "&TIMER1INT_ISR",timer0Params); 

遗憾的是,有一个电话

UINT16键= HWI_DISABLE();
Timer_start(Timer1_HWI);	//清除计数器,清除所有暂挂中断,并在启动计时器之前启用计时器中断。
HWI_RESTORE (密钥); 

有时不会导致预期的中断。 我可以说,在1000个中,大约有7个发生了问题。 对此有何想法?
我在 另一个https://e2e.ti.com/support/embedded/tirtos/f/355/p/26.2151万/917974上91.7974万上看到 中断没有像 Timer_start()应该的那样被启用,所以可能是一个错误?

使用SYS/BIOS 6.51 .0.15

谢谢Benjo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    经过进一步调查后,我可以确认,在出现错误时没有设置INT13的IER位。 更确切地说,在调用Timer_start()之后和调用Timer_stop()之前,IER在没有错误的情况下保留值0x39A1,在出现上述错误的情况下保留值0x29A1。
    是否有任何机制阻止我设置位(通过Timer_start间接设置)? 或者是否有任何机制可以重置位?

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

    您从哪里启动计时器(例如,在任务,Swi,Hwi或main()中)? 您是否可以在“工具”->“ROV->“Hwi->基本”和“模块”中查看,以确保ISR存在。 另外,在调用Timer_start之前和之后,请查看ROV->计时器->基本。 是否可以附加ROV->Hwi和Timer的图像?

    您是否还能确认时钟模块未使用同一定时器?

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

    您好Todd

    时钟模块使用timer2:

    Clock.timerId = 2; 

    我在任务和中断上下文中调用Timer_start()时尝试了这两种操作,都失败了。 然后我尝试了另一个“测试任务”,除了Timer_start()和Timer_stop()以及一些变量增量之外,没有任何内容。 令人惊讶的是,它在"测试任务"中发挥了作用。

    关于您的ROV问题-调试时很难出现错误,但我会尽最大努力重现错误并向您发送屏幕截图。

    谢谢Benjo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否确保没有叠块被吹出? 一种简单的检查方法是执行ROV->BIOS->扫描错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好Todd

    我检查了堆栈溢出,但无法检测到一个。 此外,我还附上了Timer_start()之后以及发生错误时所需的屏幕截图

    ROV->BIOS->扫描错误: ROV->HWI->BASIC: ROV->HWI->模块:

    ROV ->定时器->基本:

    谢谢Benjo

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我还发现,在调用Timer_start()后,IER寄存器中的位0x1000设置正确。 因此,故障必须发生在调用Timer_start()和第一个已用计时器周期之间的某个位置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Benjo:

    您是否总是在扫描错误中收到警告? 例如,即使您到达main()?

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

    是的,我在启动调试会话后立即收到警告,在main()的开头停止。 我真的不知道它试图告诉我什么。 您认为这与计时器HWI问题有关?

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

    您能否提供有关计时器中断功能的详细信息? 是否有任何路径通过它调用Task_enable()?

    Timer 1 (计时器1)的相应Hwi条目显示禁用和恢复IER掩码似乎正确。 Hwi详细视图中的非零IRP值表示确实发生了计时器中断并由中断调度程序提供服务。  

    我怀疑计时器ISR内有一些角案例,ISR功能从未返回。 如果在中断功能内取消阻止任务时错误地启用了任务计划程序,则可能会发生这种情况。 执行线程不是从ISR返回,而是立即进入未阻止的任务线程,从而禁用计时器中断。

    艾伦

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

    您好,Alan

    ATM我被另一项任务所吸引,但我会尽快回来提供信息!
    同时:我发现,当我从不调用Timer_stop()时,问题不会发生。 我现在只需在开始时调用Timer_start(),并在ISR中使用一个标志来决定是否执行ISR代码。 只需在所需的时间点再次调用Timer_start()即可实现重新启动/同步。

    谢谢Benjo