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