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;
}
}