📄 aes1510.c
字号:
#include "AES1510.h"
void DATA_INIT()
{
/* ucLUT[0] =0xFF ;ucLUT[1] =0xFF ;ucLUT[2] = 0xFF;ucLUT[3] = 0xFF;ucLUT[4] = 0xF0;ucLUT[5] = 0xC0;ucLUT[6] = 0xA0;
ucLUT[7] = 0x89;ucLUT[8] = 0x78;ucLUT[9] = 0x6B;ucLUT[10] = 0x60;ucLUT[11] = 0x57;ucLUT[12] =0x50 ;ucLUT[13] = 0x4A;
ucLUT[14] = 0x45 ;ucLUT[15] = 0x40;ucLUT[16] = 0x3C;ucLUT[17] = 0x38;ucLUT[18] = 0x35;ucLUT[19] = 0x33;ucLUT[20] = 0x30;
ucLUT[21] = 0x2E;ucLUT[22] = 0x2C;ucLUT[23] = 0x2A;ucLUT[24] =0x28 ;ucLUT[25] = 0x26;ucLUT[26] = 0x25;ucLUT[27] = 0x24;
ucLUT[28] = 0x22;ucLUT[29] = 0x21;ucLUT[30] = 0x20;ucLUT[31] =0x1F;ucLUT[32] = 0x1E;ucLUT[33] = 0x1D;ucLUT[34] = 0x1C;
ucLUT[35] = 0x1B;ucLUT[36] = 0x1B;ucLUT[37] = 0x1A;ucLUT[38] =0x19 ;ucLUT[39] = 0x19;ucLUT[40] =0x18;ucLUT[41] = 0x17;
ucLUT[42] = 0x17;ucLUT[43] =0x16 ;ucLUT[44] = 0x16;ucLUT[45] = 0x15;ucLUT[46] = 0x15;ucLUT[47] = 0x14;ucLUT[48] = 0x14;
ucLUT[49] = 0x14;ucLUT[50] = 0x13;ucLUT[51] = 0x13;ucLUT[52] =0x12 ;ucLUT[53] = 0x12;ucLUT[54] =0x12;ucLUT[55] = 0x11;
ucLUT[56] = 0x11;ucLUT[57] = 0x11;ucLUT[58] = 0x11;ucLUT[59] = 0x10;ucLUT[60] = 0x10;ucLUT[61] = 0x10;ucLUT[62] =0x0F ;
ucLUT[63] =0x0F ;ucLUT[64] = 0x0F;ucLUT[65] = 0x0F;ucLUT[66] = 0x0F;ucLUT[67] =0x0E ;ucLUT[68] = 0x0E;ucLUT[69] = 0x0E;
ucLUT[70] = 0x0E;ucLUT[71] =0x0E ;ucLUT[72] = 0x0D;ucLUT[73] =0x0D ;ucLUT[74] = 0x0D;ucLUT[75] = 0x0D;ucLUT[76] = 0x0D;
ucLUT[77] = 0x0C;ucLUT[78] = 0x0C;ucLUT[79] = 0x0C;ucLUT[80] = 0x0C;ucLUT[81] = 0x0C;ucLUT[82] = 0x0C;ucLUT[83] = 0x0C;
ucLUT[84] = 0x0B;ucLUT[85] = 0x0B;ucLUT[86] = 0x0B;ucLUT[87] = 0x0B;ucLUT[88] = 0x0B;ucLUT[89] = 0x0B;ucLUT[90] = 0x0B;
ucLUT[91] = 0x0B;ucLUT[92] = 0x0A;ucLUT[93] = 0x0A;ucLUT[94] = 0x0A;ucLUT[95] = 0x0A;ucLUT[96] = 0x0A;ucLUT[97] = 0x0A;
ucLUT[98] = 0x0A;ucLUT[99] = 0x0A;ucLUT[100] = 0x0A;ucLUT[101] = 0x0A;ucLUT[102] = 0x09;ucLUT[103] = 0x09;ucLUT[104] =0x09 ;
ucLUT[105] = 0x09;ucLUT[106] = 0x09;ucLUT[107] = 0x09;ucLUT[108] =0x09;ucLUT[109] = 0x09;ucLUT[110] = 0x09;ucLUT[111] = 0x09;
ucLUT[112] =0x09 ;ucLUT[113] = 0x08;ucLUT[114] = 0x08;ucLUT[115] = 0x08;ucLUT[116] = 0x08;ucLUT[117] = 0x08;ucLUT[118] = 0x08;
ucLUT[119] = 0x08;ucLUT[120] =0x08 ;ucLUT[121] = 0x08;ucLUT[122] = 0x08;ucLUT[123] = 0x08;ucLUT[124] = 0x08;ucLUT[125] = 0x08;
ucLUT[126] =0x08 ;ucLUT[127] = 0x08;
uxGainFactor[0] = 0x0200 >> 1;uxGainFactor[1] = 0x0200 >> 1;uxGainFactor[2] = 0x0200 >> 1;uxGainFactor[3] = 0x0200 >> 1;
uxGainFactor[4] = 0x0270 >> 1;uxGainFactor[5] = 0x022E >> 1;uxGainFactor[6] = 0x0200 >> 1;uxGainFactor[7] = 0x0200 >> 1;
uxGainFactor[8] = 0x0200 >> 1;uxGainFactor[9] = 0x0200 >> 1;uxGainFactor[10] = 0x0200 >> 1;uxGainFactor[11] =0x0200 >> 1 ;
uxGainFactor[12] = 0x0200 >> 1;uxGainFactor[13] =0x0200 >> 1;*/
}
void FristSetSensor(void)
{
ERGCReset( );
/* sWriteAES1510RegByte(0x80,0x01);
sWriteAES1510RegByte(0x80,0x12);
sWriteAES1510RegByte(0x84,0x01);
sWriteAES1510RegByte(0x85,0x00);
//sWriteAES1510RegByte(0x86,0x00);
//sWriteAES1510RegByte(0x8D,0x00);
//sWriteAES1510RegByte(0x8F,0x04);
sWriteAES1510RegByte(0x89,IMAG_THRS);//IMAG_THRS
sWriteAES1510RegByte(0x8A,0x00);
//sWriteAES1510RegByte(0x8B,0x0D);
//sWriteAES1510RegByte(0x8C,0x52);
sWriteAES1510RegByte(0x8B,0x0E);
sWriteAES1510RegByte(0x8C,0x68);
sWriteAES1510RegByte(0xBE, ( HiGv( m_sIAGC.ucGain ) | UniGain( m_sIAGC.ucGain ) ));
sWriteAES1510RegByte(0x29,0x00);
sWriteAES1510RegByte(0x2A,0x08);
sWriteAES1510RegByte(0x96,0x00);
sWriteAES1510RegByte(0x97,0x48);
sWriteAES1510RegByte(0x98,0); // 调速度 HIGH SCN_TIM_H
sWriteAES1510RegByte(0x99,0); // 调速度 LOW SCN_TIM_L
sWriteAES1510RegByte(0x9C,0x00);
sWriteAES1510RegByte(0x9D,0x00);
sWriteAES1510RegByte(0x9E,0x00);
sWriteAES1510RegByte(0x9F,0x00);
sWriteAES1510RegByte(0xA2,0x50);
sWriteAES1510RegByte(0xA3,0xF0); //0xF0
sWriteAES1510RegByte(0xAD,0x08);
sWriteAES1510RegByte(0xBD, m_aucOffDAC[m_sIAGC.ucGain]);
sWriteAES1510RegByte(0xAF, m_ucVRefDAC); // 54
sWriteAES1510RegByte(0xB1,0x28); //28
sWriteAES1510RegByte(0xB5,0xAB); //AB
sWriteAES1510RegByte(0x1B,0x2D);
sWriteAES1510RegByte(0xA2,0xD0);
sWriteAES1510RegByte(0x1D,0x39);
sWriteAES1510RegByte(0x1E,0x3F);
sWriteAES1510RegByte(0x1C,0x00);
sWriteAES1510RegByte(0x1D,0x05);
sWriteAES1510RegByte(0x1E,0x13);
sWriteAES1510RegByte(0x1C,0x01);
sWriteAES1510RegByte(0x1D,0x00);
sWriteAES1510RegByte(0x1E,0xA1);
sWriteAES1510RegByte(0x1C,0x02);
sWriteAES1510RegByte(0x1D,0x30);
sWriteAES1510RegByte(0x1E,0x20);
sWriteAES1510RegByte(0x1C,0x03);
sWriteAES1510RegByte(0x1D,0x02);
sWriteAES1510RegByte(0x1E,0x21);
sWriteAES1510RegByte(0x1C,0x04);
sWriteAES1510RegByte(0x1D,0x19);
sWriteAES1510RegByte(0x1E,0x03);
sWriteAES1510RegByte(0x1C,0x05);
sWriteAES1510RegByte(0x1D,0x28);
sWriteAES1510RegByte(0x1E,0xB9);
sWriteAES1510RegByte(0x1C,0x06);
sWriteAES1510RegByte(0x1D,0x30);
sWriteAES1510RegByte(0x1E,0x3F);
sWriteAES1510RegByte(0x1C,0x07);
sWriteAES1510RegByte(0x1D,0x05);
sWriteAES1510RegByte(0x1E,0x13);
sWriteAES1510RegByte(0x1C,0x08);
sWriteAES1510RegByte(0x1D,0x00);
sWriteAES1510RegByte(0x1E,0xA1);
sWriteAES1510RegByte(0x1C,0x09);
sWriteAES1510RegByte(0x1D,0x30);
sWriteAES1510RegByte(0x1E,0x08);
sWriteAES1510RegByte(0x1C,0x0A);
sWriteAES1510RegByte(0x1D,0x02);
sWriteAES1510RegByte(0x1E,0x21);
sWriteAES1510RegByte(0x1C,0x0B);
sWriteAES1510RegByte(0x1D,0x18);
sWriteAES1510RegByte(0x1E,0x03);
sWriteAES1510RegByte(0x1C,0x0C);
sWriteAES1510RegByte(0x1D,0x28);
sWriteAES1510RegByte(0x1E,0xB9);
sWriteAES1510RegByte(0x1C,0x0D);
sWriteAES1510RegByte(0x1D,0x16);
sWriteAES1510RegByte(0x1E,0x90);
sWriteAES1510RegByte(0x1C,0x0E);
sWriteAES1510RegByte(0x1D,0x2C);
sWriteAES1510RegByte(0x1E,0x07);
sWriteAES1510RegByte(0x1C,0x0F);
sWriteAES1510RegByte(0x1D,0x28);
sWriteAES1510RegByte(0x1E,0xB9);
sWriteAES1510RegByte(0x1C,0x10);
sWriteAES1510RegByte(0x1D,0x80);
sWriteAES1510RegByte(0x1E,0xAA);
sWriteAES1510RegByte(0xA2,0x50);
sWriteAES1510RegByte(0x81,0x01); */
}
void EnableFingerDetect(void )
{
/* sWriteAES1510RegByte(0x80,0x01);
sWriteAES1510RegByte(0x80,0x12);
sWriteAES1510RegByte(0x85,0x00);
sWriteAES1510RegByte(0x8A,0x00);
sWriteAES1510RegByte(0x8B,0x0E);
sWriteAES1510RegByte(0x8C,0x68);
sWriteAES1510RegByte(0x8D,0x83);
sWriteAES1510RegByte(0x8E,0x07);
sWriteAES1510RegByte(0x8F,0x07);
sWriteAES1510RegByte(0x96,0x00);
sWriteAES1510RegByte(0x97,0x48);
sWriteAES1510RegByte(0xA1,0x00);
sWriteAES1510RegByte(0xA2,0x50);
sWriteAES1510RegByte(0xA6,0xE4);
sWriteAES1510RegByte(0xAD,0x08);
sWriteAES1510RegByte(0xAE,m_aucOffDAC[9] + 2);
sWriteAES1510RegByte(0xAF,m_ucVRefDAC);
sWriteAES1510RegByte(0xB1,0x28);
sWriteAES1510RegByte(0xB5,0xAB);
sWriteAES1510RegByte(0xB6,0x0E);
sWriteAES1510RegByte(0x1B,0x2D);
sWriteAES1510RegByte(0x81,0x04); */
}
void ConGetImageStop(void )
{
sWriteAES1510RegByte(0x81,0x00);
}
void UpdateSensorRegisters ( void )
{
if(a[38]& 0x40)
{
ERGCRun( uReceiveSensorTestImageData );
Tempoffset = m_sIAGC.ucOffset;
Tempmult = m_sIAGC.ucMult;
asm("nop");
unsigned int temp = (unsigned int)( HiGv( m_sIAGC.ucGain ) | UniGain( m_sIAGC.ucGain ) );
sWriteAES1510RegByte(0xBE,temp ); /* temp HiGv and Gain. (** MUST BE FIRST **) */
sWriteAES1510RegByte(0x29,m_sIAGC.ucOffset); /* m_sIAGC.ucOffset 1 Offset. */
sWriteAES1510RegByte(0x2A,m_sIAGC.ucMult ); /* m_sIAGC.ucMult 2 Multiplier. */
sWriteAES1510RegByte(0xBD,m_aucOffDAC[m_sIAGC.ucGain] ); /* m_aucOffDAC[m_sIAGC.ucGain] m_aucOffDAC[m_sIAGC.ucGain] 3 Offset DAC per Gain. (** MUST BE LAST **) */
}
}
void ERGCRun( unsigned int * ucBin )
{
unsigned int xPct; /* Working Percent (may exceed 127).*/
unsigned int xI; /* Working index. */
unsigned int xWht; /* White Bin in 1/8 Bin increments. */
unsigned int xBlk; /* Black Bin in 1/8 Bin increments. */
unsigned int xBin; /* Working 1/8 of the Bin. */
unsigned int xRem; /* Working 1/8 of the Bin remainder.*/
unsigned int xTol; /* Noise Tolerance. */
xTol = 20;
xPct = 0;
for ( xI = 0; xPct < ucWhitePct; xI++ )
{
xPct += ucBin[xI];
}
xPct -= ucBin[--xI];
xWht = xI << 3;
xBin = ucBin[xI] >> 3;
xRem = ucBin[xI] & 7;
for ( xI = 7; xPct < ucWhitePct; xI-- )
{
xPct += xBin;
if ( xRem > xI )
{
xPct++;
}
xWht++;
}
xPct = 0;
for ( xI = 15; xPct < ucBlackPct; xI-- )
{
xPct += ucBin[xI];
}
xPct -= ucBin[++xI];
xBlk = ( xI + 1 ) << 3;
xBin = ucBin[xI] >> 3;
xRem = ucBin[xI] & 7;
for ( xI = 7; xPct < ucBlackPct; xI-- )
{
xPct += xBin;
if ( xRem > xI )
{
xPct++;
}
xBlk--;
}
if ( xBlk < ( xWht + 1 ) )
{
xBlk = ( xWht + 1 );
}
m_sIAGC.ucOffset = (unsigned int) ( xWht << 1 );
m_sIAGC.ucMult = ucLUT[ ( xBlk - xWht ) ];
if( ucBin[15] > ( xTol ) )
{
if( ERGCGainDown( ) )
{
asm("nop");
return;
}
else
{
m_sIAGC.ucGainOK = (unsigned int)( 1 );
}
}
xPct = ucBin[15] + ucBin[14] + ucBin[13] + ucBin[12] +
ucBin[11] + ucBin[10] + ucBin[ 9] + ucBin[ 8];
if( xPct <= xTol && ERGCGainUp( ) )
{
asm("nop");
xPct += ucBin[5] + ucBin[4] + ucBin[ 7] + ucBin[ 6];
if( xPct <= xTol && ERGCGainUp( ) )
{
asm("nop");
xPct += ucBin[3] + ucBin[2];
if( xPct <= xTol && ERGCGainUp( ) )
{
asm("nop");
}
else
{
m_sIAGC.ucGainOK = (unsigned int)( 1 );
}
}
else
{
m_sIAGC.ucGainOK = (unsigned int)( 1 );
}
}
else
{
m_sIAGC.ucGainOK = (unsigned int)( 1 );
}
return;
}
unsigned int ERGCGainDown( )
{
if( m_sIAGC.ucGain > m_sIAGC.ucMinGain )
{
unsigned int uxTemp;
uxTemp = ( (( m_sIAGC.ucMult * m_sIAGC.puxGainFactor[m_sIAGC.ucGain] ) >> 7 )& 0x00FF);
if( uxTemp > 255 )
{
uxTemp = 255;
}
m_sIAGC.ucMult = (unsigned int)( uxTemp );
m_sIAGC.ucOffset = (unsigned int)( (( m_sIAGC.ucOffset << 7 ) & 0x00FF / m_sIAGC.puxGainFactor[m_sIAGC.ucGain] )& 0x00FF);
m_sIAGC.ucGain = m_sIAGC.ucGain - 1 ;
return (1);
}
return (0);
}
unsigned int ERGCGainUp( )
{
if( m_sIAGC.ucGain < m_sIAGC.ucMaxGain )
{
m_sIAGC.ucGain = (unsigned int)( m_sIAGC.ucGain + 1 );
unsigned int uxTemp;
uxTemp = ( (( m_sIAGC.ucOffset * m_sIAGC.puxGainFactor[m_sIAGC.ucGain] ) >> 7)&0x00FF );
asm("nop");
if( uxTemp > 255 )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -