BootLoader的第一阶段启动的流程依次为:ARM启动或重启→设置中断向量→禁止看门狗、中断→设置时钟→Sdram初始化→复制RO/RW段到Sdram→ZI段清零→堆栈初始化→跳转到main函数。第二阶段则完成了以下操作:main函数→端口初始化→设置中断请求→设置主频→串口初始化→设置MMU→打开Cache→LCD初始化。ARM系统MMU的设计为了便于实现,采用了2段式的虚拟地址分配方式,每个页(Section)的大小设置为1MB;同时为了减少对S3C2440地址的修改,采用了虚拟地址与物理地址相同的地址分配方式。
2 LCD设计
Micro2440开发板配有240×320/NEC3.5英寸T- FT真彩液晶屏,正确设置后能够显示清晰的图像、视频。S3C2440A的LCD控制器支持的屏幕大小包括480×640、240×320以及160×160等尺寸,能够产生VFRAME、VLINE、VCLK、VM等控制信号。这些控制信号的使用需要配置S3C2440A的C端口为LCD控制。同时LCD的数据线VD[0]~ VD[7]也由C端口控制,VD[8]~VD[23]则由D端口控制,需要设置做为LCD数据线。由于使用的是TFT真彩液晶屏,需要把LCD控制寄存器设置为TFT模式,这里设置为TFT的16BPP(Bits Per Pixel)模式;同时还需要对LCDCON5进一步设置为5:6:5或5:5:5:1格式,这里设置RGB格式为5:6:5格式,此信号在OV9650传输如图2所示[2]。以便和摄像头的视频输出格式相一致,否则需要进行格式的转化。在设置完帧缓存地址后,写入数据,便可以实现图像的显示,格式转换过程如图3所示。
3 摄像头驱动设计
Micro2440开发板的配套摄像头型号为OV9650,该摄像头具有130万像素,输出视频格式为YCbCr格式,同时S3C2440A的CAMIF(Camera Interface) 提供了ITU-R BT.601/656 8位标准输入的支持[3],最大可采样4 096×4 096像素的图像[4],在Preview模式下支持输出RGB 16/24 bit格式,这对于数字图像的处理带来了便利条件。S3C2440A的CAMIF与OV9650的连接如图4所示。
OV9650驱动流程如下:设置Camera全局控制寄存器,并复位→配置S3C2440A的J端口→使能OV9650的Normal模式→设置接口时钟→通过I2CSCL,I2C-SDA与SID_C, SID_D信号建立S3C2440A与OV9650的通信→设置OV9650的寄存器组→初始化3C2440A摄像头接口,包括捕获图像的宽、高、偏移、输入格式、输出格式、缓冲区地址等→将OV9650将LCD缓冲区地址更改到Camera的缓冲区地址,以显示Camera图像→清除中断→设置中断处理函数→开始捕获图像。
其中,OV9650与S3C2440A的通信采用了两线制的SCCB (Serial Camera Control Bus) [5],通过该接口可实现各种图像增强和控制功能,如自动曝光、自动增益、自动白平衡控制等,以及控制图像色彩、饱和度、锐化、镜头校准等[6]。S3C2440A控制端口产生SCCB的启动、停止等控制信号,SCCB 协议中开始条件定义为:在SID_C 为高电平时, SID_D出现一个下降沿,则SCCB开始传输;停止条件定义为:在SID_C为高电平时, SID_D出现一个上升沿,则SCCB停止传输;在数据传输时,SID_C为高电平时,需要SID_D上的数据的稳定,以便传输,如图5所示。
以写一位数据传输为例,基本流程为:将数据放在SID_D上→启动SID_C进行传输→延时传输后停止SID_C;同理,传输8位数据则需循环8次。类似地,读取时基本流程为:启动SID_C→读取SID_D→停止SID_C。一个完整的数据传输的写周期顺序为:写从设备的ID→写设备寄存器的地址→将此寄存器中写入数据。