43
43
/** I2C1 device */
44
44
i2c_dev i2c_dev1 = {
45
45
.regs = I2C1_BASE ,
46
- .sda_pin = PB7 , // PB8
46
+ #ifdef BOARD_I2C1_SDA_PIN
47
+ .sda_pin = BOARD_I2C1_SDA_PIN ,
48
+ #else
49
+ .sda_pin = PB7 ,
50
+ #endif
51
+ #ifdef BOARD_I2C1_SCL_PIN
52
+ .scl_pin = BOARD_I2C1_SCL_PIN ,
53
+ #else
47
54
.scl_pin = PB6 ,
55
+ #endif
48
56
.clk_id = RCC_I2C1 ,
49
57
.ev_nvic_line = NVIC_I2C1_EV ,
50
58
.er_nvic_line = NVIC_I2C1_ER ,
@@ -55,15 +63,44 @@ i2c_dev i2c_dev1 = {
55
63
/** I2C2 device */
56
64
i2c_dev i2c_dev2 = {
57
65
.regs = I2C2_BASE ,
58
- .sda_pin = PB11 ,
66
+ #ifdef BOARD_I2C2_SDA_PIN
67
+ .sda_pin = BOARD_I2C2_SDA_PIN ,
68
+ #else
69
+ .sda_pin = PB11 ,
70
+ #endif
71
+ #ifdef BOARD_I2C2_SCL_PIN
72
+ .scl_pin = BOARD_I2C2_SCL_PIN ,
73
+ #else
59
74
.scl_pin = PB10 ,
75
+ #endif
60
76
.clk_id = RCC_I2C2 ,
61
77
.ev_nvic_line = NVIC_I2C2_EV ,
62
78
.er_nvic_line = NVIC_I2C2_ER ,
63
79
.state = I2C_STATE_DISABLED
64
80
};
65
81
#endif
66
82
83
+ #if BOARD_NR_I2C > 2
84
+ /** I2C2 device */
85
+ i2c_dev i2c_dev3 = {
86
+ .regs = I2C3_BASE ,
87
+ #ifdef BOARD_I2C3_SDA_PIN
88
+ .sda_pin = BOARD_I2C3_SDA_PIN ,
89
+ #else
90
+ .sda_pin = PC9 ,
91
+ #endif
92
+ #ifdef BOARD_I2C3_SCL_PIN
93
+ .scl_pin = BOARD_I2C3_SCL_PIN ,
94
+ #else
95
+ .scl_pin = PA8 ,
96
+ #endif
97
+ .clk_id = RCC_I2C3 ,
98
+ .ev_nvic_line = NVIC_I2C3_EV ,
99
+ .er_nvic_line = NVIC_I2C3_ER ,
100
+ .state = I2C_STATE_DISABLED
101
+ };
102
+ #endif
103
+
67
104
static inline int32 wait_for_state_change (i2c_dev * dev ,
68
105
i2c_state state ,
69
106
uint32 timeout );
@@ -206,7 +243,14 @@ void i2c_master_enable(i2c_dev *dev, uint32 flags) {
206
243
delay_us (2 );
207
244
gpio_set_af_mode (dev -> scl_pin , GPIO_AFMODE_I2C1_3 );
208
245
delay_us (2 );
209
- gpio_set_af_mode (dev -> sda_pin , GPIO_AFMODE_I2C1_3 );
246
+ /* specific SDA pin remap for I2C2 on F4xx mcu*/
247
+ if ((dev -> sda_pin == PB3 ) || (dev -> sda_pin == PB4 )) {
248
+ gpio_set_af_mode (dev -> sda_pin , GPIO_AFMODE_I2C2_3 );
249
+ }
250
+ else {
251
+ gpio_set_af_mode (dev -> sda_pin , GPIO_AFMODE_I2C1_3 );
252
+ }
253
+
210
254
211
255
i2c_init (dev );
212
256
@@ -512,6 +556,11 @@ void __irq_i2c2_ev(void) {
512
556
i2c_irq_handler (& i2c_dev2 );
513
557
}
514
558
#endif
559
+ #if BOARD_NR_I2C > 2
560
+ void __irq_i2c3_ev (void ) {
561
+ i2c_irq_handler (& i2c_dev3 );
562
+ }
563
+ #endif
515
564
/**
516
565
* @brief Interrupt handler for I2C error conditions
517
566
* @param dev I2C device
@@ -541,6 +590,11 @@ void __irq_i2c2_er(void) {
541
590
i2c_irq_error_handler (& i2c_dev2 );
542
591
}
543
592
#endif
593
+ #if BOARD_NR_I2C > 2
594
+ void __irq_i2c3_er (void ) {
595
+ i2c_irq_error_handler (& i2c_dev3 );
596
+ }
597
+ #endif
544
598
/*
545
599
* CCR/TRISE configuration helper
546
600
*/
0 commit comments