et21x130_i2c.c

来自「在台湾义统公司」· C语言 代码 · 共 171 行

C
171
字号
#include "ET21x130_I2C.h"


//-------------------------------------
void Reset_ET21x130()
{
   M_BC(ET21x130_CTRL, RESET);//RESET位置0
   DelayMs(100);
   M_BS(ET21x130_CTRL, RESET);//RESET位置1
}
//-------------------------------------
void Setup_ET21x130()
{  
   //Check_SensorID(); 
   //M_BC(ET12x130_TestPin, 0);
   M_BC(I2C_PORT, SCE); //SCE=0
   Write_Register(0x00, 0x00, R0_H_VALUE,     R0_L_VALUE);
   Write_Register(0x00, 0x01, AE_ADD_EP_TIME, 0x77);
   Write_Register(0x00, 0x02, AE_UPPER_BOUND, AE_LOWER_BOUND);
   Write_Register(0x00, 0x03, 0x00,           OP_GAIN);
   Write_Register(0x00, 0x05, EP_PIXEL_H,     EP_PIXEL_L);
   Write_Register(0x00, 0x06, 0x00,           EP_TIME);
   Write_Register(0x00, 0x07, R7_H_VALUE,     R7_L_VALUE);
   Write_Register(0x00, 0x08, OB_ENABLE,      R8_L_VALUE); 
   //Read_Register(0x00, 0x06);  //007E  
   M_BS(I2C_PORT, SCE); //SCE=1  
   //M_BS(ET12x130_TestPin, 0);
}
//-------------------------------------
void SetI2CReg()
{
   //Check_SensorID(); 
   M_BC(I2C_PORT, SCE); //SCE=0   
   Write_Register(0x00, 0x00, I2CRegR0_H, I2CRegR0_L);
   Write_Register(0x00, 0x01, I2CRegR1_H, I2CRegR1_L);
   Write_Register(0x00, 0x02, I2CRegR2_H, I2CRegR2_L);
   Write_Register(0x00, 0x03, I2CRegR3_H, I2CRegR3_L);
 
   Write_Register(0x00, 0x05, I2CRegR5_H, I2CRegR5_L);
   Write_Register(0x00, 0x06, I2CRegR6_H, I2CRegR6_L);
   Write_Register(0x00, 0x07, I2CRegR7_H, I2CRegR7_L);
   Write_Register(0x00, 0x08, I2CRegR8_H, I2CRegR8_L);
   Read_Register(0x00, 0x06);  //007E    
   M_BS(I2C_PORT, SCE); //SCE=1  

}
//-------------------------------------
void GetI2CReg()
{
   //Check_SensorID();
   M_BC(I2C_PORT, SCE); //SCE=0   
   Read_Register(0x00, 0x00);   
   I2CRegR0 = I2C_RxTx_Data;
   Read_Register(0x00, 0x01);  
   I2CRegR1 = I2C_RxTx_Data;
   Read_Register(0x00, 0x02);  
   I2CRegR2 = I2C_RxTx_Data;
   Read_Register(0x00, 0x03);  
   I2CRegR3 = I2C_RxTx_Data;
   Read_Register(0x00, 0x05);  
   I2CRegR5 = I2C_RxTx_Data;
   Read_Register(0x00, 0x06);  
   I2CRegR6 = I2C_RxTx_Data;
   Read_Register(0x00, 0x07);  
   I2CRegR7 = I2C_RxTx_Data;
   Read_Register(0x00, 0x08);  
   I2CRegR8 = I2C_RxTx_Data;  
   M_BS(I2C_PORT, SCE); //SCE=1  
}
//-------------------------------------
void Check_SensorID()
{  //ID:	;(R/W FLAG, RS)(0,0)
   while (1)
   {
      I2C_Read_SartBit();
      M_BC(I2C_PORT, SData);   	 //RS=0 -> READ ID
      M_BS(I2C_PORT, SCLK);	 	 //SCLK=1
      M_NOP;
      M_BC(I2C_PORT, SCLK);		 //SCLK=0  
      ET21x130_IO_Ctrl = 0x74;   //#0b01110100 SDATA == INPUT (FOR DATA RECEIVE)
      //sfr IOCD=0x89 0-->output;;;;1-->input
      //IREN,VSync,HSync,Pxclk,SCLK,SData,SCE,RESET
      //  0        1        1        1      1      0      0       0
      //即设置PxClk, HSync, VSync为输入口
      //另外设置SCLK为1(输入口),即此时SCLK信号由传感器发送
      I2C_DataRead();  
      ET21x130_IO_Ctrl = 0x70;  //for SDATA OUTPUT
      //sfr IOCD=0x89 0-->output;;;;1-->input
      //IREN,VSync,HSync,Pxclk,SCLK,SData,SCE,RESET
      //  0        1        1        1      0      0      0       0
      //即设置PxClk, HSync, VSync为输入口
      I2C_StopBit();
      if (I2C_RxTx_Data_L == DEFAULT_ID)
         break;
   }
   //整个检查SensorID过程中没有设置过片选信号SCE
}
//-------------------------------------
void Write_Register(BYTE wRegIndex_H, BYTE wRegIndex_L, 
                    BYTE wRegData_H, BYTE wRegData_L)
{ 
   I2C_Reg_Index_H = wRegIndex_H;
   I2C_Reg_Index_L = wRegIndex_L;
   I2C_Index();
  
   I2C_RxTx_Data_H = wRegData_H;
   I2C_RxTx_Data_L = wRegData_L;
   I2C_Write();
} 
//-------------------------------------

void Read_Register(BYTE rReg_H, BYTE rReg_L)
{
   I2C_Reg_Index_H = rReg_H;
   I2C_Reg_Index_L = rReg_L;
   I2C_Index();   
   I2C_Read(); 
}
//-------------------------------------
void I2C_Index()
{  //(R/W FLAG, RS)(1,0) 
   I2C_Write_SartBit();//I2C启动
   M_BC(I2C_PORT, SData);       //RS=0 -> INDEX
   M_BS(I2C_PORT, SCLK);        //SCLK=1
   M_NOP;
   M_NOP;
   M_NOP;
   M_BC(I2C_PORT, SCLK);        //SCLK=0
   I2C_IndexWrite();
   I2C_StopBit();
}
//-------------------------------------
void I2C_Write()
{  //(R/W FLAG, RS)(1,1) 
   I2C_Write_SartBit();
   M_BS(I2C_PORT, SData);       //RS=1 -> REGISTER
   M_BS(I2C_PORT, SCLK);        //SCLK=1
   M_NOP;
   M_NOP;
   M_NOP;
   M_BC(I2C_PORT, SCLK);        //SCLK=0
   I2C_DataWrite();
   I2C_StopBit();
}
//-------------------------------------
void I2C_Read()
{
   I2C_Read_SartBit();
   M_BS(I2C_PORT, SData);       //RS=1 -> REGISTER
   M_NOP;
   M_BS(I2C_PORT, SCLK);        //SCLK=1
   M_NOP;
   M_NOP;
   M_NOP;
   M_BC(I2C_PORT, SCLK);        //SCLK=0
   ET21x130_IO_Ctrl = 0x74;            //#0b11110100  for SData == Input  
   I2C_DataRead();
   ET21x130_IO_Ctrl = 0x70;            //#0b11110000  for SData == Output
   I2C_StopBit();   
}
//-------------------------------------
void I2C_IndexWrite()
{
   M_BC(I2C_PORT, SData);

   //for (COUNTER_16=16; COUNTER_16>0; COUNTER_16--)
   for (COUNTER_16=0; COUNTER_16<16; COUNTER_16++)
   {
      if (M_ISBS(I2C_Reg_Index_H, 7))
      {     
         //璝SensorIICBuf_H, 7

⌨️ 快捷键说明

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