关于 tm4c123gxl上的ADC采集问题,用过的帮个忙呗~

2019-03-24 08:58发布

要用 tm4c123gxl板子上的ADC来采集音频信号,并作FFT。所以在程序里用定时器来触发ADC采集。虽然可以找到ADC_TRIGGER_TIMER,不知道具体怎么配置。
所以在定时中断中使用ADC_TRIGGER_PROCESSOR来触发,并且配置ADC中断如下:
        //*******************************
        // ADC初始化,使用序列SS3、FIFO深度1
        //*******************************
    SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
    ADCHardwareOversampleConfigure(ADC0_BASE, 16);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
    GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_1);
//    SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS);  //直接设置采样率,不需要定时器中断?
    ADCSequenceDisable(ADC0_BASE,3);             //配置前先禁止采样序列
    ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
    ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_CH2 | ADC_CTL_IE |  //PE1电压采集
                             ADC_CTL_END);
    ADCIntEnable(ADC0_BASE,3);                     //使能ADC中断
    IntEnable(INT_ADC0SS3);                        //使能ADC采样序列中断

    ADCSequenceEnable(ADC0_BASE, 3);                     //配置后启用采样序列
    ADCIntClear(ADC0_BASE,3);



//*******************************
// ADC采集中断处理子程序
//*******************************
void ADC0IntHandler(void)                //
{
        // Clear the adc interrupt flag
        ADCIntClear(ADC0_BASE, 3);
        ADCSequenceDataGet(ADC0_BASE, 3, &pui32ADC0Value);
}


但是进入ADC的中断后不能读出ADC的值,就是在观察变量pui32ADC0Value时没有任何变化。

后来不用中断,直接在定时中断中读取可行
//*******************************
// 定时中断处理子程序
//*******************************
void Timer0IntHandler(void)                //
{
        // Clear the timer interrupt
        TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
        ADCProcessorTrigger(ADC0_BASE, 3);
        while(!ADCIntStatus(ADC0_BASE, 3, false))
        {
        }
        ADCIntClear(ADC0_BASE, 3);
        ADCSequenceDataGet(ADC0_BASE, 3, &pui32ADC0Value);
}



问题1:
    while(!ADCIntStatus(ADC0_BASE, 3, false))

    书上说这个语句是等待ADC转换完成,不是转换完成才进的ADC中断吗?

问题2:
    片上ADC采集速率最大是1MSPS,但是如果不用语句:
         SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS);  //直接设置采样率,不需要定时器中断?
    进行配置的话,是有个默认采样速率吗?



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
GGVBBJ
2019-03-25 15:39
你要把AD的中断用intregister函数注册一下,相信我,应该没错

一周热门 更多>

相关问题

    相关文章