|
ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
|
IOPORT (GPIO) register layout for the Renesas RA8D2. More...
#include <stddef.h>#include <stdint.h>#include "ra8_attributes.h"#include "ra8_bit_constants.h"#include "ra8_port_constants.h"Go to the source code of this file.
Data Structures | |
| struct | r_port_regs_t |
| Per-port IOPORT register window. More... | |
Enumerations | |
| enum | ra8_port_addr_t : uintptr_t { k_ra8_port0_base_addr = 0x40400000UL , k_ra8_port1_base_addr = 0x40400020UL , k_ra8_port2_base_addr = 0x40400040UL , k_ra8_port3_base_addr = 0x40400060UL , k_ra8_port4_base_addr = 0x40400080UL , k_ra8_port5_base_addr = 0x404000A0UL , k_ra8_port6_base_addr = 0x404000C0UL , k_ra8_port7_base_addr = 0x404000E0UL , k_ra8_port8_base_addr = 0x40400100UL , k_ra8_port9_base_addr = 0x40400120UL , k_ra8_port10_base_addr = 0x40400140UL , k_ra8_port11_base_addr = 0x40400160UL , k_ra8_port12_base_addr = 0x40400180UL , k_ra8_port13_base_addr = 0x404001A0UL , k_ra8_port14_base_addr = 0x404001C0UL , k_ra8_port_stride = 0x20UL } |
| enum | ra8_port_regs_size_t : uint8_t { k_ra8_port_regs_bytes = 16U } |
| Expected byte size of the per-port register window. More... | |
| enum | ra8_pcntr_half_t : uint8_t { k_ra8_pcntr_low_half_shift = 0U , k_ra8_pcntr_high_half_shift = 16U } |
| Bit shifts for the halves inside each PCNTR register. More... | |
Functions | |
| static volatile r_port_regs_t * | ra8_port (ra8_port_t port) |
| Get the PORT register window for a given port index. | |
| static volatile r_port_regs_t * | ra8_port0 (void) |
| Get PORT0 registers. | |
| static volatile r_port_regs_t * | ra8_port1 (void) |
| Get PORT1 registers. | |
| static volatile r_port_regs_t * | ra8_port2 (void) |
| Get PORT2 registers. | |
| static volatile r_port_regs_t * | ra8_port3 (void) |
| Get PORT3 registers. | |
| static volatile r_port_regs_t * | ra8_port4 (void) |
| Get PORT4 registers. | |
| static volatile r_port_regs_t * | ra8_port5 (void) |
| Get PORT5 registers. | |
| static volatile r_port_regs_t * | ra8_port6 (void) |
| Get PORT6 registers. | |
| static volatile r_port_regs_t * | ra8_port7 (void) |
| Get PORT7 registers. | |
| static volatile r_port_regs_t * | ra8_port8 (void) |
| Get PORT8 registers. | |
| static volatile r_port_regs_t * | ra8_port9 (void) |
| Get PORT9 registers. | |
| static volatile r_port_regs_t * | ra8_port10 (void) |
| Get PORT10 registers. | |
| static volatile r_port_regs_t * | ra8_port11 (void) |
| Get PORT11 registers. | |
| static volatile r_port_regs_t * | ra8_port12 (void) |
| Get PORT12 registers. | |
| static volatile r_port_regs_t * | ra8_port13 (void) |
| Get PORT13 registers. | |
| static volatile r_port_regs_t * | ra8_port14 (void) |
| Get PORT14 registers. | |
IOPORT (GPIO) register layout for the Renesas RA8D2.
The RA8D2 IOPORT controls up to 15 16-bit ports (PORT0..PORT14). Each port occupies a 32-byte window in memory starting at 0x40400000 with stride 0x20:
The first 16 bytes of each window hold four 32-bit control registers (PCNTR1..PCNTR4) and the remaining 16 bytes are reserved.
| Offset | Name | RW | Layout |
|---|---|---|---|
| 0x00 | PCNTR1 | RW | { PODR[31:16], PDR[15:0] } |
| 0x04 | PCNTR2 | R | { EIDR[31:16], PIDR[15:0] } |
| 0x08 | PCNTR3 | W | { PORR[31:16], POSR[15:0] } |
| 0x0C | PCNTR4 | RW | { EORR[31:16], EOSR[15:0] } |
PDR sets pin direction (0 = input, 1 = output). PODR sets or reads the output latch. PIDR returns the current pin state. POSR and PORR are the atomic set and atomic-reset registers: writing a 1 bit to POSR drives that pin high, writing a 1 bit to PORR drives it low, and writing a 0 to either leaves the bit alone. This lets us toggle a single pin without a read-modify-write.
Always prefer POSR / PORR over PODR when the intent is "set this one bit" – otherwise two ISRs editing the same port race on the read-modify-write.
Definition in file ra8_port_regs.h.
| enum ra8_pcntr_half_t : uint8_t |
Bit shifts for the halves inside each PCNTR register.
| Enumerator | |
|---|---|
| k_ra8_pcntr_low_half_shift | PDR/PIDR/POSR/EOSR half. |
| k_ra8_pcntr_high_half_shift | PODR/EIDR/PORR/EORR half. |
Definition at line 266 of file ra8_port_regs.h.
| enum ra8_port_addr_t : uintptr_t |
Definition at line 65 of file ra8_port_regs.h.
| enum ra8_port_regs_size_t : uint8_t |
Expected byte size of the per-port register window.
| Enumerator | |
|---|---|
| k_ra8_port_regs_bytes | RA8 port registers bytes. |
Definition at line 133 of file ra8_port_regs.h.
|
inlinestatic |
Get the PORT register window for a given port index.
| [in] | port | ra8_port_t value (0..k_ra8_port_max). |
Definition at line 157 of file ra8_port_regs.h.
References k_ra8_port0_base_addr, k_ra8_port_max, and k_ra8_port_stride.
Referenced by cam_get_probe_ports(), internal_ra8_epaper_wait_ready(), ra8_gpio_read(), ra8_gpio_toggle(), ra8_gpio_write(), ra8_pcntr_read(), and ra8_pcntr_set_output().
|
inlinestatic |
Get PORT0 registers.
Definition at line 168 of file ra8_port_regs.h.
References k_ra8_port0_base_addr.
|
inlinestatic |
Get PORT1 registers.
Definition at line 174 of file ra8_port_regs.h.
References k_ra8_port1_base_addr.
|
inlinestatic |
Get PORT10 registers.
Definition at line 228 of file ra8_port_regs.h.
References k_ra8_port10_base_addr.
|
inlinestatic |
Get PORT11 registers.
Definition at line 234 of file ra8_port_regs.h.
References k_ra8_port11_base_addr.
|
inlinestatic |
Get PORT12 registers.
Definition at line 240 of file ra8_port_regs.h.
References k_ra8_port12_base_addr.
|
inlinestatic |
Get PORT13 registers.
Definition at line 246 of file ra8_port_regs.h.
References k_ra8_port13_base_addr.
|
inlinestatic |
Get PORT14 registers.
Definition at line 252 of file ra8_port_regs.h.
References k_ra8_port14_base_addr.
|
inlinestatic |
Get PORT2 registers.
Definition at line 180 of file ra8_port_regs.h.
References k_ra8_port2_base_addr.
|
inlinestatic |
Get PORT3 registers.
Definition at line 186 of file ra8_port_regs.h.
References k_ra8_port3_base_addr.
|
inlinestatic |
Get PORT4 registers.
Definition at line 192 of file ra8_port_regs.h.
References k_ra8_port4_base_addr.
|
inlinestatic |
Get PORT5 registers.
Definition at line 198 of file ra8_port_regs.h.
References k_ra8_port5_base_addr.
|
inlinestatic |
Get PORT6 registers.
Definition at line 204 of file ra8_port_regs.h.
References k_ra8_port6_base_addr.
|
inlinestatic |
Get PORT7 registers.
Definition at line 210 of file ra8_port_regs.h.
References k_ra8_port7_base_addr.
|
inlinestatic |
Get PORT8 registers.
Definition at line 216 of file ra8_port_regs.h.
References k_ra8_port8_base_addr.
|
inlinestatic |
Get PORT9 registers.
Definition at line 222 of file ra8_port_regs.h.
References k_ra8_port9_base_addr.