首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
» UPD78F0411 16 位定时器/事件计数器00 的操作(3)
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
UPD78F0411 16 位定时器/事件计数器00 的操作(3)
发短消息
加为好友
我是MT
当前离线
UID
1023166
帖子
6651
精华
0
积分
3328
阅读权限
90
来自
燕山大学
在线时间
230 小时
注册时间
2013-12-19
最后登录
2016-1-5
论坛元老
UID
1023166
性别
男
来自
燕山大学
1
#
打印
字体大小:
t
T
我是MT
发表于 2014-3-5 19:18
|
只看该作者
UPD78F0411 16 位定时器/事件计数器00 的操作(3)
计数器
,
定时器
1.7 单脉冲输出操作
通过将16 位定时器模式控制寄存器00 (TMC00) 的第3 位和第2 位(TMC003 与TMC002)设置为01 (自由运行定时器模式)或10(清零&启动模式(通过
TI
000 引脚有效沿进入)),以及将16 位定时器输出控制寄存器00 (TOC00)的第5 位(OSPE00)设置为1,可以输出一个单脉冲。
当TOC00 的第6 位(OSPT00)=1 时或者在定时器操作期间将有效沿输入到TI000 引脚时,触发TM00 的清零&启动,并且从TO00 引脚只输出一次反映CR000 与CR010 之间差距的脉冲。
注意事项1. 当单脉冲输出时,不要再次输入触发(设置OSPT00=1 或者检测TI000 引脚的有效沿)。在当前单脉冲输出完成后产生触发,才可再次输出单脉冲。
2. 如果要使用单脉冲输出触发(仅设置OSPT00=1),则不要修改TI000 引脚或其复用功能端口引脚的电平。否则可能会产生异常输出的脉冲。
(e) 16 位定时器计数器00 (TM00)
通过读取TM00,可获得计数值。
(f) 16 位捕捉/比较寄存器000 (CR000)
当输出单脉冲时该寄存器用作比较寄存器。当TM00 的值与CR000 的值相等时,产生中断信号(INTTM000)并反转TO00 引脚的输出电平。
(g) 16 位捕捉/比较寄存器010 (CR010)
当输出单脉冲时,该寄存器用作比较寄存器。当TM00 的值与CR010 的值相等时,产生中断信号(INTTM010)并反转TO00 引脚的输出电平。
注意事项 不要为CR000 与CR010 设置相同的值或0000H。
从输入单脉冲触发信号到输出单脉冲的时间
= (M + 1) x 计数时钟周期
单脉冲输出活动电平宽度
= (N M) 计数时钟周期
注 必须特别注意TOC00 的设置。
1.8 脉冲宽度测量操作
TM00 可用于测量输入到TI000 与TI010 引脚的信号的脉冲宽度。
可以通过在自由运行定时器模式下操作16 位定时器/事件计数器00 以及通过同步使用TI000 引脚输入信号的脉冲沿重新启动定时器,来进行测量。
当产生中断时,读取捕捉寄存器的有效值,并测量脉冲宽度。检测16 位定时器模式控制寄存器00 (TMC00)的第0位(OVF00)。如果该位被设置为1,则由软件将其清零。
可以使用以下三种方法测量脉冲宽度。
通过使用TI000 与TI010 引脚的两个输入信号测量脉冲宽度(自由运行定时器模式)
通过使用TI000 引脚的一个输入信号测量脉冲宽度(自由运行定时器模式)
通过使用TI000 引脚的一个输入信号测量脉冲宽度(清零&启动模式(通过TI000 引脚有效沿输入进入))
注意事项 当测量脉冲宽度时不要选择TI000 有效沿作为计数时钟。
(1) 通过使用TI000 与TI010 引脚的两个输入信号测量脉冲宽度(自由运行定时器模式)
设置自由运行定时器模式(TMC003 与TMC002 = 01)。当检测到TI000 引脚的有效沿时,TM00 的计数值被捕捉到CR010。当检测到TI010 引脚的有效沿时,TM00 的计数值被捕捉到CR000。规定检测TI000 与TI010 引脚的两种脉冲沿。
使用这种测量方法,要从每个输入信号的脉冲沿捕捉的计数值中减去预设值。因此要将先前捕捉的值事先存入一个单独的寄存器中。
如果产生溢出,则在当前捕捉值减去先前捕捉的值后计数值为负,并因此产生借位(将程序状态字(PSW)的第0 位(CY)置1)。如果发生这种情况,可以忽略CY 并将计算结果作为脉冲宽度。此外,将16 位定时器模式控制寄存器00 (TMC00)的第0 位(OVF00)清零(0)。
(2) 通过使用TI000 引脚的一个输入信号测量脉冲宽度(自由运行模式)
设置自由运行定时器模式(TMC003 与TMC002 = 01)。在TI000 引脚检测到反向的有效沿时,将TM00 的计数值捕捉到CR000。当检测到TI000 引脚的有效沿时,将TM00 的计数值捕捉到CR010。
使用这种测量方法,在测量从一个脉冲沿到另一个脉冲沿的宽度时将数值存入分开的两个捕捉寄存器中。因此,不必保存捕捉值。将两个捕捉寄存器的值相减,可以计算高电平宽度、低电平宽度和周期。
如果产生溢出,则当两个捕捉的计数值相减后结果为负,并因此产生借位(将程序状态字(PSW)的第0 位(CY)置1)。如果发生这种情况,可以忽略CY 并将计算结果作为脉冲宽度。此外,将16 位定时器模式控制寄存器00(TMC00)的第0 位(OVF00)清零(0)。
(3) 通过使用TI000 引脚的一个输入信号测量脉冲宽度(清零&启动模式(通过TI000 引脚有效沿输入进入))设置清零&启动模式(通过TI000 引脚有效沿进入)(TMC003 与TMC002 = 10)。在TI000 引脚检测到反向的有效沿时,将TM00 的计数值捕捉到CR000。当检测到TI000 引脚的有效沿时,将TM00 的计数值捕捉到CR010,并将TM00 清零(0000H)。因此,如果TM00 没有溢出,则在CR010 中存入一个周期。
如果产生溢出,则将10000H 加上CR010 的值,结果作为一个周期。此外,将16 位定时器模式控制寄存器00(TMC00)的第0 位(OVF00)清零(0)。
<1> 脉冲周期= (10000H × OVF00 位被设置为1 的次数+CR010 的捕捉值) × 计数时钟周期
<2> 高电平脉冲宽度= (10000H - OVF00 位被设置为1 的次数+ CR000 的捕捉值) × 计数时钟周期
<3> 低电平脉冲宽度= (脉冲周期-高电平脉冲宽度)
(e) 16 位定时器计数器00 (TM00)
通过读取TM00,可获得计数值。
(f) 16 位捕捉/比较寄存器000 (CR000)
该寄存器用作捕捉寄存器。选择TI000 或TI010 引脚作为捕捉触发。当检测到指定脉冲沿的捕捉触发时,将TM00 的计数值存入CR000。
(g) 16 位捕捉/比较寄存器010 (CR010)
该寄存器用作捕捉寄存器。将TI000 引脚的输入信号用作捕捉触发。当检测到捕捉触发时,将TM00 的计数值存入CR010。
注 当选择TI000 引脚输入的反向脉冲沿作为CR000 的有效沿时,不产生捕捉中断信号(INTTM000)。
1.9 外部24 位事件计数器操作
16 位定时器/事件计数器00 通过级联16 位定时器/事件计数器00 和8 位定时器/时间计数器52,可用于外部24 位事件计数器功能操作, 8 位定时器/事件计数器52 作为外部事件计数器使用。
作为外部24 位事件计数器使用,计算经过8 位定时器52(TM52)输入到TI52 引脚的外部时钟脉冲数,和计算当TM52 计数值与8 位定时器比较寄存器52(CR52=FFH 注)时由16 位定时器计数器00(TM00)输出的信号。
当16 位定时器/事件计数器00 用于外部24 位事件计数器时,可通过8 位定时器计数器H2 输出控制外部事件输入允许。
输入到TI52 引脚的有效沿可由8 位定时器计数器52 (TM52)的定时器时钟选择寄存器52 (TCL52) 指定。TM52 外部事件输入允许也可以通过8 位定时器计数器H2 输出控制,设置输入切换控制寄存器(ISC) 的第2 位(ISC2)为“1”。
通过设置16 位定时器/事件计数器00 的预分频模式寄存器00 (PRM00) 的第2,1 和0 位(PRM002, PRM001, 和PRM000) 为1,1和1,和设置16 位定时器模式控制寄存器00 (TMC00)的第3 和2 位(TMC003 和TMC002) 为1 和1(TM00 和CR000 相等时进入计数清零&启动模式),用作计数时钟的8 位定时器52 输出计数操作开始。TM00 计数值
与16 位定时器比较寄存器000 (CR000)的值相等时TM00被清零并且产生一个中断请求信号(INTTM000)。
随后,TM00 和CR000 的值相等时产生INTTM000。
注 当16 位定时器/事件计数器00 作为外部24 位事件计数器操作时, 8 位定时器比较寄存器52 (CR52)的值必须设置为FFH。而且,TM52 中断请求信号(INTTM52) 必须被屏蔽掉(TMMK52 = 1)。
<1> TM00 和TM52 的每种模式的设置。
(a) TM00 设置为间隔定时器。选择TM52 输出作为计数时钟。
- TMC00: 设置操作禁止。
(TMC00 = 00000000B)
- CRC00: 设置作为比较寄存器操作。
(CRC00 = 000000x0B, x = don’t care)
- TOC00: 设置CR000 和TM00 相等时TO00 引脚输出禁止。
(TOC00 = 00000000B)
- PRM00: TM52 输出选择作为计数时钟。
(PRM00 = 00000111B)
- CR000: 设置比较值为FFFFH。
如果比较值设置为M,TM00 计数将到M。
- CR010: 通常,CR010 不使用,但是,当CR010 的设置值和TM00 值相等时产生一个比较相等中断
(INTTM010)。因此,通过中断屏蔽标志(TMMK010)屏蔽中断请求。
(b) 设置TM52 作为外部事件计数器。
- TCL52: TI52 引脚输入的沿选择
TI52 引脚的下降沿→ TCL52 = 00H
TI52 引脚的上升沿→ TCL52 = 01H
- CR52: 设置比较寄存器的值为FFH。
- TMC52: 计数操作停止。
(TMC52 = 00000000B)
- TMIF52: 清零此寄存器。
注意事项当16 位定时器/事件计数器00 作为外部24 位事件计数器操作时, INTTM52 必须屏蔽(TMMK52 =
1)。因此, 比较寄存器52 (CR52) 的值必须设置为FFH。
(c) 为TI52 引脚设置TMH2 到输入允许宽度判定模式(PWM模式)。注
- TMHMD2: 计数操作停止,选择计数时钟,模式设置到输入允许宽度判定模式(PWM 模式),定时器输出电
平默认值设置为高电平,定时器输出设置为允许(TMHMD2 = 0xxx1011B, x = 根据使用条件设
置)。
- CMP02: 比较值(N) 频率设置
- CMP12: 比较值(M) 占空比设置
备注00H ≤CMP12 (M) < CMP02 (N) ≤FFH
- ISC2: 设置ISC2 = 1 (TI52 引脚输入允许控制)
注 如果TI52 引脚输入允许不控制,此设置不需要。
<2> TM00, TM52, 和TMH2 计数操作开始。定时器操作开始必须按照下面的过程。
(a) 通过设置TMC003 和TMC002 位为1 和1 启动TM00计数器操作。
(b) 通过设置TCE52 为1 启动TM52 计数器操作。
(c) 通过设置TMHE2 为1 启动TMH2 计数器操作。注
注 如果TI52 引脚输入允许不控制,此设置不需要。
<3> 当TM52 和CR52 (= FFH) 的值相等时,TM52 被清零为00,并且相等信号使TM000 开始计数。然后,当TM000 和CR000 相等时,TM00 被清为0000H,并且产生一个相等中断信号(INTTM000) 。
如果控制TI52 引脚输入允许,通过读取TM52,TI52 引脚在输入允许期间的外部事件计数可以测量,TM00 计数值,和由TMH2 中断请求信号(INTTMH2)经过中断服务的TMIF52。
注 如果TI52 引脚输入允许不控制,此设置不需要。
6.4.10 外部24 位事件计数器的注意事项
(1) 8 位定时器计数器H2 输出信号
8 位定时器H2 的输出电平控制(默认值) ,用于控制TI52 引脚输入允许,必须设置为高电平(TOLEV2 = 1)。因此,当TI52 引脚输入允许信号禁止(TMH2 输出: 低电平)时产生一个中断请求信号(INTTMH2),并且TM52 和TM00 计数值(= 输入允许期间的外部事件计数值) 可以由此中断服务读取。
TI52 引脚的输入允许信号的注意事项为高电平(允许状态),在8 位定时器H2 操作通过设置(TOLEV2 = 1)已经允许(TMHE2 = 1)后,直到TMH2 和CMP02 寄存器值相等。
(2) TI52 引脚输入允许控制的注意事项
TI52 引脚的输入允许控制信号(TMH2 输出信号) 与TI52 引脚输入时钟同步,在图6-54 外部24 位事件计数器的框图和图6-55 外部24 位事件计数器的操作时序中说明。因此,当计数器作为外部事件计数器操作时,计数可能会引起错误。
(3) 外部24 位事件计数器操作期间16 位定时器/事件计数器00 的注意事项
16 位定时器/事件计数器00 当开始操作时与噪声消除器同步,在操作开始后第一个时钟不立即计数。
当使用计数器作为24 位计数器,通过设置16 位定时器/事件计数器00 和8 位定时器/事件计数器52 作为高位和低位定时器并将它们级联,作为低位定时器的8 位定时器/事件计数器52 的中断请求标志必须按照下面说明进行检测,以便正确读出24 位计数值。
- TMIF52 = 1 时读取TM52 和TM00 :
TM00 实际的计数值是“TM00 的读取值+ 1”。
- TMIF52 = 0 时读取TM52和TM00:
读取的值是正确的值。
16 位定时器/事件计数器00 仅当操作开始出现这些情况。当16 位定时器/事件计数器00 溢出和计数从0000H 重启时不发生计数延迟,因为已经实现同步。
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议