MC9S12XS128之时间模块TIM输入捕捉_第1页
MC9S12XS128之时间模块TIM输入捕捉_第2页
MC9S12XS128之时间模块TIM输入捕捉_第3页
MC9S12XS128之时间模块TIM输入捕捉_第4页
MC9S12XS128之时间模块TIM输入捕捉_第5页
免费预览已结束,剩余4页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、买了本嵌入式系统一一使用 HCS12B 控制器的设计与应用这本书,看了觉得帮助不大。因为里面有些东西讲得不够详细,并且这本书不是针对 XS12 眯写的。网上也有一些网友写的资料,那都只是针对某一方面的。我觉得最好的资料还是英文版的说明文档,里面好多东西都讲得很详细,虽然看起来有点费劲,但那里值得的。接下来就自己的学习经历。TIM 中的功能比较多,有输入捕捉、输出比较,还有脉冲累加器。这里主要记一下输入捕捉和输出比较。输入捕捉这个功能很有用,他不仅可以捕捉外界事件的发生(这个功能和 51中的外部中断差不多),还可以捕捉外界事件发生的时间。捕捉外界时间这个功能可以运用到驱动超声波测距中去。IOC0

2、IOC 碇输入捕捉输出比较的外部针脚。当 IOSx=0 寸(IOSx=1 时为输出比较),则将相应的通道配置为输入捕捉了。当输入捕捉检测到有上升沿或下降沿时,就会把那时寄存器的值锁存到 TCx 中,这样就可以通过查询 TCx 来确定事件发生的时间了。如果输入捕捉控制寄存器 TIE(CxI=1)中允许输入捕捉中断,则捕捉到事件时,系统会产生一次中断。接下来依次说明一下相关的寄存器设置:TSCR1:Bit7654321Bit0TENTSWAITSFRZTFFCAPRNT000TEN 是定时器允许位。TEN=1 时,允许定时器工作,TEN=0 寸,禁止定时器工作。其余不常用,设为 0 即可。TSCR

3、2:000TCREPR2PR1PROTOI 是定时器溢出中断允许位。这个在输入捕捉中没用到,设为 0 即可。TCRN 定时器计数寄存器复位允许位。用在输出比较中,允许输出比较寄存器 7 的事件来复位定时器计数寄存器。这里设为 0 即可。PR2PR 诞定时器分频因子选择位。不同的组合可以设定不同的定时器时钟:TIOS 是输入捕捉和输出比较选择寄存器,在这里设定 IOC0IOC 碇用于输入捕捉还是用于输出比较。54321I0S7I0S6I0S5I0S4I0S3I0S2I0S1IOSO里面的 8 位对应着 IOC0IOC71 个通道,相应位位 1,则设为输出比较。相应位设为 0,则为输入捕捉。TCT

4、L 舜口 TCTL 提用来设定输入捕捉极性的寄存器, 在这里可以设为上升沿、 下降沿、 上升沿或下降沿触发输入捕捉。OXOOOARTCTL3叫EDG7BEDG7AEDG6BEDG6AEDG5BEDG5AEDG4BEDG4A0 x0008RTCTL4WEDG3BEDG3AEDG2BEDG2AEDG1BEDG1AEDGOBEDGOA其中 EDGxB 和 EDGxA 一起来设相应通道输入捕捉极性,对应的功能如下:(00)为禁止输入捕捉。(01)为上升沿捕捉(10)为下降沿捕捉(11)为上升沿或下降沿捕捉TIE 是输入捕捉或输出比较中断允许位。RWC71C6IC51C4IC3IC2IC11COI这里的

5、每一位是和 TIOS 上的位一一对应的。相应置 1 时,则捕捉到事件时,则系统会产生中断。相应位设为 0 时,则不能。TFLG 促输入捕捉或输出比较中断标位寄存器。43210C7FC6FC4FC2FC1FCOF当发生输入捕捉或输出比较事件时,相应位置 1。向该位写 1,可以清空该标志位。通道寄存器 TC0TC 浦于锁存发生捕捉事件时自由运行的计数器的计数值。通过查询TC0TC 济目应的位,可以确定捕捉事件发生的时刻。与输入捕捉相关的寄存器还有:ICOVW 输入控制修改寄存器ICSYS 入控制系统控制寄存器DLYC 施迟计数控制寄存器(可以自动处理窄脉冲干扰)这些不常,可以不管接下来按照上面的寄

6、存器设置好相应的功能,程序就出来了:关闭溢出中断且 64 分频/定通道 0 为输入捕捉,1 为输出比较/上升沿捕捉 0 x02 为下降沿捕捉通道 0 中断使能开启总定时器中断/标志位清零中断程序:#pragmaCODE_SEG_NEAR_SEGNON_BANKED/分配内存空间 voidinterrupt8timer_onput()输入捕捉通道 0 的中断向量为 8(TFLG1_C0F=1;/标志位清零 asmsei;关总中断/PORTB=PORTB;PORTB&=(17);delay_us(1);PORTB|=(17);asmcli;开总中断输出比较看似不能,却磨折了我两天,其中大多都是些小

7、细节问题在纠缠。现在终于想明白其中一些道理。不过有些寄存器还是没有理解,如强制输出比较寄存器 CFORC 测试了好久,都未能得到想要的结果,希望路过的高手能指点一下。接下来继续记一下学习输出比较的点点滴滴吧。XS128 勺定时器模块中的输入捕捉和输出比较共用同一组管脚。可以通过设置TIOS 寄存器来选择。我觉得输出比较的原理和 PWM 波的产生原理差不多,都是通过计数器的数值和某一寄存器里的值比较产生输出的高低电平变化。在输出比较中,当计数器的值与某一输出比较通道的 TCx(TC0TC7 的值相等时,该通道上引脚会输出高电平、低电平,或是对引脚上的电平进行翻转。这时标志位 CxF 会置位,如果

8、开通中断的话(TIE 中的 CxI=1),系统还会产生一个中断。输出比较用到的寄存器好多都是和输入捕捉的一样,现在按照输出比较的程序需要再过一遍。定时器系统控制寄存器 TSCR1 设置定时器正常工作定时器系统控制寄存器 TSCR2 设置定时器溢出中断允许,和定时器时钟分频设置定时器计数寄存器 TCNT 这是个 16 位寄存器,在一般情况下是不可以写的。输入捕捉时,就是这个寄存器的值存入 TCx 中,输出比较时,也是这个寄存器的值与 TCx 的值比较。它的时钟由 TSCR殁置的分频决定。程序中这个寄存器一般情况下不用理会。voidECT0_INIT()(TSCR2=0X06;TIOS_IOS0=

9、0;TCTL4=0X01;TIE_C0I=1;TSCR1=0X80;TFLG1_C0F=1;输入捕捉通道 0 初始化函数主定时器国断标志寄存器 TFLG2 在这个寄存器中只有最高位 TOF 有效,是定时器溢出标志位。当 TCNT 运行产生溢出时,该位就置位了。如果允许定时器溢出中断的话,则系统会产生一个中断。输入捕捉和输出比较选择寄存器 TIOS:设置相应的通道为输入捕捉或是输出比较。主定时器中断标志寄存器 TFLG1:输入捕捉或输出比较的各通道的中断标志位。对相应的通道写 1,可以清除标志位。定时器中断允许寄存器 TIE 里面有 8 位,对应输入捕捉或输出比较的 8 个通道,设置是否允许相应

10、通道的中断。通道寄存器 TC0TC7 在输出比较中随时可以写入,它的作用是,当 TCx=TCNT时,相应的 x 通道就会发生输出比较。此时相应的引脚就可以输出高电平、低电平,或是翻转引脚的电平。这个两个寄存器中每个 OMx 和 OLx 组合在一起,来设置相应通道的引脚电平输出方式:Table16-9.CompareResultOutputAction0MxOLxAction00Nooutputcompareactiononthetinneroutputsignal01ToggleOCxoutputline10ClearOCxoutputlinetozero11SetOCxoutputlinet

11、oone(00):输出比较的通道与引脚逻辑断开,也就是输出比较的输出不会影响相应的引脚的电平。(01):翻转输出比较的引脚的电平。(10):在相应的引脚上输出低电平。(11):在相应的引脚上输出高电平。CFORC 定时器强制输出比较寄存器7654321000000000F0C7FOC6F0C5F0C4F0C3FOC2F0C1FOCQ相应位置 1 时,可以把相应通道的输出比较设为强制输出比较。一般情况下不用。OC7M:输出比较通道 7 屏蔽寄存器E543210OC7M7口C7M6OC7M5OC7M4OC7M3OC7M2OC7M1OC7MoOC7D 输出比较通道 7 数据寄存器76543210OC

12、7D7OC7D6OC7D5OC7D4OC7D3OC7D2OC7D1OC7DO通道 7 上的连续输出比较会覆盖所有其他通道的引脚上的输出结果。OC7M 就是设置其他通道的哪些通道会受通道 7 控制的。当 OC7M 的某位置 1 时,相应通道的输出比较就会受通道 7 控制,此时受控的通道在其通道上设置的 OMx和 OLx无效了, 而是按照 OC7D中对应的 OC7Dx中的值输出到相应的引脚上。 总的来说, OC7M是选择受通道 7 控制的其他通道,而 OC7D是受控的通道在通道 7 发生输出比较时的输出结果。TTOV:定时器溢出翻转寄存器543210TOV7TOV6T0V5TOV4TOV3TOV2

13、TOV1TOVO相应通道置 1 时,计数器溢出时,允许翻转输出比较引脚上的电平。这个寄存器只在输出比较模式下才有效。一般情况下,用不到这个寄存器,程序中不用做设置。OCPD(OCPD0OCPD7 当相应位置 1 时,标志位正常,但是输出比较的结果不能输出到引脚上,也就是输出比较的寄存器与引脚逻辑断开了。当相应位设为 0 时,标志位正常,引脚输出也正常。下面是相应的程序:#include/*commondefinesandmacros*/#includederivative.h/*derivative-specificdefinitions*/voidmain(void)DDRB=0XFF;PO

14、RTB=0X7F;/DisableInterrupts;TSCR2=0X07;/股置定时器分频TIOS=0X01;/通道 0 为输出比较TCTL2=0X01;/模式为翻转引脚输出电平TC0=0XAAAA;/设置输出引脚在一个周期内翻转的时间,如果这个值保持不变的话,那总的来看,/引脚输出电平的周期是不变的,周期等于计数器计数一周的时间/TTOV=0X00;/CFORC=0X01;/加上这一句,似乎没什么影响。还没清这个寄存器的具体作用。TIE=0X01;/相应通道中断允许TSCR1=0X80;/打开定时器/PORTB=PTT;EnableInterrupts;while(1);#pragmaC

15、ODE_SEG_NEAR_SEGNON_BANKEDinterruptvoidinterrupt8CH0_ISR(void)/要特别注意中断函数的书写格式,我就在这里吃了大亏DisableInterrupts;TFLG1=0 x01;/清零标志位if(TC0=0 xAAAA)改变引脚输出的占空比。输出的周期由计数器计数一周的时间决定,要改变,只能改变定时器的时钟分频TC0=0 xffff;elseTC0=0 xAAAA;PORTB_PB7=PORTB_PB7;/测试是否进入中断EnableInterrupts;XS128 中的脉冲累加器和 DG128 的很不一样。相对 DG128 来说,XS1

16、28 勺脉冲累加器大大简化了,其中只有三个寄存器需要设置:PACTLPAFLGPACNT16 位脉冲累加器 PACT 与 IOC 决用一个引脚。顾名思义,脉冲累加器就是对有效边沿(上升沿或下降沿)进行计数,然后把计数的值保存在寄存器 PACNT 中。寄存器 PACTL是 16 位脉冲累加器的核心,几乎所有的设置都是在这个寄存器中。接下来解剖一下这个核心寄存器 PACTL765432100PAENPAMODPEDGECLK1CLK0PAOVI驰PAEN:脉冲累加器允许位,置 1,则工作。置 0,则禁止。PAEN 与 TEN 无关,定时器 TEN 禁止时,脉冲累加器仍可以工作。PAMOD:工作方式

17、选择位。置 1,为门控时间累加器方式。置 0,为事件计数器方式。门控时间累加器方式:输入引脚上的有效电平会触发脉冲累加器对 64 分频后的时钟进行计数。事件计数器方式:脉冲累加器对引脚上的每个有效边沿计数。引脚上每产生一个有效边沿,脉冲累加器计数器的值就会加 1。PEDGE 边沿跳变控制位。它的功能和脉冲累加器的工作方式有关。如下表:PAMODPEDGEPinAction00Fallingedge01Risingedge10Div,by64clockenabledwithpinhighievel11Div.by64clockenabledwithpinlowlevel(00):事件计数器方式,

18、下降沿有效(01):事件计数器方式,上升沿有效(10):门控时间累加器方式,IOC7 引脚上的高电平使 64 分频后的总线时钟输入到脉冲累加器中。(11):门控时间累加器方式,IOC7 弓|脚上的低电平使 64 分频后的总线时钟输入到脉冲累加器中。CLK0CLK1 时钟选择位。其功能如下表:CLK1CLKOTimerClock00Usetrmerprescaferclockastimercounterclock01UseFKCLKasinputtotimercounterclock10UsePACLK.256astimercounterclockfrequency11UsePACLK府5636astimercounterclockfrequency(00):使用 TIM 中分频后的定时器时钟作为计数时钟(01):选 PACLK 乍为计数时钟(10):选 PACLK256 作为计数时钟(21):选 PACLK65536 作为计数时钟其中 PACL 底对总线日钟进行 64 分频后的时钟。PAVOI 脉冲累加器溢出中断允许位。置 1,则允许中断产生。置 0,则禁止中断。PAI:脉冲累加器输入中断允许位。置 1,则允许中断产生。置 0,则禁止中断。标志寄存器 PAFLG76543210R000000FftOVF*IFWPAVOF 当脉冲累加器溢出时,此位置

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论