⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vdc_api.c

📁 linux嵌入式开发程序
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <fcntl.h>#include <unistd.h>#include <sys/mman.h>#include <sys/stat.h>#include <linux/fr400cc_vdc.h>int fd;unsigned char *vdc_init();void vdc_close();/* VDC regs * PHTC  RHDC  RHFP  RHSC  RHBP * RVTC  RVDC  RVFP  RVSC  RVBP * RHIP  RVIP  RCK */static int prms_lcd[13] = {0,320, 10, 1,  10,0,240,10,1, 10,0,0,6};/*static int prms_rgb[13] = {858,640,11,67, 60,  1,480,2,4,16,0,0,2};static int prms_ntsc[13] ={858,720, 4, 4,130,262,240,2,4,16,0,0,4};*/unsigned char *vdc_init(){	unsigned char *Vram;	static struct	fr400vdc_config cfg;	/* open device file */	if((fd = open("/dev/fr400cc_vdc", O_RDONLY | O_NONBLOCK )) < 0){		fprintf(stderr, "fd=%d\n", fd);		exit(-1);	}	/*LCD and RGB config*/	cfg.pix_x = 320;	/*LCD width*/	cfg.pix_y = 240;	/*LCD height*/	cfg.pix_sz = 3;		/*byte per pixel*/	cfg.skipbf = 0;		/* skip bottom field */	cfg.buf_unit_sz = cfg.pix_x*cfg.pix_y*cfg.pix_sz;	/*buffer size*/	cfg.buf_num = 2;	/*frame buffer num*/	cfg.stop_immidiate = 1;	cfg.rd_count_buf_idx=1; 	bcopy(prms_lcd, cfg.prm, 4*13);	cfg.rddl = 1;		/* for underrun */	cfg.hls   = 0;	cfg.pal = 0;		/* PAL */	cfg.cscv  = 0;		/*direct*/	cfg.dbls = 0;	cfg.r601 = 0;	cfg.tfop = 0;	cfg.dsm  = 0; 	cfg.dfp  = 0;		/*pack RGB data*/	cfg.die  = 1;	cfg.enop = 0;	cfg.vsop = 0;	cfg.hsop = 0;	cfg.dsr = 0;	cfg.csron = 0;		// cursor	cfg.dpf  = 1;		/*RGB output*/	cfg.dms = 3;	cfg.dma_mode = 3;	cfg.dma_ats = 2;	cfg.dma_rs = 1;	/*mmap buffer*/	if((Vram = (unsigned char *)mmap(NULL, cfg.buf_unit_sz*cfg.buf_num,		PROT_READ | PROT_WRITE, MAP_SHARED,fd, 0))		==(void *)MAP_FAILED){		fprintf(stderr, "mmap err\n");		close(fd);		exit(-1);	}	/*set all buffer to 0 (black)*/	bzero(Vram,cfg.pix_x*cfg.pix_y*3);	/*set new config to vdc*/	if(ioctl(fd, VDCIOCSCFG, &cfg) != 0){		fprintf(stderr, "ioctl set cfg err\n");		close(fd);		exit(-1);	}	/*start vdc*/	ioctl(fd,VDCIOCSDAT, 0);	if(ioctl(fd, VDCIOCSTART, 0) != 0){		fprintf(stderr, "ioctl start err\n");		close(fd);		exit(-1);	}	return Vram;}void vdc_close(){	if(fd>0)	{		if(ioctl(fd, VDCIOCSTOP, 0) != 0){			printf("error stop VDC\n");			exit(-1);		}		close(fd);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -