请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C129ENCPDT 你(们)好
我使用序列发生器(序列编号1)并使用 TM4C MCU 的2个 ADC 从8个模拟输入获取数据。 我知道两个 ADC 都可以同时读取、但序列意味着读取具有相同 ADC 的两个模拟输入时会出现延迟、如果 我使用计时器来控制去采集、我如何知道该延迟的值? 采样频率(fs)为200KHz。 这是两个 ADC 的 ADC 配置:
void ADCconfigure (uint32_t sysclock、uint32_t fs) { SysCtlPeripheralEnable (SYSCTL_Periph_ADC0); SysCtlPeripheralSlepEnable (SYSCTL_Periph_ADC0); ADCClockConfigSet (ADC0_BASE、ADC_CClock_SRC_PIOSC | ADC_CClock_RATE_FULL、1); ADCSequenceConfigure (ADC0_BASE、1、ADC_TRIGGER_TIMER、0); ADCSequenceStepConfigure (ADC0_BASE、1、0、ADC_CTL_CH16/*PK0*/); ADCSequenceStepConfigure (ADC0_BASE、1、1、ADC_CTL_CH17/* PK1*/); ADCSequenceStepConfigure (ADC0_BASE、1、2、ADC_CTL_CH18/* PK2*/); ADCSequenceStepConfigure (ADC0_BASE、1、3、ADC_CTL_CH19/* PK3*/| ADC_CTL_END | ADC_CTL_IE); ADCSequenceDMAEnable (ADC0_BASE、1); uDMAChannelAttributeDisable (UDMA_CHANGE_ADC1、 UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIOR| UDMA_ATTR_REQMASK); uDMAChannelControlSet (UDMA_CHANGE_ADC1 | UDMA_PRI_SELECT、 UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1); uDMAChannelControlSet (UDMA_CHANGE_ADC1 | UDMA_ALT_SELECT、 UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1); /**/ uDMAChannelTransferSet (UDMA_CHANGE_ADC1 | UDMA_PRI_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC0_BASE + ADC_O_SSFIFO1)、 &g_pui8USBTxBuffer[index0]、MEM_buffer_size); uDMAChannelTransferSet (UDMA_CHANGE_ADC1 | UDMA_ALT_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC0_BASE + ADC_O_SSFIFO1)、 &g_pui8USBTxBuffer[index0]、MEM_buffer_size); uDMAChannelEnable (UDMA_CHANGE_ADC1); ADCIntEnableEx (ADC0_BASE、ADC_INT_DMA_SS1); IntEnable (INT_ADC0SS1); SysCtlPeripheralEnable (SYSCTL_Periph_ADC1); SysCtlPeripheralSlepEnable (SYSCTL_Periph_ADC1); ADCClockConfigSet (ADC1_base、ADC_CClock_SRC_PIOSC | ADC_CClock_RATE_FULL、1); ADCSequenceConfigure (ADC1_base、1、ADC_TRIGGER_TIMER、0); ADCSequenceStepConfigure (ADC1_base、1、0、ADC_CTL_CH0/*PE3*/); ADCSequenceStepConfigure (ADC1_base、1、1、ADC_CTL_CH1/*PE2*/); ADCSequenceStepConfigure (ADC1_base、1、2、ADC_CTL_CH2/*PE1*/); ADCSequenceStepConfigure (ADC1_base、1、3、ADC_CTL_CH3/* PE0*/| ADC_CTL_END | ADC_CTL_IE); ADCPhaseDelaySet (ADC1_base、ADC_PHASE_0); ADCSequenceDMAEnable (ADC1_BASE、1); uDMAChannelAttributeDisable (UDMA_CH25_ADC1_1、 UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIOR| UDMA_ATTR_REQMASK); uDMAChannelControlSet (UDMA_CH25_ADC1_1 | UDMA_PRI_SELECT、 UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_8); uDMAChannelControlSet (UDMA_CH25_ADC1_1 | UDMA_ALT_SELECT、 UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_8); /**/ uDMAChannelTransferSet (UDMA_CH25_ADC1_1 | UDMA_PRI_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC1_base + ADC_O_SSFIFO1)、 &g_pui8USBTxBuffer[index1]、MEM_buffer_size); uDMAChannelTransferSet (UDMA_CH25_ADC1_1 | UDMA_ALT_SELECT、 UDMA_MODE_PINGONG、 (void *)(ADC1_base + ADC_O_SSFIFO1)、 &g_pui8USBTxBuffer[index1]、MEM_buffer_size); uDMAChannelAssign (UDMA_CH25_ADC1_1); uDMAChannelEnable (UDMA_CH25_ADC1_1); ADCIntEnableEx (ADC1_base、ADC_INT_DMA_SS1); IntEnable (INT_ADC1SS1); //-------------------------------- // SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0); TimerConfigure (TIMER0_BASE、TIMER_CFG_A_PERIODICASE); TimerLoadSet (TIMER0_BASE、TIMER_A、sysclock/(FS)); TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE); } //---------------
提前感谢