1
1
//! Inter-Integrated Circuit (I2C) bus
2
2
3
3
use crate :: afio:: MAPR ;
4
+ use crate :: time:: Hertz ;
4
5
use crate :: gpio:: gpiob:: { PB10 , PB11 , PB6 , PB7 , PB8 , PB9 } ;
5
6
use crate :: gpio:: { Alternate , OpenDrain } ;
6
7
use crate :: hal:: blocking:: i2c:: { Read , Write , WriteRead } ;
@@ -36,16 +37,16 @@ pub enum DutyCycle {
36
37
#[ derive( Debug , PartialEq ) ]
37
38
pub enum Mode {
38
39
Standard {
39
- frequency : u32 ,
40
+ frequency : Hertz ,
40
41
} ,
41
42
Fast {
42
- frequency : u32 ,
43
+ frequency : Hertz ,
43
44
duty_cycle : DutyCycle ,
44
45
} ,
45
46
}
46
47
47
48
impl Mode {
48
- pub fn get_frequency ( & self ) -> u32 {
49
+ pub fn get_frequency ( & self ) -> Hertz {
49
50
match self {
50
51
& Mode :: Standard { frequency } => frequency,
51
52
& Mode :: Fast { frequency, .. } => frequency,
@@ -251,7 +252,7 @@ macro_rules! hal {
251
252
252
253
let pclk1 = clocks. pclk1( ) . 0 ;
253
254
254
- assert!( mode. get_frequency( ) <= 400_000 ) ;
255
+ assert!( mode. get_frequency( ) . 0 <= 400_000 ) ;
255
256
256
257
let mut i2c = I2c { i2c, pins, mode, pclk1 } ;
257
258
i2c. init( ) ;
@@ -273,7 +274,7 @@ macro_rules! hal {
273
274
w. trise( ) . bits( ( pclk1_mhz + 1 ) as u8 )
274
275
} ) ;
275
276
self . i2c. ccr. write( |w| unsafe {
276
- w. ccr( ) . bits( ( ( self . pclk1 / ( freq * 2 ) ) as u16 ) . max( 4 ) )
277
+ w. ccr( ) . bits( ( ( self . pclk1 / ( freq. 0 * 2 ) ) as u16 ) . max( 4 ) )
277
278
} ) ;
278
279
} ,
279
280
Mode :: Fast { ref duty_cycle, .. } => {
@@ -283,8 +284,8 @@ macro_rules! hal {
283
284
284
285
self . i2c. ccr. write( |w| {
285
286
let ( freq, duty) = match duty_cycle {
286
- & DutyCycle :: Ratio2to1 => ( ( ( self . pclk1 / ( freq * 3 ) ) as u16 ) . max( 1 ) , false ) ,
287
- & DutyCycle :: Ratio16to9 => ( ( ( self . pclk1 / ( freq * 25 ) ) as u16 ) . max( 1 ) , true )
287
+ & DutyCycle :: Ratio2to1 => ( ( ( self . pclk1 / ( freq. 0 * 3 ) ) as u16 ) . max( 1 ) , false ) ,
288
+ & DutyCycle :: Ratio16to9 => ( ( ( self . pclk1 / ( freq. 0 * 25 ) ) as u16 ) . max( 1 ) , true )
288
289
} ;
289
290
290
291
unsafe {
0 commit comments