在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1605|回复: 0

PCI 设备 RTX 驱动开发方法

[复制链接]
发表于 2019-8-14 11:22:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
1. RTX 下操作外设时, 需要把设备从 Windows 移动到 RTX 下面,

具体移植方法可以参考 RTX Help 文档中间Converting a Windows Device to an RTX Device 一节或者参考附件<<串口设备移植向导.doc>>


2. PCI驱动程序的特点

在设计驱动程序之前,首先要对欲控制的硬件设备进行细致地分析,更需要详细了解硬件设备的特性。硬件设备的特性会对驱动程序设计产生重大的影响。需要了解的最主要的硬件特性包括:

(1) 设备的总线结构

设备采用什么总线结构非常关键,因为不同的总线类型(如ISA和PCI)在许多硬件工作机制上是不同的,所以驱动程序设计也不同。

(2) 寄存器

要了解设置的控制寄存器、数据寄存器和状态寄存器,以及这些寄存器工作的特性。

(3) 设备错误和状态

要了解如何判断设备的状态和错误信号,这些信号要通过驱动程序返回给用户。

(4) 中断行为

要了解设备产生中断的条件和使用中断的数量。

(5) 数据传输机制

最常见的数据传输机制是通过I/O端口(port),也就是通过CPU进行数据读写。PC的另一种重要的传输机制是DMA,但PCI规范不包括从属DMA的说明。

(6) 设备内存

许多设备自身带有内存,PCI设备大多是采用映射的方式映射到PC系统的物理内存。有的设备还要通过驱动程序设置设备的接口寄存器


3. RTX 驱动整体架构

使用 RTX Device Driver 开发向导, 选择支持

(1) Interrupt Service Routine (ISR)

(2) Support for Sharing an Interrupt

(3) Basic Port I/O Support

(4) Basic Mapped Memory Support,

即可生成 RTX PCI 设备驱动程序框架。

该程序框架分成两个函数, Driver 文件和DriverFunc 文件:

Driver 文件主要包括 main 函数,中断服务程序和中断服务线程;

DriverFunc 文件主要是对 PCI 设备的基本操作函数,包括 PCI 设备搜索, PCI 设备初始化,使能或关闭中断,处理 PCI 设备共享中断, 以及 PCI 驱动程序资源清理等函数。

4. 完整的 RTX PCI驱动

基于RTX PCI 设备驱动程序框架, 用户需要添加相应的代码, 下面基于反射内存卡的 RTX 驱动进行分析。

反射内存卡的基本特点:

(1) PCI、PCIe、PMC、VME 外形, 节点之间组成环形连接或通过光纤 Hub 组成星型连接

(2) 节点之间数据确定性的传输延迟, 延迟小于750us

PCI 反射内存卡的 RTX 驱动也分成 Driver 文件和DriverFunc 文件两个文件。Driver 文件主要包括 main 函数,中断服务程序和中断服务线程, 下面是详细的分析:

(1) Main 函数:

Main 函数并不是 RTX PCI 驱动程序的一部分, 准确的讲它是如何使用 RTX PCI驱动程序的流程。用户需要做的工作:

a. 在 RTX PCI 设备驱动程序框架生成的 main 函数需要在设备初始化 (DeviceInit()) 完成之后与使能 PCI 中断之前添加设备打开(open())函数, 该函数的功能主要是创建信号量和初始化板卡.

b. 使能 PCI 中断之后, 用户即可调用 PCI驱动程序里的读写等函数写一段简单的读写测试程序。

(2) 中断服务程序:

这个函数接收到中断后交给中断服务线程来处理, 用户一般不需要改动。

(3) 中断服务线程:

中断服务线程主要完成读取和记录 PCI 板卡的中断信息, 释放相关的信号量等工作, 一般不完成具体的中断处理工作。PCI 驱动程序一般还提供一个函数来捕捉这些释放的信号量, 完成中断具体含义的解析工作。

DriverFunc 文件主要是对 PCI 设备的基本操作函数,包括 PCI 设备搜索, PCI 设备初始化,使能或关闭中断,处理 PCI 设备共享中断, 以及 PCI 驱动程序资源清理, 数据读写,发送和接收消息类中断等函数。下面是详细的分析:

(1) DeviceSearch 函数

这个函数根据 PCI 设备的 Vendor ID 和 Device ID 搜索 PCI 设备,返回 PCI 配置信息和 slot Number. 用户修改 Vendor ID 和 Device ID 即可。

(2) DeviceInit 函数

PCI设备初始化函数. 该函数中间调用了两个RTX 系统函数RtTranslateBusAddress() 和 RtMapMemory(),RtTranslateBusAddress() 作用为把 PCI 设备地址转换为 CPU 可以直接访问的物理地址, RtMapMemory() 函数把物理地址映射到虚拟地址。映射到虚拟地址空间后 ring3用户即可以读写 PCI 内存空间或者 I/O 空间了。用户需要关注的是物理地址到虚拟地址映射的地址范围,一般设置为 4KBytes. RtMapMemory() 函数默认最大可以映射的地址范围为 64M Bytes, 如果需要更大的范围, 可以参考内存管理一节。

(3) Enable/Disable Interrupts On Chip 函数

使能或者关闭 PCI 设备上的中断。用户根据 PCI 设备进行修改。

(4) IsMyInterrupt函数

RTX 下 PCI 设备中断号可以共享。如果有 RTX 下 PCI 设备共享, 需要在该函数中间区分是否是该设备的中断.

(5) DeviceCleanup 函数

该函数释放中断句柄和解除物理地址于虚拟地址之间的映射。用户基本不需要修改该函数。

(6) RFM2gOpen 函数

反射内存功能函数。该函数的功能主要是为 DMA 通道,发送和接收Event(反射内存的一种消息类中断)等硬件功能模块创建信号量和初始化板卡。为了防止对硬件资源的访问冲突, 使用这些硬件资源前需要先拿到信号量, 使用结束后释放这些信号量。

(7) RFM2gEnableEvent函数

反射内存功能函数。使能板卡接收消息类中断。

(8) RFM2gSendEvent 函数

反射内存功能函数。向其它节点发送消息类中断。

(9) RFM2gWaitForEvent函数

反射内存

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-5 19:45 , Processed in 0.012057 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表