《9s12系列增强型捕捉定时器模块》由会员分享,可在线阅读,更多相关《9s12系列增强型捕捉定时器模块(39页珍藏版)》请在金锄头文库上搜索。
1、第七章 IO接口及增强型捕捉定时器模块nMC9S12MC9S12系列单片机增强型定时器模块是在标准定时系列单片机增强型定时器模块是在标准定时器模块的基础上添加了新的功能。器模块的基础上添加了新的功能。n定时器的核心是一个定时器的核心是一个1616位的可编程计数器位的可编程计数器,计数的,计数的频率可以通过分频来调整。频率可以通过分频来调整。n用途很多用途很多普通定时器的工作,例如脉冲计数、定时等普通定时器的工作,例如脉冲计数、定时等可以用来测量输入的脉冲宽度可以用来测量输入的脉冲宽度产生我们需要的脉冲波形。产生我们需要的脉冲波形。增强型定时器增强型定时器ECTECT模块模块第七章 IO接口及增
2、强型捕捉定时器模块nECTECT模块的组成:模块的组成:1 1个预分频器个预分频器1 1个个1616位自由运行计数器位自由运行计数器8 8个个1616位位IC/OCIC/OC通道通道2 2个个1616位(位(4 4个个8 8位)脉冲位)脉冲累加器累加器1 1个个1616位模数递减计数器位模数递减计数器第七章 IO接口及增强型捕捉定时器模块n输入捕捉功能是用来监测外部的事件和输入信号。输入捕捉功能是用来监测外部的事件和输入信号。n当当外外部部事事件件发发生生或或信信号号发发生生变变化化时时,在在指指定定的的输输入入捕捕捉捉引引脚脚上上发发生生一一个个指指定定的的沿沿跳跳变变(可可以以指指定定该该
3、跳跳变变是是上上升升沿沿还还是是下下降降沿沿)。定定时时器器捕捕捉捉到到特特定定的的沿沿跳跳变变后后,把把计计数数寄寄存存器器当当前前的值锁存到通道寄存器。的值锁存到通道寄存器。n如如果果输输入入捕捕捉捉控控制制寄寄存存器器中中设设定定允允许许输输入入捕捕捉捉中中断断,系系统统会会产产生生一一次次输输入入捕捕捉捉中中断断,利利用用中中断断处处理理程程序序可可以以得得到到事事件件发发生的时刻或信号发生变化的时刻。生的时刻或信号发生变化的时刻。触发沿选择触发沿选择触发事件触发事件16位捕捉锁存器位捕捉锁存器16位计数器位计数器计数器时钟计数器时钟输入捕捉输入捕捉第七章 IO接口及增强型捕捉定时器模
4、块n在特定的时刻在管脚上输出特定电平,用来控制外电路工作。在特定的时刻在管脚上输出特定电平,用来控制外电路工作。原理是:原理是:输出比较寄存器输出比较寄存器的值和计数器的值每隔的值和计数器的值每隔4 4个总线周期比个总线周期比较一次,当两个值相等的时候,会在该通道的引脚上较一次,当两个值相等的时候,会在该通道的引脚上输出预先输出预先规定的电平规定的电平。如果输出比较中断允许,还会产生一个硬件的定时中断。如果输出比较中断允许,还会产生一个硬件的定时中断。输出比较最简单和最常用的功能就是产生一定间隔的脉冲输出比较最简单和最常用的功能就是产生一定间隔的脉冲。1616位输出比较寄存器位输出比较寄存器比
5、较器比较器1616位计数器位计数器计数器时钟计数器时钟输出比较输出比较第七章 IO接口及增强型捕捉定时器模块输入捕捉/输出比较通道n有8个输入捕捉输出比较通道。共有8个外部引脚,分别为IOC0IOC7,与PORTT复用。n通过选择TIOS寄存器的IOSx位可以选择是输出比较还是输入捕捉。n对于输入捕捉:带缓冲的输入捕捉通道不带缓冲的输入捕捉通道第七章 IO接口及增强型捕捉定时器模块n不带缓冲的输入捕捉通道8个输入捕捉,其中4个(PT4PT7)带有一个捕捉寄存器用来记录管脚上电平变化时自由计数器的锁存值。捕捉寄存器TCx当输入覆盖控制寄存器(ICOVW)的NOVWx位清0时,每发生一次输入捕捉,
6、新的计数器的值就会覆盖原来的输入捕捉寄存器的内容;当该位置1时,除非输入捕捉寄存器为空,否则新的值不能写入(使输入捕捉寄存器为空的方法是读取该寄存器)。这样就避免了新的计数值覆盖旧的计数值。ICOVW复位时为0x00。第七章 IO接口及增强型捕捉定时器模块n带缓冲的输入捕捉通道带缓冲的输入捕捉通道PT0PT3PT0PT3是带缓冲的输入捕捉通道。是带缓冲的输入捕捉通道。捕捉寄存器捕捉寄存器TCxTCx保持寄存器保持寄存器TCxHTCxH 。可以在不产生中断的情况下,连续记录两次自由可以在不产生中断的情况下,连续记录两次自由计数器的值。计数器的值。入口设置了延迟计数器入口设置了延迟计数器 用来提高
7、抗干扰能力用来提高抗干扰能力 第七章 IO接口及增强型捕捉定时器模块锁存方式:锁存方式:每个有效的引脚事件只将自由定时器的值放入捕每个有效的引脚事件只将自由定时器的值放入捕捉寄存器捉寄存器 TCxTCx,而而 TCxTCx 到保持寄存器到保持寄存器 TCxHTCxH 的传的传送必须依赖强制锁存命令才能实现送必须依赖强制锁存命令才能实现当模数计数器减为当模数计数器减为“0”0”向模数计数器写入向模数计数器写入“$0000”$0000”写强制锁存位写强制锁存位ICLATICLAT(输入控制系统控制寄存器(输入控制系统控制寄存器ICSYSICSYS)输入捕捉寄存器的值将锁存到相应通道的保持寄输入捕捉
8、寄存器的值将锁存到相应通道的保持寄存器中,并将输入捕捉寄存器的值清零。存器中,并将输入捕捉寄存器的值清零。 两种工作模式两种工作模式:(:( TCx 到保持寄存器到保持寄存器 TCxH )第七章 IO接口及增强型捕捉定时器模块n队列方式队列方式TCxTCx 与与 TCxHTCxH 形成了一个类似先进先出的形成了一个类似先进先出的队列,每个捕捉结果从队列,每个捕捉结果从 TCxTCx 进入,然进入,然 后后随着下一个捕捉结果的到来移入随着下一个捕捉结果的到来移入 TCxHTCxH。程序可以从程序可以从 TCxHTCxH 取得结果,也可以直接取得结果,也可以直接从从 TCxTCx 取得捕捉结果。取
9、得捕捉结果。第七章 IO接口及增强型捕捉定时器模块n4 个 8 位的通道 PAC0-PAC3 组成n可以通过级联形成两个 16 位通道 PACA、PACBn通过检测相应管脚上的有效边缘来记录脉冲的个数。n各通道的 8 位累加器与 4 个缓冲 IC 通道相关联的,它们共享边沿检测与延迟电路。脉冲累加器脉冲累加器第七章 IO接口及增强型捕捉定时器模块n两种工作模式两种工作模式锁存方式:锁存方式:通过锁存命令,将通过锁存命令,将脉冲累加计数器脉冲累加计数器的值锁的值锁存到相应通道的存到相应通道的保持寄存器保持寄存器中中队列方式队列方式当读取某通道保持寄存器的值时,相应脉当读取某通道保持寄存器的值时,
10、相应脉冲累加器的值将被写入保持寄存器。冲累加器的值将被写入保持寄存器。第七章 IO接口及增强型捕捉定时器模块n16 位递减模数计数器(MDC)可以用作时钟基准,产生周期性的中断请求。n也可用于将 IC 寄存器和脉冲累加器的值锁存到各自的保持寄存器中。模数递减计数器模数递减计数器第七章 IO接口及增强型捕捉定时器模块n模数递减计数器(MCCNT)n模数递减标志寄存器(MCFLG)n模数递减控制寄存器(MCCTL)n模数计数器由初值递减,递减到0时,会产生相应的中断。n递减频率由总线时钟经分频得到。n初值可以由用户写入第七章 IO接口及增强型捕捉定时器模块n在模数模式允许后(MODMC=1),向模
11、数递减计数器的写操作会更新预置数的值,模数计数器递减到0时,就会装载最新的预置数,n装载的操作也可以由置MCCTL寄存器的FLMC位为1来强制执行。n总定时时间=预置数总线周期中断次数第七章 IO接口及增强型捕捉定时器模块n在中断程序中,需要清除相应的中断标志位(MCFLG),并将中断次数减1,当中断次数减为0时,一次延时就完成了。第七章 IO接口及增强型捕捉定时器模块第七章 IO接口及增强型捕捉定时器模块三个例子三个例子举三个例子讲述本节内容流水灯显示使用输入捕捉功能,对外来脉冲进行计数使用输出比较功能,输出一个具有一定宽度的高电平脉冲第七章 IO接口及增强型捕捉定时器模块ECTECT计数寄
12、存器(计数寄存器( TCNT TCNT )nTCNT为自由计数器的计数值,本例通过读取它的值实现延时。n这是一个16位的加法计数器,最大值为65535。n任意时刻可读,正常模式下写操作无效。第七章 IO接口及增强型捕捉定时器模块ECTECT控制寄存器控制寄存器1 1(TSCR1TSCR1)n必须设置TSCR1才可以使主定时器工作,需要在ECT模块初始化时就设置好。TEN=1:主定时器使能。0=主定时器禁止,进入低功耗状态。TSWAI=0:等待模式时主定时器继续工作,方便调试。0=停止工作。TSFRZ=0:冻结模式时主定时器继续工作。0=停止工作。TFFCA=0:自动清除标志位。1=手动清除。本
13、例设置TSCR1=0x80。第七章 IO接口及增强型捕捉定时器模块ECTECT控制寄存器二(控制寄存器二(TSCR2TSCR2)nTOI:禁止定时器溢出中断。1=允许。nTCRE:定时计数器复位允许 。0=禁止复位,计数器自由计数。1=允许复位。进行完一次输出比较时,可以使定时计数器复位nPR2、PR1、PR0:预分频因子选择第七章 IO接口及增强型捕捉定时器模块void TimerOverflow(void)unsigned char i=1,j=0x80;while(i!=0)&(j!=0)PORTA=(i|j);i=1;while(TCNT!=0x0000); /延时while(TCNT
14、=0x0000);void main(void)EnableInterrupts;TSCR1=0x80; /定时器使能TSCR2=0x07; /分频系数为128DDRA=0xff;PORTA=0xff;for(;)TimerOverflow();流水灯的显示流水灯的显示PORTA输出调用函数设置控制寄存器1设置控制寄存器2延时控制第七章 IO接口及增强型捕捉定时器模块 while(TCNT!=0x0000); while(TCNT=0x0000);这两句的含义是:TCNT开始计数后值不为0,等待直到TCNT溢出返回0,然后再等到TCNT不为0。为什么要弄两个while?第七章 IO接口及增强型
15、捕捉定时器模块例二:输入捕捉例二:输入捕捉n利用输入捕捉0通道对外来的方波信号进行捕捉,采用中断的形式。中断发生后,读取捕捉后的计数值,并通过PORTB口使LED灯点亮以指示中断成功。n通道0设置为输入捕捉,采用双沿触发(上下沿均触发),IC0开中断,可以进入中断服务程序。方波信号由PORTA_BIT6产生,PORTA_BIT6和IOC0硬件连接。第七章 IO接口及增强型捕捉定时器模块输入控制系统寄存器输入控制系统寄存器-ICSYS-ICSYSnSHxy=0:正常操作。1=x通道和y通道将产生一样的输入动作,x通道的设置同样适用于y。nTFMOD=0:当出现有效的输入捕获事件,TFLG1中的对
16、应中断标志位CxF就置1。1=队列模式时才使用。nPACMX=0:8位脉冲累加器溢出后自动回0。1=不自动回0,停留在0xFF。脉冲累加器对IC通道捕获的有效边沿数量进行计数。第七章 IO接口及增强型捕捉定时器模块输入控制系统寄存器输入控制系统寄存器-ICSYS-ICSYSnBUFEN=1:使用输入捕获缓冲区。0=不使用。(输入捕捉和脉冲累加器的保持寄存器)nLATQ=0:输入捕获队列模式使能。产生一次成功的输入捕获时,IC通道寄存器中保留的计数值会被送到保持器中,然后IC寄存器会接收新的计数值。1=锁存模式使能。nICSYS=0x02; /IC缓冲使能第七章 IO接口及增强型捕捉定时器模块T
17、FLG1TFLG1:主定时器中断寄存器:主定时器中断寄存器1 1 BIT76543210RC7FC6FC5FC4FC3FC2FC1FC0FWRESET00000000nTFLG1指示了中断发生在哪个通道,需要对相应位清零时,可以对它进行置1操作。 C7F-C0F:IC/OC的中断标志。n当TSCR寄存器中的TFFCA位被置位时,对于输入捕捉和输出比较通道的读写操作,将清除对应通道的CxF位。第七章 IO接口及增强型捕捉定时器模块定时器输入捕捉和输出比较寄存器定时器输入捕捉和输出比较寄存器nTC0-TC7寄存器:用来锁存自由计数器的值,当得到有效的边沿触发时,我们可以通过读这些寄存器来获得输入捕
18、捉计数值;通过写这些寄存器来设置输出比较的计数值。n任意时刻可读。在输出比较模式任何时刻可写。在输入捕捉模式对寄存器的写操作没有意义。当寄存器复位后,寄存器值等于$0000。 第七章 IO接口及增强型捕捉定时器模块IC/OCIC/OC通道选择寄存器通道选择寄存器-TIOS-TIOSIOSx:1=通道x为输出比较; 0=通道x为输入捕获。第七章 IO接口及增强型捕捉定时器模块控制寄存器控制寄存器3/4 TCTL3/43/4 TCTL3/4EDGnA/B:输入捕捉边沿控制。本例设置0x03(EDG0A=1,EDG0B=1)。即IC0通道采用上升,下降沿都触发。n代表通道序号。第七章 IO接口及增强
19、型捕捉定时器模块定时器中断使能寄存器定时器中断使能寄存器-TIE-TIECxI:1=第x个通道中断允许;0=第x个通道中断禁止。第七章 IO接口及增强型捕捉定时器模块例二:输入捕捉例二:输入捕捉IC0的初始化:的初始化:void ic_init(void)TSCR1= 0x90; /主定时器使能,对TCNT访问即可清除标志 TSCR2=0x07; /分频因子=128 ICSYS=0x02; /IC缓冲使能(保持寄存器) TIOS=0; /通道设置为输入捕获TCTL4= 0xff; /采用上升、下降沿触发 TIE=0b00000001; /通道0开中断第七章 IO接口及增强型捕捉定时器模块例二:
20、输入捕捉例二:输入捕捉初始化好后,需要在main函数中调用初始化函数ic_init()。以下是在main函数中,如何使用PORTA_BIT6来产生一个方波信号。DDRA=0xff;/设置PORTA的方向寄存器,为输出PORTA=0x00;/PORTA的输出初始化为低电平DDRB=0xff;/PORTB设置为LED灯的控制信号PORTB=0x00;/LED全灭for(;)for(i=0;i6000;i+)PORTA_BIT6=1;/循环中设置信号为高电平for(i=0;i6000;i+)PORTA_BIT6=0;/循环中设置信号为低电平,产生方波 第七章 IO接口及增强型捕捉定时器模块例二:输入
21、捕捉例二:输入捕捉方波信号已经成功得产生了,下面是中断服务程序:#pragma CODE_SEG NON_BANKED/必须有这句void interrupt 8 ic0_int(void)TFLG1_C0F=1;/中断标志清除ic4=TC0;/通过读TC0寄存器来响应中断,ic4、ic40为用户定义的变量dic4=ic4-ic40; ic40=ic4; PORTB=0x55;/用LED灯来指示已经进入了中断/*以下放置其他代码*/第七章 IO接口及增强型捕捉定时器模块强制输出比较寄存器强制输出比较寄存器-CFORC-CFORCFOCxx通道强制输出比较在相应的寄存器位写入强制输出比较命令,会
22、立即使相应的通道处于输出比较状态。第七章 IO接口及增强型捕捉定时器模块定时器控制寄存器定时器控制寄存器1/2TCTL1/21/2TCTL1/2OMn:输出模式 OLn:输出等级这8 对控制位是用来指定输出比较的输出动作的,当OMn 和OLn 二者任意一个为1 时,OCn 对应的端口会有相应的输出。如果需要用OMn 和OLn 来控制相应定时器端口的输出,则OC7M 中的对应位必须清零。第七章 IO接口及增强型捕捉定时器模块void oc_init() TSCR2=0x07; 128分频,定时器溢出中断禁止 TIOS=0x01; 通道0输出比较 TIE=0x01; 中断使能 TCTL2_OM0=
23、1; 输出低电平 TCTL2_OL0=0;TSCR1=0x90; 第七章 IO接口及增强型捕捉定时器模块void main(void) EnableInterrupts; DDRB=0x00; PORTB=0xff; DDRM=0xff; PTM=0xff; oc_init();for(;) 第七章 IO接口及增强型捕捉定时器模块#pragma CODE_SEG NON_BANKEDvoid interrupt 8 oc0_int(void) TCTL2_OM0=1; TCTL2_OL0=!TCTL2_OL0; PTM_PTM1=PORTB_BIT1; TC0=TCNT+4000;第七章 IO接口及增强型捕捉定时器模块谢谢!