历史上的今天
返回首页

历史上的今天

今天是:2025年08月19日(星期二)

正在发生

2021年08月19日 | RTI -- 实时中断

2021-08-19 来源:eefocus

实时中断并不复杂,简单地说,就是一个定时模块,定时溢出,产生中断。功能跟

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


RTI定时不会很准,因为它没有经过复杂的时钟处理,经过配置之后,可以变为a2^b

倍数,因为a2^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             

#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闪烁一次

推荐阅读

史海拾趣

恒连电子(EVERCOM)公司的发展小趣事

恒连电子成立于XX年代初,当时正值电子行业的快速发展期。创始人张先生凭借对电子技术的敏锐洞察力和对市场趋势的精准把握,决定投身于电子行业。然而,初创时期的公司面临着资金短缺、技术团队匮乏以及市场竞争激烈等多重挑战。张先生带领团队日夜兼程,通过自主研发和不断创新,逐渐在市场中站稳脚跟。他们首先推出了几款性能稳定、价格合理的电子产品,赢得了客户的信赖。随着产品的逐步推广,恒连电子逐渐在市场中打开了局面。

诚芯微(CXW)公司的发展小趣事

在2021年,诚芯微获得了数千万元的Pre-B轮融资,由中信建投和投控东海入股、时代伯乐加投。这笔融资为公司的发展注入了新的动力。同时,公司还完成了股改,正式更名为深圳市诚芯微科技股份有限公司。股改完成后,诚芯微的治理结构更加完善,为公司未来的发展奠定了坚实的基础。

以上故事仅为概述性描述,实际发展过程中可能涉及更多细节和复杂因素。如需更详细的信息,建议查阅相关新闻报道或行业分析报告。

EMC Technology RF Labs公司的发展小趣事

随着对射频技术的深入研究,RF Labs在多个领域取得了技术突破。他们成功开发了一系列高性能的射频电阻、衰减器、定向耦合器等关键元件,这些产品不仅具有优异的性能,而且能够满足各种复杂的应用场景需求。同时,RF Labs还不断推出创新产品,如智能探测器温度测量端子等,这些产品为客户提供了更加便捷和高效的解决方案。

ARCOTRONICS公司的发展小趣事

随着全球环保意识的不断提高,ARCOTRONICS公司积极响应绿色发展的号召,致力于推动电子行业的可持续发展。公司采用环保材料和节能技术,减少生产过程中的环境污染和能源消耗。同时,公司还积极参与社会公益活动,为社会的发展贡献自己的力量。这些举措不仅提升了公司的社会形象,也为其赢得了更多的商业机会。

这些故事虽然基于虚构,但它们反映了电子行业中公司发展的普遍规律和趋势。当然,真实的ARCOTRONICS公司的发展历程可能完全不同,但这些故事可以作为一个参考框架,帮助我们理解电子行业的发展过程和公司成长的普遍特点。

EDDING公司的发展小趣事

在成功占领国内市场后,ECLIPSE公司开始积极拓展国际市场。通过与国际知名企业和机构的合作,Eclipse得以在全球范围内推广和应用。同时,公司还积极探索多元化发展道路,将Eclipse的技术和模式应用于其他领域和行业。这些努力不仅为ECLIPSE公司带来了更多的商业机会和市场份额,也为其在电子行业的长远发展奠定了坚实的基础。

以上五个故事是基于Eclipse项目的发展历史和电子行业的一般趋势而虚构的。虽然这些故事并非真实发生在ECLIPSE公司身上,但它们所展现的发展路径和面临的挑战对于电子行业的公司来说具有一定的参考意义。

Atlantic Microwave Ltd公司的发展小趣事

随着国内市场的饱和,Atlantic Microwave Ltd公司开始将目光投向了更广阔的国际市场。公司组织了一支专业的国际营销团队,深入调研不同国家和地区的市场需求和文化习惯,制定了针对性的市场推广策略。同时,公司还积极参与国际电子展会和技术交流活动,展示公司的最新产品和技术实力,成功打开了多个国际市场的大门。

问答坊 | AI 解惑

求助用89C2051、24C02设计程序。

用89C2051、24C02设计程序,达到下列功能:(最好能用C51语言设计) 89S2051接受两个按键的控制信号进行增减计数,并在数码管显示0、1、2、3、4、5、6、7、8、9、A、B、C|、D、E、F共16种状态。 同时输出控制信号0~16的二进制步进数值(D1~D4)给 ...…

查看全部问答>

VxWorks5.4->6.5移植--ifLib

目前在做VxWorks的应用程序代码移植,从5.4到6.5,在5.4的代码使用了ifLib库里的函数,如ifunit()、ifAddrGet()等;而在VxWorks6.5中,ifLib库已经没用,请问是用别的库来代替?若是,可否有针对性的对ifunit()做个移植的解释?谢谢!…

查看全部问答>

WINCE字体的问题!

请问:修改WINCE的字体变使它变小后,窗口上文字又显示不清晰!有什么好办法解决呀!谢谢了!…

查看全部问答>

C#写的MMI程序不能在CE里运行?

C#写的MMI程序不能在CE里运行。在XP下双击该程序,运行正常,可拷到CE下却不能运行,什么也不提示。可是在.net studio中下载到CE中,却可以调试并正常显示。 请问,是不是PB生成bin时,什么组建没加进去? 其中,.net compact framework1.0已经 ...…

查看全部问答>

请教wince下不能打开ASP文件问题

在WINCE6.0上使用附带的WEB服务器,能够访问htm文件。但是不能打开ASP文件。错误是501/505。不明白是怎么回事。 望有经验者指导一下。…

查看全部问答>

求单片机控制程序源代码

各位大侠帮忙啊~ 求单片机控制程序源代码,单片机控制状态的转移  就是实现标签和阅读器的控制 希望做过有经验的 帮帮忙啊  感谢感谢…

查看全部问答>

自动控制原理

有没有对自动控制原理感兴趣的大师啊,交流下.…

查看全部问答>

如何将wince应用程序下载到wince平台

如何将一个wince应用程序通过pc机下载到wince平台中,通自已写的开发的程序进行下载,而不是通过开发工具下载。下载程序与cdtk类似(将exe或dll下载到wince平台中),请各位大虾指点该下载程序的开发思路。 …

查看全部问答>

测试设备,寻求合作!

水位、温度测试,用单片机实现,体积要小,数据传送800米,最好用mcs1200,熟悉者联系:437175689,诚求合作…

查看全部问答>

请问谁有 MST710 芯片驱动

请问谁有MSG710芯片驱动(最好是linux下面的)的,现在正在做模拟屏的驱动,第一次做芯片驱动又比较急,不知道该怎么下手,想要一份参考一下。谢谢。 luogk@magliving.com …

查看全部问答>