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

发布时间:2023-01-31  

随着计算机网络的发展,以及现场总线等技术的广泛使用,串口通讯在各种场合的应用越来越广泛。在集中控制系统中,需要在多个串口间进行通信,而在一般计算机上,只有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:串行发送数据。

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

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所示。

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

1.2.2 GPIO接口

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

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

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所示。

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

3、 驱动程序移植

软件设计主要是为设备编写驱动程序。设备驱动是介于硬件和操作系统之间的软件接口,主要功能包括:探测和初始化设备;从设备接收数据并提交给内核;从内核接收数据送到设备;检测和处理设备错误。


串口驱动程序从上到下分为4层:终端设备层、行规程、串口抽象层、串口芯片层。其中,串口芯片层与具体的芯片相关,主要是向串口抽象层提供串口芯片所用的资源,还进行一些与芯片相关的设置。


TL16C554A扩展串口芯片属于标准串口,内核的串口驱动程序对它支持它的驱动程序就是Linux内核代码中的driver/seria/8250.c.入口函数是serial8250_init,它用于向串口抽象层提供注册串口的物理信息。串口的物理信息主要有两类:访问地址和中断号。所以只要设置好这两类物理信息,就可以驱动扩展串口了,图5为驱动程序移植流程。

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

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为例说明如何在源程序中添加数据结构:

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

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为串口测试流程图。

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

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个或者更多。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    供了ISA总线接口和PCI总线接口,并具有看门狗,可以有效的解决死机问题。背面的4×100PIN总线定义了各种标准接口信号,使用时只需在母板设计对应的插座即可,开发起来非常方便 (2)串口扩展模块......
    系统结构框图 其中,电源转换器将PC端口的12V电压转换成3.6V和5V稳压,使系统中的芯片处于正常工作状态。RS-232总线接口电路包括电平转换和串口扩展电路。8051单片机实现存储器扩展之后,通过......
    的RS232串口扩展、带自动硬件速率控制的PCIE 高速串口串口组网、RS485通讯、IrDA通讯、并口/打印口扩展等。 下图为其一般应用框图; 特点; 概述 同一芯片可配置为PCIE 总线的四通道串口......
    采用S3C24449芯片在TQ2440开发板实现串口扩展;随着计算机网络的发展,以及现场总线等技术的广泛使用,串口通讯在各种场合的应用越来越广泛。在集中控制系统中,需要在多个串口间进行通信,而在......
    是XC系列的15倍),具有更大的内部资源空间。本体带有串口、一个 USB下载口,所有机型都支持扩展模块(16个)、BD板(1~2块)和左扩展模块(1块)的连接。 XDM(运动控制型)(控制点数:24/32......
    AdvancedInit; 串口扩展功能初始化参数。当前未用到扩展功能。 使用 Handle 的好处是,我们操作某个模块时,把这个模块对应的 Handle 的首地址传给驱动函数就行了。此函......
    机将采集到的传感器数据发布到MQTT Server端,APP端可以通过订阅来实时更新传感器数据。 硬件组成 系统硬件主要由九部分组成,分别是单片机、网络传输模块、立体声编解码模块、IO扩展模块、温湿度传感器、光照......
    EtherCAT总线接口 1个 EtherCAT总线接口,接EtherCAT总线驱动器和EtherCAT总线扩展模块 ETHERNET 网口 1个 采用MODBUS_TCP协议,通过交换机扩展......
    西门子1200与300的九大区别;一、硬件的区别 在硬件扩展方面,S7-300的主机架多支持八个扩展模块,而S7-1200支持扩展多八个信号模块和多三个通信模块。以S7-300 CPU313C和S7......
    西门子1200 PLC扩展模块安装和软件组态; 常用的梯形图编程指令基本上我们都已经学习好了,今天我们一起来学习扩展模块安装和软件组态,今天主要是以软件组态为主,下次我会用一个扩展模块......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>