/* esp/phy_regs.h * * ESP8266 PHY register definitions * * Not compatible with ESP SDK register access code. */ #ifndef _ESP_PHY_REGS_H #define _ESP_PHY_REGS_H #include "esp/types.h" #include "common_macros.h" #define PHY_BASE 0x60000500 #define PHY (*(struct PHY_REGS *)(PHY_BASE)) struct PHY_REGS { // 0x00 — 0x60 uint32_t volatile _gap0[24]; // TX digital predistortion control // 0x60 uint32_t volatile TX_DPD; // 0x64 — 0x7c uint32_t volatile _gap1[6]; // IQ imbalance estimation control // 0x7c uint32_t volatile IQ_EST; // Looks like RSSI, // may be per OFDM subcarrier // 0x80 uint32_t volatile RX_IQ_0; // 0x84 uint32_t volatile RX_IQ_1; // 0x88 uint32_t volatile RX_IQ_2; // 0x8c uint32_t volatile RX_IQ_3; // RX gain control // 0x90 uint32_t volatile RX_GAIN_CTL; // Whatever pbus is, these registers controls it // 0x94 uint32_t volatile PBUS_CTL_0; // 0x98 uint32_t volatile PBUS_CTL_1; // 0x9C uint32_t volatile PBUS_CTL_2; // 0xA0 uint32_t volatile PBUS_CTL_3; uint32_t volatile _gap2[5]; // Looks like baseband synthesizer control regs // 0xB8 uint32_t volatile BB_CTL_0; // 0xBC uint32_t volatile BB_CTL_1; // 0xC0 uint32_t volatile BB_CTL_2; // 0xC4 uint32_t volatile BB_CTL_3; // These registers do exist but I don't know // what they are for. // 0xC8 uint32_t volatile UNK_0; uint32_t volatile UNK_1; uint32_t volatile UNK_2; uint32_t volatile UNK_3; uint32_t volatile UNK_4; }; _Static_assert((uintptr_t) &PHY.TX_DPD == 0x60000560, "RF PHY TX_DPD address"); _Static_assert((uintptr_t) &PHY.IQ_EST == 0x6000057C, "RF PHY IQ_EST address"); _Static_assert((uintptr_t) &PHY.BB_CTL_3 == 0x600005C4, "RF PHY BB_CTL_3 address"); #endif /* _ESP_PHY_REGS_H */