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.

ADC+DMA的程序 进不去ADC中断,DMA传输到的数据都为0

单片机型号是TM4C123GH6PMI   ,有没有大佬能帮我看看

#include "ALL.h"
#include "dma.h"
#include "timer.h"
#include "adc.h"
#include "My_ad.h"

uint32_t g_ui32SysClock=0xffff;

uint32_t ADCBufferA[1024];
uint32_t ADCBufferB[1024];
uint32_t ADCBufferACount=0;
uint32_t ADCBufferBCount=0;

uint32_t TimeCount;

#if defined(ewarm)
#pragma data_alignment=1024
uint8_t pui8ControlTable[1024];
#elif defined(ccs)
#pragma DATA_ALIGN(pui8ControlTable, 1024)
uint8_t pui8ControlTable[1024];
#else
uint8_t pui8ControlTable[1024] __attribute__ ((aligned(1024)));
#endif

void Timer0AIntHandler()
{
TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
TimeCount++;
}


void ADCIntHandler()
{
uint32_t ui32Mode;
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);
delay_s(2);
ADCIntClearEx(ADC0_BASE, ADC_INT_DMA_SS0);

ui32Mode = uDMAChannelModeGet(UDMA_CHANNEL_ADC0 | UDMA_PRI_SELECT);
if(ui32Mode == UDMA_MODE_STOP)
{
ADCBufferACount++;
ADCBufferACount &= 1024;
ROM_uDMAChannelTransferSet(UDMA_CHANNEL_ADC0 | UDMA_PRI_SELECT, UDMA_MODE_PINGPONG, (void *)(ADC0_BASE+ADC_O_SSFIFO0), &ADCBufferA[ADCBufferACount*16], 8);
}
ui32Mode = uDMAChannelModeGet(UDMA_CHANNEL_ADC0 | UDMA_ALT_SELECT);
if(ui32Mode == UDMA_MODE_STOP)
{
ADCBufferBCount++;
ADCBufferBCount &= 1024;
ROM_uDMAChannelTransferSet(UDMA_CHANNEL_ADC0 | UDMA_ALT_SELECT, UDMA_MODE_PINGPONG, (void *)(ADC0_BASE+ADC_O_SSFIFO0), &ADCBufferB[ADCBufferBCount*16], 8);
}

if(!ROM_uDMAChannelIsEnabled(UDMA_CHANNEL_ADC0))
{
ROM_uDMAChannelEnable(UDMA_CHANNEL_ADC0);
}

UARTprintf("\nBuffer A Value%d:%d\n",ADCBufferACount,ADCBufferA[ADCBufferACount]);
UARTprintf("\nBuffer B Value%d:%d\n",ADCBufferBCount,ADCBufferB[ADCBufferBCount]);

if(TimeCount>15) ADCIntDisableEx(ADC0_BASE, ADC_INT_DMA_SS0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0);
}

int main(void)
{
ROM_FPULazyStackingEnable();
ROM_SysCtlClockSet( SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);

ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1);
ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2);
ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_3);
ConfigureUART_0(115200,1);
Uartx_printf(UART0_BASE,"Hello, world!\n");

SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);
TimerLoadSet(TIMER0_BASE, TIMER_A, g_ui32SysClock);
TimerIntRegister(TIMER0_BASE, TIMER_A, Timer0AIntHandler);
IntEnable(INT_TIMER0A);
TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
TimerEnable(TIMER0_BASE, TIMER_A);

SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
uDMAEnable();
uDMAControlBaseSet(pui8ControlTable);

SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);//开启GPIOE时钟
ROM_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_3);// CH0
ADCSequenceConfigure(ADC0_BASE, 0, ADC_TRIGGER_TIMER, 0);
ROM_ADCProcessorTrigger(ADC0_BASE, 0);//ADC处理触发器
// TimerControlTrigger(TIMER0_BASE, TIMER_A, true);
ROM_ADCReferenceSet(ADC0_BASE,ADC_REF_INT );//选择参考电压源:内部3V3参考电压源
ADCIntEnable(ADC0_BASE, 0);
ADCIntEnableEx(ADC0_BASE, ADC_INT_DMA_SS0);
ADCIntRegister(ADC0_BASE, 0, ADCIntHandler);
IntEnable(INT_ADC0SS0);

ADCSequenceStepConfigure(ADC0_BASE, 0, 0, ADC_CTL_CH0);
ADCSequenceStepConfigure(ADC0_BASE, 0, 1, ADC_CTL_CH0);
ADCSequenceStepConfigure(ADC0_BASE, 0, 2, ADC_CTL_CH0);
ADCSequenceStepConfigure(ADC0_BASE, 0, 3, ADC_CTL_CH0);
ADCSequenceStepConfigure(ADC0_BASE, 0, 4, ADC_CTL_CH0);
ADCSequenceStepConfigure(ADC0_BASE, 0, 5, ADC_CTL_CH0);
ADCSequenceStepConfigure(ADC0_BASE, 0, 6, ADC_CTL_CH0);
ADCSequenceStepConfigure(ADC0_BASE, 0, 7, ADC_CTL_CH0 | ADC_CTL_END);

ADCSequenceDMAEnable(ADC0_BASE, 0);


ROM_uDMAChannelControlSet(UDMA_CHANNEL_ADC0 | UDMA_PRI_SELECT, UDMA_SIZE_32 | UDMA_SRC_INC_NONE | UDMA_DST_INC_32 | UDMA_ARB_4);
ROM_uDMAChannelControlSet(UDMA_CHANNEL_ADC0 | UDMA_ALT_SELECT, UDMA_SIZE_32 | UDMA_SRC_INC_NONE | UDMA_DST_INC_32 | UDMA_ARB_4);

ROM_uDMAChannelTransferSet(UDMA_CHANNEL_ADC0 | UDMA_PRI_SELECT, UDMA_MODE_PINGPONG, (void *)(ADC0_BASE+ADC_O_SSFIFO0), ADCBufferA, 8);
ROM_uDMAChannelTransferSet(UDMA_CHANNEL_ADC0 | UDMA_ALT_SELECT, UDMA_MODE_PINGPONG, (void *)(ADC0_BASE+ADC_O_SSFIFO0), ADCBufferB, 8);

ROM_uDMAChannelEnable(UDMA_CHANNEL_ADC0);
ADCSequenceEnable(ADC0_BASE, 0);

IntMasterEnable();
while(1)
{
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_PIN_3);
delay_ms(500);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, 0);
delay_ms(500);
if(TimeCount>20) break;
}
uint32_t Index;
UARTprintf("\nBuffer A\n");
for(Index=0;Index<8;Index++)
{
// UARTprintf("Value:%dmV\t",(ADCBufferA[Index] * 3300)/4096);
UARTprintf("Value:%d\t",ADCBufferA[Index]);
}
UARTprintf("\nBuffer B\n");
for(Index=0;Index<8;Index++)
{
// UARTprintf("Value:%dmV\t",(ADCBufferB[Index] * 3300)/4096);
UARTprintf("Value:%d\t",ADCBufferB[Index]);
}
}

x 出现错误。请重试或与管理员联系。