00001
00095 #include <avr32/io.h>
00096 #if __GNUC__
00097 # include "intc.h"
00098 #endif
00099 #include "pdca.h"
00100 #include "usart.h"
00101 #include "gpio.h"
00102 #include "board.h"
00103 #include "power_clocks_lib.h"
00104
00105
00106 #if BOARD == EVK1100
00107 # define EXAMPLE_USART (&AVR32_USART1)
00108 # define EXAMPLE_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN
00109 # define EXAMPLE_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION
00110 # define EXAMPLE_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN
00111 # define EXAMPLE_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION
00112 # define AVR32_PDCA_PID_USART_TX AVR32_PDCA_PID_USART1_TX
00113 # define EXAMPLE_TARGET_PBACLK_FREQ_HZ FOSC0 // PBA clock target frequency, in Hz
00114 #elif BOARD == EVK1101
00115 # define EXAMPLE_USART (&AVR32_USART1)
00116 # define EXAMPLE_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN
00117 # define EXAMPLE_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION
00118 # define EXAMPLE_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN
00119 # define EXAMPLE_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION
00120 # define AVR32_PDCA_PID_USART_TX AVR32_PDCA_PID_USART1_TX
00121 # define EXAMPLE_TARGET_PBACLK_FREQ_HZ FOSC0 // PBA clock target frequency, in Hz
00122 #elif BOARD == UC3C_EK
00123 # define EXAMPLE_USART (&AVR32_USART2)
00124 # define EXAMPLE_USART_RX_PIN AVR32_USART2_RXD_0_1_PIN
00125 # define EXAMPLE_USART_RX_FUNCTION AVR32_USART2_RXD_0_1_FUNCTION
00126 # define EXAMPLE_USART_TX_PIN AVR32_USART2_TXD_0_1_PIN
00127 # define EXAMPLE_USART_TX_FUNCTION AVR32_USART2_TXD_0_1_FUNCTION
00128 # define AVR32_PDCA_PID_USART_TX AVR32_PDCA_PID_USART2_TX
00129 # define EXAMPLE_TARGET_PBACLK_FREQ_HZ FOSC0 // PBA clock target frequency, in Hz
00130 #elif BOARD == EVK1104
00131 # define EXAMPLE_USART (&AVR32_USART1)
00132 # define EXAMPLE_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN
00133 # define EXAMPLE_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION
00134 # define EXAMPLE_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN
00135 # define EXAMPLE_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION
00136 # define AVR32_PDCA_PID_USART_TX AVR32_PDCA_PID_USART1_TX
00137 # define EXAMPLE_TARGET_PBACLK_FREQ_HZ FOSC0 // PBA clock target frequency, in Hz
00138 #elif BOARD == EVK1105
00139 # define EXAMPLE_USART (&AVR32_USART0)
00140 # define EXAMPLE_USART_RX_PIN AVR32_USART0_RXD_0_0_PIN
00141 # define EXAMPLE_USART_RX_FUNCTION AVR32_USART0_RXD_0_0_FUNCTION
00142 # define EXAMPLE_USART_TX_PIN AVR32_USART0_TXD_0_0_PIN
00143 # define EXAMPLE_USART_TX_FUNCTION AVR32_USART0_TXD_0_0_FUNCTION
00144 # define AVR32_PDCA_PID_USART_TX AVR32_PDCA_PID_USART0_TX
00145 # define EXAMPLE_TARGET_PBACLK_FREQ_HZ 12000000 // PBA clock target frequency, in Hz
00146 #elif BOARD == STK600_RCUC3L0
00147 # define EXAMPLE_USART (&AVR32_USART1)
00148 # define EXAMPLE_USART_RX_PIN AVR32_USART1_RXD_0_1_PIN
00149 # define EXAMPLE_USART_RX_FUNCTION AVR32_USART1_RXD_0_1_FUNCTION
00150
00151 # define EXAMPLE_USART_TX_PIN AVR32_USART1_TXD_0_1_PIN
00152 # define EXAMPLE_USART_TX_FUNCTION AVR32_USART1_TXD_0_1_FUNCTION
00153
00154 # define AVR32_PDCA_PID_USART_TX AVR32_PDCA_PID_USART1_TX
00155 # define EXAMPLE_TARGET_PBACLK_FREQ_HZ FOSC0 // PBA clock target frequency, in Hz
00156 #elif BOARD == UC3L_EK
00157 # define EXAMPLE_USART (&AVR32_USART3)
00158 # define EXAMPLE_USART_RX_PIN AVR32_USART3_RXD_0_0_PIN
00159 # define EXAMPLE_USART_RX_FUNCTION AVR32_USART3_RXD_0_0_FUNCTION
00160 # define EXAMPLE_USART_TX_PIN AVR32_USART3_TXD_0_0_PIN
00161 # define EXAMPLE_USART_TX_FUNCTION AVR32_USART3_TXD_0_0_FUNCTION
00162 # define AVR32_PDCA_PID_USART_TX AVR32_PDCA_PID_USART3_TX
00163 # define EXAMPLE_TARGET_DFLL_FREQ_HZ 96000000 // DFLL target frequency, in Hz
00164 # define EXAMPLE_TARGET_MCUCLK_FREQ_HZ 12000000 // MCU clock target frequency, in Hz
00165 # define EXAMPLE_TARGET_PBACLK_FREQ_HZ 12000000 // PBA clock target frequency, in Hz
00166
00168
00169 static scif_gclk_opt_t gc_dfllif_ref_opt = { SCIF_GCCTRL_SLOWCLOCK, 0, OFF };
00170 static pcl_freq_param_t pcl_dfll_freq_param =
00171 {
00172 .main_clk_src = PCL_MC_DFLL0,
00173 .cpu_f = EXAMPLE_TARGET_MCUCLK_FREQ_HZ,
00174 .pba_f = EXAMPLE_TARGET_PBACLK_FREQ_HZ,
00175 .pbb_f = EXAMPLE_TARGET_PBACLK_FREQ_HZ,
00176 .dfll_f = EXAMPLE_TARGET_DFLL_FREQ_HZ,
00177 .pextra_params = &gc_dfllif_ref_opt
00178 };
00180 #endif
00181
00182 #if !defined(EXAMPLE_USART) || \
00183 !defined(EXAMPLE_USART_RX_PIN) || \
00184 !defined(EXAMPLE_USART_RX_FUNCTION) || \
00185 !defined(EXAMPLE_USART_TX_PIN) || \
00186 !defined(EXAMPLE_USART_TX_FUNCTION) || \
00187 !defined(AVR32_PDCA_PID_USART_TX)
00188 # error The PDCA configuration to use in this example is missing.
00189 #endif
00190
00191
00193 #define PDCA_CHANNEL_USART_EXAMPLE 0
00194
00196 volatile int bool_anim;
00197
00199 const char ascii_anim1[] =
00200 #include "ascii_anim1.h"
00201 ;
00202
00204 const char ascii_anim2[] =
00205 #include "ascii_anim2.h"
00206 ;
00207
00208
00215 #if __GNUC__
00216 __attribute__((__interrupt__))
00217 #elif __ICCAVR32__
00218 #if ((__AT32UC3L016__ || __AT32UC3L016T__ ||\
00219 __AT32UC3L032__ || __AT32UC3L032T__ ||\
00220 __AT32UC3L064__ || __AT32UC3L064T__ ||\
00221 __AT32UC3C0512C__ || __AT32UC3C1512C__ ))
00222 #pragma handler = AVR32_PDCA_IRQ_GROUP0, 0
00223 #else
00224 #pragma handler = AVR32_PDCA_IRQ_GROUP, 0
00225 #endif
00226 __interrupt
00227 #endif
00228 static void pdca_int_handler(void)
00229 {
00230
00231 if (bool_anim == 1)
00232 {
00233
00234 pdca_reload_channel(PDCA_CHANNEL_USART_EXAMPLE, (void *)ascii_anim2, sizeof( ascii_anim2 ));
00235 bool_anim = 2;
00236 }
00237 else if (bool_anim == 2)
00238 {
00239 pdca_reload_channel(PDCA_CHANNEL_USART_EXAMPLE, (void *)ascii_anim1, sizeof( ascii_anim1 ));
00240 bool_anim = 1;
00241 }
00242 }
00243
00244
00247 void pdca_set_irq(void)
00248 {
00249 #if __GNUC__
00250
00251 Disable_global_interrupt();
00252
00253 INTC_init_interrupts();
00254
00255
00256
00257
00258
00259
00260
00261 INTC_register_interrupt( (__int_handler) &pdca_int_handler, AVR32_PDCA_IRQ_0, AVR32_INTC_INT0);
00262 #endif
00263
00264
00265 Enable_global_interrupt();
00266 }
00267
00268
00273 int usart_check_tx_status(volatile avr32_usart_t * usart)
00274 {
00275 if (usart->csr & (1<<AVR32_USART_CSR_TXEMPTY_OFFSET)) return USART_SUCCESS;
00276 else return USART_TX_BUSY;
00277 }
00278
00279
00284 int main(void)
00285 {
00286 #if BOARD == UC3L_EK
00287
00288
00289
00290 pcl_configure_clocks(&pcl_dfll_freq_param);
00291
00292
00293
00294
00295
00296 #else
00297
00298
00299
00300 pcl_switch_to_osc(PCL_OSC0, FOSC0, OSC0_STARTUP);
00301 #endif
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315 AVR32_HMATRIX.mcfg[AVR32_HMATRIX_MASTER_CPU_INSN] = 0x1;
00316
00317
00318 bool_anim=1;
00319
00320 static const gpio_map_t USART_GPIO_MAP =
00321 {
00322 {EXAMPLE_USART_RX_PIN, EXAMPLE_USART_RX_FUNCTION},
00323 {EXAMPLE_USART_TX_PIN, EXAMPLE_USART_TX_FUNCTION}
00324 };
00325
00326
00327 static const usart_options_t USART_OPTIONS =
00328 {
00329 .baudrate = 57600,
00330 .charlength = 8,
00331 .paritytype = USART_NO_PARITY,
00332 .stopbits = USART_1_STOPBIT,
00333 .channelmode = USART_NORMAL_CHMODE,
00334 };
00335
00336
00337 gpio_enable_module(USART_GPIO_MAP,
00338 sizeof(USART_GPIO_MAP) / sizeof(USART_GPIO_MAP[0]));
00339
00340
00341 usart_init_rs232(EXAMPLE_USART, &USART_OPTIONS, EXAMPLE_TARGET_PBACLK_FREQ_HZ);
00342
00343 usart_write_line(EXAMPLE_USART, "PDCA Example.\n");
00344
00345
00346 static const pdca_channel_options_t PDCA_OPTIONS =
00347 {
00348 .addr = (void *)ascii_anim1,
00349 .pid = AVR32_PDCA_PID_USART_TX,
00350 .size = sizeof(ascii_anim1),
00351 .r_addr = NULL,
00352 .r_size = 0,
00353 .transfer_size = PDCA_TRANSFER_SIZE_BYTE
00354 };
00355
00356
00357 pdca_init_channel(PDCA_CHANNEL_USART_EXAMPLE, &PDCA_OPTIONS);
00358
00359
00360 pdca_set_irq();
00361
00362
00363
00364 pdca_enable_interrupt_reload_counter_zero(PDCA_CHANNEL_USART_EXAMPLE);
00365
00366
00367 pdca_enable(PDCA_CHANNEL_USART_EXAMPLE);
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377 while(1)
00378 {
00379
00380
00381
00382 AVR32_INTC.ipr[0];
00383
00384
00385 SLEEP(AVR32_PM_SMODE_IDLE);
00386
00387
00388 }
00389 }