HPM SDK
HPMicro Software Development Kit
hpm_i2s_regs.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2025 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 
9 #ifndef HPM_I2S_H
10 #define HPM_I2S_H
11 
12 typedef struct {
13  __RW uint32_t CTRL; /* 0x0: Control Register */
14  __R uint32_t RFIFO_FILLINGS; /* 0x4: Rx FIFO Filling Level */
15  __R uint32_t TFIFO_FILLINGS; /* 0x8: Tx FIFO Filling Level */
16  __RW uint32_t FIFO_THRESH; /* 0xC: TX/RX FIFO Threshold setting. */
17  __RW uint32_t STA; /* 0x10: Status Registers */
18  __R uint8_t RESERVED0[12]; /* 0x14 - 0x1F: Reserved */
19  __R uint32_t RXD[4]; /* 0x20 - 0x2C: Rx Data0 */
20  __W uint32_t TXD[4]; /* 0x30 - 0x3C: Tx Data0 */
21  __R uint8_t RESERVED1[16]; /* 0x40 - 0x4F: Reserved */
22  __RW uint32_t CFGR; /* 0x50: Configruation Regsiters */
23  __R uint8_t RESERVED2[4]; /* 0x54 - 0x57: Reserved */
24  __RW uint32_t MISC_CFGR; /* 0x58: Misc configuration Registers */
25  __R uint8_t RESERVED3[4]; /* 0x5C - 0x5F: Reserved */
26  __RW uint32_t RXDSLOT[4]; /* 0x60 - 0x6C: Rx Slots Enable for Rx Data0 */
27  __RW uint32_t TXDSLOT[4]; /* 0x70 - 0x7C: Tx Slots Enable for Tx Data0. */
28 } I2S_Type;
29 
30 
31 /* Bitfield definition for register: CTRL */
32 /*
33  * FRC_ALIGN_FBUF (RW)
34  *
35  * Asserted to make the buffer always frame aligned even in case of buffer underflow or overflow
36  */
37 #define I2S_CTRL_FRC_ALIGN_FBUF_MASK (0x80000UL)
38 #define I2S_CTRL_FRC_ALIGN_FBUF_SHIFT (19U)
39 #define I2S_CTRL_FRC_ALIGN_FBUF_SET(x) (((uint32_t)(x) << I2S_CTRL_FRC_ALIGN_FBUF_SHIFT) & I2S_CTRL_FRC_ALIGN_FBUF_MASK)
40 #define I2S_CTRL_FRC_ALIGN_FBUF_GET(x) (((uint32_t)(x) & I2S_CTRL_FRC_ALIGN_FBUF_MASK) >> I2S_CTRL_FRC_ALIGN_FBUF_SHIFT)
41 
42 /*
43  * SFTRST_RX (RW)
44  *
45  * software reset the RX module if asserted to be 1'b1. Self-clear.
46  */
47 #define I2S_CTRL_SFTRST_RX_MASK (0x40000UL)
48 #define I2S_CTRL_SFTRST_RX_SHIFT (18U)
49 #define I2S_CTRL_SFTRST_RX_SET(x) (((uint32_t)(x) << I2S_CTRL_SFTRST_RX_SHIFT) & I2S_CTRL_SFTRST_RX_MASK)
50 #define I2S_CTRL_SFTRST_RX_GET(x) (((uint32_t)(x) & I2S_CTRL_SFTRST_RX_MASK) >> I2S_CTRL_SFTRST_RX_SHIFT)
51 
52 /*
53  * SFTRST_TX (RW)
54  *
55  * software reset the TX module if asserted to be 1'b1. Self-clear.
56  */
57 #define I2S_CTRL_SFTRST_TX_MASK (0x20000UL)
58 #define I2S_CTRL_SFTRST_TX_SHIFT (17U)
59 #define I2S_CTRL_SFTRST_TX_SET(x) (((uint32_t)(x) << I2S_CTRL_SFTRST_TX_SHIFT) & I2S_CTRL_SFTRST_TX_MASK)
60 #define I2S_CTRL_SFTRST_TX_GET(x) (((uint32_t)(x) & I2S_CTRL_SFTRST_TX_MASK) >> I2S_CTRL_SFTRST_TX_SHIFT)
61 
62 /*
63  * SFTRST_CLKGEN (RW)
64  *
65  * software reset the CLK GEN module if asserted to be 1'b1. Self-clear.
66  */
67 #define I2S_CTRL_SFTRST_CLKGEN_MASK (0x10000UL)
68 #define I2S_CTRL_SFTRST_CLKGEN_SHIFT (16U)
69 #define I2S_CTRL_SFTRST_CLKGEN_SET(x) (((uint32_t)(x) << I2S_CTRL_SFTRST_CLKGEN_SHIFT) & I2S_CTRL_SFTRST_CLKGEN_MASK)
70 #define I2S_CTRL_SFTRST_CLKGEN_GET(x) (((uint32_t)(x) & I2S_CTRL_SFTRST_CLKGEN_MASK) >> I2S_CTRL_SFTRST_CLKGEN_SHIFT)
71 
72 /*
73  * TXDNIE (RW)
74  *
75  * TX buffer data needed interrupt enable
76  * 0: TXE interrupt masked
77  * 1: TXE interrupt not masked. Used to generate an interrupt request when the TXE flag is set.
78  */
79 #define I2S_CTRL_TXDNIE_MASK (0x8000U)
80 #define I2S_CTRL_TXDNIE_SHIFT (15U)
81 #define I2S_CTRL_TXDNIE_SET(x) (((uint32_t)(x) << I2S_CTRL_TXDNIE_SHIFT) & I2S_CTRL_TXDNIE_MASK)
82 #define I2S_CTRL_TXDNIE_GET(x) (((uint32_t)(x) & I2S_CTRL_TXDNIE_MASK) >> I2S_CTRL_TXDNIE_SHIFT)
83 
84 /*
85  * RXDAIE (RW)
86  *
87  * RX buffer data available interrupt enable
88  * 0: RXNE interrupt masked
89  * 1: RXNE interrupt not masked. Used to generate an interrupt request when the RXNE flag is set.
90  */
91 #define I2S_CTRL_RXDAIE_MASK (0x4000U)
92 #define I2S_CTRL_RXDAIE_SHIFT (14U)
93 #define I2S_CTRL_RXDAIE_SET(x) (((uint32_t)(x) << I2S_CTRL_RXDAIE_SHIFT) & I2S_CTRL_RXDAIE_MASK)
94 #define I2S_CTRL_RXDAIE_GET(x) (((uint32_t)(x) & I2S_CTRL_RXDAIE_MASK) >> I2S_CTRL_RXDAIE_SHIFT)
95 
96 /*
97  * ERRIE (RW)
98  *
99  * Error interrupt enable
100  * This bit controls the generation of an interrupt when an error condition (UD, OV) occurs.
101  * 0: Error interrupt is masked
102  * 1: Error interrupt is enabled
103  */
104 #define I2S_CTRL_ERRIE_MASK (0x2000U)
105 #define I2S_CTRL_ERRIE_SHIFT (13U)
106 #define I2S_CTRL_ERRIE_SET(x) (((uint32_t)(x) << I2S_CTRL_ERRIE_SHIFT) & I2S_CTRL_ERRIE_MASK)
107 #define I2S_CTRL_ERRIE_GET(x) (((uint32_t)(x) & I2S_CTRL_ERRIE_MASK) >> I2S_CTRL_ERRIE_SHIFT)
108 
109 /*
110  * TX_DMA_EN (RW)
111  *
112  * Asserted to use DMA, else to use interrupt
113  */
114 #define I2S_CTRL_TX_DMA_EN_MASK (0x1000U)
115 #define I2S_CTRL_TX_DMA_EN_SHIFT (12U)
116 #define I2S_CTRL_TX_DMA_EN_SET(x) (((uint32_t)(x) << I2S_CTRL_TX_DMA_EN_SHIFT) & I2S_CTRL_TX_DMA_EN_MASK)
117 #define I2S_CTRL_TX_DMA_EN_GET(x) (((uint32_t)(x) & I2S_CTRL_TX_DMA_EN_MASK) >> I2S_CTRL_TX_DMA_EN_SHIFT)
118 
119 /*
120  * RX_DMA_EN (RW)
121  *
122  * Asserted to use DMA, else to use interrupt
123  */
124 #define I2S_CTRL_RX_DMA_EN_MASK (0x800U)
125 #define I2S_CTRL_RX_DMA_EN_SHIFT (11U)
126 #define I2S_CTRL_RX_DMA_EN_SET(x) (((uint32_t)(x) << I2S_CTRL_RX_DMA_EN_SHIFT) & I2S_CTRL_RX_DMA_EN_MASK)
127 #define I2S_CTRL_RX_DMA_EN_GET(x) (((uint32_t)(x) & I2S_CTRL_RX_DMA_EN_MASK) >> I2S_CTRL_RX_DMA_EN_SHIFT)
128 
129 /*
130  * TXFIFOCLR (RW)
131  *
132  * Self-clear
133  */
134 #define I2S_CTRL_TXFIFOCLR_MASK (0x400U)
135 #define I2S_CTRL_TXFIFOCLR_SHIFT (10U)
136 #define I2S_CTRL_TXFIFOCLR_SET(x) (((uint32_t)(x) << I2S_CTRL_TXFIFOCLR_SHIFT) & I2S_CTRL_TXFIFOCLR_MASK)
137 #define I2S_CTRL_TXFIFOCLR_GET(x) (((uint32_t)(x) & I2S_CTRL_TXFIFOCLR_MASK) >> I2S_CTRL_TXFIFOCLR_SHIFT)
138 
139 /*
140  * RXFIFOCLR (RW)
141  *
142  * Self-clear
143  */
144 #define I2S_CTRL_RXFIFOCLR_MASK (0x200U)
145 #define I2S_CTRL_RXFIFOCLR_SHIFT (9U)
146 #define I2S_CTRL_RXFIFOCLR_SET(x) (((uint32_t)(x) << I2S_CTRL_RXFIFOCLR_SHIFT) & I2S_CTRL_RXFIFOCLR_MASK)
147 #define I2S_CTRL_RXFIFOCLR_GET(x) (((uint32_t)(x) & I2S_CTRL_RXFIFOCLR_MASK) >> I2S_CTRL_RXFIFOCLR_SHIFT)
148 
149 /*
150  * TX_EN (RW)
151  *
152  * enable for each TX data pad
153  */
154 #define I2S_CTRL_TX_EN_MASK (0x1E0U)
155 #define I2S_CTRL_TX_EN_SHIFT (5U)
156 #define I2S_CTRL_TX_EN_SET(x) (((uint32_t)(x) << I2S_CTRL_TX_EN_SHIFT) & I2S_CTRL_TX_EN_MASK)
157 #define I2S_CTRL_TX_EN_GET(x) (((uint32_t)(x) & I2S_CTRL_TX_EN_MASK) >> I2S_CTRL_TX_EN_SHIFT)
158 
159 /*
160  * RX_EN (RW)
161  *
162  * enable for each RX data pad
163  */
164 #define I2S_CTRL_RX_EN_MASK (0x1EU)
165 #define I2S_CTRL_RX_EN_SHIFT (1U)
166 #define I2S_CTRL_RX_EN_SET(x) (((uint32_t)(x) << I2S_CTRL_RX_EN_SHIFT) & I2S_CTRL_RX_EN_MASK)
167 #define I2S_CTRL_RX_EN_GET(x) (((uint32_t)(x) & I2S_CTRL_RX_EN_MASK) >> I2S_CTRL_RX_EN_SHIFT)
168 
169 /*
170  * I2S_EN (RW)
171  *
172  * enable for the module
173  */
174 #define I2S_CTRL_I2S_EN_MASK (0x1U)
175 #define I2S_CTRL_I2S_EN_SHIFT (0U)
176 #define I2S_CTRL_I2S_EN_SET(x) (((uint32_t)(x) << I2S_CTRL_I2S_EN_SHIFT) & I2S_CTRL_I2S_EN_MASK)
177 #define I2S_CTRL_I2S_EN_GET(x) (((uint32_t)(x) & I2S_CTRL_I2S_EN_MASK) >> I2S_CTRL_I2S_EN_SHIFT)
178 
179 /* Bitfield definition for register: RFIFO_FILLINGS */
180 /*
181  * RX3 (RO)
182  *
183  * RX3 fifo fillings
184  */
185 #define I2S_RFIFO_FILLINGS_RX3_MASK (0xFF000000UL)
186 #define I2S_RFIFO_FILLINGS_RX3_SHIFT (24U)
187 #define I2S_RFIFO_FILLINGS_RX3_GET(x) (((uint32_t)(x) & I2S_RFIFO_FILLINGS_RX3_MASK) >> I2S_RFIFO_FILLINGS_RX3_SHIFT)
188 
189 /*
190  * RX2 (RO)
191  *
192  * RX2 fifo fillings
193  */
194 #define I2S_RFIFO_FILLINGS_RX2_MASK (0xFF0000UL)
195 #define I2S_RFIFO_FILLINGS_RX2_SHIFT (16U)
196 #define I2S_RFIFO_FILLINGS_RX2_GET(x) (((uint32_t)(x) & I2S_RFIFO_FILLINGS_RX2_MASK) >> I2S_RFIFO_FILLINGS_RX2_SHIFT)
197 
198 /*
199  * RX1 (RO)
200  *
201  * RX1 fifo fillings
202  */
203 #define I2S_RFIFO_FILLINGS_RX1_MASK (0xFF00U)
204 #define I2S_RFIFO_FILLINGS_RX1_SHIFT (8U)
205 #define I2S_RFIFO_FILLINGS_RX1_GET(x) (((uint32_t)(x) & I2S_RFIFO_FILLINGS_RX1_MASK) >> I2S_RFIFO_FILLINGS_RX1_SHIFT)
206 
207 /*
208  * RX0 (RO)
209  *
210  * RX0 fifo fillings
211  */
212 #define I2S_RFIFO_FILLINGS_RX0_MASK (0xFFU)
213 #define I2S_RFIFO_FILLINGS_RX0_SHIFT (0U)
214 #define I2S_RFIFO_FILLINGS_RX0_GET(x) (((uint32_t)(x) & I2S_RFIFO_FILLINGS_RX0_MASK) >> I2S_RFIFO_FILLINGS_RX0_SHIFT)
215 
216 /* Bitfield definition for register: TFIFO_FILLINGS */
217 /*
218  * TX3 (RO)
219  *
220  * TX3 fifo fillings
221  */
222 #define I2S_TFIFO_FILLINGS_TX3_MASK (0xFF000000UL)
223 #define I2S_TFIFO_FILLINGS_TX3_SHIFT (24U)
224 #define I2S_TFIFO_FILLINGS_TX3_GET(x) (((uint32_t)(x) & I2S_TFIFO_FILLINGS_TX3_MASK) >> I2S_TFIFO_FILLINGS_TX3_SHIFT)
225 
226 /*
227  * TX2 (RO)
228  *
229  * TX2 fifo fillings
230  */
231 #define I2S_TFIFO_FILLINGS_TX2_MASK (0xFF0000UL)
232 #define I2S_TFIFO_FILLINGS_TX2_SHIFT (16U)
233 #define I2S_TFIFO_FILLINGS_TX2_GET(x) (((uint32_t)(x) & I2S_TFIFO_FILLINGS_TX2_MASK) >> I2S_TFIFO_FILLINGS_TX2_SHIFT)
234 
235 /*
236  * TX1 (RO)
237  *
238  * TX1 fifo fillings
239  */
240 #define I2S_TFIFO_FILLINGS_TX1_MASK (0xFF00U)
241 #define I2S_TFIFO_FILLINGS_TX1_SHIFT (8U)
242 #define I2S_TFIFO_FILLINGS_TX1_GET(x) (((uint32_t)(x) & I2S_TFIFO_FILLINGS_TX1_MASK) >> I2S_TFIFO_FILLINGS_TX1_SHIFT)
243 
244 /*
245  * TX0 (RO)
246  *
247  * TX0 fifo fillings
248  */
249 #define I2S_TFIFO_FILLINGS_TX0_MASK (0xFFU)
250 #define I2S_TFIFO_FILLINGS_TX0_SHIFT (0U)
251 #define I2S_TFIFO_FILLINGS_TX0_GET(x) (((uint32_t)(x) & I2S_TFIFO_FILLINGS_TX0_MASK) >> I2S_TFIFO_FILLINGS_TX0_SHIFT)
252 
253 /* Bitfield definition for register: FIFO_THRESH */
254 /*
255  * TX (RW)
256  *
257  * TX fifo threshold to trigger STA[tx_dn]. When tx fifo filling is smaller than or equal to the threshold, assert the tx_dn flag.
258  */
259 #define I2S_FIFO_THRESH_TX_MASK (0xFF00U)
260 #define I2S_FIFO_THRESH_TX_SHIFT (8U)
261 #define I2S_FIFO_THRESH_TX_SET(x) (((uint32_t)(x) << I2S_FIFO_THRESH_TX_SHIFT) & I2S_FIFO_THRESH_TX_MASK)
262 #define I2S_FIFO_THRESH_TX_GET(x) (((uint32_t)(x) & I2S_FIFO_THRESH_TX_MASK) >> I2S_FIFO_THRESH_TX_SHIFT)
263 
264 /*
265  * RX (RW)
266  *
267  * RX fifo threshold to trigger STA[rx_da]. When rx fifo filling is greater than or equal to the threshold, assert the rx_da flag.
268  */
269 #define I2S_FIFO_THRESH_RX_MASK (0xFFU)
270 #define I2S_FIFO_THRESH_RX_SHIFT (0U)
271 #define I2S_FIFO_THRESH_RX_SET(x) (((uint32_t)(x) << I2S_FIFO_THRESH_RX_SHIFT) & I2S_FIFO_THRESH_RX_MASK)
272 #define I2S_FIFO_THRESH_RX_GET(x) (((uint32_t)(x) & I2S_FIFO_THRESH_RX_MASK) >> I2S_FIFO_THRESH_RX_SHIFT)
273 
274 /* Bitfield definition for register: STA */
275 /*
276  * TX_UD (W1C)
277  *
278  * Asserted when tx fifo is underflow. Should be ANDed with CTRL[tx_en] the for correct value. Write 1 to any of these 4 bits will clear the underflow error.
279  */
280 #define I2S_STA_TX_UD_MASK (0x1E000UL)
281 #define I2S_STA_TX_UD_SHIFT (13U)
282 #define I2S_STA_TX_UD_SET(x) (((uint32_t)(x) << I2S_STA_TX_UD_SHIFT) & I2S_STA_TX_UD_MASK)
283 #define I2S_STA_TX_UD_GET(x) (((uint32_t)(x) & I2S_STA_TX_UD_MASK) >> I2S_STA_TX_UD_SHIFT)
284 
285 /*
286  * RX_OV (W1C)
287  *
288  * Asserted when rx fifo is overflow. Write 1 to any of these 4 bits will clear the overflow error.
289  */
290 #define I2S_STA_RX_OV_MASK (0x1E00U)
291 #define I2S_STA_RX_OV_SHIFT (9U)
292 #define I2S_STA_RX_OV_SET(x) (((uint32_t)(x) << I2S_STA_RX_OV_SHIFT) & I2S_STA_RX_OV_MASK)
293 #define I2S_STA_RX_OV_GET(x) (((uint32_t)(x) & I2S_STA_RX_OV_MASK) >> I2S_STA_RX_OV_SHIFT)
294 
295 /*
296  * TX_DN (RO)
297  *
298  * Asserted when tx fifo data are needed.
299  */
300 #define I2S_STA_TX_DN_MASK (0x1E0U)
301 #define I2S_STA_TX_DN_SHIFT (5U)
302 #define I2S_STA_TX_DN_GET(x) (((uint32_t)(x) & I2S_STA_TX_DN_MASK) >> I2S_STA_TX_DN_SHIFT)
303 
304 /*
305  * RX_DA (RO)
306  *
307  * Asserted when rx fifo data are available.
308  */
309 #define I2S_STA_RX_DA_MASK (0x1EU)
310 #define I2S_STA_RX_DA_SHIFT (1U)
311 #define I2S_STA_RX_DA_GET(x) (((uint32_t)(x) & I2S_STA_RX_DA_MASK) >> I2S_STA_RX_DA_SHIFT)
312 
313 /* Bitfield definition for register array: RXD */
314 /*
315  * D (RO)
316  *
317  */
318 #define I2S_RXD_D_MASK (0xFFFFFFFFUL)
319 #define I2S_RXD_D_SHIFT (0U)
320 #define I2S_RXD_D_GET(x) (((uint32_t)(x) & I2S_RXD_D_MASK) >> I2S_RXD_D_SHIFT)
321 
322 /* Bitfield definition for register array: TXD */
323 /*
324  * D (WO)
325  *
326  */
327 #define I2S_TXD_D_MASK (0xFFFFFFFFUL)
328 #define I2S_TXD_D_SHIFT (0U)
329 #define I2S_TXD_D_SET(x) (((uint32_t)(x) << I2S_TXD_D_SHIFT) & I2S_TXD_D_MASK)
330 #define I2S_TXD_D_GET(x) (((uint32_t)(x) & I2S_TXD_D_MASK) >> I2S_TXD_D_SHIFT)
331 
332 /* Bitfield definition for register: CFGR */
333 /*
334  * BCLK_GATEOFF (RW)
335  *
336  * Gate off the bclk. Asserted to gate-off the BCLK.
337  */
338 #define I2S_CFGR_BCLK_GATEOFF_MASK (0x40000000UL)
339 #define I2S_CFGR_BCLK_GATEOFF_SHIFT (30U)
340 #define I2S_CFGR_BCLK_GATEOFF_SET(x) (((uint32_t)(x) << I2S_CFGR_BCLK_GATEOFF_SHIFT) & I2S_CFGR_BCLK_GATEOFF_MASK)
341 #define I2S_CFGR_BCLK_GATEOFF_GET(x) (((uint32_t)(x) & I2S_CFGR_BCLK_GATEOFF_MASK) >> I2S_CFGR_BCLK_GATEOFF_SHIFT)
342 
343 /*
344  * BCLK_DIV (RW)
345  *
346  * Linear prescaler to generate BCLK from MCLK.
347  * BCLK_DIV [8:0] = 0: BCLK=No CLK.
348  * BCLK_DIV [8:0] = 1: BCLK=MCLK/1
349  * BCLK_DIV [8:0] = n: BCLK=MCLK/(n).
350  * Note: These bits should be configured when the I2S is disabled. It is used only when the I2S is in master mode.
351  */
352 #define I2S_CFGR_BCLK_DIV_MASK (0x3FE00000UL)
353 #define I2S_CFGR_BCLK_DIV_SHIFT (21U)
354 #define I2S_CFGR_BCLK_DIV_SET(x) (((uint32_t)(x) << I2S_CFGR_BCLK_DIV_SHIFT) & I2S_CFGR_BCLK_DIV_MASK)
355 #define I2S_CFGR_BCLK_DIV_GET(x) (((uint32_t)(x) & I2S_CFGR_BCLK_DIV_MASK) >> I2S_CFGR_BCLK_DIV_SHIFT)
356 
357 /*
358  * INV_BCLK_OUT (RW)
359  *
360  * Invert the BCLK before sending it out to pad. Only valid in BCLK master mode
361  */
362 #define I2S_CFGR_INV_BCLK_OUT_MASK (0x100000UL)
363 #define I2S_CFGR_INV_BCLK_OUT_SHIFT (20U)
364 #define I2S_CFGR_INV_BCLK_OUT_SET(x) (((uint32_t)(x) << I2S_CFGR_INV_BCLK_OUT_SHIFT) & I2S_CFGR_INV_BCLK_OUT_MASK)
365 #define I2S_CFGR_INV_BCLK_OUT_GET(x) (((uint32_t)(x) & I2S_CFGR_INV_BCLK_OUT_MASK) >> I2S_CFGR_INV_BCLK_OUT_SHIFT)
366 
367 /*
368  * INV_BCLK_IN (RW)
369  *
370  * Invert the BCLK pad input before using it internally. Only valid in BCLK slave mode
371  */
372 #define I2S_CFGR_INV_BCLK_IN_MASK (0x80000UL)
373 #define I2S_CFGR_INV_BCLK_IN_SHIFT (19U)
374 #define I2S_CFGR_INV_BCLK_IN_SET(x) (((uint32_t)(x) << I2S_CFGR_INV_BCLK_IN_SHIFT) & I2S_CFGR_INV_BCLK_IN_MASK)
375 #define I2S_CFGR_INV_BCLK_IN_GET(x) (((uint32_t)(x) & I2S_CFGR_INV_BCLK_IN_MASK) >> I2S_CFGR_INV_BCLK_IN_SHIFT)
376 
377 /*
378  * INV_FCLK_OUT (RW)
379  *
380  * Invert the FCLK before sending it out to pad. Only valid in FCLK master mode
381  */
382 #define I2S_CFGR_INV_FCLK_OUT_MASK (0x40000UL)
383 #define I2S_CFGR_INV_FCLK_OUT_SHIFT (18U)
384 #define I2S_CFGR_INV_FCLK_OUT_SET(x) (((uint32_t)(x) << I2S_CFGR_INV_FCLK_OUT_SHIFT) & I2S_CFGR_INV_FCLK_OUT_MASK)
385 #define I2S_CFGR_INV_FCLK_OUT_GET(x) (((uint32_t)(x) & I2S_CFGR_INV_FCLK_OUT_MASK) >> I2S_CFGR_INV_FCLK_OUT_SHIFT)
386 
387 /*
388  * INV_FCLK_IN (RW)
389  *
390  * Invert the FCLK pad input before using it internally. Only valid in FCLK slave mode
391  */
392 #define I2S_CFGR_INV_FCLK_IN_MASK (0x20000UL)
393 #define I2S_CFGR_INV_FCLK_IN_SHIFT (17U)
394 #define I2S_CFGR_INV_FCLK_IN_SET(x) (((uint32_t)(x) << I2S_CFGR_INV_FCLK_IN_SHIFT) & I2S_CFGR_INV_FCLK_IN_MASK)
395 #define I2S_CFGR_INV_FCLK_IN_GET(x) (((uint32_t)(x) & I2S_CFGR_INV_FCLK_IN_MASK) >> I2S_CFGR_INV_FCLK_IN_SHIFT)
396 
397 /*
398  * INV_MCLK_OUT (RW)
399  *
400  * Invert the MCLK before sending it out to pad. Only valid in MCLK master mode
401  */
402 #define I2S_CFGR_INV_MCLK_OUT_MASK (0x10000UL)
403 #define I2S_CFGR_INV_MCLK_OUT_SHIFT (16U)
404 #define I2S_CFGR_INV_MCLK_OUT_SET(x) (((uint32_t)(x) << I2S_CFGR_INV_MCLK_OUT_SHIFT) & I2S_CFGR_INV_MCLK_OUT_MASK)
405 #define I2S_CFGR_INV_MCLK_OUT_GET(x) (((uint32_t)(x) & I2S_CFGR_INV_MCLK_OUT_MASK) >> I2S_CFGR_INV_MCLK_OUT_SHIFT)
406 
407 /*
408  * INV_MCLK_IN (RW)
409  *
410  * Invert the MCLK pad input before using it internally. Only valid in MCLK slave mode
411  */
412 #define I2S_CFGR_INV_MCLK_IN_MASK (0x8000U)
413 #define I2S_CFGR_INV_MCLK_IN_SHIFT (15U)
414 #define I2S_CFGR_INV_MCLK_IN_SET(x) (((uint32_t)(x) << I2S_CFGR_INV_MCLK_IN_SHIFT) & I2S_CFGR_INV_MCLK_IN_MASK)
415 #define I2S_CFGR_INV_MCLK_IN_GET(x) (((uint32_t)(x) & I2S_CFGR_INV_MCLK_IN_MASK) >> I2S_CFGR_INV_MCLK_IN_SHIFT)
416 
417 /*
418  * BCLK_SEL_OP (RW)
419  *
420  * asserted to use external clk source
421  */
422 #define I2S_CFGR_BCLK_SEL_OP_MASK (0x4000U)
423 #define I2S_CFGR_BCLK_SEL_OP_SHIFT (14U)
424 #define I2S_CFGR_BCLK_SEL_OP_SET(x) (((uint32_t)(x) << I2S_CFGR_BCLK_SEL_OP_SHIFT) & I2S_CFGR_BCLK_SEL_OP_MASK)
425 #define I2S_CFGR_BCLK_SEL_OP_GET(x) (((uint32_t)(x) & I2S_CFGR_BCLK_SEL_OP_MASK) >> I2S_CFGR_BCLK_SEL_OP_SHIFT)
426 
427 /*
428  * FCLK_SEL_OP (RW)
429  *
430  * asserted to use external clk source
431  */
432 #define I2S_CFGR_FCLK_SEL_OP_MASK (0x2000U)
433 #define I2S_CFGR_FCLK_SEL_OP_SHIFT (13U)
434 #define I2S_CFGR_FCLK_SEL_OP_SET(x) (((uint32_t)(x) << I2S_CFGR_FCLK_SEL_OP_SHIFT) & I2S_CFGR_FCLK_SEL_OP_MASK)
435 #define I2S_CFGR_FCLK_SEL_OP_GET(x) (((uint32_t)(x) & I2S_CFGR_FCLK_SEL_OP_MASK) >> I2S_CFGR_FCLK_SEL_OP_SHIFT)
436 
437 /*
438  * MCK_SEL_OP (RW)
439  *
440  * asserted to use external clk source
441  */
442 #define I2S_CFGR_MCK_SEL_OP_MASK (0x1000U)
443 #define I2S_CFGR_MCK_SEL_OP_SHIFT (12U)
444 #define I2S_CFGR_MCK_SEL_OP_SET(x) (((uint32_t)(x) << I2S_CFGR_MCK_SEL_OP_SHIFT) & I2S_CFGR_MCK_SEL_OP_MASK)
445 #define I2S_CFGR_MCK_SEL_OP_GET(x) (((uint32_t)(x) & I2S_CFGR_MCK_SEL_OP_MASK) >> I2S_CFGR_MCK_SEL_OP_SHIFT)
446 
447 /*
448  * FRAME_EDGE (RW)
449  *
450  * The start edge of a frame
451  * 0: Falling edge indicates a new frame (Just like standard I2S Philips standard)
452  * 1: Rising edge indicates a new frame
453  */
454 #define I2S_CFGR_FRAME_EDGE_MASK (0x800U)
455 #define I2S_CFGR_FRAME_EDGE_SHIFT (11U)
456 #define I2S_CFGR_FRAME_EDGE_SET(x) (((uint32_t)(x) << I2S_CFGR_FRAME_EDGE_SHIFT) & I2S_CFGR_FRAME_EDGE_MASK)
457 #define I2S_CFGR_FRAME_EDGE_GET(x) (((uint32_t)(x) & I2S_CFGR_FRAME_EDGE_MASK) >> I2S_CFGR_FRAME_EDGE_SHIFT)
458 
459 /*
460  * CH_MAX (RW)
461  *
462  * CH_MAX[4:0] s the number of channels supported in TDM mode. When not in TDM mode, it must be set as 2.
463  * It must be an even number, so CH_MAX[0] is always 0.
464  * 5'h2: 2 channels
465  * 5'h4: 4 channels
466  * ...
467  * 5‘h10: 16 channels (max)
468  */
469 #define I2S_CFGR_CH_MAX_MASK (0x7C0U)
470 #define I2S_CFGR_CH_MAX_SHIFT (6U)
471 #define I2S_CFGR_CH_MAX_SET(x) (((uint32_t)(x) << I2S_CFGR_CH_MAX_SHIFT) & I2S_CFGR_CH_MAX_MASK)
472 #define I2S_CFGR_CH_MAX_GET(x) (((uint32_t)(x) & I2S_CFGR_CH_MAX_MASK) >> I2S_CFGR_CH_MAX_SHIFT)
473 
474 /*
475  * TDM_EN (RW)
476  *
477  * TDM mode
478  * 0: not TDM mode
479  * 1: TDM mode
480  */
481 #define I2S_CFGR_TDM_EN_MASK (0x20U)
482 #define I2S_CFGR_TDM_EN_SHIFT (5U)
483 #define I2S_CFGR_TDM_EN_SET(x) (((uint32_t)(x) << I2S_CFGR_TDM_EN_SHIFT) & I2S_CFGR_TDM_EN_MASK)
484 #define I2S_CFGR_TDM_EN_GET(x) (((uint32_t)(x) & I2S_CFGR_TDM_EN_MASK) >> I2S_CFGR_TDM_EN_SHIFT)
485 
486 /*
487  * STD (RW)
488  *
489  * I2S standard selection
490  * 00: I2S Philips standard.
491  * 01: MSB justified standard (left justified)
492  * 10: LSB justified standard (right justified)
493  * 11: PCM standard
494  * Note: For correct operation, these bits should be configured when the I2S is disabled.
495  */
496 #define I2S_CFGR_STD_MASK (0x18U)
497 #define I2S_CFGR_STD_SHIFT (3U)
498 #define I2S_CFGR_STD_SET(x) (((uint32_t)(x) << I2S_CFGR_STD_SHIFT) & I2S_CFGR_STD_MASK)
499 #define I2S_CFGR_STD_GET(x) (((uint32_t)(x) & I2S_CFGR_STD_MASK) >> I2S_CFGR_STD_SHIFT)
500 
501 /*
502  * DATSIZ (RW)
503  *
504  * Data length to be transferred
505  * 00: 16-bit data length
506  * 01: 24-bit data length
507  * 10: 32-bit data length
508  * 11: Not allowed
509  * Note: For correct operation, these bits should be configured when the I2S is disabled.
510  */
511 #define I2S_CFGR_DATSIZ_MASK (0x6U)
512 #define I2S_CFGR_DATSIZ_SHIFT (1U)
513 #define I2S_CFGR_DATSIZ_SET(x) (((uint32_t)(x) << I2S_CFGR_DATSIZ_SHIFT) & I2S_CFGR_DATSIZ_MASK)
514 #define I2S_CFGR_DATSIZ_GET(x) (((uint32_t)(x) & I2S_CFGR_DATSIZ_MASK) >> I2S_CFGR_DATSIZ_SHIFT)
515 
516 /*
517  * CHSIZ (RW)
518  *
519  * Channel length (number of bits per audio channel)
520  * 0: 16-bit wide
521  * 1: 32-bit wide
522  * The bit write operation has a meaning only if DATSIZ = 00 otherwise the channel length is fixed to 32-bit by hardware whatever the value filled in.
523  * Note: For correct operation, this bit should be configured when the I2S is disabled.
524  */
525 #define I2S_CFGR_CHSIZ_MASK (0x1U)
526 #define I2S_CFGR_CHSIZ_SHIFT (0U)
527 #define I2S_CFGR_CHSIZ_SET(x) (((uint32_t)(x) << I2S_CFGR_CHSIZ_SHIFT) & I2S_CFGR_CHSIZ_MASK)
528 #define I2S_CFGR_CHSIZ_GET(x) (((uint32_t)(x) & I2S_CFGR_CHSIZ_MASK) >> I2S_CFGR_CHSIZ_SHIFT)
529 
530 /* Bitfield definition for register: MISC_CFGR */
531 /*
532  * MCLK_GATEOFF (RW)
533  *
534  * Gate off the mclk. This mclk is the output of a glitch prone mux, so every time to switch the mclk, the gate off clock should be asserted at first. After the clock is switched, de-assert this bit to ungate off the mclk.
535  */
536 #define I2S_MISC_CFGR_MCLK_GATEOFF_MASK (0x2000U)
537 #define I2S_MISC_CFGR_MCLK_GATEOFF_SHIFT (13U)
538 #define I2S_MISC_CFGR_MCLK_GATEOFF_SET(x) (((uint32_t)(x) << I2S_MISC_CFGR_MCLK_GATEOFF_SHIFT) & I2S_MISC_CFGR_MCLK_GATEOFF_MASK)
539 #define I2S_MISC_CFGR_MCLK_GATEOFF_GET(x) (((uint32_t)(x) & I2S_MISC_CFGR_MCLK_GATEOFF_MASK) >> I2S_MISC_CFGR_MCLK_GATEOFF_SHIFT)
540 
541 /*
542  * MCLKOE (RW)
543  *
544  * Master clock output to pad enable
545  * 0: Master clock output is disabled
546  * 1: Master clock output is enabled
547  * Note: This bit should be configured when the I2S is disabled. It is used only when the I2S is in master mode.
548  */
549 #define I2S_MISC_CFGR_MCLKOE_MASK (0x1U)
550 #define I2S_MISC_CFGR_MCLKOE_SHIFT (0U)
551 #define I2S_MISC_CFGR_MCLKOE_SET(x) (((uint32_t)(x) << I2S_MISC_CFGR_MCLKOE_SHIFT) & I2S_MISC_CFGR_MCLKOE_MASK)
552 #define I2S_MISC_CFGR_MCLKOE_GET(x) (((uint32_t)(x) & I2S_MISC_CFGR_MCLKOE_MASK) >> I2S_MISC_CFGR_MCLKOE_SHIFT)
553 
554 /* Bitfield definition for register array: RXDSLOT */
555 /*
556  * EN (RW)
557  *
558  */
559 #define I2S_RXDSLOT_EN_MASK (0xFFFFU)
560 #define I2S_RXDSLOT_EN_SHIFT (0U)
561 #define I2S_RXDSLOT_EN_SET(x) (((uint32_t)(x) << I2S_RXDSLOT_EN_SHIFT) & I2S_RXDSLOT_EN_MASK)
562 #define I2S_RXDSLOT_EN_GET(x) (((uint32_t)(x) & I2S_RXDSLOT_EN_MASK) >> I2S_RXDSLOT_EN_SHIFT)
563 
564 /* Bitfield definition for register array: TXDSLOT */
565 /*
566  * EN (RW)
567  *
568  */
569 #define I2S_TXDSLOT_EN_MASK (0xFFFFU)
570 #define I2S_TXDSLOT_EN_SHIFT (0U)
571 #define I2S_TXDSLOT_EN_SET(x) (((uint32_t)(x) << I2S_TXDSLOT_EN_SHIFT) & I2S_TXDSLOT_EN_MASK)
572 #define I2S_TXDSLOT_EN_GET(x) (((uint32_t)(x) & I2S_TXDSLOT_EN_MASK) >> I2S_TXDSLOT_EN_SHIFT)
573 
574 
575 
576 /* RXD register group index macro definition */
577 #define I2S_RXD_DATA0 (0UL)
578 #define I2S_RXD_DATA1 (1UL)
579 #define I2S_RXD_DATA2 (2UL)
580 #define I2S_RXD_DATA3 (3UL)
581 
582 /* TXD register group index macro definition */
583 #define I2S_TXD_DATA0 (0UL)
584 #define I2S_TXD_DATA1 (1UL)
585 #define I2S_TXD_DATA2 (2UL)
586 #define I2S_TXD_DATA3 (3UL)
587 
588 /* RXDSLOT register group index macro definition */
589 #define I2S_RXDSLOT_DATA0 (0UL)
590 #define I2S_RXDSLOT_DATA1 (1UL)
591 #define I2S_RXDSLOT_DATA2 (2UL)
592 #define I2S_RXDSLOT_DATA3 (3UL)
593 
594 /* TXDSLOT register group index macro definition */
595 #define I2S_TXDSLOT_DATA0 (0UL)
596 #define I2S_TXDSLOT_DATA1 (1UL)
597 #define I2S_TXDSLOT_DATA2 (2UL)
598 #define I2S_TXDSLOT_DATA3 (3UL)
599 
600 
601 #endif /* HPM_I2S_H */
Definition: hpm_i2s_regs.h:12