00001
00038 #ifndef REGS_XMEGA_OSC_H_INCLUDED
00039 #define REGS_XMEGA_OSC_H_INCLUDED
00040
00041 #include <chip/memory-map.h>
00042 #include <io.h>
00043
00054
00055
00056 #define XMEGA_OSC_CTRL 0x00 //!< Oscillator Control
00057 #define XMEGA_OSC_STATUS 0x01 //!< Oscillator Status
00058 #define XMEGA_OSC_XOSCCTRL 0x02 //!< XOSC Control
00059 #define XMEGA_OSC_XOSCFAIL 0x03 //!< XOSC Failure Detection
00060 #define XMEGA_OSC_RC32KCAL 0x04 //!< 32 kHz Oscillator Calibration
00061 #define XMEGA_OSC_PLLCTRL 0x05 //!< PLL Control
00062 #define XMEGA_OSC_DFLLCTRL 0x06 //!< DFLL Control
00063
00064
00066
00067 #define XMEGA_OSC_RC2MEN_BIT 0 //!< 2 MHz RCOSC Enable
00068 #define XMEGA_OSC_RC32MEN_BIT 1 //!< 32 MHz RCOSC Enable
00069 #define XMEGA_OSC_RC32KEN_BIT 2 //!< 32 kHz RCOSC Enable
00070 #define XMEGA_OSC_XOSCEN_BIT 3 //!< External Oscillator Enable
00071 #define XMEGA_OSC_PLLEN_BIT 4 //!< PLL Enable
00072
00073
00075
00076 #define XMEGA_OSC_RC2MRDY_BI 0 //!< 2 MHz RCOSC Enable
00077 #define XMEGA_OSC_RC32MRDY_BIT 1 //!< 32 MHz RCOSC Enable
00078 #define XMEGA_OSC_RC32KRDY_BIT 2 //!< 32 kHz RCOSC Enable
00079 #define XMEGA_OSC_XOSCRDY_BIT 3 //!< External Oscillator Enable
00080 #define XMEGA_OSC_PLLRDY_BIT 4 //!< PLL Enable
00081
00082
00084
00085 #define XMEGA_OSC_XOSCSEL_START 0 //!< Crystal Oscillator Type
00086 #define XMEGA_OSC_XOSCSEL_SIZE 4 //!< Crystal Oscillator Type
00087 #define XMEGA_OSC_X32KLPM_BIT 5 //!< XTAL 32 kHz Low Power Mode
00088 #define XMEGA_OSC_FRQRANGE_START 6 //!< XTAL Frequency Range
00089 #define XMEGA_OSC_FRQRANGE_SIZE 2 //!< XTAL Frequency Range
00090
00091
00093
00094 #define XMEGA_OSC_XOSCFDEN_BIT 0 //!< Failure Detection Enable
00095 #define XMEGA_OSC_XOSCFDIF_BIT 1 //!< Failure Detection Interrupt Flag
00096
00097
00099
00100 #define XMEGA_OSC_PLLFAC_START 0 //!< Multiplication Factor
00101 #define XMEGA_OSC_PLLFAC_SIZE 5 //!< Multiplication Factor
00102 #define XMEGA_OSC_PLLSRC_START 6 //!< Clock Source
00103 #define XMEGA_OSC_PLLSRC_SIZE 2 //!< Clock Source
00104
00105
00107
00108
00109 #define OSC_BIT(name) (1U << XMEGA_OSC_##name##_BIT)
00110
00111 #define OSC_BF(name, value) \
00112 ((value) << XMEGA_OSC_##name##_START)
00113
00114 #define OSC_BFMASK(name) \
00115 (((1U << XMEGA_OSC_##name##_SIZE) - 1) \
00116 << XMEGA_OSC_##name##_START)
00117
00118 #define OSC_BFEXT(name, regval) \
00119 (((regval) >> XMEGA_OSC_##name##_START) \
00120 & ((1U << XMEGA_OSC_##name##_SIZE) - 1))
00121
00122 #define OSC_BFINS(name, value, regval) \
00123 (((regval) & ~(((1U << XMEGA_OSC_##name##_SIZE) - 1) \
00124 << XMEGA_OSC_##name##_START)) \
00125 | XMEGA_OSC_BF(name, value))
00126
00127
00129
00130
00131 #define osc_read_reg(reg) \
00132 _osc_read_reg(reg)
00133 #define _osc_read_reg(reg) \
00134 mmio_read8((void *)(OSC_BASE + XMEGA_OSC_##reg))
00135
00136 #define osc_write_reg(reg, value) \
00137 _osc_write_reg(reg, value)
00138 #define _osc_write_reg(reg, value) \
00139 mmio_write8((void *)(OSC_BASE + XMEGA_OSC_##reg), (value))
00140
00141 #define osc_write_ccp_reg(reg, value) \
00142 _osc_write_ccp_reg(reg, value)
00143 #define _osc_write_ccp_reg(reg, value) \
00144 mmio_ccp_write8((void *)(OSC_BASE + XMEGA_OSC_##reg), (value))
00145
00146
00148
00149 #endif