串口驱动概述

本文档详细介绍了VxWorks系统下串口驱动的初始化过程,包括启动顺序、编码步骤和详细步骤。从usrInit()开始,经过sysHwInit()和sysSerialHwInit()对串行通道的初始化,再到usrRoot()任务中调用ttyDrv()进行串行设备驱动的初始化。文中还解释了驱动的回调函数、中断服务程序和ioctl函数的实现,以及如何在sysSerial.c中修改相关函数以适配不同硬件。
摘要由CSDN通过智能技术生成
1. 启动顺序
在usrConfig.c 中,usrInit()调用sysHwInit(), 对系统硬件进行基本的初始化,使其处于
安静状态。sysHwInit()[在sysLib.c 中]调用sysSerial.c 中的sysSerialHwInit()对BSP 串行器件
进行初始化,使其处于静态;sysSerialHwInit()再通过xxDevInit()复位串行通道。
在usrInit()函数的最后,产生根任务usrRoot()。usrRoot()调用sysClkConnect()。sysHwInit2()
主要安装系统中断, 它调用sysSerialHwInit2() 连接串行中断。如果定义了
INCLUDE_TTY_DEV,而没有定义INCLUDE_TYCODRV_5_2,在usrRoot()任务中调用
ttyDrv()来初始化串行设备驱动,并通过ttyDevCreate()函数创建串行设备。
串行驱动是在VxWorks系统开始过程中被初始化的。
2. 编码步骤
(1)初始化
①定义系统可支持的串行通道数。
②初始化驱动的设备描述
③写设备初始化代码
(2)写入口程序
(3)写中断服务程序管理中断
(4)使用模板wind/target/src/drv/ssio/templateSio.c
3.详细步骤介绍
(1)定义系统可支持的串行通道数。
在config.h 中定义串口通道数NUM_TTY。
(2)初始化驱动的设备描述
TEMPLATE_CHAN 例子如下所示:
typedef&nbspstruct
{
/*&nbspSIO_CHAN *MUST*&nbspbe&nbspfirst */
SIO_CHAN&nbspsio; /*&nbspstandard&nbspSIO_CHAN&nbspelement */
UINT32&nbspioBase;
UINT32&nbspvecBase;
UINT32&nbspintLevel;
/*&nbspcallbacks */
STATUS (*getTxChar) (void *,&nbspchar *);
void (*putRcvChar) (void *,&nbspchar);
void (*errorRtn) (void *,&nbspint,&nbspvoid *,&nbspint);
void *&nbspgetTxArg;
void *&nbspputRcvArg;
2
void *&nbsperrorArg;
/*&nbspmisc */
int&nbspintConnect; /*&nbspintConnect&nbspdone&nbspflag */
int&nbspbaudFreq; /*&nbspcurrent&nbspbaud&nbsprate */
int&nbspmode; /*&nbspcurrent&nbspmode (interrupt&nbspor&nbsppoll) */
int&nbspclkFreq; /*&nbspinput&nbspclock&nbspfrequency */
uint_t&nbspoptions; /*&nbspHardware&nbspoptions */
int&nbspscanMode; /*&nbspkeyboard&nbspmapping&nbspmode */
}&nbspTEMPLATE_CHAN;
在XX_DRV 结构中每一个通道有一个XX_CHAN 结构。
在上面的例子中,TEMPLATE_CHAN 中的SIO_CHAN 必须被第一个定义!
SIO_CHAN 指向SIO_DRV_FUNCS,&nbspSIO_DRV_FUNCS 结构提供驱动的入口函数。
SIO_DRV_FUNCS 定义在wind/target/h/sioLib.h 中。如下:
struct&nbspsio_drv_funcs /*&nbspdriver&nbs
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值