您的位置 首页 硬件

S3C2440-UART

S3C2440通用异步接收器和发送器(UART)提供了3个独立的异步串行IO端口,每个端口可以在中断模式或DMA模式下操作。换言之,UART可以生成一

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++)
;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/254717.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部