最近学arm7的硬件,用的LPC2138,串口中断有点疑问
时间:10-02
整理:3721RD
点击:
用串口中断,接收中断没有错误,可是发送中断一直进不去,我用DUBUG观察,发送中断标志位一直不置位,我写的代码,不知道哪里错了,改了很多次了。请教下各位
#include<LPC213x.h>
#define uint unsigned int
#define uchar unsigned char
uchar const table[4]="kobe";
void delay(uint z)
{
uint i,j;
for(i=1000;i>0;i--)
for(j=z;j>0;j--);
}
__irq void uart0(void)
{
uint dat;
dat=U0IIR; //读取U0IIR,清除中断
VICVectAddr=0; //中断结束
//U0FCR=0X01;
}
void uart0_init()
{
PINSEL0=0x05;
U0LCR=0x83; //设置波特率。DALB置一
U0DLL=0x5a; //设置波特率9600,Fosc/4*5=Fpclk,初值=Fpclk/16/bauad
U0DLM=0x00;
U0LCR=0x03; //设置八位数据,无奇偶校验
U0IER=0x02; //使能THRE中断
U0FCR=0x05;
}
int main(void)
{
uint i;
uart0_init();
VICIntSelect=0; //选择IRQ中断
VICIntEnable=(1<<6); //使能UART0中断
VICVectAddr0=(uint)uart0; //设置中断地址
VICVectCntl0=0x26; //最高优先级
while(1)
{
for(i=0;i<4;i++)
{
U0THR=table[i];
}
}
}
#include<LPC213x.h>
#define uint unsigned int
#define uchar unsigned char
uchar const table[4]="kobe";
void delay(uint z)
{
uint i,j;
for(i=1000;i>0;i--)
for(j=z;j>0;j--);
}
__irq void uart0(void)
{
uint dat;
dat=U0IIR; //读取U0IIR,清除中断
VICVectAddr=0; //中断结束
//U0FCR=0X01;
}
void uart0_init()
{
PINSEL0=0x05;
U0LCR=0x83; //设置波特率。DALB置一
U0DLL=0x5a; //设置波特率9600,Fosc/4*5=Fpclk,初值=Fpclk/16/bauad
U0DLM=0x00;
U0LCR=0x03; //设置八位数据,无奇偶校验
U0IER=0x02; //使能THRE中断
U0FCR=0x05;
}
int main(void)
{
uint i;
uart0_init();
VICIntSelect=0; //选择IRQ中断
VICIntEnable=(1<<6); //使能UART0中断
VICVectAddr0=(uint)uart0; //设置中断地址
VICVectCntl0=0x26; //最高优先级
while(1)
{
for(i=0;i<4;i++)
{
U0THR=table[i];
}
}
}
在U0THR=table[i]发送数据后添加代码 while ((U0LSR & 0x40) == 0); // 等待数据发送完毕
解决方法如楼上说,也可以用 __wfi();暂停运行,等待中断