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.

[参考译文] TMS570LS3134:DMA 奇偶校验连续 ESM 错误

Guru**** 2378650 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/1520704/tms570ls3134-dma-parity-continuous-esm-error

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

工具/软件:

您好:

校验正在使用的 DMA 和 DMA 奇偶校验。

我执行 MINITGCR = 0xA 以启用存储器硬件初始化、并  设置 MSINENA = 1 以初始化 DMA RAM。

当我通过设置 DMAPCR 和 DMA 接收数据在启用 DMA 奇偶校验的情况下启动代码时、会出现连续 ESM 组 1 通道 3 DMA 奇偶校验错误。

您能帮我解决这个问题吗?

谢谢你。

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

    尊敬的 Samet varan:

    是否可以共享您的代码片段以便在我结束时进行一次快速验证?

    --
    此致、
    Jagadish。

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

    尊敬的  Jagadish:

    感谢您的答复。 我分享了下面的代码片段

     

    void _c_int00 (void)

    _coreInitRegisters“_();
    _coreInitStackPointer_();



    /*
    *在 systemInit 函数内有
    * setupPLL、periphInit、setupFlash 函数等
    */
    systemInit();
    memoryInit (0x1U);//在 systemInit 和 memoryInit 函数之间、没有任何其他函数



    }

    void memoryInit (Uint32 ram)

    systemREG1->MINITGCR = 0xAU;
    systemREG1->MSINENA = ram;
    while ((systemREG1->MSTCGSTAT & 0x00000100U)!= 0x00000100U)

    }/*等待*/

    systemREG1->MINITGCR = 0x5U;
    }

    void main (void)

    muxInit();
    hetInit();
    sciInit();
    rtiInit();
    gioInit();
    spiInit();
    dmaInit();

    dmaREG->DMAPCR = 0x0000000A;//启用 DMA 奇偶校验 — 此处添加了该奇偶校验以进行测试

    while (1)




    }
    }

    void DmaInit()

    SCI->SETINT |= SCI_SET_RX_DMA |SCI_SET_RX_DMA_ALL;
    g_dmaCTRL g_dmaCTRLPKT1;

    DmaReqAssign (DMA_CH0、DMA_SCI1_RX);

    /*为通道 0*/配置控制包

    G_dmaCTRLPKT1.Sadd =(UINT32)((u8*)&(SCI->RD)+3);/*源地址*/
    G_dmaCTRLPKT1.DADD =(Uint32)&DMA_rx_Buffer[4];/*目标地址*/
    G_dmaCTRLPKT1.CHCTRL = 0;/*通道控制*/
    G_dmaCTRLPKT1.FRCNT = DMA_BUFFER_SIZE;/*帧计数*/
    G_dmaCTRLPKT1.ELCNT = 1;/*元素计数*/
    G_dmaCTRLPKT1.ELDOFFSET = 0;/*元素目标偏移*/
    G_dmaCTRLPKT1.ELSOFFSET = 0;/*元素目标偏移*/
    G_dmaCTRLPKT1.FRDOFFSET = 0;/*帧目标偏移*/
    G_dmaCTRLPKT1.FRSOFFSET = 0;/*帧目标偏移*/
    G_dmaCTRLPKT1.PORTASGn = 4;
    G_dmaCTRLPKT1.RDSIZE = ACCESS_8_BIT;/*读取大小*/
    G_dmaCTRLPKT1.WRSIZE = ACCESS_8_BIT;/*写入大小*/
    g_dmaCTRLPKT1.tType = FRAME_TRANSFER;/*传输类型*/
    G_dmaCTRLPKT1.ADDMODERD = ADDR_FIXED;/*地址模式读取*/
    G_dmaCTRLPKT1.ADDMODEWR = ADDR_INC1;/*地址模式写入*/
    G_dmaCTRLPKT1.AUTOINIT = AUTOINIT_ON;/* autoinit */

    DmaSetCtrlPacket (DMA_CH0、g_dmaCTRLPKT1);
    DmaSetChEnable (DMA_CH0、DMA_HW);
    dmaEnable();
    }

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

    尊敬的 Samet varan:

    您无需进行硬件存储器初始化即可启用 DMA 奇偶校验、

    实际上、内存硬件初始化将在复位后立即发生、如上图所示。 实际上、我们不应该在运行时进行此内存硬件初始化、因为这是一种破坏性的操作、它将擦除内核的整个上下文。

    因此、我的建议是您可以直接启用 DMA 奇偶校验、而无需在运行时进行任何硬件内存初始化。

    --
    此致、
    Jagadish。

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

    尊敬的 Jagadish:

    我不会在运行时初始化 RAM。 初始化序列位于“void _c_int00 (void)“函数中、该函数处于“startup"(“(启动(启动)状态、因此在运行时不会调用该序列。  

    对于存储器初始化、是的  、它在复位后立即发生、但我们应在初始化之前启用 DMA 奇偶校验。  

    在详细图中、显示了在初始化之前应启用奇偶校验、并且 Halcogen 生成与参考手册兼容的代码。

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

    尊敬的 Samet:

    您是否可以尝试下面主题中提到的方法:

    (+) RM44L920:DMA-Controlpacket 初始化后的 DMA-Parity 错误 — 基于 Arm 的微控制器论坛 — 基于 Arm 的微控制器 — TI E2E 支持论坛

    在启动期间对 DMA RAM 使用自动初始化方法之前启用 DMA 奇偶校验寄存器可以解决该问题。 ESM 停止报告奇偶校验错误、除非我应用相应的测试来测试诊断

    --
    此致、
    Jagadish。