首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于S3C2440和嵌入式Linux的扩展串口设计

基于S3C2440和嵌入式Linux的扩展串口设计

随着计算机网络的发展,以及现场总线等技术的广泛使用,串口通讯在各种场合的应用越来越广泛。在集中控制系统中,需要在多个串口间进行通信,而在一般计算机上,只有1~3个串口,为了实现对多点的控制,需要对串口进行扩展。
ARM芯片是目前在嵌入式系统中应用比较广泛的一种芯片,由于可以运行操作系统,以及拥有包括LCD、串口通讯、网络通讯、存储芯片等大量外围接口芯片的支持,使得ARM广泛应用于检测、通讯、控制等领域。
本文以ARM 920T核的S3C24449芯片作为微控制器,在TQ2440开发板进行串口扩展,利用开发板上的系统总线接口和通用输入输出接口分别与扩展串口相连,达到同时与多台串口设备并行通信的目标。

1 硬件介绍
1.1 异步通信芯片――TL16C554A
TL16C554A含有4路异步通信单元(Asynchronous Communications Element ACE),每路ACE均可接收外围设备的串行数据,并将其转换为并行数据供CPU使用,也可将CPU的并行数据转换为串行数据发送到外围设备。
TL16C554A引脚如图1所示。各主要引脚的功能说明如下:A0―A2用于选择片内寄存器;D0―D7进行数据传输;IOR和IOW进行读写;CSA,CSB,CSC,CSD用于选定具体串口;XTAL1,XTAL2可接晶振或外部时钟信号;INTA,INTB,INTC,INTD为4个独立外部中断信号;RXA,RXB,RXC,RXD:串行接收数据;TXA,TXB,TXC,TXD:串行发送数据。


1.2 系统总线接口、GPIO接口
TQ2440开发板以S3C2440芯片作为控制器,主频400MHz,外扩64 M内存,256 M闪存,并集成了多种接口,本设计中使用开发板上的系统总线接口与GPIO(通用输入输出接口)和TL16c554A相连。

1.2.1 系统总线接口
本开发板上的系统总线接口中共包含8根地址线(A0~A6,A24),16根数据线(DATA0~DATA15),4个中断,4个片选等信号,该总线接口集成了IDE所需的所有引出点,方便用户扩展,接口电路如图2所示。


1.2.2 GPIO接口
GPIO是通用输入输出口的简称,本开发板带有一个40Pin 2.0 mm间距的GPIO接口,如图3所示。不仅包含很多富余的GPIO引脚,还包含了一些其他CPU引脚,如AIN0~AIN3,CLKOUT等。如SPI接口、I2C接口、LED1~LED4(实际就是GPB5~GPB8),它们其实也是GPIO,不过是以特殊功能接口来标称定义的,这些都可以通过相应的CPU寄存器来设置更改它们的用途。



2 硬件设计
在硬件设计中,将TQ2440开发板扩展口的地址线ADDR0,ADDR1,ADDR2与16C554A的A0,A1,A2直接相连,TL16C554A芯片A0,A1,A2的不同的组合代表芯片内不同的寄存器。
在与TL16C554A的连接中,由于TL16C554A只有8位,只需TL16C554A的D0~D7和开发板的DATA0~DATA7相连。读写信号直接相连(开发板的nOE、nWE分别与串口的IOE、IOW直连)。由于16C554芯片启动要有一定的宽度的脉冲,可以从GPA 12输出一定的宽度的脉冲来完成。
每片16C554A可以将数据总线上的数据和4个串行端口的数据进行相互的转化,两片16C554A芯片共有8个串行口,通过3根地址线ADDR4,ADDR5,ADDR24经过74LS138选择8个串口中的任意一个。

  因为方案采用中断方式,所以将NSEL置高位,即允许芯片中断。16C554A有INTA、INTB、INTC、IN TD4个中断线,第一片扩展串口与系统总线的EINT1,EINT2,EINT5,EINT6相连,第二片扩展串口与GPIO中的EINT11,EINT13,EINT15,EIN39中断相连,使得任一片芯片的任意的端口都能产生中断。
S3C2440的A0,A1,A2,A4,A5,A24通过不同组合可以选择8个不同的端口。nGCS5与74LS138译码器片选脚相连,根据S3C2440对地址空间的定义,这样就确定了第一片16C554A扩展芯片4个端口的访问地址为0X28000000,0X28000010,0X28000020,0X28000030,第二片16C554A扩展芯片4个端口的访问地址为0X29000000,0X29000010,0X29000020,0X29000030,根据端口基地址就可以确定片内的各个寄存器地址。具体连接如图4所示。



3 驱动程序移植
软件设计主要是为设备编写驱动程序。设备驱动是介于硬件和操作系统之间的软件接口,主要功能包括:探测和初始化设备;从设备接收数据并提交给内核;从内核接收数据送到设备;检测和处理设备错误。
串口驱动程序从上到下分为4层:终端设备层、行规程、串口抽象层、串口芯片层。其中,串口芯片层与具体的芯片相关,主要是向串口抽象层提供串口芯片所用的资源,还进行一些与芯片相关的设置。
TL16C554A扩展串口芯片属于标准串口,内核的串口驱动程序对它支持它的驱动程序就是Linux内核代码中的driver/seria/8250.c.入口函数是serial8250_init,它用于向串口抽象层提供注册串口的物理信息。串口的物理信息主要有两类:访问地址和中断号。所以只要设置好这两类物理信息,就可以驱动扩展串口了,图5为驱动程序移植流程。


3.1 构建扩展串口的数据结构

继承事业,薪火相传
返回列表