專利名稱:基于嵌入式linux系統的實時遙控圖像接口電路的制作方法
技術領域:
本發明屬于實時圖像顯示技術領域,更明確地說涉及一種隨輸入的時間數據實時產生相應的圖像的基于嵌入式LINUX系統的實時遙控圖像接口電路的設計。
背景技術:
隨著大屏幕顯示技術的迅猛發展,實時的圖像顯示技術應用日益廣泛,其在公共場所的廣告效應得到充分肯定。但是,傳統的大屏幕顯示技術的電路結構均十分復雜,造價昂貴,而且其顯示的內容不夠靈活多變。因此,基于嵌入式LINUX系統設計的實時遙控圖像接口必定會以其強大的功能和相對低廉的價格,廣泛推廣應用于各種大屏幕時鐘和廣告。
發明內容
本發明的目的,就在于克服上述缺點和不足,提供一種基于嵌入式LINUX系統的實時遙控圖像接口電路。它電路結構簡單、功能強大、價格相對低廉。可廣泛推廣應用于展覽館、機場、街頭等公共場所中。
為了達到上述目的,本發明包括
(1)存儲LINUX系統程序及編譯的應用主程序的FLASH閃存;
(2)與閃存及下述SDRAM存儲器、串行通信接口UART和遙控圖像AV接口互聯并進行控制,而且上電后將LINUX系統程序及編譯的應用主程序從閃存加載到SDRAM的嵌入式系統CPU;
(3)運行初始化本發明各部分及接口程序的SDRAM;
(4)運行打開UART并設置正確的串行參數程序的SDRAM;
(5)運行對打開的UART的操作進行判斷,如果正確繼續執行下一程序,如果不正確則返回初始化程序的SDRAM;
(6)運行對打開的UART進行數據監控,每一秒鐘為一個間隔向UART發送數據程序的SDRAM;
(7)向嵌入式實時遙控圖像AV接口發送實時的時間數據的串行通信接口UART;
(8)對實時的時間數據進行處理,將當前接收到的數據與系統正在顯示的數據進行比較,如果時間參數沒有發生變化,則繼續獲取時間信息,如果時間參數發生變化,則將新的時間信息傳輸到顯示終端的實時遙控圖像AV接口。
嵌入式系統CPU采用SunPlus公司的SPHE1001A,閃存為8M字節,SDRAM為32M。
串行通信接口UART的參數為傳輸波特率4800,數據位8,無奇偶校驗,停止位1。
本發明主要包括有嵌入式系統CPU、FLASH、SDRAM、串行通信接口UART和標準的音視頻輸出實時遙控圖像AV接口等。
本發明中,嵌入式系統CPU采用SunPlus公司的SPHE1001A;8M字節的FLASH存儲器主要用來存儲嵌入式LINUX系統的內核以及編譯好的應用程序;SDRAM存儲器在系統上電后主要用來運行主程序;串行通信接口UART與外界通過串口進行實時的數據傳輸;標準的音視頻輸出AV接口用于把實時的音視頻信號傳輸到顯示終端進行顯示。
本發明可根據不同的設備通過串口輸入實時的時間參數,經過嵌入式系統的內部程序處理,最后經由標準的AV端口發送到顯示終端,從而實現實時的圖像顯示功能,由于通過串口的時間參數可以由用戶自由的控制,因此顯示的內容靈活多變,尤其在大屏幕戶外顯示方面具有強大的優勢。
本發明電路結構簡單、功能強大、價格相對低廉。可廣泛推廣應用于展覽館、機場、街頭等公共場所中。
圖1為本發明的電路原理方框圖。
圖2為其程序流程圖。
圖3為實時遙控圖像接口的輸出終端顯示效果圖。
具體實施例方式
實施例1。一種基于嵌入式LINUX系統的實時遙控圖像接口電路,如圖1~圖3所示。它包括
(1)存儲LINUX系統程序及編譯的應用主程序的FLASH閃存;
(2)與閃存及下述SDRAM存儲器、串行通信接口UART和遙控圖像AV接口互聯并進行控制,而且上電后將LINUX系統程序及編譯的應用主程序從閃存加載到SDRAM的嵌入式系統CPU;
(3)運行初始化本發明各部分及接口程序的SDRAM;
(4)運行打開UART并設置正確的串行參數程序的SDRAM;
(5)運行對打開的UART的操作進行判斷,如果正確繼續執行下一程序,如果不正確則返回初始化程序的SDRAM;
(6)運行對打開的UART進行數據監控,每一秒鐘為一個間隔向UART發送數據程序的SDRAM;
(7)向嵌入式實時遙控圖像AV接口發送實時的時間數據的串行通信接口UART;
(8)對實時的時間數據進行處理,將當前接收到的數據與系統正在顯示的數據進行比較,如果時間參數沒有發生變化,則繼續獲取時間信息,如果時間參數發生變化則將新的時間信息傳輸到顯示終端的實時遙控圖像AV接口。
如圖1所示,本發明主要包括嵌入式系統CPU101、FLASH閃存102、SDRAM103、標準的音視頻輸出實時遙控圖像AV接口104和UART串行通信接口105等組成。
如圖2所示,系統上電后,開始運行201,在CPU控制下,嵌入式系統內核和程序自動從FLASH加載到SDRAM中運行,。接著系統開始進行初始化各種設備和接口202,使主程序運行之前確保系統的狀態穩定,這樣使程序的可靠性和穩定性提高,避免出錯。
接著由于通信的需要,主程序會打開串口203,并設置正確的串口參數傳輸波特率4800,數據位8,無奇偶校驗,停止位1。為確保程序的正確執行,需要對此打開串口操作進行判斷,如果打開設備正確S04程序繼續向下執行,否則錯誤S05則返回重新進行初始化過程。
串口打開成功后,嵌入式系統程序對串口進行數據監控,日歷時間數據為BCD碼十六進制數11個字節,排列為AA,秒,分,時,周,日,月,年低位,年高位,A1,A2。按照這樣統一的規定,每一秒鐘為一個間隔,用戶可以不斷的通過串口向嵌入式實時遙控圖像接口發送實時的時間數據。
實時遙控圖像接口接到串口發來的數據后需要實時的對數據進行處理將當前接收到的數據與系統正在顯示的數據進行比較206,如果時間參數沒有發生變化S09,則繼續獲取時間信息205;否則如果時間參數變化則S08,實時顯示新的時間208。
為使動態顯示實時圖像的效果達到最佳,嵌入式系統采用了OSD菜單設計,使系統的資源得到充分利用。
圖3是本實施例的輸出終端顯示效果圖。從效果圖可以看出實時遙控圖像接口輸出的效果非常好,十分適合大屏幕顯示的各個應用場所。
本實施例的源代碼如下
#include<stdio.h>/*標準輸入輸出定義*/#include<stdlib.h> /*標準函數庫定義*/#include<unistd.h> /*Unix標準函數定義*/#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>/*文件控制定義*/#include<termios.h> /*PPSIX終端控制定義*/#include<errno.h>/*錯誤號定義*/#include<stdio.h>/*標準輸入輸出定義*/#include<stdlib.h> /*標準函數庫定義*/#include<unistd.h> /*Unix標準函數定義*/#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;}/**設置波特率*@brief 設置串口通訊速率*@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);}}}/*設置校驗的函數*//***@brief 設置串口數據位,停止位和效驗位*@param fd 類型 int 打開的串口文件句柄*@param databits 類型 int 數據位 取值為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)/*設置數據位數*/{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");/*設置停止位*/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);/*設置串口速率*/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)//循環讀取數據{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));/*將時間參數通過串口發出*/if(send<0){break;}printf("have Send%d char\n",send);timer0=timer1}}close(fd);exit(0);}
實施例1電路結構簡單、功能強大、價格相對低廉。可廣泛推廣應用于展覽館、機場、街頭等公共場所中。
權利要求
1.一種基于嵌入式LINUX系統的實時遙控圖像接口電路,其特征在于它包括
(1)存儲LINUX系統程序及編譯的應用主程序的FLASH閃存;
(2)與閃存及下述SDRAM存儲器、串行通信接口UART和遙控圖像AV接口互聯并進行控制,而且上電后將LINUX系統程序及編譯的應用主程序從閃存加載到SDRAM的嵌入式系統CPU;
(3)運行初始化本發明各部分及接口程序的SDRAM;
(4)運行打開UART并設置正確的串行參數程序的SDRAM;
(5)運行對打開的UART的操作進行判斷,如果正確繼續執行下一程序,如果不正確則返回初始化程序的SDRAM;
(6)運行對打開的UART進行數據監控,每一秒鐘為一個間隔向UART發送數據程序的SDRAM;
(7)向嵌入式實時遙控圖像AV接口發送實時的時間數據的串行通信接口UART;
(8)對實時的時間數據進行處理,將當前接收到的數據與系統正在顯示的數據進行比較,如果時間參數沒有發生變化,則繼續獲取時間信息,如果時間參數發生變化則將新的時間信息傳輸到顯示終端的實時遙控圖像AV接口。
2.按照權利要求1所述的基于嵌入式LINUX系統的實時遙控圖像接口電路,其特征在于所說的嵌入式系統CPU采用SunPlus公司的SPHE1001A,閃存為8M字節,SDRAM為32M。
3.按照權利要求1或2所述的基于嵌入式LINUX系統的實時遙控圖像接口電路,其特征在于所說的串行通信接口UART的參數為傳輸波特率4800,數據位8,無奇偶校驗,停止位1。
全文摘要
一種基于嵌入式LINUX系統的實時遙控圖像接口電路,屬于實時圖像顯示技術。包括存儲LINUX系統程序及應用主程序的閃存;上電后將LINUX系統程序及應用主程序從閃存加載到SDRAM的嵌入式系統CPU;運行初始化各部分及接口程序的SDRAM;運行打開UART并設置正確的串行參數程序的SDRAM;運行對打開的UART的操作進行判斷程序的SDRAM;運行對打開的UART進行數據監控程序的SDRAM;向嵌入式實時遙控圖像AV接口發送實時的時間數據的串行通信接口UART;對實時的時間數據進行處理并傳輸到顯示終端的實時遙控圖像AV接口。它電路簡單、功能強大、價格低廉。可廣泛應用于展覽館、機場、街頭等公共場所中。
文檔編號H04N5/765GK1801914SQ20051010464
公開日2006年7月12日 申請日期2005年12月27日 優先權日2005年12月27日
發明者劉永波, 王文希, 林清武 申請人:海信集團有限公司