summaryrefslogtreecommitdiffstats
path: root/utils/reggen-ng/stm32h743.reggen
blob: 02aed537bac2068b84379a4ed41e61e5315854fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
name    "stm32h743"
title   "STM32H743"
isa     "armv7-m"
version "1.0"
author  "Aidan MacDonald"

node FLASH {
    title "Embedded flash memory"
    addr 0x52002000

    reg ACR 0x00 {
        fld 5 3 WRHIGHFREQ
        fld 3 0 LATENCY
    }
}

node PWR {
    title "Power control"
    addr 0x58024800

    reg CR1 0x00 {
        fld 18 17 ALS
        bit    16 AVDEN
        fld 15 14 SVOS
        bit     9 FLPS
        bit     8 DBP
        fld  7  5 PLS
        bit     4 PVDE
        bit     0 LPDS
    }

    reg CSR1 0x04 {
        bit    16 AVDO
        fld 15 14 ACTVOS
        bit    13 ACTVOSRDY
        bit     4 PVDO
    }

    reg CR3 0x0c {
        bit 26 USB33RDY
        bit 25 USBREGEN
        bit 24 USB33DEN
        bit  9 VBRS
        bit  8 VBE
        bit  2 SCUEN
        bit  1 LDOEN
        bit  0 BYPASS
    }

    reg D3CR 0x18 {
        fld 15 14 VOS { enum VOS3 1; enum VOS2 2; enum VOS1 3; }
        bit    13 VOSRDY
    }
}

node RCC {
    title "Reset and clock control"
    addr 0x58024400

    reg CR 0x00 {
        bit  29 PLL3RDY
        bit  28 PLL3ON
        bit  27 PLL2RDY
        bit  26 PLL2ON
        bit  25 PLL1RDY
        bit  24 PLL1ON
        bit  19 HSECSSON
        bit  18 HSEBYP
        bit  17 HSERDY
        bit  16 HSEON
        bit  15 D2CKRDY
        bit  14 D1CKRDY
        bit  13 HSI48RDY
        bit  12 HSI48ON
        bit   9 CSIKERON
        bit   8 CSIRDY
        bit   7 CSION
        bit   5 HSIDIVF
        fld 4 3 HSIDIV
        bit   2 HSIRDY
        bit   1 HSIKERON
        bit   0 HSION
    }

    reg CFGR 0x10 {
        fld 31 29 MCO2 { enum SYSCLK 0; enum PLL2P 1; enum HSE 2; enum PLL1P 3; enum CSI 4; enum LSI 5 }
        fld 28 25 MCO2PRE
        fld 24 22 MCO1 { enum HSI 0; enum LSE 1; enum HSE 2; enum PLL1Q 3; enum HSI48 4 }
        fld 21 18 MCO1PRE
        bit    15 TIMPRE
        bit    14 HRTIMSEL
        fld 13  8 RTCPRE
        bit     7 STOPKERWUCK
        bit     6 STOPWUCK
        fld  5  3 SWS
        fld  2  0 SW { enum HSI 0; enum CSI 1; enum HSE 2; enum PLL1P 3; }
    }

    reg D1CFGR 0x18 {
        fld 11 8 D1CPRE
        fld  6 4 D1PPRE
        fld  4 0 HPRE
    }

    reg D2CFGR 0x1c {
        fld 10 8 D2PPRE2
        fld  6 4 D2PPRE1
    }

    reg D3CFGR 0x20 {
        fld 6 4 D3PPRE
    }

    reg PLLCKSELR 0x28 {
        fld 25 20 DIVM3
        fld 17 12 DIVM2
        fld  9  4 DIVM1
        fld  1  0 PLLSRC { enum HSI 0; enum CSI 1; enum HSE 2; enum NONE 3; }
    }

    reg PLLCFGR 0x2c {
        bit    24 DIVR3EN
        bit    23 DIVQ3EN
        bit    22 DIVP3EN
        bit    21 DIVR2EN
        bit    20 DIVQ2EN
        bit    19 DIVP2EN
        bit    18 DIVR1EN
        bit    17 DIVQ1EN
        bit    16 DIVP1EN
        fld 11 10 PLL3RGE       { enum 1_2MHZ 0; enum 2_4MHz 1; enum 4_8MHz 2; enum 8_16MHz 3; }
        bit     9 PLL3VCOSEL    { enum WIDE 0; enum MEDIUM 1; }
        bit     8 PLL3FRACEN
        fld 7   6 PLL2RGE       { enum 1_2MHZ 0; enum 2_4MHz 1; enum 4_8MHz 2; enum 8_16MHz 3; }
        bit     5 PLL2VCOSEL    { enum WIDE 0; enum MEDIUM 1; }
        bit     4 PLL2FRACEN
        fld 3   2 PLL1RGE       { enum 1_2MHZ 0; enum 2_4MHz 1; enum 4_8MHz 2; enum 8_16MHz 3; }
        bit     1 PLL1VCOSEL    { enum WIDE 0; enum MEDIUM 1; }
        bit     0 PLL1FRACEN
    }

    reg PLLxDIVR {
        instance PLL1DIVR 0x30
        instance PLL2DIVR 0x38
        instance PLL3DIVR 0x40

        fld 30 24 DIVR
        fld 22 16 DIVQ
        fld 15  9 DIVP
        fld  8  0 DIVN
    }

    reg PLLxFRACR {
        instance PLL1FRACR 0x34
        instance PLL2FRACR 0x3c
        instance PLL3FRACR 0x44

        fld 15 3 FRACN
    }

    reg D1CCIPR 0x4c {
        fld 29 28 CKPERSEL { enum HSI 0; enum CSI 1; enum HSE 2; }
        bit    16 SDMMCSEL { enum PLL1Q 0; enum PLL2R 1; }
        fld  5  4 QSPISEL  { enum AHB 0; enum PLL1Q 1; enum PLL2R 2; enum PER 3; }
        fld  1  0 FMCSEL   { enum AHB 0; enum PLL1Q 1; enum PLL2R 2; enum PER 3; }
    }

    reg D2CCIP1R 0x50 {
        bit    31 SWPSEL    { enum APB1 0; enum HSI 1; }
        fld 29 28 FDCANSEL  { enum HSE 0; enum PLL1Q 1; enum PLL2Q 1; }
        bit    24 DFSDM1SEL { enum APB2 0; enum SYSCLK 1; }
        fld 21 20 SPDIFSEL  { enum PLL1Q 0; enum PLL2R 1; enum PLL3R 2; enum HSI 3; }
        fld 18 16 SPI45SEL  { enum APB2 0; enum PLL2Q 1; enum PLL3Q 2; enum HSI 3;
                              enum CSI 4; enum HSE 5; }
        fld 14 12 SPI123SEL { enum PLL1Q 0; enum PLL2P 1; enum PLL3P 2; enum I2SCKIN 3;
                              enum PER 4; }
        fld  8  6 SAI23SEL { enum PLL1Q 0; enum PLL2P 1; enum PLL3P 2; enum I2SCKIN 4;
                             enum PER 4; }
        fld  2  0 SAI1SEL { enum PLL1Q 0; enum PLL2P 1; enum PLL3P 2; enum I2SCKIN 4;
                            enum PER 4; }
    }

    reg D2CCIP2R 0x54 {
        fld 30 28 LPTIM1SEL { enum APB1 0; enum PLL2P 1; enum PLL3R 2;
                              enum LSE 3; enum LSI 4; enum PER 5; }
        fld 23 22 CECSEL { enum LSE 0; enum LSI 1; enum CSI 2; }
        fld 21 20 USBSEL { enum DISABLE 0; enum PLL1Q 1; enum PLL3Q 2; enum HSI48 3; }
        fld 13 12 I2C123SEL { enum APB1 0; enum PLL3R 1; enum HSI 2; enum CSI 3; }
        fld  9  8 RNGSEL { enum HSI 0; enum PLL1Q 1; enum LSE 2; enum LSI 3; }
        fld  5  3 USART16SEL { enum APB2 0; enum PLL2Q 1; enum PLL3Q 2;
                               enum HSI 3; enum CSI 4; enum LSE 5; }
        fld  2  0 USART234578SEL { enum APB1 0; enum PLL2Q 1; enum PLL3Q 2;
                                   enum HSI 3; enum CSI 4; enum LSE 5; }
    }

    reg D3CCIPR 0x58 {
        fld 30 28 SPI6SEL { enum APB4 0; enum PLL2Q 1; enum PLL3Q 2;
                            enum HSI 3; enum CSI 4; enum HSE 5; }
        fld 26 24 SAI4BSEL { enum PLL1Q 0; enum PLL2P 1; enum PLL3P 2;
                             enum I2S_CKIN 3; enum PER 4; }
        fld 23 21 SAI4ASEL { enum PLL1Q 0; enum PLL2P 1; enum PLL3P 2;
                             enum I2S_CKIN 3; enum PER 4; }
        fld 17 16 ADCSEL { enum PLL2P 0; enum PLL3R 1; enum PER 2; }
        fld 15 13 LPTIM345SEL { enum APB4 0; enum PLL2P 1; enum PLL3R 2;
                                enum LSE 3; enum LSI 4; enum PER 5; }
        fld 12 10 LPTIM2SEL { enum APB4 0; enum PLL2P 1; enum PLL3R 2;
                              enum LSE 3; enum LSI 4; enum PER 5; }
        fld  9  8 I2C4SEL { enum APB4 0; enum PLL3R 1; enum HSI 2; enum CSI 3; }
        fld  2  0 LPUART1SEL { enum APB4 0; enum PLL2Q 1; enum PLL3Q 2;
                               enum HSI 3; enum CSI 4; enum LSE 5; }
    }

    reg BDCR 0x70 {
        bit   16 BDRST
        bit   15 RTCEN
        fld 9  8 RTCSEL { enum NONE 0; enum LSE 1; enum LSI 2; enum HSE 3; }
        bit    6 LSECSSD
        bit    5 LSECSSON
        fld 4  3 LSEDRV { enum LOW 0; enum MED_LOW 1; enum MED_HIGH 2; enum HIGH 3; }
        bit    2 LSEBYP
        bit    1 LSERDY
        bit    0 LSEON
    }

    reg CSR 0x74 {
        bit 1 LSIRDY
        bit 0 LSION
    }

    reg AHB3EN {
        instance AHB3ENR 0xd4
        instance AHB3LPENR 0xfc

        # note:
        # - bits 8 and 28-31 exist in AHB3LPENR only
        # - all other bits are common

        bit 31 AXISRAMEN
        bit 30 ITCMEN
        bit 29 DTCM2EN
        bit 28 D1DTCM1EN
        bit 16 SDMMC1EN
        bit 14 QSPIEN
        bit 12 FMCEN
        bit  8 FLASHEN
        bit  5 JPEGDECEN
        bit  4 DMA2DEN
        bit  0 MDMAEN
    }

    reg AHB4EN {
        instance AHB4ENR 0xe0
        instance AHB4LPENR 0x108

        # note:
        # - bit 29 exists in AHB4LPENR only
        # - bit 25 exists in AHB4ENR only
        # - all other bits are common

        bit 29 SRAM4EN
        bit 28 BKPRAMEN
        bit 25 HSEMEN
        bit 24 ADC3EN
        bit 21 BDMAEN
        bit 19 CRCEN
        bit 10 GPIOKEN
        bit  9 GPIOJEN
        bit  8 GPIOIEN
        bit  7 GPIOHEN
        bit  6 GPIOGEN
        bit  5 GPIOFEN
        bit  4 GPIOEEN
        bit  3 GPIODEN
        bit  2 GPIOCEN
        bit  1 GPIOBEN
        bit  0 GPIOAEN
    }

    reg APB3EN {
        instance APB3ENR 0xe4
        instance APB3LPENR 0x10c

        bit 6 WWDG1EN
        bit 3 LTDCEN
    }

    reg APB1LEN {
        instance APB1LENR 0xe8
        instance APB1LLPENR 0x110

        bit 31 UART8EN
        bit 30 UART7EN
        bit 29 DAC12EN
        bit 27 CECEN
        bit 23 I2C3EN
        bit 22 I2C2EN
        bit 21 I2C1EN
        bit 20 UART5EN
        bit 19 UART4EN
        bit 18 USART3EN
        bit 17 USART2EN
        bit 16 SPDIFRXEN
        bit 15 SPI3EN
        bit 14 SPI2EN
        bit  9 LPTIM1EN
        bit  8 TIM14EN
        bit  7 TIM13EN
        bit  6 TIM12EN
        bit  5 TIM7EN
        bit  4 TIM6EN
        bit  3 TIM5EN
        bit  2 TIM4EN
        bit  1 TIM3EN
        bit  0 TIM2EN
    }

    reg APB1HEN {
        instance APB1HENR 0xec
        instance APB1HLPENR 0x114

        bit 8 FDCANEN
        bit 5 MDIOSEN
        bit 4 OPAMPEN
        bit 2 SWPEN
        bit 1 CRSEN
    }

    reg APB2EN {
        instance APB2ENR 0xf0
        instance APB2LPENR 0x118

        bit 29 HRTIMEN
        bit 28 DFSDM1EN
        bit 24 SAI3EN
        bit 23 SAI2EN
        bit 22 SAI1EN
        bit 20 SPI5EN
        bit 18 TIM17EN
        bit 17 TIM16EN
        bit 16 TIM15EN
        bit 13 SPI4EN
        bit 12 SPI1EN
        bit  5 USART6EN
        bit  4 USART1EN
        bit  1 TIM8EN
        bit  0 TIM1EN
    }

    reg APB4EN {
        instance APB4ENR 0xf4
        instance APB4LPENR 0x11c

        bit 21 SAI4EN
        bit 16 RTCAPBEN
        bit 15 VREFEN
        bit 14 COMP12EN
        bit 12 LPTIM5EN
        bit 11 LPTIM4EN
        bit 10 LPTIM3EN
        bit  9 LPTIM2EN
        bit  7 I2C4EN
        bit  5 SPI6EN
        bit  3 LPUART1EN
        bit  1 SYSCFGEN
    }
}

node GPIO {
    title "General-purpose I/Os"
    instance 0x58020000 0x400 11

    reg MODER 0x00
    reg OTYPER 0x04
    reg OSPEEDR 0x08
    reg PUPDR 0x0c
    reg IDR 0x10
    reg ODR 0x14
    reg BSRR 0x18
    reg LCKR 0x1c
    reg AFRL 0x20
    reg AFRH 0x24
}

node SYSCFG {
    title "System configuration controller"
    addr 0x58000400

    reg PWRCFG 0x2c {
        bit 0 ODEN
    }
}

node FMC {
    title "Flexible memory controller"
    addr 0x52004000

    reg BCR {
        instance 0x000 0x8 4

        bit    31 FMCEN
        fld 25 24 BMAP
        bit    21 WFDIS
    }

    reg SDCR {
        instance 0x140 0x4 2

        fld 14 13 RPIPE
        bit    12 RBURST
        fld 11 10 SDCLK
        bit     9 WP
        fld  8  7 CAS
        bit     6 NB
        fld  5  4 MWID
        fld  3  2 NR
        fld  1  0 NC
    }

    reg SDTR {
        instance 0x148 0x4 2

        fld 27 24 TRCD
        fld 23 20 TRP
        fld 19 16 TWR
        fld 15 12 TRC
        fld 11  8 TRAS
        fld  7  4 TXSR
        fld  3  0 TMRD
    }

    reg SDCMR 0x150 {
        fld 22 9 MRD
        fld  8 5 NRFS
        bit    4 CTB1
        bit    3 CTB2
        fld  2 0 MODE
    }

    reg SDRTR 0x154 {
        bit    14 REIE
        fld 13  1 COUNT
        bit     0 CRE
    }

    reg SDSR 0x158 {
        fld 4 3 MODES2
        fld 2 1 MODES1
        bit   0 RE
    }
}

node RTC {
    title "Real time clock"
    addr 0x58004000

    reg TR {
        instance TR 0x00
        instance TSTR 0x30

        bit    22 PM
        fld 21 20 HT
        fld 19 16 HU
        fld 14 12 MNT
        fld 11  8 MNU
        fld  6  4 ST
        fld  3  0 SU
    }

    reg DR {
        instance DR 0x04
        instance DRTR 0x34

        fld 23 20 YT
        fld 19 16 YU
        fld 15 13 WDU
        bit    12 MT
        fld 11  8 MU
        fld  5  4 DT
        fld  3  0 DU
    }

    reg CR 0x08 {
        bit    24 ITSE
        bit    23 COE
        fld 22 21 OSEL { enum DISABLED 0; enum ALARM_A 1; enum ALARM_B 2; enum WAKEUP 3; }
        bit    20 POL
        bit    19 COSEL
        bit    18 BKP
        bit    17 SUB1H
        bit    16 ADD1H
        bit    15 TSIE
        bit    14 WUTIE
        bit    13 ALRBIE
        bit    12 ALRAIE
        bit    11 TSE
        bit    10 WUTE
        bit     9 ALRBE
        bit     8 ALRAE
        bit     6 FMT
        bit     5 BYPSHAD
        bit     4 REFCKON
        bit     3 TSEDGE
        bit  2  0 WUCKSEL { enum RTC_16 0; enum RTC_8 1; enum RTC_4 2; enum RTC_2 3;
                            enum CK_SPRE 4; enum CK_SPRE_ADDWUT 6; }
    }

    reg ISR 0x0c {
        bit 17 ITSF
        bit 16 RECALPF
        bit 15 TAMP3F
        bit 14 TAMP2F
        bit 13 TAMP1F
        bit 12 TSOVF
        bit 11 TSF
        bit 10 WUTF
        bit  9 ALRBF
        bit  8 ALRAF
        bit  7 INIT
        bit  6 INITF
        bit  5 RSF
        bit  4 INITS
        bit  3 SHPF
        bit  2 WUTWF
        bit  1 ALRBWF
        bit  0 ALRAWF
    }

    reg PRER 0x10 {
        fld 22 16 PREDIV_A
        fld 14  0 PREDIV_S
    }

    reg WPR 0x24 {
        fld 7 0 KEY { enum KEY1 0xCA; enum KEY2 0x53; }
    }

    reg SSR {
        instance SSR 0x28
        instance TSSSR 0x38

        fld 15 0 SS
    }

    reg OR 0x4c {
        bit 1 RTC_OUT_RMP
        bit 0 RTC_ALARM_TYPE { enum OPEN_DRAIN 0; enum PUSH_PULL 1; }
    }

    reg BKPR {
        instance 0x50 0x4 32
    }
}

node SPI {
    title "Serial peripheral interface"
    instance nochild SPI1 0x40013000
    instance nochild SPI2 0x40003800
    instance nochild SPI3 0x40003c00
    instance nochild SPI4 0x40013400
    instance nochild SPI5 0x40015000
    instance nochild SPI6 0x58001400
    instance floating

    reg CR1 0x00 {
        bit 16 IO_LOCK
        bit 15 TCRCINI
        bit 14 RCRCINI
        bit 13 CRC33_17
        bit 12 SSI
        bit 11 HDDIR
        bit 10 CSUSP
        bit  9 CSTART
        bit  8 MASRX
        bit  0 SPE
    }

    reg CR2 0x04 {
        fld 31 16 TSER
        fld 15  0 TSIZE
    }

    reg CFG1 0x08 {
        fld 30 28 MBR
        bit    22 CRCEN
        fld 20 16 CRCSIZE
        bit    15 TXDMAEN
        bit    14 RXDMAEN
        fld 12 11 UDRDET
        fld 10  9 UDRCFG
        fld  8  5 FTHLV
        fld  4  0 DSIZE
    }

    reg CFG2 0x0c {
        bit    31 AFCNTR
        bit    30 SSOM
        bit    29 SSOE
        bit    28 SSIOP
        bit    26 SSM { enum SS_PAD 0; enum SSI_BIT 1; }
        bit    25 CPOL
        bit    24 CPHA
        bit    23 LSBFIRST
        bit    22 MASTER
        fld 21 19 SP { enum MOTOROLA 0; enum TI 1; }
        fld 18 17 COMM { enum DUPLEX 0; enum TXONLY 1; enum RXONLY 2; enum HALF_DUPLEX 3; }
        bit    15 IOSWP
        fld  7  4 MIDI
        fld  3  0 MSSI
    }

    reg IER 0x10 {
        bit 10 TSERFIE
        bit  9 MODFIE
        bit  8 TIFREIE
        bit  7 CRCEIE
        bit  6 OVRIE
        bit  5 UDRIE
        bit  4 TXTFIE
        bit  3 EOTIE
        bit  2 DXPIE
        bit  1 TXPIE
        bit  0 RXPIE
    }

    reg SR 0x14 {
        fld 31 16 CTSIZE
        bit    15 RXWNE
        fld 14 13 RXPLVL
        bit    12 TXC
        bit    11 SUSP
        bit    10 TSERF
        bit     9 MODF
        bit     8 TIFRE
        bit     7 CRCE
        bit     6 OVR
        bit     5 UDR
        bit     4 TXTF
        bit     3 EOT
        bit     2 DXP
        bit     1 TXP
        bit     0 RXP
    }

    reg IFCR 0x18 {
        bit 11 SUSPC
        bit 10 TSERFC
        bit  9 MODFC
        bit  8 TIFREC
        bit  7 CRCEC
        bit  6 OVRC
        bit  5 UDRC
        bit  4 TXTFC
        bit  3 EOTC
    }

    reg  8  TXDR8 0x20
    reg 16 TXDR16 0x20
    reg 32 TXDR32 0x20
    reg  8  RXDR8 0x30
    reg 16 RXDR16 0x30
    reg 32 RXDR32 0x30

    reg CRCPOLY 0x40
    reg TXCRC 0x44
    reg RXCRC 0x48
    reg UDRDR 0x4c

    reg I2SCFGR 0x50 {
        bit    25 MCKOE
        bit    24 ODD
        fld 23 16 I2SDIV
        bit    14 DATFMT { enum RIGHT_ALIGNED 0; enum LEFT_ALIGNED 1; }
        bit    13 WSINV
        bit    12 FIXCH
        bit    11 CKPOL
        bit    10 CHLEN { enum 16BIT 0; enum 32BIT 1; }
        fld  9  8 DATLEN { enum 16BIT 0; enum 24BIT 1; enum 32BIT 2; }
        bit     7 PCMSYNC { enum SHORT 0; enum LONG 1; }
        fld  5  4 I2SSTD { enum I2S 0; enum MSB_JUSTIFIED 1; enum LSB_JUSTIFIED 2; enum PCM 3; }
        fld  3  1 I2SCFG { enum SLAVE_TX 0; enum SLAVE_RX 1;
                           enum MASTER_TX 2; enum MASTER_RX 3;
                           enum SLAVE_DUPLEX 4; enum MASTER_DUPLEX 5; }
        bit     0 I2SMOD
    }
}