我在使用16c2550b时,可以发送,并且也可以产生发送中断,但在接收时,老是不能产生接收中断,以下是我的代码,能帮我看看,是不是有什么问题,谢谢<br /><br /><br /><br />/* SC16C2550通用异步串行口0(UART0)的特殊寄存器 */<br /><br />我使用的cpu是lpc2214,器件cs0的基地址是0x81000020 ,cs1:0x81000028<br /><br />//接收保寄存器 <br />#define SC16C2550_U0RBR (*((volatile unsigned char *)0x81000020))<br />//发送保寄存器<br />#define SC16C2550_U0THR (*((volatile unsigned char *)0x81000020))<br />//中断使能寄存器<br />#define SC16C2550_U0IER (*((volatile unsigned char *)0x81000021))<br />//中断状态寄存器<br />#define SC16C2550_U0ISR (*((volatile unsigned char *)0x81000022))<br />//中断状态寄存器 与zlg定义兼容<br />#define SC16C2550_U0IIR (*((volatile unsigned char *)0x81000022))<br />//FIFO控制寄存器<br />#define SC16C2550_U0FCR (*((volatile unsigned char *)0x81000022))<br />//线控制寄存器<br />#define SC16C2550_U0LCR (*((volatile unsigned char *)0x81000023))<br />//Modem控制寄存器<br />#define SC16C2550_U0MCR (*((volatile unsigned char *)0x81000024)) <br />//线状态寄存器<br />#define SC16C2550_U0LSR (*((volatile unsigned char *)0x81000025))<br />//Modem状态寄存器<br />#define SC16C2550_U0MSR (*((volatile unsigned char *)0x81000026))<br />//暂存寄存器<br />#define SC16C2550_U0SPR (*((volatile unsigned char *)0x81000027))<br />//除数LSB保存<br />#define SC16C2550_U0DLL (*((volatile unsigned char *)0x81000020))<br />//除数MSB保存<br />#define SC16C2550_U0DLM (*((volatile unsigned char *)0x81000021))<br /><br />void SC16C2550Uart0Init(uint32 baud,uint8 datab,float stopb,uint8 check,uint8 rev_num)<br />{ <br /> uint32 Bak;<br /> SC16C2550_U0LCR = 0X80; //设置U0LCR.7=1 <br /> Bak = SC16C2550_Fpclk/(16*baud); //设置波特率<br /> SC16C2550_U0DLM = Bak >> 8;<br /> SC16C2550_U0DLL = Bak & 0XFF;<br /> SC16C2550_U0LCR = 0; //设置U0LCR.7=0<br /> Bak = datab - 5; //字长<br /> if(stopb==2 || stopb==1.5)<br /> Bak |= 0X04;<br /> if(check!=None && check!=Space) <br /> Bak = Bak + (1<<3) + (check<<4); //xxxxxxxx<br /> if(check==Space) <br /> Bak = Bak + (1<<3);<br /> SC16C2550_U0LCR = Bak;<br /> Bak = 1;<br /> switch (rev_num) <br /> {<br /> case 1: <br /> Bak = Bak + 0X00; <br /> break;<br /> case 4: <br /> Bak = Bak + 0X40; <br /> break;<br /> case 8: <br /> Bak = Bak + 0X80; <br /> break;<br /> case 14: <br /> Bak = Bak + 0XC0; <br /> break;<br /> }<br /> SC16C2550_U0FCR = Bak;<br /> SC16C2550_U0IER = 0X03; //串口0中断使能<br /> SC16C2550_U0MCR = 0x08;//(1<<3); //外部中断使能<br />PINSEL1 = (PINSEL1 & 0xFFFFFFFC)|0x00000001; //设置p0.16脚为外部中断0<br />EXTINT |= 0x01; //清除EINT0中断标志 <br />EXTMODE |= 0x01; //使用边延激活方式<br />EXTPOLAR &= 0x06; //低电平有效 <br />VICIntSelect &= 0XFFFFBFFF; //设置外部中断0为irq中断<br />VICVectCntl1 = 0X20 | 0X06; //外部中断0为14号中断<br />VICVectAddr1 =(uint32)SC16C2550_Uart0_IRQ; //外部中断0设置在通道一<br />VICIntEnable |= (1<<0X0E); //使能外部中断0<br />} |
|