打印

请教一个S3C2440的定时器延时问题

[复制链接]
1749|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kyzb001|  楼主 | 2011-9-30 10:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kyzb001 于 2011-9-30 10:17 编辑

我想用定时器0做一个延时。
定时器初始化为    1ms进入中断一次。
void Timer0_init(void)
{
       //Timer 0 init
       rTCFG0 = 249;                  //pclk/(249+1)
       rTCFG1 = 0x02;               //8分频=25000HZ
       rTCNTB0 = 25000/1000;          //TCNTB0[15:0]=计数值  
       rTCMPB0 = 0;
       rTCON |=(1<<1);           //将计数值装入TCNTB0、TCMPB0
       rTCON =0x09;

       rPRIORITY = 0x00000000;     // 默认优先级
       rINTMOD = 0x00000000;       // 默认优先级

       ClearPending(BIT_TIMER0);
       pISR_TIMER0 = (unsigned int)IRQ_Timer0_Handle;
       EnableIrq(BIT_TIMER0);
}

中断处理函数
void __irq IRQ_Timer0_Handle(void)
{
     ClearPending(BIT_TIMER0);
     if(_ms>1)
          _ms--;
}
_ms是全局变量
在AllVar.h 中声明:extern unsigned int  _ms;
在main.c中定义: unsigned int _ms=1;
延时函数如下
void DelayMs(unsigned int time)
{
     unsigned char temp;
     temp=1;
     _ms=time;
#ifdef DebugDelay
Uart0_SendString("In Ms Delay.\r");
#endif  
     while(temp)
     {
          if(_ms<=1)
         {
               temp=0;
Uart0_SendString("Delay is Over.\r");
}

}
#ifdef DebugDelay
Uart0_SendString("Out Ms Delay.\r");
#endif
}
设计是:打开定时器,让它一直跑,1ms进入一次中断函数。进入中断函数以后 判断_ms的值 如果大于1就减。 延时函数调用,赋值给_ms 就可以达到延时效果。
但是,出现一个非常奇怪的问题,大家注意红色的串口0打印函数没,如果我不加这个函数的话, 延时函数就一个在那里跑,跳不出来。 我加了,就能按照预想的进行延时。
感觉非常奇怪啊, 是不是和 启动代码中的 异常中断有关系,但是我看不懂那个启动代码   
请问下大虾们,这个问题该怎么解决啊!!!!

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:Is this my life

15

主题

623

帖子

1

粉丝