Board logo

标题: ATD中的SCF用法求教! [打印本页]

作者: wuke0014    时间: 2007-4-25 17:18     标题: ATD中的SCF用法求教!

我在做ATD驱动时候,从单通道输入信号,连续转换模式(SCAN=1).在判断转换是否完成时,用SCF做判断依据时候发现总是没完成,最后用CCFx才行,那么SCF什么时候用呢?与CCFx区别在哪里??
作者: strongchen    时间: 2007-4-25 17:45

SCF是一个序列转换完成的标志,而CCFx是一个通道完成转换的标志。在一个通道的连续转换模式下,这2个标志应该没有区别。你为什么说用SCF作判断依据时发现没有完成?怎么发现没有完成?
作者: wuke0014    时间: 2007-4-26 10:07

这就是我不理解的地方,在SCF做判断时,通过开发板在线仿真(我们通过P&E连接PC和开发板),用F11键运行程序,发现程序停在 while((spi0sr & bm_spif)==0);这句上面动不了。换CCF就过去了啊。
作者: strongchen    时间: 2007-4-26 11:05

spi0sr 和 bm_spif 分别是什么?
作者: wuke0014    时间: 2007-4-26 11:59

不好意思写错了,那句是while((ATDSTA0 & BM_SCF)==0);BM_SCF定义为0x80。换成while((ATDSTA1 & BM_CCF6)==0)(我们只使用了第六通道)。就可以运行过去了
作者: strongchen    时间: 2007-4-26 17:17

你做一个最简单的project贴出来看看吧。
作者: wuke0014    时间: 2007-4-27 11:08

#include /* common defines and macros */
# include /* derivative information */
# include
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"


void initATD0 (void){
ATD0CTL2=BM_ADPU; /*使能ATD模块*/
ATD0CTL3= BM_S1C; /*单个通道转换*/
ATD0CTL4= BM_SRES8 | BM_PRS2 | BM_PRS0; /*这个语句仅仅是设置将时钟 12分频(可以设置这一位来进行采样频率设置,但是默认其他位为0,同时就设置了使用8位转换,第二阶段为2个ATD时钟周期,*/
ATD0CTL5= BM_SCAN | BM_CC | BM_CB; /* 使用连续转换,单通道采样,使用第6通道*/
}


void main(void) {
int i;
void initATD0();
DDRB=0xff;
i=ATD0STAT0;
while ((ATD0STAT0 & BM_SCF)==0); /*等待SCF位为1,也就是转换结束*/
PORTB=ATD0DR6H;

}
作者: strongchen    时间: 2007-4-27 14:04

调用initATD0函数时前面不要加void,否则函数不会执行,ATD也就没有被初始化和启动。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0