基于VW2010芯片的嵌入式多媒体监控系统压缩/解压卡设计
host通常通过向VW2010发中断的方式通知VW2010从共享存储区读取主机命令。VW2010用寄存器REG_DHIU5实现host到VW2010的中断。
REG_DHIU5的最低四位用于保存中断计数,第五位为中断屏蔽位。host向REG_DHIU5每写一次,中断计数加1;VW2010每读REG_DHIU5一次,中断计数减1。只要中断计数不为0,VW2010内部的中断请求信号将一直保持有效。
3.3 VW2010的数据读写和IOCTL方法的实现javascript:window.open(this.src);" style="cursor:pointer;"/>
VW2010的数据读写和IOCTL的实现依赖于上述的共享存储区机制,下面通过假设已经用打开命令(CMD=4)从firmware获取了Device Handle和辅助参数区(首地址为X)来进行讨论。
(1) 数据读写的实现
图4和图5分别给出了VW2010在系统调用部分和中断服务部分的读数据流程图。
VW2010采用DMA方式实现与应用空间的数据交换。读/写命令用于建立从VW2010到host的DMA通道并启动数据传输,它并不等待数据传输完成,而是让DMA传输在后台运行,当DMA传输结束后,VW2010将中断主机。
当应用程序要读写数据时,它首先会分配一些缓冲区用于保存读写数据。这些缓冲区可以用首地址和长度标识,如可以使用(Address,Len)代表首地址为Address、长度为Len的缓冲区。在发送读/写数据命令时,SM_PC2VW的Parameters字段为X,辅助参数区的内容为应用空间数据缓冲区的信息,其格式即为上述的首地址和缓冲长度标识对(Address,Len)。VW2010根据这些缓冲区信息来建立应用空间的DMA通道。
(2)IOCTL的实现
使用时,可定义多种IOCTL码以用于控制VW2010芯片,各IOCTL码的参数各不相同。需要注意的是,此处的IOCTL码不同于Driver API中的IOCTL码。该命令与读写数据命令的主要区别在于其命令辅助参数存储区的格式不同,而控制流程类似,限于篇幅,这里不再赘述。
4 结论
为了测试压缩/解压卡和设备驱动程序的性能,作者在Linux Redhat 7.3下编写了测试程序。在测试中,分别让VW2010芯片工作在手动录像模式、定时录像模式和动态侦测录像模式。结果表明:该系统卡在各种模式下都能稳定工作。