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修订历史记录

对齐

所有数据访问都与最近的字大小对齐。这由正在访问的存储器或外设强制执行。

这意味着所有数据访问都需要执行以下操作:

  • 基指针地址必须与数据字宽度对齐。
  • 任何偏移或递增/递减大小都必须是数据大小的倍数。
  • 最终地址(应用任何偏移或递增/递减的基指针)必须与数据字宽度对齐。
警告: 编译器会根据字大小自动进行适当的偏移索引编制和缩放。但是,如果从存储器位置加载基指针,编译器会假定内容正确对齐。如果内容未对齐,并且生成的特定字大小地址未对齐,则会生成 CPU 寻址故障。

有关基地址的示例:基指针地址必须与数据字宽度对齐。因此,如果使用诸如“LD.64”的 64 位(8 字节)数据指令,基址必须与 64 位字边界对齐。因此,二进制地址的最后三位数字必须为 0,因为这意味着该值可以被 8 整除。因此“LD.32 D2,*(0:#0xF8)”可以有效(因为在二进制中,这是 0b1111 1000),但“LD.32 D2,*(0:#0xF9)”不能有效(因为在二进制中,这是 0b1111 1001)。

有关偏移的示例:使用的任何偏移值(以字节为单位)都必须是指令数据大小的倍数。因此,如果使用诸如“LD.32”的 32 位(4 字节)数据指令,则偏移必须是 4 的倍数。因此,“LD.32 D2,*(A2 + #4)”可能有效,但“LD.32 D2,*(A2 + #5)”可能无效。这些指令还要求基指针对齐。

下面提供了一些有关正确和错误对齐的其他示例:

MV.32       A2,#ArrayX          ; Assume that the array is aligned 
                                ; to a 64-bit word boundary for this example.
; CORRECT Examples:
; Pointer Addressing With #Immediate Offset Examples
LD.B0       D0,*(A2+#9)     ; Byte offset can be any value
LD.U16      D1,*(A2+#10)    ; 16-bit offset can only be a multiple of 2 bytes
LD.32       D2,*(A2+#4)     ; 32-bit offset can only be a multiple of 4 bytes
LD.64       XD4,*(A2+#16)   ; 64-bit offset can only be a multiple of 8 bytes
; Scaled values (left shift or multiplied values)
LD.U16      D1,*(A2+#1<<1)  ; 16-bit offset can only be a multiple of 2 bytes
LD.U16      D1,*(A2+#3<<1)  ; 16-bit offset can only be a multiple of 2 bytes
LD.64       XD4,*(A2+#2<<3) ; 64-bit offset can only be a multiple of 8 bytes
; Pointer Addressing with #Immediate Increment/Decrement Examples
LD.B0       D0,*(A2++#9)    ; Byte offset can be any value
LD.U16      D1,*(A2++#10)   ; 16-bit offset can only be a multiple of 2 bytes
LD.32       D2,*(A2++#4)    ; 32-bit offset can only be a multiple of 4 bytes
LD.64       XD4,*(A2++#24)  ; 64-bit offset can only be a multiple of 8 bytes

; INCORRECT Examples:
LD.U16      D1,*(A2++#5)    ; INCORRECT: offset can only be a multiple of 2
LD.U16      D1,*(A2+#3<<0)  ; INCORRECT: offset can only be a multiple of 2
LD.64       XD4,*(A2+#10)   ; INCORRECT: offset can only be a multiple of 8
; If ArrayX is not aligned to a 32-bit boundary and LD.32 is called,
; then a CPU addressing fault is generated.
注: ADDR2 操作码字段模式不指定增量步长(“#size”)或缩放量(“#scale”)。这由 CPU 硬件根据指令所访问的字大小自动执行。
  • 字节访问按 #size=1 递增/递减,或按 #scale=0 缩放(乘以 1)
  • 16 位访问按 #size=2 递增/递减,或按 #scale=1 缩放(乘以 2)
  • 32 位访问按 #size=4 递增/递减,或按 #scale=2 缩放(乘以 4)
  • 64 位访问按 #size=8 递增/递减,或按 #scale=3 缩放(乘以 8)