Skip to content

Commit 4a62fab

Browse files
committed
Changed structure to add a new interface and make programmer facing code easier
1 parent 7ade10f commit 4a62fab

6 files changed

Lines changed: 26 additions & 14 deletions

File tree

CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ project(EVT
2424
LANGUAGES CXX C ASM
2525
)
2626

27-
add_library(${PROJECT_NAME} STATIC)
27+
add_library(${PROJECT_NAME} STATIC
28+
include/core/io/types/SDRAM_Device.hpp)
2829

2930
# Add sources
3031
target_sources(${PROJECT_NAME} PRIVATE

include/core/io/SDRAM.hpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include <HALf4/stm32f4xx_hal.h>
77

88
namespace core::io {
9-
9+
class SDRAMDevice;
1010
/**
1111
* Interface for configuring and accessing external SDRAM.
1212
* Provides clock frequency functions
@@ -104,9 +104,10 @@ class SDRAM {
104104
* @param pins the pins for use by the SDRAM Controller
105105
* @param initConfig HAL-level SDRAM parameters for how initialization works
106106
* @param timingConfig HAL-level SDRAM parameters for properly orchestrating hardware timing
107+
* @param device interface class with abstract function that is overridden with a specific implementation
107108
*/
108109
SDRAM(uint32_t* memoryAddress, SDRAMPinGroup& pins, const SDRAMInitConfig& initConfig,
109-
const SDRAMTimingConfig& timingConfig);
110+
const SDRAMTimingConfig& timingConfig, const SDRAMDevice& device);
110111

111112
/**
112113
* Gets the Frequency of the SDRAM CLK
@@ -195,12 +196,19 @@ class SDRAM {
195196
SDRAMPinGroup& pins;
196197
SDRAMInitConfig initConfig;
197198
SDRAMTimingConfig timingConfig;
199+
const SDRAMDevice& device;
198200

199201
static constexpr Status HALStatusToSDRAMStatus(uint32_t hal_status) {
200202
return static_cast<Status>(hal_status);
201203
}
202204
};
203205

206+
class SDRAMDevice {
207+
public:
208+
virtual ~SDRAMDevice() = default;
209+
virtual SDRAM::Status sendStartUpCommands(SDRAM& controller) = 0;
210+
};
211+
204212
} // namespace core::io
205213

206214
#endif

include/core/io/platform/f4xx/SDRAMf4xx.hpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ namespace core::io {
2424
*/
2525
class SDRAMf4xx : public SDRAM {
2626
public:
27-
#define SDRAM_BANK1 0xC0000000
28-
#define SDRAM_BANK2 0xD0000000
27+
static constexpr auto SDRAM_BANK1 = 0xC0000000;
28+
static constexpr auto SDRAM_BANK2 = 0xD0000000;
2929

3030
/**
3131
* Initializes an FMC device by enabling the specific peripheral clock,
@@ -34,9 +34,11 @@ class SDRAMf4xx : public SDRAM {
3434
* @param[in] pins a struct containing an array of pins and their length for use by the SDRAM Controller.
3535
* @param[in] sdramInitConfig SDRAM controller configuration parameters.
3636
* @param[in] sdramTimingConfig SDRAM timing configuration parameters.
37+
* @param[in] device interface class with abstract function that is overridden with a specific implementation
3738
*
3839
*/
39-
SDRAMf4xx(SDRAMPinGroup& pins, const SDRAMInitConfig& sdramInitConfig, const SDRAMTimingConfig& sdramTimingConfig);
40+
SDRAMf4xx(SDRAMPinGroup& pins, const SDRAMInitConfig& sdramInitConfig, const SDRAMTimingConfig& sdramTimingConfig,
41+
SDRAMDevice& device);
4042

4143
/**
4244
* Enable write protection for the sdram

include/core/manager.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -338,9 +338,10 @@ SPI& getSPI(GPIO* CSPins[], uint8_t pinLength) {
338338
*/
339339
#ifdef SDRAM_SUPPORTED
340340
template<SDRAM::SDRAMPinGroup& pins>
341-
SDRAM& getSDRAM(const SDRAM::SDRAMInitConfig& initConfig, const SDRAM::SDRAMTimingConfig& timingConfig) {
341+
SDRAM& getSDRAM(const SDRAM::SDRAMInitConfig& initConfig, const SDRAM::SDRAMTimingConfig& timingConfig,
342+
SDRAMDevice& device) {
342343
#ifdef STM32F4xx
343-
static SDRAMf4xx fmc(pins, initConfig, timingConfig);
344+
static SDRAMf4xx fmc(pins, initConfig, timingConfig, device);
344345
return fmc;
345346
#endif
346347
}

src/core/io/SDRAM.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
namespace core::io {
44

55
SDRAM::SDRAM(uint32_t* memoryAddress, SDRAMPinGroup& pins, const SDRAMInitConfig& initConfig,
6-
const SDRAMTimingConfig& timingConfig)
7-
: memoryAddress(memoryAddress), pins(pins), initConfig(initConfig), timingConfig(timingConfig) {}
6+
const SDRAMTimingConfig& timingConfig, const SDRAMDevice& device)
7+
: memoryAddress(memoryAddress), pins(pins), initConfig(initConfig), timingConfig(timingConfig), device(device) {}
88

99
uint32_t SDRAM::getSdramClockFrequency() {
1010
return HAL_RCC_GetSysClockFreq() / 2;

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
namespace core::io {
66

77
SDRAMf4xx::SDRAMf4xx(SDRAMPinGroup& pins, const SDRAMInitConfig& sdramInitConfig,
8-
const SDRAMTimingConfig& sdramTimingConfig)
8+
const SDRAMTimingConfig& sdramTimingConfig, SDRAMDevice& device)
99
: SDRAM((sdramInitConfig.sdBank == FMC_SDRAM_BANK1) ? reinterpret_cast<uint32_t*>(SDRAM_BANK1)
1010
: reinterpret_cast<uint32_t*>(SDRAM_BANK2),
11-
pins, sdramInitConfig, sdramTimingConfig),
11+
pins, sdramInitConfig, sdramTimingConfig, device),
1212
sdramDevice(FMC_SDRAM_DEVICE), sdram(), sdramTiming() {
1313

1414
// map the class init structs to the hal structs
@@ -33,8 +33,8 @@ SDRAMf4xx::SDRAMf4xx(SDRAMPinGroup& pins, const SDRAMInitConfig& sdramInitConfig
3333
sdramTiming.RCDDelay = sdramTimingConfig.rcdDelay;
3434

3535
InitHardware(pins);
36-
HAL_StatusTypeDef status = HAL_SDRAM_Init(&sdram, &sdramTiming);
37-
log::LOGGER.log(log::Logger::LogLevel::DEBUG, "%d status \r\n", status);
36+
HAL_SDRAM_Init(&sdram, &sdramTiming);
37+
device.sendStartUpCommands(*this);
3838
}
3939

4040
SDRAM::Status SDRAMf4xx::EnableWriteProtection() {

0 commit comments

Comments
 (0)