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.

MSP432P401R: External DMAE0 Trigger SPI

Part Number: MSP432P401R

Hi,

i am trying to get external DMA trigger to work with an external ADC (ADS131A02).

I am receiving the INT from ADS131A02 but DMA is not getting triggert. 

Is there anything wrong with my code:

#define SAMPLE_LENGTH 512
int32_t data_array1[SAMPLE_LENGTH];
int32_t data_array2[SAMPLE_LENGTH];
uint8_t data_array[4]={0x00,0x00,0x00,0x00};
volatile int switch_data = 0;

void ADS131A02_DMASetup(void)
{

    //Assigning DMA to SPI Channels
    DMA_enableModule();
    DMA_setControlBase(controlTable);


    DMA_assignChannel(DMA_CH0_EUSCIB0TX0);
    DMA_assignChannel(DMA_CH1_EUSCIB0RX0);
    DMA_assignChannel(DMA_CH6_EXTERNALPIN);

    DMA_disableChannelAttribute(DMA_CH6_EXTERNALPIN,UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |UDMA_ATTR_HIGH_PRIORITY |UDMA_ATTR_REQMASK);

    // Setup the TX transfer characteristics & buffers
    DMA_setChannelControl( DMA_CH6_EXTERNALPIN | UDMA_PRI_SELECT,UDMA_SIZE_32 | UDMA_SRC_INC_NONE | UDMA_DST_INC_32 | UDMA_ARB_1);
    DMA_setChannelTransfer(DMA_CH6_EXTERNALPIN | UDMA_PRI_SELECT,UDMA_MODE_BASIC, data_array,(void *) MAP_SPI_getTransmitBufferAddressForDMA(EUSCI_B0_BASE), 4);

    DMA_setChannelControl (DMA_CH0_EUSCIB0TX0 | UDMA_PRI_SELECT,UDMA_SIZE_32 | UDMA_SRC_INC_NONE | UDMA_DST_INC_32 | UDMA_ARB_1);
    DMA_setChannelTransfer(DMA_CH0_EUSCIB0TX0 | UDMA_PRI_SELECT,UDMA_MODE_BASIC, data_array,(void *) MAP_SPI_getTransmitBufferAddressForDMA(EUSCI_B0_BASE),3);

    DMA_setChannelControl (DMA_CH1_EUSCIB0RX0 | UDMA_PRI_SELECT,UDMA_SIZE_32 | UDMA_SRC_INC_NONE | UDMA_DST_INC_32 | UDMA_ARB_1);
    DMA_setChannelTransfer(DMA_CH1_EUSCIB0RX0 | UDMA_PRI_SELECT,UDMA_MODE_PINGPONG,(void *) MAP_SPI_getReceiveBufferAddressForDMA(EUSCI_B0_BASE),data_array1,SAMPLE_LENGTH);

    DMA_setChannelControl (DMA_CH1_EUSCIB0RX0 | UDMA_PRI_SELECT,UDMA_SIZE_32 | UDMA_SRC_INC_NONE | UDMA_DST_INC_32 | UDMA_ARB_1);
    DMA_setChannelTransfer(DMA_CH1_EUSCIB0RX0 | UDMA_PRI_SELECT,UDMA_MODE_PINGPONG,(void *) MAP_SPI_getReceiveBufferAddressForDMA(EUSCI_B0_BASE),data_array2,SAMPLE_LENGTH);

    DMA_assignInterrupt(DMA_INT1, 6);
    DMA_clearInterruptFlag(INT_DMA_INT1);
    DMA_clearInterruptFlag(6);

    Interrupt_enableInterrupt(DMA_INT1);
    Interrupt_enableMaster();
    DMA_enableChannel(6);
    DMA_enableChannel(0);
    DMA_enableChannel(1);
}

And here is my DMA INT:

void DMA_INT1_IRQHandler(void)
{
    DMA_clearInterruptFlag(6);
    /* Switch between primary and alternate bufferes with DMA's PingPong mode */
    if (DMA_getChannelAttribute(6) & UDMA_ATTR_ALTSELECT)
    {
        DMA_setChannelControl(UDMA_PRI_SELECT  | DMA_CH1_EUSCIB0RX0,UDMA_SIZE_32 | UDMA_SRC_INC_NONE | UDMA_DST_INC_32 | UDMA_ARB_1);
        DMA_setChannelTransfer(UDMA_PRI_SELECT | DMA_CH1_EUSCIB0RX0,UDMA_MODE_PINGPONG, (void*)MAP_SPI_getReceiveBufferAddressForDMA(EUSCI_B0_BASE),data_array1, SAMPLE_LENGTH);
        switch_data = 1;
    }
    else
    {
        DMA_setChannelControl(UDMA_ALT_SELECT | DMA_CH1_EUSCIB0RX0,UDMA_SIZE_32 | UDMA_SRC_INC_NONE | UDMA_DST_INC_32 | UDMA_ARB_1);
        DMA_setChannelTransfer(UDMA_ALT_SELECT | DMA_CH1_EUSCIB0RX0,UDMA_MODE_PINGPONG, (void*)MAP_SPI_getReceiveBufferAddressForDMA(EUSCI_B0_BASE),data_array2, SAMPLE_LENGTH);
        switch_data = 0;
    }
}

**Attention** This is a public forum