- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ECT模块学习心得
【电子设计吧】 与您共享电子设计的乐趣
ECT模块学习心得
1 TCNT
1 TCNT
11、TTCCNNTT寄存器
HCS12 ECT的核心是一个16位自由运行计数器(TCNT),所有输入捕捉和输出
比较功能的计时信息都来源于TCNT,当定时器系统启用时,通过设置TSCR1的TEN
位,计数器从$0000开始,每经过一个模块时钟加1,直到加到$FFFF,然后自动溢
出为$0000并继续计数.16位自由记数器的当前值保存在两个8位寄存器中,高的
存在TCNTH,低的存在TCNTL中.综合这两个寄存器就形成TCNT.定义TCNT的话,
要定义为word型。
【说明】这里的模块时钟指的是,经过分频后的ECT模块所用的时钟,分频
系数在TSCR2的低三位。TCNT是一个递增的计数器,有很多人一直把它当做是
递减的计数器。总之,TCNT就是对ECT时钟进行计数的。
2 TCn
2 TCn
22、TTCCnn 寄存器
TCn寄存器是一个数据寄存器,用来存放数据的。如果工作在IC模式下,那
么TCn寄存器用于锁存出现捕捉事件时的TCNT的值,读取后可以判断出有效事
件是在什么时候发生的;如果工作在OC模式下,当TCNT的值和写入TCn寄存器
的值相等时,就触发一次中断。
【总结】总之,TCn寄存器在IC模式下是用来READ的,在OC模式下是用来
WRITE的。
【说明】IC通道组是分类的,IC[0..3]是缓冲通道,IC[4..7]是非缓冲通道。
缓冲通道的TCn寄存器中只能记忆当前的值,下一次有效事件触发后就将前一个
值覆盖;非缓冲通道多了一个保持寄存器,它可以记忆两次有效事件下的TCNT
的值。
3
3
33、输入捕捉步骤
初始化函数
TIOS选择工作方式为IC
【电子设计吧】 与您共享电子设计的乐趣
TCTLx设置对应位输入捕捉的方式(x=3、4,高位是3,低位是4)
TSCRx控制寄存器设置,包括工作使能、确定工作方式(x=1)、中断允许、预
分频
TIE中断使能
中断函数
清除标志位TFLG1
处理函数
【功能】电机模块中用作测速,摄像头模块中判断行场信号
4
4
44、输出比较步骤
初始化函数
TIOS选择工作方式为OC
TCx通道x的OC寄存器赋初值,经过N秒后进入第一次中断
TCTLx设置对应位输入捕捉的方式(x=1、2,高四位是1,低四位是2)
TSCRx控制寄存器设置,包括工作使能、确定工作方式(x=1)、中断允许、预
分频
TIE中断使能
中断函数
清除标志位TFLG1
重新赋初值TCx
【总结】这里说明几点个人调试经验总结:
在初始化函数中,给TCn赋的初值是来确定单片机经过多长时间进入第一次
中断,进入中断以后,这段话就失去了它的作用。
经过PLL倍频到总线时钟后,再分频到ECT模块时钟,比如总线频率为24M,
分频系数为64,那么ECT模块的时钟周期为2.67us,如果要计时1000us的话,
那么TCNT要计数375个数,所以TCn的值要始终比TCNT大375,这个可以在中
断里面处理。同理,要计时10ms,那么TCNT要计数3750次,要计时100ms,
【电子设计吧】 与您共享电子设计的乐趣
那么TCNT要计数37500次。如果user需要其他的定时,可以自己根据时钟来
计算,我赋一个调试好的程序吧。
附:
///
//功能说明:利用PT0的输出比较功能,定时进入中断
// 利用PORTB显示定时的时间
//程序设计:电子设计吧
//设计时间:2010.01.15
////
#include hidef.h /*common defines andmacros*/
#include mc9s12dg128.h /*derivative information */
#pragmaLINK_INFO DERIVATIVEmc9s12dg128b
//利用定时器输出比较功能产生定时中断
//变量定义//
static unsigned int waittime =0;
//时钟初始化//
void PLL_Init(void) //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{ //锁相环时钟=2*16*(2+1)/(1+
文档评论(0)