器件型号:DK-TM4C129X
工具/软件:Code Composer Studio
大家好!!!
我正在借助 ADC 以1MSPS 的速率通过 DMA 对外部模拟信号进行采样(由仲裁函数发生器进行)。 我正在使用乒乓技术来存储来自 AFE 的连续数据。 我将在电路板的 PE3/AIN0引脚上提供频率为1kHz 的正弦输入和幅值为1V 的正弦输入。 下面是我在 CCSv6上成功编译的完整代码。
#include #include include "inc/hw_ints.h" #include "inc/hw_memmap.h" #include "inc/hw_adc.h" #include "inc/hw_types.h" #include "inc/hw_udma.idr32_intrl" #include "driverlib_driverlib_driverlib.idt.idr32"#include "driveript.inc/gui2_driverlib_uni32_intrature.id.id.inu.inc" #include "driverlib_uni20_driverlib_driver32_driverlib"#driveript.id.id.id.id.inc"#def"inu.inu.inc/udpintrinu.id.inc"inu.inc"inu.id.inc"inu.id.id.id.id.inc"inu.id.inc"inu.inc"inu.inc"#def"#def"#def"intr.id/udpinu.inu.id.id.id.id.id.in #define MEM_buffer_size 256 静态 uint32_t g_ui8RxBufA[MEM_buffer_size]; 静态 uint32_t g_ui8RxBufB[MEM_buffer_size]; //********* // //!单端 ADC (single_ended)
//// ***************** void uDMAErrorHandler (void) { uint32_t ui32Status; // //检查 uDMA 错误位 // ui32Status = uDMAErrorStatusGet (); // //如果存在 uDMA 错误,则清除该错误并递增 //错误计数器。 // if (ui32状态) { uDMAErrorStatusClear(); } } void ADCseq0Handler() { uint32_t ui32Status; uint32_t ui32模式; ADCIntClearEx (ADC0_BASE、ADC_INT_DMA_SS3); ui32Mode = uDMAChannelModeGet (UDMA_CHANGE_ADC0 | UDMA_PRI_SELECT); if (ui32Mode = uDMA_MODE_STOP) { uDMAChannelTransferSet (UDMA_CHANGE_ADC0 | UDMA_PRI_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC0_BASE + ADC_O_SSFIFO3)、 G_ui8RxBufA、MEM_buffer_size); uDMAChannelEnable (UDMA_CHANGE_ADC0); } ui32Mode = uDMAChannelModeGet (UDMA_CHANGE_ADC0 | UDMA_ALT_SELECT); if (ui32Mode = uDMA_MODE_STOP) { uDMAChannelTransferSet (UDMA_CHANGE_ADC0 | UDMA_ALT_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC0_BASE + ADC_O_SSFIFO3)、 G_ui8RxBufB、MEM_buffer_size); uDMAChannelEnable (UDMA_CHANGE_ADC0); } } 空 InitUART1传输(uint32_t sysclock) { uint32_t div; SysCtlPeripheralEnable (SYSCTL_Periph_ADC0); SysCtlPeripheralSlepEnable (SYSCTL_Periph_ADC0); ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PIOSC | ADC_CLOCK_RATE_FULL、1); // ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL、 30); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE); GPIOPinTypeADC (GPIO_Porte _BASE、GPIO_PIN_3); //ADCSequenceConfigure (ADC0_BASE、0 /*SS0*/、ADC_TRIGGER_AYSHOW、3 /*Priority*/);// SS0-SS3优先级必须始终不同 ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_PROCESSOR、0); ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END); ADCSequenceEnable (ADC0_BASE、3); ADCSequenceDMAEnable (ADC0_BASE、3); uDMAChannelAttributeDisable (UDMA_CHANGE_ADC0、 UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIOR| UDMA_ATTR_REQMASK); uDMAChannelControlSet (UDMA_CHANGE_ADC0 | UDMA_PRI_SELECT、 UDMA_SIZE_32 | UDMA_SRC_INC_NONE | UDMA_DST_INC_32 | UDMA_NEW_USEBURST | UDMA_ARB_256); uDMAChannelControlSet (UDMA_CHANGE_ADC0 | UDMA_ALT_SELECT、 UDMA_SIZE_32 | UDMA_SRC_INC_NONE | UDMA_DST_INC_32 | UDMA_NEW_USEBURST | UDMA_ARB_256); uDMAChannelTransferSet (UDMA_CHANGE_ADC0 | UDMA_PRI_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC0_BASE + ADC_O_SSFIFO3)、 G_ui8RxBufA、MEM_buffer_size); uDMAChannelTransferSet (UDMA_CHANGE_ADC0 | UDMA_ALT_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC0_BASE + ADC_O_SSFIFO3)、 G_ui8RxBufB、MEM_buffer_size); uDMAChannelEnable (UDMA_CHANGE_ADC0); ADCIntEnableEx (ADC0_BASE、ADC_INT_DMA_SS3); IntEnable (INT_ADC0SS3); } int main (void) { uint32_t sysclock; SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、20000000); SysCtlPeripheralEnable (SYSCTL_Periph_UDMA); SysCtlPeripheralSlepEnable (SYSCTL_Periph_UDMA); IntMasterEnable(); IntEnable (INT_UDMAERR); uDMAEnable(); uDMAControlBaseSet (pui8ControlTable); InitUART1传输(sysclock); while (1) { } }
它在编译时没有任何错误、但输出(g_ui8RxBufA)的所有值都为0。 我无法确定代码有什么问题。
谢谢你