×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-06-02 发布时间:
|

通常情况下都会将串口的初始化语句写进一个初始化函数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 }

关键字:S3C2440  串口  函数  初始化 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式