Skip to content

Commit 651393a

Browse files
feat(PeriphDrivers): Return HS frequency from MXC_I2C_GetFrequency when HS-Mode enabled (#707)
1 parent 6cff8ac commit 651393a

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

Libraries/PeriphDrivers/Source/I2C/i2c_reva.c

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ int MXC_I2C_RevA_SetFrequency(mxc_i2c_reva_regs_t *i2c, unsigned int hz)
154154
hsHiClks = ticksTotal / 3 - 1;
155155

156156
// For rounding errors, adjust by 1 clock tick
157-
if (ticksTotal % 1) {
157+
if (ticksTotal % 2) {
158158
hsHiClks++;
159159
}
160160

@@ -182,7 +182,7 @@ int MXC_I2C_RevA_SetFrequency(mxc_i2c_reva_regs_t *i2c, unsigned int hz)
182182
lowClks = (ticksTotal >> 1) - 1;
183183

184184
// Adjust for rounding errors
185-
if (ticksTotal % 1) {
185+
if (ticksTotal % 2) {
186186
hiClks++;
187187
}
188188

@@ -200,10 +200,18 @@ int MXC_I2C_RevA_SetFrequency(mxc_i2c_reva_regs_t *i2c, unsigned int hz)
200200

201201
unsigned int MXC_I2C_RevA_GetFrequency(mxc_i2c_reva_regs_t *i2c)
202202
{
203-
unsigned int sclCycles = 0;
203+
unsigned int sclCycles = 2;
204+
// sclCycles Initialized to 2 b/c formula is sclCycles = (lo_clks + 1) + (hi_clks + 1)
204205

205-
// Calculate the speed based on what we've written into registers
206-
sclCycles = (i2c->clklo & MXC_F_I2C_REVA_CLKLO_LO) + (i2c->clkhi & MXC_F_I2C_REVA_CLKHI_HI);
206+
if (i2c->ctrl & MXC_F_I2C_REVA_CTRL_HS_EN) {
207+
// HS-Mode enabled, calculate HS Frequency
208+
sclCycles += (i2c->hsclk & MXC_F_I2C_REVA_HSCLK_LO) >> MXC_F_I2C_REVA_HSCLK_LO_POS;
209+
sclCycles += (i2c->hsclk & MXC_F_I2C_REVA_HSCLK_HI) >> MXC_F_I2C_REVA_HSCLK_HI_POS;
210+
} else {
211+
// HS-Mode not enabled, calculate nominal frequency
212+
sclCycles += (i2c->clklo & MXC_F_I2C_REVA_CLKLO_LO);
213+
sclCycles += (i2c->clkhi & MXC_F_I2C_REVA_CLKHI_HI);
214+
}
207215

208216
return PeripheralClock / sclCycles;
209217
}

0 commit comments

Comments
 (0)