智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4537|回复: 8
打印 上一主题 下一主题

PIT,ETC,RTI

[复制链接]

12

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
威望
254
贡献
46
兑换币
0
注册时间
2011-3-15
在线时间
31 小时
跳转到指定楼层
1#
发表于 2011-4-26 16:11:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
迷茫!!PIT,ETC,RTI有什么区别呢?求高手指教,为什么大家定时中断用PIT而不用ECT呢?

10

主题

353

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1657
威望
1031
贡献
326
兑换币
60
注册时间
2012-2-23
在线时间
150 小时
推荐
发表于 2012-5-19 09:25:42 | 只看该作者
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)*2E(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 清除标志位
}
回复 支持 1 反对 0

使用道具 举报

29

主题

598

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3536

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章

威望
1932
贡献
834
兑换币
199
注册时间
2012-2-5
在线时间
385 小时
毕业学校
保密
2#
发表于 2012-5-19 08:53:50 | 只看该作者
ECT吧!!
回复 支持 反对

使用道具 举报

10

主题

353

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1657
威望
1031
贡献
326
兑换币
60
注册时间
2012-2-23
在线时间
150 小时
4#
发表于 2012-5-19 09:31:27 | 只看该作者
首先,以xs128为例  它没有ECT模块,它的PIT和TIM模块功能就相当于ECT模块    这就不存在你的问题“为什么大家定时中断用PIT而不用ECT呢?”对于MC9S12系列的它是ECT(增强型捕捉定时器模块),定时当然用ECT了
回复 支持 反对

使用道具 举报

9

主题

399

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2323
QQ
威望
1319
贡献
554
兑换币
90
注册时间
2011-9-18
在线时间
225 小时
5#
发表于 2012-5-19 10:10:51 | 只看该作者
zsk- 发表于 2012-5-19 09:25
RTI,是ORG时钟和复位发生模块中的一个功能,一般用它来3秒后启动车子。

初始化它,需要两个寄存器:CRG ...

看了~~~~
但还是不懂怎么样去3秒后启动车子~~
这里的中断是怎么理解?为什么开这个中断能实现3秒后启动车子?
请指点~!谢谢!
回复 支持 反对

使用道具 举报

10

主题

353

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1657
威望
1031
贡献
326
兑换币
60
注册时间
2012-2-23
在线时间
150 小时
6#
发表于 2012-5-19 11:42:21 | 只看该作者
isearching 发表于 2012-5-19 10:10
看了~~~~
但还是不懂怎么样去3秒后启动车子~~
这里的中断是怎么理解?为什么开这个中断能实现3秒后启动 ...

就是一个定时中断,定时时间到了,置位标志位,进入中断标请标志位。然后这个RTI就完成任务了....其实  用一个delay函数就行的
回复 支持 反对

使用道具 举报

9

主题

399

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2323
QQ
威望
1319
贡献
554
兑换币
90
注册时间
2011-9-18
在线时间
225 小时
7#
发表于 2012-5-19 11:48:04 | 只看该作者
zsk- 发表于 2012-5-19 11:42
就是一个定时中断,定时时间到了,置位标志位,进入中断标请标志位。然后这个RTI就完成任务了....其实  用 ...

也就是说这中断在这里的作用就相当于一个延时函数?
回复 支持 反对

使用道具 举报

10

主题

353

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1657
威望
1031
贡献
326
兑换币
60
注册时间
2012-2-23
在线时间
150 小时
8#
发表于 2012-5-19 12:32:31 | 只看该作者
isearching 发表于 2012-5-19 11:48
也就是说这中断在这里的作用就相当于一个延时函数?

是的   我是这么理解的      


补充内容 (2012-5-19 16:48):
lz  现在小车怎么样了  求图 求视频啊
回复 支持 反对

使用道具 举报

2

主题

7

帖子

0

精华

注册会员

Rank: 2

积分
176
威望
102
贡献
46
兑换币
43
注册时间
2012-11-2
在线时间
14 小时
毕业学校
西南交通大学
9#
发表于 2013-7-16 22:22:28 | 只看该作者
***********************************************
{
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 清除标志位
}
*******************************************************************
不是10ms,怎么就5s??不懂。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-1-16 13:56 , Processed in 0.059227 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表