硬件准备
ADSP-EDU-BF533:BF533开发板
AD-HP530ICE:ADI DSP仿真器
软件准备
Visual DSP++软件
硬件链接
CVBS IN 视频输入
硬件实现原理
CVBS_IN 子卡板连接在 ADSP-EDU-BF53x 开发板的扩展端口 PORT3 和 PORT4 上,板卡插入时,应将扩展子卡板上标注的“圆圈”符号与板卡上的“圆圈”对准插入,避免子卡板反向接入板卡。正确插入子卡板后,CVBS
输入的接口是朝向板外。
CVBS_IN 子卡板采用 ADI 公司的 ADV7180 视频解码处理器,通过采集模拟信号,以 8bit YUYV 数据格式通过 PPI 接口传给 ADSP-BF53x 处理器。ADV7180 采用 IIC 接口进行初始化,它有 6 个模拟输入接口, CVBS_IN 子
卡板上引出了 3 个。
其接口支持 CVBS 信号,S-Video 信号,YPrPb 信号输入,通过配置寄存器选择输入接口,其配置模式如下:
为确保这些接口配置功能都实现,CVBS_IN 子卡板将接口 AIN1、AIN4、AIN5 引出。其使用方式如下:
下图为 CVBS_IN 子卡板顶视示意图,板卡上有白、红、黄三个接口,分别代表的接口功能是 AIN1、AIN4、AIN5。
该接口支持 CVBS、S-Video、YPrPb 模式的视频输出。例子程序仅使用了 CVBS 视频输出的功能。
ADV7180 IIC 器件地址: Slave address W 为 40H ,Slave address R 为 41H
ADV7180 和 LCD 公用一个 PPI 接口,采用 CPLD 来切换 PPI 时钟。
DEVICE_OE 寄存器(读/写):
DEVICE_OE 寄存器地址:0x20320000
DEVICE_OE 寄存器设置硬件设备上一些控制管脚的电平状态。
DEVICE_OE 寄存器位功能:
PPI_SET1~0:PPI 选择位
00:选通 CMOS PPI 时钟,使能 CMOS
01:选通 TFT PPI 时钟
选通 板卡为扩展接口的 PPICLK 提供时钟
1x:选通 PPI 时钟由扩展接口输入
选通 CVBS_IN 子卡板需将 PPI_SET0 位设置为 x,PPI_SET1 位设置为 1。
硬件连接示意图
代码实现功能
代码实现了通过 IIC 接口配置 ADV7180,使其工作在 27MHz 时钟输入,CVBS 模式,AIN1 接口信号输入。运行代码后会将 AIN1 输入的视频信号通过 PPI 总线进行采集,采集完成后会进入 PPIDMA 中断,并打印视频格式信息。通过 Image Viewer 工具可查看采集到的图像信息。
电视信号是奇场合偶场分离传输的,所以采集到的数据也是按奇场合偶场分离排列的。
测试步骤
1. 将仿真器(ICE)与 ADSP-EDU-BF53x 开发板和计算机连接好,将 CVBS_IN 子卡板按板上“圆圈”符号提示,插入板卡。正确插入后,莲花头视频接口朝板外。
2. 先给 ADSP-EDU-BF53x 开发板上电,再为仿真器(ICE)上电。
3. 运行 VisualDSP++ 5.0 软件,选择合适的 BF53x 的 session 将仿真器与软件连接。
4. 加载 VisualDSP++ 5.0 工程文件 BF53x_CVBSIN.dpj 文件,编译并全速运行。
测试结果
代码运行完成后,会出现以下打印:
将代码停止运行,打开 Image Viewer 工具,按下图配置:
在 Image Viewer 工具窗口中查看采集到的奇场和偶场分离的 CVBS 图像。
程序源码
cpu.c
#ifndef CPU_H
#define CPU_H
#include <cdefbf533.h>
/**********************************************************************************
- 名称 :Set_PLL
- 功能 :初始化内核时钟和系统时钟
- 入口参数 :pmsel pssel 设置参数
- 出口参数 :无
***********/
void Set_PLL(int pmsel,int pssel)
{
int new_PLL_CTL;
pPLL_DIV = pssel;
asm(“ssync;”);
new_PLL_CTL = (pmsel & 0x3f) << 9;
pSIC_IWR |= 0xffffffff;
if (new_PLL_CTL != pPLL_CTL)
{
pPLL_CTL = new_PLL_CTL;
asm(“ssync;”);
asm(“idle;”);
}
}
/ - 名称 :Init_EBIU
- 功能 :初始化并允许异步BANK存储器工作
- 入口参数 :无
- 出口参数 :无
****************************************************************************/
void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0xffc0ffc0;
*pEBIU_AMGCTL = 0x000f;
}
/****************************************************************************
- 名称 :Init_SDRAM
- 功能 :初始化SDRAM
- 入口参数 :无
- 出口参数 :无
****************************************************************************/
void Init_SDRAM(void)
{
*pEBIU_SDRRC = 0x00000817;
*pEBIU_SDBCTL = 0x00000013;
*pEBIU_SDGCTL = 0x0091998d;
ssync();
}
/****************************************************************************
- 名称 : delay
- 功能 : 延时函数
- 入口参数 :无
- 返回值 :无
****************************************************************************/
void delay(unsigned int tem)
{
int i;
for(i=0;i<tem;i++)
asm(“nop;”);
}
#endif
ppi.c
#include <cdefBF533.h>
#include <sys\exception.h>
EX_INTERRUPT_HANDLER(DMA0_PPI_ISR);
/****************************************************************************
- 名称 :Init_Timers
- 功能 :初始化TIMER0 为PWM模式。
- 入口参数 :无
- 出口参数 :无
****/
void Init_Timers(void)
{
pTIMER0_CONFIG = 0x0019;
pTIMER0_PERIOD = 0x00800000;
pTIMER0_WIDTH = 0x00400000;
pTIMER_ENABLE = 0x0001;
}
/ - 名称 :Init_Interrupts
- 功能 : DMA0 PPI interrupt 允许
- 入口参数 :无
- 出口参数 :无
****************************************************************************/
void Init_Interrupts(void)
{
*pSIC_IAR0 = *pSIC_IAR0 & 0xffffffff | 0x00000000;
*pSIC_IAR1 = *pSIC_IAR1 & 0xffffffff | 0x00000001;
*pSIC_IAR2 = *pSIC_IAR2 & 0xffffffff | 0x00000000;
register_handler(ik_ivg8, DMA0_PPI_ISR);
*pSIC_IMASK=0x00000100;
}
/****************************************************************************
-
名称 :Video_Frame_Capture
-
功能 : 初始化PPI控制器 初始化DMA0控制器
-
入口参数 :无
-
出口参数 :无
****************************************************************************/
void Video_Frame_Capture(void)
{
*pPPI_FRAME =625;
*pPPI_COUNT = 1439;
*pPPI_DELAY = 282;*pPPI_CONTROL = 0x002c ;
*pDMA0_START_ADDR = 0;
pDMA0_X_COUNT = 7202;
*pDMA0_X_MODIFY = 1;
*pDMA0_Y_COUNT = 625;
*pDMA0_Y_MODIFY = 1;
*pDMA0_PERIPHERAL_MAP = 0x0;
*pDMA0_CONFIG = WNR | WDSIZE_8| DMA2D| DI_EN ;*pDMA0_CONFIG |= DMAEN;
ssync();
*pPPI_CONTROL |= PORT_EN;
ssync();
}
/****************************************************************************
- 名称 :EX_INTERRUPT_HANDLER
- 功能 : 中断函数 清 DMA 中断标志,关PPI
- 入口参数 :无
- 出口参数 :无
****************************************************************************/
EX_INTERRUPT_HANDLER(DMA0_PPI_ISR)
{
*pDMA0_IRQ_STATUS = 0x1;
pPPI_CONTROL &= 0xfffe;
printf( "\nSuccess Capture One Frame: 720 625\n");
printf( " YUYV422 Format\n" );
printf( " Data Addr is 0\n" );
}