智能车制作

标题: 9S12XS128中断寄存器PIT完全讲解 [打印本页]

作者: 雾里飘月    时间: 2011-3-19 21:17
标题: 9S12XS128中断寄存器PIT完全讲解
MC9S12XS128的中断在飞思卡尔智能车重视离不开的,需要的可以去下载
作者: shadow    时间: 2011-3-19 22:14
dx
作者: 雾里飘月    时间: 2011-3-19 22:44
PIT说明:
    S12PIT24B4CV1是一个模数递减计数器。首先给计数寄存器设定一个初值,每经过一个总线周期,计数器进行一次减一操作,当计数器自减溢出时,触发中断。因为总线周期是已知的,即可以通过计数器自减实现定时。
    在XS128PIT模块中,需要用到得是如下几个寄存器。
    1)、PIT Contorl and force Lad Micro Timer Register(PITCFLMT)
    该寄存器用于PIT模块的使能设置和工作方式设置。通常设置该寄存器中的PITE为即可,即PITCFLMT_PITE=1,使PIT使能。
    2)、PIT Channel Enable Register(PITCE)
    该寄存器用于对PIT模块中的4个通道使能进行设置。如果使用某个通道时,对对应位进行置一即可,即PITCE_PCEx=1,其中x代表通道序号,为0~3。
    3)、PIT Micro Timer Load Register 0 to 1 (PITMTLD0-1)
    该寄存器用于设置PIT模块中的8位计数器初值,以实现24位的计数。设定值为0到255范围。
    4)、PIT Load Register 0 to 3(PITLD0-3)
    该寄存器用于设置PIT模块中的16位计数器初值,和8位计数器配合而成24位计数器。设定值范围0-65535。
    5)、PIT Multiplex Register(PITMUX)
    该寄存器对定时器通道的8位时基进行选择。因为8位计数器只有两个,所以在将8位计数器和16位计数器连接时,可以选择不同的8位时基。
    当设置为0时,对应通道选择时基0;置一时,对应通道选择时基1。
    如PITMUX_PMUX0=1为通道0选择时基1。
    6)、PIT Interrupt Enable Register(PITINTE)
    该寄存器为中断使能寄存器,为不同的PIT通道中断使能。设定为0时,相应通道中断禁止。置一时,相应通道使能。
    如PITINTE_PINTE0=1时,PIT通道0定时中断使能,当计数器递减溢出时,申请中断。
    7)、PIT Time-Out Flag Register(PITTF)
    该寄存器为溢出标志位,当某一通道的8位计数器和16位计数器递减到0时,该位置一。给改位写1则清除该标志位。
    可以通过查询该位来判断定时是否完成。

CODE:
#include <hidef.h>      
#include <MC9S12XS128.h>   
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
#define PITTIME  5000//设定为50MS定时
unsigned int vTmpPIT=0;

void pllclk(void)//24MHz,外部时钟为16MHz
{
    REFDV=1;               //总线时钟=48/2=24MHz
    SYNR=2;
    while(!(CRGFLG&0x08));
    CLKSEL=0x80;
}
void initIOBoutput(void)//IO口初始化,B口为输出
{
    DDRA=0XFF;
    PORTA=0XFF;
}
void initPIT(void)//定时中断初始化函数 50MS定时中断设置
{
    PITCFLMT_PITE=0; //定时中断通道0关
    PITCE_PCE0=1;//定时器通道0使能
    PITMTLD0=240-1;//8位定时器初值设定。240分频,在24MHzBusClock下,为0.1MHz。即
10us.
    PITLD0=PITTIME-1;//16位定时器初值设定。PITTIME*0.01MS
    PITINTE_PINTE0=1;//定时器中断通道0中断使能
    PITCFLMT_PITE=1;//定时器通道0使能
}

void main(void)
{
  pllclk();
  initIOBoutput();
  initPIT();
  EnableInterrupts;
  for(;;) {}
  
}

#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PIT0(void)
{
    vTmpPIT++;
    if(vTmpPIT==10)
    {  
         PORTA=~PORTA;//输出取反
         vTmpPIT=0;
    }
     PITTF_PTF0=1;//清中断标志位
}
作者: 1234512345    时间: 2011-3-23 20:57
谢谢了  好东西
作者: sxjun110    时间: 2011-3-26 08:31
不错
作者: CCGOGO    时间: 2011-4-1 20:26
谢谢  学习中、、、
作者: 山山大仙    时间: 2011-4-4 11:05
谢了,哈哈
作者: 4819142    时间: 2011-4-4 14:37
学习了
作者: Joker    时间: 2011-4-4 16:04
需要~
作者: ludian320    时间: 2011-4-5 12:26
谢谢,学习中
作者: zhaoxianhao90    时间: 2011-4-6 17:39
太感谢了 ,一直在找这个资料啊
作者: zhaoxianhao90    时间: 2011-4-6 17:39
太感谢了 ,一直在找这个资料啊
作者: yl_dc    时间: 2011-4-6 21:08
顶起~~~
作者: LEUNG    时间: 2011-4-8 17:14
学习!!
作者: dz610041740    时间: 2011-4-8 18:29
DING
作者: xingzhan2011    时间: 2011-4-9 16:23
感激不尽
作者: chenyongjie830    时间: 2011-4-13 22:52

作者: lian1925    时间: 2011-4-14 00:43
谢谢了  好东西
作者: kelongren99    时间: 2011-4-17 23:42
谢了》
作者: 梦在远方    时间: 2011-4-20 14:13
谢了
作者: 在海边    时间: 2011-4-27 16:31
感谢
作者: qaabq    时间: 2011-5-4 00:25
千千
作者: 转角踩到屎    时间: 2011-5-4 11:50
谢谢了
作者: orikle    时间: 2011-5-5 21:57
学习了,谢谢
作者: xiaoxinzx    时间: 2011-5-7 12:37
还不错!
作者: ygsc9988    时间: 2011-5-18 16:42
谢谢
作者: 大林哈    时间: 2011-5-22 17:27
谢谢
作者: kbd2008hl    时间: 2011-5-23 21:50
谢了
作者: huihuizai    时间: 2011-5-26 18:42
顶,谢谢
作者: huihuizai    时间: 2011-5-26 18:42
顶,谢谢
作者: menglao    时间: 2011-8-11 12:09
xiexielouzhu
作者: zqcwxd    时间: 2011-8-27 11:01
好东西!谢谢楼主分享
作者: 晚安    时间: 2011-9-3 13:00
谢谢!!
作者: happiness001    时间: 2011-10-7 12:43

作者: jinling    时间: 2011-10-14 18:41
楼主好人
作者: find_my_way    时间: 2011-10-15 09:47
nice
作者: lian1925    时间: 2011-10-17 20:49
thanks you for sharing
作者: 衔环结草    时间: 2011-10-22 17:51
谢谢!
作者: 海盗Geek    时间: 2011-10-26 11:05
谢了
作者: 海盗Geek    时间: 2011-10-26 11:06
谢了
作者: 云端暮雪    时间: 2011-11-7 22:40
免费的,有共享精神。。。
作者: mark2011    时间: 2011-11-9 09:23
谢了
作者: lanshanxunmeng    时间: 2011-11-20 01:51
那个Ms是什么意思啊?  PITMTLD0=240-1;//8位定时器初值设定。240分频,在24MHzBusClock下,为0.1MHz。即
10us.
0.1MHz不是1/102.4=10ms吗?咋成了10us?
作者: jueze    时间: 2011-12-5 15:55
感激不尽!!!
作者: askjude    时间: 2011-12-5 19:01
好的嘛
作者: mian    时间: 2012-2-21 18:34
3Q!
作者: 大彬    时间: 2012-2-22 20:36
下了,谢谢
作者: 鸟在人间    时间: 2012-2-22 21:04
拿走了
作者: qinlu123    时间: 2012-2-22 21:13
我自己实验得到结果是PIT0到PIT3优先级逐次递减。所以优先级越高中断周期得越大。个人观点
作者: 光鸿    时间: 2012-2-22 21:29
谢谢分享!!
作者: 孜孜和少阳    时间: 2012-2-25 17:03
唉,找了半天了,太感谢啦!

作者: mylovewy    时间: 2012-2-25 20:23
学习
作者: longtian20454    时间: 2012-3-10 20:07
PITMTLD0=240-1;//8位定时器初值设定。240分频,在24MHzBusClock下,为0.1MHz。即
10us.
    PITLD0=PITTIME-1;//16位定时器初值设定。PITTIME*0.01MS
这两句什么意思啊
作者: 宁静致远    时间: 2012-3-11 00:55

作者: 快乐还是忧伤    时间: 2012-3-14 17:10
谢谢lz


作者: 林崽    时间: 2012-3-15 14:41
多谢 我什么都不会  希望能学会一点!
作者: zangfan    时间: 2012-3-20 01:37

作者: 活在九零后    时间: 2012-4-13 00:18
楼主,我发现了点错误的,但又不确定,求指点[attach]22721[/attach]
那个应该是1吧?

作者: 潘俊    时间: 2012-6-1 16:10
谢了!
作者: LXD201009140146    时间: 2012-6-27 22:11
好帖  顶顶
作者: 信雪神话    时间: 2012-11-1 11:54
雾里飘月 发表于 2011-3-19 22:44
PIT说明:
    S12PIT24B4CV1是一个模数递减计数器。首先给计数寄存器设定一个初值,每经过一个总线周期, ...

这个是定时器中断~~我想看下外部中断~~及其引脚和操作~~麻烦您给指导下~在这先谢谢了

作者: zangfan    时间: 2012-11-22 15:06

作者: 相随    时间: 2012-12-5 20:12
我找了好久啊  
作者: 苦瓜eson    时间: 2013-3-4 19:32


作者: 电磁组    时间: 2013-4-24 19:13
找了很久谢谢
作者: 飞卡搬砖小工    时间: 2013-4-25 00:31
不错
作者: ぐ雨灬枫ゾ    时间: 2013-5-11 10:53
谢谢
作者: woruoweiwang    时间: 2013-8-31 19:12

作者: caixianneng    时间: 2013-10-2 15:32
学习了
作者: 阳光心情    时间: 2013-11-3 12:17
好东西呀,谢谢楼主无私分享!
作者: Vince_。    时间: 2014-5-19 22:03
感谢,
作者: 后天发货    时间: 2016-5-22 19:00
学习了,谢谢楼主!
作者: dhncntr    时间: 2017-1-21 15:38
感谢

作者: syx233    时间: 2017-3-1 22:20
谢谢啦!





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2