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: DMA Not Working on TMS570LC4357: No Transfer, No Errors, All Software Steps Correct

Part Number: TMS570LC4357
Other Parts Discussed in Thread: HALCOGEN

Tool/software:

Hello TI Support,

I am using a TMS570LC4357 board (recently purchased from DigiKey) and am unable to get DMA working at all—not even for a simple memory-to-memory transfer. I have followed all TI documentation and E2E advice, and have verified the following:


What I have done:

  • .dmaRAM is mapped to 0xFFF80000 in my linker file:
text
  • DMARAM  (RW) : origin=0xFFF80000 length=0x00000800
    ...
    .dmaRAM  : {} > DMARAM
  • I call systemInit() at the start of main(), so periphInit() is called and all peripherals are powered up.
  • I use the standard TI DMA driver (HL_sys_dma.c from HALCoGen).
  • My test code is a minimal memory-to-memory DMA transfer (see below).
  • Both src_data and dst_data are in RAM (addresses like 0x08001540).
  • DMA registers are accessible in the debugger.
  • dmaREG->GCTRL is 0x00010300 after dmaEnable().
  • No errors are reported in dmaREG->DMASTAT or dmaREG->BERFLAG.
  • Polling UART works perfectly—so the board is not dead.
  • I have tried both DMA_CH0 and DMA_CH1, and both software and hardware triggers.
  • I have tried a full power cycle, different CCS versions, and a clean project.

What I observe:

  • After calling dmaSetChEnable(DMA_CHx, DMA_SW);, the SWChnEnaSet register does not “stick” (always reads as 0, which I understand is normal for a trigger register).
  • DMA transfer never startsdmaGetInterruptStatus(DMA_CHx, BTC) is always false, and dst_data remains all zeros.
  • No errors are reported in any DMA error register.
  • Manually writing to SWChnEnaSet in the debugger has no effect.
  • The same issue occurs for all DMA-based operations (UART, memory-to-memory, etc.).

Minimal test code:

C
#include "HL_sys_common.h"
#include "HL_sys_dma.h"
#include "HL_system.h"

#define SIZE 4

uint8_t src_data[SIZE] = {1, 2, 3, 4};
uint8_t dst_data[SIZE] = {0};
g_dmaCTRL g_dmaCTRLPKT;

int main(void)
{
    systemInit();
    dmaEnable();

    g_dmaCTRLPKT.SADD      = (uint32_t)src_data;
    g_dmaCTRLPKT.DADD      = (uint32_t)dst_data;
    g_dmaCTRLPKT.CHCTRL    = 0;
    g_dmaCTRLPKT.FRCNT     = SIZE;
    g_dmaCTRLPKT.ELCNT     = 1;
    g_dmaCTRLPKT.ELDOFFSET = 0;
    g_dmaCTRLPKT.ELSOFFSET = 0;
    g_dmaCTRLPKT.FRDOFFSET = 0;
    g_dmaCTRLPKT.FRSOFFSET = 0;
    g_dmaCTRLPKT.PORTASGN  = PORTA_READ_PORTB_WRITE;
    g_dmaCTRLPKT.RDSIZE    = ACCESS_8_BIT;
    g_dmaCTRLPKT.WRSIZE    = ACCESS_8_BIT;
    g_dmaCTRLPKT.TTYPE     = FRAME_TRANSFER;
    g_dmaCTRLPKT.ADDMODERD = ADDR_INC1;
    g_dmaCTRLPKT.ADDMODEWR = ADDR_INC1;
    g_dmaCTRLPKT.AUTOINIT  = AUTOINIT_OFF;

    dmaSetCtrlPacket(DMA_CH1, g_dmaCTRLPKT);
    dmaSetChEnable(DMA_CH1, DMA_SW); // Software trigger

    while (dmaGetInterruptStatus(DMA_CH1, BTC) != TRUE);

    while (1);
}

What I need help with:

  • Is there any known silicon, board, or toolchain issue that would prevent DMA from working on a new TMS570LC4357 board?
  • Is there any additional step required to enable DMA on this device?
  • Is there a way to further diagnose why the DMA controller is not accepting triggers or starting transfers?

Thank you for your help!
I am happy to provide any additional information, screenshots, or project files as needed.


Best regards,

Nirmal Thyvalappil Muraleedharan