历史上的今天
返回首页

历史上的今天

今天是:2025年08月10日(星期日)

正在发生

2021年08月10日 | MC9S12XET256之ECT模块(6)

2021-08-10 来源:eefocus

实验6:模数递减计数器MCCNT和定时中断

ECT 模块包含一个16位的模数递减计数器计数寄存器MCCNT。MCCNT的输入时钟信号由BUSCLOCK 分频得到,分频系数有四种选择。每次时钟到来后MCCNT自动减1。当MDC计数值减到0后,立即置位模数递减计数器标志寄存器MCFLG中的中断标志MCZF,若MCCTL中的中断允许位MCZI=1,则向CPU发出中断请求,向MCFLG的MCZF位写1将清除该标志。


MCCNT有两种工作方式:单次计数方式和循环(连续)工作方式。由模数递减计数器控制寄存器MCCTL中的模数模式允许位MODMC决定当前工作方式。


l 当MODMC=0时为单次计数方式,计数值减到$0000后便停止计数。如果再次将定时常数直接写入计数寄存器MCCNT,MDC便又开始一次递减计数,减到0后停止。


l 当MODMC=1时为循环(连续)工作方式,计数值减到$0000后,自动从加载寄存器加载定时常数,并开始新一轮递减计数。

MCCNT寄存器(Modulus Down-Counter Count Register)


如前所述,MCCNT为一个可置初值的递减计数器。当递减到0后可以产生中断信号。


图 1 MCCNT寄存器


MCCTL寄存器(Modulus Down-Counter Control Register)


MCZI 位是 Modulus Counter Underflow Interrupt Enable 的缩写。MCZI = 1 时使能中断。


MODMC位是 Modulus Mode Enable 的缩写。MODMC = 0 表示单次计数模式。


MODMC = 1 表示循环计数模式。


RDMCL位是 Read Modulus Down-Counter Load的缩写。RDMCL = 0 时读MCCNT 读出的是MCCNT 的当前值。RDMCL = 1 时读 MCCNT 读的是加载寄存器的值。所谓加载寄存器存放的是当 MCCNT 递减到0后重新加载的那个值。加载寄存器和MCCNT公用一个地址,通过RDMCL 来确定当前读的是哪个值。


FLMC位是 Force Load Register into the Modulus Counter Count Register的缩写。向 ELMC 写 1 强制 将加载寄存器的值加载到 MCCNT。


MCEN位是 Modulus Down-Counter Enable的缩写。MCEN = 1 表示使能 MCCNT。

MCPR1, MCPR0位是 Modulus Counter Prescaler select的缩写。确定分频系数。当MCPR1、MCPR0 组成的两位2进制数为N时,表示分频系数为2^N。

 

图 2 MCCTL寄存器


MCFLG寄存器(Modulus Down-Counter FLAG Register)

MCZF — Modulus Counter Underflow Flag


图 3 MCFLG寄存器


下面的例子产生 500Hz 的方波。


  1. #include       /* common defines and macros */  

  2. #include "derivative.h"      /* derivative-specific definitions */  

  3. #include "sci.h"  

  4.   

  5. void ECTInit(void)   

  6. {  

  7.     MCCTL_MODMC = 1; // 循环计数模式  

  8.     MCCTL_MCEN = 1;  

  9.       

  10.     MCCTL_MCPR = 0;  

  11.     MCCNT = 8192;  

  12.   

  13.     MCCTL_MCZI = 1; // Modulus Counter Underflow Interrupt Enable  

  14.     TSCR1_TEN  = 1;  //timer enable      

  15. }  

  16. void main(void)   

  17. {  

  18.     ECTInit();  

  19.     DDRM_DDRM0 = 1;  

  20.     EnableInterrupts;  

  21.       

  22.     for(;;)   

  23.     {  

  24.         _FEED_COP(); /* feeds the dog */  

  25.     } /* loop forever */  

  26. }  

  27.                   

  28. interrupt VectorNumber_Vtimmdcu void ECT_ModulusDown_ISR(void)   

  29. {  

  30.     MCFLG_MCZF = 1;  

  31.     PTM_PTM0 = ~ PTM_PTM0;  

  32. }                  

  33.    


 

推荐阅读

史海拾趣

友盟(AP)公司的发展小趣事

在市场拓展方面,友盟(AP)公司也展现出了强大的实力。公司通过线上线下相结合的方式,积极开展市场推广活动,扩大品牌知名度和影响力。同时,友盟还积极参与行业交流和合作,与业界同行共同探讨行业发展趋势和未来发展方向。这些努力不仅提升了友盟在行业内的地位,也为其未来的发展奠定了坚实的基础。

Aerotronics Marketing Inc公司的发展小趣事

Aerotronics Marketing Inc公司在市场定位上独具慧眼,准确抓住了电子行业中无人机市场的增长趋势。公司制定了一系列精准的营销策略,包括线上线下推广、行业展会展示、合作伙伴计划等,有效提升了品牌知名度和市场占有率。同时,公司还注重客户关系管理,通过提供优质的售后服务和技术支持,赢得了客户的信任和忠诚。

Electro Technik Industries公司的发展小趣事

随着电子技术的快速发展,ETI意识到只有不断创新才能在竞争中立于不败之地。公司加大了对研发的投入,积极引进国内外先进技术,并鼓励员工提出创新性的想法。在一次偶然的实验中,ETI的研发团队成功研发出了一种具有高效能、低功耗特点的电子元器件,这一突破性的技术成果迅速获得了市场的认可,为ETI带来了可观的收益。

Deltron公司的发展小趣事

在竞争激烈的电子市场中,品质是Deltron公司的生命线。公司始终坚持以客户为中心,注重产品质量和服务的提升。通过严格的质量控制体系和完善的售后服务,Deltron赢得了客户的信任和好评。同时,公司还积极参与行业标准的制定和修订工作,推动行业向更高水平发展。

ADATA公司的发展小趣事

在竞争激烈的电子市场中,品质是Deltron公司的生命线。公司始终坚持以客户为中心,注重产品质量和服务的提升。通过严格的质量控制体系和完善的售后服务,Deltron赢得了客户的信任和好评。同时,公司还积极参与行业标准的制定和修订工作,推动行业向更高水平发展。

Alpha & Omega Semiconductor(万国半导体)公司的发展小趣事

Deltron公司成立于XXXX年,初期以生产基础电子元器件为主。创始人XXX凭借其对电子技术的深刻理解和对市场趋势的敏锐洞察,带领团队进行了一系列技术创新。通过引进先进的生产设备和研发技术,Deltron成功开发出了一系列具有竞争力的产品,逐渐在电子行业中崭露头角。

问答坊 | AI 解惑

关于SD卡的MBR问题

有的SD卡的第0 sector是MBR, 有的SD卡的第0 sector是DBR,请问如何区分两者?…

查看全部问答>

InterruptInitialize 出错问题~!

我在注册中断的时候碰到一个奇怪的问题。 先用 if(!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &EINT_IRQ, sizeof(UINT32), &EINT_SYSINTR, sizeof(UINT32), NULL)) {    RETAILMSG(1, (TEXT(\"[kbd] ERROR:  Failed to ...…

查看全部问答>

承接WinCE外包项目

本人有丰富的WindowCE应用开发经验,现承接Windows CE/Mobile平台上的应用外包项目,质量保证。有意者请与我联系: QQ:17632892 MSN:kerlw@hotmail.com…

查看全部问答>

请教UART控制器中Modem功能的测试(急)

请教各位达人: 我想测试一下芯片中UART的Modem功能,请问应该如何测试?测试环境应该如何搭建啊?是不是需要通过串口和Modem相连?AT指令怎么测试?是通过串口发给Modem吗? 谢谢! …

查看全部问答>

数据库和嵌入式

我们学校就要分方向了。。。有数据库和嵌入式。。。 请各位大虾指点下。。这两个方向的应用方面和现今社会需求那方面的人才要些。。。。 清大虾们给我点小小的建议。。。谢谢!!!!!!!…

查看全部问答>

触摸品伪驱动的开发

我需要实现全屏手写的功能,目前为止得到的方法就是要自己写一个触摸屏的驱动,因为系统本身就有一个touch.dll,所以我其实只是做了一个包装,把touch.dll的函数用GetProcAddress得到后在调用,只是修改了TouchPanelEnable函数,可是编译出来的dll ...…

查看全部问答>

请教linux下读写 gpio端口控制寄存器的方法

我用的是s3c2410的开发板,linux操作系统,我知道在arm下读写io要用/dev/port,但是 相应io的控制寄存器如何读写,是否也是用port文件,同样的方法? 下面直接读取的方法应该不行吧:     先用gpio(1-5)试试,这其中对应的引脚是GPG0 ...…

查看全部问答>

紧急求助

我想问一下,如果直接输出3.3V,那么是不是就可以直接用纽扣电池,不需要再用TPS70633芯片转换了呀…

查看全部问答>

快比赛了

本帖最后由 paulhyde 于 2014-9-15 09:06 编辑 就快要比赛了,可是却不知道该干什么了。不知道大家现在都在干什么啊?今天看了部电影,可之后突然感觉,心里很是放心不下啊  …

查看全部问答>

这套号称最低成本的方案,哪些兄弟再用啊

本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 有7月初参加过茁壮和富士通的高清机顶盒推广活动的兄弟举举手,MB86H61+iPanel3.0大家都有用起来了吗?300块的整转成本实现了吗?话说今年的高清整体转移启动年来着,都快年底了,目前动静不是 ...…

查看全部问答>