ANBT_I2C

#include "anbt_i2c.h"
 
void ANBT_I2C_Configuration(void)
{
  
     gpio_init (PTD8, GPO,1);
     gpio_init (PTD9, GPO,1);
 
ANBT_I2C_SCL_1; 
ANBT_I2C_SDA_1;
ANBT_I2C_DELAY;
}
 
void ANBT_I2C_Delay(uint32 dly)               
{
while(--dly);//dly=10: 8.75us; dly=100: 85.58 us (SYSCLK=72MHz)
}
 
uint8 ANBT_I2C_START(void)
ANBT_I2C_SDA_1; 
 ANBT_I2C_NOP;
  // 
 ANBT_I2C_SCL_1; 
 ANBT_I2C_NOP;    
//
 if(!ANBT_I2C_SDA_STATE) return ANBT_I2C_BUS_BUSY;
//
 ANBT_I2C_SDA_0;
 ANBT_I2C_NOP;
  //
 ANBT_I2C_SCL_0;  
 ANBT_I2C_NOP; 
//
 if(ANBT_I2C_SDA_STATE) return ANBT_I2C_BUS_ERROR;
//
 return ANBT_I2C_READY;
}
 
void ANBT_I2C_STOP(void)
{
 ANBT_I2C_SDA_0; 
 ANBT_I2C_NOP;
  // 
 ANBT_I2C_SCL_1; 
 ANBT_I2C_NOP;    
//
 ANBT_I2C_SDA_1;
 ANBT_I2C_NOP;
}
 
void ANBT_I2C_SendACK(void)
{
 ANBT_I2C_SDA_0;
 ANBT_I2C_NOP;
 ANBT_I2C_SCL_1;
 ANBT_I2C_NOP;
 ANBT_I2C_SCL_0; 
 ANBT_I2C_NOP;  
}
 
void ANBT_I2C_SendNACK(void)
{
ANBT_I2C_SDA_1;
ANBT_I2C_NOP;
ANBT_I2C_SCL_1;
ANBT_I2C_NOP;
ANBT_I2C_SCL_0; 
ANBT_I2C_NOP;  
}
 
uint8 ANBT_I2C_SendByte(uint8 anbt_i2c_data)
{
 uint8 i;
 
ANBT_I2C_SCL_0;
 for(i=0;i<8;i++)
 {  
  if(anbt_i2c_data&0x80) ANBT_I2C_SDA_1;
   else ANBT_I2C_SDA_0;
//
  anbt_i2c_data<<=1;
  ANBT_I2C_NOP;
//
  ANBT_I2C_SCL_1;
  ANBT_I2C_NOP;
  ANBT_I2C_SCL_0;
  ANBT_I2C_NOP; 
 }
//
 ANBT_I2C_SDA_1; 
 ANBT_I2C_NOP;
 ANBT_I2C_SCL_1;
 ANBT_I2C_NOP;   
 if(ANBT_I2C_SDA_STATE)
 {
  ANBT_I2C_SCL_0;
  return ANBT_I2C_NACK;
 }
 else
 {
  ANBT_I2C_SCL_0;
  return ANBT_I2C_ACK;  
 }    
}
 
uint8 ANBT_I2C_ReceiveByte(void)
{
uint8 i,anbt_i2c_data;
//
 ANBT_I2C_SDA_1;
 ANBT_I2C_SCL_0; 
 anbt_i2c_data=0;
//
 for(i=0;i<8;i++)
 {
  ANBT_I2C_SCL_1;
  ANBT_I2C_NOP; 
  anbt_i2c_data<<=1;
//
  if(ANBT_I2C_SDA_STATE)anbt_i2c_data|=0x01; 
  
  ANBT_I2C_SCL_0;  
  ANBT_I2C_NOP;         
 }
ANBT_I2C_SendNACK();
 return anbt_i2c_data;
}
 
uint8 ANBT_I2C_ReceiveByte_WithACK(void)
{
uint8 i,anbt_i2c_data;
//
 ANBT_I2C_SDA_1;
 ANBT_I2C_SCL_0; 
 anbt_i2c_data=0;
//
 for(i=0;i<8;i++)
 {
  ANBT_I2C_SCL_1;
  ANBT_I2C_NOP; 
  anbt_i2c_data<<=1;
//
  if(ANBT_I2C_SDA_STATE)anbt_i2c_data|=0x01; 
  
  ANBT_I2C_SCL_0;  
  ANBT_I2C_NOP;         
 }
ANBT_I2C_SendACK();
 return anbt_i2c_data;
}
 
void ANBT_I2C_Receive6Bytes(uint8 *anbt_i2c_data_buffer)
{
uint8 i,j;
uint8 anbt_i2c_data;
 
for(j=0;j<5;j++)
{
ANBT_I2C_SDA_1;
ANBT_I2C_SCL_0; 
anbt_i2c_data=0;
//
for(i=0;i<8;i++)
{
  ANBT_I2C_SCL_1;
  ANBT_I2C_NOP; 
  anbt_i2c_data<<=1;
//
  if(ANBT_I2C_SDA_STATE)anbt_i2c_data|=0x01; 
  
  ANBT_I2C_SCL_0;  
  ANBT_I2C_NOP;         
}
anbt_i2c_data_buffer[j]=anbt_i2c_data;
ANBT_I2C_SendACK();
}
//
ANBT_I2C_SDA_1;
ANBT_I2C_SCL_0; 
anbt_i2c_data=0;
for(i=0;i<8;i++)
{
  ANBT_I2C_SCL_1;
  ANBT_I2C_NOP; 
  anbt_i2c_data<<=1;
//
  if(ANBT_I2C_SDA_STATE)anbt_i2c_data|=0x01; 
  
  ANBT_I2C_SCL_0;  
  ANBT_I2C_NOP;         
}
anbt_i2c_data_buffer[5]=anbt_i2c_data;
ANBT_I2C_SendNACK();
}
 
void ANBT_I2C_Receive12Bytes(uint8 *anbt_i2c_data_buffer)
{
uint8 i,j;
uint8 anbt_i2c_data;
 
for(j=0;j<11;j++)
{
ANBT_I2C_SDA_1;
ANBT_I2C_SCL_0; 
anbt_i2c_data=0;
//
for(i=0;i<8;i++)
{
  ANBT_I2C_SCL_1;
  ANBT_I2C_NOP; 
  anbt_i2c_data<<=1;
//
  if(ANBT_I2C_SDA_STATE)anbt_i2c_data|=0x01; 
mialon 发表于05-09 14:37 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号