核心内容就在这张图上:

  相信大家都明白总线的概念,在图中可以看到6个定时器模块,Micro Timer 0、Micro Timer 1、Timer 0、Timer 1、Timer 2、Timer 3,其中前两个是8位的,后四个是16位的。从图中可以看出PIT模块是以总线时钟(Bus Clock)为基准时钟的,总线时钟通过8位Micro Timer 0和Micro Timer 1倍频形成两个基时钟,即Micro Timer Base 0和Micro Timer Base 1,这两个基时钟通过16位Timer给PIT提供时钟(通过寄存器PITMUX设置)。

  原理讲完了,其实相对于PIT模块是一个24位的定时器(51单片机最多也就16位),这个计数范围还是蛮大的。

下面是一些寄存器的解释,解释完还是看代码吧。

PIT控制和强制装载微定时寄存器(PITCFLMT)

PIT控制和强制装载微定时寄存器(PIT Control and Force Load Micro Timer Register,PITCFLMT)用来使能PIT模块、冻结PIT模块、控制功耗、设置PIT工作模式,并强制装载微定时器的初始值,如图10.4所示。

PIT控制和强制装载微定时寄存器(PITCFLMT

PITE:PIT模块使能位。当PITE为0时,则禁止PIT模块功能,PIT超时标志寄存器PITTF中的标志位清零。当置位PITE时,能够使能相应定时器位PCE,相应装载寄存器开始向下递减计数。

0表示禁用PIT模块(低功耗模式);

1表示使用PIT模块。

PITSWAI:等待模式下PIT停止位。

0表示等待模式下,PIT模块正常运行;

1表示等待模式下,PIT模块停止产生时钟信号,冻结PIT模块。

PITFRZ:冻结模式下PIT计数器冻结位。冻结模式下,PITFRZ位确定PIT工作状态。冻结模式下,断点调试时,该位冻结PIT计数器,可有效避免中断的发生。

0表示冻结模式下,PIT模块正常运行;

1表示冻结模式下,PIT模块停止计数。

PFLMT1~PFLMT0:PIT微定时器1和PIT微定时器0强制装载位。如果相应的微定时器激活且PIT模块使能(PITE=1)时,PFLMT=1,则相应的8位微定时器的装载寄存器值将立即装载到8位微定时器的递减计数器。写0操作无效;读取这2位,总是返回0。

注意:强制装载微定时器值会影响到使用该微定时基准的所有定时器通道。

PIT通道使能寄存器(PITCE

PIT通道使能寄存器(PIT Channel Enable Register,PITCE),用来使能PIT定时器3、PIT定时器2、PIT定时器1、PIT定时器0通道,如图10.6所示。

PCE3,PCE2,PCE1,PCE0:PIT定时器3、PIT定时器2、PIT定时器1、PIT定时器0的通道使能位。如果PCE位清零,则禁用PIT通道,PITTF寄存器中的相应标志位也会清零。当PCE位置1,且PIT模块使能(PITE=1)时,则16位定时计数器将装载初始计数值,从该初始值开始向下递减计数。

0表示禁用相应的PIT通道;

1表示使用相应的PIT通道。

PIT复用寄存器(PITMUX

PIT复用寄存器(PIT Multiplex Register,PITMUX),用来选择PIT定时器3、PIT定时器2、PIT定时器1、PIT定时器0通道的复用位,如图10.7所示。

PMUX3、PMUX2、PMUX1、PMUX0:PIT定时器3、PIT定时器2、PIT定时器1、PIT定时器0的通道复用选择位。这些位选择相应的16位定时器连接的是微定时基准1还是微定时基准0;修改PMUX位,则相应的16位定时器将会立即切换微定时基准。

0表示相应的16位定时器使用微定时基准0计数;

1表示相应的16位定时器使用微定时基准1计数。

PIT 中断使能寄存器(PITINTE

PIT 中断使能寄存器(PIT Interrupt Enable Register,PITINTE),用来使能PIT定时器3、PIT定时器2、PIT定时器1、PIT定时器0的超时中断,如图10.8所示。

PINTE3、PINTE2、PINTE1、PINTE0:PIT定时器3、PIT定时器2、PIT定时器1、PIT定时器0的超时中断使能位。该位使能,一旦相应PIT通道的PTF标志位置位,则允许产生相应的中断服务请求。当中断被挂起时,该位使能,PTF=1将会立即产生中断。为了避免该中断发生,必须先清零相应的PTF标志位。

0表示禁止相应的PIT通道中断请求;

1表示允许相应的PIT通道中断请求。

PIT 微定时装载寄存器0 1PITMTLD0/1

PIT 微定时装载寄存器0 和1(PIT Micro Timer Load Register 0 和1,PITMTLD0~1),用来设置PIT微定时器的初始值,如图10.10所示。

PMTLD7~0:PIT微定时器装载初值。这8位用来设置8位微定时器的模数递减计数器的装载初值,PITMTLD寄存器写入新的数值不会重新启动微定时器。当微定时器的计数值减到零时,则重新装载PMTLD寄存器值。如果想要立即装载初值,只要PITCFLMT寄存器中的PFLMT置位就会立即更新新的初值到递减计数器。

PIT装载寄存器03PITLD03

PIT装载寄存器0~3(PIT Load Register 0 to 3,PITLD0~3),用来设置16位模数递减计数器的装载初值,如图10.11所示。

PLD15~0:PIT模块的16位模数递减计数器的装载初值。为了确保数据的一致性,写入PITLD寄存器的新值必须按照16位访问进行操作,否则不会重启定时器。当定时器向下递减计数到0时,则PTF超时标志位置1,重新装载该寄存器值。如果想要立即装载初值,只要PITFLT寄存器中的PFLT置位就会立即更新新的初值至计数器。

PIT计数寄存器03 (PITCNT03)

PIT计数寄存器0~3(PIT Count Register 0 to 3,PITCNT0~3)中存放的是16位模数递减计数器的当前值,如图10.12所示。

PCNT15~0:该寄存器中的16位表示16位模数递减计数器的当前值,读取该计数寄存器的值必须在一个时钟周期内按照16位访问进行操作。

觉得上面难理解,下面是通俗的解释。

1)、PIT Contorl and force Lad Micro Timer Register(PITCFLMT)
    该寄存器用于PIT模块的使能设置和工作方式设置。通常设置该寄存器中的PITE为即可,即PITCFLMT_PITE=1,使PIT使能。

2)、PIT Channel Enable Register(PITCE)
    该寄存器用于对PIT模块中的4个通道使能进行设置。如果使用某个通道时,对对应位进行置一即可,即PITCE_PCEx=1,其中x代表通道序号,为0~3。

3)、PIT Micro Timer Load Register 0 to 1 (PITMTLD0-1)
    该寄存器用于设置PIT模块中的8位计数器初值,以实现24位的计数。设定值为0到255范围。

4)、PIT Load Register 0 to 3(PITLD0-3)
    该寄存器用于设置PIT模块中的16位计数器初值,和8位计数器配合而成24位计数器。设定值范围0-65535。

5)、PIT Multiplex Register(PITMUX)
    该寄存器对定时器通道的8位时基进行选择。因为8位计数器只有两个,所以在将8位计数器和16位计数器连接时,可以选择不同的8位时基。
    当设置为0时,对应通道选择时基0;置一时,对应通道选择时基1。
    如PITMUX_PMUX0=1为通道0选择时基1。

6)、PIT Interrupt Enable Register(PITINTE)
    该寄存器为中断使能寄存器,为不同的PIT通道中断使能。设定为0时,相应通道中断禁止。置一时,相应通道使能。
    如PITINTE_PINTE0=1时,PIT通道0定时中断使能,当计数器递减溢出时,申请中断。

7)、PIT Time-Out Flag Register(PITTF)
    该寄存器为溢出标志位,当某一通道的8位计数器和16位计数器递减到0时,该位置一。给改位写1则清除该标志位。
    可以通过查询该位来判断定时是否完成。

/*
********************************************************************************
*                               PIT0_Init (void)
* 该函数为中断PIT0初始化函数,每10ms中断一次
* 时钟源:外部晶振8MHz,总线频率8MHZ
* 公式T=(PITMTLD + 1) * (PITLD + 1) / fBUS.
* 时间间隔 T=8*10000/8M=10ms
* 程序每10ms中断一次,中断服务程序在CPU12ISRs.c中的ISR void PIT0_ISR(void)中
********************************************************************************
*/
void PIT0_Init(void)
{PITCFLMT_PITE=0;//关闭PITPITCE_PCE0 = 1;      //PIT通道使能寄存器中,PCE0通道使能;还有PITCE_PCE1~3可用PITMUX = 0x00;          //通道0/1/2/3  使用时基0//fbus=8M,10ms中断,计算后 (PITMTLD+1)*(PITLD+1)/fBUS=8*10000*125ns=10ms  PITMTLD0 =  8-1; /Macro timer0 load =   8, output->Busclk/8   to 16bit-timerPITLD0   = 10000-1; //Ch0: (PITMTLD+1)*(PITLD+1)/fBUS=8*10000*125ns=10msPITINTE_PINTE0 = 0x01;//开启PIT通道0的中断功能    PITCFLMT_PITE=1;//使能PIT}/*
********************************************************************************
*                         ISR void PIT0_ISR(void)
* 该函数为PIT0中断服务程序,每10ms中断一次
* 时钟源:外部晶振8MHz,总线频率8MHZ
* 公式T=(PITMTLD + 1) * (PITLD + 1) / fBUS.
* 时间间隔 T=8*10000/8M=10ms
********************************************************************************
*/#pragma CODE_SEG NON_BANKED
ISR void PIT0_ISR(void)
{PITTF_PTF0=1;       //中断0清中断标志位}
#pragma CODE_SEG DEFAULT

飞思卡尔S12系列(基于MC9S12XET256MAA和/MC9S12XEP100)中断PIT资料总结和分享相关推荐

  1. 飞思卡尔S12系列(基于MC9S12XET256MAA和/MC9S12XEP100)锁存器资料总结和分享

    最近在公司做项目,用到飞思卡尔S12系列芯片,为了让自己养成良好习惯,以后每做一部分,都会总结出来,方便自己和他人. 今天讲讲飞思卡尔锁存器部分. CRG时钟合成寄存器(SYNR) 读:任何时刻:写: ...

  2. 关于飞思卡尔S12系列单片机SPI通信MODRR配置

    MODRR为模块路径选择寄存器,作为CAN0/4与SPI0/1/2映射引脚. 例如选择CAN0为PM0/1引脚,则配置MODRR_MODRR0&1=0.当MODRR_MODRR4=0时,SPI ...

  3. freescale飞思卡尔 HC9S12 系列单片机 Flash擦写详解(一)之时钟设置

    Flash擦写的内容,个人做HC9S12系列单片机时觉得应该是各模块内容中最难而且是最麻烦的一步了.只有能够对Flash进行擦写以后,所做的Bootloader才有真正手段将串口或者其他通讯手段接收到 ...

  4. 飞思卡尔imx7 html5,i.MX6UL 飞思卡尔即将发布基于ARM Cortex-A7核心的低功耗处理器 i.MX 6UltraLite Processor...

    i.MX6UL 飞思卡尔即将发布基于ARM Cortex-A7核心的低功耗处理器 i.MX 6UltraLite Processor Freescale飞思卡尔即将于7月份发布全新的基于ARM Cor ...

  5. ftm模块linux驱动,飞思卡尔k系列_ftm模块详解.doc

    飞思卡尔k系列_ftm模块详解 1.5FTM模块1.5.1 FTM模块简介FTM模块是一个多功能定时器模块,主要功能有,PWM输出.输入捕捉.输出比较.定时中断.脉冲加减计数.脉冲周期脉宽测量.在K1 ...

  6. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(1)- KBOOT架构

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT架构. Bootloader是嵌入式MCU开发里很常见的一种专用的应用程序,在一个没有Boo ...

  7. 飞思卡尔XS128系列(三) PIT

    刚报名参加了第五届飞思卡尔智能车竞赛的时候,知道要用飞思卡尔的16位单片机,当时也没在意,就随便买了本这方面的书,记得书名是:<基于HCS12的嵌入式系统设计>,我是因为这本书各模块后面的 ...

  8. 飞思卡尔MKL系列单片机用jlink烧写程序出现的Kinetis (connect): Timeout while halting CPU. CPU does not stop.问题

    最近用Jlink烧写飞思卡尔MKL16Z128单片机时发现经常出现不能连接成功的情况,用的是SWD接口,排查了好久后来发现问题在单片机的RESET脚上,因为之前用SWD接口的时候只接4线(SWD.SC ...

  9. freescale飞思卡尔 HC9S12 系列单片机 Flash擦写详解(三)之Flash控制器指令执行

    前面我们介绍了Flash主要的几个寄存器,如果还有其他的疑问可以再返回去看看或者直接查阅S12系列单片机的手册中相关的内容.这一节我将介绍Flash控制器指令执行的过程,并举出相关的例子,希望能够起到 ...

最新文章

  1. Creating my own systemd service files on Fedora 16(x86_64)
  2. python3 文本文件内容去除重复行
  3. linux 系统lv扩展_Linux增加LV(逻辑卷)容量
  4. 大数据WEB阶段(十一)Ajax、URL编码
  5. Mysql中DATE_SUB 使用方法结合查询一天内,一周内,一月内的信息实例讲解
  6. 恒强制版系统980_速来围观 | 恒强制版小图高级功能讲解
  7. 浏览器怎么扫描二维码_让你的chrome浏览器开启自动翻译,浏览任何语言不是梦...
  8. JavaScript学习(六十九)—正则表达式实训题
  9. matlab模拟光栅,matlab对光栅的仿真代码
  10. java 可重入锁 clh_Java可重入锁原理
  11. 【学亮IT手记】Java 8新特性实例介绍
  12. inDesign教程,如何在文档中添加链接和动画?
  13. Shell学习笔记 - 运算符
  14. java编程神器,IDEA的下载安装
  15. 预测nba本赛季球队夺冠的胜率并进行相关分析
  16. wps页眉怎么设置不同页码_wps版word怎么从第二页设置页眉页脚
  17. 电信网络知识中的一些中英文简称对应表
  18. 保研一年来的心路历程
  19. 分布式操作系统 - 4.分布式通信管理
  20. python可以ps吗_Python功能确实非常强大!不止PS可以美化照片Python也可以!满分...

热门文章

  1. 【3】SCI易中期刊推荐——人工智能领域(中科院1区)
  2. php ucp原生项目,ucp.php
  3. 绘一场流年锦瑟,听一曲清扬花落
  4. 2020-7-28 ------2021-2-2 年度总结
  5. 武汉防水资质办理-办理全流程解析
  6. 如何在文章中设置灰色文本框(正文底色)
  7. css 使图像变成灰色的技巧
  8. 【实战1】用BeatuifulSoup解析器爬取豆瓣Top250电影的名称
  9. EsgynDB如何选择表分区
  10. Linux 统计代码行数命令