关键词不能为空

当前您在: 主页 > 英语 >

S3C2440的UART详解

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-27 21:28
tags:

-

2021年2月27日发(作者:boulder)


1



UART


原理简介



在介绍


2440


UART


控制器之前,我们首先来了解一下


UART


的原理



UART



Universal Asynchro


no


us Receiver/Transm itter(


通用异步收发送器


)


,用 来传输串行数据,发送数


据时,


CPU


将并行数据写入


UART



UART< /p>


按照一定格式在


TxD


线上串行发出;接 收数据时,


UART


检测


< p>
RxD


线上的信号,将串行收集放到缓冲区中,


C PU


即可读取


UART


获得的这些数据 。



UART


最精简的连线形式只有< /p>


3


根线,


TXD


用于发送,


RXD


用于接收,


GND< /p>


用于提供参考电平。


UART


之间以帧作 为数据传输单位,


帧由具有完整意义的若干位组成,


它包含开始 位、


数据位、


校验位和停止位。


发送数 据之前,互相通信的


UART


之间要约定好数据传输速率(波特 率的倒数)、数据的传输格式(多少


个数据位、是否使用校验位、奇校验还是偶校验、多 少个停止位)。





2



S3C2440 UART


的特性



S3C2440


的通用异步收发器(


UART


)配有


3


个独立异步串行


I/O


SIO


)端口,每个都可以通过产生中

< br>断或


DMA


请求来进行


CPU< /p>



UART


之间的数据传输。

< p>
如图


1


所示:


每个


UART


包含一个波特率发生器、


发送器、接 收器和一个控制单元,






1


2440UART


方框图


(



FIFO)



波特率发生器可以由


PCLK



FCLK/n



U EXTCLK


(外部输入时钟)时钟驱动。


UART

< p>
通过使用系统时钟


可以支持最高


115.2Kbp s


的比特率。


如果是使用外部器件提供


UEXTCLK



UART




UART


可以运行在


更高的速度。发送器和接收器各包含一个


64


字节的

< p>
FIFO


和数据移位器。要发送数据时,先将数据写入到

< br>FIFO


接着在发送前复制到发送移位器中,随后将数据从发送数据引脚


(TXDn)


移出;接收数据时,从接收


数据引 脚


(RXDn)


移入收到的数据,接着从移位器复制到


FIFO





3



S3C2440 UART


的使用



对于


S3C2440


,使用


UART


之前,首选需要对


2440



UAR T


模块进行初始化,需要设置波特率、传输格


式(多少个数据位 、是否使用校验位、奇校验或偶校验、多少个停止位、是否使用流量控制)、选择所涉


及 的管脚为


UART


功能、选择


UART


通道的工作模式为中断模式或


DMA


模 式。设置好之后,往相关寄存


器写入数据即可发送,读取相关寄存器即可接收到数据,还 可以通过查询状态寄存器或设置中断来获知数


据是否发送完毕、是否接收到数据。



我用的开发板是天嵌的


TQ2440



该开发板用


SP3232EEN

< p>
扩展了一个


RS232


串口,

电路连接如图


2


所示:





2 RS232


原理图



波特率发生器



每个

< br>UART


的波特率发生器为发送器和接收器提供串行时钟,波特率发生器的时钟源 可以选择


S3C2440A


的内部时钟系统或者


UEXTCLK


。波特率时钟是通过


16


和由


UART


波特率分频寄存器

(UBRDIVn)


指定的


16


位 分频系数来分频源时钟


(PCLK



F CLK/n


或者


UEXTCLK)


产生 的,


UBRDIVn


由下列表达式确定:



UBRDIVn=(int)(UART


时钟


/(


波特率


*16))-


1


UART


时钟:


PCLK



FCLK/n


或者


UEX TCLK



例如,


如果波特率为


115200bps


并且


UART

< p>
时钟为


40MHz



则< /p>


UBRDIVn


为:


< br>UBRDIVn=(int)(40000000/(115200*16))-


1=(int)(21.7)-


1


(取最接近的整数)


=22-


1=21




介绍发送和接收操作之前,先介绍几个重要的寄存器



UBRDIVn


寄存器:设置波特率,


S3C2 440 UART


的时钟源有两种选择:


PCLK



UEXTCLK



FCL K/n



其中


n


的值通过


UCON0-UCON2


联合设置

< br>


ULCONn


寄存器:设置传输格式



UCONn


寄存器:它用于选择


UAR T


时钟源、设置


UART


中断方式



UFCONn


寄存器、

< br>UFSTATn


寄存器,


UFCONn

< br>寄存器用于设置是否使用


FIFO


,设置各


FIFO


的触发阙


值,即发送


FIFO


中有多少个数据时产生中断、接收


FIFO


中有多少个数据时产生中断。并可以通过设置


UFCONn


寄存器来复位各个


FIFO


。读取

< br>UFSTATn


寄存器可以知道各个


FIFO

< p>
是否已经满,其中有多少


个数据。



UMCONn


寄存器、


UMSTATn


寄存器,这两类寄存器用于流量控制,具体看数据手册


UTRSTATn


寄存器,它用来表明数据是否已经发送完毕、是否已经接收到数据



UERSTATn


寄存器,用来表示 各种错误是否发生



UTXHn


寄存器 ,


CPU


将数据写入这个寄存器,


UA RT


即会将它保存到缓冲区中,并自动发送出去



URXHn


寄存器,当


UART

接收到数据时,


CPU


读取这个寄存器,即可获得数据。< /p>



下面通过实际的代码来理解


2440< /p>



UART


首选是

UART


的初始化,


TQ2440



UART0


引了一个接口出来,就介绍


UART0




2440

< p>


UART


引脚是挂接在


GPH


上的,所以使用


UART


之前需 要先对


GPH


的引脚功能进行配置。



void uart0_init(void)


{



GPHCON


|= 0xaa;


// GPH0



GPH1



GPH2



GPH3


分别


nCTS0


,< /p>


nRTS0



TXD0

< br>,


RXD0



GPHUP


= 0x7ff;


//


内部上拉被禁止



UFCON0


= 0x00;


//


不使用


FIFO



UMCON0


= 0x00;


//


不使用流控





ULCON0


= 0x03;


// 8N1(8


个数据位,无校验,< /p>


1


个停止位


)



UCON0


= 0x245;


//


查询方式,


UART

< p>
时钟源为


PCLK


,中断请求方式为


Tx-


电平,


Rx-


脉冲< /p>



rUBRDIV0=( (int)(pclk/16./baud+0.5) -


1 );


//


设置波特率



}


接下来几个是进行数据的发送和接收的函数


< br>//======


此函数的作用是向


UART

< p>
发送一个字符,不用


FIFO


,直接用

< p>
UART


发送



void Uart_SendByte(char data)


{


if(data=='n')

-


-


-


-


-


-


-


-



本文更新与2021-02-27 21:28,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/676127.html

S3C2440的UART详解的相关文章