单片机中rti_rti8188 - CSDN
精华内容
参与话题
  • 最近看了一下飞思卡尔的MC9S12XS128MAL单片机,对其定时器这一块感觉很麻烦不像STM32那样直观,可以选择多种配置方式,XS128的这三个模块功能相互有重复功能,但又各有特点。看了好多网友的观点,现将自己对这三个...

            最近看了一下飞思卡尔的MC9S12XS128MAL单片机,对其定时器这一块感觉很麻烦不像STM32那样直观,可以选择多种配置方式,XS128的这三个模块功能相互有重复功能,但又各有特点。看了好多网友的观点,现将自己对这三个模块的理解总结一下。


            PIT模块,与I/O口没有物理连接,核心是两个定时器装载值,我的理解就是8为的用来分频,16位的用来计数,功能就是周期定时产生中断,没有额外特殊的功能。在一个PID数字控制系统中,可以用来做控制周期T的定时。


            TIM模块核心是一个16位的计数器,有8个物理I/O口,主要有三个功能:1、输入捕获,可以对通道的边沿进行检测,并保留计数器的值;2、输出比较,计数器值与设定值可以比较,对I/O产生动作 ;3、脉冲累加,对脉冲个数或电平进行计数,此功能在IOC7脚, 在PID调速系统中,可以用此功能读取编码器的脉冲数从而达到测速目的。


            RTI模块,也叫实时中断,设置两个寄存器即可实现功能,一个使能,一个用来设置定时周期。此模块时钟来源为晶振时钟,没有物理I/O口。实现的功能和PIT是一样的。


           我认为三个模块的共同点就是都可以定时,都可以产生定时中断。不同点是:

           1:RTI模块相比PIT模块,PIT 时钟电路每固定一段时间都必须更新一次时间信息,这个更新的责任就落在MCU身上了。对于那种比较繁重的系统而言,“进行一次更新”会耗费许多的资源。RTI 专注于记时工作,使MCU可以空出来处理其它的工作。外部晶振时钟可以直接“驱动”RTI。 

           2:PIT相比TIM更像STM32中的嘀嗒定时器,就是定时的功能。而TIM模块的计数器更多的是对I/O口动作的计数,包括 跳变沿的计数啊,电平的宽度啊,输出比较啊等等,若用TIM计数还需要设置将定时器与引脚断开,设置繁琐且浪费资源。

          欢迎大家批评指正,转载标注来源。



            


    

    展开全文
  • RTI(实时时钟中断)

    2019-06-26 04:45:34
    1、RTI clock input (RTICLK)-->frome SYSCLK2 2、四个实时时钟中断 INT0~3 3、四个DMA请求信号DMAREQ0~3 4、INT0~3的位置和DMAREQ0~3相同 5、释放两个计数寄存器OVLINT0~1 转载于:...

    1、RTI clock input (RTICLK)-->frome SYSCLK2

    2、四个实时时钟中断 INT0~3

    3、四个DMA请求信号DMAREQ0~3

    4、INT0~3的位置和DMAREQ0~3相同

    5、释放两个计数寄存器OVLINT0~1

     

     

    转载于:https://www.cnblogs.com/itxiaocaiyidie/archive/2012/01/07/2316068.html

    展开全文
  • 飞思卡尔RTI实时中断模块

    千次阅读 2018-04-09 10:33:08
     第一步,实时中断RTI 在默认情况下是关闭的,怎样才能让 RTI 工作呢? 这就用到实时中断控制寄存器 RTICTL 了。 RTICTL是一个八位寄存器,第七位没定义,只用到低七位[RTR6~RTR0]。当RTR[6:4]=000时,实时中断被...

    实时中断就是一个定时模块,定时溢出,产生中断。 第一步,实时中断RTI 在默认情况下是关闭的,怎样才能让 RTI 工作呢? 这就用到实时中断控制寄存器 RTICTL 了。 RTICTL是一个八位寄存器,第七位没定义,只用到低七位[RTR6~RTR0]。当RTR[6:4]=000时,实时中断被禁止,只要当RTR[6:4] 不全为0时,实时中断就开了同时实时中断的溢出周期也是由该寄存器配置的。 RTI 的参考时间是外部晶振的时钟OSCCLK。故,实时中断的溢出时钟周期=(RTR[3:0]+1) x (2的(RTR[6:4] + 9)次方)/OSCCLK  第二步,要想在实时中断溢出时产生一个中断,则用到寄存器 CRGINT 了。                 当CRGINT_RTIE=1时,每个周期结束时,就会产生一个中断只要配置好上面说的两个寄存器,再写上相应的中断函数,实时中断就可以用了。顺便提一下,实时中断 RTI 的中断号是 7 CRGFLG_RTIF 是实时中断的标志位,当 RTI 溢出时,CRGFLG_RTIF 就会由硬件置1,向CRGFLG_RTIF 写1,可以清零标志位。这和51单片机不一样,51单片机的标志位清零是向相应的寄存器写0 与 RTI 相关的寄存器还有 CLKSEL_RTIWAI,不过一般都不会用到。当CLKSEL_RTIWAI=1时,只要系统进入等待模式,RTI 就停止工作。当CLKSEL_RTIWAI=0时,在等待模式下,RTI 仍然工作实时中断写到这里接进尾声了,下面附些与实时中断相关的程序:实时中断就是一个定时模块,定时溢出,产生中断。 第一步,实时中断RTI 在默认情况下是关闭的,怎样才能让 RTI 工作呢? 这就用到实时中断控制寄存器 RTICTL 了。 RTICTL是一个八位寄存器,第七位没定义,只用到低七位[RTR6~RTR0]。当RTR[6:4]=000时,实时中断被禁止,只要当RTR[6:4] 不全为0时,实时中断就开了同时实时中断的溢出周期也是由该寄存器配置的。 RTI 的参考时间是外部晶振的时钟OSCCLK。故,实时中断的溢出时钟周期=(RTR[3:0]+1) x (2的(RTR[6:4] + 9)次方)/OSCCLK  第二步,要想在实时中断溢出时产生一个中断,则用到寄存器 CRGINT 了。                 当CRGINT_RTIE=1时,每个周期结束时,就会产生一个中断只要配置好上面说的两个寄存器,再写上相应的中断函数,实时中断就可以用了。顺便提一下,实时中断 RTI 的中断号是 7 CRGFLG_RTIF 是实时中断的标志位,当 RTI 溢出时,CRGFLG_RTIF 就会由硬件置1,向CRGFLG_RTIF 写1,可以清零标志位。这和51单片机不一样,51单片机的标志位清零是向相应的寄存器写0 与 RTI 相关的寄存器还有 CLKSEL_RTIWAI,不过一般都不会用到。当CLKSEL_RTIWAI=1时,只要系统进入等待模式,RTI 就停止工作。当CLKSEL_RTIWAI=0时,在等待模式下,RTI 仍然工作实时中断写到这里接进尾声了,下面附些与实时中断相关的程序:
                 


    #include <hidef.h>     
    #include <mc9s12xs128.h>    
    #pragma LINK_INFO DERIVATIVE "mc9s12xs128"
    void RTI_INIT()       //实时中断 RTI 初始化函数
    {
    CRGINT_RTIE=1;       // 允许在每个周期结束产生中断
    RTICTL=0x59;     // 设置RTICTL为 0101 1001 溢出周期为 (9+1)*2^(5+9)/(16M)= 10*2^14/(16M)
    }                  //实际上是10.24ms    16M是外部晶振的频率,实时中断以外部晶振时钟为参考时钟
    void main()
    {
    DisableInterrupts;
    RTI_INIT();
    EnableInterrupts;
    for(;;)
        {   
        }
    }
    #pragma CODE_SEG __NEAR_SEG NON_BANKED       //实时中断RTI 中断函数
    void interrupt 7 RTI(void)
    {
    CRGFLG_RTIF=1; //向CRGFLG_RTIF 写1 清除标志位

    展开全文
  • RTI -- 实时中断

    2019-03-03 14:12:30
    实时中断并不复杂,简单地说,就是一个定时模块,定时溢出,产生中断。功能跟 PIT差不多,都能用于定时。 对于PIT 时钟电路每固定一段时间都必须更新一次时间信息,这...RTI定时不会很准,因为它没有经过复杂的时钟...

    实时中断并不复杂,简单地说,就是一个定时模块,定时溢出,产生中断。功能跟
    PIT差不多,都能用于定时。 对于PIT 时钟电路每固定一段时间都必须更新一次时间信息,这个更新的责任就落到了MCU身上。对于那种比较繁重的系统而言,“进行一次更新”会耗费许多的资源。而RTI只专注于记时工作,使MCU可以空出来处理其它的工作。外部晶振时钟可以直接“驱动”RTI。
    RTI定时不会很准,因为它没有经过复杂的时钟处理,经过配置之后,可以变为a2^b
    倍数,因为a
    2^b不能是任意数整数,不能配成你想要的任何频率,所以说RTI定时不会很准,不过它用起来还是很灵活、方便的。

    本例通过用MC9S12XS128MAA来做一个实时中断。
    以下为本例所用到的寄存器的介绍:

    RTICTL寄存器

    在这里插入图片描述
    RTDEC(十进制或二进制分频器选择位) = 1 时,为十进制分频器
    = 0 时,为二进制分频器

    RTR[6:0]为有效分频因子,RTR[3:0]为低4位m ,RTR[6:4]为高3位n,RTI的参考时钟是外部晶振的时钟OSCCLK,即外部物理晶振提供的时钟
    当RTDEC=0时,分频系数=(m+1)*2^(n+9)
    当RTDEC=1时,分频系数=(m+1)*RTR[6:4]下表对应值
    在这里插入图片描述
    RTR[6:4]=000时RTI实时中断被禁止,只要当RTR[6:4] 不全为0时,实时中断就开启

    CRGINT寄存器
    在这里插入图片描述
    RTIE = 1 时,实时中断开启
    = 0 时,实时中断禁止

    LOCKIE = 1 时,LOCKIF置位就会引起中断请求
    = 0 时,LOCK中断请求无效

    SCMIE = 1 时,SCMIF置位就会引起中断请求
    = 0 时,SCM中断请求无效

    CRGFLG寄存器
    在这里插入图片描述
    RTIF = 1 时,产生RTI中断
    = 0 时,未发生RTI中断

    PORF = 1 时,上电复位中断
    = 0 时未产生上电复位中断

    LVRF = 1 时,低压复位中断
    = 0 时,未发生低压复位中断

    LOCKIF = 1 时,LOCK位状态改变
    = 0 时,LOCK位没有改变

    LOCK = 1 时,VCOCLK在目标频率误差允许范围内
    = 0 时,VCOCLK不在目标频率误差允许范围内

    ILAF = 1 时,非法地址重置
    = 0 时,未发生非法地址重置

    SCMIF = 1 时,SCM位状态改变
    = 0 时,SCM位没有改变

    SCM = 1 时,MCU在自时钟模式下工作,OSCCLK处于未知状态,所有时钟都是由PLLCLK产生的
    = 0 时,MCU正常工作,OSCCLK可用

    实时中断设置步骤:
    1.设置TRICTL里面设置多少个时钟脉冲中断一次
    2.CRGINT里使能RTI中断
    3.写中断函数interrupt 7 void rti(void)
    {
    //这里写中断需要执行的程序
    CRGFLG_RTIF=1;//中断标志清零
    }

    以下是实现RTI中断的完整代码:

    #include <hidef.h>            
    #include "derivative.h"      
    #define LED PORTB_PB0      //定义连接发光二级管的PORTB_PB0口数据寄存
                               //器为LED,写'0'亮,写'1' 灭
    
    #define LED_dir DDRB_DDRB0  //定义连接发光二级管的PORTB_PB0口方向寄存器
                                //为LED_dir,写'0'做输入口,写'1'做输出口
    
    unsigned char times = 0;   //定义定时中间变量
    
    
    void INIT_RTI(void)    //初始化RTI
    {
      CRGINT = 0x80;       // RTIE=1 使能实时中断
                         
      RTICTL = 0x6f;       //设置RTICTL为 0110 1111 溢出周期为 (15+1)*2^(6+9)/(16M)= 16*2^15/(16M)
                           //16M是外部晶振的频率,实时中断以外部晶振时钟为参考时钟
                           //设置实时中断的时间间隔为32.768ms     
    }
    
    
    #pragma CODE_SEG __NEAR_SEG NON_BANKED   //中断函数置于非分页区内
    
    interrupt VectorNumber_Vrti void a(void)     //实时中断函数
    {
      if(CRGFLG_RTIF == 1)      //CRGFLG_RTIF实时中断的标志位
        CRGFLG_RTIF = 1;        //向CRGFLG_RTIF 写1,可以清零标志位
      times += 1;              //定时中间变量自加
      if(times == 15)          //定时中间变量等于15时,即定时等于15* 32.768ms=492ms时执行下面程序
      {
        times = 0;             //定时中间变量清零
        LED = ~LED;             //指示灯翻转一次,现象闪烁
      }
    }
    
    #pragma CODE_SEG DEFAULT   //后续代码置于默认区域内  
    
    
    
    void main(void) {
      DisableInterrupts;   //禁止所有中断打开
      INIT_RTI();          //实时中断模块初始化
      LED_dir = 1;         //设置连接发光二级管的PORTK_PB0口为输出口
      LED = 0;             //初始化发光二极管为亮
      EnableInterrupts;    //开启所有中断打开
    
      for(;;) {}           //主函数空循环时单片机处于执行状态,程序在rti中断函数中执行
    }
    
    

    将中断里写入LED取反,可以直观的看到RTI中断的效果,可以修改 if(times == 15) 此行代码,如if(times == 30),可以发现指示灯大约1s闪烁一次

    展开全文
  • 飞思卡尔单片机PIT汇编编程(一)

    千次阅读 2014-08-23 15:13:55
    飞思卡尔单片机(XS128系列)单片机汇编编程(一) 本人就是一个菜鸟,从菜鸟学习汇编编程;汇编也没想象的复杂和难懂,细细品味还是挺有意思的。就当刷着玩吧,就学起了汇编(这一直是我的一大心病),慢慢学吧,...
  • 在这篇文章,我们以按键作为输入器件对飞思卡尔XEP100单片机的GPIO的输入功能进行测试。对应的硬件电路如下图所示。 当按键未按下时,由于有上拉电阻R39~R312的作用,单片机检测到的电平为高电平;当按键按下...
  • 单片机超频之PLL锁相环设置

    千次阅读 2014-07-02 10:09:53
    什么是锁相环呢?  MCU的支撑电路一般需要外部时钟来给MCU提供时钟信号,而外部时钟的频率可能偏低,为了使系统更加快速稳定运行,需要提升系统... 51单片机,AVR单片机内部没有锁相环电路,其系统时钟直接由外部晶振
  • 单片机知识点

    2019-06-24 04:39:28
    RTI Real time interrupt 实时中断 ECT Enhanced Capture Timer Module 增强型定时器模块 PIT Programmable Interval Timer 可编程间隔定时器 PIT TIM RTI是由晶振提供时钟源,PIT是由总线时钟分频后提供时...
  • 本文最初写于 2012-04-20 于 sohu 博客,这次博客搬家一起搬到这里来。 版权所有,转载请注明出处。   2.2 OS_CPU_A.S 首先是函数和全局变量的声明。...*******************************************************...
  • 飞思卡尔单片机DZ60---实时中断

    千次阅读 2013-07-16 14:24:12
    //RTI实时中断实验 //RTC模块包括一个状态和控制寄存器、一个8位计数寄存器和一个8位模数寄存器 //实时中断功能用来产生周期性中断。RTI有三个可选时钟源:LPO 1KHZ内部振荡器,32KHZ内部时钟,以及ERCLK外部时钟 ...
  • 飞思卡尔中断设置

    千次阅读 2018-04-03 16:44:08
    对于飞思卡尔codewarrior的中断使用,一般有3种方法:1.把#pragma TRAP_PROC放在中断程序前面,并把中断向量表放到*.prm。例如:#pragma TRAP_PROCvoid PIT1(void){//your code}2.或者使用关键词interrupt,并把向...
  • 用协处理器提高IJLC/OS n,Il的实时性[日期:2008-10-7]来源:单片机与嵌入式系统应用 作者:清华大学 冯泽东 邵贝贝[字体:大 小] 引 言 μC/OS-II最多支持63个任务,并支持信号量、邮箱、消息队列等多种...
  • MSP432输入输出模块

    千次阅读 2019-06-30 19:47:10
    单片机中的输入输出模块是供信号输入、输出所用的模块化单元。MsP432单片机的片内输入输出模块非常丰富,典型的输入输出模块有:通用O端口、模/数转换模块、比较器E  定时器。本章重点讲述MSP432单片机的各个典型...
  • MC9S12G定时器中断设置

    千次阅读 2016-03-02 10:04:10
    一、关闭定时器模块 时TSCR1的TEN位为0; 二、设定IOSx为输出比较引脚(以7为例) TIOS_IOS7 = 1; 三、绑定输出比较引脚 TCTL1_OM7 = 0; TCTL1_OL7 = 1;...四、设置计数器的比较值(在24Mhz的系统时间下,0xBB为1ms)...
  • 就上篇文章的交叉编译方式下为树莓派搭建DDS运行环境存在无法编写DDS发布订阅程序的问题,本篇文章介绍一种新的思路来基于树莓派编译OpenDDS并编写DDS发布订阅程序。 1:树莓派编译OpenDDS Linux:Ubuntu 18.04 ...
  • FreeRTOS 移植要点(1)

    万次阅读 2012-08-27 18:21:52
    FreeRTOS 的移植主要需要改写如下...如果采用的C编译器允许在C 代码插入汇编,并且支持用C语言写中断处理函数。则port.asm 文件的内容是可以合并到port.c 的。 下面以将 FreeRTOS 移植到FreeScale 68HCS12 内核的
  • By: 江威 Date: 2011-11-03 Version: 0.1 Email: killkeil54@gmail.com Copyright:  本文章无版权,在商业和非商业的目的... 本文由本文的作者-江威-使用google翻译对《MC9S12XE-Family Re
  • fc nes模拟器 流程指令

    2019-02-28 10:38:41
    Re: 从零开始的红白机模拟 - [07]流程指令 - Dust Loong的文章 - 知乎 https://zhuanlan.zhihu.com/p/44102262 Re: 从零开始的红白机模拟 - [07]流程指令 Dust Loong 兴趣:人机交互 ...本文...
1 2 3 4 5
收藏数 85
精华内容 34
关键字:

单片机中rti