在线时间0 小时
UID130022
注册时间2009-5-22
NXP金币0
该用户从未签到
新手上路

- 积分
- 23
- 最后登录
- 1970-1-1
|
我是第一次用飞思卡尔的片子,也是第一次用到ECT模块,以前都用外部中断来判断所以理解这个ECT很郁闷,又是英文的资料;希望大家多多指点我这个新手,谢谢!
MC9S12XDG128,ECT的IC 工作流程个人理解如下,不知道是否正确望指点;
前提:上升沿中断,
一个上升沿触发中断==》ECT将主定时器TCNT内的数值,压入TC0缓冲器;
下面的程序目的是读取两次中断的周期,考虑了主定时器溢出,希望大家给点意见或是有不对的地方望指出谢谢,谢谢!程序能运行,中断也会来,就是还没验证;
- /*********************************************************
- ECT初始化
- **********************************************************/
- void ECT_init(void)
- {
- TSCR1=0x90; //主定时器使能,使用中断标志位快速清除
- TSCR2=0x07; //分频因子为128
- ICSYS=0x02; //IC缓冲使能
- TIOS=0; //通道设置为输入捕捉
- TCTL4=0x01; //采用上升,下降沿触发
- TIE=0x01; //通道0开中断
- }
- /*****************************************************
- ECT_IC0中断子程序
- ******************************************************/
- void interrupt 8 IC0_int(void)
- {
- TFLG1_C0F=1; //清零IC0中断标志位
- if(TFLG2_TOF)
- {
- TIMER=TCNT;
- speed_time_1=TC0; //取定时器0数值
- speed_time=speed_time_1+(0xffff-speed_time_10); //取前后中断时间差,有溢出考虑
- speed_time_10=speed_time_1; //更新历史中断时间数据
- }
- else if(!TFLG2_TOF)
- {
- speed_time_1=TC0; //取定时器0数值
- speed_time=speed_time_1-speed_time_10; //取前后中断时间差,无溢出考虑
- speed_time_10=speed_time_1; //更新历史中断时间数据
- }
- }
|
|