12tangyang12 发表于 2018-5-22 13:50:02

MC9s12G系列 AD转换时不能被中断?

如题,
        程序如下:在执行AD转换前如果不关中断,执行 ATDCTL5 = CH;   //转换AD08,后正好中断来,会打断转换的序列, 这时程序就死在下一句while 里了。
加上disable后 就行。请问AD转换的时候必须关中断吗?
u16 System_ADcapture(u8 CH)            
{
unsigned int AD_data;
DisableInterrupts;                        //关中断            
ATDCTL5 = CH;   //转换AD08
while(!ATDSTAT0_SCF);
EnableInterrupts;                      //开中断
AD_data = ATDDR0;
                  
return(AD_data);         
}       

w282529350 发表于 2018-5-22 14:19:17

看看中断里面是不是有清AD标志位的操作

12tangyang12 发表于 2018-5-22 14:33:12

w282529350 发表于 2018-5-22 14:19
看看中断里面是不是有清AD标志位的操作

还有个情况如下:很奇怪

u16 System_ADcapture(u8 CH)            
{
unsigned int AD_data;
   
ATDCTL5 = CH;   //转换AD08

//此处加入很短的延时, while 里就出不来。    就是说 启动转换 和 等待标志位 必须是连续执行,中间暂停 一段时间就 出不来......

while(!ATDSTAT0_SCF);

AD_data = ATDDR0;
                  
return(AD_data);         
}   

cpholr1 发表于 2018-5-22 14:42:44

2011年玩飞思卡尔时候用过这个芯片兄弟版本。。

cpholr1 发表于 2018-5-22 14:43:09

现在忘光了。。感觉跟AVR的指令有点像。。

w282529350 发表于 2018-5-22 14:45:01

12tangyang12 发表于 2018-5-22 14:33
还有个情况如下:很奇怪

u16 System_ADcapture(u8 CH)            


中断里面有没有读ad的操作

12tangyang12 发表于 2018-5-22 14:57:20

w282529350 发表于 2018-5-22 14:45
中断里面有没有读ad的操作

没有,在启动转换后,加入一段时间的延时,必定会死在while()里,
        转换完成标志 需要如下 三种情况之一 清除

         A) Write “1” to SCF
         B) Write to ATDCTL5 (a new conversion sequence is started)
         C) If AFFC=1 and a result register is read
u16 System_ADcapture(u8 CH)            
{
unsigned int AD_data;
DisableInterrupts;                  //这里先关闭中断,排除别的中断里有清标志可能
            
ATDCTL5 = CH;   //转换AD08
Delay(100);                           // 这里只要加入延时, 让启动转换 和 while 里 分开执行, 就必定死在while里,            
while(!ATDSTAT0_SCF);
EnableInterrupts;
AD_data = ATDDR0;
                  
return(AD_data);         
}

w282529350 发表于 2018-5-22 15:10:27

12tangyang12 发表于 2018-5-22 14:57
没有,在启动转换后,加入一段时间的延时,必定会死在while()里,
        转换完成标志 需要如下 三种情况之 ...

用过这个芯片的ad,没有遇到你说过的这种情况。每路ad转换的结果放在不同的寄存器内,而看你的程序,要转换的ad通道是变数,但读取的一直是通道0?

12tangyang12 发表于 2018-5-22 15:28:46

w282529350 发表于 2018-5-22 15:10
用过这个芯片的ad,没有遇到你说过的这种情况。每路ad转换的结果放在不同的寄存器内,而看你的程序, ...

手册里写了,ATDDR0 是 ad转换的序号 不是通道号。也就是说,在多通道连续采集时,ATDDR0 是 第一个采集的通道。

w282529350 发表于 2018-5-22 15:33:30

12tangyang12 发表于 2018-5-22 15:28
手册里写了,ATDDR0 是 ad转换的序号 不是通道号。也就是说,在多通道连续采集时,ATDDR0 是 第一个采集 ...

可能我跟你的ad配置不一样,你还是在网上找一下能用的测试程序试验下吧

deepway 发表于 2018-5-25 15:42:50

刚开始使用这个芯片。以往使用的经验,应该有个中断优先级的吧

deepway 发表于 2018-5-25 16:38:44

兄弟,请教几个问题。我是刚接触这个芯片。请问开发环境(IDE)用的是什么?开发方式是怎样的,库开发还是寄存器开发?库开发的话,有没有专门的配置工具?
页: [1]
查看完整版本: MC9s12G系列 AD转换时不能被中断?