CN / EN
CN / EN

提问

设计支持

您的项目私密技术问题如需获得一对一支持,请点击下方联系我们。

如何开启ITM打印功能 GR551x

Ping

汇顶员工
2024-03-01 12:22

ITM,(英文:Instrumentation Trace Macrocell,指令跟踪宏单元),是一种针对MCU进行跟踪调试的新方法,与打断点(Breakpoint)不同,ITM方法不需要暂停程序运行,可以在程序全速运行的过程中实时输出变量的数值以便观察,即Trace功能。Cortex-M3,M4,M7内核的单片机都支持ITM(M0,M0+内核是不支持的),在代码调试过程中,它与Jlink或者ST-LINK等结合,可以实时跟踪MCU的运行状态,查看数据等。ITM只支持SWD接口,不支持JTAG接口,而且相比于一般的SWD调试接口需要SWDIO和SWCLK两根线,ITM则额外需要一个SWO端口。

1. 硬件连接方法

以GR551x为例,GPIO2可以配置为SWO功能:

GPIO2连接到JLINK的SWO接口,以常用的JLINK仿真器为例,对应PIN13:

2. Keil配置方法

(1) 使能trace功能;

(2) 设置当前芯片系统时钟频率;

(3) 分频可以自动,但是要看clock频率有没有超过当前SWD的频率,否则就自己输一个分频;

(4) Port建议选0即可,全选也可以;

Debug模式下打开View -> Serial Windows -> Debug(printf) Viewer窗口,当CPU执行到ITM_SendChar指令的时候,就会把内容输出到窗口中。

3. 软件配置方法

以GR551x V2.0.2 SDK ble_app_template_freertos例程为例,修改步骤如下:

(1) 修改custom_config.h,使能日志打印并配置方法为ITM

// <o> Eanble APP log module
// <0=> DISABLE
// <1=> ENABLE
#ifndef APP_LOG_ENABLE
#define APP_LOG_ENABLE            1
#endif

// <o> APP log port type
// <0=> UART
// <1=> RTT
// <2=> ITM
#ifndef APP_LOG_PORT
#define APP_LOG_PORT              2
#endif

(2) 配置GPIO2 MUX SWO

io_init.pin  = APP_IO_PIN_2;
    io_init.mode = APP_IO_MODE_MUX;
    io_init.pull = APP_IO_NOPULL;
    io_init.mux  = APP_IO_MUX_2;
    app_io_init(APP_IO_TYPE_NORMAL, &io_init);

(3) 修改board_SK.c中的bsp_itm_send函数,增加如下一行代码,修复Trace功能被关闭的BUG;

CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;

void bsp_itm_send(uint8_t *p_data, uint16_t length)
{
    for(uint16_t i = 0; i < length; i++)
    {
        CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
        ITM_SendChar(p_data[i]);
    }
}

测试结果如下:

0收藏

0赞成

Ping

汇顶员工
2024-03-01 12:24

有任何疑问可在本帖下直接回复~

0条评论

0赞成

0收藏

您的评论

登录后可回答问题,请 注册

我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注