NEC V850 之 定时器TMM0

发布者:开国古泉最新更新时间:2016-10-07 来源: eefocus关键字:NEC  V850  定时器TMM0 手机看文章 扫描二维码
随时随地手机看文章
时钟的事情搞定了,下面就是和时间有关系的定时器了。看了下有3个定时器分别是AA,AB,M。其中M是最简单的一个,只有一个功能就是计数。感觉和STM32的systick有异曲同工之妙。就是为操作系统留的心跳时钟啊。所以先搞他吧。

先说说这个TMM的时钟特性吧,有一个16位的比较寄存器(TM0CMP0),最大计数范围就是0~65535了。另外定时器TMM0不支持自动重装初值,所以在中断服务函数里除了要清标志位还要重新装入初值。然后这个定时器机器简单只有一个可屏蔽中断就是溢出中断。

下面说下他的计数时间的计算方法。关于系统时钟和内部设备时钟在上一篇博文里说过了,系统时钟如果是32MHz,那么内部设备时钟也是32MHz,如果想分频只有在具体的外设分频器处分频。

  系统时钟是32MHz;

  TMM0分频系数为不分频,则TMM0的时钟是32MHz;

  一个时钟定时器记一次数,则记一次数的时间是1 / 32MHz = 0.03125 us;

 假如我现在需要定时1ms就是1000us,需要的计数次数就是 1000us / 0.03125us = 32000 次。

所以应该给比较寄存器(TM0CMP0)赋值(32000 - 1)次,因为在定时器计时开始时需要消耗3~4个时钟周期,所以我们不减去1,直接给比较寄存器赋值32000次,做为误差补偿,但是随着计时时长的增加,误差会在一定程度上积累。大家要根据具体需要来进行设置校准。

现在我们知道在系统时钟为32MHz时,TMM0不分频的最大计时为65536 * 0.03125 = 2.048 ms,如果我们需要定时的时长比较长,就需要对TMM0的时钟进行分频,如果我们需要的定时时长为1s,

  系统时钟是32MHz;

  TMM0分频系数设置为512分频,则TMM0的时钟是 32000000Hz  / 512 = 62500Hz;

  定时器记一次数的时间就是  1 / 62500Hz = 0.000016s = 16 us;

  我们需要的定时时长是1s,需要的计数次数为 1s = 1000000us / 16us = 62500 次。

定时器的定时范围是有最大值的,同时要注意的是,他也是有最小值的,这就是他的I/O口翻转速率,经过测试,70f3630这款MCU在定时器TMM0下,最小计数单元为5us,如果再低就意味着I/O口的翻转速率更高,则会得到比较大的误差值,下面有一个对照表来列举一组测试说明,并会附图。

 

 计算定时时长  比较寄存器(TM0CMP0)值  实际测量时长  备注
 1us  32      (TMM0 = fxx)  2.0625us  附图1
 5us  160    (TMM0 = fxx)  5.063us  附图2
 10us  320    (TMM0 = fxx)  10.031us  
 30us  960    (TMM0 = fxx)  30.001us  
 50us  1600  (TMM0 = fxx)  50.06us  
 1ms  32000(TMM0 = fxx)  1.000ms  附图3
 1s  62500(TMM0 = fxx/512)  999.9ms  
 上面这个表说明了,在定时时长很小的时候误差很大,在定时时长很大的时候,虽然相对误差小,但是也有比较大的绝对误差,所以这其中的数值补偿要根据实际情况具体问题具体分析。下面来看下附图:

 

NEC V850 之 定时器TMM0 - 豆子 - 代码豆子
NEC V850 之 定时器TMM0 - 豆子 - 代码豆子
NEC V850 之 定时器TMM0 - 豆子 - 代码豆子
 
 说完了理论,来说说代码部分。操作TMM0需要用到3个寄存器分别是
  •  可屏蔽中断控制寄存器(定时器M )       TM0EQIC0
  •  TMM0 比较寄存器0                                   TM0CMP0
  •  TMM0 控制寄存器0                                   TM0CTL0

 程序操作上有3部分,分别是 开始定时器 , 关闭定时器 , 定时器初始化。

  • 开始定时器(TMM0_Start)
    1. 清TMM0中断标志位,设置寄存器 TM0EQIC0 的第7位 TM0EQIF0 为 0 ;
    2. 允许响应TMM0中断,设置寄存器 TM0EQIC0 的第6位 TM0EQMK0 为 0;
    3. 开定时器使能端,设置寄存器TM0CTL0 的第7位 TM0CE 为 1 。        
  • 关闭定时器(TMM0_Stop)
    1. 关定时器使能端,设置寄存器TM0CTL0 的第7位 TM0CE 为 0;
    2. 禁止响应TMM0中断,设置寄存器 TM0EQIC0 的第6位 TM0EQMK0 为 1;
    3. 清TMM0中断标志位,设置寄存器 TM0EQIC0 的第7位 TM0EQIF0 为 0 。
  • 定时器初始化(TMM0_Init)
    1. 关闭定时器,执行TMM0_Stop;
    2. 设置中断优先级,设置寄存器 TM0EQIC0 的后3位 ,确定TMM0的中断优先级;
    3. 设置定时器分频系数,设置寄存器 TM0CTL0 的后3位,确定TMM0的运行时钟;
    4. 设置比较寄存器初值,设置寄存器 TM0CMP0的值,确定触发溢出中断的计数次数。

有了上面的准备,下面我们在main函数里先初始化定时器然后再调用开始定时器,一定不要忘记开总中断;然后在中断服务程序里写入用户代码加上重新赋初值和清标志位的操作就可以了,这样定时器就能够正常工作了,下面是部分代码,请参阅:


代码出处:timer.c

/*******************************************************************************
* Function Name : TMM0_Start
* Description : 开始TMMO计数
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void TMM0_Start( void )
{
TM0EQIF0 = 0; // 设置TM0EQIC0 的第7位中断标志位位 0 ,清除定时器M0的中断响应标志
TM0EQMK0 = 0; // 设置TM0EQIC0 的第6位中断屏蔽位为 0 ,允许产生定时器M0中断
TM0CE = 1; // 设置TM0CTL0 的最高位TM0CE为 1 ,定时器计数启动
}

/*******************************************************************************
* Function Name : TMM0_Stop
* Description : 停止TMM0计数
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void TMM0_Stop( void )
{
TM0CE = 0; // 设置TM0CTL0 的最高位TM0CE为 0 ,禁止定时器时钟启动
TM0EQMK0 = 1; // 设置TM0EQIC0 的第6位中断屏蔽位为 1 ,禁止产生定时器M0中断
TM0EQIF0 = 0; // 设置TM0EQIC0 的第7位中断标志位位 0 ,清除定时器M0的中断响应标志
}

/*******************************************************************************
* Function Name : TMM0_Init
* Description : TMM0初始化
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void TMM0_Init( void )
{
TMM0_Stop(); // 首先禁止定时器

TM0EQIC0 |= 0x07; // 设置TM0EQIC0 的低3位 中断优先级值 全为1,为最低中断优先级
TM0CTL0 = TMM_INTERNAL_CLOCK0 ; // 设置TMOCTL0 的低3位TMM0预分频器值 全为0 ,不分频
TM0CMP0 = 32000; // 设置TM0CMP0 定时器计数比较寄存器 的值为32000,初值定时为1ms
}

/*******************************************************************************
* Function Name : TMM0_ChangeTimerCondition
* Description : 修改定时器计数变量值
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void TMM0_ChangeTimerCondition( unsigned short regvalue )
{
TM0CMP0 = regvalue; // 设置TM0CMP0 定时器计数比较寄存器
}

/*******************************************************************************
* Function Name : MD_INTTM0EQ0
* Description : 定时器TMM0溢出中断服务函数
* Input : None
* Output : None
* Return : None
*******************************************************************************/
#pragma vector = INTTM0EQ0_vector
__interrupt void MD_INTTM0EQ0(void)
{
P9L_bit.no4 = ~P9L_bit.no4 ; // 端口P94翻转,LED闪烁

TM0CMP0 = 32000; // 定时器TMM0不支持自动重装初值,一定要在执行完用户程序后重装初值
TM0EQIF0 = 0; // 清除定时器中断标志位
}

在高亮处更改TMM0分频系数。

代码出处:main.c

void main( void )
{
SystemClkInit(); // 初始化系统时钟为32MHz
/* PCL setting */
PCLM = CG_PCL_DISABLE; // 关闭可编程时钟输出

__DI(); // 关闭总中断
PMC9L_bit.no4 = 0 ; // 设置P94为输入输出口模式
PM9L_bit.no4 = 0 ; // 设置P94端口方向为输出
TMM0_Init(); // 定时器TMM0初始化
__EI(); // 打开总中断

TMM0_Start(); // 定时器TMM0开始计数

while (1);
}

最后把相关寄存器的datasheet截图上传下:

NEC V850 之 定时器TMM0 - 豆子 - 代码豆子
NEC V850 之 定时器TMM0 - 豆子 - 代码豆子
 
NEC V850 之 定时器TMM0 - 豆子 - 代码豆子

关键字:NEC  V850  定时器TMM0 引用地址:NEC V850 之 定时器TMM0

上一篇:NEC V850 之 Key Interrupt
下一篇:NEC V850 之 系统时钟及内部设备时钟

推荐阅读最新更新时间:2024-03-16 15:13

NEC超解像技术可高倍率清晰放大监控影像
  NEC成功开发一项超解像技术,可将摄影监视器拍摄到如脸部或是车牌等小尺寸影像,在将影像放大的同时保持其清晰鲜明的影像品质。本技术可在大范围的监控网络中,清楚辨识每一个微小物件,以达到更完整坚固的公共安全防护。   以往为了辨识监视器拍摄下来的小尺寸影像,皆从摄影监视器所录制的影片中撷取多张影像,透过解像技术提高分辨率后,将影像放大加以辨识。然而以现有解像技术来说,若将照片放大2~3倍以上(即像素的4~9倍以上),影像会随着放大而失去清晰度,变得模糊难以辨识。为了兼顾大范围监控与其监控影像的清晰度,能够清楚放大影像的技术实为目前监控领域亟欲寻求的解决方案。   本次NEC开发的超解像技术针对脸部或车牌等不同种类的被摄物,预先
[安防电子]
红外通信—红外遥控器NEC解码程序
单片机芯片使用的stc89c52;找到要用的部分的的原理图即可.这是一整个单片机开发板的电路图其他的忽略. /** *********************************************************************************************** * @file main.c * @author xr * @date 2014年3月31日10:26:47 * @version V1.2.3 * @brief 红外通信 NEC协议进行红外遥控器解码 显示用户码和键码到数码管上 * @note 单片机STC89C52RC MCU 晶振
[单片机]
联想牵手NEC价值何在?
    联想集团(0992.HK: 行情)昨天释放出购买IBM(IBM.N: 行情)低端服务器业务的信号,今天又出现联想或与日本NEC(6701.T: 行情)成立智能手机合资企业的消息。尽管我非常看好联想收购IBM服务器业务,而与NEC的合作看起来又回到了老路上--收购几乎没有价值而且接近灭亡的全球品牌。 报道称,联想与NEC就成立智能手机合资企业的大多数条款达成共识,NEC的多数手机业务将纳入其中。谈判已经进入最后阶段,本月晚些时候可能宣布交易。有关双方合作的报道最早出现在4月,称NEC寻求将手机业务卖给联想。联想发布声明称,正就一潜在成立合资公司事项与一方进行初步磋商,关于潜在交易的重要条款尚未达成,且公司尚未就潜在交易签立任何
[手机便携]
爱可信中国与NEC电子共推智能手机
       中国北京、日本川崎,2009年2月10日,无线数据解决方案提供商爱可信公司( ACCESS )与半导体解决方案提供商NEC电子今天联合宣布,双方共同研发并推出了一款面向CDMA智能手机的参考设计方案。       该参考设计方案基于爱可信商用级平台解决放案ACCESS Linux PlatformTM mini(简称ALP mini)和NEC电子的MP201应用处理器,适用于CDMA2000 1x网络,支持2.5G/2.75G/3G无线技术及触摸屏、全功能互联网浏览等功能。此外,该解决方案还包括一个完整的开发工具包,以帮助手机厂商、设计公司等有效缩短新产品上市周期。       爱可信中国总裁兼首席执行官苏法
[手机便携]
汽车电子半导体厂商寄语2010年
随着2009年我国小排量汽车购置税的下调及汽车家电下乡掀起的汽车产业振兴计划实行一年以来,我们欣喜地看到,我国的汽车产量及销售量均已跃居世界首位,相对于之前提出的2015年成为汽车第一大国提高了5年时间。 作为半导体厂商来讲,汽车电子是一个无法放弃的市场,一方面行业周期性不强出货量比较稳定,另外较高的行业进入门槛也决定了产品的毛利润可以偏高。在中国汽车产业高歌猛奏的同时,国外汽车业陷入了严重的低迷期,因此,越来越多的半导体厂商把中国视为其汽车利润来源大户。 并且,由于中国政府正在制定的产业升级计划及新能源汽车的鼓励,国外厂商也越来越愿意配合中国整车厂的研发,而不再只是一味的直接出口到中国。 那么对于2
[汽车电子]
汽车电子半导体厂商寄语2010年
ANADIGICS助推NEC MEDIAS智能手机
2012年5月8日,新泽西州沃伦讯 —— ANADIGICS, Inc. (纳斯达克股票代码:ANAD) 是全球首屈一指的射频 (RF) 解决方案供应商。该公司今日宣布开始为NEC卡西欧移动通信公司 (NEC CASIO Mobile Communications) 的新型MEDIAS IS11N智能手机批量供应AWT6621第四代低功耗高效率 (HELP™4) 功率放大器 (PA)。NEC MEDIAS智能手机采用3.6英寸显示屏、800万像素摄像头以及Android 2.3 Gingerbread操作系统。 ANADIGICS全球销售高级副总裁Michael Canonico表示:“NEC卡西欧移动通信公司为其MEDIAS
[手机便携]
NEC电子推出集成了LVDS接口的超解像系统LSI
NEC电子日前完成了可支持在数字电视及电脑显示器等平板显示器及投影仪中广泛使用的LVDS接口的超解像系统LSI“µPD9281GC”,并将于即日起开始发售样品。新产品的单个样品价格为2000日元,预计自2010年2月起开始批量生产,月产规模可达10万个。 近几年,在平板显示器及投影仪等显示设备中,提高图像显示的解像度已经成为提高产品竞争力的附加价值之一。而DVD等媒体以及一部分地面数字广播中还残存着标清画质,视频源和最新的AV设备的解像度之间有着巨大的差距。 标清画质(像素640×480)的视频与全高清(像素1920×1080)显示器之间存在着6倍左右的解像度差距,单纯地对视频进行扩大,显示的
[手机便携]
<font color='red'>NEC</font>电子推出集成了LVDS接口的超解像系统LSI
2009NEC创新解决方案展在沪隆重举行
2009年7月3日,以“携手持续创新 共建和谐未来” 为主题的21世纪国际企业家上海论坛-NEC专场暨2009NEC创新解决方案展在上海环球金融中心隆重举行。 开幕式上,NEC全球总裁矢野薰做了题为《和您共同实现的商务的创新,为了追求对人与地球友爱的信息社会》的主旨演讲。并介绍了NEC自1972起在华业务活动发展历程。他表示,NEC希望为和谐社会尽一份力,始终坚持不断创新这一原则,利用先进技术向客户提供综合解决方案,完善社会基础设施,实现安心、安全、节能的社会。此外,上海市经济和信息化委员会副主任金兴明以及赛迪顾问股份有限公司执行总裁李峻也发表了精彩演讲。 当天,2009 NEC创新解决方案展也同台亮相。
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved