初始化 使能PCLK对应的定时器捕获脚中断 使能VSYNC对应的外部中断0 PCLK正跳沿? N VSYNC负跳沿? Y 使能HREF对应的外部中断1 Y 是否采完一行? Y N HREF高电平? Y 一帧图像采集完 是否采完一帧? N Y 采集一个像素点 N N 图3- 7 一帧图像采集流程图
图3- 8 AL422写数据时序图
以写入AL422数据为例,如图3-8为ALL422写数据时的时序图,不难看出当/WE正跳沿表征了写入数据的开始,而后每遇到一个WCK正跳沿便出发DI0~7写入AL422一字节数,二者的逻辑关系与HREF和PCLK几乎相同。如此便利用了AL422高频率响应的写入时序信号WE和WCK完成了对HREF和PCLK的捕获。整个写FIFO的软件流程设计如图3-8。
开始 使能VSYNC对应的外部中断0 N PCLK有效? N VSYNC有效? Y N Y WCK有效 HREF有效? Y WEE置位,使能FIFO的写使能WE 写入8位数据
图3- 9 写入AL422 8位数据
将FIFO数据读入LPC2478则较为容易,直接把AL422与读出操作有关的两个时序信号RRST和RCK与GPIO相连,用软件模拟高低电平的方式即可获得缓冲后的图像数据。 3.4 处理显示模块的软件设计 3.4.1 片外SDRAM存储驱动设计
下图为SDRAM芯片HY57V561620的芯片引脚图:
表3- 1 HY57V561620芯片管脚
符号 CLK CKE #CS BA0,BA1 A0~A12 LDQM,UDQM DQ0~DQ15 VDD WDDQ NC I/O类型 描述 I I I I I I/O I/O 电源 电源 - 系统时钟,其他所有输入均以此上升沿为准 高代表时钟输出使能;低代表进入闲置模式 片选信号,低有效 Bank地址总线 行地址线:A0~A12;列地址线:A0~A8 行/列地址选通脉冲和写控制选通脉冲 数据掩码:用于控制输出缓冲和屏蔽输入 16位数据总线 内核电源 外核电源 - #RAS,#CAS,#WE I 由于LPC2400开发板拥有SDRAM控制器,因此硬件电路连接正确后,
只需要初始化外部总线和配置好SDRAM控制器各项参数,进行初始化后就可以把SDRAM当做SRAM来适用了操作方法如图3-10:
SDRAM操作方法 配置外部总线 根据SDRAM芯片数据手册配置参数 SDRAM初始化 当做SRAM使用
图3- 10 SDRAM操作方法
1. 配置LPC2400的外部总线
由于系统上电后,LPC2400的管脚会恢复默认设置,因此要使用它来控制SDRAM芯片,必须对其管脚进行相应配置,以下是相应程序代码:
PINSEL6 = 0x55555555; //D0~D15 PINSEL8 = 0x15555555; //A0~A14 PINSEL9 |= 0x00040000; //nWE
PINSEL5 = 0x05010115; //配置nCAS,nRAS,nDYS,nCKEOUT0 EMCControl |= 0x10; //禁止镜像 2. 配置SDRAM控制器各种时序参数
查看HY57V561620的数据手册,可以清楚看到其各项的动态演示参数要求,在此不再赘述。 3. 初始化SDRAM
初始化过程主要分为以下几个步骤:
? 时钟稳定后,SDRAM要求至少等待100us,期间可以发出NOP
命令
? 执行一条对所有Bank进预充电的命令 ? 至少等待tRP个时钟周期
? 执行8次自动刷新命令,刷新周期为tRFC ? 设置模式寄存器MR(Mode Register)
? 设置完MR后,等待tMRD个时钟周期后,SDRAM正常工作
代码程序部分如下:
/*使能时钟,CLKOUT运行输出控制时钟,发送NOP命令*/ EMCDynamicControl = 0x0000083; DelayNS(2);
/*发送全部预充电命令,自刷新模式*/ EMCDynamicControl = 0x00000103; DelayNS(2);
/*自动刷新周期值设为2*16=32个CCLK*/ EMCDynamicRefresh = 0x00000002;
for(i = 0;i < 0x80;i ++); //等待128AHB时钟周期,相当于8次刷新 3.4.2 Bayer图像数据的差值算法 1. Bayer格式简介
彩色显示器利用混色效应使红、绿、蓝三原色产生万紫千红的颜色,更使得RGB色彩空间在计算机数字领域一直占有举足轻重的地位。然而在处理现实世界的图像时,RGB并非很有效,因为它对所有色彩都用等长像素点的R、G、B3色加以合成,这就导致了每个像素在R、G、B3个分量上拥有相同的像素深度和显示分辨率,带来了色彩空间图像的处理不是非常的得心应手。
RGB数据量过大的问题孕育了Bayer算法的初始,即将图像一般的像素分配给人眼最为敏感的G分量,而R和B分量各占1/4分量,对G分量采用好的差值方法,不尽可以提高G分量的质量,还可以提高R和B的质量。Bayer格式图如图3-11:
图3- 11 Bayer格式图
现今的图像传感芯片的数字输出格式,无论是RGB RAW还是YUV都在内部使用了压缩处理:在YUV格式下,使用了4:2:2的压缩;而在RGB RAW格式时,用了Bayer的压缩算法处理。本设计使用的CMOS芯片OV7620也不例外,当选取RGB-RAW格式输出时,Y和UV通道输出的并非是可以直接可以在LCD显示的RGB图像数据,而是一个经过压缩
处理的Bayer格式数据,因此要对其进行显示必须要经过“解压缩”的过程,即对Bayer格式数据进行差值还原处理。差值算法的种类很多,本设计使用的是的双线性差值算法。 2. 双线性差值算法
1) 算法理论推导
双线性差值算法的原理简单的说就是由源图像位置在其附近2X2区域的四个相邻像素值的加权均值计算。优点是放大图像后的质量较高,且不会出现不连续的像素点状况,缺点则是算法具有的低通滤波特性,使得高频数据部分受损导致图像轮廓上的畸变。下面对算法进行具体分析并总结得出软件设计。
图3- 12 双线性算法模拟图
建立如图3-12的模拟图,对于标准的双线性插值算法,X方向插值:
f(R1)?x2?xx2?x1x2?xx2?x1f(Q11)?x?x1x2?x1x?x1x2?x1f(Q21) 当R1?(x,y1)时 [通用1]
f(R2)?f(Q12)?f(Q22) 当R2?(x,y2)时 [通用2]
在具体的算法中,假设目标点P只能落在Q11、Q12、Q21、Q22四个点上,建立?col(当前像素离所属区域远点的水平距离)参数,则有:
?(R2)?(Color(Q22)?Color(Q12))??col?Color(Q12)?256 (1)
?(R1)?(Color(Q21)?Color(Q11))??col?Color(Q11)?256 (2)
其中?col?(DestColNumber?((SrcWidth??8)/DestWidth))&255
作完X方向插值后作Y方向的差值,一般的:
f(P)?y2?yy2?y1f(R1)?y?y1y2?y1f(R2) [通用1]