AL700在視頻切換中的應(yīng)用
al700功能框圖及介紹
本文引用地址:http://m.butianyuan.cn/article/20586.htm圖1是al700的功能框圖,由圖可知al700含有以下主要功能模塊:
⑴解碼器接口:al700含有四個(gè)解碼器接口,可以同時(shí)接收4路8位的itu-r-601/656的4∶2∶2數(shù)據(jù)格式。寄存器03h<0>確定系統(tǒng)的制式,寄存器04h控制同步信號(hào)、數(shù)據(jù)格式等,通過(guò)對(duì)它編程可以支持不同類型的視頻解碼器。04h<2,1>設(shè)置成00,那么輸入數(shù)據(jù)的次序是cb
y cr y,設(shè)置為01,輸入次序是 cr y cb y ;設(shè)置為10,輸入次序是y cb cr y ,設(shè)置為11,輸入次序?yàn)閏r
y cr y cb。四個(gè)解碼器由同一組內(nèi)部寄存器控制,所以應(yīng)用中最好選用同一種視頻解碼器。
⑵解碼復(fù)用控制器:al700允許四路中的兩路共用一個(gè)解碼器,當(dāng)寄存器08h<4>設(shè)置為1 ,解碼復(fù)用控制器通臩w_a和sw_b輸出控制信號(hào)給解碼器,使得a路與c路分時(shí)使用同一解碼器,b路與d路分時(shí)使用同一解碼器。
⑶編碼輸出接口:al700支持模擬輸出和數(shù)字輸出,模擬輸出是通過(guò)選用內(nèi)部編碼器實(shí)現(xiàn)的,輸出信號(hào)包括cvbs和s-video;數(shù)字輸出包括8位itu-r-601/656
4∶2∶2格式和16位itu-r-601 4∶2∶2格式,數(shù)字輸出可以外接tv編碼器得到模擬信號(hào)。寄存器18h<0>為0使用內(nèi)部tv編碼器,為1則外接tv編碼器。使用內(nèi)部編碼器,不影響數(shù)字輸出,但在內(nèi)部tv編碼時(shí)y的采樣率在pal制式下是17.734mhz,在ntsc制式下是14.318mhz,而不是ccir標(biāo)準(zhǔn)的13.5mhz,將使圖像的水平尺寸變得不標(biāo)準(zhǔn)。寄存器04h<6:5>四種不同的設(shè)置數(shù)字輸出的分量cb
y cr y就有不同的輸出次序,具體設(shè)置格式與輸入一樣。通過(guò)對(duì)內(nèi)部寄存器的編程,al700支持多種外接tv編碼器。
⑷主機(jī)接口:al700通過(guò)該接口與主機(jī)通訊,在本應(yīng)用中我們選用at89c52作為控制al700的主機(jī)。經(jīng)由這個(gè)接口,主機(jī)對(duì)al700的寄存器進(jìn)行讀和寫操作。al700支持i2c總線協(xié)議,這一協(xié)議規(guī)定向總線傳送數(shù)據(jù)時(shí)為發(fā)送器,從總線接受數(shù)據(jù)時(shí)為接受器,在這個(gè)控制過(guò)程中,控制傳輸?shù)钠骷侵鳈C(jī),而被控制的器件則為從機(jī),時(shí)序方面的規(guī)定不在此贅述。al700也支持8位數(shù)據(jù)的并行傳輸,引腳sp-sel為高時(shí)是i2c傳輸模式,為低為并行傳輸模式。并行傳輸時(shí)序如圖2和圖3所示。h_wrb是時(shí)鐘信號(hào),在它的上升沿進(jìn)行讀或?qū)懙牟僮?。h_bus(7:0)是數(shù)據(jù)總線,h-denb為高說(shuō)明傳輸?shù)氖羌拇嫫鞯牡刂?,低說(shuō)明傳輸?shù)氖菙?shù)據(jù),h_rdb高說(shuō)明主機(jī)在進(jìn)行寫操作,低說(shuō)明在進(jìn)行讀操作。
⑸圖像控制器:這個(gè)由20 個(gè)內(nèi)部寄存器共同控制的功能塊是al700的核心所在。al700支持四分屏和滿屏顯示,編程寄存器19h,輸出畫面就可以在兩者之間切換。圖像在屏幕上的顯示位置和其他性質(zhì)都可以編程,比如寄存器17h-1fh主要是對(duì)視頻輸出數(shù)據(jù)格式、顯示模式、圖像有無(wú)邊界、邊界寬度、邊界閃爍與否、顯示的水平起始位置和垂直起始位置等顯示性質(zhì)的說(shuō)明,這些說(shuō)明同時(shí)作用于四路圖像;08h-0fh用于視頻捕獲控制,設(shè)置捕獲圖像的水平和垂直起始位置,水平位置的說(shuō)明以像素為單位,垂直位置的說(shuō)明以行為單位。另外,每個(gè)通道也有自己的畫面屬性配置寄存器對(duì)該通道邊界閃爍使能、邊界顏色等進(jìn)行控制,寄存器10h-16h完成這些功能。
⑹運(yùn)動(dòng)檢測(cè):運(yùn)動(dòng)檢測(cè)主要用于vcr的四分屏顯示中。在四分屏和全屏顯示下,al700還可以對(duì)斷頻進(jìn)行檢測(cè)。在中斷沒(méi)有被屏蔽的情況下,如果視頻傳輸出現(xiàn)中斷,將通過(guò)引腳intr產(chǎn)生中斷,寄存器03h<4>是1則為高電平觸發(fā),0則為低電平觸發(fā)。
⑺層疊控制: al700內(nèi)嵌1k-byte的context ram和4k-byte的font ram。支持內(nèi)部和外部?jī)煞Nosd(在屏顯示),實(shí)現(xiàn)在輸出上層疊控制菜單、文本或標(biāo)題等功能。內(nèi)部osd有兩種工作模式:1-byte模式和2-byte模式,1-byte模式在碼流中只對(duì)字符編碼進(jìn)行描述,2-byte模式除對(duì)字符編碼還對(duì)字符的其他性質(zhì)如閃爍、背景色、前景色做了說(shuō)明,不管是哪種模式都可以有兩個(gè)獨(dú)立的顯示窗口osd1和osd2,兩者疊加的時(shí)候osd1居上。通過(guò)al700提供了32個(gè)控制寄存器可以對(duì)osd進(jìn)行靈活編程。
⑻sdrm接口:該芯片支持1m 16或4m 16的同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器。猝發(fā)讀寫模式下,其讀寫時(shí)間為9ns。通過(guò)對(duì)寄存器80h和81h的編程可以對(duì)sdrm各項(xiàng)控制參數(shù)進(jìn)行設(shè)置。
視頻切換硬件電路的設(shè)計(jì)實(shí)現(xiàn)
本設(shè)計(jì)選用at89c52作為al700的主機(jī)控制。現(xiàn)場(chǎng)信號(hào)的ad轉(zhuǎn)換及視頻數(shù)據(jù)格式轉(zhuǎn)換由philips公司的9位視頻處理芯片saa7113a完成,四路輸入畫面性質(zhì)、通道切換等控制功能通過(guò)對(duì)al700的寄存器編程來(lái)完成。圖4 為本設(shè)計(jì)中al700的硬件電路框圖。
軟件實(shí)現(xiàn)
在對(duì)al700的軟件編程上,采用framklinc51高級(jí)語(yǔ)言編寫,它可以對(duì)硬件進(jìn)行操作,便于改進(jìn)和補(bǔ)充,具有很強(qiáng)的可讀性、可靠性、結(jié)構(gòu)性,能給用戶提供高質(zhì)量的轉(zhuǎn)換代碼。程序從功能上分為4個(gè)主要部分:主控程序;初始化子程序;中斷服務(wù)子程序。主控程序流程圖如圖5 所示。
主控程序是整個(gè)程序的主干,在完成單片機(jī)的上電自檢、ram和sfr的初始化之后,主程序主要工作在循環(huán)狀態(tài),不斷查詢中斷狀態(tài)標(biāo)志,發(fā)現(xiàn)中斷后轉(zhuǎn)去執(zhí)行相應(yīng)的操作。中斷子程序擁有最高的中斷優(yōu)先級(jí),響應(yīng)中斷之后,首先判斷指令要進(jìn)行的操作,找出相應(yīng)的控制目標(biāo),再對(duì)其進(jìn)行相應(yīng)的控制操作。就al700的編程而言,不論是初始化還是切換控制功能的完成,主要是對(duì)其寄存器的寫和讀操作,下面給出并行傳輸模式下寄存器讀寫的子程序清單。
void para_setreg(byte index, byte value) //通過(guò)并行口寫寄存器
{
h_rdb_p=1; //主機(jī)處在寫狀態(tài)
para_setindex(index); //送寄嫫韉刂?br> para_setvalue(value); //送待寫數(shù)據(jù)
h_bus=0xff;
h_denb_p=1;
}
byte para_getreg(byte index) //讀寄存器
{
byte value;
h_rdb_p=0;
para_setindex(index);
value=para_getvalue(); //讀出寄存器中的數(shù)據(jù)
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;
}
評(píng)論