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

📄 prp.c

📁 嵌入式Linux系统下,ov965摄像头驱动.
💻 C
字号:
/********************	eMMA PRP Driver********************/#include "prp.h"#include "khead.h"////	Module Basic Init//void PRP_module_init(void){//HCLK enable for eMMA	_reg_CRM_PCCR0 |= 0x8008000;	//bit 27 & bit 15	return;}////	PRP Module Reset//void PRP_reset(void){	_reg_EMMA_PRP_CNTL |= 0x10000;	return;}////	PRP Module Enable//	Unlock PRP, then enable within time limit//void PRP_enable(void){	volatile unsigned long lock;	while(1)	{		lock = _reg_EMMA_PRP_LOCK_BIT;	//unlock PRP		if(!(lock & 0x1))	//wait until idle			break;	}	_reg_EMMA_PRP_CNTL |= 0x1;	//verify	if(!(_reg_EMMA_PRP_CNTL & 0x1))		printk("PRP can't be unlock\n");}////	PRP Module Disable//void PRP_disable(void){	_reg_EMMA_PRP_CNTL &= ~0x1;}unsigned long PRP_poll_ch1_buf1_complete(void){	if(_reg_EMMA_PRP_INTRSTATUS & 0x40)	{		_reg_EMMA_PRP_INTRSTATUS = 0x40;		return 1;	} else		return 0;}unsigned long PRP_poll_ch1_buf2_complete(void){	if(_reg_EMMA_PRP_INTRSTATUS & 0x20)	{		_reg_EMMA_PRP_INTRSTATUS = 0x20;		return 1;	} else		return 0;}unsigned long PRP_poll_ch1_error(void){	if(_reg_EMMA_PRP_INTRSTATUS & 0x2) {		printk("PRP ch1 write error!\n");		_reg_EMMA_PRP_INTRSTATUS = 0x2;	//clear by writing '1'		return 1;	} else		return 0;}unsigned long PRP_poll_ch2_buf1_complete(void){	if(_reg_EMMA_PRP_INTRSTATUS & 0x10)	{		_reg_EMMA_PRP_INTRSTATUS = 0x10;		return 1;	} else		return 0;}unsigned long PRP_poll_ch2_buf2_complete(void){	if(_reg_EMMA_PRP_INTRSTATUS & 0x8) {		_reg_EMMA_PRP_INTRSTATUS = 0x8;		return 1;	} else		return 0;}unsigned long PRP_poll_ch2_error(void){	if(_reg_EMMA_PRP_INTRSTATUS & 0x4) {		printk("PRP ch2 write error!\n");		_reg_EMMA_PRP_INTRSTATUS = 0x4;		return 1;	} else		return 0;}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	CSI Input  : YUV422//	CSI Output : QVGA RGB565 (Stride to 320 x 240)///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// PRP_init33 : 320*240 --> 320*240void PRP_init33(unsigned long rgb, unsigned long y, unsigned long u, unsigned long v){	PRP_module_init();	PRP_reset();	_reg_EMMA_PRP_CNTL 			= 0x0000222D;	//LOOP mode	_reg_EMMA_PRP_CNTL 			|= 0x8000000;	//bug fix	_reg_EMMA_PRP_INTRCTRL 		= 0x00000000;	//disable interrupt	_reg_EMMA_PRP_SPIX_FMT 		= 0x20100888;	//YUV422 input, UYVY...	_reg_EMMA_PRP_SFRM_SIZE 	= 0x014000F0;	//source = 320 x 240	_reg_EMMA_PRP_SLIN_STRID 	= 0x1005984C;	_reg_EMMA_PRP_RSIZE_CTRL 	= 0x0b671000;		_reg_EMMA_PRP_RZ_HORI_CO1 	= 0x7;	_reg_EMMA_PRP_RZ_VERT_CO1 	= 0x7;	_reg_EMMA_PRP_RZ_HORI_VALID = 0x01000001;	_reg_EMMA_PRP_RZ_VERT_VALID = 0x01000001;		_reg_EMMA_PRP_DRGB1_PTR 	= rgb;			//output buf1	_reg_EMMA_PRP_DRGB2_PTR 	= rgb;			//output buf2	_reg_EMMA_PRP_DISIZE_CH1 	= 0x014000F0;	//dest size = 320 x 240	_reg_EMMA_PRP_DPIX_FMT 		= 0x2CA00565;	//RGB565 output	_reg_EMMA_PRP_DLST_CH1 		= 0x00000280;	//dest line stride = 640		return;}// PRP_init32 : 640*480 --> 320*240void PRP_init32(unsigned long rgb, unsigned long y, unsigned long u, unsigned long v){	PRP_module_init();	PRP_reset();	_reg_EMMA_PRP_CNTL 			= 0x0000222D;	//LOOP mode	_reg_EMMA_PRP_CNTL 			|= 0x8000000;	//bug fix	_reg_EMMA_PRP_INTRCTRL 		= 0x00000000;	//disable interrupt	_reg_EMMA_PRP_SPIX_FMT 		= 0x20100888;	//YUV422 input, UYVY...	_reg_EMMA_PRP_SFRM_SIZE 	= 0x028001E0;	//source = 640 x 480	_reg_EMMA_PRP_SLIN_STRID 	= 0x1005984C;	_reg_EMMA_PRP_RSIZE_CTRL 	= 0x0b671000;		_reg_EMMA_PRP_RZ_HORI_CO1 	= 0x24;	_reg_EMMA_PRP_RZ_VERT_CO1 	= 0x24;	_reg_EMMA_PRP_RZ_HORI_VALID = 0x02000002;	_reg_EMMA_PRP_RZ_VERT_VALID = 0x02000002;		_reg_EMMA_PRP_DRGB1_PTR 	= rgb;			//output buf1	_reg_EMMA_PRP_DRGB2_PTR 	= rgb;			//output buf2	_reg_EMMA_PRP_DISIZE_CH1 	= 0x014000F0;	//dest size = 320 x 240	_reg_EMMA_PRP_DPIX_FMT 		= 0x2CA00565;	//RGB565 output	_reg_EMMA_PRP_DLST_CH1 		= 0x00000280;	//dest line stride = 640		return;}// PRP_init31 : 1280*1024 --> 320*240void PRP_init31(unsigned long rgb, unsigned long y, unsigned long u, unsigned long v){	PRP_module_init();	PRP_reset();	_reg_EMMA_PRP_CNTL 			= 0x0000222D;	//LOOP mode	_reg_EMMA_PRP_CNTL 			|= 0x8000000;	//bug fix	_reg_EMMA_PRP_INTRCTRL 		= 0x00000000;	//disable interrupt	_reg_EMMA_PRP_SPIX_FMT 		= 0x20100888;	//YUV422 input, UYVY...	_reg_EMMA_PRP_SFRM_SIZE 	= 0x05000400;	//source = 1280 x 1024	_reg_EMMA_PRP_SLIN_STRID 	= 0x1005984C;	_reg_EMMA_PRP_RSIZE_CTRL 	= 0x0b671000;		_reg_EMMA_PRP_RZ_HORI_CO1 	= 0x492;	_reg_EMMA_PRP_RZ_VERT_CO1 	= 0x492;	_reg_EMMA_PRP_RZ_HORI_VALID = 0x04000008;	_reg_EMMA_PRP_RZ_VERT_VALID = 0x04000008;	_reg_EMMA_PRP_DRGB1_PTR 	= rgb;			//output buf1	_reg_EMMA_PRP_DRGB2_PTR 	= rgb;			//output buf2	_reg_EMMA_PRP_DISIZE_CH1 	= 0x014000F0;	//dest size = 320 x 240	_reg_EMMA_PRP_DPIX_FMT 		= 0x2CA00565;	//RGB565 output	_reg_EMMA_PRP_DLST_CH1 		= 0x00000280;	//dest line stride = 640	return;}

⌨️ 快捷键说明

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