历史上的今天
今天是: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 的方波。
#include
/* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */
#include "sci.h"
void ECTInit(void)
{
MCCTL_MODMC = 1; // 循环计数模式
MCCTL_MCEN = 1;
MCCTL_MCPR = 0;
MCCNT = 8192;
MCCTL_MCZI = 1; // Modulus Counter Underflow Interrupt Enable
TSCR1_TEN = 1; //timer enable
}
void main(void)
{
ECTInit();
DDRM_DDRM0 = 1;
EnableInterrupts;
for(;;)
{
_FEED_COP(); /* feeds the dog */
} /* loop forever */
}
interrupt VectorNumber_Vtimmdcu void ECT_ModulusDown_ISR(void)
{
MCFLG_MCZF = 1;
PTM_PTM0 = ~ PTM_PTM0;
}
史海拾趣
|
我在注册中断的时候碰到一个奇怪的问题。 先用 if(!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &EINT_IRQ, sizeof(UINT32), &EINT_SYSINTR, sizeof(UINT32), NULL)) { RETAILMSG(1, (TEXT(\"[kbd] ERROR: Failed to ...… 查看全部问答> |
|
本人有丰富的WindowCE应用开发经验,现承接Windows CE/Mobile平台上的应用外包项目,质量保证。有意者请与我联系: QQ:17632892 MSN:kerlw@hotmail.com… 查看全部问答> |
|
请教各位达人: 我想测试一下芯片中UART的Modem功能,请问应该如何测试?测试环境应该如何搭建啊?是不是需要通过串口和Modem相连?AT指令怎么测试?是通过串口发给Modem吗? 谢谢! … 查看全部问答> |
|
我用的是s3c2410的开发板,linux操作系统,我知道在arm下读写io要用/dev/port,但是 相应io的控制寄存器如何读写,是否也是用port文件,同样的方法? 下面直接读取的方法应该不行吧: 先用gpio(1-5)试试,这其中对应的引脚是GPG0 ...… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 有7月初参加过茁壮和富士通的高清机顶盒推广活动的兄弟举举手,MB86H61+iPanel3.0大家都有用起来了吗?300块的整转成本实现了吗?话说今年的高清整体转移启动年来着,都快年底了,目前动静不是 ...… 查看全部问答> |




