实时中断并不复杂,简单地说,就是一个定时模块,定时溢出,产生中断。功能跟
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闪烁一次

RTI -- 实时中断相关推荐

  1. 飞思卡尔单片机DZ60---实时中断

    //RTI实时中断实验 //RTC模块包括一个状态和控制寄存器.一个8位计数寄存器和一个8位模数寄存器 //实时中断功能用来产生周期性中断.RTI有三个可选时钟源:LPO 1KHZ内部振荡器,32KH ...

  2. 飞思卡尔普通看门狗与窗口看门狗

    举个例子,假设看门狗周期为10s,对于普通模式只要在10s内喂一次狗就可以了,超过10s则会重启.对于窗口模式必须在最后的2s内喂狗才可以,喂早了不起作用,同样超时会重启. 下面是摘抄自百度文库的文章 ...

  3. XGATE on S12X

    翻译的资料是公开的,在这里下载https://www.nxp.com/products/microcontrollers-and-processors/additional-processors-an ...

  4. DSP入门:中断PIE

    DSP入门:中断PIE 1.DSP中断管理分为3个层次:外设级,PIE级,CPU级.  其中,外设级中断管理负责具体外设中断源的允许与禁止,PIE级中断管理负责对外设级中断分组并按照优先级管理,CPU ...

  5. 关于中断的一点点认识

    前一段时间,有幸和都江堰操作的作者面对面的聊了一把.对于前辈的技术和才能,晚辈深深地佩服.DJY_OS在应用方面的事件机制以及处理中断的方法都让人眼前一亮.在谈到中断时,前辈说,很多人都没有真正的理解 ...

  6. DSP28335的中断配置

    外部中断初始化 #include "extint.h" //按键和外部中断都用了GPIO13,查询和中断不能同时使用 void InitExtInt(void) { EALLOW; ...

  7. VxWorks和Linux内核实时性

    通用的分时操作系统面向多用户的不同任务,意在追求系统整体运行的效率和资源的均衡利用,软件的执行在时间上要求并不严格. 实时操作系统不同于分时操作系统,它主要是对任务进行实时的处理,要求任务的运行具有可 ...

  8. DSP28335的SCI的FIFO中断使用心得

    自学了一段时间的DSP28335的串口设置,写下来帮助更多的新手,遇到了很多问题也记录一些解决办法. 以下全都是我个人的理解,可能说的不对,大家讨论. 1.关于为什么必须用FIFO 一般的DSP系统, ...

  9. DSP中断介绍及其应用

    本章节的学习来自于TMS320F28377D参考手册和研旭例程. 学习DSP的中断,使用定时器产生中断. 目录 什么是中断: TMS320F2837xD的中断架构: 外设阶段: PIE阶段: CPU阶 ...

  10. F28335中断系统详解及其应用

    最近导师的项目中要应用到DSP F28335,由于之前一直对f28335的中断不是很理解,所以花了一点时间仔细看了一下<手把手教你学DSP:基于TMS28335>这本书讲解中断的章节,感觉 ...

最新文章

  1. Log probability 维基百科
  2. 如何去掉系统快捷方式的箭头(转载)
  3. 【计算理论】可判定性 ( 对角线方法 | 证明自然数集 N 与实数集 R 不存在一一对应关系 )
  4. 撰写科技奖励申报材料的“思路”“要点”与“技巧”
  5. php curl http2,用php做ios http2推送服务遇到的坑
  6. 使用深度学习TensorFlow框架进行图片识别
  7. linux之openssl简单介绍
  8. 你必须知道的 SmartSql !
  9. Struts2的属性驱动与模型驱动的区别
  10. 动态加载JS过程中如何判断JS加载完成
  11. 高等数学第七版同济大学课后习题讲解上下册
  12. Python.translate(table).maketrans(‘str1‘,‘str2‘)字符串翻译
  13. tp link无线路由器怎么设置
  14. Javaweb阶段学习
  15. 基础:某个应用的CPU使用率高达100%,该怎么处理
  16. 桌面窗口管理器占用内存过高 - 解决方案
  17. mybatis的大于小于号转义符号
  18. 设置单独进程打开资源管理器有效防止电脑假死!
  19. 天嵌科技携手爱板网推出年终活动
  20. 【转载】tcpdump的移植和使用方法

热门文章

  1. 批处理修改网关和dns服务器,[转载]使用批处理自动修改IP地址网关和DNS
  2. 傻子的代码怎么写_傻瓜不写单元测试
  3. 平衡小车制作系列之一——捋清制作流程
  4. 一个画布有多个子图_如何把多张图拼成一张长图
  5. Unity 工具类 之 BlendShape 捏脸的实现
  6. 为什么下载小电影时,经常会卡在 99%?
  7. springcloud微服务学习笔记(四十五):Gateway9527搭建
  8. 0x8000FFFF(0X8000FFFF,WPS)
  9. 【数理统计】一题了解假设检验
  10. 555定时器原理及应用(报告)