In DriverLib eusci_b_i2c.c in function EUSCI_B_I2C_initMaster() this code seems in error and doesn't seem to match the comment.
/*
* Compute the clock divider that achieves the fastest speed less than or
* equal to the desired speed. The numerator is biased to favor a larger
* clock divider so that the resulting clock is always less than or equal
* to the desired clock, never greater.
*/
preScalarValue = (uint16_t)(param->i2cClk / param->dataRate);
HWREG16(baseAddress + OFS_UCBxBRW) = preScalarValue;
The division is unsigned and fraction is truncated. Thus the preScalarValue (the clock divider) is smaller and the actual data rate (frequency) greater than desired.
For example for param->i2cClk of 1M and param->dataRate of 400k (the max I2C data rate), preScalarValue is 2 (2.5 with fraction truncated).
Thus the actual data rate will be 500kbps, which is FASTER than desired.
I don't see any code that "biased" the numerator.
CCS 8.02 and a fairly recent version of MSPWare DriverLib


