8705|9

110

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于 tm4c123gxl上的ADC采集问题,用过的帮个忙呗~ [复制链接]

要用 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);  //直接设置采样率,不需要定时器中断?
    进行配置的话,是有个默认采样速率吗?



最新回复

楼上正解  mark   详情 回复 发表于 2017-4-6 15:11
 
点赞 关注(1)

回复
举报

50

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

ADCProcessorTrigger(ADC0_BASE,3);
你在ADC初始化完了需要触发,然后它转换完进入中断。中断完之后,你还要触发下。不然它不会启动的。

点评

我在定时器中断中触发ADC采样的。关键是进入ADC中断的时候是采样结束,可以读取值了吗?  详情 回复 发表于 2014-7-7 16:16
 
 

回复

110

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
ZhengLang 发表于 2014-7-7 09:33
ADCProcessorTrigger(ADC0_BASE,3);
你在ADC初始化完了需要触发,然后它转换完进入中断。中断完之后,你 ...

我在定时器中断中触发ADC采样的。关键是进入ADC中断的时候是采样结束,可以读取值了吗?

点评

采样结束就进入中断然后读取值然后再使能下一次!  详情 回复 发表于 2014-7-8 10:57
 
 
 

回复

50

帖子

0

TA的资源

一粒金砂(中级)

4
 
wu1169668869 发表于 2014-7-7 16:16
我在定时器中断中触发ADC采样的。关键是进入ADC中断的时候是采样结束,可以读取值了吗?

采样结束就进入中断然后读取值然后再使能下一次!
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

5
 
你好  刚刚开始学习  Tiva C TM4C123G  可以指导一下吗? QQ 1750903079
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(初级)

6
 
你好,你的第二个问题解决了吗
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(中级)

7
 
你好,你不是处理器出发的吗,怎么会在定时器中断响应函数中得到采样值呢??我也在用M4,采样,希望多多指导哎
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

8
 
我也在调试定时器控制采样啊,TIMER触发一直不成功,大神你有成功的案例么,或者帮我看看啊,我发了帖子的
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
你要把AD的中断用intregister函数注册一下,相信我,应该没错
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

10
 
楼上正解  mark
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表