【求助】 求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中的中断
}
} 问题已经解决,但是还是希望有朋友能给一份在IAR下裸机的实验。。。。
还有用红色标注的不是很明白,希望有朋友能够给予解答。。。
页:
[1]