JPEG作为一种成熟的图像压缩标准,具有压缩效率高、恢复的图像质量好、易于实现等优点[1],已经得到了广泛的运用。随着现代嵌入式技术的快速发展,各类电子产品为了进一步降低成本,JPEG技术也越来越多地受到各种小型嵌入式产品的青睐。目前嵌入式系统方面对JPEG图像软件解码较多地应用在DSP和多核等高速处理器上[2-3]。
本文提出一种基于ARM7处理器LPC2478的软件解码JPEG方案,同时将图像显示在高分辨率10.4英寸的、具有LVDS接口的TFT_LCD液晶显示器AA104SG02上。
1 硬件设计及实现
以LPC2478为控制核心的小型嵌入式系统硬件实现框图如图1所示。
LPC2478是一款NXP公司生产的基于ARM7的微控制器[4],拥有丰富的片上资源,在嵌入式控制领域得到了广泛的运用。LPC2478的内核为32 bit的ARM7TDMIS处理器,CPU工作频率最高可达72 MHz,片上Flash为512 KB,SDRAM为96 KB,Falsh、SRAM、SDRAM可扩展(SDRAM最大可扩展到1 024 MB),带SSI、USB、UART等多种外设接口。此外,LPC2478还带有LCD控制器,支持TFT及STN显示模式。
AA104SG02为三菱公司推出的10.4型SVGA TFT_LCD显示屏[5],分辨率为800×600,亮度为400,对比度为500:1,输入电压为3.3 V,标准工作频率为40 MHz,支持多种数据格式,电气接口为LVDS信号。LVDS信号是一种能够满足大数据传送需求的差分信号技术,具有功耗低、可靠性高及高速传送等特点。
在LPC2478控制LCD显示模式下,LCD显示数据的位宽度为16 bit,采用数据格式为R:G:B=5:6:5。LCD控制器输出的信号有RGB数字信号、像素点时钟(PCLK)、行同步时钟(HSYNC)、场同步时钟(VSYNC)及其他控制信号,这些信号均以并行方式输出,因此,LPC2478的LCD控制器的输出并行信号与AA104SG02的LVDS信号不能直接连接,必须在两者之间加驱动电路,将并行信号转换为LVDS差分信号。驱动芯片DS90383是一款信号传输转换芯片,可将接收到的TTL/CMOS数据转换为LVDS数据流,支持VGA、SVGA等更高分辨率,输入时钟为20 MHz~60 MHz,3.3 V单电源供电。因此,利用DS90383可实现两者之间的信号转换。
在液晶控制器中,需要为显示数据提供相应大小的缓存。屏幕为800×600像素,每个像素占2 B,则需要960 000 B的SDRAM作为显示缓存。此外,在JPEG解码过程中,需要缓存原始JPEG图像数据、JPEG解码中间数据等,对于一幅800×600的JPEG图片来说,解码需要2 MB左右的缓存空间。而LPC2478的片上SDRAM远远不能满足空间要求,因此,本系统外扩了一个32 MB的SDRAM。与此同时,考虑到在实际应用中需要更换不同的显示图片,但又不可能把很多幅图片都存储在芯片内,为此,还外接了一个大容量SD卡。当需要显示某个图片时,LPC2478可从SD卡中读取图片,解码后显示在LCD上。
2 JPEG软件解码算法优化及实现
JPEG解码技术主要包括获取图像基本信息、建立解码码表、HufFMan解码、反量化、反Zig-Zag、IDCT及颜色空间转换。JPEG解码流程图如图2所示。