ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_dmac_regs.h
Go to the documentation of this file.
1
28
29#pragma once
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35#include <stdint.h>
36
37#include "ra8_attributes.h"
38
39/* =============================================================================
40 * Base addresses (DMAC0 + shared module-control bank)
41 * =============================================================================
42 */
43
44typedef enum : uintptr_t {
45 k_ra8_dmac0_base_addr = 0x4000A000UL,
46 k_ra8_dma_base_addr = 0x4000A800UL,
48
54
55/* =============================================================================
56 * Per-channel register window
57 * =============================================================================
58 */
59
69typedef struct {
70 volatile uint32_t DMSAR;
71 volatile uint32_t DMDAR;
72 volatile uint32_t DMCRA;
73 volatile uint32_t DMCRB;
74 volatile uint16_t DMTMD;
75 volatile uint8_t _r0;
76 volatile uint8_t DMINT;
77 volatile uint16_t DMAMD;
78 volatile uint16_t _r1;
79 volatile uint32_t DMOFR;
80 volatile uint8_t DMCNT;
81 volatile uint8_t DMREQ;
82 volatile uint8_t DMSTS;
83 volatile uint8_t _r2;
84 volatile uint32_t DMSRR;
85 volatile uint32_t DMDRR;
86 volatile uint32_t DMSBS;
87 volatile uint32_t DMDBS;
88 volatile uint8_t DMBWR;
89 volatile uint8_t _r3;
90 volatile uint16_t _r4;
91 volatile uint8_t _r5[k_ra8_dmac_tail_padding];
93
94/* =============================================================================
95 * Shared DMA module-control bank (R_DMA at 0x4000A800)
96 * =============================================================================
97 */
98
105
116typedef struct {
117 volatile uint8_t DMAST;
118 volatile uint8_t _r0;
119 volatile uint16_t _r1;
120 volatile uint32_t _r2[k_ra8_dma_pad0_words];
121 volatile uint8_t DMCTL;
122 volatile uint8_t _r3;
123 volatile uint16_t _r4;
124 volatile uint32_t _r5[k_ra8_dma_pad1_words];
125 volatile uint32_t DMECHR;
126 volatile uint32_t _r6[k_ra8_dma_pad2_words];
127 volatile uint32_t DELSR[k_ra8_dma_delsr_count];
129
130/* =============================================================================
131 * DMTMD bit positions / masks (HUM 17.2.10, p 738)
132 * =============================================================================
133 */
134
142
143typedef enum : uint16_t {
150
155
162
168
175
176/* =============================================================================
177 * DMINT bit positions (HUM 17.2.11, p 739)
178 * =============================================================================
179 */
180
188
196
197/* =============================================================================
198 * DMAMD bit positions (HUM 17.2.12, p 741)
199 * =============================================================================
200 */
201
210
219
226
227/* =============================================================================
228 * DMCNT, DMREQ, DMSTS, DMAST bit positions
229 * =============================================================================
230 */
231
232typedef enum : uint8_t {
236
243
252
253typedef enum : uint8_t {
257
258/* =============================================================================
259 * DMCRA halves (HUM 17.2.8) and DMSBS/DMDBS halves (HUM 17.2.17/18)
260 * =============================================================================
261 */
262
269
276
277/* =============================================================================
278 * Accessors
279 * =============================================================================
280 */
281
284static inline volatile r_dmac_channel_regs_t* ra8_dmac(uint8_t channel)
285{
286 if (channel >= k_ra8_dmac_channel_count) {
287 return nullptr;
288 }
289 return (
291 ((uintptr_t)channel * (uintptr_t)k_ra8_dmac_channel_stride));
292}
293
296static inline volatile r_dma_shared_regs_t* ra8_dma_shared(void)
297{
299}
300
301#ifdef __cplusplus
302}
303#endif
Annotation-attribute framework macros for ra8-firmware.
#define RA8_HW_REGISTER_ACCESS
Mark an MMIO accessor function (returns volatile register pointer).
static volatile r_dmac_channel_regs_t * ra8_dmac(uint8_t channel)
Pointer to DMAC channel channel (0..7), or NULL on error.
ra8_dmac_limits_t
@ k_ra8_dmac_tail_padding
Bytes after DMBWR up to stride.
@ k_ra8_dmac_channel_count
RA8 DMAC channel count.
@ k_ra8_dmac_channel_stride
RA8 DMAC channel stride.
ra8_dmamd_mask_t
@ k_ra8_dmamd_dadr_mask
RA8 dmamd dadr mask.
@ k_ra8_dmamd_sara_mask
RA8 dmamd sara mask.
@ k_ra8_dmamd_sadr_mask
RA8 dmamd sadr mask.
@ k_ra8_dmamd_dm_mask
RA8 dmamd dm mask.
@ k_ra8_dmamd_sm_mask
RA8 dmamd sm mask.
@ k_ra8_dmamd_dara_mask
RA8 dmamd dara mask.
ra8_dmtmd_md_t
@ k_ra8_dmtmd_md_normal
00b: normal transfer.
@ k_ra8_dmtmd_md_repeat
01b: repeat transfer.
@ k_ra8_dmtmd_md_repeat_block
11b: repeat-block transfer.
@ k_ra8_dmtmd_md_block
10b: block transfer.
ra8_dmcra_bits_t
@ k_ra8_dmcra_low_mask
RA8 dmcra low mask.
@ k_ra8_dmcra_high_mask
RA8 dmcra high mask.
@ k_ra8_dmcra_high_pos
RA8 dmcra high pos.
@ k_ra8_dmcra_low_pos
RA8 dmcra low pos.
ra8_dmcnt_bits_t
@ k_ra8_dmcnt_dte_mask
RA8 dmcnt dte mask.
@ k_ra8_dmcnt_dte_pos
DMCNT.DTE bit 0 (HUM 17.2.14, p 743).
ra8_dmreq_bits_t
@ k_ra8_dmreq_swreq_pos
DMREQ.SWREQ bit 0.
@ k_ra8_dmreq_clrs_mask
RA8 dmreq clrs mask.
@ k_ra8_dmreq_clrs_pos
DMREQ.CLRS bit 4.
@ k_ra8_dmreq_swreq_mask
RA8 dmreq swreq mask.
ra8_dmast_bits_t
@ k_ra8_dmast_dmst_mask
RA8 dmast dmst mask.
@ k_ra8_dmast_dmst_pos
DMAST.DMST bit 0 (HUM 17.2.20, p 749).
ra8_dmamd_pos_t
@ k_ra8_dmamd_dm_pos
DM[1:0] dst addr update mode.
@ k_ra8_dmamd_sadr_pos
SADR src addr update select.
@ k_ra8_dmamd_dadr_pos
DADR dst addr update select.
@ k_ra8_dmamd_sm_pos
SM[1:0] src addr update mode.
@ k_ra8_dmamd_dara_pos
DARA[4:0] dst extended-repeat area.
@ k_ra8_dmamd_sara_pos
SARA[4:0] src extended-repeat area.
ra8_dma_shared_limits_t
@ k_ra8_dma_pad2_words
+0x44..0x7F: 60 bytes / 4 = 15 words.
@ k_ra8_dma_pad1_words
+0x14..0x3F: 44 bytes / 4 = 11 words.
@ k_ra8_dma_pad0_words
+0x04..0x0F: 12 bytes / 4 = 3 words.
@ k_ra8_dma_delsr_count
One DELSR per channel.
static volatile r_dma_shared_regs_t * ra8_dma_shared(void)
Pointer to the shared DMA module-control bank.
ra8_dmint_mask_t
@ k_ra8_dmint_esie_mask
RA8 dmint esie mask.
@ k_ra8_dmint_sarie_mask
RA8 dmint sarie mask.
@ k_ra8_dmint_rptie_mask
RA8 dmint rptie mask.
@ k_ra8_dmint_dtie_mask
RA8 dmint dtie mask.
@ k_ra8_dmint_darie_mask
RA8 dmint darie mask.
ra8_dmtmd_pos_t
@ k_ra8_dmtmd_sz_pos
SZ[1:0] bit 8..9 – transfer size.
@ k_ra8_dmtmd_tkp_pos
TKP bit 10 – transfer keep.
@ k_ra8_dmtmd_md_pos
MD[1:0] bit 14..15 – mode.
@ k_ra8_dmtmd_dctg_pos
DCTG[1:0] bit 0..1 – request source.
@ k_ra8_dmtmd_dts_pos
DTS[1:0] bit 12..13 – repeat area.
ra8_dmtmd_dctg_t
@ k_ra8_dmtmd_dctg_software
00b: software request.
@ k_ra8_dmtmd_dctg_hardware
01b: hardware request.
ra8_dmint_pos_t
@ k_ra8_dmint_dtie_pos
DTIE: transfer-end IRQ.
@ k_ra8_dmint_darie_pos
DARIE: dst extended-repeat overflow IRQ.
@ k_ra8_dmint_rptie_pos
RPTIE: repeat-size end IRQ.
@ k_ra8_dmint_esie_pos
ESIE: transfer-escape end IRQ.
@ k_ra8_dmint_sarie_pos
SARIE: src extended-repeat overflow IRQ.
ra8_dmtmd_mask_t
@ k_ra8_dmtmd_md_mask
RA8 dmtmd md mask.
@ k_ra8_dmtmd_dctg_mask
RA8 dmtmd dctg mask.
@ k_ra8_dmtmd_sz_mask
RA8 dmtmd sz mask.
@ k_ra8_dmtmd_dts_mask
RA8 dmtmd dts mask.
@ k_ra8_dmtmd_tkp_mask
RA8 dmtmd tkp mask.
ra8_dmtmd_sz_t
@ k_ra8_dmtmd_sz_byte
00b: 8-bit.
@ k_ra8_dmtmd_sz_long
11b: 64-bit.
@ k_ra8_dmtmd_sz_word
10b: 32-bit.
@ k_ra8_dmtmd_sz_half
01b: 16-bit.
ra8_dmamd_addr_mode_t
@ k_ra8_dmamd_addr_fixed
00b: address fixed.
@ k_ra8_dmamd_addr_decrement
11b: decrement.
@ k_ra8_dmamd_addr_increment
10b: increment.
@ k_ra8_dmamd_addr_offset
01b: offset addition.
ra8_dmbs_bits_t
@ k_ra8_dmbs_high_pos
RA8 dmbs high pos.
@ k_ra8_dmbs_high_mask
RA8 dmbs high mask.
@ k_ra8_dmbs_low_mask
RA8 dmbs low mask.
@ k_ra8_dmbs_low_pos
RA8 dmbs low pos.
ra8_dmsts_bits_t
@ k_ra8_dmsts_dtif_pos
DMSTS.DTIF bit 4.
@ k_ra8_dmsts_act_mask
RA8 dmsts act mask.
@ k_ra8_dmsts_esif_pos
DMSTS.ESIF bit 0.
@ k_ra8_dmsts_act_pos
DMSTS.ACT bit 7.
@ k_ra8_dmsts_esif_mask
RA8 dmsts esif mask.
@ k_ra8_dmsts_dtif_mask
RA8 dmsts dtif mask.
ra8_dmtmd_dts_t
@ k_ra8_dmtmd_dts_dest_repeat
00b: dest is repeat/block area.
@ k_ra8_dmtmd_dts_none
10b: no repeat/block area.
@ k_ra8_dmtmd_dts_src_repeat
01b: src is repeat/block area.
ra8_dmac_addr_t
@ k_ra8_dmac0_base_addr
DMAC0 channel 0 base.
@ k_ra8_dma_base_addr
Shared DMA module regs.
Shared DMA module-control register window.
volatile uint32_t DMECHR
+0x40 Error-channel status.
volatile uint8_t DMAST
+0x00 DMA Module Activation (bit DMST).
volatile uint8_t _r0
+0x01 reserved.
volatile uint32_t DELSR[k_ra8_dma_delsr_count]
+0x80 ELC link sel.
volatile uint32_t _r6[k_ra8_dma_pad2_words]
+0x44..0x7F reserved.
volatile uint16_t _r4
+0x12 reserved.
volatile uint32_t _r2[k_ra8_dma_pad0_words]
+0x04..0x0F reserved.
volatile uint8_t DMCTL
+0x10 DMAC Control (PR / ERCH).
volatile uint32_t _r5[k_ra8_dma_pad1_words]
+0x14..0x3F reserved.
volatile uint16_t _r1
+0x02 reserved.
volatile uint8_t _r3
+0x11 reserved.
Per-channel DMAC register window.
volatile uint8_t DMSTS
+0x1E Status (ESIF/DTIF/ACT).
volatile uint16_t DMAMD
+0x14 Address Mode.
volatile uint16_t _r1
+0x16 reserved.
volatile uint32_t DMSRR
+0x20 Source Reload Address.
volatile uint8_t DMREQ
+0x1D Software Start (SWREQ/CLRS).
volatile uint16_t DMTMD
+0x10 Transfer Mode.
volatile uint8_t DMINT
+0x13 Interrupt Setting.
volatile uint32_t DMOFR
+0x18 Offset Register.
volatile uint32_t DMSAR
+0x00 Source address.
volatile uint8_t DMBWR
+0x30 Bufferable Write Enable.
volatile uint8_t _r2
+0x1F reserved.
volatile uint32_t DMDBS
+0x2C Dest Buffer Size.
volatile uint8_t _r5[k_ra8_dmac_tail_padding]
Reserved.
volatile uint32_t DMDRR
+0x24 Dest Reload Address.
volatile uint32_t DMCRA
+0x08 Transfer count (DMCRAL/DMCRAH).
volatile uint8_t _r0
+0x12 reserved.
volatile uint16_t _r4
+0x32 reserved.
volatile uint8_t _r3
+0x31 reserved.
volatile uint8_t DMCNT
+0x1C Transfer Enable (bit DTE).
volatile uint32_t DMCRB
+0x0C Block transfer count.
volatile uint32_t DMDAR
+0x04 Destination address.
volatile uint32_t DMSBS
+0x28 Source Buffer Size.