久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

S3C2440-UART

作者: 時間:2016-12-02 來源:網絡 收藏
S3C2440通用異步接收器和發送器(UART)提供了3個獨立的異步串行IO端口,每個端口可以在中斷模式或DMA模式下操作。換言之,UART可以生成一個中斷或DMA請求進行CPU和UART之間數據的傳輸。如果一個外部設備提供UEXTLCK給UART,UART可以在更高的速度下工作。每個UART通道對于接受器和發送器包括2個64字節的FIFO和移位器。數據拷貝到FIFO然后在傳送之前拷貝到發送移位器。數據通過發送引腳(TxDn)被發出。同時,接受數據通過接受數據引腳(RxDn)移入,然后從移位寄存器拷貝到FIFO。波特率由時鐘源(PCLK,FCLK/n,UEXTCLK)16分頻和UART波特率除數寄存器UBRDIVn指定的16位除數決定。波特率除數因子UBRDIVn的計算公式為,UBRDIVn=(int)(UART clock)/(buad rate * 16)) - 1。

這個程序可以通過串口調試助手發送一個字符,然后在接受的地方顯示出來。

#define rULCON0 (*(volatile unsigned*) 0x50000000)
#define rUCON0 (*(volatile unsigned*) 0x50000004)
#define rUTRSTAT0 (*(volatile unsigned*) 0x50000010)
#define rUTXH0 (*(volatile unsigned*) 0x50000020)
#define rURXH0 (*(volatile unsigned*) 0x50000024)
#define rUBRDIV0 (*(volatile unsigned*) 0x50000028)
int Main(){
char buf;
rULCON0 = 0xfff00;
rULCON0 |= 0x3;
rUCON0 = 0x0805;
rUBRDIV0 = 26;
while(1){
if(rUTRSTAT0&0x1){
buf = rURXH0;
while(!(rUTRSTAT0&0x04));
rUTXH0 = buf;
}
}
return 0;
}


這是通過向串口發送數據,根據發送的數據控制led哪個燈亮的程序。注意事項是:我使用的是串口調試助手,發送數據前首先要設置波特率為115200,否則沒有任何顯示。void Delay(unsigned int x);這句話要在Main函數內聲明,在外面聲明就不好使,不知為什么。


#define GPFCON (*(volatile unsigned*) 0x56000050)
#define GPFDAT (*(volatile unsigned*) 0x56000054)
#define GPFUP (*(volatile unsigned*) 0x56000058)
#define ULCON0 (*(volatile unsigned*) 0x50000000)
#define UCON0 (*(volatile unsigned*) 0x50000004)
#define UTRSTAT0 (*(volatile unsigned*) 0x50000010)
#define UTXH0 (*(volatile unsigned*) 0x50000020)
#define URXH0 (*(volatile unsigned*) 0x50000024)
#define UBRDIV0 (*(volatile unsigned*) 0x50000028)
int Main(){
void Delay(unsigned int x);
char buf;
GPFCON &= 0xc03f;
GPFCON |= 0x1540;
GPFUP &= 0x87;
ULCON0 |= 0x3;
UCON0 &= 0x0800;
UCON0 |= 0x05;
while(1){
if(UTRSTAT0 & 0x1){
buf = URXH0;
while(!(UTRSTAT0 & 0x4));
UTXH0 = buf;
switch(buf){
case 0x11:
GPFDAT = 0xf7;
Delay(100);
break;
case 0x22:
GPFDAT = 0xef;
Delay(100);
break;
case 0x33:
GPFDAT = 0xdf;
Delay(100);
break;
case 0x44:
GPFDAT = 0xbf;
Delay(100);
break;
}
}
}
}
void Delay(unsigned int x){
int i,j,k;
for(i = 0; i <= x; i++)
for(j = 0; j <= 0xff; j++)
for(k = 0; k <= 0xff; k++)
;
}


關鍵詞: S3C2440UART波特

評論


技術專區

關閉