AM572x调试暂停时TI-RTOS Clock对应定时器持续计数问题咨询
TI AM572x EVM 调试时冻结TI-RTOS Clock运行的解决方案
第一步:定位TI-RTOS Clock实际使用的定时器
你配置
Timer_ANY时内核会自动分配未被占用的定时器,除TIMER2、TIMER10外,A15_0可用的还有TIMER3、TIMER4、TIMER11等,你可以通过两种方式确认实际绑定的定时器:- 打开工程的RTOS配置文件(*.cfg),搜索
ti.sysbios.knl.Clock或ti.sysbios.family.arm.a15.Timer相关配置,查看自动分配的timerId参数 - 调试时打开CCS的RTOS对象查看器(ROV),选择
Timer模块,直接查看已激活定时器的ID和基地址
- 打开工程的RTOS配置文件(*.cfg),搜索
第二步:固定定时器并配置仿真冻结属性
确认定时器编号后,推荐直接手动指定Clock所用定时器并配置冻结参数,避免内核自动分配带来的不确定性:
- 在*.cfg文件中强制绑定Clock的定时器ID,示例代码(以绑定TIMER2为例):
绑定前确认对应定时器未被PTP、PWM等其他外设占用ti.sysbios.knl.Clock.timerId = 2; - 确认定时器EMUFREE位配置,在
main函数中、BIOS_start()执行前添加寄存器配置代码,示例:// 请将TIMER2_BASE替换为你所用定时器的实际基地址 #define TIMER2_BASE 0x48032000 #define TIOCP_CFG_OFFSET 0x10 // EMUFREE位为bit1,写0代表仿真暂停时定时器冻结计数 *(volatile uint32_t *)(TIMER2_BASE + TIOCP_CFG_OFFSET) &= ~(1U << 1);
- 在*.cfg文件中强制绑定Clock的定时器ID,示例代码(以绑定TIMER2为例):
第三步:使用TI-RTOS内置调试配置(推荐)
无需手动改寄存器,直接在*.cfg中添加配置即可实现调试时Clock自动冻结,不会累积挂起的中断:
ti.sysbios.knl.Clock.enableDebug = true;若使用旧版本SYS/BIOS,可额外添加定时器全局暂停配置:
ti.sysbios.family.arm.a15.Timer.emupause = true;临时调试方案
若不想修改工程代码,可在CCS的断点属性中添加自定义动作:每次断点触发暂停时,手动清除对应定时器的中断挂起位,恢复运行前清零TCRR计数器寄存器,避免恢复后触发累积的Swi。
内容的提问来源于stack exchange,提问作者Johann Hietajarvi
相关产品推荐
相关产品推荐

