共1条
1/1 1 跳转至页
Vxworks下驱动程序编写(老站转)
发信人: Zinux (Linux技工), 信区: Embeded_system
标 题: Vxworks下驱动程序编写
发信站: 哈工大紫丁香 (2001年05月18日17:02:39 星期五), 站内信件
要作的工作:
-用开始写的驱动程序的文档替代此文档.
-从该设备的概要开始.指出该驱动实现整个设备的部分还是全部细节.
-描述所有该设备的操作模式,指出该驱动所实现的是哪种.
-写出该设备在BSP中创建和初始化的步骤.写出可把该驱动定制为特殊硬件环境的
所有宏(macros).
-写出所有可帮助用户理解该设备如何工作和设备的接口.
模板概要:
这是一个串口驱动模板.可用来作为写Vxworks5.3或更新版本的新驱动的起点.
这些驱动支持旧串口驱动没有的新功能,首先,它们提供一个设置硬件选项的接口;
例如,停止位数,数据位,奇偶,等等.
其次,它们提供可用来提供串口线上的外部模式调试(如,ROM监视器调试)的轮巡通
讯(polled communication)接口.通常只支持异步模式驱动.
贯穿整个文件,单词"template"用来替换一个真实的设备名,按惯例采用厂商名的第
一个字母加产品编号.例如,Zilog 8530 串口设备应有一个名为Z8530——DUSAART
数据结构,好过TEMPLATE_DUSART.
数据结构
设备数据结构在文件 h/drv/sio/templateSio.h里定义。一个数据结构——
TEMPLATE_CHAN被定义,为每个通道。具有多串口通道的设备也为整个芯片定义了
一个数据结构.例如,此驱动有一个芯片级的,有两个通道结构作为成员数据结构
叫TEMPLATE_DUSART。
回调
传输准备就绪(transmitter ready)中断调用服务采用回调至高层库以获得一个字
符来传送。
默认地,此驱动安装不做任何事情的傀儡回调程序。使用此驱动的高层库(例如,
ttyDrv)将用SIO_INSTALL_CALLBACK控制命令(ioctl command)安装自己的回调程序
.
同样,一个接受中断处理采用回调来将字符传给高层库。
模式
理想模式下该驱动应支持轮巡和中断模式,并可动态切换模式。但这并非必须。
Vxworks可支持此设备上的tty设备,即使该驱动只支持中断模式.
增加动态模式切换允许当信息送至时将外部代理激活(例如,在第一桢时中断).
对允许动态模式切换的驱动,注意驱动将在其输入ISR中间被要求切换模式.一个驱
动的输入ISR看起来应如此:
inChar = *pDev->dr;/@ 从数据寄存器里读一个字符 @/
*pDev->cr = GOT_IT;/@ 承认中断@/
pDev->putRcvChar (...);/@ 发送字符到高层 @/
/@ give the character to the higher layer @/
如果该通道用作外部模式调试的通讯路径,且接收的该字符是"帧结束"字符,则代
理的回调会锁定中断,切换设备到轮巡模式,并使用轮巡模式下的设备片刻.此后代
理会解锁中断,切换模式到中断模式,并返回ISR.
特别地,回调能使两模式切换,首先到轮巡模式然后到中断模式,后返回.
这要求小心处理中断处理内的回调。例如,在调用回调前你必须先承认中断。
用法:
该驱动通常为BSP调用.该模块里直接调用程序是 templateDevInit(),
templateDevInit2(),templateIntRcv(), templateIntTx(), and
templateIntErr().
BSP调用templateDevInit()来初始化或重启芯片.它用intConnect()连接中断处理
(templateIntRcv, templateIntTx,和 templateIntErr).
连接中断处理后,BSP调用templateDevInit2()来告诉驱动中断模式操作已可行.
BSP:
按常规所有BSP特定的串口初始化在sysSerial.c(被sysLib.c包含)里进行,
sysSerial.c实现至少4个函数:sysSerialHwInit(),sysSerialHwInit2(),
sysSerialChanGet(),和sysSerialReset(),如下工作:
sysSerialHwInit被sysHwInit调用来初始化串口设备.此程序将在调用能复位设备
及安装驱动函数指针的templateDevinit前初始化TEMPLATE_DUSART结构的所有板特
定的区域(如,寄存器的I/O地址,等等).sysSerialHwInit还将执行其他所有串口驱
动所需要的过程,比如适当配置板上的中断控制器.
sysSerialHwInit2被sysHwInit2调用来用intConnect连接驱动的中断处理.连接好
中断处理后,templateDevInit2的调用允许中断模式操作开始.
sysSerialChanGet被usrRoot调用来取得与串口通道号相关的串口通道描述.该程序
使用一个0-NUM_TTY之间的一个数为单一的参数.它返回一个指向相应通道描述——
SIO_CHAN * 的指针,它正好是TEMPLATE_CHAN结构的地址.
sysSerialReset被sysToMonitor()调用且会复位串口设备到一个不活动的状态.
该驱动可通过重定义TEMPLATE_REG_READ和TEMPLATE_REG_WRITE宏来定制.这两个宏
用来访问实际的芯片.如不定义,源代码会假定用对所有寄存器的read/write访问
来对设备进行简单内存映射.
测试:
中断驱动接口可用通常方法来测试.当它(测试信息,译者如是猜测)来到时Vxworks
打印到串口控制台,于是看到加电后VxWorks输出表示该驱动基本开始工作.
VxWorks的Portkit测试也可用来进行更严格的测试.
轮巡接口容易被检验——你可调用通道的SIO_MODE_SET ioctllai使它进入轮巡模
式.注意通常的打印工具不能在轮巡模式下与串口通道一起工作.一些代理必须执行
轮巡循环来处理基于字符的字符输入/输出.这不是自动进行.当切换WDB串口线到轮
巡模式时,WDB代理执行它自己的轮巡循环.
动态模式切换可用tornado工具来检查.重新配置代理使用WDB_COMM_UDLP_SLIP通讯
路径(详见VxWorks run_time Guide的配置章节).
如下开始wtxtcl
%wtxtcl
从tcl提示符,连接到target server:
wtxtcl.ex> wtxToolAttach
通知代理来转换外部模式检查回应是OK(0).
wtxtcl.ex>wtxAgentModeSet 2
0
要求代理挂起系统(请求会以中断模式传到,但回应会以轮巡模式被传送):
wtxtcl.ex>wtxContextSuspend 0 0
0
在此时目标将被挂起.控制台将显示冻结(如果板卡有一个控制台设备),你不能
"ping"目标的网络接口.
恢复目标:
wtxtcl.ex>wtxContextResume 0 0
0
现在目标将重新运行,于是你能敲信息到控制台(如果板卡有一个控制台设备)并可
从主机"ping"目标的网络接口.
如有任何问题或要交流,请与我联系,谢谢.
dreameasy@sina.com
※ 作 者: 自由妹妹 01-5-16 下午 10:14:55
--
puke!
技工而已
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.239.152]
关键词: Vxworks 驱动程序 编写 老站转 设备 驱动
共1条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |