RTI,是ORG时钟和复位发生模块中的一个功能,一般用它来3秒后启动车子。
初始化它,需要两个寄存器:CRGINT和RTICTL。
CRGINT的第8位:RTIE是RTI的中断使能位,为1使能。
而RTICTL的设置,就关系到定时的时间,关键就是这点,估计有很多同学不太了解吧。
下面来重点说说:
它的第8位:RTR[8],没用,不管。
6到4位:RTR[6:4],预分频选择位。
3到0位:RTR[3:0],分频系数选择位。
另外,它的分频时钟是外部时钟频率,XS128是16M,与使用PLL与否无关。
01.公式:T=(RTR[3:0]+1)*2^(RTR[6:4]+9)/osc clock
我使用的是近似100ms,
01.RTICTL=0xef;
复制代码,5秒后启动车子。
希望对刚接触的同学有些小小帮助。
程序例子
#include <hidef.h> /* common defines and macros */
#include <mc9s12xs128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
void RTI_INIT() //实时中断 RTI 初始化函数
{
CRGINT_RTIE=1; // 允许在每个周期结束产生中断
RTICTL=59; // 设置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 清除标志位
}
初始化它,需要两个寄存器:CRGINT和RTICTL。
CRGINT的第8位:RTIE是RTI的中断使能位,为1使能。
而RTICTL的设置,就关系到定时的时间,关键就是这点,估计有很多同学不太了解吧。
下面来重点说说:
它的第8位:RTR[8],没用,不管。
6到4位:RTR[6:4],预分频选择位。
3到0位:RTR[3:0],分频系数选择位。
另外,它的分频时钟是外部时钟频率,XS128是16M,与使用PLL与否无关。
01.公式:T=(RTR[3:0]+1)*2^(RTR[6:4]+9)/osc clock
我使用的是近似100ms,
01.RTICTL=0xef;
复制代码,5秒后启动车子。
希望对刚接触的同学有些小小帮助。
程序例子
#include <hidef.h> /* common defines and macros */
#include <mc9s12xs128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
void RTI_INIT() //实时中断 RTI 初始化函数
{
CRGINT_RTIE=1; // 允许在每个周期结束产生中断
RTICTL=59; // 设置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 清除标志位
}