12 指令跟踪宏单元(ITM)
12.1 ITM概述
仪器跟踪宏单元(ITM)是可选的、由应用程序驱动的跟踪源,支持类似 printf 打印风格的调试手段,可用于跟踪操作系统与应用程序事件,并输出系统诊断信息。
12.2 ITM功能描述
ITM 以数据包形式生成跟踪信息,共有四类数据源可产生数据包。若多个数据源同时输出数据包,ITM 会仲裁数据包的输出顺序。四类数据源的优先级从高到低依次为:
- 软件跟踪:软件可以直接写入ITM激励寄存器去生成跟踪数据包
- 硬件跟踪:数据包由DWT生成,再经由ITM对外输出
- 时间戳:数据包会附带相对时间戳。ITM 内置一个 21 位计数器用于生成时间戳,该计数器由处理器时钟驱动计数。
- 全局系统时间戳:可选采用系统级 64 位计数值生成时间戳;该计数值同样用于为 ETM 跟踪流插入时间戳,实现粗粒度的多模块跟踪数据关联比对。
12.3 ITM程序模型
下表列出了本处理器专属实现的 ITM 寄存器。其余寄存器的相关说明请参阅《Arm® v7-M 架构参考手册》。
根据处理器的硬件实现方案,部分 ITM 寄存器可能未集成。读取任何硬件未实现的寄存器时,读出值恒为 0。
注意:
在配置或使用 ITM 之前,必须置位调试异常与监控控制寄存器(DEMCR)的 TRCENA 位。
若 ITM 跟踪流需要同步数据包,则必须在 DWT 中配置同步数据包发送速率。
| 地址范围 | 寄存器名称 | 读写属性 | 复位值 | 功能说明 |
|---|---|---|---|---|
| 0xE0000000 ~ 0xE000007C | ITM_STIM0 ~ ITM_STIM31 | 可读可写 (RW) | --- | 0~31 号激励端口寄存器 |
| 0xE0000E00 | ITM_TER | 可读可写 (RW) | 0x00000000 | 跟踪通道使能寄存器 |
| 0xE0000E40 | ITM_TPR | 可读可写 (RW) | 0x00000000 | ITM 跟踪权限寄存器 |
| 0xE0000E80 | ITM_TCR | 可读可写 (RW) | 0x00000000 | 跟踪控制寄存器 |
| 0xE0000EF0 | ITM_ITATRDY | 只读 (RO) | 未定义 | 集成测试模式:ATB 就绪状态读寄存器 |
| 0xE0000EF8 | ITM_ITATVAL | 只写 (WO) | --- | 集成测试模式:ATB 有效信号写寄存器 |
| 0xE0000F00 | ITM_TCTRL | 可读可写 (RW) | 0x00000000 | 集成测试模式控制寄存器 |
| 0xE0000FB0 | ITM_LAR | 只写 (WO) | --- | ITM 锁访问寄存器 |
| 0xE0000FB4 | ITM_LSR | 只读 (RO) | 未定义 | ITM 锁状态寄存器 |
| 0xE0000FD0 | PID4 | 只读 (RO) | 0x00000004 | 外设识别寄存器组 |
| 0xE0000FD4 | PID5 | 只读 (RO) | 0x00000000 | 保留 |
| 0xE0000FD8 | PID6 | 只读 (RO) | 0x00000000 | 保留 |
| 0xE0000FDC | PID7 | 只读 (RO) | 0x00000000 | 保留 |
| 0xE0000FE0 | PID0 | 只读 (RO) | 0x00000001 | 外设识别寄存器 0 |
| 0xE0000FE4 | PID1 | 只读 (RO) | 0x000000B0 | 外设识别寄存器 1 |
| 0xE0000FE8 | PID2 | 只读 (RO) | 0x0000000B | 外设识别寄存器 2 |
| 0xE0000FEC | PID3 | 只读 (RO) | 0x00000000 | 外设识别寄存器 3 |
| 0xE0000FF0 | CID0 | 只读 (RO) | 0x0000000D | 组件识别寄存器组 |
| 0xE0000FF4 | CID1 | 只读 (RO) | 0x000000E0 | 组件识别寄存器 1 |
| 0xE0000FF8 | CID2 | 只读 (RO) | 0x00000005 | 组件识别寄存器 2 |
| 0xE0000FFC | CID3 | 只读 (RO) | 0x000000B1 | 组件识别寄存器 3 |
备注:
特权模式下可完整访问全部 ITM 寄存器。用户模式中,所有寄存器均支持读取,但仅激励寄存器与跟踪使能寄存器允许写入,且写入的前提是跟踪权限寄存器对应位置 1。用户模式下对 ITM 寄存器执行非法写操作时,写入数据会被硬件丢弃。
12.3.1 ITM跟踪特权寄存器
| 项目 | 内容 |
| 功能用途 | 供操作系统管控用户代码可访问的激励端口。 |
| 使用约束 | 仅能在特权模式下对该寄存器执行写操作。 |
| 配置版本 | 若硬件实现中集成了 ITM 模块,则该寄存器可用。 |
| 属性说明 | 见下表 |
|---|

| 位域 | 名称 | 功能说明 |
|---|---|---|
| 31:4 | --- | 保留位 |
| 3:0 | PRIVMASK | 中断线路总数,以 32 路为一组划分: |
| BIT0 | 激励端口7:0 | |
| BIT1 | 激励端口15:8 | |
| BIT2 | 激励端口23:16 | |
| BIT3 | 激励端口31:24 |
该部分内容需看ARM v7架构手册,TRM描述的太少