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:TMS570LC4357 EMIF 数据中止

Guru**** 2478495 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/682786/tms570lc4357-tms570lc4357-emif-data-abort

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

大家好、

我的 emifGetConfigValue 函数有问题。 我每隔100ms 在我的软件中读取 EMIF 配置寄存器(否则为情况)。 100ms 的激活通过中断来实现。
软件工作正常、但在保持(1到4小时)后、出现数据中止。

在数据中止情况下、我读出以下信息:

LR 寄存器(堆栈指针)
seteDataFaultAddress =_sl_get_DataFault_Address ();
seteDataFaultStatus =_sl_get_DataFault_Status ();

堆栈指针和故障地址都显示在 EMIF 寄存器中的一个(红色标记)。

void emifGetConfigValue (EMIF_CONFIG_REG_t * CONFIG_REG、CONFIG_value_type_t 类型)

   if (type == InitialValue)
   {
       CONFIG_REG->CONFIG_AWCC   = EMIF_AWCC_CONFIGVALUE;
       CONFIG_REG->CONFIG_SDCR   = EMIF_SDCR_CONFIGVALUE;
       CONFIG_REG->CONFIG_SDRCR  = EMIF_SDRCR_CONFIGVALUE;
       CONFIG_REG->CONFIG_CE2CFG = EMIF_CE2CFG_CONFIGVALUE;
       CONFIG_REG->CONFIG_CE3CFG = EMIF_CE3CFG_CONFIGVALUE;
       CONFIG_REG->CONFIG_CE4CFG = EMIF_CE4CFG_CONFIGVALUE;
       CONFIG_REG->CONFIG_CE5CFG = EMIF_CE5CFG_CONFIGVALUE;
       CONFIG_REG->CONFIG_SDTIMR = EMIF_SDTIMR_CONFIGVALUE;
       CONFIG_REG->CONFIG_SDSRETR = EMIF_SDSRETR_CONFIGVALUE;
       CONFIG_REG->CONFIG_INTMSK = EMIF_INTMSK_CONFIGVALUE;
       CONFIG_REG->CONFIG_PMCR   = EMIF_PMCR_CONFIGVALUE;
   }
   其他
   {
   /*SAFETYMCUSW 134 S MR:12.2. "LDRA 工具问题"*/
       CONFIG_REG->CONFIG_AWCC    = emifREG->AWCC;
       CONFIG_REG->CONFIG_SDCR    = emifREG->SDCR;
       CONFIG_REG->CONFIG_SDRCR   = emifREG->SDRCR;
       CONFIG_REG->CONFIG_CE2CFG  = emifREG->CE2CFG;
       CONFIG_REG->CONFIG_CE3CFG  = emifREG->CE3CFG;
       CONFIG_REG->CONFIG_CE4CFG  = emifREG->CE4CFG;
       CONFIG_REG->CONFIG_CE5CFG  = emifREG->CE5CFG;
       CONFIG_REG->CONFIG_SDTIMR  = emifREG->SDTIMR;
       CONFIG_REG->CONFIG_SDSRETR = emifREG->SDSRETR;
       CONFIG_REG->CONFIG_INTMSK  = emifREG->INTMSK;
       CONFIG_REG->CONFIG_PMCR    = emifREG->PMCR;
   }

我的 EMIF 时钟频率为10MHz、我使用 HalCoGen 的默认设置、但我实现了一个100的 MAX_EXT_WAIT。

你有什么想法吗?

此致
Lars

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

    如果应从受保护或有故障的存储器位置读取或写入数据、则处理器会接受数据中止。 这可能是因为:

    •未实现存储器位置
    •存储器位置在特权模式下(处理器处于用户模式时)为只读或写
    •存储器位置由 MPU 进行读取或写入保护
    •如果 ECC 检查逻辑在数据中检测到错误、则数据中止可以是精确的或不精确的
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    在运行系统1小时、2小时、3小时或更长时间后检测到数据中止。 如果系统正在运行、我们不会更改内存设置。 内存设置在 hL_startup.c 文件中完成一次。

    如果我获得了数据中止、我将获得以下信息:
    数据故障地址:0xFCFFE8xxh,这意味着对 EMIF 寄存器之一的访问被破坏。 我还有堆栈指针(LR 寄存器),此指针显示在以下代码行中:

    void emifGetConfigValue (EMIF_CONFIG_REG_t * CONFIG_REG、CONFIG_value_type_t 类型)

    if (type == InitialValue)

    CONFIG_REG->CONFIG_AWCC = EMIF_AWCC_CONFIGVALUE;
    CONFIG_REG->CONFIG_SDCR = EMIF_SDCR_CONFIGVALUE;
    CONFIG_REG->CONFIG_SDRCR = EMIF_SDRCR_CONFIGVALUE;
    CONFIG_REG->CONFIG_CE2CFG = EMIF_CE2CFG_CONFIGVALUE;
    CONFIG_REG->CONFIG_CE3CFG = EMIF_CE3CFG_CONFIGVALUE;
    CONFIG_REG->CONFIG_CE4CFG = EMIF_CE4CFG_CONFIGVALUE;
    CONFIG_REG->CONFIG_CE5CFG = EMIF_CE5CFG_CONFIGVALUE;
    CONFIG_REG->CONFIG_SDTIMR = EMIF_SDTIMR_CONFIGVALUE;
    CONFIG_REG->CONFIG_SDSRETR = EMIF_SDSRETR_CONFIGVALUE;
    CONFIG_REG->CONFIG_INTMSK = EMIF_INTMSK_CONFIGVALUE;
    CONFIG_REG->CONFIG_PMCR = EMIF_PMCR_CONFIGVALUE;

    其他

    /*SAFETYMCUSW 134 S MR:12.2. "LDRA 工具问题"*/
    CONFIG_REG->CONFIG_AWCC = emifREG->AWCC;
    CONFIG_REG->CONFIG_SDCR = emifREG->SDCR;
    CONFIG_REG->CONFIG_SDRCR = emifREG->SDRCR;
    CONFIG_REG->CONFIG_CE2CFG = emifREG->CE2CFG; <--堆栈指针具有该寄存器的地址
    CONFIG_REG->CONFIG_CE3CFG = emifREG->CE3CFG;
    CONFIG_REG->CONFIG_CE4CFG = emifREG->CE4CFG;
    CONFIG_REG->CONFIG_CE5CFG = emifREG->CE5CFG;
    CONFIG_REG->CONFIG_SDTIMR = emifREG->SDTIMR;
    CONFIG_REG->CONFIG_SDSRETR = emifREG->SDSRETR;
    CONFIG_REG->CONFIG_INTMSK = emifREG->INTMSK;
    CONFIG_REG->CONFIG_PMCR = emifREG->PMCR;



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

    数据中止可以是精确中止或不精确中止。 精确中止是同步中止、保证在生成中止存储器访问的指令上执行中止。 R14_abt 可被用于确定生成中止的指令。 模糊中止是异步中止、在生成中止存储器访问的指令的后面的指令上执行中止。 这意味着 r14_abt 中的地址不是生成中止的指令。

    DFSR (CP15寄存器)具有中止类型以及是在读取还是写入时发生。