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.

[参考译文] SYSBIOS:DMTIMER 处理程序

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1243097/sysbios-dmtimer-handler

器件型号:SYSBIOS
主题中讨论的其他器件: AM5706

团队成员  

我的客户对 SYSBIOS 中的 dmtimer 处理程序有2个问题。

1.它们试图使用 dmtimer 实现1ms 周期的处理程序、但使用单个计时器中断多次调用处理程序。
SYSBIOS 中的函数"Timer_stb ()"清除了 GPTimer1寄存器"IRQSTATUS (0x4AE1 8028)"的中断因子、然后在处理程序处理完成后0.5 μ s 内重新执行处理程序处理。 可以观察到、它被调用多达五次。
GPTimer 寄存器区域的存储器属性设置为"严格排序"、并在处理程序中清除中断因子。
什么可能是多次调用处理程序的原因?

◆注释
・一个 μs 程序的处理时间是0.6到2.5 μ s、并且处理程序最多被调用5次(第一个处理程序调用+ 8μs μ s)、直到使用 dmtimer 经过1ms。  
・如果将循环处理添加到处理程序并增加处理时间,则调用处理程序的次数将减少。 μs 处理程序的处理时间超过8 μ s、处理程序处理将在1ms 周期内执行一次。  
・他们对 µs 更改为大约8 μ s 阈值的原因感到困惑。
 ・main.cfg 中与计时器相关的设置如下所示:
VAR DMTimer = xdc.useModule('ti.sysbios.timers.dmtimer.Timer');
Clock.TimerProxy = DMTimer;
VAR 计时器= xdc.useModule('ti.sysbios.timers.dmtimer.Timer');
Timer.intFreq ={lo:20000000、hi:0};
VAR BIOS = xdc.useModule('ti.sysbios.BIOS');
BIOS.puFreq.lo = 1000000000

2.关于问题1的反措施。
它与 SYSBIOS 中的函数"Timer_slum()"有关。
虽然 GPTimer1寄存器"IRQSTATUS (0x4AE1 8028)"的中断因子被清零、但我们假定中断处理程序将被多次调用而不清除因子。
因此,它们使得 DMB 指令在从"Timer_slum()"调用的处理程序中执行。

在 μs DMB 指令前、一个 μs 程序的处理时间是0.6 μ s 到2.5 μ s、但在添加 DMB 指令后、处理时间增加到了大约8 μ s。
因此、处理程序进程仅在1ms 周期内执行一次、从而避免了这种问题。
他们希望确认作为对策是否合适? 如果不是、应该怎么做?

◆其他信息
AM5706
CCS v8
GCC GNU v6.3.1 (Linaro)
HW AM5706定制板
软件 pdk_am57xx_1_0_11
BIOS_6_76_00_08
XDCTools 3.50.3.33
艾斯·劳特巴赫

提前感谢您。

此致、

肯利

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

    您好、Kenley:

    很抱歉延迟回复。

    您能否在下面确认我的理解是否正确:

    1) 1)您正在每1ms 配置一次计时器中断
    2) 2)一旦 ISR 完成其执行(可能需要高达2.5us)、就会再次触发 ISR、并且在1ms 内最多发生5次
    3) 3)如果以某种方式、ISR 需要8us 才能完成、则不会出现此问题。 您可以看到 ISR 按预期每1ms 触发一次、

    如果我遗漏了什么内容、请告诉我。
    此外、能否共享您的 ISR 代码片段?

    此致、
    帕尔特