|
ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
|
External SDRAM controller driver (framework). More...
Go to the source code of this file.
Functions | |
| ra8_err_t | ra8_sdramc_init (void) |
| Initialise the external SDRAM at k_ra8_sdram_base_addr. | |
| ra8_err_t | ra8_sdramc_deinit (void) |
| Tear down the SDRAM controller (disable refresh, clear SDICR). | |
| ra8_err_t | ra8_sdramc_set_refresh_interval (uint16_t sdrfcr) |
| Change the SDRAM auto-refresh interval at runtime. | |
| 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_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_err_t | ra8_sdramc_enter_self_refresh (void) |
| Put the external SDRAM into JEDEC self-refresh mode. | |
| ra8_err_t | ra8_sdramc_exit_self_refresh (void) |
| Exit SDRAM self-refresh and resume normal auto-refresh operation. | |
External SDRAM controller driver (framework).
Declares the fixed-sequence external SDRAM controller initialization and readiness interface.
Definition in file ra8_sdramc.h.
|
nodiscard |
Tear down the SDRAM controller (disable refresh, clear SDICR).
Definition at line 321 of file ra8_sdramc.c.
References k_ra8_ok, ra8_sdramc(), r_sdramc_regs_t::SDCCR, and r_sdramc_regs_t::SDRFEN.
|
nodiscard |
Put the external SDRAM into JEDEC self-refresh mode.
Self-refresh is the low-power retention state in which the SDRAM device drives its own internal refresh cycles from its own oscillator while the external bus is idle. This is the required state before the MCU enters Software Standby so the SDRAM contents (working set at 0x68000000) survive sleep.
Entry sequence (HUM Ch 15.3.14, Table 15.8):
| k_ra8_ok | SDRAM is now in self-refresh. |
| k_ra8_err_invalid_state | SDSR status bits were non-zero on entry, or SDSELF.SFEN was already 1. |
| k_ra8_err_hw_timeout | SDSR.SRFST did not clear within k_ra8_sdramc_spin_max polls. |
Definition at line 360 of file ra8_sdramc.c.
References internal_sdramc_wait(), k_ra8_err_invalid_state, k_ra8_ok, k_ra8_sdself_sfen, k_ra8_sdsr_all, k_ra8_sdsr_srfst, ra8_log_error, ra8_log_info, ra8_sdramc(), s_tag, r_sdramc_regs_t::SDRFEN, r_sdramc_regs_t::SDSELF, and r_sdramc_regs_t::SDSR.
|
nodiscard |
Disable auto-refresh for deep-sleep entry.
Definition at line 346 of file ra8_sdramc.c.
References k_ra8_ok, ra8_sdramc(), and r_sdramc_regs_t::SDRFEN.
|
nodiscard |
Exit SDRAM self-refresh and resume normal auto-refresh operation.
Clears SDSELF.SFEN to end self-refresh. The hardware performs SDRFCR.REFW self-refresh clearing cycles before returning the device to normal auto-refresh mode. Auto-refresh is then explicitly re-enabled via SDRFEN.
Exit sequence (HUM Ch 15.3.14, Table 15.8):
| k_ra8_ok | SDRAM has returned to auto-refresh. |
| k_ra8_err_invalid_state | SDSELF.SFEN was 0 (not in self-refresh) or SDSR.SRFST was set on entry. |
| k_ra8_err_hw_timeout | SDSR.SRFST did not clear within k_ra8_sdramc_spin_max polls. |
Definition at line 400 of file ra8_sdramc.c.
References internal_sdramc_wait(), k_ra8_err_invalid_state, k_ra8_ok, k_ra8_sdramc_kick, k_ra8_sdself_sfen, k_ra8_sdsr_srfst, ra8_log_error, ra8_log_info, ra8_sdramc(), s_tag, r_sdramc_regs_t::SDRFEN, r_sdramc_regs_t::SDSELF, and r_sdramc_regs_t::SDSR.
|
nodiscard |
Re-enable auto-refresh after wake-up.
Definition at line 353 of file ra8_sdramc.c.
References k_ra8_ok, k_ra8_sdramc_kick, ra8_sdramc(), and r_sdramc_regs_t::SDRFEN.
|
nodiscard |
Read the refresh-enable bit as a status mask.
| [out] | out_enabled | Non-zero when SDRFEN is set. |
Definition at line 338 of file ra8_sdramc.c.
References k_ra8_ok, RA8_CHECK_NULL_PTR, ra8_sdramc(), s_tag, and r_sdramc_regs_t::SDRFEN.
|
nodiscard |
Initialise the external SDRAM at k_ra8_sdram_base_addr.
Runs the documented SDRAM bring-up sequence (precharge all -> mode register write -> refresh enable). Uses EK-RA8D2 board defaults; change the refresh interval for a different panel.
Definition at line 257 of file ra8_sdramc.c.
References internal_sdramc_route_pins(), internal_sdramc_wait(), k_ra8_ok, k_ra8_prcr_unlock_cgc, k_ra8_sdadr_mxc_9col, k_ra8_sdamod_be, k_ra8_sdccr_cfg_32bit, k_ra8_sdccr_enable, k_ra8_sdir_init, k_ra8_sdmod_lmr, k_ra8_sdramc_kick, k_ra8_sdrfcr_init, k_ra8_sdsr_all, k_ra8_sdsr_inist, k_ra8_sdsr_mrsst, k_ra8_sdtr_init, ra8_log_error, ra8_log_info, RA8_PROTECTED_WRITE, ra8_sdramc(), ra8_sdramc_sdckocr(), s_tag, r_sdramc_regs_t::SDADR, r_sdramc_regs_t::SDAMOD, r_sdramc_regs_t::SDCCR, r_sdramc_regs_t::SDCMOD, r_sdramc_regs_t::SDICR, r_sdramc_regs_t::SDIR, r_sdramc_regs_t::SDMOD, r_sdramc_regs_t::SDRFCR, r_sdramc_regs_t::SDRFEN, and r_sdramc_regs_t::SDTR.
Referenced by app_bringup_panel(), cam_bringup(), cm_bringup_panel(), ez_bringup_panel(), internal_c6_cam_prepare_media(), internal_lcd_bringup_panel(), mg_bringup_panel(), ra8_io_blockdev_sdram_init(), sdram_demo_setup_or_halt(), sfr_bringup_panel(), and sh_panel_or_halt().
|
nodiscard |
Change the SDRAM auto-refresh interval at runtime.
| [in] | sdrfcr | New SDRFCR value. |
Definition at line 331 of file ra8_sdramc.c.
References k_ra8_ok, ra8_sdramc(), and r_sdramc_regs_t::SDRFCR.