linux iic的时钟频率,主时钟频率改变后,iic不能用了,

//产生IIC起始信号

void IIC_Start(void)

{

SDA_OUT();     //sda线输出

IIC_SDA=1;

IIC_SCL=1;

delay_us(4);

IIC_SDA=0;//START:when CLK is high,DATA change form high to low

delay_us(4);

IIC_SCL=0;//钳住I2C总线,准备发送或接收数据

}

//IIC发送一个字节

//返回从机有无应答

//1,有应答

//0,无应答

void IIC_Send_Byte(u8 txd)

{

u8 t;

SDA_OUT();

IIC_SCL=0;//拉低时钟开始数据传输

for(t=0;t<8;t++)

{

IIC_SDA=(txd&0x80)>>7;

txd<<=1;

delay_us(2);   //对TEA5767这三个延时都是必须的

IIC_SCL=1;

delay_us(2);

IIC_SCL=0;

delay_us(2);

}

}

//读ADXL345寄存器

//addr:寄存器地址

//返回值:读到的值

u16 ADXL345_RD_Reg(u8 addr)

{

u16 temp=0;

IIC_Start();

IIC_Send_Byte(ADXL_WRITE);        //发送写器件指令

temp=IIC_Wait_Ack();

printf("%d  ",temp);

IIC_Send_Byte(addr);                   //发送寄存器地址

temp=IIC_Wait_Ack();

printf("%d  ",temp);

IIC_Start();                                      //重新启动

IIC_Send_Byte(ADXL_READ);        //发送读器件指令

temp=IIC_Wait_Ack();

printf("%d  ",temp);

num1=IIC_Read_Byte(1);                //  读取两个字节。num1和unm2为FDC2214的地址。48*256+85=12373,即是:0X3055

num2=IIC_Read_Byte(0);                //读取一个字节,不继续再读,发送NAK

IIC_Stop();                                        //产生一个停止条件

return temp;                                //返回读到的值

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值