MC9S12XET256之ECT模块(3)

发布者:innovation2最新更新时间:2021-08-11 来源: eefocus关键字:MC9S12XET256  ECT模块  输出通道 手机看文章 扫描二维码
随时随地手机看文章

实验3:输出比较 7 通道的特殊功能

输出比较通道OC7 具有特殊的权限,可以废止其他输出比较通道的动作,直接决定各个输出通道的状态。这种特权功能是通过配置两个额外的寄存器OC7M和OC7D来实现的。


OC7M寄存器(Output Compare 7 Mask Register)

使OC7Mx=1,OC7强行参与管理通道x的输出,但通道OC7 对通道OC0~OC6的管理仅限于使其引脚PT0~PT6 清0或置1,不能将引脚电平翻转,引脚的动作来自于输出比较7数据寄存器OC7D中的对应位OC7Dx定义的电平状态,必须事先通过程序设置。。


图 11 OC7M寄存器

OC7D寄存器(Output Compare 7 Data Register)

OC7Dx=0,则对应事件发生时相应PTx位将被输出为低电平,OC7Dx=1,则对应事件发生时相应PTx位将被输出为高电平。


图 12 OC7D寄存器

可以开始我们的实验了。这个实验将在PT0 管腿上输出一个占空比位1/4 的方波。实现方法为在 TCNT = 10000 时将 PT0 置为高电平,TCNT = 26384 时将PT0 置为低电平。下面是程序片段。

  1. #include       /* common defines and macros */  

  2. #include "derivative.h"      /* derivative-specific definitions */  

  3. #include "sci.h"

    void ECTInit(void)   

  4. {  

  5.     //TSCR2_PR   = 7;  //prescale factor is 8, bus clock/128=8Mhz/8  

  6.       

  7.     TIOS_IOS0 = 1; // channel 0 as output compare  

  8.     TC0 = 10000;

        TCTL2_OL0 = 1;  

  9.     TCTL2_OM0 = 1; // 使 channel 0 输出高电平  

  10.           

  11.     TIOS_IOS7 = 1; // channel 7 as output compare  

  12.     TC7 = 26384;  

  13.     //TIE_C7I = 1;  // 使能 channel 7 中断  

  14.       

  15.     OC7M_OC7M0 = 1;  

  16.     OC7D = 0;      // 使 channel 0 输出低电平  

  17.       

  18.     TCTL1_OL7 = 0;  

  19.     TCTL1_OM7 = 0;  

  20.       

  21.     TSCR2_TOI  = 1;  //timer overflow interrupt enable  

  22.     TSCR1_TEN  = 1;  //timer enable      

  23. }  

  24. void main(void)   

  25. {  

  26.     SCIInit();  

  27.     SCISetBaudRate (SCI0, 9600, 8192000L);  

  28.     ECTInit();  

  29.     DDRM_DDRM0 = 1;  

  30.     EnableInterrupts;  

  31.       

  32.     for(;;)   

  33.     {  

  34.         _FEED_COP(); /* feeds the dog */  

  35.     } /* loop forever */  

  36. }  

  37.                   

  38.                   

  39. interrupt VectorNumber_Vtimovf void ECT_TimerOverflow_ISR(void)   

  40. {  

  41.     TFLG2 = TFLG2_TOF_MASK;  //clear timer overflow interrupt flag  

  42.     PTM_PTM0 = ~ PTM_PTM0;  

  43. }

    interrupt VectorNumber_Vtimch0 void ECT_0_ISR(void)   

  44. {  

  45.       

  46.     TFLG1 = TFLG1_C0F_MASK;   //clear channel 0 interrupt flag  

  47. }  

  48. interrupt VectorNumber_Vtimch1 void ECT_1_ISR(void)   

  49. {  

  50.     TFLG1 = TFLG1_C1F_MASK;    //clear channel 1 interrupt flag  

  51. }  

  52.   

 

利用这种方式可以模拟个 PWM 功能出来。不过模拟出来的PWM周期只有8种选择。

在第一篇应用笔记中,我提到过TCSR2寄存器有一位叫 TCRE。TCRE 位是 Timer Counter Reset Enable 的简写。TCRE 位为 0表示TCNT自由运行,TCRE 位为1表示当TCNT = OC7 时复位。


下面将给出一个利用 TCRE的例子。同样是占空比25%,但是同时还调整了波形的周期。这个例子中,TC0 = 1000, TC7 = 4000。PT0 在1000时翻转一下,在4000时再翻转一下。同时4000时将TCNT值复位到0重新计数。这样波形的频率就成了 4000/8192000=4.88ms。


  1. void ECTInit(void)   

  2. {  

  3.     TSCR2_PR   = 7;  //prescale factor is 8, bus clock/128=8Mhz/8  

  4.       

  5.     TIOS_IOS0 = 1; // channel 0 as output compare  

  6.     TC0 = 1000;  

  7.     TIE_C0I = 1;  // 使能 channel 0 中断  

  8.     TCTL2_OL0 = 1;  

  9.     TCTL2_OM0 = 1; // 使 channel 0 输出高电平  

  10.           

  11.     TIOS_IOS7 = 1; // channel 7 as output compare  

  12.     TC7 = 4000;  

  13.     TIE_C7I = 1;  // 使能 channel 7 中断  

  14.     TCTL1 = 0x40;  

  15.       

  16.     OC7M_OC7M0 = 1;  

  17.     OC7D = 0;      // 使 channel 0 输出低电平  

  18.       

  19.     TCTL1_OL7 = 0;  

  20.     TCTL1_OM7 = 0;  

  21.       

  22.     TSCR1_TEN  = 1;  //timer enable      

  23. }  



上面是实际波形,这里出现了个有意思的现象。PM0 一直为低电平,这表明TCNT 的Overflow 中断没有进去。说明这个中断只有在 TCNT为自由计数器时才有用,这点需要特别注意。

关键字:MC9S12XET256  ECT模块  输出通道 引用地址:MC9S12XET256之ECT模块(3)

上一篇:MC9S12XET256之ECT模块(2)
下一篇:ucos-ii在MC9S12XDP512上的移植

推荐阅读最新更新时间:2024-11-01 11:20

Freescale 9S12 系列单片机应用笔记(ECT 模块) 5
实验5:初识输入捕捉功能 所谓输入捕捉,简单的说就是感应输入引脚PTx上的电平的变化,如果发现电平变化,则: l TCNT计数器的值被保存到到输入捕捉寄存器TCx中,状态标志位被置 1 l 如果中断允许,则向CPU发出中断请求 ECT 模块可以捕捉到的电平变化包括上升沿、下降沿或任意沿。简单的说就是可以捕捉任意一种变化,功能还是很强悍的。 TCx 寄存器(Timer Input Capture/Output Compare 0-7) 在介绍输出比较功能时已经提到过。在这里,用来记录外部事件发生时TCNT的值。通过读取两次相邻事件 TCx 的值就可以计算出两次事件的间隔时间了。 TCTL3/TCTL4 寄存器(Ti
[单片机]
Freescale 9S12 系列单片机应用笔记(<font color='red'>ECT</font> <font color='red'>模块</font>) 5
42V、四输出、三通道单片式同步 降压型转换器和升压型控制
中国,北京 – 2018 年 3 月 1 日 - Analog Devices, Inc. (ADI) 宣布推出 Power by Linear™ 的 LT8603 ,该器件是一款能接受 42V 输入电压的高效率四输出单片式开关稳压器。其灵活的设计把一个升压型控制器与两个高电压 2.5A 和 1.5A 同步降压通道以及一个较低电压 1.8A 同步降压通道组合起来,以提供 4 个独立的输出。LT8603 可配置为由升压型控制器向降压型转换器的输入供电,从而使之能产生 3 个精确调节的输出。即使当输入降至明显低于稳定输出电压时 (例如:在电池电压有可能降到低至 3V 的汽车冷车发动或启-停状况下) 也是如此。或者,升压型控制器也可由
[电源管理]
42V、四<font color='red'>输出</font>、三<font color='red'>通道</font>单片式同步 降压型转换器和升压型控制
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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