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