微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C2440的UART

S3C2440的UART

时间:11-21 来源:互联网 点击:
S3C2440 的通用异步收发器(UART)配有3个独立异步串行I/O(SIO)端口

每个 UART 包含一个波特率发生器、发送器、接收器和一个控制单元

UART 基本工作原理
内置波特率发生器,为串行数据的发送和接收提供时钟,根据这个时钟节拍,数据先写到FIFO中然后在拷贝到发送移位器中,在移位发送到引脚TxDn, 期间,发送过来的数据通过引脚RxDn进入移位器中然后拷贝到接收器的FIFO中

UART寄存器(详情见数据手册)
ULCONn(3个)
UCONn(3个)
UFCONn(3个)
UMCONn(2个)
UTRSTATn(3个)
UERSTATn(3个)
UFSTATn(3个)
UMSTATn(2个)
UTXHn(3个)
URXHn(3个)
UBRdivn(3个)

存储在波特率分频寄存器中的值(UBRdivn)是用于决定如下的串行Tx/Rx时钟率(波特率):
UBRdivn = (int)( UART时钟 / ( 波特率 × 16) ) –1
( UART时钟:PCLK,FCLK/n 或UEXTCLK )

一个例子(启动代码自己添加)

  1. #include"config.h"
  2. #definePCLK50000000
  3. voidUart0_Init(unsignedintbandrate)
  4. {
  5. rGPHCON&=~((3<4)|(3<6));
  6. rGPHCON|=(2<4)|(2<6);//GPH2--TXD[0];GPH3--RXD[0]
  7. rGPHUP=0x00;//使能上拉功能
  8. rULCON0|=0x03;//8位数据,1位停止位
  9. rUCON0=0x05;
  10. rUBRdiv0=PCLK/bandrate/16-1;
  11. rURXH0=0;//清空UART0接收缓冲器
  12. }
  13. voidSendchar(unsignedcharc)
  14. {
  15. rUTXH0=c;//写入UART0发送缓冲器
  16. while(!(rUTRSTAT0&(1<2)));//等待字符发送完
  17. }
  18. unsignedcharGetchar(void)
  19. {
  20. unsignedcharc;
  21. while(!(rUTRSTAT0&(1<0)));//等待接收字符
  22. c=rURXH0;//接收缓冲器的字符
  23. returnc;
  24. }
  25. intMain()
  26. {
  27. unsignedcharZ_char;
  28. Uart0_Init(115200);
  29. while(1)
  30. {
  31. Z_char=Getchar();
  32. Sendchar(Z_char);
  33. }
  34. return0;
  35. }


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top