用SMARTARM2200开发板做UART0实验,很奇怪是,发送BUF中数据为0 都没有发出去,不为0均发出去了.一开始用带UCOS操作系统的环境来做,出现了上述现象,后来,干脆不用操作系统,重新写了简单的代码,现象也一样.请高手看看是何原因? 下面是相关的代码.
void UART0_Init(void) { uint16 Fdiv;
U0LCR = 0x80; // DLAB = 1,可设置波特率 Fdiv = (Fpclk / 16) / UART_BPS; // 设置波特率 U0DLM = Fdiv / 256; U0DLL = Fdiv % 256; U0FCR = 0x00; U0LCR = 0x03; U0IER = 0x00; }
void UART0_SendByte(uint8 data) { while( (U0LSR&0x40)==0 ); // 等待数据发送完毕 U0THR = data; // 发送数据 }
int main(void) { uint8 i; uint8 Buf[64]; PINSEL0 = 0x00000005; // 设置I/O连接到UART0 UART0_Init();
for(i=0;i<16;i++) { Buf=i; } Buf[16]=0x00; Buf[17]=0x00; Buf[18]=0x0a; Buf[19]=0x0d; while(1) { for(i=0;i<20;i++) UART0_SendByte(Buf); DelayNS(1000); }
return(0); }
理论上从串口调试软件串口应该收到(16进制方式): 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00 00 0A 0D 但实际数据接收为: 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0A 0D
其中为0的数据都给丢掉了!!! |