|
ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
|
Event Link Controller driver implementation. More...
#include "ra8_elc.h"#include <stdint.h>#include "ra8_attributes.h"#include "ra8_check.h"#include "ra8_elc_regs.h"#include "ra8_err.h"#include "ra8_log.h"#include "ra8_mstp.h"#include "ra8_mstp_regs.h"Go to the source code of this file.
Functions | |
| static volatile uint8_t * | internal_elcr (void) |
| Pointer to the 8-bit ELCR register. | |
| static volatile uint16_t * | internal_elsr (uint8_t index) |
Pointer to ELSR slot index. | |
| static volatile uint8_t * | internal_elsegr (uint8_t group) |
Pointer to the 8-bit ELSEGRn (BY) register at index group. | |
| ra8_err_t | ra8_elc_init (void) |
| Reset the ELC register block and enable the controller. | |
| ra8_err_t | ra8_elc_deinit (void) |
| Disable the ELC globally (ELCR.ELCON = 0) and stop the module. | |
| ra8_err_t | ra8_elc_link (uint8_t elsr_index, ra8_elc_event_t event) |
| Route an ELC event to an ELSR slot so the destination peripheral triggers on it. | |
| ra8_err_t | ra8_elc_unlink (uint8_t elsr_index) |
| Clear one ELSR slot so it stops routing any event. | |
| ra8_err_t | ra8_elc_software_trigger (uint8_t event_index) |
| Fire a software event via one of the ELSEGRn registers. | |
| ra8_err_t | ra8_elc_is_enabled (bool *out_enabled) |
| Read ELCR.ELCON to verify the global enable state. | |
Variables | |
| static const char * | s_tag = "ELC" |
Event Link Controller driver implementation.
See ra8_elc.h for the API contract. This file owns every write to the ELC register block (HUM Ch 19, p 817..836). Layout and the ELSEGR three-step write-protect sequence are cross-verified against FSP r_elc.c and FSP R_ELC_Type in R7KA8D2KF_core0.h.
Definition in file ra8_elc.c.
|
inlinestatic |
Pointer to the 8-bit ELCR register.
HUM Ch 19.2.1 "ELCR : Event Link Control Register", p 819.
Definition at line 46 of file ra8_elc.c.
References k_ra8_elc_base_addr, k_ra8_elc_off_elcr, and RA8_INTERNAL.
Referenced by ra8_elc_deinit(), ra8_elc_init(), and ra8_elc_is_enabled().
|
inlinestatic |
Pointer to the 8-bit ELSEGRn (BY) register at index group.
ELSEGR[0..3] live at 0x04/0x08/0x0C/0x10 (8-bit register with 3 bytes reserved – 4-byte stride). HUM Ch 19.2.2 "ELSEGRn : Event Link Software Event Generation Register n", p 819.
| [in] | group | Software event index 0..k_ra8_elc_segr_count - 1. |
Definition at line 80 of file ra8_elc.c.
References k_ra8_elc_base_addr, k_ra8_elc_elsegr_stride, k_ra8_elc_off_elsegr0, and RA8_INTERNAL.
Referenced by ra8_elc_init(), and ra8_elc_software_trigger().
|
inlinestatic |
Pointer to ELSR slot index.
FSP R_ELC_ELSR_Type is 16-bit ELS field + 16-bit reserved (4-byte stride); the driver only writes the 16-bit head. HUM Ch 19.2.3 "ELSRn : Event Link Setting Register n", p 820.
| [in] | index | ELSR slot 0..k_ra8_elc_elsr_count - 1. |
Definition at line 62 of file ra8_elc.c.
References k_ra8_elc_base_addr, k_ra8_elc_elsr_stride, k_ra8_elc_off_elsr0, and RA8_INTERNAL.
Referenced by ra8_elc_init(), ra8_elc_link(), and ra8_elc_unlink().
|
nodiscard |
Disable the ELC globally (ELCR.ELCON = 0) and stop the module.
Definition at line 120 of file ra8_elc.c.
References internal_elcr(), k_ra8_mstp_elc, and ra8_mstp_disable().
|
nodiscard |
Reset the ELC register block and enable the controller.
Powers the ELC module via MSTPCRC, clears every ELSR slot (ELSR0..ELSR52), clears ELSEGR0..3, then sets ELCR.ELCON = 1 so the hardware routes events.
Definition at line 91 of file ra8_elc.c.
References internal_elcr(), internal_elsegr(), internal_elsr(), k_ra8_elc_elsegr_step_unlock, k_ra8_elc_elsr_count, k_ra8_elc_segr_count, k_ra8_elcr_bit_elcon, k_ra8_mstp_elc, k_ra8_ok, ra8_log_info, ra8_mstp_enable(), RA8_RETURN_ON_ERROR, and s_tag.
Referenced by dtc_arm_setup_or_halt(), dtc_coh_setup_or_halt(), dtc_demo_setup_or_halt(), and internal_setup_or_halt().
|
nodiscard |
Read ELCR.ELCON to verify the global enable state.
| [out] | out_enabled | On success, true if ELCON is set. |
| k_ra8_ok | Value returned. |
| k_ra8_err_null_ptr | out_enabled was NULL. |
Definition at line 164 of file ra8_elc.c.
References internal_elcr(), k_ra8_elcr_bit_elcon, k_ra8_ok, RA8_CHECK_NULL_PTR, and s_tag.
Referenced by main().
|
nodiscard |
Route an ELC event to an ELSR slot so the destination peripheral triggers on it.
| [in] | elsr_index | Slot number 0..k_ra8_elc_elsr_count - 1. |
| [in] | event | ELC event number from ra8_elc_event_t. |
| k_ra8_ok | Slot programmed. |
| k_ra8_err_out_of_range | elsr_index out of range. |
Definition at line 127 of file ra8_elc.c.
References internal_elsr(), k_ra8_elc_elsr_count, k_ra8_err_out_of_range, and k_ra8_ok.
Referenced by internal_setup_or_halt().
|
nodiscard |
Fire a software event via one of the ELSEGRn registers.
Per HUM Ch 19.2.2 "ELSEGRn : Event Link Software Event Generation Register n" (p 817) and FSP R_ELC_SoftwareEventGenerate, the SEG bit is write-protected by WI/WE and must be set with a three-step sequence:
The hardware fires the event exactly once. Useful for testing event-driven paths without waiting for a real peripheral edge.
| [in] | event_index | Software event 0..3 (selects ELSEGR0..3). |
| k_ra8_ok | Three-step sequence written. |
| k_ra8_err_invalid_arg | event_index out of range. |
Definition at line 147 of file ra8_elc.c.
References internal_elsegr(), k_ra8_elc_elsegr_step_arm, k_ra8_elc_elsegr_step_trigger, k_ra8_elc_elsegr_step_unlock, k_ra8_elc_segr_count, k_ra8_err_invalid_arg, and k_ra8_ok.
Referenced by dtc_arm_run_armed(), dtc_arm_run_disarmed(), dtc_coh_run_once(), dtc_demo_run_once(), and main().
|
nodiscard |
Clear one ELSR slot so it stops routing any event.
| [in] | elsr_index | Slot number 0..k_ra8_elc_elsr_count - 1. |
| k_ra8_ok | Slot cleared. |
| k_ra8_err_out_of_range | elsr_index out of range. |
Definition at line 137 of file ra8_elc.c.
References internal_elsr(), k_ra8_elc_elsr_count, k_ra8_err_out_of_range, and k_ra8_ok.