主题中讨论的其他器件:MSPWARE
在函数 EUSCI_B_I2C_initMaster ()中的 DriverLib eusci_b_i2c.c 中,此代码看起来是错误的,似乎与注释不匹配。
/*
*计算实现小于或的最快速度的时钟分频器
*等于所需速度。 分子被偏置以偏向较大的值
*时钟分频器、以便生成的时钟始终小于或等于
*连接到所需的时钟、永不大于任何值。
*
PreScalarValue =(uint16_t)(param->i2cClk / param->datarate);
HWREG16 (baseAddress + OFS_UCBxBRW)=预分段值;
除法是无符号的、而小数是截断的。 因此、预分频值(时钟分频器)小于所需的实际数据速率(频率)大于所需的值。
例如,对于 param->i2cClk of 1M 和 param->datarate of 400k (最大 I2C 数据速率),preScalarValue 为2 (2.5,比例截断)。
因此、实际数据速率将为500kbps、比所需速度快。
我看不到任何"偏置"分子的代码。
CCS 8.02和相当新版本的 MSPWare DriverLib


