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;
这句没使能接收中断吧,接收中断正常吗?
首先要知道,串口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遍了,求解释啊的主要内容,如果未能解决你的问题,请参考以下文章