我正在使用包含Cortex-M3的NXP LPC1769。到目前为止,我只是从JTAG接口访问它,但现在我必须反过来这样做。 IT例程应该读取内存的某些部分,并立即将它们发送到JTAG端口。有没有办法做到这一点?
*更新:经过数小时的研究,我发现了一些可能有用的东西:Cortex-M3支持ITM(Instrumentation Trace Macrocell),它可以通过JTAG端口的TDO引脚发送数据。我现在的问题是,怎么会这样做?我只找到了ITM的调试器专用应用程序,在我的情况下,我希望能够从正在运行的应用程序发送特定的JTAG消息(或编写特定的DP / AP寄存器)。
答案 0 :(得分:1)
有几种方法可以通过JTAG端口进行主机I / O.我通常转向的第一个称为半主机。半主机使用处理器断点,以便为调试板提供IO到主机。这个机制在这里解释得更多:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471h/Bgbjjgij.html。
如何在调试器上启用半主机将根据您使用的工具进行更改。例如,可以在此处找到用于在LPCXpresso IDE中设置半主机的线程:https://www.lpcware.com/content/forum/configure-lpcxpresso-use-semihosting并且可以在此处找到GNU Arm Eclipse的指南:https://mcuoneclipse.com/2014/09/11/semihosting-with-gnu-arm-embedded-launchpad-and-gnu-arm-eclipse-debug-plugins/。
与使用ITM相比,半主机的缺点是慢。
您在问题中提到的另一种方法是使用ITM(Instrumentation Trace Macrocell)功能。与半主机不同,如果已启用SWO引脚或已配置单独的UART输出,则ITM可以在不等待JTAG适配器轮询数据的情况下运行。与半主机一样,细节将根据您使用的工具而改变。
可在此处找到使用ITM作为LPCXpresso IDE标准输出的指南:https://www.lpcware.com/content/faq/lpcxpresso/how-use-itm-printf。