ARM7LPC2138做串口中断实验的时候,发送中断一直进不去。接收中断一切正常,代码改了n遍了,求解释啊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARM7LPC2138做串口中断实验的时候,发送中断一直进不去。接收中断一切正常,代码改了n遍了,求解释啊相关的知识,希望对你有一定的参考价值。

代码如下,看哪里错了,或者有没有调试成功的发送中断程序啊,麻烦发下,谢谢了
void delay(uint z)

uint i,j;
for(i=1000;i>0;i--)
for(j=z;j>0;j--);

__irq void uart0()

uint dat;
dat=U0IIR; //读取U0IIR,清除中断
VICVectAddr=0; //中断结束

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();
U0THR=0X0F;
VICIntSelect=0; //选择IRQ中断
VICIntEnable=(1<<6); //使能UART0中断
VICVectAddr0=(uint)uart0; //设置中断地址
VICVectCntl0=0x26; //最高优先级
while(1)

U0THR=0x0a;
delay(8);
//U0FCR=0X05;

参考技术A U0IER=0x02; //使能THRE中断
这句没使能接收中断吧,接收中断正常吗?

首先要知道,串口0只有一个中断入口,中断发生后,需要对中断标识寄存器进行判断以确定中断类型再进行相应处理。

如:
__irq void uart0()

if((U0IIR&0x0F)==0x02)
发送数据; //发送中断
if((U0IIR&0x0F)==0x04)
接收数据; //接收中断
.
.
.

VICVectAddr=0; //中断结束


另外,实时性要求不是特别高的情况下,一般发送用查询方式即可。

/*
*********************************************************************************************************
** 函数名称 :IRQ_UART0()
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void __irq IRQ_UART0 (void)

uint8 i;

if ((U0IIR & 0x0F) == 0x04)
rcv_new = 1; // 设置接收到新的数据标志
for (i=0; i<8; i++)

rcv_buf[i] = U0RBR; // 读取FIFO的数据,并清除中断

VICVectAddr = 0x00; // 中断处理结束


/*
*********************************************************************************************************
** 函数名称 :UART0_SendByte()
** 函数功能 :向串口0发送1字节数据
** 入口参数 :dat 要发送的数据
** 出口参数 :无
*********************************************************************************************************
*/
void UART0_SendByte (uint8 dat)

U0THR = dat; // 要发送的数据


/*
*********************************************************************************************************
** 函数名称 :UART0_SendBuf()
** 函数功能 :向串口发送8字节数据
** 入口参数 :dat 要发送的数据
** 出口参数 :无
*********************************************************************************************************
*/
void UART0_SendBuf (void)

uint8 i;

for (i=0; i<8; i++)
UART0_SendByte(rcv_buf[i]);
while ((U0LSR & 0x20) == 0); // 等待数据发送完毕
追问

接收中断正常呢,呵呵,现在不玩arm7了,在学arm9的应用层了、、

参考技术B 接收中断可以进去就可以了,

发送数据没有必要非要进中断处理!!

以上是关于ARM7LPC2138做串口中断实验的时候,发送中断一直进不去。接收中断一切正常,代码改了n遍了,求解释啊的主要内容,如果未能解决你的问题,请参考以下文章

LPC2138串口屏幕显示的横竖屏切换问题

串口uart发送出错

Stm32L0串口中断接收使用

stm32啥触发串口接收中断

单片机串口发送的数据一直是00;求解

stm32 串口发送数组 cpu可以工作吗