飞思卡尔S12系列(基于MC9S12XET256MAA和/MC9S12XEP100)RTI资料总结和分享

概念内容转自yuanbuqi的https://blog.csdn.net/yuanbuqi/article/details/9812657RTI,也有的文章里称之为RTC,就是实时中断,一个定时模块,定时溢出,产生中断。是ORG时钟和复位发生模块中的一个功能

初始化它,需要两个寄存器:CRGINT和RTICTL。

CRGINT的第8位:RTIE是RTI的中断使能位,为1使能。

而RTICTL的设置,就关系到定时的时间,关键就是这点,估计有很多同学不太了解吧。

下面来重点说说:

它的第8位:RTR[8],没用,不管。

6到4位:RTR[6:4],预分频选择位。

3到0位:RTR[3:0],分频系数选择位。

另外,它的分频时钟是外部时钟频率,我用的是S12XET256是8M,与使用PLL与否无关。


01.公式:T=(RTR[3:0]+1)*2^(RTR[6:4]+9)/osc clock

我使用的是近似1ms,
01. RTICTL  = 0x17; 


希望对刚接触的同学有些小小帮助。 
程序例子

#include <hidef.h>      /* common defines and macros */
#include "derivative.h" 
#include "mc9s12xet256.h"  // System file,系统文件

#pragma LINK_INFO DERIVATIVE "mc9s12xet256"
void RTI_INIT()       //实时中断 RTI 初始化函数
{
//实际上是1.024ms    8M是外部晶振的频率,实时中断以外部晶振时钟为参考时钟
// 设置RTICTL为 00010111   8*2^10/(8*10^6)=1.024ms 
//溢出周期为 (7+1)*2^(1+9)/(8M)= 8*2^10/(8M)
RTICTL=0x17;   
CRGINT_RTIE=1;       // 允许在每个周期结束产生中断

}                  
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 清除标志位
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值