工具/软件:Code Composer Studio
您好,
我正在尝试通过I2C将其与VCNL4010 (IR传感器)连接,但我遇到了问题。 我在设备支持中找到了一个示例代码,并参考它修改了代码。 但它不起作用。 在示波器上,我一直处于高状态,我看不到任何通信。
#include "F28x_Project.h"
void i2c_a_init (void);
void i2c_a_write_data(UINT16, UINT16);
UINT16 i2c_read_data (UINT16 register_address);
int main(void){
InitSysCtrl();
伊尼特·格皮奥();
I2C_A_INIT();
而(1){
I2C_A_WRITE数据(0x81,0x07);
I2C_A_READ_DATA (0x80);
}
}
void i2c_a_init (void)
{
I2caRegs.I2CSAL.ALL = 0x0026; // 7位从属地址- DS1672
EALLOW;
gpioCtrlRegs.GPBPUD.bit.GPIO32 = 0;
gpioCtrlRegs.GPBPUD.bit.GPIO33 = 0;
//为选定的I2C引脚设置限制
gpioCtrlRegs.GPBQSEL1.bit.GPIO32 = 3;
gpioCtrlRegs.GPBQSEL1.bit.GPIO33 = 3;
//配置哪些GPIO引脚将是I2C_A引脚
//使用GPIO寄存器
//
gpioCtrlRegs.GPBMUX1.bit.GPIO32 = 1;
gpioCtrlRegs.GPBMUX1.bit.GPIO33 = 1;
EDIS;
//在主发射器模式下初始化I2C
I2caRegs.I2CPsc.all = 19;// I2C时钟应介于7MHz-12MHz之间
I2caRegs.I2CCLKL = 45; //预校准器设置为100kHz比特率
I2caRegs.I2CCLKH = 45; //在10MHz I2C时钟上
I2caRegs.I2CFFTX.ALL = 0x6000;//启用FIFO模式和TXFIFO
I2caRegs.I2CFFRX.ALL = 0x2040;//启用RXFIFO,清除RXFFINT
return;
}
void i2c_a_write_data (UINT16 register_address, UINT16 register_value)
{//start
condition, stop condition, Master,Transmitter,I2C enabled
I2caRegs.I2CMDR.All = 0x2E20;
I2caRegs.I2CCNT = 0x02; //要发送的字节-此处为2
I2caRegs.I2CDXL.ALL =注册地址;//注册位置
I2caRegs.I2CDXL.ALL = REGISTER_VALUE;//注册位置
}
UINT16 i2c_read_data (UINT16 REGISTER_ADDRESE)
{
//启动条件,停止条件,主,发送器,I2C启用
I2caRegs.I2CMDR.All = 0x2E20;
I2caRegs.I2CCNT = 0x01; //要发送的字节-始终为1
I2caRegs.I2CDXL.ALL =注册地址;//注册位置
//启动条件,停止条件,主控,I2C启用
I2caRegs.I2CMDR.ALL = 0x2C20;
I2caRegs.I2CCNT = 0x01; //要接收的字节-始终为1
返回I2caRegs.I2CDRR.ALL; //读取和返回数据
}
感谢你的帮助
此致
Szymon

