历史上的今天
返回首页

历史上的今天

今天是:2026年01月31日(星期六)

2023年01月31日 | 采用S3C24449芯片在TQ2440开发板实现串口扩展

2023-01-31 来源:elecfans

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


推荐阅读

史海拾趣

CLAIREX公司的发展小趣事

随着市场的不断发展,Clairex意识到,要想在激烈的竞争中脱颖而出,必须不断创新。于是,公司加大了对研发的投入,积极探索新技术、新材料和新工艺。经过数年的努力,Clairex成功开发出了一系列具有自主知识产权的光电子组件。这些组件不仅性能优异,而且成本更低、更易于集成。它们的推出,不仅进一步巩固了Clairex在市场上的地位,也为公司带来了可观的利润。

AZM [Arizona Microtek, Inc]公司的发展小趣事

为了进一步提升公司的国际竞争力,AZM公司开始实施国际化战略。公司积极寻求与国际知名企业的合作机会,通过技术合作、市场合作等方式,共同开拓全球市场。同时,AZM公司还在海外设立了研发中心和生产基地,以便更好地了解当地市场需求和技术发展趋势,实现全球布局和资源整合。

请注意,这些故事是基于假设和推测构建的,并非AZM公司的真实发展历程。如果需要了解AZM公司的具体发展历程和故事,建议查阅该公司的官方网站、新闻报道或相关文献资料。

Gumstix公司的发展小趣事
检查电路中是否有异物导致短路,清理异物并修复受损部分。
Condor公司的发展小趣事
检查压敏元件是否老化或受到污染,必要时更换新的压敏元件。同时,也可以考虑调整电路参数以提高灵敏度。
Dynastream公司的发展小趣事

展望未来,Dynastream将继续秉承“持续创新、追求卓越”的发展理念,致力于成为电子行业的领军企业。公司将继续加大研发投入,提高产品的技术含量和附加值;同时,也将注重人才培养和团队建设,为公司未来的发展提供有力保障。相信在不久的将来,Dynastream将在电子行业中创造更加辉煌的业绩。

请注意,以上故事均为基于Dynastream公司发展历程的假设性叙述,旨在展示其发展历程中的一些重要节点和成就。

ETRI公司的发展小趣事

随着人工智能的兴起,ETRI也将目光转向了这一领域。他们与首尔市政府合作,在首尔市The Seocho District区内安装了3000台AI摄像头,这些摄像头通过深度学习技术,能够预测犯罪发生的概率,并在必要时提醒警署采取行动。此外,他们还计划分析大量的法庭判决文件和犯罪录像,以优化AI软件的预测能力。

问答坊 | AI 解惑

CC1100+PA+LNA让你惊喜的无线模块

CC1100+PA+LA是在CC1100的模块上加了功率放大器以及高频信号放大器 , CC1100 +PA+LNA模块是集FSK/ASK/OOK/MSK调制方式于一体的无线收发模块,CC1100+PA+LNA 射频收发模块是用于低功耗无线应用的业界系统成本较低的多通道无线电产品;它提供扩展硬件支 ...…

查看全部问答>

LPCXpresso 用户手册V1.0(中文翻译) 4.29更新完毕

这是我试着翻译的LPCXpresso  用户手册V1.0。   由于英语水平有限,再加上文采也不好。翻译出来自己也不是很满意,请大家一起看看。大家合力把这个手册好好翻译一下。       LPCXpresso  用户手册V1.0   ...…

查看全部问答>

上海有哪些比较好的做嵌入式软件开发的公司

上海有哪些比较好的做嵌入式软件开发的公司啊,本人是软件工程专业的…

查看全部问答>

LED循环为什么不亮?

#include<reg52.h>#include<intrins.h>//循环左移头文件#define uint unsigned int#define uchar unsigned charuchar temp;void delay(uint); void main(){  temp=0xfe;  P1=temp; while(1) {   ...…

查看全部问答>

警告意义?

Warning (10272): Verilog HDL Case Statement warning at aj.v(48): case item expression covers a value already covered by a previous case item…

查看全部问答>

LM3S UDP 无系统可算攒出来了

可以对接收到的命令进行判断,再发送数据或者控制IO,用起来感觉像以前编串口。如果有人想要我就整理下给大家。我这里是发送命令0X00,判断命令输出自己的数据,只是最简单的,无操作系统,在周公基础上攒的。 (还有我也像申请个开发板,基于这个 ...…

查看全部问答>

有米有人再TI的estore上买过TI原厂的EVM???

打算买6472的EVM回来做实验,不过不知道如何操作 希望有经验的不吝赐教 那些个什么TI的代理商,真TM不给力,打了几遍电话,都给忽视了,以后再也不TM找他们了…

查看全部问答>

1个很奇怪的问题

我用的是2.0的库,配置USART的明明是9600波特率,外部 晶振为4MHz,可通讯时要用4800波特率才行,在仿真内看 波特率也为4800,这是为什么?…

查看全部问答>

RLINK与STM8S烧录问题

我使用RLINK烧录STM8S207MB: 第一次烧录(STVP)时,程序运行正常; 然后修改一个程序参数(绝对不会影响烧录), 再次烧录: 在烧程序代码部分(PROGRAM MEMORY)时正常, 而在烧录选项字节时,出现" ERROR ON OPTION BYTES(COMPLEMENTARY BYTES, R ...…

查看全部问答>

uc/fs 无法删除目录问题求解?

最近在做一个项目,采用UCOS II +UCFS +UCGUI的基本架构,在ARM平台上运行,以一片K9F1G08为存储器,一片K4S561632为内存。遇到一个问题:创建目录、文件,删除文件以及格式化行为都是正常的,但不能删除目录。分析来看,创建目录和删除目录在前期 ...…

查看全部问答>