#pragma once #include #include "rcc_enums.h" struct RCC_reg_f0_t { volatile uint32_t CR; volatile uint32_t CFGR; volatile uint32_t CIR; volatile uint32_t APB2RSTR; volatile uint32_t APB1RSTR; volatile uint32_t AHBENR; volatile uint32_t APB2ENR; volatile uint32_t APB1ENR; volatile uint32_t BDCR; volatile uint32_t CSR; volatile uint32_t AHBRSTR; volatile uint32_t CFGR2; volatile uint32_t CFGR3; volatile uint32_t CR2; }; struct RCC_reg_f1_t { volatile uint32_t CR; volatile uint32_t CFGR; volatile uint32_t CIR; volatile uint32_t APB2RSTR; volatile uint32_t APB1RSTR; volatile uint32_t AHBENR; volatile uint32_t APB2ENR; volatile uint32_t APB1ENR; volatile uint32_t BDCR; volatile uint32_t CSR; }; struct RCC_reg_f3_t { volatile uint32_t CR; volatile uint32_t CFGR; volatile uint32_t CIR; volatile uint32_t APB2RSTR; volatile uint32_t APB1RSTR; volatile uint32_t AHBENR; volatile uint32_t APB2ENR; volatile uint32_t APB1ENR; volatile uint32_t BDCR; volatile uint32_t CSR; volatile uint32_t AHBRSTR; volatile uint32_t CFGR2; volatile uint32_t CFGR3; }; struct RCC_reg_f4_t { volatile uint32_t CR; volatile uint32_t PLLCFGR; volatile uint32_t CFGR; volatile uint32_t CIR; volatile uint32_t AHB1RSTR; volatile uint32_t AHB2RSTR; volatile uint32_t AHB3RSTR; volatile uint32_t AHB4RSTR; // Reserved volatile uint32_t APB1RSTR; volatile uint32_t APB2RSTR; volatile uint32_t APB3RSTR; // Reserved volatile uint32_t APB4RSTR; // Reserved volatile uint32_t AHB1ENR; volatile uint32_t AHB2ENR; volatile uint32_t AHB3ENR; volatile uint32_t AHB4ENR; // Reserved volatile uint32_t APB1ENR; volatile uint32_t APB2ENR; volatile uint32_t APB3ENR; // Reserved volatile uint32_t APB4ENR; // Reserved volatile uint32_t AHB1LPENR; volatile uint32_t AHB2LPENR; volatile uint32_t AHB3LPENR; volatile uint32_t AHB4LPENR; // Reserved volatile uint32_t APB1LPENR; volatile uint32_t APB2LPENR; volatile uint32_t APB3LPENR; // Reserved volatile uint32_t APB4LPENR; // Reserved volatile uint32_t BDCR; volatile uint32_t CSR; volatile uint32_t _1; volatile uint32_t _2; volatile uint32_t SSCGR; volatile uint32_t PLLI2SCFGR; volatile uint32_t PLLSAICFGR; volatile uint32_t DCKCFGR1; volatile uint32_t DCKCFGR2; }; struct RCC_reg_l0_t { volatile uint32_t CR; volatile uint32_t ICSCR; volatile uint32_t CRRCR; volatile uint32_t CFGR; volatile uint32_t CIER; volatile uint32_t CIFR; volatile uint32_t CICR; volatile uint32_t IOPRSTR; volatile uint32_t AHBRSTR; volatile uint32_t APB2RSTR; volatile uint32_t APB1RSTR; volatile uint32_t IOPENR; volatile uint32_t AHBENR; volatile uint32_t APB2ENR; volatile uint32_t APB1ENR; volatile uint32_t IOPSMENR; volatile uint32_t AHBSMENR; volatile uint32_t APB2SMENR; volatile uint32_t APB1SMENR; volatile uint32_t CCIPR; volatile uint32_t CSR; }; struct RCC_reg_l1_t { volatile uint32_t CR; volatile uint32_t ICSCR; volatile uint32_t CFGR; volatile uint32_t CIR; volatile uint32_t AHBRSTR; volatile uint32_t APB2RSTR; volatile uint32_t APB1RSTR; volatile uint32_t AHBENR; volatile uint32_t APB2ENR; volatile uint32_t APB1ENR; // Use "standard" _SM_ names, not _LP_ as in Refman. volatile uint32_t AHBSMENR; volatile uint32_t APB2SMENR; volatile uint32_t APB1SMENR; volatile uint32_t CSR; }; struct RCC_reg_wb_t { volatile uint32_t CR; volatile uint32_t ICSCR; volatile uint32_t CFGR; volatile uint32_t PLLCFGR; volatile uint32_t PLLSAI1CFGR; uint32_t _1; // reserved 0x14 volatile uint32_t CIER; volatile uint32_t CIFR; volatile uint32_t CICR; volatile uint32_t SMPSCR; volatile uint32_t AHB1RSTR; volatile uint32_t AHB2RSTR; volatile uint32_t AHB3RSTR; uint32_t _2; // reserved 0x34 volatile uint32_t APB1RSTR1; volatile uint32_t APB1RSTR2; volatile uint32_t APB2RSTR; volatile uint32_t APB3RSTR; volatile uint32_t AHB1ENR; volatile uint32_t AHB2ENR; volatile uint32_t AHB3ENR; uint32_t _3; // reserved 0x54 volatile uint32_t APB1ENR1; volatile uint32_t APB1ENR2; volatile uint32_t APB2ENR; uint32_t _4; // reserved 0x64 volatile uint32_t AHB1SMENR; volatile uint32_t AHB2SMENR; volatile uint32_t AHB3SMENR; uint32_t _5; // reserved 0x74 volatile uint32_t APB1SMENR1; volatile uint32_t APB1SMENR2; volatile uint32_t APB2SMENR; uint32_t _6; // reserved 0x84 volatile uint32_t CCIPR; uint32_t _7; // reserved 0x8c volatile uint32_t BDCR; volatile uint32_t CSR; volatile uint32_t CRRCR; volatile uint32_t HSECR; uint32_t _8[26]; volatile uint32_t EXTCFGR; uint32_t _9[15]; volatile uint32_t C2AHB1ENR; volatile uint32_t C2AHB2ENR; volatile uint32_t C2AHB3ENR; uint32_t _10; volatile uint32_t C2APB1ENR1; volatile uint32_t C2APB1ENR2; volatile uint32_t C2APB2ENR; volatile uint32_t C2APB3ENR; volatile uint32_t C2AHB1SMENR; volatile uint32_t C2AHB2SMENR; volatile uint32_t C2AHB3SMENR; uint32_t _11; volatile uint32_t C2APB1SMENR1; volatile uint32_t C2APB1SMENR2; volatile uint32_t C2APB2SMENR; volatile uint32_t C2APB3SMENR; }; template class RCC_t : public mmio_ptr { public: using mmio_ptr::ptr; template void enable(Bus dev) const { rcc::enable(*this, dev); } };