MC9S12XET256之ECT模块(4)
来源:互联网 发布:世界图书出版社 知乎 编辑:程序博客网 时间:2024/04/30 12:34
实验4:定时器溢出翻转功能
所谓定时器溢出翻转就是在TCNT溢出时将某个通道的输出管腿PTx电平翻转一下。这个功能很实用,可以实现PWM 功能。首先,还是要介绍个相关的寄存器TTOV。
TTOV寄存器 (Timer Toggle On Overflow Register 1)
定时器溢出触发寄存器 TTOV很简单,8位寄存器每一位对应一个输出比较通道,相应位置1后表示允许根据溢出特性翻转对应输出比较引脚。置0则禁止这一功能。
图 13 TTOV寄存器
有这些知识就足够了,下面开始我们的实验。这个实验的输出和上一个实验相同,将在PT0 管腿上输出一个占空比位1/4 的方波,不同的是实现方法。在 TCNT = TC0 = 49152 时将PT0管腿置 1,然后在TCNT溢出时翻转 PT0。程序片段如下。
- #include <hidef.h> /* common defines and macros */
- #include "derivative.h" /* derivative-specific definitions */
- #include "sci.h"
- void ECTInit(void)
- {
- //TSCR2_PR = 7; //prescale factor is 8, bus clock/128=8Mhz/8
- TSCR2_TOI = 1; //timer overflow interrupt enable
- TIOS_IOS0 = 1; // channel 0 as output compare
- TC0 = 49152;
- TCTL2_OL0 = 1;
- TCTL2_OM0 = 1; // 使 channel 0 输出高电平
- TTOV_TOV0 = 1; // TCNT 计数溢出时翻转 PT0
- TSCR1_TEN = 1; //timer enable
- }
- void main(void)
- {
- SCIInit();
- SCISetBaudRate (SCI0, 9600, 8192000L);
- ECTInit();
- DDRM_DDRM0 = 1;
- EnableInterrupts;
- for(;;)
- {
- _FEED_COP(); /* feeds the dog */
- } /* loop forever */
- }
- interrupt VectorNumber_Vtimovf void ECT_TimerOverflow_ISR(void)
- {
- TFLG2 = TFLG2_TOF_MASK; //clear timer overflow interrupt flag
- PTM_PTM0 = ~ PTM_PTM0;
- }
程序运行后就能在PT0 管腿上观测到 1/4 占空比的方波了。
这里需要特别说明的是TTOV不能与TCRE同时使用,比如下面这个例子。这个例子本意是在 TCNT = 10000 时翻转 PT0 通道,然后当 TCNT = 20000 时利用TTOV 功能再次翻转 PT0 的输出,同时由于 开启了 TCRE,让 TCNT 直接回到 0。
- #include <hidef.h> /* common defines and macros */
- #include "derivative.h" /* derivative-specific definitions */
- #include "sci.h"
- void ECTInit(void)
- {
- TSCR2_TOI = 1; //timer overflow interrupt enable
- TIOS_IOS0 = 1; // channel 0 as output compare
- TC0 = 15000;
- TCTL2_OL0 = 1;
- TCTL2_OM0 = 0; // 使 channel 0 输出高电平
- TIOS_IOS7 = 1; // channel 7 as output compare
- TC7 = 20000;
- TCTL1_OL7 = 1;
- TCTL1_OM7 = 0; // 使 channel 0 输出高电平
- TSCR2_TCRE = 1; //TCNT overflow when TCNT = TC7 = 20000
- TTOV_TOV0 = 1; // TCNT 计数溢出时翻转 PT0
- TSCR1_TEN = 1; //timer enable
- }
- void main(void)
- {
- SCIInit();
- SCISetBaudRate (SCI0, 9600, 8192000L);
- ECTInit();
- DDRM_DDRM0 = 1;
- EnableInterrupts;
- for(;;)
- {
- _FEED_COP(); /* feeds the dog */
- } /* loop forever */
- }
这里说明TCRE 功能开启后,TTOV 就不起作用了。其实这也不难理解,TTOV 发生的条件和 TCNT 的Overflow 中断产生的条件是相同的,都是在 TCNT 从 65536 向 0 溢出时才会发生。其他条件下都没有作用。
- MC9S12XET256之ECT模块(4)
- MC9S12XET256之ECT模块(1)
- MC9S12XET256之ECT模块(2)
- MC9S12XET256之ECT模块(3)
- MC9S12XET256之ECT模块(5)
- MC9S12XET256之ECT模块(6)
- MC9S12XET256之Libmaker
- MC9S12XET256之EETS4K
- Freescale 9S12 系列单片机应用笔记(ECT 模块) 4
- Freescale 9S12 系列单片机应用笔记(ECT 模块) 1
- Freescale 9S12 系列单片机应用笔记(ECT 模块) 2
- Freescale 9S12 系列单片机应用笔记(ECT 模块) 3
- Freescale 9S12 系列单片机应用笔记(ECT 模块) 5
- Freescale 9S12 系列单片机应用笔记(ECT 模块) 6
- visudo /ect/sudoers
- make distclean install ect.
- python之模块(转载)
- PYTHON模块学习之邮件发送模块smtplib(2015-4-3)
- Oracle Hint的用法(HINT提示)
- 进程
- JS预览本地图片(IE6、7、8)
- [Maven]为工程添加非Maven工程的Jar包依赖
- java数据类型转换
- MC9S12XET256之ECT模块(4)
- C++版 小球自由落体的实现
- 关键词密度多少才是正确的呢
- linux: 系统修复
- c#asp.net url 传递中文参数要使用 System.Web.HttpUtility.UrlEncode 而不能使用Server.UrlEncode
- Extjs ---动态拼接panel
- git安装与使用(一)
- OCP-1Z0-053-V12.02-399题
- win7下运行VC++6.0