📄 _fpcap.c
字号:
/****************************************************************
* *
* Program : _FpCap.C *
* *
* Purpose : Handler for Fp capture. *
* *
* Compile : ARM SDT Ver2.51 *
* *
* Version : 1.00 *
* *
* Create : 2002-12-30 Monday By KWM *
* *
* Copyright (C) 2002 Amnokgang Technology Development Corp. *
* All Rights Reserved. *
* *
****************************************************************/
#include "_MyType.h"
#include "_Bios.h"
#include "lib_AT91RM9200.h"
//#include "console.h"
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/* keyword : YMMFAB */
/* You must modify follow according board */
/* ---------------------------------------------- */
#define VRAM_M ((volatile)0x40100000) /* VRAM address 256k */
#define MBF_REGINDEX ((volatile)0x40000000) /* VRAM address 256k */
#define MBF_REGDATA ((volatile)0x40000002) /* VRAM address 256k */
#define Wr7620Slave_M 0x42 /* OV7620 writting address */
#define Rd7620Slave_M 0x43 /* OV7620 reading address */
#define Bright 0x20
//#define Bright 0x20
#define Contrast 0xe0
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
const unsigned char CMOSRegValue [] = {
0x12,0x80, /* 12 Soft Reset */
0x12,0x20, /* " */
0x00,0x00, /* 00 Gain Setting */
0x01,0x80, /* 01 Blue Channel Balance Value*/
0x02,0x80, /* 02 Red Channel Balance Value */
0x03,0x00, /* 03 Saturation Adjustment */
0x07,0x00, /* 07 Analog Sharpness control */
0x0C,0x20, /* 0C White Balance background control - Blue channel */
0x0D,0x20, /* 0D White Balance background control - Red channel */
0x11,0x02, /* 11 Clock rate control */
0x12,0x20, /* 12 Common A */
0x13,0x00, /* 13 Common B */
0x14,0x00, /* 14 Common C */
0x15,0x01, /* 15 Common D */
0x16,0x03, /* 16 Frame Drop */
0x17,0x3F, /* 17 Horizontal Window Start */
0x18,0xBF, /* 18 Horizontal Window End */
0x19,0x06, /* 19 Vertical Window Start 30 */
0x1A,0xF5, /* 1A Vertical Window End B0*/
0x1B,0x00, /* 1B Pixel Shift */
0x20,0x08, /* 20 Common E */
0x21,0x80, /* 21 Y Channel Manual offset adjustment */
0x22,0x80, /* 22 U Channel Manual offset adjustment */
0x23,0x00, /* 23 Crystal Current control */
0x24,0x90, /* 24 AE.W Auto Exposure White Pixel Ratio 3a*/
0x25,0x60, /* 25 AEW Auto Exposure Black Pixel Ratio 60*/
0x26,0xA2, /* 26 Common F */
0x27,0xFA, /* 27 Common G */
0x28,0x20, /* 28 Common H */
0x29,0x00, /* 29 Common I */
0x2A,0x10, /* 2A Frame Rate High */
0x2B,0x00, /* 2B Frame Rate Low */
0x2C,0x88, /* 2C Black Expanding */
0x2D,0x85, /* 2D Common J */
0x2E,0x80, /* 2E V Channel Manual Offset Adjustment */
0x2F,0x44, /* 2F Reserved */
0x60,0x20, /* 60 Signal Process Control A */
0x61,0x02, /* 61 Signal Process Control B */
0x62,0x5F, /* 62 Gamma Control */
0x63,0xD5, /* 63 Reserved */
0x64,0x09, /* 64 Y Gamma Control */
0x65,0x85, /* 65 Signal Process Control C */
0x66,0x55, /* 66 AWB Process Control */
0x68,0xCF, /* 68 Signal Process Control D */
0x69,0x76, /* 69 Analog Sharpness */
0x6A,0x22, /* 6A Vertical Edge Enhancement Control */
0x6F,0x0D, /* 6F Even/Odd Noise Compensation Control */
0x70,0x89, /* 70 Common Control K */
0x71,0x00, /* 71 Common Control J */
0x72,0x14, /* 72 Horizontal Sync 1st Edge shifting */
0x73,0x54, /* 73 Horizontal Sync 2nd Edge shifting */
0x74,0xA0, /* 74 Common Control M */
0x75,0x8E, /* 75 Common Control N */
0x76,0x00, /* 76 Common Control O */
0x7C,0x00, /* 7C Field Average Level Storage */
};
BYTE gFpImage512[512][512];
BYTE gFpImage256[256][256];
volatile int gFpImageFlag;
/*========================================================================
// Function : InitializeMBF200
// Description :
// Return type : int
// Argument
// Date : 2005/7/1 PM - Ver.1.00 - By KimCholNam
//=======================================================================*/
void InitializeMBF(void)
{ int i;
*(BYTE *)MBF_REGINDEX=0x09;
i=*(BYTE *)MBF_REGDATA;
printf("GALB= %x\n", i);
*(BYTE *)MBF_REGDATA=0x07;
for(i=0;i<100;i++);
*(BYTE *)MBF_REGINDEX=0x0A;
*(BYTE *)MBF_REGDATA=0x22;
*(BYTE *)MBF_REGINDEX=0x06; //DTR register
*(BYTE *)MBF_REGDATA=0x20;
*(BYTE *)MBF_REGINDEX=0x07; //DCR register
*(BYTE *)MBF_REGDATA=0x02;
*(BYTE *)MBF_REGINDEX=0x0C; //PGC register
*(BYTE *)MBF_REGDATA=0x07;
*(BYTE *)MBF_REGINDEX=0x0F; //PGC register
*(BYTE *)MBF_REGDATA=0x48;
// *(BYTE *)MBF_REGINDEX=0x0D; //ICR register
// *(BYTE *)MBF_REGDATA=0x01;
}
void detectFinger(void)
{
int i;
BYTE temp;
*(BYTE *)MBF_REGINDEX=0x0A;
*(BYTE *)MBF_REGDATA=0x00; //led off
*(BYTE *)MBF_REGINDEX=0x0E; //ISR register
*(BYTE *)MBF_REGDATA=0x01;
temp=*(BYTE *)MBF_REGDATA;
while(1)
{ *(BYTE *)MBF_REGINDEX=0x0E; //ISR register
temp=*(BYTE *)MBF_REGDATA;
if ( (temp &0x01)!=0x01)
{
*(BYTE *)MBF_REGINDEX=0x0A;
*(BYTE *)MBF_REGDATA=0x02;
for(i=0;i<0xffff;i++);
*(BYTE *)MBF_REGINDEX=0x0E; //ISR register
*(BYTE *)MBF_REGDATA=0x01;
}
*(BYTE *)MBF_REGINDEX=0x0A;
*(BYTE *)MBF_REGDATA=0x00; //led off
}
}
/*========================================================================
// Function : InitializeCMOS
// Description : Initialize CMOS by IIC bus
// Return type : int
// Argument
// Date : 2002/6/26 PM - Ver.1.00 - By KimWonMyong
//=======================================================================*/
int InitializeCMOS(void)
{
register int vState=TRUE;
register unsigned char i = 5;
while( i-- > 0 ){
if( !SetIICRegister( Wr7620Slave_M, 0x12, 0x80 ) ) vState = FALSE;
if( !SetIICRegister( Wr7620Slave_M, 0x12, 0x20 ) ) vState = FALSE;
if( vState == TRUE ) break;
vState=TRUE;
}
vState=TRUE;
for( i=0; i<sizeof(CMOSRegValue)/2; i++ ){
if( !SetIICRegister( Wr7620Slave_M, CMOSRegValue [i*2], CMOSRegValue [i*2+1] ) ) vState = FALSE;
}
if( !SetIICRegister( Wr7620Slave_M, 0x06, Bright ) ) vState = FALSE;
if( !SetIICRegister( Wr7620Slave_M, 0x10, Contrast ) ) vState = FALSE;
return vState;
}
BYTE *Tmp;
void readIIC(void)
{
register unsigned char i,tt;
BOOL jj;
for (i=0;i<0x5f;i++){
jj=GetIICRegister(0x20,0x21,i,Tmp);
Delay_Nms(1000);
tt=*Tmp;
if (jj) printf("res = true ");
else printf("res = false");
printf("reg,val=%x,%x\n", i,tt);
}
}
/*========================================================================
// Function : InitializeFpCap
// Description : Initialize camera
// Return type : int
// Argument
// Create : 8/19/02 12:10:47 PM By Kim Won Myong
// Update : 2003-12-18 10:15:47 PM By KGB
//=======================================================================*/
int InitializeFpCap( int aOV7620, int a16mm, int aCPU )
{
return TRUE;
}
/*========================================================================
// Function : *ReadFpImage512
// Description :
// Return type : void
// Argument
// (In/Out) : void
// Create : 8/19/02 12:18:13 PM By Kim Won Myong
//========================================================================*/
void *ReadFpImage512( void )
{ U32 i,j,k;
BYTE *temp;
U32 test;
temp=(BYTE *)gFpImage512;
*(BYTE *)MBF_REGINDEX=0x08;
*(BYTE *)MBF_REGDATA =0x02;
for(i=0;i<300;i++)
for(j=0;j<256;j++)
{ k=0;
*(BYTE *)MBF_REGINDEX=0x09;
while((k&0x20)!=0x20) k=*(BYTE *)MBF_REGDATA;
*(BYTE *)MBF_REGINDEX=0x08;
gFpImage512[i][j]=*(BYTE *)MBF_REGDATA;
// *temp=*(BYTE *)MBF_REGDATA;
//temp++;
}
}
void *OldReadFpImage512( void )
{ U32 i,j;
BYTE *temp;
U32 test;
BYTE flag;
AT91F_AIC_DisableIt(AT91C_BASE_AIC, AT91C_ID_SYS);
temp=(BYTE *)gFpImage512;
// VSYNC CHEK
//while(!AT91F_PIO_IsInputSet(AT91C_BASE_PIOC, AT91C_PIO_PC12)) ;
while(!((AT91F_PIO_GetInput(AT91C_BASE_PIOB)&0x800000)==0x800000)) ;
i=0;
flag=0;
while(i<480*512)
{
/* while(!((AT91F_PIO_GetInput(AT91C_BASE_PIOC)&0x2000)==0x2000));
{ //PCLK detect
for(j=0;j<512;j++)
{
*temp=* (BYTE *) VRAM_M;
*temp=* (BYTE *) VRAM_M;
temp++;
}
while(((AT91F_PIO_GetInput(AT91C_BASE_PIOC)&0x2000)==0x2000));
}
i++;}*/
//test=AT91F_PIO_GetInput(AT91C_BASE_PIOC);
test=AT91C_BASE_PIOB->PIO_PDSR;
// if (flag==0)
if ((test&0x9000000)==0x9000000)
{
// *temp=* (BYTE *) VRAM_M;
*temp=test;
for(j=0;j<3;j++);
temp++;
i++;
flag=1;
}
// if (flag==1)
// if ((test&0x9000000)==0x1000000)
// flag=0;
}
/* for(i=0;i<512;i++)
{ while(!AT91F_PIO_IsInputSet(AT91C_BASE_PIOC, AT91C_PIO_PC13)) ;
for(j=0;j<512;j++)
{ while(!AT91F_PIO_IsInputSet(AT91C_BASE_PIOC, AT91C_PIO_PC14)) ;
*temp=* (BYTE *) VRAM_M;
temp++;
}
}
*/
AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_SYS);
return NULL;
}
/*========================================================================
// Function : *ReadFpImage256
// Description :
// Return type : void
// Argument
// (In/Out) : void
// Create : 8/19/02 3:25:19 PM By Kim Won Myong
//========================================================================*/
void *ReadFpImage256( void )
{
int i,j;
ReadFpImage512();
for( i=0; i<256; i++ )
for( j=0; j<256; j++ )
gFpImage256[i][j] = gFpImage512[i][j];
return (void*)&gFpImage256[0][0];
}
/*========================================================================
// Function : GetFpImage512
// Description : Get 512*512 image buffer address .
// Return type : void *
// Argument
// Date : 2002/06/24 AM - Ver.1.0 - By Kim Won Myong
//========================================================================*/
void *GetFpImage512( void )
{
return (void*)&gFpImage512[0][0];
}
/*========================================================================
// Function : GetFpImage256
// Description : Get 256*256 image buffer address .
// Return type : void *
// Argument
// Date : 2002/06/24 AM - Ver.1.0 - By Kim Won Myong
//========================================================================*/
void *GetFpImage256( void )
{
return (void*)&gFpImage256[0][0];
}
/****************************************************************
*
* End of file : _FPCAP.C
*
****************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -