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