在进行AD转换开始和结束时使用DINT和EINT指令,
DINT;
AdcRegs.ADCMAXCONV.all = 0x0000; AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0xa; AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; while(AdcRegs.ADCST.bit.INT_SEQ1 == 1)
;
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;
while(AdcRegs.ADCST.bit.INT_SEQ1 == 0)///等待ad转换完成
;
addata25 = AdcRegs.ADCRESULT0 ; ////read data
EINT;
在EINT指令前后分别读取EVA T1计数器的值,按照理论应该是几个计数,但是实际用了40多个计数,大概0.3us,请问 EINT指令具体在执行什么操作?
Green Deng:
具体你可以参考这个帖子中Susan工程师的回复:e2echina.ti.com/…/191420
Susan Yang:
我在调试状态看了一下 2个时钟周期
user5972425:
回复 Susan Yang:
单步执行是2个周期,但是在函数中执行前读取计数器和执行后读取计数器,两次读取计数器的值的差就是四十多个
Susan Yang:
回复 user5972425:
能否给出详细代码?
user5972425:
回复 Susan Yang:
在中断中执行AD采样
详细代码如下 :DINT;AdcRegs.ADCMAXCONV.all = 0x0000;// 一个通道AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0xa;// AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;// Clear INT SEQ1 bitwhile(AdcRegs.ADCST.bit.INT_SEQ1 == 1);AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;////reset seq1AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;///软件中断启动AD转换while(AdcRegs.ADCST.bit.INT_SEQ1 == 0)///等待AD转换完成;addata25 =AdcRegs.ADCRESULT0 ; ////read data AdcRegs.ADCMAXCONV.all = 0x000F;///初始化AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x1;EINT;
user5972425:
回复 user5972425:
time01 = EvaRegs.T1CNT;EINT;time02 = EvaRegs.T1CNT;time03 = time02 – time01;
观察time03的值
Susan Yang:
回复 user5972425:
我会在明天测试后给您回复
Susan Yang:
回复 user5972425:
手边没有2812的板子,我使用的是28377的板子,测试结果如下(在timer例程内测试)
user5972425:
回复 Susan Yang:
这是我的测试结果,116周期,是否与AD采样这个事件本身有关? 用汇编语言测试时耗时44周期左右
Susan Yang:
回复 user5972425:
您的图片未能成功上传
若是可以的话,请您私信下工程,我们来具体看一下,谢谢