使用 C8051F550单片机 读写 I2C器件,不成功。不知道是什么原因。希望用过的帮我看看哪里配置不对还是出现了冲突。
数据通过CAN与上位机通信,这一部分已经验证是正常的。
好像 SMBus 没有工作。
因为 ADXL345 有它的device ID在 寄存器地址0x00,值是0xE5(八进制0345)。但是发现数据不对。
SMBus 时钟 56K,使用T1为其时钟源,T3溢出值为SCL低电平超时。使用主从模式,C8051F始终为主机。
操作函数有:
对相应地址写单字节数据 void ADXL345_ByteWrite(U8 addr, U8 dat);
读相应地址单字节数据 U8 ADXL345_ByteRead(U8 addr);
读相应地址多字节数据 void ADXL345_ReadArray(U8* dest_addr, U8 src_addr, U8 len);
ADXL345初始化函数 void Init_ADXL345(void);
读取ADXL345加速度值 即将ADXL345内部寄存器地址0x32-0x37 的数据读到 ADX_BUF[8]里面.
SMBus 正常工作的函数 应该涉及有: [这些都是从 F550的Demo里面复制过来的]
void SMBUS0_Init(void); // SMBus 初始化
void TIMER1_Init(void); // SMBus 时钟使用 T1溢出
void TIMER3_Init(void); // SMBus SCL低电平超时使用T3
INTERRUPT_PROTO (TIMER3_ISR, INTERRUPT_TIMER3); // SCL低电平超时 使用T3中断恢复SMBus总线
INTERRUPT_PROTO (SMBUS0_ISR, INTERRUPT_SMBUS0); // SMBus 状态中断
|