Skip to content

Commit 2fae588

Browse files
driver/i2c: STM32: Solves excess memory usage issue.
This commit solves excess usage of RAM. User can now enable/disable I2C timing algorithm. Disabling of I2C timing algorithm would reduce RAM usage. Signed-off-by: Affrin Pinhero <[email protected]>
1 parent ef5ac45 commit 2fae588

File tree

24 files changed

+176
-18
lines changed

24 files changed

+176
-18
lines changed

targets/TARGET_STM/TARGET_STM32F0/i2c_device.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,13 @@ uint32_t i2c_get_pclk(I2CName i2c)
4141
pclk = HSI_VALUE;
4242
break;
4343
}
44-
} else {
44+
}
45+
#if defined I2C2_BASE
46+
else if (i2c == I2C_2) {
47+
pclk = HAL_RCC_GetSysClockFreq();
48+
}
49+
#endif
50+
else {
4551
// should not happend
4652
error("I2C: unknown instance");
4753
}
@@ -78,7 +84,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
7884
}
7985

8086
else {
87+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
88+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
89+
Enabling this may impact performance*/
90+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
91+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
8192
tim = i2c_compute_timing(pclk, hz);
93+
#endif
8294
}
8395
return tim;
8496
}

targets/TARGET_STM/TARGET_STM32F0/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,13 @@ extern "C" {
4848
#define I2CAPI_I2C1_CLKSRC RCC_I2C1CLKSOURCE_SYSCLK
4949

5050
uint32_t i2c_get_pclk(I2CName i2c);
51-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5251
uint32_t i2c_get_timing(I2CName i2c, int hz);
52+
53+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
54+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5355
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
5456
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
57+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
5558

5659
#endif // DEVICE_I2C
5760

targets/TARGET_STM/TARGET_STM32F3/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
122122
}
123123

124124
else {
125+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
126+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
127+
Enabling this may impact performance*/
128+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
129+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
125130
tim = i2c_compute_timing(pclk, hz);
131+
#endif
126132
}
127133
return tim;
128134
}

targets/TARGET_STM/TARGET_STM32F3/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,13 @@ extern "C" {
6262
#define I2CAPI_I2C3_CLKSRC RCC_I2C3CLKSOURCE_SYSCLK
6363

6464
uint32_t i2c_get_pclk(I2CName i2c);
65-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
6665
uint32_t i2c_get_timing(I2CName i2c, int hz);
66+
67+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
68+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
6769
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
6870
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
71+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
6972

7073
#endif // DEVICE_I2C
7174

targets/TARGET_STM/TARGET_STM32F7/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
133133
break;
134134
}
135135
} else {
136+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
137+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
138+
Enabling this may impact performance*/
139+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
140+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
136141
tim = i2c_compute_timing(pclk, hz);
142+
#endif
137143
}
138144
return tim;
139145
}

targets/TARGET_STM/TARGET_STM32F7/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,13 @@ extern "C" {
5757
#define I2CAPI_I2C4_CLKSRC RCC_I2C4CLKSOURCE_PCLK1
5858

5959
uint32_t i2c_get_pclk(I2CName i2c);
60-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
6160
uint32_t i2c_get_timing(I2CName i2c, int hz);
61+
62+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
63+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
6264
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
6365
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
66+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
6467

6568
#endif // DEVICE_I2C
6669

targets/TARGET_STM/TARGET_STM32G0/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
7878
break;
7979
}
8080
} else {
81+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
82+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
83+
Enabling this may impact performance*/
84+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
85+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
8186
tim = i2c_compute_timing(pclk, hz);
87+
#endif
8288
}
8389
return tim;
8490
}

targets/TARGET_STM/TARGET_STM32G0/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,13 @@ extern "C" {
4747
#define I2CAPI_I2C2_CLKSRC RCC_I2C2CLKSOURCE_SYSCLK
4848

4949
uint32_t i2c_get_pclk(I2CName i2c);
50-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5150
uint32_t i2c_get_timing(I2CName i2c, int hz);
51+
52+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
53+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5254
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
5355
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
56+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
5457

5558
#endif // DEVICE_I2C
5659

targets/TARGET_STM/TARGET_STM32G4/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
133133
break;
134134
}
135135
} else {
136+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
137+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
138+
Enabling this may impact performance*/
139+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
140+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
136141
tim = i2c_compute_timing(pclk, hz);
142+
#endif
137143
}
138144
return tim;
139145
}

targets/TARGET_STM/TARGET_STM32G4/i2c_device.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,13 @@ extern "C" {
4343
#define I2CAPI_I2C4_CLKSRC RCC_I2C4CLKSOURCE_SYSCLK
4444

4545
uint32_t i2c_get_pclk(I2CName i2c);
46-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4746
uint32_t i2c_get_timing(I2CName i2c, int hz);
47+
48+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
49+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4850
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
4951
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
50-
52+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
5153
#endif // DEVICE_I2C
5254

5355
#ifdef __cplusplus

targets/TARGET_STM/TARGET_STM32H7/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
116116
break;
117117
}
118118
} else {
119+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
120+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
121+
Enabling this may impact performance*/
122+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
123+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
119124
tim = i2c_compute_timing(pclk, hz);
125+
#endif
120126
}
121127
return tim;
122128
}

targets/TARGET_STM/TARGET_STM32H7/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,13 @@ extern "C" {
4343
#define I2CAPI_I2C4_CLKSRC RCC_I2C4CLKSOURCE_D3PCLK1
4444

4545
uint32_t i2c_get_pclk(I2CName i2c);
46-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4746
uint32_t i2c_get_timing(I2CName i2c, int hz);
47+
48+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
49+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4850
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
4951
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
52+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
5053

5154
#endif // DEVICE_I2C
5255

targets/TARGET_STM/TARGET_STM32L0/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
103103
break;
104104
}
105105
} else {
106+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
107+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
108+
Enabling this may impact performance*/
109+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
110+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
106111
tim = i2c_compute_timing(pclk, hz);
112+
#endif
107113
}
108114
return tim;
109115
}

targets/TARGET_STM/TARGET_STM32L0/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,13 @@ extern "C" {
5454
#define I2CAPI_I2C4_CLKSRC RCC_I2C4CLKSOURCE_SYSCLK
5555

5656
uint32_t i2c_get_pclk(I2CName i2c);
57-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5857
uint32_t i2c_get_timing(I2CName i2c, int hz);
58+
59+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
60+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5961
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
6062
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
63+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
6164

6265
#endif // DEVICE_I2C
6366

targets/TARGET_STM/TARGET_STM32L4/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
168168
break;
169169
}
170170
} else {
171+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
172+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
173+
Enabling this may impact performance*/
174+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
175+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
171176
tim = i2c_compute_timing(pclk, hz);
177+
#endif
172178
}
173179
return tim;
174180
}

targets/TARGET_STM/TARGET_STM32L4/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,13 @@ extern "C" {
5757
#define I2CAPI_I2C4_CLKSRC RCC_I2C4CLKSOURCE_SYSCLK
5858

5959
uint32_t i2c_get_pclk(I2CName i2c);
60-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
6160
uint32_t i2c_get_timing(I2CName i2c, int hz);
61+
62+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
63+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
6264
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
6365
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
66+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
6467

6568
#endif // DEVICE_I2C
6669

targets/TARGET_STM/TARGET_STM32L5/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
142142
}
143143

144144
else {
145+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
146+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
147+
Enabling this may impact performance */
148+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
149+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
145150
tim = i2c_compute_timing(pclk, hz);
151+
#endif
146152
}
147153
return tim;
148154
}

targets/TARGET_STM/TARGET_STM32L5/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,13 @@ extern "C" {
4343
#define I2CAPI_I2C4_CLKSRC RCC_I2C4CLKSOURCE_SYSCLK
4444

4545
uint32_t i2c_get_pclk(I2CName i2c);
46-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4746
uint32_t i2c_get_timing(I2CName i2c, int hz);
47+
48+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
49+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4850
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
4951
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
52+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
5053

5154
#endif // DEVICE_I2C
5255

targets/TARGET_STM/TARGET_STM32WB/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
140140
}
141141

142142
else {
143+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
144+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
145+
Enabling this may impact performance */
146+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
147+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
143148
tim = i2c_compute_timing(pclk, hz);
149+
#endif
144150
}
145151
return tim;
146152
}

targets/TARGET_STM/TARGET_STM32WB/i2c_device.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
extern "C" {
2525
#endif
2626

27-
/* Define I2C Device */
27+
/* Define I2C Device */
2828
#if DEVICE_I2C
2929

3030
/* Define IP version */
@@ -50,10 +50,13 @@ extern "C" {
5050
#define I2CAPI_I2C3_CLKSRC RCC_I2C3CLKSOURCE_SYSCLK
5151

5252
uint32_t i2c_get_pclk(I2CName i2c);
53-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5453
uint32_t i2c_get_timing(I2CName i2c, int hz);
54+
55+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
56+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
5557
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
5658
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
59+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
5760

5861
#endif // DEVICE_I2C
5962

targets/TARGET_STM/TARGET_STM32WL/i2c_device.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,13 @@ uint32_t i2c_get_timing(I2CName i2c, int hz)
125125
}
126126

127127
else {
128+
/* If MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO assert is triggered.
129+
User needs to enable I2C_TIMING_VALUE_ALGO in target.json for specific target.
130+
Enabling this may impact performance */
131+
MBED_ASSERT(MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO);
132+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
128133
tim = i2c_compute_timing(pclk, hz);
134+
#endif
129135
}
130136
return tim;
131137
}

targets/TARGET_STM/TARGET_STM32WL/i2c_device.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,13 @@ extern "C" {
4242
#define I2CAPI_I2C3_CLKSRC RCC_I2C3CLKSOURCE_SYSCLK
4343

4444
uint32_t i2c_get_pclk(I2CName i2c);
45-
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4645
uint32_t i2c_get_timing(I2CName i2c, int hz);
46+
47+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
48+
uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq);
4749
void i2c_compute_presc_scldel_sdadel(uint32_t clock_src_freq, uint32_t I2C_speed);
4850
uint32_t i2c_compute_scll_sclh(uint32_t clock_src_freq, uint32_t I2C_speed);
51+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
4952

5053
#endif // DEVICE_I2C
5154

targets/TARGET_STM/i2c_api.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
#include "mbed_error.h"
4444
#include "platform/mbed_power_mgmt.h"
4545

46+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
4647
/** @defgroup I2C_DEVICE_Private_Constants I2C_DEVICE Private Constants
4748
* @{
4849
*/
@@ -151,6 +152,7 @@ static const I2C_Charac_t I2C_Charac[] = {
151152
*/
152153
static I2C_Timings_t I2c_valid_timing[I2C_VALID_TIMING_NBR];
153154
static uint32_t I2c_valid_timing_nbr = 0;
155+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
154156

155157
#ifndef DEBUG_STDIO
156158
# define DEBUG_STDIO 0
@@ -593,10 +595,6 @@ void i2c_frequency(i2c_t *obj, int hz)
593595
handle->Init.DutyCycle = I2C_DUTYCYCLE_2;
594596
#endif
595597
#ifdef I2C_IP_VERSION_V2
596-
/* Only predefined timing for below frequencies are supported */
597-
MBED_ASSERT((hz == 100000) || (hz == 400000) || (hz == 1000000));
598-
/* Calculates I2C timing value with respect to I2C input clock and I2C bus frequency */
599-
handle->Init.Timing = i2c_get_timing(obj_s->i2c, hz);
600598
// Enable the Fast Mode Plus capability
601599
if (hz == 1000000) {
602600
#if defined(I2C1_BASE) && defined(I2C_FASTMODEPLUS_I2C1) // sometimes I2C_FASTMODEPLUS_I2Cx is define even if not supported by the chip
@@ -655,6 +653,12 @@ void i2c_frequency(i2c_t *obj, int hz)
655653
__HAL_RCC_I2C4_CONFIG(I2CAPI_I2C4_CLKSRC);
656654
}
657655
#endif
656+
#ifdef I2C_IP_VERSION_V2
657+
/* Only predefined timing for below frequencies are supported */
658+
MBED_ASSERT((hz == 100000) || (hz == 400000) || (hz == 1000000));
659+
/* Calculates I2C timing value with respect to I2C input clock and I2C bus frequency */
660+
handle->Init.Timing = i2c_get_timing(obj_s->i2c, hz);
661+
#endif
658662
#if defined(DUAL_CORE) && (TARGET_STM32H7)
659663
LL_HSEM_ReleaseLock(HSEM, CFG_HW_RCC_SEMID, HSEM_CR_COREID_CURRENT);
660664
#endif /* DUAL_CORE */
@@ -1514,6 +1518,7 @@ void i2c_abort_asynch(i2c_t *obj)
15141518
HAL_I2C_Master_Abort_IT(handle, Dummy_DevAddress);
15151519
}
15161520

1521+
#if MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
15171522
/**
15181523
* @brief Calculate SCLL and SCLH and find best configuration.
15191524
* @param clock_src_freq I2C source clock in HZ.
@@ -1691,6 +1696,7 @@ uint32_t i2c_compute_timing(uint32_t clock_src_freq, uint32_t i2c_freq)
16911696

16921697
return ret;
16931698
}
1699+
#endif // MBED_CONF_TARGET_I2C_TIMING_VALUE_ALGO
16941700

16951701
#endif // DEVICE_I2C_ASYNCH
16961702

0 commit comments

Comments
 (0)