微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 最近学arm7的硬件,用的LPC2138,串口中断有点疑问

最近学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];
                }
        }
}

在U0THR=table[i]发送数据后添加代码 while ((U0LSR & 0x40) == 0); // 等待数据发送完毕

解决方法如楼上说,也可以用 __wfi();暂停运行,等待中断

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top