请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:CC2640R2F工具/软件:
我们正在为 CC2640R2F 开发串行引导加载程序、并需要在引导加载程序中使用 I2C。 由于大小限制、我无法使用 TI 驱动程序、因为它对于引导加载程序来说太大、因此我在没有 TI-RTOS 的情况下使用 driverlib。
我已启用 I2C 时钟并通过以下代码配置 IO
PRCMPowerDomainOn(PRCM_DOMAIN_PERIPH | PRCM_DOMAIN_SERIAL); while (PRCMPowerDomainStatus(PRCM_DOMAIN_PERIPH | PRCM_DOMAIN_SERIAL) != PRCM_DOMAIN_POWER_ON); PRCMPeripheralRunEnable(PRCM_PERIPH_I2C0); PRCMPeripheralSleepEnable(PRCM_PERIPH_I2C0); PRCMPeripheralDeepSleepEnable(PRCM_PERIPH_I2C0); PRCMLoadSet(); while (!PRCMLoadGet()); IOCPortConfigureSet(PIN_I2C_SCL,IOC_PORT_MCU_I2C_MSSCL,IOC_NO_IOPULL); IOCPortConfigureSet(PIN_I2C_SDA,IOC_PORT_MCU_I2C_MSSDA,IOC_NO_IOPULL);
使用以下代码初始化 I2C
I2CMasterDisable(I2C0_BASE);
if(cfg->atcai2c.baud == 1000000){
I2CMasterInitExpClk(I2C0_BASE,48000000,false);
}else if(cfg->atcai2c.baud == 400000){
I2CMasterInitExpClk(I2C0_BASE,48000000,true);
}else{
I2CMasterInitExpClk(I2C0_BASE,48000000,false);
}
I2CMasterSlaveAddrSet(I2C0_BASE, address,false);
I2CMasterEnable(I2C0_BASE);
但当我将 0x07 写入 MCTRL 时、会将 0x00 写入数据寄存器。 mstat:busy 保持为 1、其他 mstat 位全部为零。 I2C 工作不正常、就像我之前使用的 TI 驱动程序一样
是否缺少任何配置?