你好,游客 登录 注册 搜索
背景:
阅读新闻

S3C2440 UART串口驱动

[日期:2011-09-02] 来源:Linux社区  作者:mr_raptor [字体: ]

1.1.3   数据通信传输模式

在数据通信过程中,发送方和接收方为了实现数据的正确发送和接收,通常会有一个状态寄存器来描述当前数据接收和发送状态,当发送方有数据发送时,会查看发送状态寄存器,看是否允许发送数据(如果上一次数据还没有发送完毕,不允许继续数据发送),在发送允许情况下再送出新数据。同样,接收端通过查看接收状态寄存器,确定是否有新数据到达,如果有数据到达,将去接收数据缓冲区读取数据。

1)轮询模式

通过程序执行流,不停的检测状态寄存器的结果,如果当前可发送或接收,则发送或接收数据。其过程可以用下面伪代码来表示。

; 轮询方式实现数据发送伪代码

Send(){

While(1){

                    if(发送状态 == 可发送)

                             执行数据发送操作;

           }

}

 

; 轮询方式实现数据接收伪代码

Receive(){

While(1){

                    if(接收状态 == 有数据到达)

                             执行数据接收操作;

           }

}

由程序可知,这种方式实现简单,但在进行数据接收和发送时都要进入循环检查状态寄存器的值,当没有数据到达或数据不可发送时,CPU会一直空转,其它程序又得不到CPU的执行权,很影响系统的效率。

2)中断模式

中断方式是指,当数据到达或数据可发送时,产生中断,通知CPU去发送或接收数据,这种方式将通信硬件和CPU独立出来,通信硬件只有在发送或接收条件准备好之后中,才通知CPU去处理数据,在通信条件没有准备好的时候,CPU去处理其它程序,显然这种方式更合理,这种方式要求通信硬件要求比较高,需要支持产生中断信号。

3DMA模式

通常实现数据的转移或拷贝时,CPU将从源地址处复制数据到寄存器,然后将寄存器数据再写入目的地址处,该复制过程需要CPU来执行。S3C2440支持DMA传输模式,DMA传输是指在CPU不干涉的情况下,DMA硬件自动实现数据的转移和复制,在DMA传输过程中,CPU几乎不用干涉,这样可以让CPU安心的去做自己的事情。虽然如此,但是DMA在传输数据过程中要占用总线,在大批数据传输时,系统总线会被DMA通道占用,也会影响系统的效率。S3C2440 UART控制器支持DMA方式传输串口通信数据。

1.1.4   S3C2440 UART控制器

S3C2440 UART控制器,提供了三个独立的异步串行I/O端口,每个端口都可以在中断模式或DMA模式下工作,换而言之,UART可以生成中断或DMA请求用于CPUUART之间的数据传输。UART串口挂接在APB总线上,APB总线最高可以达到50MHz工作频率,在使用APB时钟频率时可以达到最高115.2Kbps波特率的通信速度。如果UART串口接收外部设备提供UEXTCLK(外部时钟),UART可以在更高的速度下工作。每个UART串口在接收装置和发送装置里分别包含一个64ByteFIFO缓冲区,用于缓存发送数据和接收数据。

由于UART是串行异步通信方式,因此在UART通信过程中每次只能传输1位(bit,若干位组成一个数据帧(frame),帧是UART通信中最基本单元,它主要包含:开始位,数据位,校验位(如果开启了数据校验,要包含校验位),和停止位,帧结构如图2-58所示。

2-58 UART数据帧结构

UART在通信之前要在发送端和接收端约定好帧结构,也就是约定好传输数据帧格式。

l  开始位:必须包含在数据帧中,表示一个帧的开始。

l  数据位:可选5678位,该位长度可由编程人员指定。

l  校验位:如果在开启了数据校验时,该位必须���定。

l  停止位:可选12位,该位长度可由编程人员指定。

通信双方约定好帧格式后,指定同一波特率,以保证双方数据传输的同步。

linux
相关资讯       S3C2440 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款