ARM之S3C2440的UART(串口)应用

发布于:2025-03-25 ⋅ 阅读:(39) ⋅ 点赞:(0)

基本概念

        S3C2440A 的通用异步收发器(UART )配有 3 个独立异步串行 I/O 端口,2440的每个UART均不占用定时器来产生波特率。并且每个UART都拥有一个独立用于收 发的缓冲区FIFO。实现一个与pc双向通信的串口程序。 实现波特率为9600,n,8,1。

外设总线是指地址控制总线,也就是我们访问寄存器时使用的地址转换为实际信号的总线

        重要寄存器 

        UART线路控制寄存器ULCONn决定通信所需的奇偶校验位、数据位、停止位等信息。红外 模式是2440专门为红外设备设计的,这里我们使用普通模式。  

 

UART控制寄存器 

        ART控制寄存器的低四位用于指定串口收发时的工作方式,分别是不使能接收,中断或查询方式和 DMA方式。这里我们不用DMA方式,并且还要允许接收,自然是设置为01了。[3:2]两个比特于此类 似,不过是用于设置发送的。

        UART控制寄存器UCONn的4~9位就比较简单了,分别设置为正常传输、正常操作、不产生接收 错误状态中断和脉冲方式。使用脉冲而不是电平很显然是因为不能在正在收数据的时候产生中断, 而是应该在数据接收完整之后再产生中断。

        UART控制寄存器UCONn的10~15比特,起始这一块主要是用于设置波特率的。 [11:10]用于选择uart的时钟源的。分别是PCLK,UEXTCLK和 FCLK。这里的UEXTCLK指的是外部时钟, PCLK和FCLK在时钟配置主题中我们设置成了400M和50M。一旦时钟被选择,那么波特率就可以通过 公式(int)( 被选时钟 / (波特率 * 16)) – 1来计算,并将这个公式计算的结果存入UBRDIVn寄存器。

        比如 我们选择使用PCLK,即50M,波特率为9600,那么公式计算的结果就是324.52,取整得325,把这个 数存到UBRDIVn波特率就设置好了,简直不要太方便。如果我们把uart的时钟设置为FCLK,那么uart 的实际工作频率就由该寄存器的[15:12]决定。

 发送数据缓冲寄存器:类似51的SUBF寄存器,要发送的数据写入这个寄存器,2440会自动把数据放入位移 寄存器发送。

 接收缓冲寄存器:接收到的数据从这个寄存器读出来。

波特率分频寄存器用于保存我们计算好的那个初值。上面说过,这个初值在9600下是325。

          此外,由于需要使用引脚产生实际信号,UART对应的GPIO也要设置好;在数据接收时需要使用中断,所以 相关的中断也要配置好。UART在中断设置方面需要注意的是UART中断有子终端掩码和子终端挂起寄存器。 因此在设置和处理中断时要加以处理。

 

21~41行:配置UART0的收发引脚 

第24、27行:设置8位数据位、无奇偶校验位、1位停止位、普通模式操作 

第29~33行:收发都是轮询或中断方式 

第30行:普通传输,普通操作,不产生错误中断,不产生超市错误中断,收发都是脉冲方式中断。这个脉 冲方式是指,假设收到一个字节,这个字节是正在收的时候产生还是收完了以后产生。采用脉冲方式就是指 收到以后再产生中断

第35行:波特率分频值,(50*1000000)/(9600*16)-1

第36行:允许UART0子中断  第37~38行:使能中断并注册中断服务函数 

数据的发送 

数据的接受

 


网站公告

今日签到

点亮在社区的每一天
去签到