ZHCAE28 May   2024 TMS320F2800132 , TMS320F2800133 , TMS320F2800135 , TMS320F2800137 , TMS320F2800152-Q1 , TMS320F2800153-Q1 , TMS320F2800154-Q1 , TMS320F2800155 , TMS320F2800155-Q1 , TMS320F2800156-Q1 , TMS320F2800157 , TMS320F2800157-Q1 , TMS320F28P650DH , TMS320F28P650DK , TMS320F28P650SH , TMS320F28P650SK , TMS320F28P659DH-Q1 , TMS320F28P659DK-Q1 , TMS320F28P659SH-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1引言
  5. 2电器中的 C2000™ MCU 器件概述
  6. 3IEC/UL 60730-1/60335-1 标准简介
  7. 4C2000™ 提供的 UL/IEC 60730-1/60335-1 诊断库
    1. 4.1 栈溢出检测
    2. 4.2 看门狗
    3. 4.3 CPU 和 FPU 寄存器
    4. 4.4 程序计数器 (PC)
    5. 4.5 时钟
    6. 4.6 RAM
    7. 4.7 闪存
    8. 4.8 ADC
    9. 4.9 周期时间和存储器用量
  8. 5参考文献

CPU 和 FPU 寄存器

此函数测试 CPU 内核寄存器和 FPU 寄存器是否存在卡滞位。接受测试的 CPU 寄存器包括:ACC、P、XAR0 至 XAR7、XT、SP、IFR、IER、DBGIER、ST0、ST1(不包括 IDLESTAT 和 LOOP 位)和 DP。接受测试的 FPU 寄存器包括:R0 至 R7、RND32、TF、ZI、NI、ZF、STF 寄存器 NF 位、R0 至 R7 影子寄存器和 STF。在此测试中会保存和恢复 ST0、ST1、DP、IER、IFR、DBGIER、入口保存 XAR 寄存器、STF 和入口保存 RnH 寄存器(由编译器调用约定所定义)的值。在调用 CPU 和 FPU 测试 API 前禁用中断。

CPU 和 FPU 的自检非常相似。首先,根据机构的要求,将测试模式设置为一个特定的值,例如 0XAAAA。在测试期间,CPU 和 FPU 寄存器数据需要存储在栈中,然后会将测试模式写入 CPU 和 FPU 寄存器。读取这些寄存器的数据后,会验证数据是否与预设测试模式匹配。最后,CPU 和 FPU 寄存器数据从栈中恢复,并完成 CPU 或 FPU 的寄存器自检。test_application 工程包含适用于 CPU 和 FPU 自检的相应案例,即 STA_CPU_REG 和 STA_FPU_REG,其中的测试函数为 STL_CPU_REG_testCPURegisters(bool injectError) 和 STL_CPU_REG_testFPURegisters(bool injectError)。两个函数都由汇编代码组成,源代码位于 f280013x\source\stl_cpu_reg.asm图 4-4 显示了 CPU 和 FPU 寄存器测试结构。

 CPU、FPU 寄存器测试结构图 4-4 CPU、FPU 寄存器测试结构

请注意,设置 INTM 不会阻止中断传播到 IFR 寄存器,因此虽然该函数会保存和恢复 IFR,但在此测试期间到达 IFR 的中断会通过恢复操作清除,否则可能导致此测试失败。如果需要在运行时期间使用此测试,则可以修改 stl_cpu_reg.asm 中的 STL_CPU_REG_testCPURegisters() 以删除 IFR 测试(以及相关的保存和恢复)。或者,在 PIE 级 (PIEIER) 禁用所有中断,在非 PIE 中断的情况下(例如 CPU 计时器 1 和 2)则在外设级禁用中断,并在 STL_CPU_REG_checkCPURegisters() 完成后恢复中断。也可以删除 IFR 测试部分,这对于某些认证机构也是可以接受的。