ECT的IC理解。再次更新程序,另昨天发现一个代码编辑器和大家分享下;
- UID
- 805034
|
ECT的IC理解。再次更新程序,另昨天发现一个代码编辑器和大家分享下;
本帖最后由 mcu2007 于 2010-2-3 09:17 编辑
EditMinus最初是出于仿EditPlus编辑软件的程序员编辑器,它拥有类似EditPlus的功能,多语言代码的语法高亮显示,无限制的Undo/Redo功能,类似的支持正规表达式的查找/替换功能,更加迅速的文件中查找功能;也包含了增加资源管理器右键菜单等功能.EditMinus目前能够提供C/C++,Java和Python语言代码的语法高亮显示功能及代码折叠功能.在目前EditMinus的插件基础上也能够提供额外的扩展功能,例如C/C++代码的美化,Doxygen注释等功能
editminus.rar (2.14 MB)
我是第一次用飞思卡尔的片子,也是第一次用到ECT模块,以前都用外部中断来判断所以理解这个ECT很郁闷,又是英文的资料;希望大家多多指点我这个新手,谢谢!
MC9S12XDG128,ECT的IC 工作流程个人理解如下,不知道是否正确望指点;
前提:上升沿中断,
一个上升沿触发中断==》ECT将主定时器TCNT内的数值,压入TC0缓冲器;
下面的程序目的是读取两次中断的周期,考虑了主定时器溢出,希望大家给点意见或是有不对的地方望指出谢谢,谢谢!程序能运行中断也会来,就是还没验证;- /*********************************************************
- ECT初始化
- **********************************************************/
- void ECT_init(void)
- {
- TSCR1=0x80; //主定时器使能,不使用中断标志位快速清除
- TSCR2=0x07; //分频因子为128
- ICSYS=0x02; //IC缓冲使能
- TIOS=0; //通道设置为输入捕捉
- TCTL4=0x01; //采用上升,下降沿触发
- TIE=0x01; //通道0开中断
- }
- /*****************************************************
- main主程序
- ******************************************************/
- void main(void)
- {
- for(;;)
- {
- ;
- }
- }
- /*****************************************************
- ECT_IC0中断子程序
- ******************************************************/
- #pragma CODE_SEG __NEAR_SEG NON_BANKED
- void interrupt 8 IC0_int(void)
- {
- TFLG1_C0F=1; //清零IC0中断标志位
- speed_time_1=TC0; //取定时器0数值
- speed_time=speed_time_1-speed_time_10; //取前后中断时间差,
- speed_time_10=speed_time_1; //更新历史中断时间数据
- }
复制代码 |
|
|
|
|
|
- UID
- 789415
- 性别
- 男
|
|
|
|
|
|
- UID
- 789415
- 性别
- 男
|
本帖最后由 yumuzi 于 2010-2-1 09:07 编辑
你用的什么编译器哦,还有行数
————
论坛里的插入代码功能~# 3# whc1223 |
|
|
|
|
|
- UID
- 804528
|
我记得TC0的数值是发生有效边沿时自动保存的吧
TIMER=TCNT; 好像没什么意义
还有 你的中断是不是东西多了点? |
-
1
评分次数
-
|
|
|
|
|
- UID
- 187580
- 性别
- 男
|
给你举个例子吧,你的基本功不太好。
两个被申明为无符号的数据时,其可以得到其差值。如a =10; b=65530; 则a-b = 16,
所以,你的溢出不用考虑,即使有真正的溢出,你的程序也做不到这一点。比如连续两次的上升沿中断,定时器溢出两次。 |
-
1
评分次数
-
个人BLOG:http://blog.eccn.com/u/107300/index.htm |
|
|
|
|
|
- UID
- 805034
|
本帖最后由 mcu2007 于 2010-2-1 10:39 编辑
4# amixme
谢谢 amixme 的回复,TC0的确是自动压入缓存的,因为我用了主定时器的溢出标志位,所以用快速清零的方式来处理这个标志位了;
呵呵,这个是我的示范程序,那段处理程序应该是要放主程序里的,谢谢 |
|
|
|
|
|
- UID
- 805034
|
本帖最后由 mcu2007 于 2010-2-1 11:04 编辑 给你举个例子吧,你的基本功不太好。
两个被申明为无符号的数据时,其可以得到其差值。如a =10; b=65530; 则a-b = 16,
所以,你的溢出不用考虑,即使有真正的溢出,你的程序也做不到这一点。比如连续两次的上升沿 ...
康桥人 发表于 2010-1-31 13:49 谢谢版主关心,关于C语言我的确不扎实,呵呵,看的谭的C,有关你提到的这个无符号数的减法,我还真是没注意,要补补要注意细节,谢谢!
另想请教版主,C语言我用了才半年多的时间,说实话比较多的地方不太了解,不知道版主能否给小弟一些意见,主要是需要往哪方面提升,我以前是学的机械自动化的呵呵;
现在写程序主要是用if...else 以及#define struct 等等,指针用的也很少,但是在头文件里我看到很多不太清楚的东西,相当迷茫啊!
溢出问题我只是考虑一次,应该可以通过改变分频比等来限制两次上升沿中断的时间不超过主定时器的两次溢出(当然包括性比较大), |
|
|
|
|
|
- UID
- 805034
|
你用的什么编译器哦,还有行数
————
论坛里的插入代码功能~# 3# whc1223
whc1223 发表于 2010-1-29 14:36 呵呵 我也想要有行号啊,可惜还没找到啊,这个行号是论坛的 呵呵 |
|
|
|
|
|
- UID
- 805034
|
我更喜欢当外部中断来用
whc1223 发表于 2010-1-29 14:36 好主意啊,我真是不会变通啊; |
|
|
|
|
|
- UID
- 187580
- 性别
- 男
|
本帖最后由 康桥人 于 2010-2-1 14:15 编辑
当你的程序达到一定有数量时,你中断很有可能响应的不够及时,所以外部中断是不可取的做法。
对于C语言的基本功而言:积小流而成江河。程序写多了,自然就变通了,这是看书所不可能达到的境界。当某一天你的有效程序达到1万行时,功力自然就到了。虽然我有一段时间没有动手写程序了,但是基本的东西还记得.
还有就是细微处见其精神,刚开始写程序要精益求精,你的工程不能有"warning",warning都是程序的隐患 |
个人BLOG:http://blog.eccn.com/u/107300/index.htm |
|
|
|
|
|
- UID
- 805034
|
当你的程序达到一定有数量时,你中断很有可能响应的不够及时,所以外部中断是不可取的做法。
对于C语言的基本功而言:积小流而成江河。程序写多了,自然就变通了,这是看书所不可能达到的境界。当某一天你的有效程序 ...
康桥人 发表于 2010-2-1 14:10 谢谢康桥人的指点;
康桥人的意思是ECT还是要当ECT来用的,还是另有其他比较合理的方法来处理这种周期捕捉; |
|
|
|
|
|
- UID
- 187580
- 性别
- 男
|
如果ECT可以被中断替代,那为什么还有ECT呢,不过,在程序量不大,CPU负载不重的情况下,用外部中断也是可以做的,而且效果一样。程序量比较大,就不好说了 |
个人BLOG:http://blog.eccn.com/u/107300/index.htm |
|
|
|
|
|
- UID
- 805034
|
如果ECT可以被中断替代,那为什么还有ECT呢,不过,在程序量不大,CPU负载不重的情况下,用外部中断也是可以做的,而且效果一样。程序量比较大,就不好说了
康桥人 发表于 2010-2-1 18:01 我想ECT是外部中断的加强版吧,在外部中断的基础上加上定时器自动缓存,直接从硬件上记录中断到来的时间,具有很好的实时性,我想在软件处理上也省不少,也可以说是节省了CPU 的资源方便了设计人员;好比有些MCU本身就自带硬件算术运算电路, |
|
|
|
|
|