Thread 中讨论的其他器件: HALCOGEN、 TMS570LS3137
工具/软件:
您好、
我正在处理 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:

设置:
使用 HALCoGen 初始化 MibSPI3
DMA 在代码中手动初始化(见下文)
我将为 MibSPI3_TX 使用 DMA 通道 0 和 DMA 请求行 14
问题:
DMA 传输似乎从未发生。
数据未移动到 mibspiRAM3->TX[]、MOSI 引脚显示没有活动。
如果没有 dma (mibspiSetData())、则传输工作正常。




