| | 网站首页 | 新闻 | SOPC | FPGA | DSP | ARM | 嵌入式操作系统 | 下载 | 所有产品 | 留言 | 论坛 | 购买指南 | 网络协议 | 驱动设计 | | |
![]() |
![]() |
| 您现在的位置: 21嵌入式控制研究室 >> 嵌入式操作系统 >> Vxworks >> 文章正文 |
|
|||||
| Vxworks bsp的制作 | |||||
| 作者:佚名 文章来源:21control 点击数: 更新时间:2006-1-10 | |||||
|
-从该设备的概要开始.指出该驱动实现整个设备的部分还是全部细节. -描述所有该设备的操作模式,指出该驱动所实现的是哪种. -写出该设备在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"目标的网络接口. vxworks下bsp制作教程 1 vxworks概述 vxworks是WIND RIVER公司的产品。作为一种商用的嵌入式操作系统?vxworks拥有 强大的功能和友好的用户界面。与免费的嵌入式操作系统相比?商用操作系统 经过严格的测试?具有良好的实时性?易用性和大量的文档支持?但是它的源码是 不公开的并且价格昂贵;免费的嵌入式操作系统有很多?大都是linux的移植?公开 源代码?但缺乏文档?要对照源码进行开发。 2 BSP的流程 BSP流程分成两部分。首先是位于BootRom中的Boot代码?它的作用是实现配置硬件和 启动vxworks下载程序。接下来是下载后跳转到vxworks的入口地址运行操作系统和 应用程序。 流程入图: ROM中的启动代码部分: RomInit在文件在文件romInit.s中。它是运行的开始?实现这一部分是首先的。 它实现判断启动类型?配置内核和非内核寄存器以及内存和外围设备的读写时序 ?因此可以在此处加入内存检测功能。在BSP中无法进行调试?只能通过闪灯实现 云信正确与否的判断。闪灯功能函数也要在此加入。 判断启动类型和配置寄存器?这一部分不需要改动。 配置内存和外围设备读写时序?要进行改动。这一部分的SDRAM?ROM?FLASH?FPGA 有相应的模板可以参考。它的实现是通过使用宏定义来实现的。但是要改动的 话也不难?一般是改动空间大小的屏蔽位?读写位数?以及片选寄存器OR和BR。 至于特殊外设的读写有待讨论。 内存检测在这里实现较复杂?它根据相应的内存检测算法实现。主要是对地址线 和数据线的检测。通过写入数据再会读出数据来判断。使用"走步1"和"走步0" 算法。这一部分较多的依赖硬件?可移植性较差?根据自己的单板改动。 闪灯在这一部分是强烈推荐的。因为闪灯才能定位程序的运行位置。闪灯函数 可移植?一般要改动?因为灯可能接在不同的I/O口上。另外注意860SAR的PORT B 是32位的。具体的端口见相应的CPU的I/O口的参数?配置相应的寄存器。 RomInit在函数结尾跳入RomStart。 RomStart在BootInt.c文件中。它是系统运行的第一个C函数。这一部分是 Wind River公司提供的标准程序?一般不需改动。该函数是C的入口函数, 由汇编程序调用,主要完成清内存,将ROM中的程序拷贝到RAM,解压并跳 至解压后的程序处运行。 UsrInit在BootConfig.c文件中。它主要是实现硬件的初始化。其中涉及 到串口?网口的初始化?CONSOLE的配置等。 其中串口和网口的配置是BSP的重要部分?但860CPU对串口和王口有很好的 支持?只要做很小的改动即可?串口很简单?网口较复杂一些。 UsrRoot在BootConfig.c文件中。它主要是实现vxworks文件的下载?并且 跳转到vxworks的入口地址。从而进入到操作系统中去。 VXWORKS文件中的代码部分: SysInit在sysAlib.s中。它是vxworks的启动代码。它与RomInit的作用 相同?对于这个文件?我们一般不需要去改动它。 UsrInit在Usrconfig.c中。它的作用与Boot中的UsrInit的作用相同? 他们都调用SysLib.c中的子函数。实现相同的硬件初始化功能。 UsrRoot在UsrConfig.c中。它的作用与Boot中的UsrRoot的作用类似 。但是这里的UsrRoot是最终进入到应用程序中去。 |
|||||
| 文章录入:fengfeiyi 责任编辑:fengfeiyi | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 | | |
![]() |
站长:康草科技 |