TI中文支持网
TI专业的中文技术问题搜集分享网站

2812 EINT指令在执行什么具体操作,耗时0.3us左右

    在进行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:

您的图片未能成功上传

若是可以的话,请您私信下工程,我们来具体看一下,谢谢

赞(0)
未经允许不得转载:TI中文支持网 » 2812 EINT指令在执行什么具体操作,耗时0.3us左右
分享到: 更多 (0)