00001
00099 #include "board.h"
00100 #include "gpio.h"
00101 #if UC3L
00102
00103
00104
00105 #include "scif_uc3l.h"
00106 #include "pm_uc3l.h"
00107 #elif UC3C
00108
00109
00110
00111 #include "pm_uc3c.h"
00112 #include "scif_uc3c.h"
00113 #else
00114 #include "pm.h"
00115 #endif
00116
00117
00120
00121 #if BOARD == EVK1100
00122 #define EXAMPLE_GCLK_ID 0
00123 #define EXAMPLE_GCLK_PIN AVR32_PM_GCLK_0_1_PIN
00124 #define EXAMPLE_GCLK_FUNCTION AVR32_PM_GCLK_0_1_FUNCTION
00125 #elif BOARD == EVK1101
00126 #define EXAMPLE_GCLK_ID 2
00127 #define EXAMPLE_GCLK_PIN AVR32_PM_GCLK_2_PIN
00128 #define EXAMPLE_GCLK_FUNCTION AVR32_PM_GCLK_2_FUNCTION
00129 #elif BOARD == EVK1104
00130 #define EXAMPLE_GCLK_ID 1
00131 #define EXAMPLE_GCLK_PIN AVR32_PM_GCLK_1_0_PIN
00132 #define EXAMPLE_GCLK_FUNCTION AVR32_PM_GCLK_1_0_FUNCTION
00133 #elif BOARD == STK600_RCUC3L0
00134 #define EXAMPLE_GCLK_ID AVR32_SCIF_GCLK_DFLL0_SSG
00135 #define EXAMPLE_GCLK_PIN AVR32_SCIF_GCLK_1_0_PIN // Mapped on STK600.PORTA.PA6
00136 #define EXAMPLE_GCLK_FUNCTION AVR32_SCIF_GCLK_1_0_FUNCTION
00137 #elif BOARD == UC3C_EK
00138 #define EXAMPLE_GCLK_ID AVR32_SCIF_GCLK_GCLK9
00139 #define EXAMPLE_GCLK_PIN AVR32_SCIF_GCLK_0_2_PIN
00140 #define EXAMPLE_GCLK_FUNCTION AVR32_SCIF_GCLK_0_2_FUNCTION
00141 #endif
00142
00143 #if !defined(EXAMPLE_GCLK_ID) || \
00144 !defined(EXAMPLE_GCLK_PIN) || \
00145 !defined(EXAMPLE_GCLK_FUNCTION)
00146 # error The generic clock configuration to use in this example is missing.
00147 #endif
00149
00150
00151
00152 static void local_switch_to_osc0(volatile avr32_pm_t* pm)
00153 {
00154 #if ( BOARD == STK600_RCUC3L0 ) || ( BOARD == UC3C_EK )
00155
00156
00157
00158
00159 scif_configure_osc_crystalmode(SCIF_OSC0, FOSC0);
00160
00161 scif_enable_osc(SCIF_OSC0, OSC0_STARTUP, true);
00162
00163 pm_set_mclk_source(PM_CLK_SRC_OSC0);
00164 #else
00165
00166 pm_enable_osc0_crystal(pm, FOSC0);
00167
00168 pm_enable_clk0(pm, OSC0_STARTUP);
00169
00170 pm_switch_to_clock(pm, AVR32_PM_MCSEL_OSC0);
00171 #endif
00172
00173 }
00174
00175
00176
00177
00178
00179
00180
00181 static void local_enable_gclk_on_gpio(volatile avr32_pm_t* pm)
00182 {
00183 int gc = EXAMPLE_GCLK_ID;
00184
00185 #if ( BOARD == STK600_RCUC3L0 ) || ( BOARD == UC3C_EK )
00186
00187
00188
00189 scif_gc_setup(gc, SCIF_GCCTRL_OSC0, AVR32_SCIF_GC_NO_DIV_CLOCK, 0);
00190
00191
00192 scif_gc_enable(gc);
00193 #else
00194
00195 pm_gc_setup(pm, gc, AVR32_GC_USES_OSC, AVR32_GC_USES_OSC0, AVR32_GC_NO_DIV_CLOCK, 0);
00196
00197
00198 pm_gc_enable(pm,gc);
00199 #endif
00200
00201
00202 gpio_enable_module_pin(EXAMPLE_GCLK_PIN, EXAMPLE_GCLK_FUNCTION);
00203
00204
00205
00206
00207
00208 }
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220 int main(void)
00221 {
00222 volatile avr32_pm_t* pm = &AVR32_PM;
00223
00224
00225
00226
00227
00228
00229 local_switch_to_osc0(pm);
00230
00231
00232
00233
00234 local_enable_gclk_on_gpio(pm);
00235
00236
00237
00238
00239
00240 AVR32_INTC.ipr[0];
00241
00242
00243 SLEEP(AVR32_PM_SMODE_FROZEN);
00244
00245 while(1);
00246 }