📄 i2c_example.c
字号:
#define OFFSET_CONTENT_DM2016 0x90
#define SIZE_CONTENT_DM2016 0x08
void iic_start()
{
SDA_HIGH;
NOP;
SCL_HIGH;
NOP;
NOP;
SDA_LOW ;
NOP;
NOP;
SCL_LOW ;
NOP ;
}
// iic_stop , send stop bit
void iic_stop()
{
SDA_LOW;
NOP;
NOP;
SCL_HIGH;
NOP;
NOP;
SDA_HIGH;
NOP;
NOP;
NOP;
NOP;
}
bit iic_write_byte( u8 wdata )
{
for ( i =0 ;i < 8 ;i ++ )
{
if ( wdata & 0x80 )
{
SDA_HIGH;
NOP;
}
else
{
SDA_LOW;
NOP;
}
wdata <<= 1 ;
SCL_HIGH;
NOP ;
SCL_LOW;
NOP;
}
NOP ; // check ack
SDA_HIGH ;
NOP ;
SCL_HIGH ;
NOP ;
if ( !IS_SDA_HIGH )
{
SCL_LOW ;
NOP ;
return 1 ;
}
else
{
SCL_LOW ;
NOP ;
return 0 ;
}
}
// iic_read_byte re_data -- whether send ack bit
u8 iic_read_byte( bit re_data )
{
u8 rdata =0;
SDA_HIGH ;
for ( i = 0 ;i < 8 ;i ++ )
{
rdata <<=1 ;
SCL_LOW ;
NOP ;
SCL_HIGH ;
NOP ;
if ( IS_SDA_HIGH )
{
rdata ++ ;
}
NOP ;
}
NOP;
SCL_LOW;
NOP;
if ( re_data )
{
SDA_HIGH;
NOP;
}
else
{
SDA_LOW;
NOP;
}
NOP ;
SCL_HIGH ;
NOP ;
SCL_LOW ;
NOP ;
return (rdata) ;
}
bit iic_read_some_bytes( u8 reg_add, CON_PTR_TYPE rdata, u8 len)
{
data u8 i ;
iic_start() ;
if( !iic_write_byte(IIC_ADDR) ) // DM2016设备地址
{
iic_stop() ;
NOP ;
return 0 ;
}
if( !iic_write_byte(reg_add) )
{
iic_stop() ;
return 0 ;
}
iic_stop() ;
iic_start() ;
if(!iic_write_byte(IIC_ADDR | 1))
{
iic_stop() ;
return 0 ;
}
for( i = 0 ; i< len -1 ;i++)
{
((u8*)rdata) [i] = iic_read_byte(0);
NOP;
}
((u8*)rdata)[i] = iic_read_byte(1) ; // last byte
iic_stop() ;
return 1 ;
}
bit iic_write_some_bytes( u8 reg_add, CON_PTR_TYPE wdata, u8 len)
{
data u8 i ;
iic_start() ;
if( !iic_write_byte(IIC_ADDR) ) // DM2016设备地址
{
iic_stop() ;
NOP ;
return 0 ;
}
if ( !iic_write_byte(reg_add) ) //
{
iic_stop() ;
NOP ;
return 0 ;
}
for ( i = 0 ; i < len ; i ++ )
{
if (!iic_write_byte(((u8*)wdata)[i]))
{
iic_stop();
NOP ;
return 0 ;
}
}
iic_stop() ;
NOP ;
return 1 ;
}
bit write_2016_data( CON_PTR_TYPE data_ptr, u8 addr, u8 len )
{
bit r;
change_iic_bus();
r = iic_write_some_bytes(addr, data_ptr, len) ;
m_sleep(50);
return r ;
}
bit read_2016_data( CON_PTR_TYPE data_ptr, u8 addr, u8 len )
{
bit r;
u8 i = 0 ;
change_iic_bus();
r = iic_read_some_bytes(addr, data_ptr, len) ;
m_sleep(50) ;
return r ;
}
void do_verify_dm2016_key(...)
{
//bit ok;
ok = TRUE; //TRUE's value is '1'
// write text
memset(data_buf,0,8);
do
{
...
//OFFSET_CONTENT_DM2016's value is 0x90-0x97
if ( 0 == write_2016_data( (CON_PTR_TYPE)data_buf, OFFSET_CONTENT_DM2016, 8 ) )
{
ok = FALSE ;
break;
}
m_sleep(1);
if ( 0 == read_2016_data( (CON_PTR_TYPE)data_buf, OFFSET_CONTENT_DM2016, 8 ) )
{
ok = FALSE ;
break;
}
m_sleep(5) ;
if ( memcmp( TEXT_VERIFY_2016, data_buf, 8 ) )
{
ok = FALSE ;
break;
}
} while(0);
if (!ok)
{
....
}
....
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -