專利名稱:基于嵌入式linux系統(tǒng)的實時遙控圖像接口電路的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于實時圖像顯示技術(shù)領(lǐng)域,更明確地說涉及一種隨輸入的時間數(shù)據(jù)實時產(chǎn)生相應(yīng)的圖像的基于嵌入式LINUX系統(tǒng)的實時遙控圖像接口電路的設(shè)計。
背景技術(shù):
隨著大屏幕顯示技術(shù)的迅猛發(fā)展,實時的圖像顯示技術(shù)應(yīng)用日益廣泛,其在公共場所的廣告效應(yīng)得到充分肯定。但是,傳統(tǒng)的大屏幕顯示技術(shù)的電路結(jié)構(gòu)均十分復雜,造價昂貴,而且其顯示的內(nèi)容不夠靈活多變。因此,基于嵌入式LINUX系統(tǒng)設(shè)計的實時遙控圖像接口必定會以其強大的功能和相對低廉的價格,廣泛推廣應(yīng)用于各種大屏幕時鐘和廣告。
發(fā)明內(nèi)容
本發(fā)明的目的,就在于克服上述缺點和不足,提供一種基于嵌入式LINUX系統(tǒng)的實時遙控圖像接口電路。它電路結(jié)構(gòu)簡單、功能強大、價格相對低廉??蓮V泛推廣應(yīng)用于展覽館、機場、街頭等公共場所中。
為了達到上述目的,本發(fā)明包括
(1)存儲LINUX系統(tǒng)程序及編譯的應(yīng)用主程序的FLASH閃存;
(2)與閃存及下述SDRAM存儲器、串行通信接口UART和遙控圖像AV接口互聯(lián)并進行控制,而且上電后將LINUX系統(tǒng)程序及編譯的應(yīng)用主程序從閃存加載到SDRAM的嵌入式系統(tǒng)CPU;
(3)運行初始化本發(fā)明各部分及接口程序的SDRAM;
(4)運行打開UART并設(shè)置正確的串行參數(shù)程序的SDRAM;
(5)運行對打開的UART的操作進行判斷,如果正確繼續(xù)執(zhí)行下一程序,如果不正確則返回初始化程序的SDRAM;
(6)運行對打開的UART進行數(shù)據(jù)監(jiān)控,每一秒鐘為一個間隔向UART發(fā)送數(shù)據(jù)程序的SDRAM;
(7)向嵌入式實時遙控圖像AV接口發(fā)送實時的時間數(shù)據(jù)的串行通信接口UART;
(8)對實時的時間數(shù)據(jù)進行處理,將當前接收到的數(shù)據(jù)與系統(tǒng)正在顯示的數(shù)據(jù)進行比較,如果時間參數(shù)沒有發(fā)生變化,則繼續(xù)獲取時間信息,如果時間參數(shù)發(fā)生變化,則將新的時間信息傳輸?shù)斤@示終端的實時遙控圖像AV接口。
嵌入式系統(tǒng)CPU采用SunPlus公司的SPHE1001A,閃存為8M字節(jié),SDRAM為32M。
串行通信接口UART的參數(shù)為傳輸波特率4800,數(shù)據(jù)位8,無奇偶校驗,停止位1。
本發(fā)明主要包括有嵌入式系統(tǒng)CPU、FLASH、SDRAM、串行通信接口UART和標準的音視頻輸出實時遙控圖像AV接口等。
本發(fā)明中,嵌入式系統(tǒng)CPU采用SunPlus公司的SPHE1001A;8M字節(jié)的FLASH存儲器主要用來存儲嵌入式LINUX系統(tǒng)的內(nèi)核以及編譯好的應(yīng)用程序;SDRAM存儲器在系統(tǒng)上電后主要用來運行主程序;串行通信接口UART與外界通過串口進行實時的數(shù)據(jù)傳輸;標準的音視頻輸出AV接口用于把實時的音視頻信號傳輸?shù)斤@示終端進行顯示。
本發(fā)明可根據(jù)不同的設(shè)備通過串口輸入實時的時間參數(shù),經(jīng)過嵌入式系統(tǒng)的內(nèi)部程序處理,最后經(jīng)由標準的AV端口發(fā)送到顯示終端,從而實現(xiàn)實時的圖像顯示功能,由于通過串口的時間參數(shù)可以由用戶自由的控制,因此顯示的內(nèi)容靈活多變,尤其在大屏幕戶外顯示方面具有強大的優(yōu)勢。
本發(fā)明電路結(jié)構(gòu)簡單、功能強大、價格相對低廉??蓮V泛推廣應(yīng)用于展覽館、機場、街頭等公共場所中。
圖1為本發(fā)明的電路原理方框圖。
圖2為其程序流程圖。
圖3為實時遙控圖像接口的輸出終端顯示效果圖。
具體實施例方式
實施例1。一種基于嵌入式LINUX系統(tǒng)的實時遙控圖像接口電路,如圖1~圖3所示。它包括
(1)存儲LINUX系統(tǒng)程序及編譯的應(yīng)用主程序的FLASH閃存;
(2)與閃存及下述SDRAM存儲器、串行通信接口UART和遙控圖像AV接口互聯(lián)并進行控制,而且上電后將LINUX系統(tǒng)程序及編譯的應(yīng)用主程序從閃存加載到SDRAM的嵌入式系統(tǒng)CPU;
(3)運行初始化本發(fā)明各部分及接口程序的SDRAM;
(4)運行打開UART并設(shè)置正確的串行參數(shù)程序的SDRAM;
(5)運行對打開的UART的操作進行判斷,如果正確繼續(xù)執(zhí)行下一程序,如果不正確則返回初始化程序的SDRAM;
(6)運行對打開的UART進行數(shù)據(jù)監(jiān)控,每一秒鐘為一個間隔向UART發(fā)送數(shù)據(jù)程序的SDRAM;
(7)向嵌入式實時遙控圖像AV接口發(fā)送實時的時間數(shù)據(jù)的串行通信接口UART;
(8)對實時的時間數(shù)據(jù)進行處理,將當前接收到的數(shù)據(jù)與系統(tǒng)正在顯示的數(shù)據(jù)進行比較,如果時間參數(shù)沒有發(fā)生變化,則繼續(xù)獲取時間信息,如果時間參數(shù)發(fā)生變化則將新的時間信息傳輸?shù)斤@示終端的實時遙控圖像AV接口。
如圖1所示,本發(fā)明主要包括嵌入式系統(tǒng)CPU101、FLASH閃存102、SDRAM103、標準的音視頻輸出實時遙控圖像AV接口104和UART串行通信接口105等組成。
如圖2所示,系統(tǒng)上電后,開始運行201,在CPU控制下,嵌入式系統(tǒng)內(nèi)核和程序自動從FLASH加載到SDRAM中運行,。接著系統(tǒng)開始進行初始化各種設(shè)備和接口202,使主程序運行之前確保系統(tǒng)的狀態(tài)穩(wěn)定,這樣使程序的可靠性和穩(wěn)定性提高,避免出錯。
接著由于通信的需要,主程序會打開串口203,并設(shè)置正確的串口參數(shù)傳輸波特率4800,數(shù)據(jù)位8,無奇偶校驗,停止位1。為確保程序的正確執(zhí)行,需要對此打開串口操作進行判斷,如果打開設(shè)備正確S04程序繼續(xù)向下執(zhí)行,否則錯誤S05則返回重新進行初始化過程。
串口打開成功后,嵌入式系統(tǒng)程序?qū)Υ谶M行數(shù)據(jù)監(jiān)控,日歷時間數(shù)據(jù)為BCD碼十六進制數(shù)11個字節(jié),排列為AA,秒,分,時,周,日,月,年低位,年高位,A1,A2。按照這樣統(tǒng)一的規(guī)定,每一秒鐘為一個間隔,用戶可以不斷的通過串口向嵌入式實時遙控圖像接口發(fā)送實時的時間數(shù)據(jù)。
實時遙控圖像接口接到串口發(fā)來的數(shù)據(jù)后需要實時的對數(shù)據(jù)進行處理將當前接收到的數(shù)據(jù)與系統(tǒng)正在顯示的數(shù)據(jù)進行比較206,如果時間參數(shù)沒有發(fā)生變化S09,則繼續(xù)獲取時間信息205;否則如果時間參數(shù)變化則S08,實時顯示新的時間208。
為使動態(tài)顯示實時圖像的效果達到最佳,嵌入式系統(tǒng)采用了OSD菜單設(shè)計,使系統(tǒng)的資源得到充分利用。
圖3是本實施例的輸出終端顯示效果圖。從效果圖可以看出實時遙控圖像接口輸出的效果非常好,十分適合大屏幕顯示的各個應(yīng)用場所。
本實施例的源代碼如下
#include<stdio.h>/*標準輸入輸出定義*/#include<stdlib.h> /*標準函數(shù)庫定義*/#include<unistd.h> /*Unix標準函數(shù)定義*/#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>/*文件控制定義*/#include<termios.h> /*PPSIX終端控制定義*/#include<errno.h>/*錯誤號定義*/#include<stdio.h>/*標準輸入輸出定義*/#include<stdlib.h> /*標準函數(shù)庫定義*/#include<unistd.h> /*Unix標準函數(shù)定義*/#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>/*文件控制定義*/#include<termios.h> /*PPSIX終端控制定義*/#include<errno.h>/*錯誤號定義*/#include<math.h>#include<time.h>//#define FALSE-1//#define TRUE 0<!-- SIPO <DP n="4"> --><dp n="d4"/>#define DATA_HEAD 0xAA#define DATA_TAIL1 0xA1#define DATA_TAIL2 0xA2int OpenDev(char*Dev){int comFd=open(Dev,O_RDWR|O_NOCTTY|O_NONBLOCK);//|O_NOCTTY|O_NDELAYif(-1==comFd){perror("Can't Open Serial Port");return-1;}elsereturn comFd;}/**設(shè)置波特率*@brief 設(shè)置串口通訊速率*@param fd類型int 打開串口的文件句柄*@param speed 類型int 串口速率*@return void*/void set_speed(int fd,int speed){int speed_arr[]={B38400,B19200,B9600,B4800,B2400,B1200,B300,B38400,B19200,B9600,B4800,B2400,B1200,B300,};iht name_arr[]={38400,19200,9600,4800,2400,1200,300,38400,19200,9600,4800,2400,1200,300,};int i;<!-- SIPO <DP n="5"> --><dp n="d5"/>int status;struct termios Opt;tcgetattr(fd,&Opt);//tagetattr()get the current options fot the port,ok;0 error;-1for(i=0;i<sizeof(speed_arr)/sizeof(int);i++){if (speed==name_arr[i]){tcflush(fd,TCIOFLUSH);//刷新輸入輸出緩沖cfsetispeed(&Opt,speed_arr[i]);cfsetospeed(&Opt,speed_arr[i]);status=tcsetattr(fd,TCSANOW,&Opt);//tcsetattr()set the new option for theport ok;0 error;-1if (status!=0){perror("tcsetattr fdl"),return,}tcflush(fd,TCIOFLUSH);}}}/*設(shè)置校驗的函數(shù)*//***@brief 設(shè)置串口數(shù)據(jù)位,停止位和效驗位*@param fd 類型 int 打開的串口文件句柄*@param databits 類型 int 數(shù)據(jù)位 取值為7或者8*@param stopbits 類型 int 停止位 取值為1或者2*@param parity 類型 int 效驗類型 取值為N,E,O,,S<!-- SIPO <DP n="6"> --><dp n="d6"/>*/int set_Parity(int fd,int databits,int stopbits,int parity){struct termios options;if (tcgetattr(fd,&options)!=0){perror("SetupSerial 1");return-1;}//printf("9999999999999\n");options.c_cflag&=~CSIZE;switch(databits)/*設(shè)置數(shù)據(jù)位數(shù)*/{case 7:options.c_cflag|=CS7;break;case 8:options.c_cflag|=CS8;break;default;fprintf(stderr,"Unsupported data size\n");return -1;}//printf("1111111111 8bit data\n");/*設(shè)置停止位*/switch(stopbits){case 1:optiohs.c_cflag&=~CSTOPB;<!-- SIPO <DP n="7"> --><dp n="d7"/>break;case 2:options.c_cflag|=CSTOPB;break;default:fprintf(stderr,"Unsupported stop bits\n");return -1;}int sendMsg(int comfd,unsigned char*sdata,int lenth){int fd=comfd;unsigned char msg[lenth];int jj;for(jj=0;jj<=lenth-1;jj++){msg[jj]=sdata[jj];//printf("msg[%d]=%c\n",msg[jj]);}unsigned char cmd[3]={0xAA,0xA1,0xA2};int ret:int len:len=sizeof(msg)+sizeof(cmd);unsigned char sendpack[lenth];sendpack
=DATA_HEAD;sendpack[len-1]=DATA_TAIL2;sendpack[len-2]=DATA_TAIL1;int i,l;<!-- SIPO <DP n="8"> --><dp n="d8"/>if(msg&&cmd){for(i=1;i<=sizeof(msg);i++){sendpack[i]=msg[i-1];}for(l=0;l<len;l++){printf("now print the sendpack[%d]=%d\n",l,sendpack[l]);}ret=write(fd,sendpack,len);if(ret>0){printf("have write%d msg\n",ret);return ret;}else{printf("write error!\n");return ret;}}}int main(int argc,char**argv){int fd;int send;int setp;time_t timer0,timer1;<!-- SIPO <DP n="9"> --><dp n="d9"/>unsigned char tmpMsg[8];struct tm *spCurrentTime=NULL;unsigned char*dev="/dev/ttyS0";//串口一timer0=time(NULL);if(NULL!=(spCurrentTime=gmtime(&timer0))){//char*cpTimeString=asctime(spCurrentTime):}else{return 0;}fd=OpenDev(dev);if(fd<0){printf("Can't 0pen Serial Port!\n");exit(0);}else{printf("ComOpened=%d\n",fd);}<!-- SIPO <DP n="10"> --><dp n="d10"/>set_speed(fd,4800);/*設(shè)置串口速率*/setp=set_Parity(fd,8,1,'N');printf("setp is:%d\n",setp);if(setp==-1){printf("Set Parity Error\n");exit(0);}while(1)//循環(huán)讀取數(shù)據(jù){timerl=time(NULL);if(timerl==timer0+1) /*判斷是否時間加一秒*/{spCurrentTime=localtime(&timerl)iTimeSec=spCurrentTime->tm_sec;iTimeMin=spCurrentTime->tm_min;iTimeHour=spCurrentTime->tm_hour;iTimeWday=spCurrentTime->tm_wday;//0-6iTimeMday=spCurrentTime->tm_mday;//1-31iTimeMon=spCurrentTime->tm_mon;//0-11iTimeYear=spCurrentTime->tm_year;//1900iTimeWday_ok=iTimeWday;iTimeMon_ok=iTimeMon+l;else if(iTimeYear<200)<!-- SIPO <DP n="11"> --><dp n="d11"/>send=sendMsg(fd,tmpMsg,sizeof(tmpMsg));/*將時間參數(shù)通過串口發(fā)出*/if(send<0){break;}printf("have Send%d char\n",send);timer0=timer1}}close(fd);exit(0);}
實施例1電路結(jié)構(gòu)簡單、功能強大、價格相對低廉??蓮V泛推廣應(yīng)用于展覽館、機場、街頭等公共場所中。
權(quán)利要求
1.一種基于嵌入式LINUX系統(tǒng)的實時遙控圖像接口電路,其特征在于它包括
(1)存儲LINUX系統(tǒng)程序及編譯的應(yīng)用主程序的FLASH閃存;
(2)與閃存及下述SDRAM存儲器、串行通信接口UART和遙控圖像AV接口互聯(lián)并進行控制,而且上電后將LINUX系統(tǒng)程序及編譯的應(yīng)用主程序從閃存加載到SDRAM的嵌入式系統(tǒng)CPU;
(3)運行初始化本發(fā)明各部分及接口程序的SDRAM;
(4)運行打開UART并設(shè)置正確的串行參數(shù)程序的SDRAM;
(5)運行對打開的UART的操作進行判斷,如果正確繼續(xù)執(zhí)行下一程序,如果不正確則返回初始化程序的SDRAM;
(6)運行對打開的UART進行數(shù)據(jù)監(jiān)控,每一秒鐘為一個間隔向UART發(fā)送數(shù)據(jù)程序的SDRAM;
(7)向嵌入式實時遙控圖像AV接口發(fā)送實時的時間數(shù)據(jù)的串行通信接口UART;
(8)對實時的時間數(shù)據(jù)進行處理,將當前接收到的數(shù)據(jù)與系統(tǒng)正在顯示的數(shù)據(jù)進行比較,如果時間參數(shù)沒有發(fā)生變化,則繼續(xù)獲取時間信息,如果時間參數(shù)發(fā)生變化則將新的時間信息傳輸?shù)斤@示終端的實時遙控圖像AV接口。
2.按照權(quán)利要求1所述的基于嵌入式LINUX系統(tǒng)的實時遙控圖像接口電路,其特征在于所說的嵌入式系統(tǒng)CPU采用SunPlus公司的SPHE1001A,閃存為8M字節(jié),SDRAM為32M。
3.按照權(quán)利要求1或2所述的基于嵌入式LINUX系統(tǒng)的實時遙控圖像接口電路,其特征在于所說的串行通信接口UART的參數(shù)為傳輸波特率4800,數(shù)據(jù)位8,無奇偶校驗,停止位1。
全文摘要
一種基于嵌入式LINUX系統(tǒng)的實時遙控圖像接口電路,屬于實時圖像顯示技術(shù)。包括存儲LINUX系統(tǒng)程序及應(yīng)用主程序的閃存;上電后將LINUX系統(tǒng)程序及應(yīng)用主程序從閃存加載到SDRAM的嵌入式系統(tǒng)CPU;運行初始化各部分及接口程序的SDRAM;運行打開UART并設(shè)置正確的串行參數(shù)程序的SDRAM;運行對打開的UART的操作進行判斷程序的SDRAM;運行對打開的UART進行數(shù)據(jù)監(jiān)控程序的SDRAM;向嵌入式實時遙控圖像AV接口發(fā)送實時的時間數(shù)據(jù)的串行通信接口UART;對實時的時間數(shù)據(jù)進行處理并傳輸?shù)斤@示終端的實時遙控圖像AV接口。它電路簡單、功能強大、價格低廉。可廣泛應(yīng)用于展覽館、機場、街頭等公共場所中。
文檔編號H04N5/765GK1801914SQ20051010464
公開日2006年7月12日 申請日期2005年12月27日 優(yōu)先權(quán)日2005年12月27日
發(fā)明者劉永波, 王文希, 林清武 申請人:海信集團有限公司