亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? camproset.c

?? 2440 開發板的測試程序。包括uart,iic,lcd
?? C
字號:
/******************************************************************************

 Filename:	camproset.c

 Descriptions		
 - Camera Processor Initialization code using SCCB.
 - SCCB(Serial Camera Contol Bus) H/W dependent code.
 - Camera Processor Initialization code using IIC.

 History
  - July 23, 2003. Draft Version 0.0 by purnnamu
  - Janualy 15, 2004. Modifed by Boaz
  - Feb. 10, 2004. Modified by junon for S3C2440A

 
 Copyright (c) 2003 SAMSUNG Electronics.
 # However, Anybody can use this code without our permission.  

 ******************************************************************************/
#include "def.h"
#include "2440addr.h"
#include "2440lib.h"

#include "camproset.h"
#include "camdef.h"
#include "camdata.h"


#define CAMWRDATA      (1)
#define CAMRDDATA      (3)
#define CAMSETRDADDR   (4)

#define CAMIICBUFSIZE 0x20


#if USED_CAM_TYPE==CAM_OV7620
	#define CAM_ID		(0x42)
	#define CAM_NAME  "OV7620"
#elif USED_CAM_TYPE==CAM_S5X433
	#define CAM_ID		(0x42)
	#define CAM_NAME  "S5X433"
#elif USED_CAM_TYPE==CAM_S5X532
	#define CAM_ID		(0x5a)
	#define CAM_NAME  "S5X532"
#elif USED_CAM_TYPE==CAM_S5X3A1
	#define CAM_ID		(0x5a)
	#define CAM_NAME  "S5X3A1"
#elif USED_CAM_TYPE==CAM_AU70H
	#define CAM_ID		(0x22)
	#define CAM_NAME  "AU70H"
#elif USED_CAM_TYPE==CAM_SAA7113H		//modufied by GongJun
	#define CAM_ID		(0x33)
	#define CAM_NAME  "SAA7113H"
#endif


static U8 _CAMiicData[CAMIICBUFSIZE];
static volatile int _CAMiicDataCount;
static volatile int _CAMiicStatus;
static volatile int _CAMiicMode;
static int _CAMiicPt;

volatile U32 save_GPECON;


void* func_cammodule_test[][2] =
{
	//IIC 	
	( void* ) Camera_WriteByte, "Write 1 byte data into Camera module register", ( void* ) Camera_ReadByte,
	"Read 1 byte data from Camera module register", ( void* ) Camera_WriteBlock,
	"Write a block of byte data into Camera module register", ( void* ) Camera_ReadBlock,
	"Read a block of byte data from Camera module register", 0, 0
};


void Camera_Iic_Test( void )
{
	int i, camclk;

	CameraModuleSetting();

	Uart_Printf( "\n***** IIC Master Tx/Rx Test Program with %s Camera Module *****\n" , CAM_NAME );

	while ( 1 )
	{
		i = 0;
		Uart_Printf( "\n\n" );

		while ( 1 )
		{
			//display menu
			Uart_Printf( "%2d:%s\n" , i , func_cammodule_test[i][1] );
			i++;
			if ( ( int ) ( func_cammodule_test[i][0] ) == 0 )
			{
				Uart_Printf( "\n" );
				break;
			}
			if ( ( i % 4 ) == 0 )
				Uart_Printf( "\n" );
		}

		Uart_Printf( "\nPress Enter key to exit : " );
		i = Uart_GetIntNum();

		if ( i == -1 )
			break;		// return.
		if ( i >= 0 && ( i < ( ( sizeof( func_cammodule_test ) - 1 ) / 8 ) ) )	// select and execute...
			( ( void ( * ) ( void ) ) ( func_cammodule_test[i][0] ) ) ();
	}

	Uart_Printf( "\n" );
	rINTMSK |= BIT_IIC;
}


void IicPortSet( void )
{
	save_GPECON = rGPECON;
	rGPECON = rGPECON & ~( 0xf << 28 ) | ( 0xa << 28 );	//GPE15:IICSDA , GPE14:IICSCL 	 
}

void IicPortReturn( void )
{
	rGPECON = save_GPECON;
}

void Wr_CamIIC( U32 slvAddr , U32 addr , U8 data )
{
	_CAMiicMode = CAMWRDATA;
	_CAMiicPt = 0;
	_CAMiicData[0] = ( U8 ) addr;
	_CAMiicData[1] = data;
	_CAMiicDataCount = 2;

	rIICDS = slvAddr;   		 //0x5a: S5X532 Slave ID 
	rIICSTAT = 0xf0; //Start Master TX Condition	
	rIICCON &= ~( 1 << 4 );   //Clearing the pending bit isn't needed because the pending bit has been cleared.

	while ( _CAMiicDataCount != -1 );
}

void Rd_CamIIC( U32 slvAddr , U32 addr , U8* data )
{
	/*IIC Slave Addr Write + IIC Reg Addr Write */	
	_CAMiicMode = CAMSETRDADDR;
	_CAMiicPt = 0;
	_CAMiicData[0] = ( U8 ) addr;
	_CAMiicDataCount = 1;

	rIICDS = slvAddr;
	rIICSTAT = 0xf0;   //Master Tx, Start
	rIICCON &= ~( 1 << 4 ); 				   //Resumes IIC operation.  
	//Clearing the pending bit isn't needed because the pending bit has been cleared.
	while ( _CAMiicDataCount != -1 );

	_CAMiicMode = CAMRDDATA;
	_CAMiicPt = 0;
	_CAMiicDataCount = 1;

	rIICDS = slvAddr;
	rIICSTAT = 0xb0;					//Master Rx,Start
	rIICCON &= ~( 1 << 4 ); 				  //Resumes IIC operation.   

	while ( _CAMiicDataCount != -1 );

	*data = _CAMiicData[1];
}


void __irq Cam_IICInt( void )
{
	U32 iicSt, i;

	ClearPending( BIT_IIC );
	iicSt = rIICSTAT; 
	rINTMSK |= BIT_IIC;

	if ( iicSt & 0x8 )
	{
	}   		//When bus arbitration is failed.
	if ( iicSt & 0x4 )
	{
	}   		//When a slave address is matched with IICADD
	if ( iicSt & 0x2 )
	{
	}   		//When a slave address is 0000000b
	if ( iicSt & 0x1 )
	{
	}   		//When ACK isn't received

	switch ( _CAMiicMode )
	{
		case CAMRDDATA:
			if ( ( _CAMiicDataCount-- ) == 0 )
			{
				_CAMiicData[_CAMiicPt++] = rIICDS;

				rIICSTAT = 0x90;	  //Stop MasRx condition 
				rIICCON &= ~( 1 << 4 ); 	 //Resumes IIC operation.
				Delay( 1 ); 				//Wait until stop condtion is in effect., Too long time...  # need the time 2440:Delay(1), 24A0: Delay(2)
				//The pending bit will not be set after issuing stop condition.
				break;
			}      
			_CAMiicData[_CAMiicPt++] = rIICDS;     //The last data has to be read with no ack.

			if ( ( _CAMiicDataCount ) == 0 )
				rIICCON &= ~( ( 1 << 7 ) | ( 1 << 4 ) );	  //Resumes IIC operation with NOACK in case of S5X532 Cameara  
			//				rIICCON = 0x6f;			//Resumes IIC operation with NOACK in case of S5X532 Cameara	
			else
				rIICCON &= ~( 1 << 4 ); 	 //Resumes IIC operation with ACK
			break;
		case CAMWRDATA:
			if ( ( _CAMiicDataCount-- ) == 0 )
			{
				rIICSTAT = 0xd0;				//stop MasTx condition 
				rIICCON &= ~( 1 << 4 ); 			   //resumes IIC operation.
				Delay( 1 ); 					  //wait until stop condtion is in effect. # need the time 2440:Delay(1), 24A0: Delay(2)
				//The pending bit will not be set after issuing stop condition.
				break;
			}
			rIICDS = _CAMiicData[_CAMiicPt++];  	  //_iicData[0] has dummy.
			for ( i = 0; i < 10; i++ )
				;   			   //for setup time until rising edge of IICSCL
			rIICCON &= ~( 1 << 4 ); 					//resumes IIC operation.
			break;
		case CAMSETRDADDR:
			//Uart_Printf("[S%d]",_iicDataCount);
			if ( ( _CAMiicDataCount-- ) == 0 )
			{
				rIICSTAT = 0xd0;				//stop MasTx condition 
				rIICCON &= ~( 1 << 4 ); 			   //resumes IIC operation.
				Delay( 1 ); 	 //wait until stop condtion is in effect.

				break;  				//IIC operation is stopped because of IICCON[4]    
			}
			rIICDS = _CAMiicData[_CAMiicPt++];
			for ( i = 0; i < 10; i++ )
				;   	   //for setup time until rising edge of IICSCL
			rIICCON &= ~( 1 << 4 ); 			//resumes IIC operation.
			break;
		default:
			break;
	}

	rINTMSK &= ~BIT_IIC;
}


void Camera_WriteByte( void )
{
	unsigned int i, j, save_E, save_PE, RegAddr, RegData, pageNo;

#if (USED_CAM_TYPE==CAM_S5X532)||(USED_CAM_TYPE==CAM_S5X3A1)
	Uart_Printf( "Input Write Page No of %s\n=>" , CAM_NAME );
	pageNo = ( U8 ) Uart_GetIntNum();
#endif

	Uart_Printf( "Input Write Register Address of %s\n=>" , CAM_NAME );
	RegAddr = ( U8 ) Uart_GetIntNum();

	Uart_Printf( "Input Write Transfer Data into %s\n=>" , CAM_NAME );
	RegData = ( U8 ) Uart_GetIntNum();

#if (USED_CAM_TYPE==CAM_S5X532)||(USED_CAM_TYPE==CAM_S5X3A1)
	Wr_CamIIC( CAM_ID , ( U8 ) 0xec , pageNo );  // set Page no
#endif
	Wr_CamIIC( CAM_ID , ( U8 ) RegAddr , RegData ); // set register after setting page number
}


void Camera_ReadByte( void )
{
	unsigned int i, j, save_E, save_PE, RegAddr, RegData, pageNo;
	static U8 rdata[8];

#if (USED_CAM_TYPE==CAM_S5X532)||(USED_CAM_TYPE==CAM_S5X3A1)
	Uart_Printf( "Input Write Page No of %s\n=>" , CAM_NAME );
	pageNo = ( U8 ) Uart_GetIntNum();
	Wr_CamIIC( CAM_ID , ( U8 ) 0xec , pageNo );  // set Page no
#endif

	Uart_Printf( "Input Read Register Address of %s\n=>" , CAM_NAME );
	RegAddr = ( U8 ) Uart_GetIntNum();
	Rd_CamIIC( CAM_ID , RegAddr , &rdata[0] ); 
	Uart_Printf( "Register Addr: 0x%2x, data: 0x%2x\n" , RegAddr , rdata[0] );
}


void Camera_WriteBlock( void )
{
	unsigned int i, j, save_E, save_PE, RegAddr, RegData;
	static U8 rdata[256]; 

#if USED_CAM_TYPE==CAM_OV7620
	for ( i = 0; i < ( sizeof( Ov7620_YCbCr8bit ) / 2 ); i++ )
		Wr_CamIIC( CAM_ID , Ov7620_YCbCr8bit[i][0] , Ov7620_YCbCr8bit[i][1] );
#elif USED_CAM_TYPE==CAM_S5X532
	for ( i = 0; i < ( sizeof( S5X532_YCbCr8bit ) / 2 ); i++ )
		Wr_CamIIC( CAM_ID , S5X532_YCbCr8bit[i][0] , S5X532_YCbCr8bit[i][1] );
#elif USED_CAM_TYPE==CAM_S5X3A1
	for ( i = 0; i < ( sizeof( S5X3A1_YCbCr8bit ) / 2 ); i++ )
		Wr_CamIIC( CAM_ID , S5X3A1_YCbCr8bit[i][0] , S5X3A1_YCbCr8bit[i][1] );
#elif USED_CAM_TYPE==CAM_AU70H
	for ( i = 0; i < ( sizeof( Au70h ) / 2 ); i++ )
		Wr_CamIIC( CAM_ID , Au70h[i][0] , Au70h[i][1] );
#endif

	Uart_Printf( "\nBlock TX Ended...\n" );
}


void Camera_ReadBlock( void )
{
	unsigned int i, j, save_E, save_PE, RegAddr, RegData;
	static U8 rdata[256]; 

#if USED_CAM_TYPE==CAM_OV7620
	for ( i = 0; i < ( sizeof( Ov7620_YCbCr8bit ) / 2 ); i++ )
		Rd_CamIIC( CAM_ID , Ov7620_YCbCr8bit[i][0] , &rdata[i] ); 
	for ( i = 0; i < ( sizeof( Ov7620_YCbCr8bit ) / 2 ); i++ )
		Uart_Printf( "Addr: 0x%2x, W: 0x%2x, R: 0x%2x\n" , Ov7620_YCbCr8bit[i][0] , Ov7620_YCbCr8bit[i][1] , rdata[i] );
#elif USED_CAM_TYPE==CAM_S5X532
	for ( i = 0; i < ( sizeof( S5X532_YCbCr8bit ) / 2 ); i++ )
	{
		if ( S5X532_YCbCr8bit[i][0] == 0xec )
			Wr_CamIIC( CAM_ID , S5X532_YCbCr8bit[i][0] , S5X532_YCbCr8bit[i][1] );
		else
			Rd_CamIIC( CAM_ID , S5X532_YCbCr8bit[i][0] , &rdata[i] );
	}
	for ( i = 0; i < ( sizeof( S5X532_YCbCr8bit ) / 2 ); i++ )
	{
		if ( S5X532_YCbCr8bit[i][0] == 0xec )
			Uart_Printf( "Page: 0x%2x\n" , S5X532_YCbCr8bit[i][1] );
		else
			Uart_Printf( "Addr: 0x%2x, W: 0x%2x, R: 0x%2x\n" , S5X532_YCbCr8bit[i][0] , S5X532_YCbCr8bit[i][1] ,
				rdata[i] );
	}      
#elif USED_CAM_TYPE==CAM_S5X3A1
	for ( i = 0; i < ( sizeof( S5X3A1_YCbCr8bit ) / 2 ); i++ )
	{
		if ( S5X3A1_YCbCr8bit[i][0] == 0xec )
			Wr_CamIIC( CAM_ID , S5X3A1_YCbCr8bit[i][0] , S5X3A1_YCbCr8bit[i][1] );
		else
			Rd_CamIIC( CAM_ID , S5X3A1_YCbCr8bit[i][0] , &rdata[i] );
	}
	for ( i = 0; i < ( sizeof( S5X3A1_YCbCr8bit ) / 2 ); i++ )
	{
		if ( S5X3A1_YCbCr8bit[i][0] == 0xec )
			Uart_Printf( "Page: 0x%2x\n" , S5X3A1_YCbCr8bit[i][1] );
		else
			Uart_Printf( "Addr: 0x%2x, W: 0x%2x, R: 0x%2x\n" , S5X3A1_YCbCr8bit[i][0] , S5X3A1_YCbCr8bit[i][1] ,
				rdata[i] );
	} 		 
#elif USED_CAM_TYPE==CAM_AU70H
	for ( i = 0; i < ( sizeof( Au70h ) / 2 ); i++ )
		Rd_CamIIC( CAM_ID , Au70h[i][0] , &rdata[i] ); 
	for ( i = 0; i < ( sizeof( Au70h ) / 2 ); i++ )
		Uart_Printf( "Addr: 0x%2x, W: 0x%2x, R: 0x%2x\n" , Au70h[i][0] , Au70h[i][1] , rdata[i] );
#endif
}


int CameraModuleSetting( void )
{
	unsigned int i, j, save_E, save_PE, RegAddr, RegData;
	static U8 rdata[256]; 
	int donestatus;

	IicPortSet();

	// for camera init, added by junon
	pISR_IIC = ( unsigned ) Cam_IICInt; 
	rINTMSK &= ~( BIT_IIC );

	//Enable ACK, Prescaler IICCLK=PCLK/512, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
	rIICCON = ( 1 << 7 ) | ( 1 << 6 ) | ( 1 << 5 ) | ( 0x3 );

	rIICADD = 0x10; 				   //24A0 slave address = [7:1]
	rIICSTAT = 0x10;					//IIC bus data output enable(Rx/Tx)
	rIICLC = ( 1 << 2 ) | ( 3 );   			// SDAOUT has 5clock cycle delay

	donestatus = 1;

	Camera_WriteBlock();
	//	Camera_ReadBlock();

	return donestatus;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品亚洲国内自在自线福利| 中文字幕av一区二区三区| 极品美女销魂一区二区三区| 综合久久久久综合| 久久亚洲综合av| 欧美一区二区免费视频| 色噜噜狠狠成人网p站| 成人av电影在线播放| 风间由美中文字幕在线看视频国产欧美 | 6080午夜不卡| 国产精品亚洲视频| 成人久久18免费网站麻豆| 狠狠色丁香九九婷婷综合五月| 亚洲成人av一区| 亚洲综合视频在线| 一区二区三区四区激情| 国产精品久久久久一区二区三区| 久久亚洲捆绑美女| 久久嫩草精品久久久久| 日韩欧美电影一二三| 3d成人动漫网站| 日韩精品综合一本久道在线视频| 在线播放中文字幕一区| 欧美日本免费一区二区三区| 8x福利精品第一导航| 欧美日韩你懂的| 欧美一区二区三区四区五区| 在线播放视频一区| 日韩三级av在线播放| 欧美sm极限捆绑bd| 欧美国产激情一区二区三区蜜月| 国产欧美日韩亚州综合| 亚洲欧美在线观看| 亚洲国产精品成人久久综合一区| 亚洲国产成人在线| 成人欧美一区二区三区视频网页| 亚洲免费成人av| 午夜视频在线观看一区二区 | 欧美伊人久久久久久午夜久久久久| 国产成人在线免费| 91色在线porny| 欧美亚洲国产一卡| 精品国产乱码久久久久久浪潮 | 中文字幕中文字幕一区| 亚洲欧美韩国综合色| 午夜久久电影网| 激情都市一区二区| 色婷婷综合久久久中文字幕| 在线免费观看日韩欧美| 色菇凉天天综合网| 日韩精品影音先锋| 亚洲免费观看在线观看| 蜜臀va亚洲va欧美va天堂| 国产一区二区久久| 欧美私人免费视频| 久久精品人人做人人综合| 中文字幕在线观看不卡视频| 亚洲制服丝袜一区| 成人激情动漫在线观看| 欧美精品丝袜中出| 中文字幕不卡一区| 日本不卡1234视频| 91蜜桃婷婷狠狠久久综合9色| 欧美日韩久久一区二区| 7777精品伊人久久久大香线蕉| 欧美成人三级电影在线| 一区二区三区在线视频免费| 色噜噜狠狠成人中文综合| 日韩精品一区二区三区在线播放| 一区在线播放视频| 国产曰批免费观看久久久| 91成人免费在线视频| 久久久99精品免费观看不卡| 无吗不卡中文字幕| 91视频免费看| 国产亚洲精品久| 一区二区三区在线高清| 国产盗摄一区二区三区| 色呦呦网站一区| 日本一区二区动态图| 日韩电影在线观看电影| 欧美性受xxxx黑人xyx性爽| 欧美国产精品中文字幕| 国产又粗又猛又爽又黄91精品| 91精品久久久久久久99蜜桃| 一区二区三区四区蜜桃| av一区二区不卡| 欧美不卡在线视频| 捆绑调教美女网站视频一区| 欧美三级视频在线| 亚洲韩国精品一区| 欧美在线免费观看视频| 亚洲二区视频在线| 欧美片在线播放| 日本不卡在线视频| 欧美电影免费观看完整版| 日韩精品色哟哟| 91精品国产综合久久久久久漫画 | 亚洲丝袜另类动漫二区| 国产成人免费视频网站高清观看视频| 欧美一区二区三区播放老司机| 日韩av电影免费观看高清完整版在线观看| 91麻豆免费看片| 一区二区三区国产| 欧洲中文字幕精品| 亚洲成人黄色小说| 91精品欧美综合在线观看最新| 日本美女一区二区| 精品国产一区二区三区久久久蜜月 | 91丝袜美腿高跟国产极品老师| 国产精品视频第一区| 成人黄色软件下载| 亚洲午夜久久久久久久久久久| 欧美系列在线观看| 久久精品久久99精品久久| www国产成人| 成人毛片视频在线观看| 亚洲人成网站在线| 日韩欧美自拍偷拍| 国产成人精品1024| 亚洲欧洲av色图| 宅男噜噜噜66一区二区66| 国产米奇在线777精品观看| 欧美国产精品中文字幕| 欧美日韩精品一区二区天天拍小说| 亚洲午夜免费福利视频| 欧美色欧美亚洲另类二区| 蜜臀久久99精品久久久画质超高清| 精品国产乱码久久久久久老虎| 粉嫩嫩av羞羞动漫久久久| 亚洲不卡一区二区三区| 国产婷婷色一区二区三区四区 | 国产欧美精品一区二区三区四区 | 6080国产精品一区二区| 国产一区二区在线观看视频| 亚洲激情欧美激情| 久久品道一品道久久精品| 欧美午夜宅男影院| 成人av在线资源| 欧美aaaaa成人免费观看视频| 国产精品三级久久久久三级| 欧美日韩一卡二卡| 成人av免费在线观看| 老司机一区二区| 亚洲综合色婷婷| 中文字幕二三区不卡| 欧美一区二区日韩| 欧美性淫爽ww久久久久无| 国产高清不卡一区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 成人亚洲一区二区一| 日本亚洲一区二区| 亚洲欧美激情小说另类| 欧美国产精品专区| 精品国产乱码久久久久久久久| 久久综合色8888| 国产在线看一区| 精品三级在线看| 日本韩国精品一区二区在线观看| 国产一区二区三区在线看麻豆| 丝袜亚洲另类欧美| 国产成人精品午夜视频免费| 亚洲激情图片小说视频| 久久99久久99| 国产剧情在线观看一区二区| 93久久精品日日躁夜夜躁欧美| 懂色av一区二区夜夜嗨| 色偷偷久久一区二区三区| 精品久久国产97色综合| 亚洲与欧洲av电影| 成人午夜伦理影院| 精品美女在线观看| 香蕉av福利精品导航| 成人h版在线观看| 久久综合色之久久综合| 天天色综合成人网| 欧美在线高清视频| 亚洲欧洲美洲综合色网| 国产在线视频一区二区三区| 欧美喷潮久久久xxxxx| 亚洲情趣在线观看| 暴力调教一区二区三区| 久久久久久久久99精品| 日本不卡的三区四区五区| 色美美综合视频| 中文字幕一区二区三| 国产麻豆成人精品| 精品福利在线导航| 久久精品久久久精品美女| 制服丝袜亚洲色图| 日韩电影免费在线| 欧美人狂配大交3d怪物一区| 亚洲一区电影777| 色婷婷精品大在线视频| 日韩理论片中文av| 色综合久久99| 亚洲一区二区三区激情| 欧美专区在线观看一区| 亚洲一区二区三区国产| 欧美无砖砖区免费|