VxWorks上PCI设备的串口驱动开发:直接PCI地址与tty设备两种实现方式
一、概述
在VxWorks系统中,PCI设备的串口驱动开发通常有两种主流方式:直接PCI地址操作(适用于无标准驱动的自定义硬件)和基于tty设备框架(利用系统原生tty驱动接口)。本文结合实际项目代码,详细介绍两种开发流程的核心原理、实现步骤及应用场景,并对比其优缺点。
二、PCI设备与串口驱动基础
1. PCI设备地址映射
PCI设备通过总线与CPU通信,其寄存器空间需映射到CPU可访问的地址空间(如I/O空间或内存空间)。在VxWorks中,可通过pciConfigIn()/pciConfigOut()枚举设备获取基地址,或直接使用硬件手册定义的固定基地址(如代码中PCI_IO_BASE = 0xbfd00000)。
2. 串口控制器核心寄存器
无论哪种开发方式,均需操作UART控制器的核心寄存器(以NS16550兼容控制器为例):
LCR(线路控制寄存器):配置数据位、校验位、停止位,及除数锁存访问位(DLAB);
FCR(FIFO控制寄存器):控制接收/发送FIFO复位与使能;
IER(中断使能寄存器):使能接收/发送中断;
LSR(线路状态寄存器):查询发送缓冲区空、接收数据就绪等状态。
三、直接PCI地址开发流程
直接PCI地址开发适用于无标准tty驱动支持的自定义PCI串口设备,需手动映射PCI地