diff options
| author | Siarhei B <[email protected]> | 2025-08-14 10:06:15 +0200 |
|---|---|---|
| committer | Siarhei B <[email protected]> | 2025-08-14 10:30:32 +0200 |
| commit | b66fa9ae4a3f994a61bde0e49dac642aaeb8ed4f (patch) | |
| tree | 85089d902df23bd5a91d47d6ab6578643c4e5049 /embassy-mspm0/src | |
| parent | e78959ed67f8c89f2adc78f5e4580c62d3c66081 (diff) | |
mspm0-I2C: fix calculate_timer_period function & tests
Diffstat (limited to 'embassy-mspm0/src')
| -rw-r--r-- | embassy-mspm0/src/i2c.rs | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/embassy-mspm0/src/i2c.rs b/embassy-mspm0/src/i2c.rs index d1b260114..7e22bb724 100644 --- a/embassy-mspm0/src/i2c.rs +++ b/embassy-mspm0/src/i2c.rs | |||
| @@ -190,7 +190,7 @@ impl Config { | |||
| 190 | // - SCL_LP is the SCL Low period (fixed at 6) | 190 | // - SCL_LP is the SCL Low period (fixed at 6) |
| 191 | // - SCL_HP is the SCL High period (fixed at 4) | 191 | // - SCL_HP is the SCL High period (fixed at 4) |
| 192 | // - I2C_CLK is functional clock frequency | 192 | // - I2C_CLK is functional clock frequency |
| 193 | return (((self.calculate_clock_source() * self.clock_div.divider()) / (self.bus_speed.hertz() * 10u32)) - 1) | 193 | return ((self.calculate_clock_source() / (self.bus_speed.hertz() * 10u32)) - 1) |
| 194 | .try_into() | 194 | .try_into() |
| 195 | .unwrap(); | 195 | .unwrap(); |
| 196 | } | 196 | } |
| @@ -200,8 +200,8 @@ impl Config { | |||
| 200 | // Assume that BusClk has default value. | 200 | // Assume that BusClk has default value. |
| 201 | // TODO: calculate BusClk more precisely. | 201 | // TODO: calculate BusClk more precisely. |
| 202 | match self.clock_source { | 202 | match self.clock_source { |
| 203 | ClockSel::MfClk => 4_000_000, | 203 | ClockSel::MfClk => 4_000_000 / self.clock_div.divider(), |
| 204 | ClockSel::BusClk => 24_000_000, | 204 | ClockSel::BusClk => 24_000_000 / self.clock_div.divider(), |
| 205 | } | 205 | } |
| 206 | } | 206 | } |
| 207 | 207 | ||
| @@ -213,8 +213,8 @@ impl Config { | |||
| 213 | // Assume that BusClk has default value. | 213 | // Assume that BusClk has default value. |
| 214 | // TODO: calculate BusClk more precisely. | 214 | // TODO: calculate BusClk more precisely. |
| 215 | match self.clock_source { | 215 | match self.clock_source { |
| 216 | ClockSel::MfClk => 4_000_000, | 216 | ClockSel::MfClk => 4_000_000 / self.clock_div.divider(), |
| 217 | ClockSel::BusClk => 24_000_000, | 217 | ClockSel::BusClk => 32_000_000 / self.clock_div.divider(), |
| 218 | } | 218 | } |
| 219 | } | 219 | } |
| 220 | 220 | ||
| @@ -1144,7 +1144,7 @@ mod tests { | |||
| 1144 | config.clock_div = ClockDiv::DivBy1; | 1144 | config.clock_div = ClockDiv::DivBy1; |
| 1145 | config.bus_speed = BusSpeed::FastMode; | 1145 | config.bus_speed = BusSpeed::FastMode; |
| 1146 | config.clock_source = ClockSel::BusClk; | 1146 | config.clock_source = ClockSel::BusClk; |
| 1147 | assert!(matches!(config.calculate_timer_period(), 7)); | 1147 | assert_eq!(config.calculate_timer_period(), 7u8); |
| 1148 | } | 1148 | } |
| 1149 | 1149 | ||
| 1150 | #[test] | 1150 | #[test] |
| @@ -1153,7 +1153,7 @@ mod tests { | |||
| 1153 | config.clock_div = ClockDiv::DivBy2; | 1153 | config.clock_div = ClockDiv::DivBy2; |
| 1154 | config.bus_speed = BusSpeed::FastMode; | 1154 | config.bus_speed = BusSpeed::FastMode; |
| 1155 | config.clock_source = ClockSel::BusClk; | 1155 | config.clock_source = ClockSel::BusClk; |
| 1156 | assert!(matches!(config.calculate_timer_period(), 3)); | 1156 | assert_eq!(config.calculate_timer_period(), 3u8); |
| 1157 | } | 1157 | } |
| 1158 | 1158 | ||
| 1159 | #[test] | 1159 | #[test] |
| @@ -1162,7 +1162,7 @@ mod tests { | |||
| 1162 | config.clock_div = ClockDiv::DivBy2; | 1162 | config.clock_div = ClockDiv::DivBy2; |
| 1163 | config.bus_speed = BusSpeed::Standard; | 1163 | config.bus_speed = BusSpeed::Standard; |
| 1164 | config.clock_source = ClockSel::BusClk; | 1164 | config.clock_source = ClockSel::BusClk; |
| 1165 | assert!(matches!(config.calculate_timer_period(), 15)); | 1165 | assert_eq!(config.calculate_timer_period(), 15u8); |
| 1166 | } | 1166 | } |
| 1167 | 1167 | ||
| 1168 | #[test] | 1168 | #[test] |
| @@ -1171,7 +1171,7 @@ mod tests { | |||
| 1171 | config.clock_div = ClockDiv::DivBy2; | 1171 | config.clock_div = ClockDiv::DivBy2; |
| 1172 | config.bus_speed = BusSpeed::Custom(100_000); | 1172 | config.bus_speed = BusSpeed::Custom(100_000); |
| 1173 | config.clock_source = ClockSel::BusClk; | 1173 | config.clock_source = ClockSel::BusClk; |
| 1174 | assert!(matches!(config.calculate_timer_period(), 15)); | 1174 | assert_eq!(config.calculate_timer_period(), 15u8); |
| 1175 | } | 1175 | } |
| 1176 | 1176 | ||
| 1177 | #[test] | 1177 | #[test] |
