—【杰理AC632n】IIC-VCNL36826S—
< 代 码 >
//<board_ac632n_demo_cfg.h>
/*软件IIC设置*/
#define TCFG_SW_I2C0_CLK_PORT IO_PORTA_05//czb 220420 IO_PORTA_09 //软件IIC CLK脚选择
#define TCFG_SW_I2C0_DAT_PORT IO_PORTA_06// IO_PORTA_10 //软件IIC DAT脚选择
#define TCFG_SW_I2C0_DELAY_CNT 50
/*硬件IIC端口选择
SCL SDA
'A': IO_PORT_DP IO_PORT_DM
'B': IO_PORTA_09 IO_PORTA_10
'C': IO_PORTA_07 IO_PORTA_08
'D': IO_PORTA_05 IO_PORTA_06
*/
#define TCFG_HW_I2C0_PORTS 'B'
#define TCFG_HW_I2C0_CLK 100000 //硬件IIC波特率 //IIC延时参数,影响通讯时钟频率
//<user_I2c.h>
#if 1 //czb 211108
#define INT_IO IO_PORTA_03//中断脚
#define MY_READ_ADDR 0xC1
#define MY_WRITE_ADDR 0xC0
#define VCNL36826S_SLAVE_ADD 0xC0 //MY_WRITE_ADDR
#define ST_CONF 0x00
#define PS_CONF1 0x03
#define PS_CONF3 0x04
#define PS_THDL 0x05
#define PS_THDH 0x06
#define PS_CANC 0x07
#define PS_DATA 0xF8
#define INT_FLAG 0xF9
#define VCNL36826s_FLAG 0xF9 //INT_FLAG
#define LEVEL_LOW_THDH 0x00 // 0x00 3.8cm E2
#define LEVEL_LOW_THDL 0xC8 // 0x96 0x8f
#define LEVEL_HIGH_THDH 0x01 //0x08 2.5cm E2 0x01 0x03
#define LEVEL_HIGH_THDL 0x90 // 200817 0x66 0x06
#define LEVEL3_THDH 200
#define LEVEL3_THDL 150
#endif
//<user_I2c.c>
void my_I2C_init(u8 iic)
{
int i = 0;
u8 write_data[2];
my_iic_hdl = iic;
soft_iic_init(iic);
#if 1
//VCNL36826 init
write_data[0]= 0x03;
write_data[1]= 0x02;
my_write_ndata(iic,ST_CONF,&write_data[0],1);
write_data[0]= 0x83;
write_data[1]= 0x02;
my_write_ndata(iic,ST_CONF,&write_data[0],2);
write_data[0]= 0xC4;
write_data[1]= 0x5C;
my_write_ndata(iic,PS_CONF1,&write_data[0],2);
write_data[0]= 0x08;
write_data[1]= 0xE3;
my_write_ndata(iic,PS_CONF3,&write_data[0],2);
write_data[0]= LEVEL_LOW_THDL;
write_data[1]= LEVEL_LOW_THDH;
my_write_ndata(iic,PS_THDL,&write_data[0],2);
write_data[0]= LEVEL_HIGH_THDL;
write_data[1]= LEVEL_HIGH_THDH;
my_write_ndata(iic,PS_THDH,&write_data[0],2);
write_data[0]=0xff;
write_data[1]=0xff;
my_read_ndata(iic,0xFA,&write_data[0],2);
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
printf("write_data[0]:0x%x\n",write_data[0]);
printf("write_data[1]:0x%x\n",write_data[1]);
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
write_data[0]=0xff;
write_data[1]=0xff;
my_read_ndata(iic,PS_THDL,&write_data[0],2);
write_data[0]=0xff;
write_data[1]=0xff;
my_read_ndata(iic,PS_THDH,&write_data[0],2);
my_read_ndata(iic,0xF8,&write_data[0],2);
printf("PS_DATA:\n");
printf("write_data[0]:0x%x\n",write_data[0]);
printf("write_data[1]:0x%x\n",write_data[1]);
printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
#endif
//<调用方式>
my_I2C_init(MY_WRITE_ADDR);
————————————————————————————————
< 结 果 >
【远】
【近】
【电压变化】
【远】
【近】
————————————————————————————————
< 后 记 >
请尊重作者的劳动成果,仅供学习,在此感谢czb的指导!