关于 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条回答
ZhengLang
1楼-- · 2019-03-24 17:53
 精彩回答 2  元偷偷看……
wu1169668869
2楼-- · 2019-03-24 22:20
< :TI_MSP430_内容页_SA7 -->
ZhengLang 发表于 2014-7-7 09:33
ADCProcessorTrigger(ADC0_BASE,3);
你在ADC初始化完了需要触发,然后它转换完进入中断。中断完之后,你 ...

我在定时器中断中触发ADC采样的。关键是进入ADC中断的时候是采样结束,可以读取值了吗?
ZhengLang
3楼-- · 2019-03-25 02:27
wu1169668869 发表于 2014-7-7 16:16
我在定时器中断中触发ADC采样的。关键是进入ADC中断的时候是采样结束,可以读取值了吗?

采样结束就进入中断然后读取值然后再使能下一次!
997576280
4楼-- · 2019-03-25 06:53
 精彩回答 2  元偷偷看……
jacbpan
5楼-- · 2019-03-25 07:38
你好,你的第二个问题解决了吗
1301120345
6楼-- · 2019-03-25 10:17
你好,你不是处理器出发的吗,怎么会在定时器中断响应函数中得到采样值呢??我也在用M4,采样,希望多多指导哎

一周热门 更多>

相关问题

    相关文章