现在的现象是如果执行#if 1 和#endif 之间的操作,会使得uart0的波特率增加1 倍(1200bps变成2400bps),但是UART0的LCR,DLM,DLL三个寄存器的值在执行这个操作前后并没有变化;<br /><br />如果不执行#if 1 和#endif 之间的对EXTMODE及EXTPOLAR的写操作(屏蔽掉语句1和语句2),发现UART0的LCR寄存被改变成(00),其余未变,按原来的波特率在发出0xAA 的情况下可以收到0xEA,(如果在PC接收端设定成5位数据,则收到0x0A).<br /><br />另:在执行这个函数时,中断一直是关闭的。<br /><br /> <br /><br />uint8 XXX_Ini(void)<br /><br />{<br /> uint8 err; <br /><br /> extern void XXX_Handler(void); <br /><br /> VICIntEnClr =(1 << 15); <br /><br /> #if 1 <br /><br /> UART0_SEND_BYTE(0x99);<br /><br /> UART0_SEND_BYTE(0x99);<br /><br /> err=EXTMODE;<br /><br /> UART0_SEND_BYTE(err);<br /><br /> UART0_SEND_BYTE(0x98);<br /><br /> err=EXTPOLAR;<br /><br /> UART0_SEND_BYTE(err);<br /><br /> UART0_SEND_BYTE(0x97);<br /><br /> err=EXTMODE; <br /><br /> EXTMODE=err|0x02; //EINT1 as edge trigger --语句1<br /><br /> err=EXTMODE; <br /><br /> UART0_SEND_BYTE(err); <br /><br /> UART0_SEND_BYTE(0x96); <br /><br /> err=EXTPOLAR;<br /><br /> EXTPOLAR=err|0x02; //EINT1 rising edge trigger--语句2<br /><br /> err=EXTPOLAR;<br /><br /> UART0_SEND_BYTE(err); <br /><br /> UART0_SEND_BYTE(0x95);<br /> #endif <br /> VICVectAddr13 = (uint32)XXX_Handler; <br /><br /> VICVectCntl13 = (0x20 | 0x0f); //EINT1中断通道分配到IRQ slot 13<br /><br /> EXTINT=0x02;<br /><br /> VICIntEnable = (1 << 15); //使能EINT1 中断<br /><br />}<br /> |
|