ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_register_guard.h
Go to the documentation of this file.
1
26
27#pragma once
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33#include <stdint.h>
34
39typedef struct {
40 uint32_t saved_primask;
42
60{
61#ifdef RA8_OFF_TARGET
62 guard->saved_primask = 0U;
63#else
64 uint32_t primask;
65 __asm__ volatile("mrs %0, primask" : "=r"(primask));
66 __asm__ volatile("cpsid i" ::: "memory");
67 guard->saved_primask = primask;
68#endif
69}
70
85static inline void ra8_register_guard_exit(const ra8_register_guard_t* guard)
86{
87#ifdef RA8_OFF_TARGET
88 (void)guard;
89#else
90 __asm__ volatile("msr primask, %0" ::"r"(guard->saved_primask) : "memory");
91#endif
92}
93
94#ifdef __cplusplus
95}
96#endif
static void ra8_register_guard_exit(const ra8_register_guard_t *guard)
Exit a critical section: restore PRIMASK.
static void ra8_register_guard_enter(ra8_register_guard_t *guard)
Enter a critical section: save PRIMASK, mask interrupts.
Opaque save-restore handle for IRQ masking.
uint32_t saved_primask
PRIMASK value captured at enter.