Skip to content

Commit b41579f

Browse files
committed
Fixing SDRAM to use input config
1 parent 257821a commit b41579f

3 files changed

Lines changed: 26 additions & 3 deletions

File tree

include/core/io/SDRAM.hpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,19 @@ class SDRAM {
119119
*/
120120
static uint32_t getSdramClockFrequency(uint8_t mcuClkPerSdramClk);
121121

122+
/**
123+
* Translates HAL SDRAM Clock number into a 2 or 3
124+
* @param sdClockPeriod HAL SDRAM Clock Number (see FMC_SDRAM_Clock_Period FMC SDRAM Clock Period)
125+
* @return Mcu Clock Cycles per SDRAM Clock Cycle
126+
*/
127+
static uint8_t getMCUClkPerSdramClk(uint32_t sdClockPeriod);
128+
122129
/**
123130
* Get how long one SDRAM Clock cycle is in femtoseconds
124131
* @param mcuClkPerSdramClk Number of microcontroller clock cycles for every SDRAM Clock Cycle
125132
* @return the SDRAM clock period in femtoseconds
126133
*/
127-
static uint32_t getSdramClockPeriodFS(uint8_t mcuClkPerSdramClk);
134+
static uint32_t getSdramClockPeriodFS(uint32_t mcuClkPerSdramClk);
128135

129136
/**
130137
* Transform a time given in nanoseconds into how many clock cycles fit in that range

src/core/io/SDRAM.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
#include <core/io/SDRAM.hpp>
2+
#include <sys/types.h>
23

34
namespace core::io {
45

6+
57
SDRAM::SDRAM(uint32_t* memoryAddress, SDRAMPinGroup& pins, const SDRAMInitConfig& initConfig,
68
const SDRAMTimingConfig& timingConfig, const SDRAMDevice& device)
79
: memoryAddress(memoryAddress), pins(pins), initConfig(initConfig), timingConfig(timingConfig), device(device) {}
@@ -10,7 +12,20 @@ namespace core::io {
1012
return HAL_RCC_GetSysClockFreq() / mcuClkPerSdramClk;
1113
}
1214

13-
uint32_t SDRAM::getSdramClockPeriodFS(uint8_t mcuClkPerSdramClk) {
15+
uint8_t SDRAM::getMCUClkPerSdramClk(uint32_t sdClockPeriod) {
16+
switch (sdClockPeriod) {
17+
default:
18+
case FMC_SDRAM_CLOCK_PERIOD_2:
19+
return 2;
20+
break;
21+
case FMC_SDRAM_CLOCK_PERIOD_3:
22+
return 3;
23+
break;
24+
}
25+
26+
}
27+
28+
uint32_t SDRAM::getSdramClockPeriodFS(uint32_t mcuClkPerSdramClk) {
1429
return 1000000000UL / (getSdramClockFrequency(mcuClkPerSdramClk) / 1000000);
1530

1631
/**

src/core/io/platform/f4xx/SDRAMf4xx.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,9 @@ SDRAM::Status SDRAMf4xx::SendCommand(SDRAMCommand type, SDRAMCommandTarget targe
6464
}
6565

6666
SDRAM::Status SDRAMf4xx::ProgramRefreshRate(uint32_t rowCount, uint32_t refreshTime) {
67+
uint8_t clockPeriodNumber = getMCUClkPerSdramClk(sdram.Init.SDClockPeriod);
6768
HAL_StatusTypeDef halStatus = FMC_SDRAM_ProgramRefreshRate(
68-
this->sdramDevice, (((refreshTime * 1000) / rowCount) * (getSdramClockFrequency(TODO) / 1000000)) - 20);
69+
this->sdramDevice, (((refreshTime * 1000) / rowCount) * (getSdramClockFrequency(clockPeriodNumber) / 1000000)) - 20);
6970

7071
return SDRAM::HALStatusToSDRAMStatus(halStatus);
7172
}

0 commit comments

Comments
 (0)