首页 » 技术文章 » 基于S3C2440和嵌入式Linux的扩展串口设计

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

作者:  时间:2011-08-19 17:40  来源:EDN

  3 驱动程序移植

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

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

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

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

  串口的物理信息存储在内核源程序archarmplats3c24xxcommon-smdkc中,所以主要工作是在commonsmdkc源文件中增加三段代码:

  1)增加头文件

  源程序中要包含头文件linuxserial_8250h,用于告诉编译器使用8250c作为扩展串口的源程序;

  2)增加串口的物理信息

  在common-smdkc文件中增加8个元素的structplat_serial8250_port结构数组,并加入数据项,如每个串口使用的物理地址和中断号等信息,使系统启动后能找到串口。下面以第1TL16c554A的第1个串口CSA为例说明如何在源程序中添加数据结构:

                                                      }

  3)加入内核设备列表中

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

  static struct platform_device_initdata*smdk_devs[]={ &s3c_device_8250}

  32 增加开发板代码使串口可用

  主要修改driversserial8250c文件,使BANK58位的位宽访问TL16c554A芯片,并指定芯片的中断触发方式。

  1)增加头文件asmareh-s3c2410regs-memh,定位TL16c554A所在的地址空间;

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

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

  3)指定中断触发方式

  因为TL160554A的中断信号INTAINTBINTCINTD为高电平有效,所以需将INTAINTBINTCINTD上升沿触发,在调用中断函数req-uest_irq前应设置中断标志为IRQF_TRIGGER_RISING

  3. 3 增加内核配置项

  在内核源代码的driverserialKconfig中增加config条目CONFIG_SERIAL_EXTEND_S3C24XX,内核编译时选定该选项可以把驱动程序编译进系统中。

  4 测试扩展串口

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

  1)配置、编译内核

  配置内核时增加配置选项CONFIG_SERIAL_EXTEND_S3C24XX,执行“make uImage”命令,编译内核。

  2)修改根文件系统

  在Linux系统中通过设备文件来访问具体的物理设备,故使用mknod命令,增加ttyS0ttyS1ttyS7设备文件,分别对应两片TL16c554A8个串口。命令格式如下:

  # mknoddevttyS0 c 4 64

  3)修改配置文件

  在/etcinittab配置文件中添加ttyS0::askfirat-binsh

  4)测试

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

  5 结束语

  本文提供了在原有TQ2440开发板中扩展8个串口,采用中断服务的方案,提高了ARM9系统运行效率。在此基础上可以进一步扩大,将串口扩展到12个、16个或者更多。

相关推荐

Ctrack选用u-blox GPS和蜂巢式模组开发车队管理解决方案

u-blox  嵌入式  Ctrack  2014-05-21

动作撷取追踪的嵌入式体感控制新技术

嵌入式  体感控制  2013-12-06

嵌入式系统的固件更新

嵌入式  Flash  RAM  缓冲区  2013-09-12

汽车电子向一体化集成、网络化与智能化发展

汽车电子  嵌入式  2013-05-23

东芝开发嵌入式SRAM低功耗技术智能手机

东芝  嵌入式  SRAM  2013-02-23

飞思卡尔基于ARM平台全系列MCU引领嵌入式应用新趋势

飞思卡尔  ARM  嵌入式  2013-01-29
在线研讨会
焦点