00001
00038 #ifndef CHIP_OSC_H_INCLUDED
00039 #define CHIP_OSC_H_INCLUDED
00040
00041 #include <clk/xmega/osc.h>
00042
00043 #define OSC_ID_RC2M 0
00044 #define OSC_ID_RC32M 1
00045 #define OSC_ID_RC32K 2
00046 #define OSC_ID_XOSC 3
00047
00048 __always_inline static void osc_enable(uint8_t id)
00049 {
00050 if (id < OSC_ID_XOSC) {
00051 osc_enable_internal(id);
00052 } else {
00053 assert(id == OSC_ID_XOSC);
00054 osc_enable_external(id);
00055 }
00056 }
00057
00058 __always_inline static uint32_t osc_get_rate(uint8_t id)
00059 {
00060 switch (id) {
00061 case OSC_ID_RC2M:
00062 return 2000000UL;
00063 case OSC_ID_RC32M:
00064 return 32000000UL;
00065 case OSC_ID_RC32K:
00066 return 32768UL;
00067 #ifdef BOARD_XOSC_HZ
00068 case OSC_ID_XOSC:
00069 return BOARD_XOSC_HZ;
00070 #endif
00071 default:
00072 unhandled_case(id);
00073 return 0;
00074 }
00075 }
00076
00077 #endif