2857|0

336

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【R7F0C809】DIY第八篇--定时器应用 [复制链接]

本帖最后由 youzizhile 于 2015-9-17 22:56 编辑

在USB电源电压电流检测仪应用中,需要记录每个间隔时刻的电流平均值,以计算USB输出的电量。
由于R7F0C809没有RTC,所以不能通过实时钟来作为一个固定间隔的信号源,只能采用定时器作为上电时间的统计,计划通过定时器设置1S间隔时间,然后计算一秒内的电流平均值并进行累加以计算电量。
1         定时器介绍
R7F0C809的定时器阵列单元配置有 4 个 16 位定时器。
定时器功能如下所示:
定时器陈列单元结构
1.1      8位定时器运行功能的基本规则(只限于通道1和通道 3
8 位定时器运行功能是将 16 位定时器的通道用作 2 个 8 位定时器的通道的功能。
只有通道 1 和通道 3 才能使用 8 位定时器运行功能,使用时需要遵守几个规则。
8 位定时器运行功能的基本规则如下所示。
(1) 8位定时器运行功能只适用于通道1和通道3。
(2) 当用作8位定时器时,将定时器模式寄存器0nH(TMR0nH)的SPLIT位置“1”。
(3) 高8位定时器能用作间隔定时器功能。
(4) 在开始运行时,高8位定时器输出中断请求信号(INTTM01H、INTTM03H) (和MD0n0位为“1”的运行相同)。
(5) 高8位定时器的运行时钟的选择取决于低位TMR0nH寄存器的CKS0n1位的设定。
(6) 对于高8位定时器,通过操作TSH0n位来开始通道的运行,并且通过操作TTH0n位来停止通道的运行。
能通过TEH0n位确认通道的状态。
(7) 低8位定时器的运行取决于TMR0nH寄存器和TMR0nL寄存器的设定,低8位定时器支持以下定时器功能:
• 间隔定时器
• 方波输出
• 外部事件计数器
• 延迟计数器
•PWM输出功能
• 多重PWM输出功能
(8) 对于低8位定时器,通过操作TS0n位来开始通道的运行,并且通过操作TT0n位来停止通道的运行。能通过TE0n位确认通道的状态。
(9) 在16位定时器运行时,TSH0n/TTH0n位的操作无效。通过操作TS0n位和TT0n位来控制通道n的运行。
TEH0n位不变。
1.2      1.21.2定时器间隔定时运行模式
1.2.1    间隔定时器模式的运行
①通过给TS0n位写“1”,进入运行允许状态(TE0n=1)。定时器计数寄存器0n (TCR0n)保持初始值,直到产生计数时钟(fTCLK)为止。
② 通过允许运行后的第1个计数时钟产生开始触发信号。
③当MD0n0位为“1”时,通过开始触发信号产生INTTM0n。
④ 通过允许运行后的第1个计数时钟将定时器数据寄存器0n(TDR0n)的值装入TCR0n寄存器,并且以间隔定时器模式开始计数。
⑤如果TCR0n寄存器递减计数到“0000H”,就在下一个计数时钟,产生INTTM0n,并且在将定时器数据寄存器0n (TDR0n)的值装入TCR0n寄存器后继续进行计数。
1.2.2    运行时序

1.2.3    作为间隔定时器运行的框图
1.2.4    寄存器操作步骤
2         需要用到的寄存器介绍2.1      外围允许寄存器 0PER0
PER0寄存器是设定允许或者禁止给各外围硬件提供时钟的寄存器。通过停止给不使用的硬件提供时钟,降低功耗和噪声。
要使用定时器阵列单元时,必须将bit0 TAU0EN)置 1”。
2.2      2.
2.1定时器时钟选择寄存器 0TPS0
TPS0 寄存器是选择从预分频器共同提供给各通道的 2 种运行时钟(CK00 CK01)的 8 位寄存器。
2.3      2
2.2定时器模式寄存器 0nTMR0n
TMR0n 寄存器由 2 个设定通道 n 的运行模式的 8 位寄存器 TMR0nH TMR0nL)构成。进行运行时钟(fMCK)的选择、计数时钟(fTCLK)的选择、主控 / 从属的选择、16 /8 位定时器的选择(只限于通道 1 和通道 3)、开始触发和捕捉触发的设定、定时器输入有效边沿的选择以及运行模式(间隔、捕捉、事件计数器、单次计数、捕捉 & 单次计数)的设定。
禁止在运行中(TE0n=1)改写 TMR0nH 寄存器和 TMR0nL 寄存器。
通过 8 位存储器操作指令设定 TMR0nH 寄存器和 TMR0nL 寄存器。
2.4      
2.3定时器输出寄存器
由于不涉及到定时器输出,所以相关寄存器就不解释了。

3         程序设计3.1      
3.1初始化
voidTAU_Init(void)
{
    TAU0EN =1;             /* Suppliesinput clock */
    TPS0 =0x05;            /* CK00,fMCLK = fCLK/(2^5) = 625kHz */
    TMR01H =0;             /* TPS0setting available, only software trigger */
    TMR01L =0;             /* Fallingedge, Interval timer mode */
    TDR01H =0xf4;          /* Intervaltime = (0xf423+1)/625kHz = 100ms */
    TDR01L =0x23;
    TMIF00 =0;             /* ClearsINTTM00 and INTTM01 interrupt flag */
    TMIF01 =0;
    TMMK01 =0;             /* Enables INTTM01interrupt */
    TMPR101 =1;            /* SetsINTTM01 low priority */
    TMPR001 =1;
}
3.2
3.2
3
3.2      
3.2中断服务程序
voidTAU0_Channel1_Interrupt(void)
{
    Cnt100ms++;
    if (Cnt100ms ==10)
    {
              time_count++;
        Flag1s =1;       /* Sets 1sflag */
        Cnt100ms =0;
    }
}


我的其他帖子:





点赞 关注
个人签名每一刻都是崭新的,加油!

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表