S3C2440的UART
每個 UART 包含一個波特率發(fā)生器、發(fā)送器、接收器和一個控制單元
本文引用地址:http://m.butianyuan.cn/article/201611/319199.htmUART 基本工作原理
內(nèi)置波特率發(fā)生器,為串行數(shù)據(jù)的發(fā)送和接收提供時鐘,根據(jù)這個時鐘節(jié)拍,數(shù)據(jù)先寫到FIFO中然后在拷貝到發(fā)送移位器中,在移位發(fā)送到引腳TxDn, 期間,發(fā)送過來的數(shù)據(jù)通過引腳RxDn進入移位器中然后拷貝到接收器的FIFO中
UART寄存器(詳情見數(shù)據(jù)手冊)
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,F(xiàn)CLK/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位數(shù)據(jù),1位停止位
- rUCON0=0x05;
- rUBRDIV0=PCLK/bandrate/16-1;
- rURXH0=0;//清空UART0接收緩沖器
- }
- voidSendchar(unsignedcharc)
- {
- rUTXH0=c;//寫入UART0發(fā)送緩沖器
- while(!(rUTRSTAT0&(1<<2)));//等待字符發(fā)送完
- }
- 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;
- }
評論