This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS570LC4357:ESM 错误状态寄存器

Guru**** 2471610 points
Other Parts Discussed in Thread: HALCOGEN

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1023577/tms570lc4357-esm-error-status-registers

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

大家好、
我有一个与 ESM 寄存器相关的问题。
如 TRM 中所述、ESM 组-1具有3个错误状态寄存器 ESMSR1 (通道0-31)、ESMSR4 (通道32-63)和 ESMSR7 (通道64-95)。

很明显、esmreg SR1[3U]、SR4[3U]和 SR7[3U]代表组1。 但是、阵列大小3在这里表示什么?

请对此作出澄清。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    HALCoGen 在 HL_reg_esm.h 中创建的 esmBASE-t 结构如下、其中注释包括 寄存器偏移量到 ESM 控制寄存器中:

        uint32 SR1[3U];           /* 0x0018, 0x001C, 0x0020 */
        uint32 SR4[3U];           /* 0x0058, 0x005C, 0x0060 */
        uint32 SR7[3U];           /* 0x0098, 0x009C, 0x00A0 */
    

    TMS570LC43x  16/32 RISC 闪存微控制器技术参考手册(修订版 A) 具有:

    因此 、SR1的数组大小为3表示:

    • ESM 状态寄存器1 (组1通道[31:0])
    • ESM 状态寄存器2 (组2)
    • ESM 状态寄存器3 (组3)

    但是 、SR4和 SR7的数组大小为3看起来 很奇怪、因为 SR4[1]、SR1[2]、SR7[1]和  SR7[2]指的是未定义的 ESM 寄存器。

    在 HALCoGen 创建的 HL_ESM.c 中、有以下函数采用组参数并使用其索引到 SR7[]:

    void esmClearStatusUpper(uint32 group, uint64 channels)
    {
    /* USER CODE BEGIN (33) */
    /* USER CODE END */
    
        esmREG->SR7[group] = (uint32)(channels & 0xFFFFFFFFU);
    
    /* USER CODE BEGIN (34) */
    /* USER CODE END */
    }
    
    uint64 esmGetStatusUpper(uint32 group, uint64 channels)
    {
        uint64 status;
        uint32 ESM_ESTATUS7 = esmREG->SR7[group];
    
    
    /* USER CODE BEGIN (41) */
    /* USER CODE END */
        /*SAFETYMCUSW 51 S MR:12.3 <APPROVED> "Needs shifting for 64-bit value" */
         status = ((uint64)ESM_ESTATUS7) & channels;
    
    /* USER CODE BEGIN (42) */
    /* USER CODE END */
    
        return status;
    }
    

     esmClearStatusUpper()和 esmGetStatusUpper()采用组参数看起来很混乱,因为唯一有效的值是零。