收藏 分销(赏)

定时器82295.doc

上传人:xrp****65 文档编号:7441233 上传时间:2025-01-04 格式:DOC 页数:13 大小:195KB 下载积分:10 金币
下载 相关 举报
定时器82295.doc_第1页
第1页 / 共13页
定时器82295.doc_第2页
第2页 / 共13页


点击查看更多>>
资源描述
1、定时器/计数器系统控制寄存器 1(TSCR1)   寄存器偏移量:$0006 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 TEN    TSWAI TSFRZ TFFCA 0        0        0         0         可在任何时候读或写。 TSCR1 寄存器是定时器模块的总开关,它决定模块是否启动以及在中断等待、BDM 方式下的行为,还包括标志的管理方式。其各位的意义如下:   TEN:定时器使能位,此外它还控制定时器的时钟信号源。要使用定时器模块的 IC/OC 功能,必须将 TEN 置位。如果因为某种原因定时器没有使能,脉冲累加器也将得不到 ECLK/64 时钟,因为 ECLK/64 是由定时器的分频器产生的,这种情况下,脉冲累加器将不能进行引脚电平持续时间的累加。 0:定时器/计数器被禁止,有利于降低功耗。 1:定时器/计数器使能,正常工作。   TSWAI:等待模式下计时器关闭控制位。 【注意】定时器中断不能用于使 MCU 退出等待模式。 0:在中断等待模式下允许 MCU 继续运行。 1:当 MCU 进入中断等待模式时,禁止计时器。   TSFRZ:在冻结模式下计时器和计数器停止位。 0:在冻结模式下允许计时器和计数器继续运行。 1:在冻结模式下禁止计时器和计数器,用于仿真调试。 【注意】TSFRZ 不能停止脉冲累加。   TFFCA:定时器标志快速清除选择位。 0:定时器标志普通清除方式。 1:对于 TFLGl($0E)中的各位,读输入捕捉寄存器或者写输出比较寄存器会自动清除相应的标志位 CnF。对于 TFLG2($0F)中的各位,任何对 TCNT 寄存器($04、$05)的访问均会清除 TOF 标志;任何对 PACN3 和 PACN2 寄存器($22,$23)的访问都会清除 PAFLG 寄存器($21)中的 PAOVF 和 PAIF 位。任何对 PACN1 和 PACN0 寄存器($24,$25)的访问都会清除 PBFLG 寄存器($21)中的 PBOVF 位。 【说明】这种方式的好处是削减了另外清除标志位的软件开销。此外,必须特别注意避免对标志位的意外清除。     2、计时器系统控制寄存器 2(TSCR2)   寄存器偏移量:$000D Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 TOI    0        0        0        TCRE  PR2     PR1     PR0     可在任何时候读或写。 TOI:定时器/计时器溢出中断使能。 0:中断被禁止。 1:当 TOF 标志被置位时发出硬件中断请求。 【注意】TOF标志位在TFLG中   TCRE:定时器/计数器复位使能。 该位在通道 7 成功输出比较之后允许时钟计数器复位。该操作模式类似于递增型计数器。 0:计数器复位禁止,计数器自由计数。 1:通道 7 成功输出比较后计数器将被复位。   【说明】如果 TC7=$0000 并且 TCRE=1,TCNT 将继续保持$0000。 如果 TC7=$FFFF 并且 TCRE=1,当 TCNT 从$FFFF 到$0000 之间被复位后TOF 将永远不被置位。   PR2,PR1,PR0:计数器预分频选择。 这三位所决定的分频因子如下表所示。分频因子选择 PR2 PR1 PR0 PrescaleFactor 0 0 0 1 0 0 1 2 0 1 0 4 0 1 1 8 1 0 0 16 1 0 1 32 1 1 0 64 1 1 1 128   【说明】新设定的分频因子不会立即起作用,直到下一个触发沿到来那里所有预分频计数器值均为零。 4、主定时器中断标志寄存器(TFLG1、TFLG2)   TFLG1 寄存器偏移量:$000E Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 C7F C6F C5F C4F C3F C2F C1F C0F   TFLG2 寄存器偏移量:$000F Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 TOF 0 0 0 0 0 0 0   所示的 TFLG1、TFLG2 为中断标志寄存器,其中 TFLG1 对应 8 个 IC/OC 通道,当某 CnF=1 时说明对应的 IC/OC 通道有动作,表明该通道有中断事件发生。TFLG2 只有一个标志位 TOF,作为核心计数器的中断请求标志。当 TOF=1 时说明核心计数器溢出。要清除某个标志位,只需向该位写 1,向某位写 0 不影响该位的状态。当 TSCR 中的 TFFCA 位置位时,读 IC 通道或写 OC 通道 ($10-$1F)将自动清除该通道标志CnF,对 TCNT 的任何访问将自动清除 TFLG2。   CnF:IC/OC 通道中断请求标志。 0:上次清除标志以来,IC/OC 通道没有有效动作。 1:IC/OC 通道已经出现动作。将寄存器 ICSYS($2B)中的 TFMOD 位和 ICOVW 寄存器($2A)联合使用,可以使定时器在两次捕捉后才产生中断,而不是每次捕捉均产生动作。两次捕捉结果分别在捕捉和保持寄存器里面。   TOF:定时器溢出标志,当 16 位自由定时器从$FFFF 回滚到$0000 时,该位 置位。将$80 写入到 TFLG2 将自动清除该位(写1清零)。详见前面关于 TMSK2 中 TCRE 控制位的解释。   5、计时器中断使能寄存器(TIE)   寄存器偏移量:$000C Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 C7I C6I C5I C4I C3I C2I C1I C0I   可在任何时候读或写。 TIE 寄存器中的位与状态寄存器 TFLG1 中的标志位相对应。如果将 TIE 中的某位清 0,相应的标志位就不能引起硬件中断。如果被置 1,相应的标志位就可以引起中断。 C7I-C0I:输入捕捉/输出比较“x”中断使能。 3、控制寄存器(TCTLl-TCTL4)   TCTLl-TCTL4 分为两组,分别对 IC 和 OC 电路进行设定,每组 16 个二进制位,每两个二进制位管理一个通道。其中 TCTLl、TCTL2 设定各个 OC 通道 匹配时的动作,包括切断 OC 与输出引脚的联系,而 TCTL3、TCTL4 设定 IC 响 应引脚的何种动作,包括禁止 IC 的响应。   TCTL1 寄存器偏移量:$0008 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 OM7 OL7 OM6 OL6 OM5 OL5 OM4 OL4   TCTL2 寄存器偏移量:$0009 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 OM3 OL3 OM2 OL2 OM1 OL1 OM0 OL0 可在任何时候读或写。   OMn、OLn 分别设定输出方式和输出电平,这 8 对控制位(OM7、OL7---OMO、 OL0)编码后用于指定通道比较成功后的输出动作。如果每对当中至少有一个为 1,对应引脚就固定为相应通道的输出,而与 DDRT 中的对应位无关。 当二者同时为 0 时,OC 与输出引脚断开。 输出比较动作设置   OMn OLn 动作 0 0 定时器与引脚断开 0 1 OCn输出翻转 1 0 OCn输出清零 1 1 OCn输出置1   TCTL3 寄存器偏移量:$000A Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 EDG7B EDG7A EDG6B EDG6A EDG5B EDG5A EDG4B EDG4A TCTL4 寄存器偏移量:$000B Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 EDG3B EDG3A EDG2B EDG2A EDG1B EDG1A EDG0B EDG0A 可在任何时候读或写。 各个控制位的作用如下: EDGnB、EDGnA 输入捕捉边沿控制位,这 8 对控制位(EDG7B、EDG7A—EDG0B、EDG0A)对输入捕捉的边沿检测电路进行设置。当二者同时为 0 时,IC 与输入引脚断开。   输入捕捉边沿检测电路设置 EDGnB EDGnA 边沿检测电路设置 0 0 禁止捕捉 0 1 捕捉上升沿 1 0 捕捉下降沿 1 1 上升沿下降沿均捕捉 【注意】为了使 OMn、OLn 指定的引脚动作有效,OC7M 中的对应位必须清 0。若要使用 16 位脉冲累加器 A 和 B,并使它们分别独立于 IC/OC7 和 IC/OC0,必须设置对应的 IOSn:1、OMn=0、OLn=0,同时寄存器 OC7M 中的OC7M7、OC7M0 位必须清 0。 6、IC/OC 选择寄存器(TIOS) 寄存器偏移量:$0000 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 IOS7 IOS6 IOS5 IOS4 IOS3 IOS2 IOS1 IOS0 TIOS 寄存器用于指定各个通道的功能,即工作于 IC 还是 OC 方式。当某位 IOSn=0 时,对应的通道 n 为输入捕捉(1C)通道,否则当 IOSn=1 时,通道 n为输出比较(OC)通道。其中的各位可以在任何时候写入或读出。 【说明】上电后该寄存器默认为$00,TSCR 中的 TEN 默认也为 0,这时所有通道处于通用 I/O 方式,将 TEN 置位后各个通道进入 IC 方式,要将某些通道设置成 OC 方式,必须对 TIOS 进行设置,即将有关位置 1。设置成 OC 的通道其引脚具有降功率驱动功能,设置成 IC 的通道具有内部上拉功能,但上电后均处于关闭状态,可以根据需要启用。   7、IC/OC 寄存器(TC0-TC7) 每个 IC 或 OC 通道都设置有一个 16 位的寄存器,对于 IC(输入捕捉)通道, 当通道的边沿探测器检测到由 EDGnA、EDGnB 指定的条件时,将自由定时器的值捕捉到寄存器 TCn,随后程序可以读取和处理;对于 OC(输出比较)通道,程序将预定的时刻写入到 TCn,当自由定时器的值与其相等时,触发由 OMn、OLn 所指定的输出动作。定时器模块共有 TC7-TC0 等 8 个 16 位 IC/OC 寄存器。 TC0 寄存器偏移量:$0010-$0011 Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 TC1 寄存器偏移量:$0012-$0013 Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 TC2 寄存器偏移量:$0014-$0015 Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 TC3 寄存器偏移量:$0016-$0017 Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 TC4 寄存器偏移量:$0018-$0019 Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 TC5 寄存器偏移量:$001A-$001B Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 TC6 寄存器偏移量:$001C-$001D Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 TC7 寄存器偏移量:$001E-$001F Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 8、定时器核心寄存器(TCNT) 寄存器偏移量:$0004-$0005 Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0   TCNT 是递增计数器,它不停地对内部时钟信号计数、程序可随时读取,但在普通模式下禁止写入。TCNT 应按字访问,分别访问高、低字节可能得到错误的结果。 【说明】在特殊模式下,TCNT 可写,但因为写操作与预分频器时钟不同步,TCNT寄存器写入后,其第一个周期可能是一个不同的值。   9、输出比较通道 7 屏蔽寄存器(OC7M) 寄存器偏移量$0002 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 OC7M7 OC7M6 OC7M5 OC7M4 OC7M3 OC7M2 OC7M1 OC7M0   可在任何时候读或写。 前面已经说明,OC7 具有特殊地位,它匹配时可以直接改变其他 7 个输出引脚的状态,并覆盖各个引脚原来的匹配动作结果,寄存器 OC7M 决定哪些通道将处于 OC7 的管理之下。OC7M 中的各位与 PORTT 口寄存器的各位一一对应。当通过 TIOS 将某个通道设定为输出比较时,将 OC7M 中的相应位置 1,对应的引脚就是输出状态,与 DDR 中的对应位的状态无关。但 OC7Mn 并不改变 DDR 相应位的状态。 OC7M 具有更高的优先级,它优于通过 TCTL1 和 TCTL2 寄存器中的 OMn 和 OLn 设定的引脚动作,若 OC7M 中某个位置 1,就会阻止相应引脚上由 OM 和 OL 设定的动作。   10、输出比较通道 7 数据寄存器(OC7D) 寄存器偏移量:$0003 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 OC7D7 OC7D6 OC7D5 OC7D4 OC7D3 OC7D2 OC7D1 OC7D0   可在任何时候读或写。 OC7M 对于其他 OC 输出引脚的管理限于将某个二进制值送到对应引脚,这个值保存在寄存器 OC7D 中的对应位中。当 OC7 匹配成功后,若某个 OC7Mn=1, 则内部逻辑将 OC7Dn 送到对应引脚。 OC7D 中的各位与 PORTT 口寄存器的各位一一对应。当通道 7 比较成功时,如果 OC7M 中的某个位为 1,OC7D 中的对应位将被输出到 PORTT 的对应引脚。 当 OC7M 中的某个位为 1 时,通道 7 匹配成功的动作如果与通道 6-0 的动作发生在同一个周期,前者将覆盖后者。因此各个通道的动作将依赖于 OC7D中各个位的设置。 输入捕捉(IC)编程步骤:   初始化函数 TIOS---选择工作方式为IC TCTLx---设置对应位输入捕捉的方式(x=3、4,高位是3,低位是4) TSCRx---控制寄存器设置,包括工作使能、确定工作方式(x=1)、中断允许、预分频 TIE---中断使能 中断函数 清除标志位---TFLG1 处理函数   【例程3】 [c-sharp] view plaincopyprint? 1. //---------------------------------------------------------------------------//    2.    3. //功能说明:利用PP3通道产生40Hz,占空比为50%的方波    4.    5. //          利用PT0采集方波的个数,并在PB口显示    6.    7. //程序设计:电子设计吧    8.    9. //设计时间:2010.01.13    10.    11. //---------------------------------------------------------------------------//   12.   13. #include <hidef.h>      /* common defines and macros */   14.   15. #include <mc9s12dg128.h>     /* derivative information */   16.   17. #pragma LINK_INFO DERIVATIVE "mc9s12dg128b"    18.    19.     20.    21. unsigned int   Input_Num;   22.    23.     24.    25. //----------------------时钟初始化------------------------------//    26.    27. void PLL_Init(void)      //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)    28.    29. {                     //锁相环时钟=2*16*(2+1)/(1+1)=48MHz    30.    31.   REFDV=1;            //总线时钟=48/2=24MHz    32.    33.   SYNR=2;   34.    35.   while(!(CRGFLG&0x08));   36.    37.   CLKSEL=0x80;   38.    39. }   40.    41. //--------------------通道0输入捕捉初始化-------------------//    42.    43. void ECT0_Init(void)                44.    45. {                             46.    47.   TSCR2=0x06;                   //禁止溢出中断,分频系数64(24/64MHz)     48.    49.   TIOS_IOS0=0;                  //通道0为输入捕捉    50.    51.   TCTL4=0x01;                   //捕捉上升沿    52.    53.   TIE_C0I=1;                     //通道0输入捕捉中断允许    54.    55.   TSCR1=0x80;                   //使能定时器     56.    57. }   58.    59. //---------------------PWM通道3初始化程序-------------------//    60.    61. void PWM_Init(void)     62.    63. {   64.    65.   PWME_PWME3=0x00;  // PWW is disabled               禁止                 66.    67.   PWMPRCLK=0x33;      // 0b0011 0011 A=B=24M/8=3M      时钟预分频寄存器设置    68.    69.   PWMSCLA=150;         // SA=A/2/150=10k                时钟设置    70.    71.   PWMSCLB=150;         // SB=B/2/15 =10k               时钟设置    72.    73.   PWMCTL=0x00;         // no concatenation              控制寄存器设置                                    74.    75.   PWMCLK_PCLK3=1;   // PWM3-----SB                   时钟源的选择    76.    77.   PWMPOL_PPOL3=1;   // Duty=High Time                极性设置    78.    79.   PWMCAE_CAE3=0;    // left-aligned                  对齐方式设置    80.    81.   PWMPER3=250;          // Frequency=SB/250=40           周期寄存器设置    82.    83.   PWMDTY3=125;         // Duty cycle = 50%              占空比寄存器设置    84.    85.   PWME_PWME3=1;     // enable                        使能    86.    87. }   88.    89. //----------------------主函数-------------------------//    90.    91. void main(void)    92.    93. {   94.    95.   PLL_Init();   96.    97.   PWM_Init();   98.    99.   ECT0_Init();   100.    101.   DDRB=0XFF;   102.    103.   PORTB=0X00;   104.    105.   EnableInterrupts;   106.    107.   for(;;)    108.    109.   {   110.    111.   } /* wait forever */   112.    113.   /* please make sure that you never leave this function */   114.    115. }   116.    117. //--------------------转速计算:-------------------------------//    118.    119. //    120.    121. //智能车转速子函数    122.    123. //    124.    125. //----------------------------------------------------------------//    126.   127. #pragma CODE_SEG NON_BANKED    //定时器通道0输入捕捉中断             128.    129. void interrupt 8 Timer0_Onput(void)    130.    131. {   132.    133.   TFLG1_C0F=1;      //清中断标志位    134.    135.   Input_Num++;   136.    137.   PORTB=Input_Num;   138.    139.   if(Input_Num>=255)   140.    141.   {   142.    143.     Input_Num=0;   144.    145.   }        146.    147. }   输出比较(OC)编程步骤:   初始化函数 TIOS---选择工作方式为OC TCx---通道x的OC寄存器赋初值,经过N秒后进入第一次中断 TCTLx---设置对应位输入捕捉的方式(x=1、2,高四位是1,低四位是2) TSCRx---控制寄存器设置,包括工作使能、确定工作方式(x=1)、中断允许、预分频 TIE---中断使能 中断函数 清除标志位---TFLG1 重新赋初值TCx 【例程4】 1、波特率控制寄存器(SCIBDH、SCIBDL)     IREN:红外调制模式使能位 1 使能 0 禁止 TNP[0..1]:窄脉冲发射位 SBR[0..12]:波特率设置位 When IREN = 0 then, SCI baud rate = SCI bus clock / (16 x SBR[12:0]) When IREN = 1 then, SCI baud rate = SCI bus clock / (32 x SBR[12:1]) 【说明】波特率发生器在复位后是禁止的,在设置TE、RE(在SCICR2寄存器中)后才会工作。当(SBR[12:0] = 0 and IREN = 0) 或者 (SBR[12:1] = 0 andIREN = 1),波特率发生器不工作。 【注意】在未写入SCIBDL,写SCIBDH没有反应。一般地,设置IREN=0,SR=52(总线频率8MHz),波特率为9600。  
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服