ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_port_regs.h File Reference

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"
Include dependency graph for ra8_port_regs.h:
This graph shows which files directly or indirectly include this file:

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_tra8_port (ra8_port_t port)
 Get the PORT register window for a given port index.
static volatile r_port_regs_tra8_port0 (void)
 Get PORT0 registers.
static volatile r_port_regs_tra8_port1 (void)
 Get PORT1 registers.
static volatile r_port_regs_tra8_port2 (void)
 Get PORT2 registers.
static volatile r_port_regs_tra8_port3 (void)
 Get PORT3 registers.
static volatile r_port_regs_tra8_port4 (void)
 Get PORT4 registers.
static volatile r_port_regs_tra8_port5 (void)
 Get PORT5 registers.
static volatile r_port_regs_tra8_port6 (void)
 Get PORT6 registers.
static volatile r_port_regs_tra8_port7 (void)
 Get PORT7 registers.
static volatile r_port_regs_tra8_port8 (void)
 Get PORT8 registers.
static volatile r_port_regs_tra8_port9 (void)
 Get PORT9 registers.
static volatile r_port_regs_tra8_port10 (void)
 Get PORT10 registers.
static volatile r_port_regs_tra8_port11 (void)
 Get PORT11 registers.
static volatile r_port_regs_tra8_port12 (void)
 Get PORT12 registers.
static volatile r_port_regs_tra8_port13 (void)
 Get PORT13 registers.
static volatile r_port_regs_tra8_port14 (void)
 Get PORT14 registers.

Detailed Description

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:

PORT0 @ 0x40400000
PORT1 @ 0x40400020
...
PORT14 @ 0x404001C0

The first 16 bytes of each window hold four 32-bit control registers (PCNTR1..PCNTR4) and the remaining 16 bytes are reserved.

Register map (per port)

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.

Atomic sets beat RMW

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.

Enumeration Type Documentation

◆ ra8_pcntr_half_t

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.

◆ ra8_port_addr_t

enum ra8_port_addr_t : uintptr_t
Enumerator
k_ra8_port0_base_addr 

RA8 port0 base address.

k_ra8_port1_base_addr 

RA8 port1 base address.

k_ra8_port2_base_addr 

RA8 port2 base address.

k_ra8_port3_base_addr 

RA8 port3 base address.

k_ra8_port4_base_addr 

RA8 port4 base address.

k_ra8_port5_base_addr 

RA8 port5 base address.

k_ra8_port6_base_addr 

RA8 port6 base address.

k_ra8_port7_base_addr 

RA8 port7 base address.

k_ra8_port8_base_addr 

RA8 port8 base address.

k_ra8_port9_base_addr 

RA8 port9 base address.

k_ra8_port10_base_addr 

RA8 port10 base address.

k_ra8_port11_base_addr 

RA8 port11 base address.

k_ra8_port12_base_addr 

RA8 port12 base address.

k_ra8_port13_base_addr 

RA8 port13 base address.

k_ra8_port14_base_addr 

RA8 port14 base address.

k_ra8_port_stride 

Bytes between adjacent ports.

Definition at line 65 of file ra8_port_regs.h.

◆ ra8_port_regs_size_t

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.

Function Documentation

◆ ra8_port()

volatile r_port_regs_t * ra8_port ( ra8_port_t port)
inlinestatic

Get the PORT register window for a given port index.

Parameters
[in]portra8_port_t value (0..k_ra8_port_max).
Returns
Volatile pointer to the port's register window, or nullptr if port is out of range.
Note
The pointer is computed directly from the base address and stride, so the function is a single add + cast in release builds.

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().

◆ ra8_port0()

volatile r_port_regs_t * ra8_port0 ( void )
inlinestatic

Get PORT0 registers.

Definition at line 168 of file ra8_port_regs.h.

References k_ra8_port0_base_addr.

◆ ra8_port1()

volatile r_port_regs_t * ra8_port1 ( void )
inlinestatic

Get PORT1 registers.

Definition at line 174 of file ra8_port_regs.h.

References k_ra8_port1_base_addr.

◆ ra8_port10()

volatile r_port_regs_t * ra8_port10 ( void )
inlinestatic

Get PORT10 registers.

Definition at line 228 of file ra8_port_regs.h.

References k_ra8_port10_base_addr.

◆ ra8_port11()

volatile r_port_regs_t * ra8_port11 ( void )
inlinestatic

Get PORT11 registers.

Definition at line 234 of file ra8_port_regs.h.

References k_ra8_port11_base_addr.

◆ ra8_port12()

volatile r_port_regs_t * ra8_port12 ( void )
inlinestatic

Get PORT12 registers.

Definition at line 240 of file ra8_port_regs.h.

References k_ra8_port12_base_addr.

◆ ra8_port13()

volatile r_port_regs_t * ra8_port13 ( void )
inlinestatic

Get PORT13 registers.

Definition at line 246 of file ra8_port_regs.h.

References k_ra8_port13_base_addr.

◆ ra8_port14()

volatile r_port_regs_t * ra8_port14 ( void )
inlinestatic

Get PORT14 registers.

Definition at line 252 of file ra8_port_regs.h.

References k_ra8_port14_base_addr.

◆ ra8_port2()

volatile r_port_regs_t * ra8_port2 ( void )
inlinestatic

Get PORT2 registers.

Definition at line 180 of file ra8_port_regs.h.

References k_ra8_port2_base_addr.

◆ ra8_port3()

volatile r_port_regs_t * ra8_port3 ( void )
inlinestatic

Get PORT3 registers.

Definition at line 186 of file ra8_port_regs.h.

References k_ra8_port3_base_addr.

◆ ra8_port4()

volatile r_port_regs_t * ra8_port4 ( void )
inlinestatic

Get PORT4 registers.

Definition at line 192 of file ra8_port_regs.h.

References k_ra8_port4_base_addr.

◆ ra8_port5()

volatile r_port_regs_t * ra8_port5 ( void )
inlinestatic

Get PORT5 registers.

Definition at line 198 of file ra8_port_regs.h.

References k_ra8_port5_base_addr.

◆ ra8_port6()

volatile r_port_regs_t * ra8_port6 ( void )
inlinestatic

Get PORT6 registers.

Definition at line 204 of file ra8_port_regs.h.

References k_ra8_port6_base_addr.

◆ ra8_port7()

volatile r_port_regs_t * ra8_port7 ( void )
inlinestatic

Get PORT7 registers.

Definition at line 210 of file ra8_port_regs.h.

References k_ra8_port7_base_addr.

◆ ra8_port8()

volatile r_port_regs_t * ra8_port8 ( void )
inlinestatic

Get PORT8 registers.

Definition at line 216 of file ra8_port_regs.h.

References k_ra8_port8_base_addr.

◆ ra8_port9()

volatile r_port_regs_t * ra8_port9 ( void )
inlinestatic

Get PORT9 registers.

Definition at line 222 of file ra8_port_regs.h.

References k_ra8_port9_base_addr.