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.

[参考译文] TMS570LS1224:TMS570LS1224:使用 DMA 的 MibSPI3 TX 不工作(需要紧急帮助)

Guru**** 2524550 points
Other Parts Discussed in Thread: TMS570LS1224, HALCOGEN, TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1541793/tms570ls1224-tms570ls1224-mibspi3-tx-using-dma-not-working-urgent-help-needed

器件型号:TMS570LS1224
Thread 中讨论的其他器件: HALCOGENTMS570LS3137

工具/软件:

您好、

我正在处理 TMS570LS1224 LaunchPad 并尝试使用 DMA 实现 MibSPI3 发送(仅 TX)。 我在没有 DMA 的情况下成功实现了 MibSPI3、但 DMA TX 尽管尝试了多种方法、但仍然无法正常工作。 HALCoGen (v04.07.01) 中没有 GUI 支持 MibSPI DMA、因此我已经通过代码手动配置了 DMA。 如果您还支持 DMA RX、它将非常有用。 我还会附加逻辑分析仪的屏幕截图以供参考。

uint16_t tx_data[10] = {0xAA01, 0xAA02, 0xAA03, 0xAA04, 0xAA05,
                        0xAA06, 0xAA07, 0xAA08, 0xAA09, 0xAA0A};

g_dmaCTRL g_dmaCTRLPKT_TX;

void dmaSetupForMibspi3_Tx()
{
    g_dmaCTRLPKT_TX.SADD      = (uint32_t)tx_data;
    g_dmaCTRLPKT_TX.DADD      = (uint32_t)&(mibspiRAM3->tx[0].data);
    g_dmaCTRLPKT_TX.CHCTRL    = 0;
    g_dmaCTRLPKT_TX.FRCNT     = 1;
    g_dmaCTRLPKT_TX.ELCNT     = 10;
    g_dmaCTRLPKT_TX.ELDOFFSET = 2;
    g_dmaCTRLPKT_TX.ELSOFFSET = 0;
    g_dmaCTRLPKT_TX.FRDOFFSET = 0;
    g_dmaCTRLPKT_TX.PORTASGN  = 0U;
    g_dmaCTRLPKT_TX.RDSIZE    = ACCESS_16_BIT;
    g_dmaCTRLPKT_TX.WRSIZE    = ACCESS_16_BIT;
    g_dmaCTRLPKT_TX.TTYPE     = BLOCK_TRANSFER;  // tried FRAME_TRANSFER too
    g_dmaCTRLPKT_TX.ADDMODERD = ADDR_INC1;
    g_dmaCTRLPKT_TX.ADDMODEWR = ADDR_FIXED;
    g_dmaCTRLPKT_TX.AUTOINIT  = AUTOINIT_OFF;

    dmaSetCtrlPacket(DMA_CH0, g_dmaCTRLPKT_TX);
}

int main(void)
{
    mibspiInit();
    gioInit();

    dmaSetupForMibspi3_Tx();
    dmaEnable();
    dmaReqAssign(DMA_CH0, 14); // MibSPI3_TX = DMA_REQ14
    dmaSetChEnable(DMA_CH0, DMA_SW);

//    mibspiSetData(mibspiREG3, 0, tx_data);  // for trying with out DMA 

    mibspiTransfer(mibspiREG3, 0); 

    while(!(mibspiIsTransferComplete(mibspiREG3, 0)));

    while(1);
}

不使用 DMA:

使用 DMA:

White check mark 设置:

使用 HALCoGen 初始化 MibSPI3

DMA 在代码中手动初始化(见下文)

我将为 MibSPI3_TX 使用 DMA 通道 0 和 DMA 请求行 14

Mag问题:

DMA 传输似乎从未发生。

数据未移动到 mibspiRAM3->TX[]、MOSI 引脚显示没有活动。

如果没有 dma (mibspiSetData())、则传输工作正常。

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

    尊敬的 Adarsh:

    感谢您与我们联系!

    首先、我建议您参阅以下有关 MibSPI DMA 的视频教程:

    (+)【常见问题解答】TMS570LC4357:适用于 Hercules 控制器的示例和演示(例如 TMS570x、RM57x 和 RM46x 等)-基于 Arm 的微控制器论坛 — 基于 Arm 的微控制器 — TI E2E 支持论坛

    此外、HALCoGen 中还有一个 MibSPI DMA 示例:

    如果您提到这两者、希望这样可以解决您的问题、如果没有、我将进一步调试您的问题。

    --
    此致、
    Jagadish。

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

    尊敬的 Jagadish:

    感谢您的答复。

    我已经浏览了与 MibSPI DMA 相关的所有论坛帖子、但我无法识别我的代码有什么问题。

    我正在使用 TMS570LS1224 、其中 MibSPI3 TX 映射到 DMAREQ14 从 RX 到 。 目前、我只尝试使用 DMA 实现 TX。

    我已经尝试了所有可能的组合和配置、但很遗憾、我无法获得所需的输出。 正如我之前上传的屏幕截图所示,MibSPI3 传输完美无 DMA。 但是、当我尝试为 TX 使用 DMA 时、它不起作用。

    您能帮助我确定出可能出现的问题吗?

    此致、
    Adarsh G N

    #define DMA_CHANNEL_TX     DMA_CH0
    #define MIBSPI3_TX_REQLINE 14
    #define TG0_LENGTH         10
    
    uint16_t tx_data[TG0_LENGTH] = {0xAA01, 0xAA02, 0xAA03, 0xAA04, 0xAA05,0xAA06, 0xAA07, 0xAA08, 0xAA09, 0xAA0A};
    
    g_dmaCTRL g_dmaCTRLPKT_TX;
    
    void dmaSetupForMibspi3_Tx()
    {
        g_dmaCTRLPKT_TX.SADD      = (uint32_t)tx_data;
        g_dmaCTRLPKT_TX.DADD      = (uint32_t)&(mibspiRAM3->tx[0].data);
        g_dmaCTRLPKT_TX.CHCTRL    = 0;
        g_dmaCTRLPKT_TX.FRCNT     = 1;
        g_dmaCTRLPKT_TX.ELCNT     = 10;
        g_dmaCTRLPKT_TX.ELDOFFSET = 2;                  // tried 4 and 0 
        g_dmaCTRLPKT_TX.ELSOFFSET = 0;
        g_dmaCTRLPKT_TX.FRDOFFSET = 0;
        g_dmaCTRLPKT_TX.PORTASGN  = 0U;
        g_dmaCTRLPKT_TX.RDSIZE    = ACCESS_16_BIT;
        g_dmaCTRLPKT_TX.WRSIZE    = ACCESS_16_BIT;
        g_dmaCTRLPKT_TX.TTYPE     = BLOCK_TRANSFER;  // tried FRAME_TRANSFER too
        g_dmaCTRLPKT_TX.ADDMODERD = ADDR_INC1;
        g_dmaCTRLPKT_TX.ADDMODEWR = ADDR_FIXED;
        g_dmaCTRLPKT_TX.AUTOINIT  = AUTOINIT_OFF;   //tried AUTOINIT_On too
    
        dmaSetCtrlPacket(DMA_CH0, g_dmaCTRLPKT_TX);
    }
    
    void mibspi3_DMA_configure(void)
    {
        uint8 bufid  = TG0_LENGTH - 1;
    
        mibspiREG3->DMACTRL[0] = (uint32)0;                         // Clear before setting
        mibspiREG3->DMACTRL[0] |= (uint32)(1 << 31);                // ONESHOT = 1
        mibspiREG3->DMACTRL[0] |= (uint32)(14 << 16);               // TXDMA_MAP = 14 (MibSPI3 TX)
        mibspiREG3->DMACTRL[0] |= (uint32)(1 << 14);                // TXDMAENA = 1
        mibspiREG3->DMACTRL[0] |= (uint32)(1 << 13);                // NOBRK = 1
        mibspiREG3->DMACTRL[0] |= (uint32)(bufid << 9);             // ICOUNT = TG0_LENGTH - 1
    }
    
    int main(void)
    {
        mibspiInit();
        gioInit();
    	dmaReqAssign(DMA_CH0, MIBSPI3_TX_REQLINE); // MibSPI3_TX = DMA_REQ14
    	
        dmaSetupForMibspi3_Tx();
    
        dmaEnable();
        
        dmaSetChEnable(DMA_CH0, DMA_SW);
    	
    	mibspi3_DMA_configure();
    
    //    mibspiSetData(mibspiREG3, 0, tx_data);  // for trying with out DMA 
    
        mibspiTransfer(mibspiREG3, 0); 
    
        while(!(mibspiIsTransferComplete(mibspiREG3, 0)));
    
        while(1);
    	// I will be verifying the data in Logic analyzer so i am not using mibspiGetData();
    }

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

    尊敬的 Adarsh:

    我没有完全相同的电路板、因此我在 TMS570LS3137 板上为 mibSPI1 创建了与您相同的示例。

    下面是我的工作项目:

    e2e.ti.com/.../MibSPI_5F00_TX_5F00_DMA_5F00_LS3137.zip

    将此作为参考工程、并对工程进行相应的修改。

    根据我的观察,我怀疑有两个主要的事情可能导致你的问题

    1.我在您的代码上没有看到端口分配到 4:

    2.在您的代码上、您正在使用 mibSPI TX 的请求行 14、但似乎收到了 TRM 的请求:

    因此、将其更改为请求第 15 行、然后尝试:

    因此、请尝试进行上述修改、并告知我结果。

    --

    此致、
    Jagadish。

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

    尊敬的 Jagadish:

    感谢您发送您的项目。

    这对我很有帮助。  

    此致、
    阿达尔什 G N .