4022|16

56

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

TIMER觸發ADC [复制链接]

請教各位
使用定時器,當定時器計數到近中斷後,自己去執行ADC轉換
與使用定時器,定時器計數後自行ADC轉換
有什麼差??

最新回复

是的,我的代码里没用ADCProcessorTrigger(ADC0_BASE, 0); TimerControlTrigger我写在了ADC初始化里 所以您的上一条回复里的方法在我的代码里已经用过了 诚求您的初始化代码,或者帮我看看哪里有误  详情 回复 发表于 2016-1-21 08:31
 
点赞 关注

回复
举报

1469

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
没看明白想表达什么哎。。。一个用中断一个不用?不用中断好像没办法确认计时结束啊
 
 

回复

56

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
可能表達得不是很好,就是比如說,

1. TIMER與ADC分開設定,ADC使用"ADC_TRIGGER_PROCESSOR"來做,
當TIMER計數到指定時間進中斷後,我使用手動ADC轉換來得值

2.TIMER和ADC使用"ADC_TRIGGER_TIMER"
當TIMER計數到指定時間進中斷後,會自行ADC轉換來得值

想了解一下,這樣是否有差異

点评

你这就已经把区别总结出来了啊,一个是用定时器的中断自动开始AD转换,一个是进到定时器中断写两句代码开始AD转换 区别就是那两句代码,速度的差别也就是那两句代码 但是手动开始可以在需要的时候进行不同的配置,  详情 回复 发表于 2016-1-19 21:00
 
 
 

回复

1469

帖子

0

TA的资源

五彩晶圆(中级)

4
 
nt52241930 发表于 2016-1-19 15:24
可能表達得不是很好,就是比如說,

1. TIMER與ADC分開設定,ADC使用"ADC_TRIGGER_PROCESSOR"來做,
當TIMER ...

你这就已经把区别总结出来了啊,一个是用定时器的中断自动开始AD转换,一个是进到定时器中断写两句代码开始AD转换
区别就是那两句代码,速度的差别也就是那两句代码
但是手动开始可以在需要的时候进行不同的配置,自动的只能在开始之前都配置好,看你想怎么用了
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(中级)

5
 
了解,
那在請教,
因我在DATASHEET裡都未看到,關於採樣率計算
ADC為16Mhz,採樣率是如何計算出的??

点评

16MHz就是每秒采样16M次,至于你看到的这个数可能是DAC的最大采样率 实际的采样率就要看你的用法了,用定时器触发也好,用while循环延时也好,每秒最大的采样次数就是这个16M了  详情 回复 发表于 2016-1-20 10:28
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

6
 
nt52241930 发表于 2016-1-20 09:00
了解,
那在請教,
因我在DATASHEET裡都未看到,關於採樣率計算
ADC為16Mhz,採樣率是如何計算出的??

我最近也刚刚调试完了TIMER触发的ADC采样,至于你说的采样频率,我觉得如果你配置成了定时器触发模式你应该是你的定时器目标值有关,定时器的周期的倒数,就是你的采样频率,我这有两句代码,你可以看看
TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);//周期性计数模式
 TimerLoadSet(TIMER0_BASE, TIMER_A,SysCtlClockGet() / 10 );//计数频率10HZ
定时器配置为周期性计数,目标值是系统时钟频率的十分之一,也就是一秒钟计数十次,计数完后就触发采样,也就是一秒钟做十次采样。

 
 
 

回复

1469

帖子

0

TA的资源

五彩晶圆(中级)

7
 
nt52241930 发表于 2016-1-20 09:00
了解,
那在請教,
因我在DATASHEET裡都未看到,關於採樣率計算
ADC為16Mhz,採樣率是如何計算出的??

16MHz就是每秒采样16M次,至于你看到的这个数可能是DAC的最大采样率

实际的采样率就要看你的用法了,用定时器触发也好,用while循环延时也好,每秒最大的采样次数就是这个16M了
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(中级)

8
 
本帖最后由 nt52241930 于 2016-1-20 12:22 编辑

您好,
若是用timer,採樣頻率確實是這樣
若是當,採樣頻率達到16Mhz,真的會採樣16M次?
(因有在DATASHEET看過 這麼一段,由软件将来自两个模块的结果数据进行组
合,就能在 16 MHz (参见 图12-4(683页))工作频率下实现 1M 的采样率。)


比如說,
adc時鐘16Mhz,算上採樣的時間+轉換的時間,才是實際的採樣頻率

所以才會由此疑問,
來詢問有經驗的大家

thanks~~

点评

“时钟16MHz” 和 “采样频率16MHz” 是两个概念 工作频率和采样频率也是两个概念,具体的还是要看文档  详情 回复 发表于 2016-1-20 12:52
 
 
 

回复

1469

帖子

0

TA的资源

五彩晶圆(中级)

9
 
nt52241930 发表于 2016-1-20 11:58
您好,
若是用timer,採樣頻率確實是這樣
若是當,採樣頻率達到16Mhz,真的會採樣16M次?
(因有在DATASHEET看 ...

“时钟16MHz” 和 “采样频率16MHz” 是两个概念

工作频率和采样频率也是两个概念,具体的还是要看文档
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(中级)

10
 
ok,
感謝各位
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

11
 
本帖最后由 DJZ1992 于 2016-1-20 15:20 编辑

请问能看看你的TIMER和采样的配置代码吗?我配制成TIMER0触发ADC,但是就是进不了ADC的中断,希望看下你的,我的是这样的@anqi90
void ADC_INIT(void)
{
        SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
        GPIOPinTypeADC(GPIO_PORTD_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
        GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
        //设置ADC参考电压为外部3V,TM4C123GH6PM只能使用内部参考电压,3.3V
        //ADCReferenceSet(ADC0_BASE, ADC_REF_EXT_3V);//若ADC_REF_INT,则指使用内部3V参考电压
        //配置ADC采集序列,ADC_TRIGGER_PROCESSOR是软件触发,ADC_TRIGGER_TIMER是定时器触发
        ADCSequenceConfigure(ADC0_BASE, 0,ADC_TRIGGER_TIMER, 0);
        //ADCSequenceConfigure(ADC0_BASE, 0,ADC_TRIGGER_PROCESSOR, 0);
        ADCSequenceStepConfigure(ADC0_BASE, 0, 0, ADC_CTL_CH0 );//PE3/IC
        ADCSequenceStepConfigure(ADC0_BASE, 0, 1, ADC_CTL_CH1 );//PE2/IB
        ADCSequenceStepConfigure(ADC0_BASE, 0, 2, ADC_CTL_CH2 );//PE1IA
        ADCSequenceStepConfigure(ADC0_BASE, 0, 3, ADC_CTL_CH3 );//PE0/VREF
        ADCSequenceStepConfigure(ADC0_BASE, 0, 4, ADC_CTL_CH4 );//PD3/UA
        ADCSequenceStepConfigure(ADC0_BASE, 0, 5, ADC_CTL_CH5 );//PD2/UB
        ADCSequenceStepConfigure(ADC0_BASE, 0, 6, ADC_CTL_CH6 | ADC_CTL_IE |ADC_CTL_END);//PD1/UC
        //ADCSequenceStepConfigure(ADC0_BASE, 0, 7, ADC_CTL_CH7 | ADC_CTL_IE |ADC_CTL_END);//PD0未使用

        IntMasterEnable();
        IntEnable(INT_ADC0SS0); //使能ADC采样序列中断
        ADCIntEnable(ADC0_BASE, 0);
        //中断触发方式设置ADC_INT_SS0、ADC_INT_DMA_SS0、ADC_INT_DCON_SS0
        ADCIntEnableEx(ADC0_BASE,ADC_INT_SS0);//分别代表普通序列触发、DMA触发和数字比较器触发
        ADCIntClear(ADC0_BASE, 0);
        ADCSequenceEnable(ADC0_BASE, 0);//使能ADC采集序列
        TimerControlTrigger(ADC0_BASE,TIMER_A,true);
}

void ADC0IntHandler(void)
{
        ADCIntClear(ADC0_BASE, 0);
        ADCSequenceDataGet(ADC0_BASE, 0, ADC0_Value);
        if (ADC_Ready_Flag == 0)
        {
                RMS_IC.Save[Cnt_Period] = ADC0_Value[0];
                RMS_IB.Save[Cnt_Period] = ADC0_Value[1];
                RMS_IA.Save[Cnt_Period] = ADC0_Value[2];
                RMS_VR.Save[Cnt_Period] = ADC0_Value[3];
                RMS_VA.Save[Cnt_Period] = ADC0_Value[4];
                RMS_VB.Save[Cnt_Period] = ADC0_Value[5];
                RMS_VC.Save[Cnt_Period] = ADC0_Value[6];
                Cnt_Period++;
                if (Cnt_Period == 255)
                {
                        Cnt_Period = 0;
                        ADC_Ready_Flag = 1;
                }
        }
}

void TIMER0(void)
{
        SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);//使能TIMER0
        TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC);//周期性计数模式
        TimerLoadSet(TIMER0_BASE, TIMER_A,SysCtlClockGet() / 12800);
        TimerADCEventSet(TIMER0_BASE,TIMER_ADC_TIMEOUT_A);//超时触发采样设置
        TimerADCEventGet(TIMER0_BASE);//获取是否超时触发ADC
        //IntEnable(INT_TIMER0A);//TIMEOUT标志位触发中断
        //TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); //使能TIMER0A中断
        //IntMasterEnable();
        TimerEnable(TIMER0_BASE, TIMER_A);//TIMER0A开始计数,当计数值等于TimerLoadSet,触发中断
}

点评

您好, 在timer配置裡,試著使用這ㄍ函式 試試 TimerControlTrigger(uint32_t ui32Base, uint32_t ui32Timer, bool bEnable)  详情 回复 发表于 2016-1-20 16:03
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

12
 
anqi90 发表于 2016-1-20 12:52
“时钟16MHz” 和 “采样频率16MHz” 是两个概念

工作频率和采样频率也是两个概念,具体的还是要看文 ...

麻烦您看下我的ADC和TIMER的配置,我现在配制成定时器自动触发不成功,一直进不去adc中断,代码在上一楼
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(中级)

13
 
DJZ1992 发表于 2016-1-20 15:19
请问能看看你的TIMER和采样的配置代码吗?我配制成TIMER0触发ADC,但是就是进不了ADC的中断,希望看下你 ...

您好,
在timer配置裡,試著使用這ㄍ函式 試試
TimerControlTrigger(uint32_t ui32Base, uint32_t ui32Timer, bool bEnable)

点评

这一句TimerControlTrigger(ADC0_BASE,TIMER_A,true);应该和ADCProcessorTrigger(ADC0_BASE, 0);是一个作用吧 ADCProcessorTrigger(ADC0_BASE, 0);这句是软件触发语句,写在需要触发的地方 TimerControlTrigger(AD  详情 回复 发表于 2016-1-20 16:50
好的 我试试,谢谢,有问题再问您  详情 回复 发表于 2016-1-20 16:45
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

14
 
nt52241930 发表于 2016-1-20 16:03
您好,
在timer配置裡,試著使用這ㄍ函式 試試
TimerControlTrigger(uint32_t ui32Base, uint32_t ui32Ti ...

好的 我试试,谢谢,有问题再问您
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

15
 
nt52241930 发表于 2016-1-20 16:03
您好,
在timer配置裡,試著使用這ㄍ函式 試試
TimerControlTrigger(uint32_t ui32Base, uint32_t ui32Ti ...

这一句TimerControlTrigger(ADC0_BASE,TIMER_A,true);应该和ADCProcessorTrigger(ADC0_BASE, 0);是一个作用吧
ADCProcessorTrigger(ADC0_BASE, 0);这句是软件触发语句,写在需要触发的地方
TimerControlTrigger(ADC0_BASE,TIMER_A,true);这一句要写到定时器初始化里吗?
按理说我写在了ADC初始化里,而adc初始化执行后紧跟着TIMER初始化函数,这一句语句的先后应该没什么区别。
我先试试,谢谢

点评

若是使用timer觸發 應該就不用這句了吧? ADCProcessorTrigger(ADC0_BASE, 0); TimerControlTrigger這句順序應該是沒關係  详情 回复 发表于 2016-1-20 17:00
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(中级)

16
 
DJZ1992 发表于 2016-1-20 16:50
这一句TimerControlTrigger(ADC0_BASE,TIMER_A,true);应该和ADCProcessorTrigger(ADC0_BASE, 0);是一个作 ...

若是使用timer觸發
應該就不用這句了吧? ADCProcessorTrigger(ADC0_BASE, 0);
TimerControlTrigger這句順序應該是沒關係

点评

是的,我的代码里没用ADCProcessorTrigger(ADC0_BASE, 0); TimerControlTrigger我写在了ADC初始化里 所以您的上一条回复里的方法在我的代码里已经用过了 诚求您的初始化代码,或者帮我看看哪里有误  详情 回复 发表于 2016-1-21 08:31
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

17
 
nt52241930 发表于 2016-1-20 17:00
若是使用timer觸發
應該就不用這句了吧? ADCProcessorTrigger(ADC0_BASE, 0);
TimerControlTrigger這句 ...

是的,我的代码里没用ADCProcessorTrigger(ADC0_BASE, 0);
TimerControlTrigger我写在了ADC初始化里
所以您的上一条回复里的方法在我的代码里已经用过了
诚求您的初始化代码,或者帮我看看哪里有误
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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