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 + -
显示快捷键?