请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TM4C1294NCPDT 您好!
我使用的是 TM4C1294NCPDT 微控制器、我有一个可通过 I2C 配置的从 IC。 下面是我用来配置和读取从器件 ID 的代码。
void I2C_Init(){ //启用 I2C 模块1 SysCtlPeripheralEnable (SYSCTL_Periph_I2C1); //复位模块 SysCtlPeripheralReset (SYSCTL_Periph_I2C1); //启用包含 I2C 1的 GPIO 外设 SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG); //为端口 B2和 B3上的 I2C0功能配置引脚复用。 GPIOPinConfigure (GPIO_PG0_I2C1SCL); GPIOPinConfigure (GPIO_PG1_I2C1SDA); //为这些引脚选择 I2C 功能。 GPIOPinTypeI2CSCL (GPIO_PORTG_BASE、GPIO_PIN_0); GPIOPinTypeI2C (GPIO_PORTG_base、GPIO_PIN_1); //启用并初始化 I2C1主机模块。 使用的系统时钟 // I2C1模块。 最后一个参数设置 I2C 数据传输速率。 //如果为 false,则数据速率设置为100kbps,如果为 true,则数据速率将设置为 //设置为400kbps。 I2CMasterInitExpClk (I2C1_base、(SysCtlClockGet ())、true); //清除 I2C FIFO HWREG (I2C1_base + I2C_O_FIFOCTL)= 80008000; } uint32_t I2C_read (uint8_t slave_addr、uint8_t reg) { uint32_t ERROR = 0; //指定我们正在向从器件写入(寄存器地址) I2CMasterSlaveAddrSet (I2C1_base、slave_addr、false); //指定要读取的寄存器 I2CMasterDataPut (I2C1_base、reg); //将控制字节和寄存器地址字节发送到从器件 I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START); //等待 MCU 完成事务 while (I2CMasterBusy (I2C1_base)); 错误= I2CMasterErr (I2C1_base); //指定我们将从从从器件读取 I2CMasterSlaveAddrSet (I2C1_base、slave_addr、true); //发送控制字节并从我们指定的寄存器中读取 I2CMasterControl (I2C1_base、I2C_MASTER_CMD_SINGLE_Receive); //等待 MCU 完成事务 while (I2CMasterBusy (I2C1_base)); //返回从指定寄存器提取的数据 返回 I2CMasterDataGet (I2C1_base); }
从器件地址为0xCE、当我将此作为参数传递给读取函数时、我没有读取 ID、因此探测了 SCL 和 SDA 线路。
发现示波器捕获的从地址为0x9C、但我配置的是0xCE。 因此、从器件可能不会被确认。
上拉电阻器存在、SCL/SDA 看起来很干净。
上述代码是否存在任何问题? 我在哪里错误配置总线?
谢谢、
Janardan