40static const char*
s_tag =
"SDRAM";
58typedef enum : uint32_t {
78typedef enum : uint8_t {
94typedef enum : uint8_t {
102typedef enum : uint32_t {
208 for (uint32_t i = 0U; i < count; ++i) {
249 if ((uint8_t)(reg->
SDSR & mask) == 0U) {
static const char * s_tag
Logging / check tag.
Annotation-attribute framework macros for ra8-firmware.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
Validation and Error-Checking Macros for ra8-firmware.
#define RA8_CHECK_NULL_PTR(ptr, tag, message)
Reject nullptr pointer, returning k_ra8_err_null_ptr.
Error Code Definitions for ra8-firmware.
@ k_ra8_err_invalid_state
Module in wrong state for requested operation.
@ k_ra8_err_hw_timeout
Hardware timed out waiting for a flag or handshake.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
PSEL codes for peripheral pin routing on the RA8D2.
@ k_ra8_psel_bus
01011b: External BUS interface.
Lightweight Logging Interface for ra8-firmware.
#define ra8_log_info(tag, message)
RA8 log info.
#define ra8_log_error(tag, message)
RA8 log error.
Pin Function Select (PFS) register layout for the Renesas RA8D2.
@ k_ra8_pfs_dscr_high_speed_high
10b: High-speed high drive.
Typed Port / Pin Constants for the RA8D2 IOPORT Module.
ra8_port_pin_t
Packed (port << 8) | pin pin identifier.
@ k_ra8_port_13
RA8 port 13.
@ k_ra8_port_12
RA8 port 12.
@ k_ra8_port_3
RA8 port 3.
@ k_ra8_port_6
RA8 port 6.
@ k_ra8_port_5
RA8 port 5.
@ k_ra8_port_8
RA8 port 8.
@ k_ra8_port_1
RA8 port 1.
@ k_ra8_port_10
RA8 port 10.
#define RA8_PIN(port, pin)
Build a ra8_port_pin_t from explicit port / pin indices.
@ k_ra8_pin_11
RA8 pin 11.
@ k_ra8_pin_10
RA8 pin 10.
@ k_ra8_pin_13
RA8 pin 13.
@ k_ra8_pin_12
RA8 pin 12.
@ k_ra8_pin_14
RA8 pin 14.
@ k_ra8_pin_15
RA8 pin 15.
High-level GPIO helpers on top of the PORT + PFS register layer.
ra8_err_t ra8_pfs_set_drive_strength(ra8_port_pin_t pin, ra8_pfs_dscr_t dscr)
Set the output drive strength (PmnPFS.DSCR) of an already-routed pin.
ra8_err_t ra8_pfs_route_peripheral(ra8_port_pin_t pin, ra8_psel_t psel, const char *owner)
Route a pin to a non-IRQ peripheral function via PFS.PSEL.
Scoped PRCR unlock helper.
#define RA8_PROTECTED_WRITE(unlock_val)
Scoped PRCR unlock block.
static ra8_err_t internal_sdramc_wait(uint8_t mask)
Spin until the masked SDSR status bits clear.
static ra8_err_t internal_sdramc_route_pins(void)
Route every SDRAM parallel-bus pin to the external-bus mux.
ra8_sdramc_reg_val_t
SDRAMC register values for the EK-RA8D2 IS42S32160F SDRAM.
@ k_ra8_sdrfcr_init
SDRFCR: REFW=12cyc, refresh/900cyc(7.2us).
@ k_ra8_sdccr_enable
SDCCR: BSIZE=01, EXENB=1.
@ k_ra8_sdmod_lmr
SDMOD: WB=single, CL=3, BT=seq, BL=1.
@ k_ra8_sdramc_kick
Generic "set bit 0" kick value.
@ k_ra8_sdtr_init
SDTR: RAS=6,RCD=4,RP=4,WR=2,CL=3 cyc.
@ k_ra8_sdir_init
SDIR: ARFI=11cyc, ARFC=8x, PRC=3cyc.
@ k_ra8_sdamod_be
SDAMOD.BE=1: continuous access on.
@ k_ra8_sdccr_cfg_32bit
SDCCR: BSIZE=01 (32-bit), EXENB=0.
@ k_ra8_sdadr_mxc_9col
SDADR.MXC=01b: 9-bit column shift.
ra8_sdramc_spin_t
Upper bound for the SDSR status-poll loops (NASA P10 Rule 2).
@ k_ra8_sdramc_spin_max
~ms at 1 GHz; init takes < 1 us.
ra8_sdramc_sdsr_t
SDRAM Status Register (SDSR) bit masks.
@ k_ra8_sdsr_all
MRSST | INIST | SRFST: all blocking bits.
@ k_ra8_sdsr_srfst
SRFST (bit 4): self-refresh transition/recovery in progress.
@ k_ra8_sdsr_mrsst
MRSST (bit 0): mode-register-set in progress.
@ k_ra8_sdsr_inist
INIST (bit 3): init sequence in progress.
ra8_err_t ra8_sdramc_enter_stop(void)
Disable auto-refresh for deep-sleep entry.
ra8_err_t ra8_sdramc_exit_stop(void)
Re-enable auto-refresh after wake-up.
ra8_sdramc_sdself_t
SDRAM Self-Refresh Control Register (SDSELF) bit values.
@ k_ra8_sdself_sfen
SFEN (bit 0): self-refresh enable.
ra8_err_t ra8_sdramc_init(void)
Initialise the external SDRAM at k_ra8_sdram_base_addr.
static const ra8_port_pin_t s_sdram_bus_pins[]
The 57 EK-RA8D2 parallel-bus pins the SDRAMC drives.
ra8_err_t ra8_sdramc_exit_self_refresh(void)
Exit SDRAM self-refresh and resume normal auto-refresh operation.
ra8_err_t ra8_sdramc_enter_self_refresh(void)
Put the external SDRAM into JEDEC self-refresh mode.
ra8_err_t ra8_sdramc_get_status(uint8_t *out_enabled)
Read the refresh-enable bit as a status mask.
ra8_err_t ra8_sdramc_set_refresh_interval(uint16_t sdrfcr)
Change the SDRAM auto-refresh interval at runtime.
ra8_err_t ra8_sdramc_deinit(void)
Tear down the SDRAM controller (disable refresh, clear SDICR).
External SDRAM controller driver (framework).
External SDRAM controller register layout for the Renesas RA8D2.
static volatile uint8_t * ra8_sdramc_sdckocr(void)
Get pointer to the R_SYSTEM SDCLK-output control register.
static volatile r_sdramc_regs_t * ra8_sdramc(void)
Get pointer to the SDRAMC register block.
System Control (SYSC) register layout for the Renesas RA8D2.
@ k_ra8_prcr_unlock_cgc
RA8 prcr unlock cgc.
SDRAM controller register window.
volatile uint8_t SDCMOD
SDC Mode Register.
volatile uint8_t SDICR
Init Sequence Control.
volatile uint8_t SDSR
SDRAM Status Register (RO).
volatile uint16_t SDIR
SDRAM Initialization Register.
volatile uint8_t SDSELF
SDRAM Self-Refresh Control.
volatile uint16_t SDMOD
SDRAM Mode Register.
volatile uint32_t SDTR
SDRAM Timing Register.
volatile uint16_t SDRFCR
SDRAM Refresh Control.
volatile uint8_t SDRFEN
SDRAM Auto-Refresh Control.
volatile uint8_t SDAMOD
SDRAM Access Mode Register.
volatile uint8_t SDCCR
SDC Control Register.
volatile uint8_t SDADR
SDRAM Address Register.