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 )
一个比如(发动代码自己增加)
- #include”config.h”
- #definePCLK50000000
- voidUart0_Init(unsignedintbandrate)
- {
- rGPHCON&=~((3<<4)|(3<<6));
- rGPHCON|=(2<<4)|(2<<6);//GPH2--TXD[0];GPH3--RXD[0]
- rGPHUP=0x00;//使能上拉功用
- rULCON0|=0x03;//8位数据,1位中止位
- rUCON0=0x05;
- rUBRDIV0=PCLK/bandrate/16-1;
- rURXH0=0;//清空UART0接纳缓冲器
- }
- voidSendchar(unsignedcharc)
- {
- rUTXH0=c;//写入UART0发送缓冲器
- while(!(rUTRSTAT0&(1<<2)));//等候字符发送完
- }
- unsignedcharGetchar(void)
- {
- unsignedcharc;
- while(!(rUTRSTAT0&(1<<0)));//等候接纳字符
- c=rURXH0;//接纳缓冲器的字符
- returnc;
- }
- intMain()
- {
- unsignedcharZ_char;
- Uart0_Init(115200);
- while(1)
- {
- Z_char=Getchar();
- Sendchar(Z_char);
- }
- return0;
- }