|
void BspI2cInit(void)
{
uint32_t i2cclk=0;
lpi2c_master_config_t tMasterConfig;
CLOCK_SetMux(kCLOCK_Lpi2cMux,0); //LPI2C时钟源为PLL3=60Mhz
CLOCK_SetDiv(kCLOCK_Lpi2cDiv,5); //分频设置,分频值为5+1,所以LPI2C CLK=10Mhz
//配置IO作为I2C
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_08_LPI2C2_SCL,1);
IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_09_LPI2C2_SDA,1);
//配置I2C引脚功能,
//低转换速度,驱动能力为R0/6,速度为100Mhz,开路输出,使能pull/keepr
//选择keeper功能,上拉22K Ohm,关闭Hyst
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_08_LPI2C2_SCL, 0xD8B0);
IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_09_LPI2C2_SDA, 0xD8B0);
i2cclk=((CLOCK_GetFreq(kCLOCK_Usb1PllClk)/8)/(5+1));
LPI2C_MasterGetDefaultConfig(&tMasterConfig);
tMasterConfig.baudRate_Hz = 100000;
LPI2C_MasterInit(LPI2C2, &tMasterConfig, i2cclk);
uint8_t ucTouchDat[8];
lpi2c_master_transfer_t tMasterXfer = {0};
tMasterXfer.slaveAddress = (0x20 >> 1);
tMasterXfer.direction = kLPI2C_Read;
tMasterXfer.subaddress = 0;
tMasterXfer.subaddressSize = 0;
tMasterXfer.data = ucTouchDat;
tMasterXfer.dataSize = 8;
tMasterXfer.flags = kLPI2C_TransferDefaultFlag;
while (1)
{
LPI2C_MasterTransferBlocking(LPI2C2, &tMasterXfer);
}
}
配置如上, 时钟引脚一直未能测到时钟, 感觉NXP的硬件I2C好难用啊.
|
|