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

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

?? camif.c

?? 2440 開發板的測試程序。包括uart,iic,lcd
?? C
?? 第 1 頁 / 共 3 頁
字號:
/************************************************************
File Name	: camif.c
Descriptions
 -S3C2440 camera test routines & basic libraries
History
 - July 23, 2003. Draft Version 0.0 by purnnamu
 - Janualy 15, 2004. Modifed by Boaz

Copyright 2004 SAMSUNG Electronics.
However, Anybody can use this code without our permission.  
*************************************************************/

#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"

#include "camif.h"
#include "camproset.h" // for camera setting

//*****************************************************************************
#define MVAL		(13)
#define MVAL_USED 	(0)		//0=each frame   1=rate by MVAL
#define BSWP		(0)		//Byte swap control
#define HWSWP		(0)		//Half word swap control

#define M5D(n) ((n) & 0x1fffff)	// To get lower 21bits

//TFT 240320
#define LCD_XSIZE_TFT_240320 	(240)	
#define LCD_YSIZE_TFT_240320 	(320)

//TFT 240320
//#define SCR_XSIZE_TFT_240320 	(640)
//#define SCR_YSIZE_TFT_240320 	(480)
#define SCR_XSIZE_TFT_240320 	(240)
#define SCR_YSIZE_TFT_240320 	(320)

//TFT240320
#define HOZVAL_TFT_240320	(LCD_XSIZE_TFT_240320-1)
#define LINEVAL_TFT_240320	(LCD_YSIZE_TFT_240320-1)

//Timing parameter for LCD LQ035Q7DB02
#define VBPD_240320		(2)		//垂直同步信號的后肩
#define VFPD_240320		(2)		//垂直同步信號的前肩
#define VSPW_240320		(4)		//垂直同步信號的脈寬

#define HBPD_240320		(8)		//水平同步信號的后肩
#define HFPD_240320		(8)		//水平同步信號的前肩
#define HSPW_240320		(6)		//水平同步信號的脈寬

#define CLKVAL_TFT_240320	(3) 	
//FCLK=180MHz,HCLK=90MHz,VCLK=6.5MHz

#define CLKVAL_TFT_640480	(1)		
//元太6.4寸TFT液晶屏V16C6448AC時鐘頻率典型值為25.175MHz
//FCLK = 180MHz, HCLK = PCLK = 90MHz
//VCLK = HCLK / [(CLKVAL+1) * 2]	 ( CLKVAL >= 0 )
//VCLK = 45MHz		//  34MHz < VCLK < 40MHz

//TFT 640480
#define LCD_XSIZE_TFT_640480 	(640)	
#define LCD_YSIZE_TFT_640480 	(480)

//TFT 640480
#define SCR_XSIZE_TFT_640480 	(640)
#define SCR_YSIZE_TFT_640480 	(480)

//TFT640480
#define HOZVAL_TFT_640480	(LCD_XSIZE_TFT_640480-1)
#define LINEVAL_TFT_640480	(LCD_YSIZE_TFT_640480-1)

//以下參數只針對元太6.4寸TFT液晶屏V16C6448AC
#define VGA350_MODE		0
#define FREEDOM_MODE		1

#if VGA350_MODE
	#define VBPD_640480		(33)	//垂直同步信號的后肩		VGA350模式,都是負極性
	#define VFPD_640480		(10)		//垂直同步信號的前肩
	#define VSPW_640480		(2)		//垂直同步信號的脈寬

	#define HBPD_640480		(48)		//水平同步信號的后肩
	#define HFPD_640480		(16)		//水平同步信號的前肩
	#define HSPW_640480		(96)		//水平同步信號的脈寬
#elif   FREEDOM_MODE
	#define VBPD_640480		(20)	//垂直同步信號的后肩		FREEDOM模式,都是正極性
	#define VFPD_640480		(16)		//垂直同步信號的前肩
	#define VSPW_640480		(2)		//垂直同步信號的脈寬

	#define HBPD_640480		(48)		//水平同步信號的后肩
	#define HFPD_640480		(16)		//水平同步信號的前肩
	#define HSPW_640480		(96)		//水平同步信號的脈寬
#endif

#if( DISP_TYPE == 1 )
	volatile static unsigned short LCD_BUFFER_CAM[SCR_YSIZE_TFT_240320][SCR_XSIZE_TFT_240320];
#elif( DISP_TYPE == 2 )
	volatile static unsigned short LCD_BUFFER_CAM[SCR_YSIZE_TFT_640480][SCR_XSIZE_TFT_640480];
#endif
//*****************************************************************************

volatile U32 camTestMode;
volatile U32 camCodecCaptureCount;
volatile U32 camPviewCaptureCount;
volatile U32 camCodecStatus;
volatile U32 camPviewStatus;
volatile U32 amount;

U32 save_GPJCON, save_GPJDAT, save_GPJUP;

U8 flagCaptured_P = 0;
U8 flagCaptured_C = 0;

extern void Lcd_Tft_V16C6448AC_Init( void ) ;
//*****************************************************************************
static void LCD_LTS350Q1_PE1_Init( void )
{
	rLCDCON1 = rLCDCON1 & 0x3fffe; // ENVID Off

	rGPCUP = 0xffffffff; // Disable Pull-up register
	rGPCCON = 0xaaaa56a9; //Initialize VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LEND 

	rGPDUP = 0xffffffff; // Disable Pull-up register
	rGPDCON = 0xaaaaaaaa; //Initialize VD[15:8]

	rLCDCON1 = ( CLKVAL_TFT_240320 << 8 ) | ( MVAL_USED << 7 ) | ( 3 << 5 ) | ( 12 << 1 ) | 0;
	// TFT LCD panel,12bpp TFT,ENVID=off
	rLCDCON2 = ( VBPD_240320 << 24 ) | ( LINEVAL_TFT_240320 << 14 ) | ( VFPD_240320 << 6 ) | ( VSPW_240320 );
	rLCDCON3 = ( HBPD_240320 << 19 ) | ( HOZVAL_TFT_240320 << 8 ) | ( HFPD_240320 );
	rLCDCON4 = ( MVAL << 8 ) | ( HSPW_240320 );
	rLCDCON5 = ( 1 << 11 ) | ( 0 << 9 ) | ( 0 << 8 ) | ( 0 << 6 ) | ( BSWP << 1 ) | ( HWSWP );	//FRM5:6:5,HSYNC and VSYNC are inverted

	rLCDSADDR1 = ( ( ( U32 ) LCD_BUFFER_CAM >> 22 ) << 21 ) | M5D( ( U32 ) LCD_BUFFER_CAM >> 1 );
	rLCDSADDR2 = M5D( ( ( U32 ) LCD_BUFFER_CAM + ( SCR_XSIZE_TFT_240320 * LCD_YSIZE_TFT_240320 * 2 ) ) >> 1 );
	rLCDSADDR3 = ( ( ( SCR_XSIZE_TFT_240320 - LCD_XSIZE_TFT_240320 ) / 1 ) << 11 ) | ( LCD_XSIZE_TFT_240320 / 1 );
	rLCDINTMSK |= ( 3 ); // MASK LCD Sub Interrupt
	rTCONSEL &= ~( ( 1 << 4 ) | 1 ); // Disable LCC3600, LPC3600
	rTPAL = 0; // Disable Temp Palette

	rLCDCON1 |= 1; // ENVID=ON
}


/**************************************************************
**************************************************************/
static void Lcd_V16C6448AC_Init( void )
{
	rLCDCON1 = rLCDCON1 & 0x3fffe; // ENVID Off

	rGPCUP = 0xffffffff; // Disable Pull-up register
	rGPCCON = 0xaaaa56a9; //Initialize VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LEND 

	rGPDUP = 0xffffffff; // Disable Pull-up register
	rGPDCON = 0xaaaaaaaa; //Initialize VD[15:8]

	rLCDCON1 = ( CLKVAL_TFT_640480 << 8 ) | ( MVAL_USED << 7 ) | ( 3 << 5 ) | ( 12 << 1 ) | 0;
	// TFT LCD panel,12bpp TFT,ENVID=off
	rLCDCON2 = ( VBPD_640480 << 24 ) | ( LINEVAL_TFT_640480 << 14 ) | ( VFPD_640480 << 6 ) | ( VSPW_640480 );
	rLCDCON3 = ( HBPD_640480 << 19 ) | ( HOZVAL_TFT_640480 << 8 ) | ( HFPD_640480 );
	rLCDCON4 = ( MVAL << 8 ) | ( HSPW_640480 );
	rLCDCON5 = ( 1 << 11 ) | ( 0 << 9 ) | ( 0 << 8 ) | ( 0 << 6 ) | ( BSWP << 1 ) | ( HWSWP );	//FRM5:6:5,HSYNC and VSYNC are inverted

	rLCDSADDR1 = ( ( ( U32 ) LCD_BUFFER_CAM >> 22 ) << 21 ) | M5D( ( U32 ) LCD_BUFFER_CAM >> 1 );
	rLCDSADDR2 = M5D( ( ( U32 ) LCD_BUFFER_CAM + ( SCR_XSIZE_TFT_640480 * LCD_YSIZE_TFT_640480 * 2 ) ) >> 1 );
	rLCDSADDR3 = ( ( ( SCR_XSIZE_TFT_640480 - LCD_XSIZE_TFT_640480 ) / 1 ) << 11 ) | ( LCD_XSIZE_TFT_640480 / 1 );
	rLCDINTMSK |= ( 3 ); // MASK LCD Sub Interrupt
	rTCONSEL &= ~( ( 1 << 4 ) | 1 ); // Disable LCC3600, LPC3600
	rTPAL = 0; // Disable Temp Palette

	rLCDCON1 |= 1; // ENVID=ON
}

//*****************************************************************************

void Camera_Test( void )
{
	int i;

	Uart_Printf( "\nCamera Preview Test\n" );

	CamReset();

	// Initializing camif
	rCLKCON |= ( 1 << 19 ); // enable camclk
	CamPortSet();	
	//ChangeUPllValue(60, 4, 1);		// UPLL clock = 96MHz, PLL input 16.9344MHz
	//--- hzh
	ChangeUPllValue( 56 , 2 , 1 );		// UPLL clock = 96MHz, PLL input 12MHz
	//---
	rCLKDIVN |= ( 1 << 3 ); // UCLK 48MHz setting for UPLL 96MHz
	// 0:48MHz, 1:24MHz, 2:16MHz, 3:12MHz...
	// Camera clock = UPLL/[(CAMCLK_DIV+1)X2]

	switch ( USED_CAM_TYPE )
	{
		case CAM_AU70H :
			if ( AU70H_VIDEO_SIZE == 1152 )
				SetCAMClockDivider( CAMCLK24000000 ); //Set Camera Clock for SXGA
			if ( AU70H_VIDEO_SIZE == 640 )
				SetCAMClockDivider( CAMCLK16000000 ); //Set Camera Clock for VGA
			break;
		case CAM_S5X3A1 :
			SetCAMClockDivider( CAMCLK24000000 ); //Set Camera Clock for SXGA
			break;
		default :
			// 24MHz
			SetCAMClockDivider( CAMCLK24000000 ); //Set Camera Clock 24MHz s5x532, ov7620
			break;
	}

	// Initializing camera module
	CamModuleReset(); // s5x532 must do this..
	Delay( 100 ); // ready time of s5x433, s5x532 IIC interface. needed...
	CameraModuleSetting();

	Uart_Printf( "Initializing end...\n" );

	Test_CamPreview() ;

	Uart_Printf( "\nCamera Preview Test End\n" );

	//	CamModuleReset(); // s5x532 must do this..

	rCLKCON &= ~( 1 << 19 ); // disable camclk
	
#if( DISP_TYPE == 1 )	
	Lcd_Tft_LTS350Q1_PE1_Init() ;		//
#elif( DISP_TYPE == 2 )
	Lcd_Tft_V16C6448AC_Init() ;		//Modufied by GongJun
#endif
}


void CamPortSet( void )
{
	save_GPJCON = rGPJCON;
	save_GPJDAT = rGPJDAT;
	save_GPJUP = rGPJUP;

	rGPJCON = 0x2aaaaaa;
	rGPJDAT = 0;
	rGPJUP = 0;

	//--- hzh
	rGPGCON &= ~( 3 << 24 );
	rGPGCON |= 1 << 24;
	rGPGUP |= 1 << 12;
#if (USED_CAM_TYPE==CAM_OV7620)
	rGPGDAT &= ~( 1 << 12 );
#else
	rGPGDAT |= 1 << 12;
#endif
	//---
}

void CamPortReturn( void )
{
	rGPJCON = save_GPJCON;
	rGPJDAT = save_GPJDAT;
	rGPJUP = save_GPJUP;
}

void CamPreviewIntUnmask( void )
{
	rINTSUBMSK &= ~( BIT_SUB_CAM_P );//INT CAMERA Port A ENABLE 
	rINTMSK &= ~( BIT_CAM );
}

void CamCodecIntUnmask( void )
{
	rINTSUBMSK &= ~( BIT_SUB_CAM_C );//INT CAMERA Port B ENABLE 
	rINTMSK &= ~( BIT_CAM );
}

void CamPreviewIntMask( void )
{
	rINTSUBMSK |= BIT_SUB_CAM_P;//INT CAMERA Port A ENABLE 
	rINTMSK |= ( BIT_CAM );
}

void CamCodecIntMask( void )
{
	rINTSUBMSK |= BIT_SUB_CAM_C;//INT CAMERA Port B ENABLE 
	rINTMSK |= ( BIT_CAM );
}


/******************************************************
 *  																								*    
 *  					 camera interface initialization							*
 *  																		  					*     
 *******************************************************/

void CamReset( void )
{
	rCIGCTRL |= ( 1 << 31 ); //camera I/F soft reset
	Delay( 10 );
	rCIGCTRL &= ~( 1 << 31 );
}

void CamModuleReset( void )
{
	switch ( USED_CAM_TYPE )
	{
		case CAM_OV7620 :
			// reset - active high
			//case CAM_S5X532 : // reset - active low, but H/W inverted.. so, in this case active high, masked by hzh
		case CAM_S5X433 :
			// reset - active low, but H/W inverted.. so, in this case active high
		case CAM_S5X3A1 :
			// reset - active low, but H/W inverted.. so, in this case active high
			rCIGCTRL |= ( 1 << 30 );	  //external camera reset high
			Delay( 30 );
			rCIGCTRL &= ~( 1 << 30 );	//external camera reset low
			break;
		case CAM_S5X532 :
			// reset - active low, move here by hzh
		case CAM_AU70H :
			// reset - active low
		default :
			rCIGCTRL &= ~( 1 << 30 );	//external camera reset low
			Delay( 10 );
			rCIGCTRL |= ( 1 << 30 ); //external camera reset high
			break;
	}
}

// 0:48MHz, 1:24MHz, 2:16MHz, 3:12MHz...
// Camera clock = UPLL/[(CAMCLK_DIV+1)X2]
void SetCAMClockDivider( int divn )
{
	rCAMDIVN = ( rCAMDIVN & ~( 0xf ) ) | ( 1 << 4 ) | ( divn ); // CAMCLK is divided..
}

/* Description of Parameters
CoDstWidth: Destination Width of Codec Path
CoDstHeight: Destination Height of Codec Path
PrDstWidth: Destination Width of Preview Path
PrDstHeight: Destination Height of Preview Path
WinHorOffset: Size of Window Offset for Horizontal Direction
WinVerOffset: Size of Window Offset for Vertical Direction
CoFrameBuffer: Start Address for Codec DMA
PrFrameBuffer: Start Address for Previe DMA
*/
void CamInit( U32 CoDstWidth , U32 CoDstHeight , U32 PrDstWidth , U32 PrDstHeight , U32 WinHorOffset ,
	U32 WinVerOffset , U32 CoFrameBuffer , U32 PrFrameBuffer )
{
	U32 WinOfsEn;
	U32 divisor, multiplier;
	U32 MainBurstSizeY, RemainedBurstSizeY, MainBurstSizeC, RemainedBurstSizeC, MainBurstSizeRGB, RemainedBurstSizeRGB;
	U32 H_Shift, V_Shift, PreHorRatio, PreVerRatio, MainHorRatio, MainVerRatio;
	U32 SrcWidth, SrcHeight;
	U32 ScaleUp_H_Co, ScaleUp_V_Co, ScaleUp_H_Pr, ScaleUp_V_Pr;

	//constant for calculating codec dma address
	if ( CAM_CODEC_OUTPUT )
		divisor = 2; //CCIR-422
	else

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久久久亚洲综合网| 久久综合久久综合亚洲| 欧美吻胸吃奶大尺度电影 | 国产精品久久影院| 日本美女一区二区三区视频| 不卡视频在线看| 日韩精品一区二区三区四区视频| 亚洲女性喷水在线观看一区| 国产自产高清不卡| 91精品欧美久久久久久动漫| 亚洲精品一二三| 国产成人av电影在线| 日韩午夜av一区| 亚洲一区二区三区视频在线| 成人高清视频免费观看| 精品国产91乱码一区二区三区| 亚洲国产精品精华液网站| 99久久精品国产一区二区三区| 久久蜜桃av一区二区天堂| 欧美a级一区二区| 欧美午夜电影在线播放| 亚洲丝袜美腿综合| 99久久99久久久精品齐齐| 欧美激情一区二区三区在线| 激情小说欧美图片| 精品国产91乱码一区二区三区| 免费成人av资源网| 成人做爰69片免费看网站| 亚洲综合激情另类小说区| 福利视频网站一区二区三区| 精品国产污污免费网站入口| 青青草国产成人av片免费| 欧美日本视频在线| 亚洲第一成年网| 欧美人体做爰大胆视频| 夜夜揉揉日日人人青青一国产精品| 色婷婷综合久久久中文字幕| 亚洲日本电影在线| 在线免费视频一区二区| 亚洲自拍欧美精品| 欧美区在线观看| 喷白浆一区二区| 久久亚洲精华国产精华液 | 亚洲免费观看在线视频| 91久久香蕉国产日韩欧美9色| 亚洲免费视频中文字幕| 欧美性感一类影片在线播放| 日韩福利电影在线| 精品理论电影在线观看| 福利视频网站一区二区三区| 亚洲天堂网中文字| 欧美群妇大交群中文字幕| 蜜臀久久99精品久久久画质超高清| 欧美一区二区人人喊爽| 久久电影网站中文字幕| 日本一区二区三区国色天香 | 欧美国产日韩一二三区| 91同城在线观看| 亚洲国产精品久久一线不卡| 精品久久久久久久久久久院品网 | 亚洲成在线观看| 日韩精品一区二区在线观看| 国产福利精品导航| 亚洲精品乱码久久久久久久久| 欧美群妇大交群中文字幕| 国产一区二区免费视频| 亚洲欧美另类综合偷拍| 91精品国产色综合久久ai换脸| 国产精品一级在线| 一区二区三区久久久| 久久夜色精品国产噜噜av | 国产suv精品一区二区三区| 亚洲乱码国产乱码精品精的特点| 在线综合亚洲欧美在线视频| 国产成人在线视频播放| 亚洲电影在线免费观看| 国产日本欧美一区二区| 欧美三级视频在线观看| 国产精品亚洲第一| 婷婷中文字幕综合| 亚洲天堂中文字幕| 久久综合九色综合97婷婷| 欧美午夜免费电影| 成人看片黄a免费看在线| 日本伊人精品一区二区三区观看方式| 中文字幕av一区 二区| 日韩一区二区精品在线观看| 一本一本久久a久久精品综合麻豆| 久99久精品视频免费观看| 亚洲一区二区在线观看视频 | 亚洲影院在线观看| 国产日韩欧美激情| 欧美变态tickling挠脚心| 91久久精品午夜一区二区| 亚洲精品成人天堂一二三| 国产大片一区二区| 亚洲一区二区三区在线看 | 久久99蜜桃精品| 亚洲国产一区二区三区青草影视| 久久精品视频在线看| 欧美一级片免费看| 欧洲在线/亚洲| 99久久综合国产精品| 国产成a人亚洲精| 国产一区二区三区黄视频 | 精品少妇一区二区三区免费观看| 国产主播一区二区| 日本女人一区二区三区| 亚洲成人激情av| 亚洲国产综合人成综合网站| 亚洲精品国产精华液| 久久精品视频免费观看| 亚洲精品一线二线三线| 日韩精品一区二区三区swag| 日韩欧美在线123| 日韩三级视频中文字幕| 日韩欧美不卡一区| 欧美成人精品福利| 2021中文字幕一区亚洲| 国产午夜精品久久久久久久 | 欧美精品电影在线播放| 欧美色倩网站大全免费| 欧美乱妇一区二区三区不卡视频| 欧美裸体一区二区三区| 欧美一区二区三区性视频| 欧美一区国产二区| 欧美成人a∨高清免费观看| 精品久久久久久久久久久久久久久久久 | 成人天堂资源www在线| av不卡在线观看| 91小视频在线免费看| 欧美日韩免费观看一区三区| 91精品国产日韩91久久久久久| 日韩欧美综合一区| 国产欧美一区二区精品性色超碰| 国产精品女主播av| 一区二区三区欧美日韩| 亚洲第四色夜色| 黄一区二区三区| 99国产精品国产精品久久| 欧美在线999| 日韩精品中文字幕一区二区三区 | 国产精品99久久久久久似苏梦涵| 成人免费视频视频在线观看免费| jiyouzz国产精品久久| 欧美自拍偷拍一区| 精品福利一二区| 亚洲精品日日夜夜| 精品一区二区三区视频在线观看| 成人毛片在线观看| 91麻豆精品国产自产在线| 国产日韩欧美精品综合| 亚洲主播在线观看| 国产成人av一区二区三区在线| 日本高清无吗v一区| 精品国产一区二区精华| 亚洲欧美视频一区| 国产一区二区三区最好精华液| 91啪在线观看| 2020国产精品久久精品美国| 一区二区免费在线| 国产精品77777竹菊影视小说| 欧美色图免费看| 欧美国产一区二区| 日韩精品国产欧美| av激情亚洲男人天堂| 精品欧美一区二区在线观看| 亚洲欧美精品午睡沙发| 国产在线精品免费av| 欧美日韩免费观看一区二区三区 | 精品少妇一区二区三区视频免付费 | gogogo免费视频观看亚洲一| 欧美一区二区三区在| 亚洲另类一区二区| 成人午夜激情片| 久久人人超碰精品| 日韩激情一区二区| 欧美亚洲图片小说| 亚洲视频小说图片| 国产91精品精华液一区二区三区| 日韩欧美中文一区| 午夜国产不卡在线观看视频| 一本久道中文字幕精品亚洲嫩| 久久久久久久久一| 久久精品国产免费| www.色精品| 日韩精品专区在线| 日韩和欧美一区二区三区| 色哟哟国产精品| 最好看的中文字幕久久| 成人av在线资源网| 国产人成一区二区三区影院| 久久激情五月激情| 日韩欧美综合一区| 理论片日本一区| 欧美一区二区女人| 男女激情视频一区| 日韩欧美你懂的| 精品一区二区三区久久久| 日韩欧美国产午夜精品|