工具/软件:Starterware
您好!
使用 M4的 Starterware 计时器示例、我们将软件组合在一起、对计时器10模块进行编程、使其充当1ms 计时器。
正常程序序列为:
系统加电并加载计时器配置软件
定时器配置软件强制使用 CM_L4PER_TIMER10_CLKCTRL 启用定时器模块、选择 SYS_CLK1_32K_CLK (也称为 FUNC_32K_CLK)作为源时钟。
2.配置定时器中断 XBar 并链接到 ISR
3.软复位定时器模块,然后根据 TRM 对必要的寄存器进行编程。
4.清除现有的中断标志、然后启用定时器
我们有时会在#3遇到问题。 发出软复位命令(使用 TIMERReset)后、我们尝试先加载 TPIR 寄存器、TDIR 寄存器、然后加载所有其他必要的寄存器。 问题是我们永远不会退出函数来写入 TNIR 寄存器。 由于选中 TimerWaitForWrite(),计时器配置似乎正在暂停。 这意味着 TPIR 寄存器尚未实际写入、对吧?
我们已经尝试在软复位后首先写入其他寄存器、但我们仍会在一段时间内每隔一次停止、因此它不是特定于 TPIR 的。 我们已手动检查是否执行了 RESET 命令、即使复位 API 函数检查以使复位在退出之前已完成、这看起来不错。 使用单独的 CPU 内核来帮助调试发生错误时、我们尝试访问其他计时器10寄存器、尝试查找错误源、但对计时器10寄存器的任何读取尝试都会冻结系统。 这与未启用计时器模块的情况类似、但我们选中了 CM_L4PER_TIMER10_CLKCTRL、读取值表示它仍处于启用状态。
计时器10模块冻结是否有其他原因? 我们可以检查什么以调试该问题? 计时器模块不会始终冻结、当它不冻结时、1ms 计时器工作良好、因此不确定为什么有时会发生这种情况。
谢谢、
胡安