硬件准备
ADSP-EDU-BF533:BF533开发板
AD-HP530ICE:ADI DSP仿真器
软件准备
Visual DSP++软件
硬件链接
CVBS IN视频输出
代码实现功能
电视视频是奇场合偶场交替传输的,所以通过 CVBSIN 模块采集到的图像如上实验所看到的,是奇场和偶场分离的图像,不方便做视频处理。这个代码实现了通过 CVBSIN 子卡板采集一帧 YUV 格式的奇偶场分离的图像数据,
通过启动 MemoryDMA 将这个图像数据交织在一起,形成一幅完整的图像。运行代码后,代码会不断的采集图像进行交织,并打印完成信息。待看到打印的完成信息时,即可停下代码查看内存中的数据。
代码使用说明
在 CMOS 采集到一帧图像之后,会进入 DMA0 的中断函数,在中断函数中,启动 MemoryDMA,通过MemofyDMA 将图像进行交织。
EX_INTERRUPT_HANDLER(DMA0_PPI_ISR) //CMOS DMA0 中断函数
{
pDMA0_IRQ_STATUS = 0x1; //清除中断标志
pPPI_CONTROL &= 0xfffe; //关闭 PPI
Init_MDMA_Interrupt(); //初始化 MDMA 中断
Init_MDMA((void)&video_buffer_temp[0],(void)&video_buffer[0]); //设置 DMA 的源和目的缓存
MDMA_Enable(); //使能 MDMA
}
MemoryDMA 初始化配置:
*pMDMA_S0_START_ADDR = (void *)pSrc; //设置源地址
*pMDMA_S0_X_COUNT = 720; //传输次数
*pMDMA_S0_X_MODIFY = 2; //地址修改增量 2,16bit 模式一次读 2 个 byte
*pMDMA_S0_Y_COUNT = 312; //传输次数
*pMDMA_S0_Y_MODIFY = 2; //Y 修改增量
*pMDMA_D0_START_ADDR = (void *)pDest; //目的地址
*pMDMA_D0_X_COUNT = 720; //传输次数
*pMDMA_D0_X_MODIFY = 2; //地址修改增量 2,16bit 模式一次读 2 个 byte
*pMDMA_D0_Y_COUNT = 312; //传输次数
pMDMA_D0_Y_MODIFY = 1442; //Y 修改增量,目的地址需要空出偶(奇)场的数据空
间,所以设置 1442,即空出一行 7202 个字节,再偏移已传输过的 2 个字节。
*pMDMA_S0_PERIPHERAL_MAP = 0x0040; //配置使用的 DMA 通道
*pMDMA_D0_PERIPHERAL_MAP = 0x0040;
*pMDMA_S0_CONFIG = 0x0034; //配置源 DMA 工作模式
*pMDMA_D0_CONFIG = 0x00b6; //配置目的 DMA 工作模式
代码实验步骤
1. 将仿真器(ICE)与 ADSP-EDU-BF53x 开发板和计算机连接好,将 CVBS_IN 子卡板按板上“圆圈”符号提示,插入板卡。正确插入后,莲花头视频接口朝板外。
2. 将视频信号源通过莲花头接入 CVBS_IN 子卡板上黄色的接口,并确保信号源正在传输视频信号。
3. 先给 ADSP-EDU-BF53x 开发板上电,再给仿真器(ICE)上电。
4. 运行 VisualDSP++ 5.0 软件,选择合适的 BF53x 的 session 将仿真器与软件连接。
5. 加载 VisualDSP++ 5.0 工程文件 BF53x_CVBSIN_MDMA.dpj 文件,编译并全速运行。
代码实验结果
代码运行完成后,会出现以下打印,当看到这些信息时,可停下代码查看内存数据。
将代码停止运行,打开 Image Viewer 工具,按下图配置:
在 Image Viewer 工具窗口中查看采集到的 CVBS 图像。
按如上图配置完成后,点“OK”,稍等片刻就可以在 VDSP 窗口中看到一帧已经交织好奇偶场的图像。