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

分配和取消分配栈空间

可按以下示例所示分配和取消分配栈空间:

分配 32 个字节(必须是 8 字节的倍数):

ADD.U16    A15,A15,#32    ; SP = SP + 32

取消分配 32 个字节(必须是 8 字节的倍数):

SUB.U16    A15,A15,#32    ; SP = SP - 32

编译器自动分配和取消分配栈空间,并强制对齐到 64 位字边界。

如果需要且栈大小小于 256 字节,还可以使用 *(A15++#u8imm) 寻址模式推送栈上的某些内容,并且还可以分配额外的栈空间。例如:

ST.64   *(A15++#32),XD0     ; Push 64-bit XD0 value on stack, then allocate 
                            ; 32 bytes on stack (SP = SP + 32)

同样,可以使用 *(A15 -= #n8imm) 寻址模式取消栈分配并从栈中弹出内容。例如:

LD.64   XD0,*(A15-=#32)     ; De-allocate 32-bytes from stack (SP = SP - 32), 
                            ; and pop 64-bit value from stack into XD0

如果需要访问栈上距离大于 8192 字节的值,则需要使用寻址指针来访问该值。例如:要访问距离栈顶 8216 字节的 32 位值,请执行以下操作:

SUB.U16     A0,A15,#8216    ; A0 = SP - #8216
LD.32	D0,*A0          ; D0 = contents of stack at SP-8216

通常,对于大型栈,编译器会分配其中一个 Ax 寻址模式寄存器作为帧指针,并可以使用可用的指针寻址模式来索引到栈中。

上述方法还可用于在需要频繁访问栈上的局部变量或需要对数据使用指针递增/递减运算的情况下初始化栈内的指针。

请注意,无论使用何种寻址模式,任何栈存储器访问都必须与访问的字大小对齐,并且任何非对齐访问都会产生故障。编译器负责对栈空间上的任何数据进行对齐。

注:
  1. 如果使用指针来访问栈内容,则假设该值与正确的字访问大小适当对齐。 如果该值损坏,则可能会导致访问故障。
  2. CALL 操作会自动将 RPC(返回 PC)值压入栈并将栈指针递增 8,因此始终保持栈对齐。32 位 RPC 存储在 64 位字的低 32 位中。同样,RET 操作会从栈中弹出 RPC 值,并将 SP 递减 8 以保持栈对齐。如果在执行 CALL 或 RET 操作时栈指针未对齐,则会生成故障。