首页> 中国专利> 基于嵌入式LINUX系统的实时遥控图像接口电路

基于嵌入式LINUX系统的实时遥控图像接口电路

摘要

一种基于嵌入式LINUX系统的实时遥控图像接口电路,属于实时图像显示技术。包括存储LINUX系统程序及应用主程序的闪存;上电后将LINUX系统程序及应用主程序从闪存加载到SDRAM的嵌入式系统CPU;运行初始化各部分及接口程序的SDRAM;运行打开UART并设置正确的串行参数程序的SDRAM;运行对打开的UART的操作进行判断程序的SDRAM;运行对打开的UART进行数据监控程序的SDRAM;向嵌入式实时遥控图像AV接口发送实时的时间数据的串行通信接口UART;对实时的时间数据进行处理并传输到显示终端的实时遥控图像AV接口。它电路简单、功能强大、价格低廉。可广泛应用于展览馆、机场、街头等公共场所中。

著录项

  • 公开/公告号CN1801914A

    专利类型发明专利

  • 公开/公告日2006-07-12

    原文格式PDF

  • 申请/专利权人 海信集团有限公司;

    申请/专利号CN200510104643.1

  • 发明设计人 刘永波;王文希;林清武;

    申请日2005-12-27

  • 分类号H04N5/765(20060101);

  • 代理机构37101 青岛联智专利商标事务所有限公司;

  • 代理人宫乃斌

  • 地址 266071 山东省青岛市市南区江西路11号

  • 入库时间 2023-12-17 17:25:12

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2008-03-12

    授权

    授权

  • 2006-09-06

    实质审查的生效

    实质审查的生效

  • 2006-07-12

    公开

    公开

说明书

                          技术领域

本发明属于实时图像显示技术领域,更明确地说涉及一种随输入的时间数据实时产生相应的图像的基于嵌入式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_HEAD0xAA#define DATA_TAIL10xA1#define DATA_TAIL20xA2int 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;}else return comFd;}/**设置波特率*@brief设置串口通讯速率*@paramfd类型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,}; inti;<!-- SIPO <DP n="5"> --><dp n="d5"/> int status; struct termiosOpt; tcgetattr(fd,&Opt);//tagetattr()get the current options fot the port,ok;0 error;-1 for(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 ");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 ");return-1;}//printf("1111111111 8bit data ");/*设置停止位*/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 "); 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 ",msg[jj]);} unsigned char cmd[3]={0xAA,0xA1,0xA2};int ret:int len:len=sizeof(msg)+sizeof(cmd); unsigned char sendpack[lenth];sendpack[0]=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 ",l,sendpack[l]);} ret=write(fd,sendpack,len); if(ret>0){printf("have write%d msg ",ret);return ret;} else { printf("write error! ");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! "); exit(0); }else { printf("ComOpened=%d ",fd); }<!-- SIPO <DP n="10"> --><dp n="d10"/> set_speed(fd,4800);/*设置串口速率*/setp=set_Parity(fd,8,1,'N');printf("setp is:%d ",setp);if(setp==-1) {printf("Set Parity Error ");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-6 iTimeMday=spCurrentTime->tm_mday;//1-31 iTimeMon=spCurrentTime->tm_mon;//0-11 iTimeYear=spCurrentTime->tm_year;//1900 iTimeWday_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 ",send);timer0=timer1}}close(fd);exit(0);}

实施例1电路结构简单、功能强大、价格相对低廉。可广泛推广应用于展览馆、机场、街头等公共场所中。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号