历史上的今天
返回首页

历史上的今天

今天是:2025年08月11日(星期一)

正在发生

2021年08月11日 | MC9S12XET256之ECT模块(3)

2021-08-11 来源:eefocus

实验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为自由计数器时才有用,这点需要特别注意。

推荐阅读

史海拾趣

ATC [American Technical Ceramics]公司的发展小趣事

在电子行业的发展历程中,技术突破一直是推动公司成长和市场扩张的关键因素。假设ATC在某一时期成功研发出了一种新型的陶瓷材料,这种材料在耐高温、抗腐蚀等方面具有显著优势,因此被广泛应用于半导体制造和电子设备领域。这一技术突破使得ATC的产品在市场上获得了极高的认可,公司也因此实现了快速的收入增长和市场占有率的提升。

Elpac公司的发展小趣事

Elpac公司深知人才是企业发展的核心动力。因此,公司高度重视人才培养和团队建设。公司建立了完善的人才培训体系,为员工提供多样化的培训和发展机会。同时,公司还鼓励员工积极参与各种创新活动和竞赛,激发员工的创新精神和创造力。这种积极向上的企业文化吸引了大量优秀人才加入Elpac公司,为公司的持续发展提供了有力保障。

Advanced Interconnections Corp公司的发展小趣事

为了降低经营风险并寻求新的增长点,AIC公司开始实施多元化发展战略。除了继续深耕连接器领域外,公司还积极拓展至线缆、接口等其他相关领域。通过不断的技术研发和市场拓展,AIC公司在这些领域也取得了不俗的成绩,实现了业务的多元化发展。

Alliance Fiber Optics Products Inc公司的发展小趣事

随着产品质量的不断提升和市场需求的扩大,AFOP开始积极拓展国内外市场。公司通过与各大电信运营商、设备制造商等建立合作关系,将产品应用于长途通信、大都会网络以及最后一里接入等领域。同时,AFOP还积极参与国际光纤通信展览会等活动,加强与国际同行的交流与合作,提升了公司在国际市场的知名度。

协顺电子(Finecables)公司的发展小趣事

在品质和创新的支撑下,协顺电子开始积极拓展市场。公司通过参加各类展会、举办技术交流会等方式加强与客户的沟通和交流,同时也不断完善自己的销售网络和售后服务体系。此外,协顺电子还注重品牌建设,通过广告宣传、公关活动等方式提升品牌知名度和美誉度。这些努力使得公司的市场份额不断扩大,品牌影响力也逐渐增强。

Brand-Rex公司的发展小趣事

随着全球市场的不断扩大,Brand-Rex也将目光投向了潜力巨大的中国市场。作为首批进入中国市场的国际一线品牌之一,Brand-Rex凭借其卓越的技术和产品质量迅速赢得了中国客户的青睐。然而,由于公司重组和调整,Brand-Rex在2005年之后暂停了在中国大陆地区的销售。幸运的是,2009年8月,Brand-Rex与上海速越电子工程有限公司合作重返中国市场,进一步推动了其在华业务的发展。

问答坊 | AI 解惑

Programming Examples for the TMS320F281x eCAN

Programming Examples for the TMS320F281x eCAN…

查看全部问答>

keil 怎么读寄存器的值

keil 进入调试状态 我在下方的command窗口输入 tmod,scon等,可以读到这些寄存器的值 可是还有其他的寄存器不知道怎么读取。比如数据手册上有:0x8100 MAC_Control_Register_0这样一个寄存器 我在command敲入0x8100读出的还是0x8100,这肯定不是 ...…

查看全部问答>

WinCE中,基于对话框的程序,怎样拥有唯一的窗口类? 为了取得窗口句柄

两个基于对话框的程序,  GetClassName取得的窗口类名都是Dialog,两个窗口都没有标题,所以不能通过窗口标题,使用FindWindow取得窗口句柄。那么怎样取得窗口句柄?…

查看全部问答>

关于anydata的短信接收解码问题

我使用的是 AnyDATA CDMA DTGS800-6025模块 接收短信提前设置  AT+UGSM=1(使用第二套短信接口)  AT+CMGF=0(普通编码输出格式) AT+CMGR=0 接收第一条短信.模块的输出内容是 13 10 43 67 77 71 82 58 32 48 48 48 48 48 50 51 ...…

查看全部问答>

TI运放应用设计的实用资料(高清中文PDF)

本帖最后由 paulhyde 于 2014-9-15 03:57 编辑 可能对大家很有用!  …

查看全部问答>

allegro自动布线

allegro 自动布线,很不错的…

查看全部问答>

请教版主:STM32在IAR中怎样阻止启动代码对RAM区进行清零

版主:     MCU在VDD不掉电的情况下复位,IAR中怎样设置才能阻止启动代码对RAM区进行清零?…

查看全部问答>

smtp客户端 嵌入式

smtp客户端程序在linux下编译通过且能发送邮件,用arm-linux-gcc编译通过,在板端运行不能发送邮件的原因是什么呢? 在linux下用ctrl+d实现发送,但arm板没有这功能,该怎么解决????…

查看全部问答>

win8系统下的驱动安装

还是说说吧,好像常见的驱动兼容性还是不错的,但是默认状态下安装许多驱动还是有问题,因为好多存在无有效签名验证,所以需要更改win8的配置,在启动选项里配置,有一项叫“强制兼容XXX...”的选项,以后安装驱动是就会出现是否继续安装驱动的安全 ...…

查看全部问答>

TI deals就是大降价MSP-TS430PW24目标板

这一期的降价物品是一个目标板,就是用作给24脚的芯片做测试用的。 具体链接如下: https://estore.ti.com/MSP-TS430PW24-MSP430AFE2xx-24-Pin-Socket-Target-Board-P2415.aspx 降价额度比较大从89刀->30刀(买过芯片测试座的筒子们知道,这个 ...…

查看全部问答>