最近忙于CCD视频图像的采集,但调试了两天,只调出了灰度图像,对于YUV422图像却总是有错误,今天总算将程序调通了,现将调试流程记录于下:
系统配置:BF533-EZKIT + CCD摄像头,摄像头输入信号为PAL/NTSC制式,有效像素为720×576;
1.首先采用BF533-EZKIT的VideoIn例程,来验证数据通路即CCD以及系统的正常,进入到中断后,用imageview按照例程中readme的设置,可以看到分离的奇场和偶场的上下两幅图像。
2.单场图像的采集
由于PAL制式输出的图像分为奇、偶两场,因此先采集到的图像为奇场图像,长×宽=720×288,接下来采集到的偶场图像同样为长×宽=720×288,将二维DMA channel0设置如下:
1 void Init_DMA(void) 2 { 3 4 //connect PPI to DMA channel 0 5 *pDMA0_PERIPHERAL_MAP = 0x0; 6 7 *pDMA0_X_COUNT =360; //720×2/4=360 8 9 //The modifier is set to 4 because of the 32 bit transfers 10 *pDMA0_X_MODIFY = 4; 11 12 *pDMA0_Y_COUNT = 288; 13 14 *pDMA0_Y_MODIFY = 4; 15 16 *pDMA0_START_ADDR = sFrame0; 17 18 //DMA Config: Disable DMA | Memory write DMA | 2-D DMA | Discard DMA FIFO before start | enable assertation of interrupt | NDSIZE for stop mode | STOP Model 19 *pDMA0_CONFIG = DI_EN | WNR | WDSIZE_32| DMA2D ; 20 ssync(); 21 22 }//end Init_DMA
在image view中,设置起始地址为sFrame0,memory stride = 1, 720×288,像素格式为UYVY422,结果采集到的图像出现重影,仿佛左右都挤到中间重合了一样,
图像出现重影,重新配置了PPI和DMA无数次,几经折腾,无意中发现533的DAB总线是16bit的,与BF561的寄存器相比,PPI CONTROL REGISTER中无“DMA32”位,无法打包32bit数据(目前不知道这里理解的对不对,总之程序是调通了),于是重新修改上述程序如下:
void Init_DMA(void) { //connect PPI to DMA channel 0 *pDMA0_PERIPHERAL_MAP = 0x0; *pDMA0_X_COUNT =720; // //The modifier is set to 2 because of the 16 bit transfers *pDMA0_X_MODIFY = 2; *pDMA0_Y_COUNT = 288; // *pDMA0_Y_MODIFY = 2; *pDMA0_START_ADDR = sFrame0; //DMA Config: Disable DMA | Memory write DMA | 2-D DMA | Discard DMA FIFO before start | enable assertation of interrupt | NDSIZE for stop mode | STOP Model *pDMA0_CONFIG = DI_EN | WNR | WDSIZE_16| DMA2D ; ssync(); }//end Init_DMA
注意红色字迹标明了修改的地方,图像终于采集成功,虽然只是奇场图像,但偶场图像同理,只需要用2D DMA重新分配一下像素的存储位置,即可交织成一幅完整的图像了。浪费了两天时间,怪就怪在对BF533的内核结构了解的不深,广大朋友们在使用DSP时一定要认真看手册呀……
第一副采集到的完整图像如下:分辨率720×576