大海3 发表于 2012-10-2 19:55:21

【求助】 求lpc2132在IAR下的定时器中断程序

本帖最后由 大海3 于 2012-10-2 20:35 编辑

小弟最近在学lpc2132,使用的开发环境是IAR,但是小弟手中只有ADS开发环境下的例程。。。在IAR中不能运行(有可能是写法不同吧),小弟自己写的又不能进中断,希望有大神能够给一个IAR下的定时器中断例程。。。由于小弟此时的代码改的面目全非,所以没有上贴,整理一下,会将自己写的代码贴上来,请大家指点。。。
但是还是想求能够在IAR下运行的例程。。。可以看一下正确的,更好的分析一下程序中的问题。。。谢谢。。。
小弟的邮箱是taotao.2008.03.556@163.com,QQ是1484692593,希望能够加我QQ,给我更大的帮助。。。在这先谢谢大家了。。。


/*----------------------------------------------
**
** 函数功能:初始化定时器
** 函数名:timer0_int()
**
**---------------------------------------------*/
void timer0_int()
{
/*
*Fpclk = 11059200 Hz
*/
       //定时器相关
   T0TCR = 2;         //停止并复位定时器
   T0CTCR = 0;          //定时器模式
   T0PR = 0;            //预分频数为1
   T0MR0 = Fpclk/2;   //定时时间为0.5s
   T0MCR = 3;         //设置MR0匹配并且匹配完成复位定时器
   T0EMR = 0;         //
   
   //中断相关设置
   VICIntSelect_bit.INT4 = 0;
   VICVectAddr0 = (unsigned int)Timer0Handler;
   VICVectCntl0_bit.NUMBER = VIC_TIMER0;
   VICVectCntl0_bit.ENABLED = 1;
   VICIntEnable_bit.INT4 = 1;
   
   T0TCR = 1;
}

/*----------------------------------------------
**
** 中断服务函数
**
**---------------------------------------------*/
void Timer0Handler (void)
{
T0IR_bit.MR0INT = 1;   //clear interrupt flag

if((IO1SET &led0) == 0)   //change led0
    IO1SET = led0;
else
    IO1CLR = led0;

VICVectAddr = 0;         

}


#pragma vector = IRQV                //不知道IRQV是干什么的?希望帮忙解释一下
__irq __arm void irq_handler (void)
{
    void (*interrupt_function)();
    unsigned int vector;
   
    vector = VICVectAddr;         //获得中断向量
    interrupt_function = (void(*)())vector;
    if(interrupt_function != NULL)      
    {
      interrupt_function();   //调用中断指向的函数
    }
    else
    {
      VICVectAddr = 0;      //清除在VIC中的中断
    }
}

大海3 发表于 2012-10-2 20:37:01

问题已经解决,但是还是希望有朋友能给一份在IAR下裸机的实验。。。。
还有用红色标注的不是很明白,希望有朋友能够给予解答。。。
页: [1]
查看完整版本: 【求助】 求lpc2132在IAR下的定时器中断程序