首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ATD中的SCF用法求教!

ATD中的SCF用法求教!

我在做ATD驱动时候,从单通道输入信号,连续转换模式(SCAN=1).在判断转换是否完成时,用SCF做判断依据时候发现总是没完成,最后用CCFx才行,那么SCF什么时候用呢?与CCFx区别在哪里??
SCF是一个序列转换完成的标志,而CCFx是一个通道完成转换的标志。在一个通道的连续转换模式下,这2个标志应该没有区别。你为什么说用SCF作判断依据时发现没有完成?怎么发现没有完成?
海纳百川  有容乃大
这就是我不理解的地方,在SCF做判断时,通过开发板在线仿真(我们通过P&E连接PC和开发板),用F11键运行程序,发现程序停在 while((spi0sr & bm_spif)==0);这句上面动不了。换CCF就过去了啊。
spi0sr 和 bm_spif 分别是什么?
海纳百川  有容乃大
不好意思写错了,那句是while((ATDSTA0 & BM_SCF)==0);BM_SCF定义为0x80。换成while((ATDSTA1 & BM_CCF6)==0)(我们只使用了第六通道)。就可以运行过去了
你做一个最简单的project贴出来看看吧。
海纳百川  有容乃大
#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;

}
调用initATD0函数时前面不要加void,否则函数不会执行,ATD也就没有被初始化和启动。
海纳百川  有容乃大
返回列表