void InitUart(void)<br />{<br /> uint32 i;<br /> U1LCR=0x80;<br /> U1DLM=0;<br /> U1DLL=24; <br /> U1LCR=0x3B; //强制0<br /> U1FCR=0;<br /> U1IER=0x05; //RX中断<br /> VICVectCntl4 = 0x20|7; // UART1分配为485<br /> VICVectAddr4 = (uint32)IRQ_UART1; <br />} <br />void __irq IRQ_UART1(void)<br />{<br /> uint8 b1,b3,drc;<br /> uint32 i;<br /> b1=U1IIR; <br /> system.TimeOut=0;<br /> switch(b1&0x0F)<br /> {<br /> case 0x06: //地址帧 <br /> if(system.ReciveFlag==0)system.ptr=0; b3=U1LSR;<br /> break;<br /> case 0x04: //数据帧 <br /> b1=U1RBR;<br /> if(system.ReciveFlag==0)<br /> {<br /> system.ReciveBuf[system.ptr]=b1;<br /> system.ptr++;<br /> }<br /> break;<br /> default:<br /> b1=U1RBR;<br /> b1=U1LSR;<br /> break;<br /> } <br /> VICVectAddr=0x00;<br />} <br />void SendMsg(uint32 ptr)<br />{<br /> uint32 i;<br /> U1IER=0; //停止中断<br /> IO0SET=RI;<br /> for(i=0;i<500;i++);<br /> IO0SET=DE; //切换到发送<br /> for(i=0;i<500;i++);<br /> U1LCR=0x2B; //输出地址<br /> for(i=0;i<500;i++);<br /> U1THR=0x39;<br /> while((U1LSR&0x20)==0);<br /> for(i=0;i<4000;i++);<br /> U1LCR=0x3B; //输出地址<br /> for(i=0;i<100;i++); //输出数据<br /> for(i=0;i<ptr;i++)<br /> {<br /> U1THR=system.SendBuf; //发送数据<br /> while((U1LSR&0x20)==0);<br /> }<br /> for(i=0;i<4000;i++); //延时 <br /> IO0CLR=DE;<br /> for(i=0;i<500;i++);<br /> IO0CLR=RI;<br /> for(i=0;i<500;i++);<br /> i=U1IIR;<br /> i=U1RBR;<br /> i=U1LSR; <br /> U1IER=0x05; <br />}
|