搜索
bottom↓
回复: 11

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

[复制链接]

出0入8汤圆

发表于 2018-5-22 13:50:02 | 显示全部楼层 |阅读模式
如题,
        程序如下:在执行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);         
}       

出0入0汤圆

发表于 2018-5-22 14:19:17 | 显示全部楼层
看看中断里面是不是有清AD标志位的操作

出0入8汤圆

 楼主| 发表于 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);         
}   

出0入0汤圆

发表于 2018-5-22 14:42:44 | 显示全部楼层
2011年玩飞思卡尔时候用过这个芯片兄弟版本。。

出0入0汤圆

发表于 2018-5-22 14:43:09 | 显示全部楼层
现在忘光了。。感觉跟AVR的指令有点像。。

出0入0汤圆

发表于 2018-5-22 14:45:01 | 显示全部楼层
12tangyang12 发表于 2018-5-22 14:33
还有个情况如下:很奇怪

u16 System_ADcapture(u8 CH)            

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

出0入8汤圆

 楼主| 发表于 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);         
}

出0入0汤圆

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

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

出0入8汤圆

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

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

出0入0汤圆

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

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

出0入0汤圆

发表于 2018-5-25 15:42:50 | 显示全部楼层
刚开始使用这个芯片。以往使用的经验,应该有个中断优先级的吧

出0入0汤圆

发表于 2018-5-25 16:38:44 | 显示全部楼层
兄弟,请教几个问题。我是刚接触这个芯片。请问开发环境(IDE)用的是什么?开发方式是怎样的,库开发还是寄存器开发?库开发的话,有没有专门的配置工具?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 05:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表