我的程序如下:<br />1、这是中断处理程序,其它的都注掉了,只有这四行,每接收一个字节,中断退出后,ARM就复位,不知为何。我发现只能注掉A或B这两行中的任意一行,ARM就不复位了,当然这样的中断也就没法用了。<br />void __irq IRQ_UART0(void)<br />{<br /> uint8 uTemp;<br /> if(0x04==(U0IIR&0x0f))<br /> {<br /> uTemp=U0RBR; //A<br /> }<br /> VICVectAddr=0x00;//B<br /><br />}<br />2.这是UART0初始化程序,我用的是9600,8,1,n的通讯设置。<br />uint8 UART0_INI(uint32 baud,uint8 datab,uint8 stopb,uint8 parity)<br />{<br /> uint32 bak;<br /><br /> //参数过滤<br /> if((0==baud)||(baud>115200))return(0);<br /> if((datab<5)||(datab>8))return(0);<br /> if((0==stopb)||(stopb>2))return(0);<br /> if(parity>4)return(0);<br /> //设置串口波特率<br /> U0LCR=0x80;//DLAB位置1<br /> bak=(Fpclk>>4)/baud;<br /> U0DLM=bak>>8;<br /> U0DLL=bak&0xff;<br /> //设置串口模式<br /> bak=datab-5;//设置字长度<br /> if(2==stopb)bak|=0x04;//判断是否为2位停止位<br /> if(0!=parity){parity=parity-1;bak|=0x08;}<br /> bak|=parity<<4;<br /> U0LCR=bak;<br /><br /> U0FCR=0x01;//触发点为1个字节 0xc1<br /> U0IER=0x01;<br /> <br /> IRQEnable();<br /> VICIntSelect=0x00000000;//设置所有通道为IRQ中断<br /> VICVectCntl0=0x26;//UART0中断通道分配到IRQ slot 0,即优先级最高<br /> VICVectAddr0=(int)IRQ_UART0;//设置UART0向量地址<br /> VICIntEnable|=1<<0x06;//使能UART0中断<br /> return(1);<br />} |
|