基于VW2010芯片的嵌入式多媒体监控系统压缩/解压卡设计
在模拟音频信号经过模拟音频接收电路进行前端处理后,便可通过音频ADC电路产生符合VW2010音频接口标准的I2S信号。
VW2010是压缩卡的核心处理芯片,该芯片除可完成音、视频信号的编码外,还可提供对解码器和ADC的控制(通过I2C总线),其编码产生的MPEG流可通过芯片内部集成的PCI接口输出。VW2010的解压操作是压缩操作的逆过程,基本原理类似,基于VW2010的解压卡原理框图如图3所示。
3 Linux下VW2010设备驱动程序设计
3.1 分层软件体系结构
按照操作系统的观点,系统软件体系结构应为表1所列的分层结构。驱动程序工作在核心态,并向下通过Chip API实现对VW2010芯片的直接控制,向上则为应用程序提供驱动程序接口(Driver API)。按照Rubini先生的观点,驱动程序提供的是机制,而不是策略。换句话说,驱动程序的主要任务是为应用提供全面、高效而可靠的服务,具体如何使用硬件则是应用需要解决的问题。
表1 分层软件体系结构示意图
考虑到Linux系统下的设备驱动程序开发技术已经相当成熟,笔者不打算详细介绍驱动程序的完整框架和各个模块,而是在分析VW2010芯片与host通信机制的基础上,着重讨论在驱动程序中如何实现对VW2010芯片的有效控制以及如何通过应用程序实现VW2010芯片间数据的有效传输。
3.2 VW2010与host的通信机制
VW2010提供了三种与host通信的机制:直接访问内部寄存器、共享存储区(shared memory)和DMA。VW2010允许host直接访问其内部寄存器和外部存储单元,寄存器方式主要用于调试目的和下载固件程序;DMA方式则负责VW2010芯片和应用缓冲区之间的数据传输(如MPEG数据流);共享存储区机制是设备驱动程序和VW2010间的主要通信方式。
(1) 共享存储区(shared memory)
VW2010采用共享存储区机制接收host的命令并返回命令执行结果。host与VW2010进行通信的共享存储区(以下简称SM_PC2VW)位于encoder SDRAM中地址3F1800处,共128字节;而VW2010与host进行通信的共享存储区(以下简称SM_ VW2PC)则位于encoder SDRAM中的地址3F1880处,也是128字节。
SM_PC2VW的格式如表2所列。表中,CMD为命令码,分别为:读数据(CMD=1)、发IOCTL码(CMD=2)、写数据(CMD=3)、打开命令(CMD=4)和关闭命令(CMD=5);IntFlag为中断标识,IntFlag为1时,VW2010执行完CMD定义的任务后将产生一个中断,为0则不产生中断;Device Handle由打开命令从firmware中获得,当CMD不同时,Parameters有不同的含义。
表2 host到VW2010的共享内存区格式