1 // Copyright 2020 Espressif Systems (Shanghai) PTE LTD
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 #pragma once
15 
16 #ifdef __cplusplus
17 extern "C"
18 {
19 #endif
20 
21 #include <stdint.h>
22 
23 typedef volatile struct {
24     union {
25         struct {
26             uint32_t in_rst : 1;            /*This bit is used to reset DMA channel 0 Rx FSM and Rx FIFO pointer.*/
27             uint32_t out_rst : 1;           /*This bit is used to reset DMA channel 0 Tx FSM and Tx FIFO pointer.*/
28             uint32_t in_loop_test : 1;      /*reserved*/
29             uint32_t out_loop_test : 1;     /*reserved*/
30             uint32_t out_auto_wrback : 1;   /*Set this bit to enable automatic outlink-writeback when all the data in tx buffer has been transmitted.*/
31             uint32_t out_eof_mode : 1;      /*EOF flag generation mode when transmitting data. 1: EOF flag for Tx channel 0 is generated when data need to transmit has been popped from FIFO in DMA*/
32             uint32_t outdscr_burst_en : 1;  /*Set this bit to 1 to enable INCR burst transfer for Tx channel 0 reading link descriptor when accessing internal SRAM.*/
33             uint32_t indscr_burst_en : 1;   /*Set this bit to 1 to enable INCR burst transfer for Rx channel 0 reading link descriptor when accessing internal SRAM.*/
34             uint32_t out_data_burst_en : 1; /*Set this bit to 1 to enable INCR burst transfer for Tx channel 0 transmitting data when accessing internal SRAM.*/
35             uint32_t in_data_burst_en : 1;  /*Set this bit to 1 to enable INCR burst transfer for Rx channel 0 receiving data when accessing internal SRAM.*/
36             uint32_t mem_trans_en : 1;      /*Set this bit 1 to enable automatic transmitting data from memory to memory via DMA.*/
37             uint32_t reserved11 : 21;       /*reserved*/
38         };
39         uint32_t val;
40     } conf0[5];
41     union {
42         struct {
43             uint32_t infifo_full_thrs : 12;   /*This register is used to generate the INFIFO_FULL_WM_INT interrupt when Rx channel 0 received byte number in Rx FIFO is up to the value of the register.*/
44             uint32_t check_owner : 1;         /*Set this bit to enable checking the owner attribute of the link descriptor.*/
45             uint32_t in_ext_mem_bk_size : 2;  /*Block size of Rx channel 0 when DMA access external SRAM. 0: 16 bytes      1: 32 bytes    2/3:reserved*/
46             uint32_t out_ext_mem_bk_size : 2; /*Block size of Tx channel 0 when DMA access external SRAM. 0: 16 bytes      1: 32 bytes    2/3:reserved*/
47             uint32_t reserved17 : 15;         /*reserved*/
48         };
49         uint32_t val;
50     } conf1[5];
51     union {
52         struct {
53             uint32_t in_done : 1;        /*The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 0.*/
54             uint32_t in_suc_eof : 1;     /*The raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received for Rx channel 0. For UHCI0  the raw interrupt bit turns to high level when the last data pointed by one inlink descriptor has been received and no data error is detected for Rx channel 0.*/
55             uint32_t in_err_eof : 1;     /*The raw interrupt bit turns to high level when data error is detected only in the case that the peripheral is UHCI0 for Rx channel 0. For other peripherals  this raw interrupt is reserved.*/
56             uint32_t out_done : 1;       /*The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been transmitted to peripherals for Tx channel 0.*/
57             uint32_t out_eof : 1;        /*The raw interrupt bit turns to high level when the last data pointed by one outlink descriptor has been read from memory for Tx channel 0.*/
58             uint32_t in_dscr_err : 1;    /*The raw interrupt bit turns to high level when detecting inlink descriptor error  including owner error  the second and third word error of inlink descriptor for Rx channel 0.*/
59             uint32_t out_dscr_err : 1;   /*The raw interrupt bit turns to high level when detecting outlink descriptor error  including owner error  the second and third word error of outlink descriptor for Tx channel 0.*/
60             uint32_t in_dscr_empty : 1;  /*The raw interrupt bit turns to high level when Rx buffer pointed by inlink is full and receiving data is not completed  but there is no more inlink for Rx channel 0.*/
61             uint32_t out_total_eof : 1;  /*The raw interrupt bit turns to high level when data corresponding a outlink (includes one link descriptor or few link descriptors) is transmitted out for Tx channel 0.*/
62             uint32_t infifo_full_wm : 1; /*The raw interrupt bit turns to high level when received data byte number is up to threshold configured by REG_DMA_INFIFO_FULL_THRS_CH0 in Rx FIFO of channel 0.*/
63             uint32_t infifo_ovf_l1 : 1;  /*This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is overflow.*/
64             uint32_t infifo_udf_l1 : 1;  /*This raw interrupt bit turns to high level when level 1 fifo of Rx channel 0 is underflow.*/
65             uint32_t infifo_ovf_l3 : 1;  /*This raw interrupt bit turns to high level when level 3 fifo of Rx channel 0 is overflow.*/
66             uint32_t infifo_udf_l3 : 1;  /*This raw interrupt bit turns to high level when level 3 fifo of Rx channel 0 is underflow.*/
67             uint32_t outfifo_ovf_l1 : 1; /*This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is overflow.*/
68             uint32_t outfifo_udf_l1 : 1; /*This raw interrupt bit turns to high level when level 1 fifo of Tx channel 0 is underflow.*/
69             uint32_t outfifo_ovf_l3 : 1; /*This raw interrupt bit turns to high level when level 3 fifo of Tx channel 0 is overflow.*/
70             uint32_t outfifo_udf_l3 : 1; /*This raw interrupt bit turns to high level when level 3 fifo of Tx channel 0 is underflow.*/
71             uint32_t reserved18 : 14;    /*reserved*/
72         };
73         uint32_t val;
74     } int_raw[5];
75     uint32_t reserved_3c;
76     union {
77         struct {
78             uint32_t in_done : 1;        /*The raw interrupt status bit for the IN_DONE_CH_INT interrupt.*/
79             uint32_t in_suc_eof : 1;     /*The raw interrupt status bit for the IN_SUC_EOF_CH_INT interrupt.*/
80             uint32_t in_err_eof : 1;     /*The raw interrupt status bit for the IN_ERR_EOF_CH_INT interrupt.*/
81             uint32_t out_done : 1;       /*The raw interrupt status bit for the OUT_DONE_CH_INT interrupt.*/
82             uint32_t out_eof : 1;        /*The raw interrupt status bit for the OUT_EOF_CH_INT interrupt.*/
83             uint32_t in_dscr_err : 1;    /*The raw interrupt status bit for the IN_DSCR_ERR_CH_INT interrupt.*/
84             uint32_t out_dscr_err : 1;   /*The raw interrupt status bit for the OUT_DSCR_ERR_CH_INT interrupt.*/
85             uint32_t in_dscr_empty : 1;  /*The raw interrupt status bit for the IN_DSCR_EMPTY_CH_INT interrupt.*/
86             uint32_t out_total_eof : 1;  /*The raw interrupt status bit for the OUT_TOTAL_EOF_CH_INT interrupt.*/
87             uint32_t infifo_full_wm : 1; /*The raw interrupt status bit for the INFIFO_FULL_WM_CH_INT interrupt.*/
88             uint32_t infifo_ovf_l1 : 1;  /*The raw interrupt status bit for the INFIFO_OVF_L1_CH_INT interrupt.*/
89             uint32_t infifo_udf_l1 : 1;  /*The raw interrupt status bit for the INFIFO_UDF_L1_CH_INT interrupt.*/
90             uint32_t infifo_ovf_l3 : 1;  /*The raw interrupt status bit for the INFIFO_OVF_L3_CH_INT interrupt.*/
91             uint32_t infifo_udf_l3 : 1;  /*The raw interrupt status bit for the INFIFO_UDF_L3_CH_INT interrupt.*/
92             uint32_t outfifo_ovf_l1 : 1; /*The raw interrupt status bit for the OUTFIFO_OVF_L1_CH_INT interrupt.*/
93             uint32_t outfifo_udf_l1 : 1; /*The raw interrupt status bit for the OUTFIFO_UDF_L1_CH_INT interrupt.*/
94             uint32_t outfifo_ovf_l3 : 1; /*The raw interrupt status bit for the OUTFIFO_OVF_L3_CH_INT interrupt.*/
95             uint32_t outfifo_udf_l3 : 1; /*The raw interrupt status bit for the OUTFIFO_UDF_L3_CH_INT interrupt.*/
96             uint32_t reserved18 : 14;    /*reserved*/
97         };
98         uint32_t val;
99     } int_st[5];
100     union {
101         struct {
102             uint32_t in_done : 1;        /*The interrupt enable bit for the IN_DONE_CH_INT interrupt.*/
103             uint32_t in_suc_eof : 1;     /*The interrupt enable bit for the IN_SUC_EOF_CH_INT interrupt.*/
104             uint32_t in_err_eof : 1;     /*The interrupt enable bit for the IN_ERR_EOF_CH_INT interrupt.*/
105             uint32_t out_done : 1;       /*The interrupt enable bit for the OUT_DONE_CH_INT interrupt.*/
106             uint32_t out_eof : 1;        /*The interrupt enable bit for the OUT_EOF_CH_INT interrupt.*/
107             uint32_t in_dscr_err : 1;    /*The interrupt enable bit for the IN_DSCR_ERR_CH_INT interrupt.*/
108             uint32_t out_dscr_err : 1;   /*The interrupt enable bit for the OUT_DSCR_ERR_CH_INT interrupt.*/
109             uint32_t in_dscr_empty : 1;  /*The interrupt enable bit for the IN_DSCR_EMPTY_CH_INT interrupt.*/
110             uint32_t out_total_eof : 1;  /*The interrupt enable bit for the OUT_TOTAL_EOF_CH_INT interrupt.*/
111             uint32_t infifo_full_wm : 1; /*The interrupt enable bit for the INFIFO_FULL_WM_CH_INT interrupt.*/
112             uint32_t infifo_ovf_l1 : 1;  /*The interrupt enable bit for the INFIFO_OVF_L1_CH_INT interrupt.*/
113             uint32_t infifo_udf_l1 : 1;  /*The interrupt enable bit for the INFIFO_UDF_L1_CH_INT interrupt.*/
114             uint32_t infifo_ovf_l3 : 1;  /*The interrupt enable bit for the INFIFO_OVF_L3_CH_INT interrupt.*/
115             uint32_t infifo_udf_l3 : 1;  /*The interrupt enable bit for the INFIFO_UDF_L3_CH_INT interrupt.*/
116             uint32_t outfifo_ovf_l1 : 1; /*The interrupt enable bit for the OUTFIFO_OVF_L1_CH_INT interrupt.*/
117             uint32_t outfifo_udf_l1 : 1; /*The interrupt enable bit for the OUTFIFO_UDF_L1_CH_INT interrupt.*/
118             uint32_t outfifo_ovf_l3 : 1; /*The interrupt enable bit for the OUTFIFO_OVF_L3_CH_INT interrupt.*/
119             uint32_t outfifo_udf_l3 : 1; /*The interrupt enable bit for the OUTFIFO_UDF_L3_CH_INT interrupt.*/
120             uint32_t reserved18 : 14;    /*reserved*/
121         };
122         uint32_t val;
123     } int_ena[5];
124     union {
125         struct {
126             uint32_t in_done : 1;        /*Set this bit to clear the IN_DONE_CH_INT interrupt.*/
127             uint32_t in_suc_eof : 1;     /*Set this bit to clear the IN_SUC_EOF_CH_INT interrupt.*/
128             uint32_t in_err_eof : 1;     /*Set this bit to clear the IN_ERR_EOF_CH_INT interrupt.*/
129             uint32_t out_done : 1;       /*Set this bit to clear the OUT_DONE_CH_INT interrupt.*/
130             uint32_t out_eof : 1;        /*Set this bit to clear the OUT_EOF_CH_INT interrupt.*/
131             uint32_t in_dscr_err : 1;    /*Set this bit to clear the IN_DSCR_ERR_CH_INT interrupt.*/
132             uint32_t out_dscr_err : 1;   /*Set this bit to clear the OUT_DSCR_ERR_CH_INT interrupt.*/
133             uint32_t in_dscr_empty : 1;  /*Set this bit to clear the IN_DSCR_EMPTY_CH_INT interrupt.*/
134             uint32_t out_total_eof : 1;  /*Set this bit to clear the OUT_TOTAL_EOF_CH_INT interrupt.*/
135             uint32_t infifo_full_wm : 1; /*Set this bit to clear the INFIFO_FULL_WM_CH_INT interrupt.*/
136             uint32_t infifo_ovf_l1 : 1;  /*Set this bit to clear the INFIFO_OVF_L1_CH_INT interrupt.*/
137             uint32_t infifo_udf_l1 : 1;  /*Set this bit to clear the INFIFO_UDF_L1_CH_INT interrupt.*/
138             uint32_t infifo_ovf_l3 : 1;  /*Set this bit to clear the INFIFO_OVF_L3_CH_INT interrupt.*/
139             uint32_t infifo_udf_l3 : 1;  /*Set this bit to clear the INFIFO_UDF_L3_CH_INT interrupt.*/
140             uint32_t outfifo_ovf_l1 : 1; /*Set this bit to clear the OUTFIFO_OVF_L1_CH_INT interrupt.*/
141             uint32_t outfifo_udf_l1 : 1; /*Set this bit to clear the OUTFIFO_UDF_L1_CH_INT interrupt.*/
142             uint32_t outfifo_ovf_l3 : 1; /*Set this bit to clear the OUTFIFO_OVF_L3_CH_INT interrupt.*/
143             uint32_t outfifo_udf_l3 : 1; /*Set this bit to clear the OUTFIFO_UDF_L3_CH_INT interrupt.*/
144             uint32_t reserved18 : 14;    /*reserved*/
145         };
146         uint32_t val;
147     } int_clr[5];
148     union {
149         struct {
150             uint32_t infifo_full_l1 : 1;        /*L1 Rx FIFO full signal for Rx channel 0.*/
151             uint32_t infifo_empty_l1 : 1;       /*L1 Rx FIFO empty signal for Rx channel 0.*/
152             uint32_t infifo_full_l2 : 1;        /*L2 Rx FIFO full signal for Rx channel 0.*/
153             uint32_t infifo_empty_l2 : 1;       /*L2 Rx FIFO empty signal for Rx channel 0.*/
154             uint32_t infifo_full_l3 : 1;        /*L3 Rx FIFO full signal for Rx channel 0.*/
155             uint32_t infifo_empty_l3 : 1;       /*L3 Rx FIFO empty signal for Rx channel 0.*/
156             uint32_t infifo_cnt_l1 : 5;         /*The register stores the byte number of the data in L1 Rx FIFO for Rx channel 0.*/
157             uint32_t infifo_cnt_l2 : 7;         /*The register stores the byte number of the data in L2 Rx FIFO for Rx channel 0.*/
158             uint32_t infifo_cnt_l3 : 5;         /*The register stores the byte number of the data in L3 Rx FIFO for Rx channel 0.*/
159             uint32_t in_remain_under_1b_l3 : 1; /*reserved*/
160             uint32_t in_remain_under_2b_l3 : 1; /*reserved*/
161             uint32_t in_remain_under_3b_l3 : 1; /*reserved*/
162             uint32_t in_remain_under_4b_l3 : 1; /*reserved*/
163             uint32_t in_buf_hungry : 1;         /*reserved*/
164             uint32_t reserved28 : 4;            /*reserved*/
165         };
166         uint32_t val;
167     } infifo_status[5];
168     union {
169         struct {
170             uint32_t outfifo_full_l1 : 1;        /*L1 Tx FIFO full signal for Tx channel 0.*/
171             uint32_t outfifo_empty_l1 : 1;       /*L1 Tx FIFO empty signal for Tx channel 0.*/
172             uint32_t outfifo_full_l2 : 1;        /*L2 Tx FIFO full signal for Tx channel 0.*/
173             uint32_t outfifo_empty_l2 : 1;       /*L2 Tx FIFO empty signal for Tx channel 0.*/
174             uint32_t outfifo_full_l3 : 1;        /*L3 Tx FIFO full signal for Tx channel 0.*/
175             uint32_t outfifo_empty_l3 : 1;       /*L3 Tx FIFO empty signal for Tx channel 0.*/
176             uint32_t outfifo_cnt_l1 : 5;         /*The register stores the byte number of the data in L1 Tx FIFO for Tx channel 0.*/
177             uint32_t outfifo_cnt_l2 : 7;         /*The register stores the byte number of the data in L2 Tx FIFO for Tx channel 0.*/
178             uint32_t outfifo_cnt_l3 : 5;         /*The register stores the byte number of the data in L3 Tx FIFO for Tx channel 0.*/
179             uint32_t out_remain_under_1b_l3 : 1; /*reserved*/
180             uint32_t out_remain_under_2b_l3 : 1; /*reserved*/
181             uint32_t out_remain_under_3b_l3 : 1; /*reserved*/
182             uint32_t out_remain_under_4b_l3 : 1; /*reserved*/
183             uint32_t reserved27 : 5;             /*reserved*/
184         };
185         uint32_t val;
186     } outfifo_status[5];
187     union {
188         struct {
189             uint32_t outfifo_wdata : 9; /*This register stores the data that need to be pushed into DMA FIFO.*/
190             uint32_t outfifo_push : 1;  /*Set this bit to push data into DMA FIFO.*/
191             uint32_t reserved10 : 22;   /*reserved*/
192         };
193         uint32_t val;
194     } out_push[5];
195     union {
196         struct {
197             uint32_t infifo_rdata : 12; /*This register stores the data popping from DMA FIFO.*/
198             uint32_t infifo_pop : 1;    /*Set this bit to pop data from DMA FIFO.*/
199             uint32_t reserved13 : 19;   /*reserved*/
200         };
201         uint32_t val;
202     } in_pop[5];
203     union {
204         struct {
205             uint32_t addr : 20;   /*This register stores the 20 least significant bits of the first outlink descriptor's address.*/
206             uint32_t stop : 1;    /*Set this bit to stop dealing with the outlink descriptors.*/
207             uint32_t start : 1;   /*Set this bit to start dealing with the outlink descriptors.*/
208             uint32_t restart : 1; /*Set this bit to restart a new outlink from the last address.*/
209             uint32_t park : 1;    /*1: the outlink descriptor's FSM is in idle state.  0: the outlink descriptor's FSM is working.*/
210             uint32_t reserved24 : 8;
211         };
212         uint32_t val;
213     } out_link[5];
214     union {
215         struct {
216             uint32_t addr : 20;    /*This register stores the 20 least significant bits of the first inlink descriptor's address.*/
217             uint32_t auto_ret : 1; /*Set this bit to return to current inlink descriptor's address  when there are some errors in current receiving data.*/
218             uint32_t stop : 1;     /*Set this bit to stop dealing with the inlink descriptors.*/
219             uint32_t start : 1;    /*Set this bit to start dealing with the inlink descriptors.*/
220             uint32_t restart : 1;  /*Set this bit to mount a new inlink descriptor.*/
221             uint32_t park : 1;     /*1: the inlink descriptor's FSM is in idle state.  0: the inlink descriptor's FSM is working.*/
222             uint32_t reserved25 : 7;
223         };
224         uint32_t val;
225     } in_link[5];
226     union {
227         struct {
228             uint32_t inlink_dscr_addr : 18; /*This register stores the current inlink descriptor's address.*/
229             uint32_t in_dscr_state : 2;     /*reserved*/
230             uint32_t in_state : 3;          /*reserved*/
231             uint32_t reserved23 : 9;        /*reserved*/
232         };
233         uint32_t val;
234     } in_state[5];
235     union {
236         struct {
237             uint32_t outlink_dscr_addr : 18; /*This register stores the current outlink descriptor's address.*/
238             uint32_t out_dscr_state : 2;     /*reserved*/
239             uint32_t out_state : 3;          /*reserved*/
240             uint32_t reserved23 : 9;         /*reserved*/
241         };
242         uint32_t val;
243     } out_state[5];
244     uint32_t out_eof_des_addr[5];     /*This register stores the address of the outlink descriptor when the EOF bit in this descriptor is 1.*/
245     uint32_t in_suc_eof_des_addr[5];  /*This register stores the address of the inlink descriptor when the EOF bit in this descriptor is 1.*/
246     uint32_t in_err_eof_des_addr[5];  /*This register stores the address of the inlink descriptor when there are some errors in current receiving data. Only used when peripheral is UHCI0.*/
247     uint32_t out_eof_bfr_des_addr[5]; /*This register stores the address of the outlink descriptor before the last outlink descriptor.*/
248     union {
249         struct {
250             uint32_t ahb_testmode : 3; /*reserved*/
251             uint32_t reserved3 : 1;    /*reserved*/
252             uint32_t ahb_testaddr : 2; /*reserved*/
253             uint32_t reserved6 : 26;   /*reserved*/
254         };
255         uint32_t val;
256     } ahb_test;
257     uint32_t in_dscr[5];      /*The address of the current inlink descriptor x.*/
258     uint32_t in_dscr_bf0[5];  /*The address of the last inlink descriptor x-1.*/
259     uint32_t in_dscr_bf1[5];  /*The address of the second-to-last inlink descriptor x-2.*/
260     uint32_t out_dscr[5];     /*The address of the current outlink descriptor y.*/
261     uint32_t out_dscr_bf0[5]; /*The address of the last outlink descriptor y-1.*/
262     uint32_t out_dscr_bf1[5]; /*The address of the second-to-last inlink descriptor y-2.*/
263     union {
264         struct {
265             uint32_t reserved0 : 4;    /*reserved*/
266             uint32_t ram_force_pd : 1; /*power down*/
267             uint32_t ram_force_pu : 1;
268             uint32_t ram_clk_fo : 1; /*1: Force to open the clock and bypass the gate-clock when accessing the RAM in DMA. 0: A gate-clock will be used when accessing the RAM in DMA.*/
269             uint32_t reserved7 : 25; /*reserved*/
270         };
271         uint32_t val;
272     } pd_conf;
273     union {
274         struct {
275             uint32_t tx_weight : 4; /*The weight of Tx channel 0.*/
276             uint32_t rx_weight : 4; /*The weight of Rx channel 0.*/
277             uint32_t reserved8 : 24;
278         };
279         uint32_t val;
280     } wight[5];
281     union {
282         struct {
283             uint32_t tx_pri : 4; /*The priority of Tx channel 0. The larger of the value  the higher of the priority.*/
284             uint32_t rx_pri : 4; /*The priority of Rx channel 0. The larger of the value  the higher of the priority.*/
285             uint32_t reserved8 : 24;
286         };
287         uint32_t val;
288     } pri[5];
289     union {
290         struct {
291             uint32_t ahbm_rst_inter : 1; /*Set this bit  then clear this bit to reset the internal ahb FSM.*/
292             uint32_t ahbm_rst_exter : 1; /*Set this bit  then clear this bit to reset the external ahb FSM.*/
293             uint32_t arb_pri_dis : 1;    /*Set this bit to disable priority arbitration function.*/
294             uint32_t clk_en : 1;
295             uint32_t reserved4 : 28;
296         };
297         uint32_t val;
298     } misc_conf;
299     union {
300         struct {
301             uint32_t peri_in_sel : 6;  /*This register is used to select peripheral for Rx channel 0. 0:SPI2*/
302             uint32_t peri_out_sel : 6; /*This register is used to select peripheral for Tx channel 0. 0:SPI2*/
303             uint32_t reserved12 : 20;
304         };
305         uint32_t val;
306     } peri_sel[5];
307     union {
308         struct {
309             uint32_t in_size : 5;  /*This register is used to configure the size of L2 Rx FIFO for Rx channel 0. 0:16 bytes*/
310             uint32_t out_size : 5; /*This register is used to configure the size of L2 Tx FIFO for Tx channel 0. 0:16 bytes*/
311             uint32_t reserved10 : 22;
312         };
313         uint32_t val;
314     } sram_size[5];
315     uint32_t date; /*register version.*/
316 } gdma_dev_t;
317 
318 _Static_assert(sizeof(gdma_dev_t) == 0x244, "incorrect size of gdma_dev_t.");
319 
320 extern gdma_dev_t GDMA;
321 
322 #ifdef __cplusplus
323 }
324 #endif
325