主题中讨论的其他器件: 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
艾斯·劳特巴赫
提前感谢您。
此致、
肯利