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

相关推荐
奔跑的架构师2 天前
[A-51]ARMv9/v8-SCMI系统架构
linux·arm开发·架构·系统架构·arm
susplus2 天前
【Linux驱动开发】中断、工作队列及中断子系统详解
arm·中断·linux驱动开发·中断子系统
chu_bingzhi3 天前
ARMv8体系结构
arm
一直C5 天前
嵌入式 Linux 驱动开发学习笔记(三)设备树、GPIO子系统、中断与外设驱动实战
驱动开发·单片机·嵌入式硬件·嵌入式·arm·imx6ull
zbyyd6 天前
Linux字符设备驱动:LED驱动实战开发
linux·单片机·arm·驱动
祖力557 天前
驱动工程搭建与字符设备驱动框架
linux·运维·服务器·内核·arm·imx6ull·驱动
susplus7 天前
【Linux驱动开发】字符设备介绍 | LED灯驱动基本实现(自动申请设备号+手动添加节点)
arm·led驱动·linux驱动开发
gscsded8 天前
MCUboot裸机移植实战
单片机·嵌入式硬件·arm
想喝奶茶啾啾8 天前
AMBA CHI架构以及规范中使用的术语 翻译笔记(1)
笔记·arm·chi
susplus9 天前
【IMX6ULL Linux系统移植】内核编译裁剪 + rootfs 构建 + 完整启动流程梳理
linux内核·arm·rootfs·linux启动