S3C2440串口代码_函数_初始化_发送Byte_发送string_Printf

通常情况下都会将串口的初始化语句写进一个初始化函数Uart_Init()中:

 1 void Uart_Init(int baud)
 2 {
 3     int i;
 4     rUFCON0 = 0x0;   //UART FIFO disable
 5     rULCON0 = 0x3;   //关闭红外传输模式而用Normal模式,No parity,1 stop,每帧8bits数据位
 6     rUCON0  = 0x805; //先看[11:10]=10,UART时钟源为PCLK,那么[15:12]就没用了,置零,接收与发送的中断类型均为Pulse,禁止接收超时中断的产生,禁止接收错误中断的产生
 7                      //不采用loopback工作模式而采用normal模式,不发送break signal而采用normal transmit
 8     rUBRDIV0=( (int)(50000000/16./baud+0.5) -1 );   //Baud rate divisior register 0
 9     for(i=0;i<100;i++);//延时
10 }

 

串口发送字节Byte的函数Uart_SendByte():

 1 void Uart_SendByte(int data)
 2 {
 3    
 4         if(data=='\n')
 5         {
 6             while(!(rUTRSTAT0 & 0x2));
 7          
 8             WrUTXH0('\r');
 9         }
10         while(!(rUTRSTAT0 & 0x2));   //Wait until THR is empty.
11       
12         WrUTXH0(data);//一个宏
13 }

上面程序中的WrUTXH0()是一个宏,定义在另外一个文件中,形式为:

#define WrUTXH0(ch) (*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)

所以WrUTXH0(data)的作用就相当于:

1 #define rUTXH0          (*(volatile unsigned *)0X50000020)
2 rUTXH0=data;

这两者功能是等价的。

 

串口发送字符串的函数Uart_SendString()实质就是不断调用Uart_SendByte()函数,将字符串一个字节一个字节的发出去:

1 void Uart_SendString(char *pt)
2 {
3     while(*pt)
4         Uart_SendByte(*pt++);
5 }

 

串口打印函数Uart_Printf()就是调用发送字符串的函数:

 1 void Uart_Printf(char *fmt,...)
 2 {
 3     va_list ap;
 4     char str[255];
 5 
 6     va_start(ap,fmt);
 7     vsprintf(str,fmt,ap);
 8     Uart_SendString(str);
 9     va_end(ap);
10 }

 

Uart_GetKey():

1 char Uart_GetKey(void)
2 {
3     if (rUTRSTAT0 & 0X01)  //接收是否完毕 =1结束
4         return rURXH0;
5     else 
6         return 0;
7 }

 

posted @ 2012-12-15 21:19  wuqi1003  阅读(655)  评论(0编辑  收藏  举报