跳转至

数据观察点与跟踪单元

本章介绍数据观察点与跟踪(DWT)单元。

1. 关于 DWT

DWT 是一个调试单元,为处理器提供观察点和系统性能分析(profiling)。如果处理器实现时包含了 DWT 和 ITM 跟踪,还可以提供数据跟踪。有关 ITM 的详细信息,请参见插桩跟踪宏单元一章。

2. DWT 功能描述

完整的 DWT 包含四个比较器,可将它们配置为:

  • 硬件观察点。
  • ETM 触发。
  • PC 采样器事件触发。
  • 数据地址采样器事件触发。

第一个比较器 DWT_COMP0 还可以与时钟周期计数器 CYCCNT 进行比较。第二个比较器 DWT_COMP1 还可以用作数据比较器。

精简 DWT 包含两个比较器,可用作观察点或触发器。这些比较器支持数据匹配。

如果实现了 DWT,则它包含以下计数器:

  • 时钟周期,CYCCNT。
  • 折叠指令(folded instructions)。
  • 加载存储单元(LSU)操作。
  • 睡眠周期。
  • CPI,即除第一个周期之外的所有指令周期。
  • 中断开销。

注意: 每次计数器溢出时都会产生一个事件。

可以将 DWT 配置为在定义的间隔生成 PC 采样,并生成中断事件信息。

DWT 为 ITM 提供周期性的协议同步请求。

3. DWT 编程模型

下表给出了 DWT 寄存器。根据处理器的具体实现,其中某些寄存器可能不存在。配置为不存在的寄存器读为零。

地址 名称 类型 复位值 描述
0xE0001000 DWT_CTRL RW 见注 a 控制寄存器
0xE0001004 DWT_CYCCNT RW 0x00000000 周期计数寄存器
0xE0001008 DWT_CPICNT RW - CPI 计数寄存器
0xE000100C DWT_EXCCNT RW - 异常开销计数寄存器
0xE0001010 DWT_SLEEPCNT RW - 睡眠计数寄存器
0xE0001014 DWT_LSUCNT RW - LSU 计数寄存器
0xE0001018 DWT_FOLDCNT RW - 折叠指令计数寄存器
0xE000101C DWT_PCSR RO - 程序计数器采样寄存器
0xE0001020 DWT_COMP0 RW - 比较器寄存器 0
0xE0001024 DWT_MASK0 RW - 掩码寄存器 0
0xE0001028 DWT_FUNCTION0 RW 0x00000000 功能寄存器 0
0xE0001030 DWT_COMP1 RW - 比较器寄存器 1
0xE0001034 DWT_MASK1 RW - 掩码寄存器 1
0xE0001038 DWT_FUNCTION1 RW 0x00000000ᵇ 功能寄存器 1
0xE0001040 DWT_COMP2 RW - 比较器寄存器 2
0xE0001044 DWT_MASK2 RW - 掩码寄存器 2
0xE0001048 DWT_FUNCTION2 RW 0x00000000 功能寄存器 2
0xE0001050 DWT_COMP3 RW - 比较器寄存器 3
0xE0001054 DWT_MASK3 RW - 掩码寄存器 3
0xE0001058 DWT_FUNCTION3 RW 0x00000000 功能寄存器 3
0xE0001FB0 DWT_LAR WO - 锁定访问寄存器
0xE0001FB4 DWT_LSR RO 未知 锁定状态寄存器
0xE0001FD0 PID4 RO 0x00000004 外设标识寄存器
0xE0001FD4 PID5 RO 0x00000000
0xE0001FD8 PID6 RO 0x00000000
0xE0001FDC PID7 RO 0x00000000
0xE0001FE0 PID0 RO 0x00000002
0xE0001FE4 PID1 RO 0x000000B0
0xE0001FE8 PID2 RO 0x0000000B
0xE0001FEC PID3 RO 0x00000000
0xE0001FF0 CID0 RO 0x0000000D 组件标识寄存器
0xE0001FF4 CID1 RO 0x000000E0
0xE0001FF8 CID2 RO 0x00000005
0xE0001FFC CID3 RO 0x000000B1

DWT 寄存器在 Arm®v7-M 架构参考手册中描述。

注意:

  • 周期匹配功能仅在比较器 0 中可用。
  • 数据匹配功能仅在比较器 1 中可用。
  • 仅对不产生 MPU 或总线故障的访问采样数据值。无论是否存在故障都会采样 PC。仅对突发的第一个地址采样 PC。
  • 如果在 DWT_FUNCTION1 中也置位了 DATAVMATCH,则 DWT_FUNCTION1 寄存器中的 FUNCTION 字段会被 DATAVADDR0 和 DATAVADDR1 指定的比较器覆盖。此时 DATAVADDR0 和 DATAVADDR1 指定的比较器只能为比较器 1 的数据匹配执行地址比较器匹配。
  • Arm 不建议对观察点使用 PC 匹配,因为观察点相对于引起它的事件是异步的。它主要用于保护和触发 ETM。

a. 可能的复位值为:0x40000000 表示带跟踪的完整 DWT;0x48000000 表示不带跟踪的完整 DWT;0x20000000 表示带跟踪的精简 DWT;0x28000000 表示不带跟踪的精简 DWT。 b. 如果处理器配置为最小调试,DWT_FUNCTION1[9] 始终为 RAZ;如果配置为完整调试,DWT_FUNCTION1[9] 始终为 RA0。DWT_FUNCTION1 寄存器中其他所有位复位为 0。