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