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 struct
{
/* SIO_CHAN *MUST* be first */
SIO_CHAN sio; /* standard SIO_CHAN element */
UINT32 ioBase;
UINT32 vecBase;
UINT32 intLevel;
/* callbacks */
STATUS (*getTxChar) (void *, char *);
void (*putRcvChar) (void *, char);
void (*errorRtn) (void *, int, void *, int);
void * getTxArg;
void * putRcvArg;
2
void * errorArg;
/* misc */
int intConnect; /* intConnect done flag */
int baudFreq; /* current baud rate */
int mode; /* current mode (interrupt or poll) */
int clkFreq; /* input clock frequency */
uint_t options; /* Hardware options */
int scanMode; /* keyboard mapping mode */
} TEMPLATE_CHAN;
在XX_DRV 结构中每一个通道有一个XX_CHAN 结构。
在上面的例子中,TEMPLATE_CHAN 中的SIO_CHAN 必须被第一个定义!
SIO_CHAN 指向SIO_DRV_FUNCS, SIO_DRV_FUNCS 结构提供驱动的入口函数。
SIO_DRV_FUNCS 定义在wind/target/h/sioLib.h 中。如下:
struct sio_drv_funcs /* driver&nbs
在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 struct
{
/* SIO_CHAN *MUST* be first */
SIO_CHAN sio; /* standard SIO_CHAN element */
UINT32 ioBase;
UINT32 vecBase;
UINT32 intLevel;
/* callbacks */
STATUS (*getTxChar) (void *, char *);
void (*putRcvChar) (void *, char);
void (*errorRtn) (void *, int, void *, int);
void * getTxArg;
void * putRcvArg;
2
void * errorArg;
/* misc */
int intConnect; /* intConnect done flag */
int baudFreq; /* current baud rate */
int mode; /* current mode (interrupt or poll) */
int clkFreq; /* input clock frequency */
uint_t options; /* Hardware options */
int scanMode; /* keyboard mapping mode */
} TEMPLATE_CHAN;
在XX_DRV 结构中每一个通道有一个XX_CHAN 结构。
在上面的例子中,TEMPLATE_CHAN 中的SIO_CHAN 必须被第一个定义!
SIO_CHAN 指向SIO_DRV_FUNCS, SIO_DRV_FUNCS 结构提供驱动的入口函数。
SIO_DRV_FUNCS 定义在wind/target/h/sioLib.h 中。如下:
struct sio_drv_funcs /* driver&nbs