Cortex M7-TRM 翻译系列之ITM(十二)

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描述的太少

相关推荐
zhangzhangkeji1 小时前
笔记 25 - 2 :linux 驱动模块移植,创建自定义驱动(编译为模块),调整 shell 里字体大小,
arm
zhangzhangkeji1 天前
笔记 24 -2 :linux 内核编译,实验举例,及编译脚本
arm
zhangzhangkeji1 天前
笔记 23 :linux 内核基础知识,内核的目录
arm
抓不住时间的沙1 天前
N1搭建Hexo个人博客,部署到Github
python·docker·node.js·debian·github·arm
躺不平的理查德2 天前
ARCH与交叉编译器的关系
服务器·arm
奔跑的架构师4 天前
[A-49]ARMv9/v8-PSCI接口规范与工作流程简介
android·linux·arm开发·arm
zhangzhangkeji6 天前
笔记 22 - 5a :彭老师 15章,uboot 启动,linux 挂载 nfs 文件系统,组网与启动 NFS 服务
arm
zhangzhangkeji7 天前
笔记 22 - 4a :彭老师 15章,uboot 启动,zynq zturn ,uboot 启动参数分析;QSPI 操作
arm
zhangzhangkeji9 天前
笔记 21-9 :彭老师 14章,系统移植,涉及 emmc / SD 的 uboot 命令
arm
zhangzhangkeji10 天前
笔记 21-7 :彭老师 14章,系统移植,uboot 常用命令,shell 里 $() 和 ${}
arm