Skip to content

Commit 8f24f09

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 8f24f09

File tree

24 files changed

+174
-19
lines changed

24 files changed

+174
-19
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

0 commit comments

Comments
 (0)