调试CLA代码是一个简单过程,它独立于主CPU。
(1)在CLA代码中插入断点
在希望CLA暂停代码的地方,插入一个CLA断点(MDEBUGSTOP指令),然后编译生成并重装代码。因为单步时CLA不能刷新流水线,MDEBUGSTOP指令必须作为代码的一部分插入。调试器不能在需要时插入。
如果没有使能CLA断点,那么MDEBUGSTOP被忽略而被处理为MNOP。只要不在三条指令即MBCNDD、MCCNDD或MRCNDD指令之中,MDEBUGSTOP指令可以放置到CLA代码的如何地方。
(2)使能CLA断点
首先,在调试器中使能CLA断点。在CCS V3.3中,可以通过连接CLA调试窗口(de-bug->connect)实现。当窗口断开时,断点被禁止。
(3)启动任务
启动任务有三种方法:
●外设可以声明一个中断。
●主CPU执行一条IACK指令。
●在调试器窗口手工写入MIFRC寄存器。
当任务启动时,CLA将执行指令直到MDEBUGSTOP指令在流水线的D2阶段。在该点,CLA暂停而流水线被冻结。MPC寄存器将反映MDEBUGSTOP指令的地址。
(4)单步执行CLA代码(www.daowen.com)
一旦暂停,可以一次一周期单步执行CLA代码。CLA单步的行为与主C28x不同。当发出一个CLA单步时,流水线只在一个周期提供时钟,然后冻结。对于28xCPU,每一个单步刷新流水线。
也可以运行到下一条MDEBUGSTOP或到任务的结束。如果有另外悬挂的任务,它将在本任务结束后自动启动执行。
注:当CLA程序存储器映射到CLA存储器空间时,CLA取指令比CPU调试读具有更高的优先级。因此,如果CLA正在执行一个循环,CLA有可能长久阻止CPU调试访问。当最初开发CLA代码,由于程序缺陷产生无限循环时,可能出现这种情况。为避免锁死主CPU,当CLA运行时,CPU调试读程序存储器将都返回0x0000。当CLA暂停或空闲时,可以完成对CLA程序存储器正常CPU调试读和写访问。
如果CLA陷入无限循环,可以用软件或硬件复位退出这种情况。调试器复位也可以退出这种情况。
当单步执行任务时可能出现特殊情况,例如程序计数器(MPC)在任务结束遇到MSTOP指令。
1)有一个任务已经悬挂时,MPC暂停在MSTOP或其后。
如果任务A正在单步或暂停,而任务B在MPC到达MSTOP前到来,继续单步通过MSTOP指令,那么任务B将启动。如果在任务A中,MPC到达MSTOP前,任务B正在悬挂,那么任务B启动没有问题且不需要特殊动作。
●没有任务悬挂时MPC暂停在MSTOP或其后
这种情况下,在任务A单步或暂停且MPC到达MSTOP而没有任务悬挂。这时如果任务B到来,MIFR寄存器将设置标志,但是如果继续单步通过任务A中的MSTOP指令,任务B可能启动也可能不启动。这取决于新任务何时准确到达。为可靠地启动任务B,应实行软件复位并重新配置MIER位。完成后,可以开始单步任务B。
如果当任务B到来时有控制转换(例如使用IACK指令启动任务),这种情况可以稍作不同处理。在此情况下,在任务A单步或暂停且没有任务悬挂,MPC到达MSTOP。在强制执行任务B之前,自由运行使得CLA退出调试状态。此后,可以强制执行任务B并继续调试。
(5)禁止CLA断点
在CCS V3.3软件环境中,通过断开CLA调试窗口,可以禁止CLA断点。确认首先发出运行或复位,不然CLA会暂停且不启动其他任务。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。