ARM1020T处理器采用了一种独特的双模式调试架构,通过JTAG接口和DSCR寄存器实现了对处理器内核的全面控制。这套调试系统在设计上兼顾了实时性和灵活性,能够满足从底层硬件调试到上层应用开发的全方位需求。
调试系统的核心是CP14(协处理器14),所有调试功能都通过这个协处理器进行访问和控制。CP14包含了一系列专用寄存器,其中最重要的是DSCR(Debug Status and Control Register),它相当于整个调试系统的控制中心。通过设置DSCR的不同位域,开发者可以精确控制处理器的调试行为。
关键提示:ARM1020T的DBGEN引脚必须接高电平才能启用调试功能,这是很多开发者容易忽略的硬件配置要点。如果这个引脚被错误地拉低,所有调试功能都将不可用。
JTAG接口的核心是TAP(Test Access Port)控制器,它是一个16状态的状态机,通过TCK、TMS、TDI和TDO四根信号线实现控制。TAP控制器的状态转换完全由TMS信号在TCK上升沿时的电平决定。
ARM1020T实现了多条扫描链(Scan Chain),每条扫描链都有特定用途:
**扫描链4(ITR)**是一个33位的寄存器,其中32位用于存储指令,1位用于指示指令是否完成执行。通过这个寄存器,调试器可以将任意ARM或Thumb指令注入到处理器流水线中。但需要注意,某些可能引发异常的指令会导致不可预测的行为。
**扫描链5(DTR)**实际上由两个物理上独立的寄存器组成:
这种设计巧妙地实现了一个双向通信通道,使得处理器和调试器可以高效交换数据。
DSCR寄存器是调试系统的神经中枢,理解它的每个位域对于有效使用调试功能至关重要。
| 位 | 名称 | 功能描述 | 复位值 |
|---|---|---|---|
| 31 | GE | 全局调试使能。1=启用所有调试功能,0=禁用 | 0 |
| 30 | Halt | 调试模式选择。1=Halt模式,0=Monitor模式 | 0 |
| 29 | Execute | ITR指令执行控制。1=在Run-Test/Idle状态执行ITR中的指令 | 0 |
| 28 | Thumb | 指令类型指示。1=ITR中是Thumb指令,0=ARM指令 | - |
| 7 | RF | rDTR缓冲区满标志。1=有新数据可供读取 | - |
| 6 | WE | wDTR缓冲区空标志。1=可写入新数据 | - |
| [4:2] | MOE | 进入调试模式的原因编码 | - |
DSCR的一个独特之处在于,从处理器内核和从JTAG接口看到的寄存器视图是不同的:
| DSCR位域 | 内核视图 | JTAG视图 |
|---|---|---|
| [1:0] | 保留 | 只读 |
| [4:2] | 只读 | 只读 |
| 5 | 保留 | 只读 |
| [7:6] | 只读 | 只读 |
| [15:8] | 保留 | 保留 |
| [23:16] | 可读写 | 只读 |
| [26:24] | 保留 | 保留 |
| [30:27] | 保留 | 可读写 |
| 31 | 可读写 | 只读 |
这种差异设计使得调试器可以控制某些关键功能(如Halt模式切换),同时允许内核监控调试状态。
Halt模式是最彻底的调试模式,在这种模式下:
高效数据下载技巧:
寄存器读取优化:
assembly复制; 读取R0到R15的示例流程
MOV R1, #0 ; 初始化寄存器索引
loop:
MRC p14, 0, R2, c0, c5, 0 ; 读取DTR到R2
STC p14, c5, [R1], #4 ; 存储到内存并更新指针
CMP R1, #60 ; 检查是否读完15个寄存器
BLT loop
Monitor模式适用于实时系统调试,其特点包括:
典型应用流程:
ARM1020T提供了6个指令断点和2个数据观察点,每个都可以独立配置。
断点涉及两类寄存器:
控制寄存器关键位:
示例配置代码:
assembly复制; 配置断点0在0x8000处捕获ARM特权模式指令
LDR R0, =0x8000
MCR p14, 0, R0, c0, c0, 4 ; 设置BA0
MOV R0, #0x12 ; ARM指令+特权模式+使能
MCR p14, 0, R0, c0, c0, 5 ; 设置BC0
观察点控制寄存器(WC0-WC1)提供了丰富的配置选项:
| 位域 | 功能 | 选项 |
|---|---|---|
| [10:9] | 地址掩码 | 控制DA[1:0]是否参与比较 |
| [7:5] | 数据大小 | 字节/半字/字/任意组合 |
| [4:3] | 访问类型 | 读/写/任意 |
| [2:1] | 特权级别 | 用户/特权/任意 |
| [0] | 使能位 | 1=启用 |
复杂观察点配置示例:
assembly复制; 配置观察点0监控0x4000-0x4003的任意写操作
LDR R0, =0x4000
MCR p14, 0, R0, c0, c0, 6 ; 设置WA0
MOV R0, #0b11111011 ; 字大小+写操作+特权模式+使能
MCR p14, 0, R0, c0, c0, 7 ; 设置WC0
通信通道是处理器与调试器交换数据的关键途径,其工作流程如下:
性能提示:在批量数据传输时,合理使用DSCR[29]的自动执行功能可以显著提高吞吐量。通过保持ITR中加载LDM/STM指令,并利用Run-Test/Idle状态自动触发执行,可以实现接近理论带宽的数据传输。
ARM1020T在调试异常处理方面有一些特殊行为需要特别注意:
| 异常类型 | ARM模式LR | Thumb模式LR | 故障指令地址 | 下条指令地址 |
|---|---|---|---|---|
| 预取中止 | PC+4 | PC+4 | LR-4 | LR |
| 断点指令 | PC+4 | PC+4 | LR-4 | LR-2 |
| 数据中止 | PC+8 | PC+8 | LR-8 | LR-4 |
观察点触发后,LR值与数据中止相同,但需要注意:
问题1:断点无法触发
问题2:通信通道数据丢失
问题3:Monitor模式异常处理不稳定
实现步骤:
技术方案:
虽然ARM1020T是单核处理器,但类似的调试技术可以扩展到多核系统: