00001
00038 #ifndef REGS_XMEGA_CLK_H_INCLUDED
00039 #define REGS_XMEGA_CLK_H_INCLUDED
00040
00041 #include <chip/memory-map.h>
00042 #include <io.h>
00043
00053
00054
00055 #define XMEGA_CLK_CTRL 0x00 //!< System Clock Control
00056 #define XMEGA_CLK_PSCTRL 0x01 //!< System Clock Prescaler
00057 #define XMEGA_CLK_LOCK 0x02 //!< Clock System Lock
00058 #define XMEGA_CLK_RTCCTRL 0x03 //!< RTC Control
00059
00060
00062
00063 #define XMEGA_CLK_SCLKSEL_START 0 //< System Clock Selection
00064 #define XMEGA_CLK_SCLKSEL_SIZE 3 //< System Clock Selection
00065
00066
00068
00069 #define XMEGA_CLK_PSBCDIV_START 0 //!< Prescaler B/C Division Factor
00070 #define XMEGA_CLK_PSBCDIV_SIZE 2 //!< Prescaler B/C Division Factor
00071 #define XMEGA_CLK_PSADIV_START 0 //!< Prescaler A Division Factor
00072 #define XMEGA_CLK_PSADIV_SIZE 0 //!< Prescaler A Division Factor
00073
00074
00076
00077 #define XMEGA_CLK_LOCK_BIT 0 //!< Clock System Lock
00078
00079
00081
00082 #define XMEGA_CLK_RTCEN_BIT 0 //!< RTC Clock Source Enable
00083 #define XMEGA_CLK_RTCSRC_START 1 //!< RTC Clock Source
00084 #define XMEGA_CLK_RTCSRC_SIZE 3 //!< RTC Clock Source
00085
00086
00088
00089 #define XMEGA_CLK_PSADIV_1 0 //!< No division
00090 #define XMEGA_CLK_PSADIV_2 1 //!< Divide by 2
00091 #define XMEGA_CLK_PSADIV_4 3 //!< Divide by 2
00092 #define XMEGA_CLK_PSADIV_8 5 //!< Divide by 2
00093 #define XMEGA_CLK_PSADIV_16 7 //!< Divide by 2
00094 #define XMEGA_CLK_PSADIV_32 9 //!< Divide by 2
00095 #define XMEGA_CLK_PSADIV_64 11 //!< Divide by 2
00096 #define XMEGA_CLK_PSADIV_128 13 //!< Divide by 2
00097 #define XMEGA_CLK_PSADIV_256 15 //!< Divide by 2
00098 #define XMEGA_CLK_PSADIV_512 17 //!< Divide by 2
00099
00100
00102
00103 #define XMEGA_CLK_PSBCDIV_1_1 0 //!< No division / No division
00104 #define XMEGA_CLK_PSBCDIV_1_2 1 //!< No division / Divide by 2
00105 #define XMEGA_CLK_PSBCDIV_4_1 2 //!< Divide by 4 / No division
00106 #define XMEGA_CLK_PSBCDIV_2_2 3 //!< Divide by 2 / Divide by 2
00107
00108
00110
00111
00112 #define CLK_BIT(name) (1U << XMEGA_CLK_##name##_BIT)
00113
00114 #define CLK_BF(name, value) \
00115 ((value) << XMEGA_CLK_##name##_START)
00116
00117 #define CLK_BFMASK(name) \
00118 (((1U << XMEGA_CLK_##name##_SIZE) - 1) \
00119 << XMEGA_CLK_##name##_START)
00120
00121 #define CLK_BFEXT(name, regval) \
00122 (((regval) >> XMEGA_CLK_##name##_START) \
00123 & ((1U << XMEGA_CLK_##name##_SIZE) - 1))
00124
00125 #define CLK_BFINS(name, value, regval) \
00126 (((regval) & ~(((1U << XMEGA_CLK_##name##_SIZE) - 1) \
00127 << XMEGA_CLK_##name##_START)) \
00128 | XMEGA_CLK_BF(name, value))
00129
00130
00132
00133
00134 #define clk_read_reg(reg) \
00135 _clk_read_reg(reg)
00136 #define _clk_read_reg(reg) \
00137 mmio_read8((void *)(CLK_BASE + XMEGA_CLK_##reg))
00138
00139 #define clk_write_reg(reg, value) \
00140 _clk_write_reg(reg, value)
00141 #define _clk_write_reg(reg, value) \
00142 mmio_write8((void *)(CLK_BASE + XMEGA_CLK_##reg), (value))
00143
00144 #define clk_write_ccp_reg(reg, value) \
00145 _clk_write_ccp_reg(reg, value)
00146 #define _clk_write_ccp_reg(reg, value) \
00147 mmio_ccp_write8((void *)(CLK_BASE + XMEGA_CLK_##reg), (value))
00148
00149
00151
00152 #endif