智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2542|回复: 4
打印 上一主题 下一主题

PIT模块,求教,一个问题

[复制链接]

2

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
301
QQ
威望
239
贡献
44
兑换币
0
注册时间
2011-7-18
在线时间
9 小时
跳转到指定楼层
1#
发表于 2011-8-7 13:47:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天写了个用PIT的OC功能实现1ms进一次中断的程序,如下:
PLL定义时总线率为16M

void PIT_Init(void){
  TIOS_IOS0=1;   
  TC0=1000;             //........1ms
  TCTL2=0x01;            //翻转
  TSCR2=0x04;
                               //16分频  16M/16=1M.....1us
  TSCR1=0x80;
  TIE=0x01;
}

问题是:不论我怎么改TC0的值,都是65ms进一次中断,也就是都是在计数器溢出时进中断,怎解?是哪个寄存器设值错了吗?

27

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
972
QQ
威望
560
贡献
174
兑换币
8
注册时间
2011-11-11
在线时间
119 小时
2#
发表于 2011-11-16 18:42:05 | 只看该作者
这个属于ECT模块,而不是PIT模块。
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
353
威望
257
贡献
74
兑换币
23
注册时间
2009-5-6
在线时间
11 小时
3#
发表于 2011-12-4 19:08:15 | 只看该作者
//现象B灯闪动,周期是INTVERAL*(0.01)ms,可用来记时.
//demo by whut_wj



#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"

#define  INTVERAL 100
void SetBusClock(void)
{   
    CLKSEL=0X00;                   //disengage PLL to system
    PLLCTL_PLLON=1;                //turn on PLL
    SYNR=2;         
    REFDV=1;                       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=48MHz;
    _asm(nop);                     //BUS CLOCK=24M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));       //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;               //engage PLL to system;
}


void PitInit(void)
{   

   PITCFLMT_PITE=0;       //disable PIT
   PITCE_PCE0=1;          //enable timer channel 0
   PITMTLD0=240-1;        //time base  240 clock cycles ,it's 0.1M Hz
   PITMUX=0X00;           // ch0 connected to micro timer 0
   PITLD0=INTVERAL-1;     //INTVERAL micro time bases  
   PITINTE_PINTE0=1;      //enable interupt channel 0
   PITCFLMT_PITE=1;       //enable PIT
   
                          //PITCNT0,类似于自由记数器,只不过一直是递减,TCNT是一直递增
}   

void main(void)
{
   EnableInterrupts;
   SetBusClock();
   PitInit();
   DDRB=0xff;

    for(;;)
    {
   
    }  
}


#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PIT0Interrupt(void)
{  
    PORTB^=0xff;
           PITTF_PTF0=1;

}
回复 支持 反对

使用道具 举报

4

主题

128

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641

优秀会员奖章活跃会员奖章

威望
2168
贡献
77
兑换币
292
注册时间
2011-4-10
在线时间
198 小时
4#
发表于 2011-12-24 17:56:45 | 只看该作者
回复 支持 反对

使用道具 举报

32

主题

256

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3807
威望
2179
贡献
1054
兑换币
888
注册时间
2012-11-6
在线时间
287 小时
5#
发表于 2013-8-17 08:51:36 | 只看该作者
大神,有没有PIT模块的中文资料啊,望共享之。。。在此感谢了。。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 01:19 , Processed in 0.081501 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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