头像-379024

40d0dae3c436b31a

个人成就

获得 0 次赞

帮助过0人

MSP432的DMA乒乓模式怎么使用来连续传输ADC采集数据

就是用MSP432P401R的DMA乒乓模式怎么连续传输ADC采集的数据。下面是程序,不能实现功能,有些错误,请大神指教。#include "u_dma.h"#include <ti/devices/msp432p4xx/driverlib/driverlib.h>#include "uart_calc.h"#include "ADC.h"#define   DAM_SIZE    8000/@@* DMA Control Table  这一段是必须要有的*/#if defined(__TI_COMPILER_VERSION__)#pragma DATA_ALIGN(controlTable 1024)#elif defined(__IAR_SYSTEMS_ICC__)#pragma data_alignment=1024#elif defined(__GNUC__)__attribute__ ((aligned (1024)))#elif defined(__CC_ARM)__align(1024)#endifuint8_t controlTable[1024];volatile int switch_data = 0;uint32_t k=0;uint8_t data_array1[DAM_SIZE];extern void delay(uint16_t z);void DMA_confing(void){    MAP_WDT_A_holdTimer();       //关闭看门狗   memset(data_array1 0x11 DAM_SIZE);     //目标数组初始化 // printf("123\n");   GPIO_setAsOutputPin(GPIO_PORT_P1GPIO_PIN0);   GPIO_setAsOutputPin(GPIO_PORT_P2GPIO_PIN1);   GPIO_setOutputHighOnPin(GPIO_PORT_P1GPIO_PIN0);   DMA_enableModule();              //使能DMA模块   DMA_setControlbase(controlTable);      //设置控制表基地址   DMA_disableChannelAttribute(DMA_CH7_ADC14                                 UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |                                 UDMA_ATTR_HIGH_PRIORITY |                                 UDMA_ATTR_REQMASK);         //禁用通道特征   DMA_setChannelControl(UDMA_PRI_SELECT | DMA_CH7_ADC14UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1);     //设置通道控制参数   ADC映射          主数据结构       8位数据大小    源地址增量        目标地址增量      传输数量   DMA_setChannelTransfer(UDMA_PRI_SELECT | DMA_CH7_ADC14UDMA_MODE_PINGPONG (void*) &ADC14->MEM[0]data_array1 DAM_SIZE);       //设置通道传输参数      ADC映射        主数据结构         乒乓模式        源数据                  目标数据    传输数量      DMA_setChannelControl(UDMA_ALT_SELECT | DMA_CH7_ADC14UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1);     //设置通道控制参数   ADC映射          主数据结构       8位数据大小    源地址增量        目标地址增量      传输数量      DMA_setChannelTransfer(UDMA_ALT_SELECT | DMA_CH7_ADC14UDMA_MODE_PINGPONG (void*) &ADC14->MEM[0]data_array1 DAM_SIZE);     //设置通道传输参数      ADC映射        主数据结构         乒乓模式        源数据                  目标数据    传输数量 DMA_requestChannel(7);      //通道7请求传输 DMA_assignChannel(DMA_CH7_ADC14);    //指定外设映射 DMA_assignInterrupt(DMA_INT1 7);    Interrupt_enableInterrupt(INT_DMA_INT1);    DMA_clearInterruptFlag(7);    Interrupt_enableMaster(); DMA_enableChannel(7);    ADC14_enableConversion(); }  /@@***DMA传输完成中断*****/void DMA_INT1_IRQHandler(void){   GPIO_setOutputHighOnPin(GPIO_PORT_P2GPIO_PIN1);     //GPIO_toggleOutputOnPin(GPIO_PORT_P2GPIO_PIN1);     //delay(100);     //GPIO_toggleOutputOnPin(GPIO_PORT_P2GPIO_PIN1);   DMA_requestChannel(7);      //通道7请求传输 DMA_assignChannel(DMA_CH7_ADC14);    //指定外设映射 DMA_assignInterrupt(DMA_INT1 7);    Interrupt_enableInterrupt(INT_DMA_INT1);    DMA_clearInterruptFlag(7);    Interrupt_enableMaster(); DMA_enableChannel(7);    ADC14_enableConversion();   printf("%d%d%d\n"data_array1[k++]data_array1[k++]data_array1[k++]);     //GPIO_setOutputLowOnPin(GPIO_PORT_P2GPIO_PIN1);    /@@* Switch between primary and alternate bufferes with DMA's PingPong mode */     if (DMA_getChannelAttribute(7) & UDMA_ATTR_ALTSELECT)    {        DMA_setChannelControl(UDMA_PRI_SELECT | DMA_CH7_ADC14            UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1);        DMA_setChannelTransfer(UDMA_PRI_SELECT | DMA_CH7_ADC14            UDMA_MODE_PINGPONG (void*) &ADC14->MEM[0]            data_array1 DAM_SIZE);        switch_data = 1; printf("%d%d%d\n"data_array1[k++]data_array1[k++]data_array1[k++]); DMA_requestSoftwareTransfer(0);    }    else    {        DMA_setChannelControl(UDMA_ALT_SELECT | DMA_CH7_ADC14            UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1);        DMA_setChannelTransfer(UDMA_ALT_SELECT | DMA_CH7_ADC14            UDMA_MODE_PINGPONG (void*) &ADC14->MEM[0]            data_array1 DAM_SIZE);        switch_data = 0; printf("%d%d%d\n"data_array1[k++]data_array1[k++]data_array1[k++]); DMA_requestSoftwareTransfer(0);    } }​