AL700在视频切换中的应用
上海理工大学光电学院 杜娟娟 张凤登
AL700功能框图及介绍
图1是AL700的功能框图,由图可知AL700含有以下主要功能模块:
⑴解码器接口:AL700含有四个解码器接口,可以同时接收4路8位的ITU-R-601/656的4∶2∶2数据格式。寄存器03h<0>确定系统的制式,寄存器04h控制同步信号、数据格式等,通过对它编程可以支持不同类型的视频解码器。04h<2,1>设置成00,那么输入数据的次序是Cb Y Cr Y,设置为01,输入次序是 Cr Y Cb Y ;设置为10,输入次序是Y Cb Cr Y ,设置为11,输入次序为Cr Y Cr Y Cb。四个解码器由同一组内部寄存器控制,所以应用中选用同一种视频解码器。
⑵解码复用控制器:AL700允许四路中的两路共用一个解码器,当寄存器08h<4>设置为1 ,解码复用控制器通臩W_A和SW_B输出控制信号给解码器,使得A路与C路分时使用同一解码器,B路与D路分时使用同一解码器。
⑶编码输出接口:AL700支持模拟输出和数字输出,模拟输出是通过选用内部编码器实现的,输出信号包括CVBS和S-video;数字输出包括8位ITU-R-601/656 4∶2∶2格式和16位ITU-R-601 4∶2∶2格式,数字输出可以外接TV编码器得到模拟信号。寄存器18h<0>为0使用内部TV编码器,为1则外接TV编码器。使用内部编码器,不影响数字输出,但在内部TV编码时Y的采样率在PAL制式下是17.734MHz,在NTSC制式下是14.318MHz,而不是CCIR标准的13.5MHz,将使图像的水平尺寸变得不标准。寄存器04h<6:5>四种不同的设置数字输出的分量Cb Y Cr Y就有不同的输出次序,具体设置格式与输入一样。通过对内部寄存器的编程,AL700支持多种外接TV编码器。
⑷主机接口:AL700通过该接口与主机通讯,在本应用中我们选用AT89c52作为控制AL700的主机。经由这个接口,主机对AL700的寄存器进行读和写操作。AL700支持I2C总线协议,这一协议规定向总线传送数据时为发送器,从总线接受数据时为接受器,在这个控制过程中,控制传输的器件是主机,而被控制的器件则为从机,时序方面的规定不在此赘述。AL700也支持8位数据的并行传输,引脚SP-SEL为高时是I2C传输模式,为低为并行传输模式。并行传输时序如图2和图3所示。H_WRB是时钟信号,在它的上升沿进行读或写的操作。H_BUS(7:0)是数据总线,H-DENB为高说明传输的是寄存器的地址,低说明传输的是数据,H_RDB高说明主机在进行写操作,低说明在进行读操作。
⑸图像控制器:这个由20 个内部寄存器共同控制的功能块是AL700的所在。AL700支持四分屏和满屏显示,编程寄存器19h,输出画面就可以在两者之间切换。图像在屏幕上的显示位置和其他性质都可以编程,比如寄存器17h-1Fh主要是对视频输出数据格式、显示模式、图像有无边界、边界宽度、边界闪烁与否、显示的水平起始位置和垂直起始位置等显示性质的说明,这些说明同时作用于四路图像;08h-0Fh用于视频捕获控制,设置捕获图像的水平和垂直起始位置,水平位置的说明以像素为单位,垂直位置的说明以行为单位。另外,每个通道也有自己的画面属性配置寄存器对该通道边界闪烁使能、边界颜色等进行控制,寄存器10h-16h完成这些功能。
⑹运动检测:运动检测主要用于VCR的四分屏显示中。在四分屏和全屏显示下,AL700还可以对断频进行检测。在中断没有被屏蔽的情况下,如果视频传输出现中断,将通过引脚INTR产生中断,寄存器03h<4>是1则为高电平触发,0则为低电平触发。
⑺层叠控制: AL700内嵌1K-byte的context Ram和4K-byte的Font Ram。支持内部和外部两种OSD(在屏显示),实现在输出上层叠控制菜单、文本或标题等功能。内部OSD有两种工作模式:1-byte模式和2-byte模式,1-byte模式在码流中只对字符编码进行描述,2-byte模式除对字符编码还对字符的其他性质如闪烁、背景色、前景色做了说明,不管是哪种模式都可以有两个独立的显示窗口OSD1和OSD2,两者叠加的时候OSD1居上。通过AL700提供了32个控制寄存器可以对OSD进行灵活编程。
⑻SDRM接口:该芯片支持1M 16或4M 16的同步动态随机存储器。猝发读写模式下,其读写时间为9ns。通过对寄存器80h和81h的编程可以对SDRM各项控制参数进行设置。
视频切换硬件电路的设计实现
本设计选用AT89c52作为AL700的主机控制。现场信号的AD转换及视频数据格式转换由Philips公司的9位视频处理芯片SAA7113A完成,四路输入画面性质、通道切换等控制功能通过对AL700的寄存器编程来完成。图4 为本设计中Al700的硬件电路框图。
软件实现
在对AL700的软件编程上,采用FramklinC51语言编写,它可以对硬件进行操作,便于改进和补充,具有很强的可读性、可靠性、结构性,能给用户提供高质量的转换代码。程序从功能上分为4个主要部分:主控程序;初始化子程序;中断服务子程序。主控程序流程图如图5 所示。
主控程序是整个程序的主干,在完成单片机的上电自检、RAM和SFR的初始化之后,主程序主要工作在循环状态,不断查询中断状态标志,发现中断后转去执行相应的操作。中断子程序拥有的中断优先级,响应中断之后,首先判断指令要进行的操作,找出相应的控制目标,再对其进行相应的控制操作。就AL700的编程而言,不论是初始化还是切换控制功能的完成,主要是对其寄存器的写和读操作,下面给出并行传输模式下寄存器读写的子程序清单。
void para_setreg(BYTE index, BYTE value) //通过并行口写寄存器
{
H_RDB_P=1; //主机处在写状态
para_setindex(index); //送寄嫫鞯刂?br> para_setvalue(value); //送待写数据
H_BUS=0xFF;
H_DENB_P=1;
}
BYTE para_getreg(BYTE index) //读寄存器
{
BYTE value;
H_RDB_P=0;
para_setindex(index);
value=para_getvalue(); //读出寄存器中的数据
H_BUS=0xFF;
return value;
}
void para_setvalue(BYTE value)
{
H_WRB_P=0;
H_DENB_P=0;
_nop_();
_nop_();
H_BUS=value;
H_WRB_P=1;
}
BYTE para_getvalue(void)
{
H_WRB_P=0;
H_DENB_P=0;
H_BUS=0xFF;
H_WRB_P=1;
return H_BUS;
}
void para_setindex(BYTE index)
{
H_WRB_P=0;
H_DENB_P=1;
_nop_();
_nop_();
H_BUS=index;
H_WRB_P=1;
}
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。