Other Parts Discussed in Thread: TM4C1290NCZAD
器件型号: TM4C1290NCZAD
因为没有响应,我创建了一个新的线程。
尊敬的专家:
在运行期间、他们发现程序随机停止运行的问题。 可通过对电路板进行下电上电来恢复系统。
发生该问题时、也无法通过 JTAG 调试器进行连接、并且调试环境中会显示以下错误消息:
“Cortex_M4_0:连接到目标时出错:(错误–2062 @ 0x0)无法停止器件。 重置器件、然后重试此操作。 如果错误仍然存在、请确认配置、对电路板进行下电上电、和/或尝试更可靠的 JTAG 设置(例如下 TCLK)。 (仿真包 8.0.27.9)“
经过我们的调查、他们发现问题可以通过在更新计时器计数器值之前停止计时器一次、然后在更新后再次启用计时器来解决。
具体而言、他们实现了以下 / 序列:
TimerDisable (TIMER0_BASE、TIMER_A);
TimerLoadSet (TIMER0_BASE、TIMER_A、(wTimer - 1));
TimerEnable (TIMER0_BASE、TIMER_A);Disable()Enable()
我们的问题如下:
- Q1:如果更新 计时器计数器值而不停止计时器,则可能发生什么类型的故障或异常行为?
- 问题 2:从设计和规格的角度来看、上述 停止和重启计时器的权变措施是否是适当的解决方案?
初始化代码如下所示。
SysCtlPeripheralEnable (SYSCTL_PERIPH_TIMER0);
while(!SysCtlPeripheralReady (SYSCTL_PERIPH_TIMER0));
TimerDisable (TIMER0_BASE、TIMER_A);
TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODENT);
TimerPrescale Set (TIMER0_BASE、TIMER_A、0);
TimerLoadSet(TIMER0_BASE、TIMER_A、(g_timerPeriod –1));
TimerUpdateMode (TIMER0_BASE、TIMER_A、TIMER_UP_LOAD_TIMEOUT);
TimerIntClear (TIMER0_BASE、TIMER_TIMA_TIMEOUT);
TimerIntEnable (TIMER0_BASE、TIMER_TIMA_TIMEOUT);
IntPrioritySet (INT_TIMER0A、4);
IntEnable (INT_TIMER0A);
TimerEnable (TIMER0_BASE、TIMER_A);
此致、
正常