设备驱动 程序主要用于对设备数据的读写操作,以及对设备配置和读取设备信息的操作,它还可以使用和管理来自设备的中断。所有的设备驱动程序设计接口都具有普遍性质。
设备驱动程序一般可分为三个部分:D EV TAB_ENTRY,设备IO函数表DEVIO_TAB、设备IO函数。
eCos中所有设备驱动都使用设备表入口来进行描述,设备表入口是一个具有cyg_devtab_entry_t类型的数据结构,使用宏DEVTAG_ENTRY()可以生成一个设备表入口。
DEVTAB_ENTRY(l, name, dep_name, handers, init, lookup, priv)
其中:
l--------该设备表入口的“C”标识符
name------设备的“C”字符串名字
dep_name---对于一个层次设备,此参数是该设备的下层设备的“C”字符串名字
handlers-----IO函数句柄指针
init-------当eCos处于初始化状态时候被调用的函数,该函数可以进行查找设备,对硬件进行设置等操作。
lookup-----当调用cyg_io_lookup()函数能对该设备进行操作的时候所调用的一个函数。
priv-------该设备驱动程序所需要的专用数据存在位置。
对于块设备,则需要宏
BLOCK_DEVTAG_ENTRY(i, name, dep_name, handers, init, lookup, priv)
设备表入口中的句柄handlers提供了一组设备驱动程序接口函数。handles是设备IO函数表DEVIO_TAB的指针,DEVIO_TAB包含了一组函数的指针,这些函数是各种接口函数cyg_io_XXX()的具体实现。
设备IO函数通过DEVIO_TAB宏来定义
DEVIO_TABLE(l, write, read, get_config, set_config)
其中:
l------表示的“C”标识符
write----cyg_io_write() //实现向设备传送数据
read----cyg_io_read() //实现向设别读取数据
get_config---cyg_io_get_config() //实现对设备配置信息的读取操作
set_config---cyg_io_set_config() //函数完成对设别的配置操作。