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

最简单的S3c2440UART功能测试

发布时间:2020-08-26 发布时间:
|

 

  1. /******************************************* 
  2. * 文件名称:UART.c 
  3. * 实现功能:最基本的UART发送与接收 
  4. * 作者:无jianqi 
  5. * 版本:1.0 
  6. **********************************************/  
  7. #include"2440addr.h"  //包含2440相关寄存器的设置  
  8. #include"def.h"  
  9.       
  10. //四个LED对应GPB5.6.7.8。  
  11. #define LED1 5    
  12. #define LED2 6  
  13. #define LED3 7  
  14. #define LED4 8  
  15.  
  16. #define BAUD 115200  //波特率  
  17. #define Bit(x)   (1<
  18. #define Output(x) (1<<2*x)  //将对应IO置为输出  
  19. #define LED_On(x) rGPBDAT=~Bit(x) //点亮相应LED  
  20.   
  21. /******************************************* 
  22. * 名称:Clk_Set 
  23. * 功能:关于系统时钟的初始化 
  24. * 入口参数:无 
  25. * 出口参数:无 
  26. **********************************************/  
  27. void Clk_Set(void)  
  28. {  
  29.     int count;  
  30.     rUPLLCON=(56<<12)|(2<<4)|2;  //UCLK为48MHZ  
  31.     for(count=0;count<10;count++)  
  32.     {  
  33.         ;  
  34.     }  
  35.     rMPLLCON=(92<<12)|(1<<4)|1;  //FCLK为400MHZ  
  36.     rCLKDIVN=(0<<3)|(2<<1)|1;  //HCLK位100MHZ,PCLK为50MHZ  
  37.     rCAMDIVN=(0<<9); //PCLK=HCLK/4  
  38. }  
  39.   
  40. /******************************************* 
  41. * 名称:IO_init 
  42. * 功能:关于LED的端口初始化 
  43. * 入口参数:无 
  44. * 出口参数:无 
  45. **********************************************/  
  46. void IO_init(void)  
  47. {  
  48.     rGPBCON=Output(LED1)|Output(LED2)|Output(LED3)|Output(LED4); //LED的IO口置为输出  
  49.     rGPBDAT=0xffff; //LED全部熄灭        
  50. }  
  51.   
  52. /******************************************* 
  53. * 名称:UART0_init 
  54. * 功能:UART0相关的初始化工作 
  55. * 入口参数:无 
  56. * 出口参数:无 
  57. **********************************************/  
  58. void UART0_init(void)  
  59. {  
  60.     rGPHCON=0xa0; //IO口使能UART0功能  
  61.     rGPHUP=0xff; //上拉禁止  
  62.     rULCON0=0x03; // 8位数据,无校验,1位停止位  
  63.     rUCON0=0x05; //pclk时钟,中断请求方式为Tx-电平,Rx-脉冲  
  64.     rUBRDIV0=26;  //设置波特率  
  65.     rUFCON0=0x00; //不使用FIFO  
  66.     rUMCON0=0x00; //不使用流控    
  67. }  
  68.   
  69. /******************************************* 
  70. * 名称:Send_Byte 
  71. * 功能:发送一个字符 
  72. * 入口参数:等待发送的字符 
  73. * 出口参数:无 
  74. **********************************************/  
  75. void Send_Byte(char data)  
  76. {  
  77.     while(!(rUTRSTAT0&0x2));  //等待发送缓冲器空  
  78.     rUTXH0=data;  
  79. }  
  80.   
  81. /******************************************* 
  82. * 名称:Send_String 
  83. * 功能:发送字符串 
  84. * 入口参数:等待发送的字符串 
  85. * 出口参数:无 
  86. **********************************************/  
  87. void Send_String(char* pt)  
  88. {  
  89.     while(*pt)  
  90.     {  
  91.         Send_Byte(*pt++);    
  92.     }  
  93. }  
  94.   
  95. /******************************************* 
  96. * 名称:Uart_Getch 
  97. * 功能:接收一个字符 
  98. * 入口参数:无 
  99. * 出口参数:接收的字符 
  100. **********************************************/  
  101. char Uart_Getch(void)  
  102. {   
  103.     while(!(rUTRSTAT0&0x1)); //等待接收缓冲器有数据  
  104.     return (rURXH0);   //读出数据  
  105. }  
  106.   
  107.   
  108. /******************************************* 
  109. * 名称:Main 
  110. * 功能:测试UART发送和接收函数 
  111. * 入口参数:无 
  112. * 出口参数:无  
  113. **********************************************/   
  114. void Main(void)  
  115. {  
  116.     char temp;  
  117.     IO_init();  
  118.     UART0_init();  
  119.     Clk_Set();  
  120.     Send_String("HelloWorld");  //发送字符串  
  121.     while(1)  
  122.     {  
  123.         temp=Uart_Getch(); //接收到字符  
  124.         if(temp==0x01)  
  125.         {  
  126.             LED_On(LED1);  
  127.         }  
  128.     }  
  129.       
  130. }  



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

热门文章 更多
TQ210天嵌开发板S5PV210 LED闪烁程序C语言代码记录