快捷搜索:

采用S3C24449芯片在TQ2440开发板实现串口扩展

跟着谋略机收集的成长,以及现场总线等技巧的广泛应用,串口通讯在各类场合的利用越来越广泛。在集中节制系统中,必要在多个串口间进行通信,而在一样平常谋略机上,只有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 构建扩展串口的数据布局

串口的物理信息存储在内核源法度榜样arch/arm/plats3c24xx/common-smdk.c中,以是主要事情是在commonsmdk.c源文件中增添三段代码:

1)增添头文件

源法度榜样中要包孕头文件linux/serial_8250.h,用于奉告编译器应用8250.c作为扩展串口的源法度榜样;

2)增添串口的物理信息

在common-smdk.c文件中增添8个元素的structplat_serial8250_port布局数组,并加入数据项,如每个串口应用的物理地址和中断号等信息,使系统启动后能找到串口。下面以第1片TL16c554A的第1个串口CSA为例阐明若何在源法度榜样中添加数据布局:

3)加入内核设备列表中

把串口设备(s3c_deviee_8250代表TL16c550A芯片)加入到内核的platform_device布局中

staTIc struct platform_device_initdata*smdk_devs[]={ &s3c_device_8250,};

3.2 增添开拓板代码使串口可用

主要改动drivers/serial/8250.c文件,使BANK5以8位的位宽造访TL16c554A芯片,并指定芯片的中断触发要领。

1)增添头文件asm/areh-s3c2410/regs-mem.h,定位TL16c554A所在的地址空间;

2)设置存储节制器的BANK5的位宽(8位)

在serial8250_init(void)初始化函数中把存储节制器的位宽寄存器设为0X22011110;

3)指定中断触发要领

由于TL160554A的中断旌旗灯号INTA、INTB、INTC、INTD为高电平有效,以是需将INTA、INTB、INTC、INTD上升沿触发,在调用中断函数req-uest_irq前应设置中断标志为IRQF_TRIGGER_RISING。

3. 3 增添内核设置设置设备摆设摆设项

在内核源代码的driver/serial/Kconfig中增添config条款CONFIG_SERIAL_EXTEND_S3C24XX,内核编译时选定该选项可以把驱动法度榜样编译进系统中。

4 、测试扩展串口

测试的事情包括编译内核、在根文件系统中增添设备文件、改动系统初始化脚本、测试扩展串口几个步骤。图6为串口测试流程图。

1)设置设置设备摆设摆设、编译内核

设置设置设备摆设摆设内核时增添设置设置设备摆设摆设选项CONFIG_SERIAL_EXTEND_S3C24XX,履行“make uImage”敕令,编译内核。

2)改动根文件系统

在Linux系统中经由过程设备文件来造访详细的物理设备,故应用mknod敕令,增添ttyS0,ttyS1,…,ttyS7设备文件,分手对应两片TL16c554A的8个串口。敕令款式如下:

# mknod/dev/ttyS0 c 4 64

3)改动设置设置设备摆设摆设文件

在/etc/inittab设置设置设备摆设摆设文件中添加ttyS0::askfirat:-/bin/sh

4)测试

把第一个串口与主机相连,设置U-Boot的启动参数为:noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttyS0,从新启动开拓板,就能在超级终端下看到linux系统启动信息了。

5 、停止语

本文供给了在原有TQ2440开拓板中扩展8个串口,采纳中断办事的规划,前进了ARM9系统运行效率。在此根基上可以进一步扩大年夜,将串口扩展到12个、16个或者更多。

责任编辑:gt

您可能还会对下面的文章感兴趣: