Other Parts Discussed in Thread: HALCOGEN, TMS570LS3137
Tool/software:
Hi,
I’m working on the TMS570LS1224 LaunchPad and trying to implement MibSPI3 transmit using DMA (TX-only). I’ve successfully implemented MibSPI3 without DMA, but DMA TX is not working despite trying several approaches. There is no GUI support for MibSPI DMA in HALCoGen (v04.07.01), so I’ve manually configured DMA via code. It will be very helpful if you support with DMA RX also. i will attach the screen shoot of logic analyzer also for reference.
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); }
Without DMA :
With DMA:
Setup:
MibSPI3 is initialized using HALCoGen
DMA is manually initialized in code (see below)
I'm using DMA Channel 0 and DMA Request Line 14 for MibSPI3_TX
Issue:
DMA transfer never seems to take place.
Data is not moved to mibspiRAM3->tx[], and MOSI pin shows no activity.
Without DMA (mibspiSetData()), the transfer works fine.