ZHCUCH3A November   2024  – March 2025 F29H850TU , F29H859TU-Q1

 

  1.   1
  2.   使用前必读
    1.     关于本手册
    2.     德州仪器 (TI) 相关文档
    3.     术语表
    4.     支持资源
    5.     商标
  3. 1架构概述
    1. 1.1 CPU 简介
    2. 1.2 数据类型
    3. 1.3 C29x CPU 系统架构
      1. 1.3.1 仿真逻辑
      2. 1.3.2 CPU 接口总线
    4. 1.4 存储器映射
  4. 2中央处理单元 (CPU)
    1. 2.1 C29x CPU 架构
      1. 2.1.1 特性
      2. 2.1.2 方框图
    2. 2.2 CPU 寄存器
      1. 2.2.1 寻址寄存器 (Ax/XAx)
      2. 2.2.2 定点寄存器 (Dx/XDx)
      3. 2.2.3 浮点寄存器 (Mx/XMx)
      4. 2.2.4 程序计数器 (PC)
      5. 2.2.5 返回程序计数器 (RPC)
      6. 2.2.6 状态寄存器
        1. 2.2.6.1 中断状态寄存器 (ISTS)
        2. 2.2.6.2 解码阶段状态寄存器 (DSTS)
        3. 2.2.6.3 执行阶段状态寄存器 (ESTS)
    3. 2.3 指令打包
      1. 2.3.1 独立指令和限制
      2. 2.3.2 指令超时
    4. 2.4
      1. 2.4.1 软件栈
      2. 2.4.2 受保护的调用栈
      3. 2.4.3 实时中断/NMI 栈
  5. 3中断
    1. 3.1 CPU 中断架构方框图
    2. 3.2 RESET、NMI、RTINT 和 INT
      1. 3.2.1 RESET(CPU 复位)
        1. 3.2.1.1 所需指令 (RESET)
      2. 3.2.2 NMI(不可屏蔽中断)
        1. 3.2.2.1 阻止和屏蔽 (NMI)
        2. 3.2.2.2 信号传播 (NMI)
        3. 3.2.2.3 栈 (NMI)
        4. 3.2.2.4 所需指令(NMI)
      3. 3.2.3 RTINT(实时中断)
        1. 3.2.3.1 阻止和屏蔽 (RTINT)
        2. 3.2.3.2 信号传播 (RTINT)
        3. 3.2.3.3 栈 (RTINT)
        4. 3.2.3.4 所需指令 (RTINT)
      4. 3.2.4 INT(低优先级中断)
        1. 3.2.4.1 阻止和屏蔽 (INT)
        2. 3.2.4.2 信号传播 (INT)
        3. 3.2.4.3 堆栈 (INT)
    3. 3.3 阻止中断的条件
      1. 3.3.1 ATOMIC 计数器
    4. 3.4 CPU 中断控制寄存器
      1. 3.4.1 中断状态寄存器 (ISTS)
      2. 3.4.2 解码阶段状态寄存器 (DSTS)
      3. 3.4.3 与中断相关的栈寄存器
    5. 3.5 中断嵌套
      1. 3.5.1 中断嵌套示例图
    6. 3.6 安全性
      1. 3.6.1 概述
      2. 3.6.2 链接
      3. 3.6.3
      4. 3.6.4 区域
  6. 4寻址模式
    1. 4.1 寻址模式概述
      1. 4.1.1 文档和实施
      2. 4.1.2 寻址模式类型列表
        1. 4.1.2.1 其他寻址类型
      3. 4.1.3 寻址模式汇总
    2. 4.2 寻址模式字段
      1. 4.2.1 ADDR1 字段
      2. 4.2.2 ADDR2 字段
      3. 4.2.3 ADDR3 字段
      4. 4.2.4 DIRM 字段
      5. 4.2.5 其他字段
    3. 4.3 对齐和流水线注意事项
      1. 4.3.1 对齐
      2. 4.3.2 流水线注意事项
    4. 4.4 寻址模式类型
      1. 4.4.1 直接寻址
      2. 4.4.2 指针寻址
        1. 4.4.2.1 具有 #Immediate 偏移的指针寻址
        2. 4.4.2.2 具有指针偏移的指针寻址
        3. 4.4.2.3 具有 #Immediate 递增/递减的指针寻址
        4. 4.4.2.4 具有指针递增/递减的指针寻址
      3. 4.4.3 栈寻址
        1. 4.4.3.1 分配和取消分配栈空间
      4. 4.4.4 循环寻址指令
      5. 4.4.5 位反向寻址指令
  7. 5功能安全和信息安全单元 (SSU)
    1. 5.1 SSU 概述
    2. 5.2 链接和任务隔离
    3. 5.3 在任务隔离边界之外共享数据
    4. 5.4 受保护的调用和返回
  8. 6仿真
    1. 6.1 仿真功能概述
    2. 6.2 调试术语
    3. 6.3 调试接口
    4. 6.4 执行控制模式
    5. 6.5 断点、观察点和计数器
      1. 6.5.1 软件断点
      2. 6.5.2 硬件调试资源
        1. 6.5.2.1 硬件断点
        2. 6.5.2.2 硬件观察点
        3. 6.5.2.3 基准计数器
      3. 6.5.3 PC 跟踪
  9. 7修订历史记录

ADDR1 字段

这是一个用于地址间接编码的 16 位字段,可在所有“指针寻址”和“栈寻址”模式下使用。

表 4-2 展示了使用 16 位对地址进行编码的各种方式。

表 4-2 ADDR1 字段编码
ADDR1 字段:(Ax = A0 至 A14,Aj = A0 至 A14,Ak = A0 至 A3)
助记符 2 简写 地址生成 47 46 45 43 42 41 40 39 38 37 36 35 34 33 32 31
助记符 简写 地址生成 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
*(Ax+#u10imm) *Ax[#u10imm] addr = Ax + #u10imm(#u10imm = 0 至 1KB 范围) 0 0 #u10imm Ax[0-14] 1
*(Ax+#u10imm<<2) *Ax[#u10imm] addr = Ax + #u10imm<<2(#u10imm << 2 = 0 至 4KB 范围,4B 步长) 0 1 #u10imm Ax[0-14] 1
*(Ax+#u7imm)++Ak *Ax[#u7imm]++Ak addr = Ax + #u7imm,Ax = Ax + Ak(#u7imm = 0 至 128) 1 0 0 #u7imm Ak[0-3] Ax[0-14] 1
*(A15-#n13imm) *A15-[#n13imm] addr = A15 - #n13imm(#n13imm = 1 至 8192) 1 0 1 #n13imm
*(Ax++#u8imm) *Ax++[#u8imm] addr = Ax, Ax = Ax + #u8imm(#u8imm = 0 至 255 范围) 1 1 0 0 #u8imm Ax[0-14] 1
*(Ax--#n8imm) *Ax--[#n8imm] addr = Ax, Ax = Ax - #n8imm(#n8imm = 1 至 256 范围) 1 1 0 1 #n8imm Ax[0-14] 1
*(Ax-=#n8imm) *Ax-=[#n8imm] Ax = Ax - #n8imm, addr = Ax(#n8imm = 1 至 256 范围) 1 1 1 0 #n8imm Ax[0-14] 1
*(Ax+Ak<<#u2imm) *Ax[Ak] addr = Ax + Ak << #u2imm(#u2imm = 0、1、2、3) 1 1 1 1 #u2imm 1 1 1 1 Ak[0-3] Ax[0-14] 1
*(Aj=(Ax+Ak<<#u2imm)) *Aj=Ax[Ak] addr = Ax + Ak << #u2imm, Aj = addr(#u2imm = 0、1、2、3) 1 1 1 1 #u2imm Aj[0-14] Ak[0-3] Ax[0-14] 1
Ax[0-14] 寻址字段可支持 A15 寄存器,但这是栈指针 (SP) 寄存器,对于某些寻址模式,该操作对 SP 无效,因此不能使用寻址模式。
数据移动操作有两个 ADDR1 字段,所有其他操作只有一个 ADDR1 字段。除数据移动操作外,ADDR1 字段位于指令操作码的 [31:16] 位。

以下是可以使用 ADDR1 字段的指令:

ADD.32、ADD.S16、ADD.S8、AND.16、AND.8、AND.U16、AND.U8、ANDOR.B0、ANDOR.W0、LD.32、LD.64、LD.B0、LD.B1、LD.B2、LD.B3、LD.S16、LD.S8、LD.U16、LD.U8、LD.W0、LD.W1、MV.16、MV.32、MV.64、MV.8、MV.U16、MV.U8、OR.16、OR.8、RET{D}、S16TOF、ST.16、ST.32、ST.64、ST.8、ST.B0、ST.B1、ST.B2、ST.B3、ST.W0、ST.W1、SUB.32、SUB.S16、SUB.S8、SUBR.32、SUBR.S16、SUBR.S8、U16TOF、XOR.16、XOR.8

示例:

; Load the 32-bit value in ADDR1 into Mx, using a base address + offset 
; (#u7imm) and then post increment by Ak (Ak is number of bytes to increment)
; NOTE: make sure 32-bit alignment of base address (Ax) and offset
LD.32 Mx,ADDR1              ; field
LD.32 Mx,*(Ax+#u7imm)++Ak   ; addressing mode
LD.32 M1,*(A14+#100)++A2    ; actual assembly code

; OR #x16 with the address pointed to by ADDR1, and store the result 
; into the location pointed to by ADDR1. Then post decrement the Ax register
; by the #n8imm value
; NOTE: make sure 16-bit alignment of base address (Ax) and offset
OR.16 ADDR1,#x16            ; field
OR.16 *Ax--[#n8imm],#x16    ; addressing mode
OR.16 *A3--[#70],#50110     ; actual assembly code