这是一个简单的测试用主函数:
int main()
{
int i=0;
Uart_Init(0,57600);
while(i<5)
{
Uart_SendByte('A');
i++;
}
return 0;
}
这是初始化串口0函数:
void Uart_Init(int pclk,int baud)
{
int i;
if(pclk == 0)
pclk = PCLK;
/**
*
* 注意此处若不配置IO将会出错;
*
*
**/
#ifdef _DEBUG_UART0
//I/O pins configuration(GPH2,3)
rGPHUP |= (0x03<<2);
rGPHCON = (rGPHCON & (~0x000000F0)) | (0x000000A0);
rGPHCON |= 0xa0;
rGPHUP |= (0x03 << 2);
rUFCON0 = 0x0; //UART channel 0 FIFO control register, FIFO disable
rUMCON0 = 0x0; //UART chaneel 0 MODEM control register, AFC disable
//UART0
rULCON0 = 0x3;
rUCON0 = 0x245; // Control register
rUBRDIV0 = ( (int)(pclk/16./baud+0.5)-1 ); //Baud rate divisior register 0
#endif
这是发送一个字节函数:
void Uart_SendByte(char str)
{
#ifdef _DEBUG_UART0
int i;
while(!(rUTRSTAT0 & 0x02));//to wait until the TX buffer REG is empty
for(i=0;i<10;i++);
rUTXH0 = str;
//WrUTXH0(str);
#endif
}
利用回环模式仿真的时候能得到正确的数值,但发送到主机的串口是接收到的是乱码,比如发0x41收到的16进制数就是0C 80 FC 0C 80 FC ;调整串口调试助手的波特率就能得到不同的16进制数,我判断是波特率的问题,可是怎么才能知道波特率是否正确?我这个程序是不是哪有问题??求解,不胜感激。。 |