首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

LPC的IRQ中断有关问题

2012-02-23 
LPC的IRQ中断问题#include lpc213x.h#include stdlib.h#defineFosc11059200#defineFcclkFosc*6#define

LPC的IRQ中断问题
#include <lpc213x.h>
#include <stdlib.h>    


#define   Fosc   11059200
#define   Fcclk   Fosc*6
#define   Fpclk   Fcclk/4
#define   Baud   9600

unsigned   char   i;
unsigned   char   flash;

void     Timer1(void)  
{
T1TC=0x00;
if(flash)
{
IO0CLR=0xFFFFFFFF;
flash=0;
}
else  
{
IO0SET=i;
flash=1;
}
T1IR=0x01;//复位中断标志
VICVectAddr   =   0;

}


main()
{
char     *a= "按下一个键:\n ";  
////////////////////////设定频率   /////////
PLLCFG=0x25;//CCLK=6*FOSC,P=2,M=5
PLLCON=0x03;//PLL使能和连接
VPBDIV=0x00;//PCLK=CCLK/4
////////////////////////引脚功能设置//////////
PINSEL0=0x05;//P0.0,P0.1为串口
PINSEL1=0x00;//其它都设为IO
IO0DIR=0xFFFFFFFF;//设GPIO为输出
////////////////////////设置串口//////////
U0LCR=0x83;//开始设置波特率
U0DLL=Fpclk/16/Baud;//PCLK/16/9600,=0x6C,波特率9600U0DLM=0      
U0LCR=0x03;   //8个数据位一个停止位无校验                
U0IER=0x00;//关中断,用的是查询方式
////////////////////////定时器设置///////////
T1TC=0;//定时器1设为0
T1PR=0x99;//分频系数为100
T1MCR=0x03;//与MR0匹配时中断且计数器清0
T1MR0=Fpclk/600;//1/6秒中断一次
VICIntSelect=0x00;//全部设为IRQ中断
VICVectCntl0=0x25;//IRQ中断使能并使优先级最高
VICVectAddr0=(unsigned   int)Timer1;//设置指向的中断处理函数
VICIntEnable=1 < <5;//定时器1的中断连接到VIC
//////////////////////////流程///////////////////
IO0CLR=0xFFFFFFFF;//IO全部清0
for(i=0;i <12;i++)   //提示按一个键

{
while(!(U0LSR   &   0x40));
U0THR   =   a[i];
}
T1TCR=0x01;//开启定时器1
do
{
while(!(U0LSR&0x01));
IO0CLR=0xFFFFFFFF;
i=U0RBR;
flash=1;
IO0SET=i < <8;
while(!(U0LSR   &   0x40));
U0THR= '\b ';
while(!(U0LSR   &   0x40));
U0THR=i;
}
while(i!= '\r ');
a= "\n程序结束 ";
for(i=0;i <9;i++)   //提示按一个键

{
while(!(U0LSR   &   0x40));
U0THR   =   a[i];
}
while(1);
 
}  

为什么我的定时器只有第一次是跳入中断函数的,然后就只计数不中断了?
或者是一直在中断函数里没有出来?但是我再按一个键它还是有反应的啊

另外,中断函数我没加_irq,这个是干什么用的?为什么我加了以后编译就不通过?不加会有什么问题吗?

[解决办法]
你的Timer必须是一个ISR,也就是要加_irq. 加了它在返回才能正确地恢复处理器的
状态。

否则生成的代码会是普通的子程序调用/返回代码,处理将不会从IRQ恢复到USR模式,
后面的中断将不会响应(I位没有清除).
[解决办法]
为什么我加了以后编译就不通过?
------
可能你用的是gnu, 那就不支持这个东西, 这时你要自己写汇编码来解决它.

(我已经向你提供了例子了 - 在另一个贴子)

热点排行