一种数码相机成像和视频处理前端的设计
钳位电路(clamper)采样CCD黑像素的数字,然后每个像素的值都减去这个黑电平值。用户可以通过寄存器设置黑电平像素的位置,用于求黑像素的数量(8个或16个)。另外,也可以将黑电值设置成一个常数。
输出格式化器模板(output formatter)提供反混淆滤波(anti-aliasing filter)、A-律压缩和水平、垂直降采样。反混淆滤波由一个简单的三阶滤波器构成。A-律表压缩将10位以上的钳位后数据压缩成8位。最后是一个可编程降采样模板,从每8个像素中抽取N个像素。
CCD控制器提供2个数据通道。在通过(passthrough)通道时,8、10、12位的像素值被保存到1个16位SDRAM字的高位,没有使用的低位填入0。数据存入SDRAM时,每次保存32位,即2个像素,其中左边的象素保存到32位的低16位。在数据压缩通道,图像数据的高10位被压缩成8位,然后每4个像素存入SDRAM的一个32位字。
4 DSP与TVP5040的硬件连接及软件实现
4.1 硬件连接
考虑到TMS320DSCX的CCD控制器只能接收12位宽的数据,在TVP5040端决定采用10位YUV 4:2:2的视频输出格式,则TMS320DSCX与TVP5040的硬件连接如图5所示。
javascript:window.open(this.src);" style="cursor:pointer;"/>
TVP5040输出的写信号(WEN)用于从CCD接口直接将数据写入SDRAM,可通过EWEN位进行设置。当WEN信号为高读写位(RDWE),即位是“1”时,图像数据就载入SDRAM。
需要注意的是,TVP5040必须外接14.31818MHz的晶振才能保持正常的工作频率。
4.2 软件实现
首先需要初始化TVP5040,将微代码通过TVP5040的I2C主机端口下载到微处理器中。
Void TVP5040INIT(void)
{
resetTVP(); //首先将TVP5040复位
DELAYTIME; //延时,下载代码需要时序稳定
MicrocodeDown(); //下载微代码
RestartMicroprocessor();//下载完后,需要重新启动5040的微处理器
TimerWait(5); //微处理器重新启动需要等待5ms
PatchTVPRegister(); //内部寄存器处于默认状态,需要重新设置
}
然后需要设置CCD控制器以获取一帧图像数据并送入SDRAM。
Void main()
{
TVP5040INIT();//初始化TVP5040
SdramInit(); //初始化SDRAM
CCDCInit();//初始化CCD控制器
CCDCSetLinePerFrame();//设置每帧图像的行数
CCDCSetRawDataMode();//设置内部生成时序信号的宽度、极性、位置和方向
CCDCGetFrame();//获取一帧图像数据送入SDRAM
}
javascript:window.open(this.src);" style="cursor:pointer;"/>
5 结论
上述系统在数码相机设计方案中取得了非常好的效果。实践证明,这种高性能、可编程的、基于DSP的解决方案,使得产品的开发和应用变得更加容易,为产品更快的进入市场奠定了基础。