器件型号:MSP432P401R
您好!
我尝试获取外部 DMA 触发器以与外部 ADC (ADS131A02)配合使用。
我正在从 ADS131A02接收 INT、但 DMA 未收到触发信号。
我的代码是否有任何问题:
#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) { //将 DMA 分配给 SPI 通道 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); //设置 TX 传输特性和缓冲区 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_PINGONG、(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_PINGONG、(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); }
这里是我的 DMA INT:
void DMA_INT1_IRQHandler (void) { DMA_clearInterruptFlag (6); /*使用 DMA 的交替模式在主缓冲器和备用缓冲器之间切换*/ 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_PINGONG、(void*) MAP_SPI_getReceiveBufferAddressForDMA (EUSCI_B0_BASE)、DATA_array1、SAMPLE_LENGTH); switch_data = 1; } 其他 { 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_PINGONG、(void*) MAP_SPI_getReceiveBufferAddressForDMA (EUSCI_B0_BASE)、DATA_ARRAY2、SAMPLE_LENGTH); switch_data = 0; } }