00001
00099 #include <string.h>
00100
00101 #include "board.h"
00102 #include "print_funcs.h"
00103 #include "gpio.h"
00104 #include "power_clocks_lib.h"
00105 #include "usart.h"
00106
00109
00110 #if BOARD == EVK1100
00111 # define EXAMPLE_USART (&AVR32_USART1)
00112 # define EXAMPLE_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN
00113 # define EXAMPLE_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION
00114 # define EXAMPLE_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN
00115 # define EXAMPLE_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION
00116 # define FPBA FOSC0
00117 #elif BOARD == EVK1101
00118 # define EXAMPLE_USART (&AVR32_USART1)
00119 # define EXAMPLE_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN
00120 # define EXAMPLE_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION
00121 # define EXAMPLE_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN
00122 # define EXAMPLE_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION
00123 # define FPBA FOSC0
00124 #elif BOARD == UC3C_EK
00125 # define EXAMPLE_USART (&AVR32_USART2)
00126 # define EXAMPLE_USART_RX_PIN AVR32_USART2_RXD_0_1_PIN
00127 # define EXAMPLE_USART_RX_FUNCTION AVR32_USART2_RXD_0_1_FUNCTION
00128 # define EXAMPLE_USART_TX_PIN AVR32_USART2_TXD_0_1_PIN
00129 # define EXAMPLE_USART_TX_FUNCTION AVR32_USART2_TXD_0_1_FUNCTION
00130 # define FPBA FOSC0
00131 #elif BOARD == EVK1104
00132 # define EXAMPLE_USART (&AVR32_USART1)
00133 # define EXAMPLE_USART_RX_PIN AVR32_USART1_RXD_0_0_PIN
00134 # define EXAMPLE_USART_RX_FUNCTION AVR32_USART1_RXD_0_0_FUNCTION
00135 # define EXAMPLE_USART_TX_PIN AVR32_USART1_TXD_0_0_PIN
00136 # define EXAMPLE_USART_TX_FUNCTION AVR32_USART1_TXD_0_0_FUNCTION
00137 # define FPBA FOSC0
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 FPBA FOSC0
00145 #elif BOARD == STK600_RCUC3L0
00146 # define EXAMPLE_USART (&AVR32_USART1)
00147 # define EXAMPLE_USART_RX_PIN AVR32_USART1_RXD_0_1_PIN
00148 # define EXAMPLE_USART_RX_FUNCTION AVR32_USART1_RXD_0_1_FUNCTION
00149
00150 # define EXAMPLE_USART_TX_PIN AVR32_USART1_TXD_0_1_PIN
00151 # define EXAMPLE_USART_TX_FUNCTION AVR32_USART1_TXD_0_1_FUNCTION
00152
00153 # define FPBA FOSC0
00154 #elif BOARD == UC3L_EK
00155 # define EXAMPLE_USART (&AVR32_USART3)
00156 # define EXAMPLE_USART_RX_PIN AVR32_USART3_RXD_0_0_PIN
00157 # define EXAMPLE_USART_RX_FUNCTION AVR32_USART3_RXD_0_0_FUNCTION
00158 # define EXAMPLE_USART_TX_PIN AVR32_USART3_TXD_0_0_PIN
00159 # define EXAMPLE_USART_TX_FUNCTION AVR32_USART3_TXD_0_0_FUNCTION
00160 # define EXAMPLE_TARGET_DFLL_FREQ_HZ 96000000 // DFLL target frequency, in Hz
00161 # define EXAMPLE_TARGET_MCUCLK_FREQ_HZ 12000000 // MCU clock target frequency, in Hz
00162 # define EXAMPLE_TARGET_PBACLK_FREQ_HZ 12000000 // PBA clock target frequency, in Hz
00163 # define FPBA EXAMPLE_TARGET_PBACLK_FREQ_HZ
00164
00166
00167 static scif_gclk_opt_t gc_dfllif_ref_opt = { SCIF_GCCTRL_SLOWCLOCK, 0, OFF };
00168 static pcl_freq_param_t pcl_dfll_freq_param =
00169 {
00170 .main_clk_src = PCL_MC_DFLL0,
00171 .cpu_f = EXAMPLE_TARGET_MCUCLK_FREQ_HZ,
00172 .pba_f = EXAMPLE_TARGET_PBACLK_FREQ_HZ,
00173 .pbb_f = EXAMPLE_TARGET_PBACLK_FREQ_HZ,
00174 .dfll_f = EXAMPLE_TARGET_DFLL_FREQ_HZ,
00175 .pextra_params = &gc_dfllif_ref_opt
00176 };
00178 #endif
00179
00180 #if !defined(EXAMPLE_USART) || \
00181 !defined(EXAMPLE_USART_RX_PIN) || \
00182 !defined(EXAMPLE_USART_RX_FUNCTION) || \
00183 !defined(EXAMPLE_USART_TX_PIN) || \
00184 !defined(EXAMPLE_USART_TX_FUNCTION)
00185 # error The USART preprocessor configuration to use in this example is missing.
00186 #endif
00187
00188
00189 #define NB_TOGGLE 512
00190
00191 volatile unsigned int ccountt0, ccountt1;
00192
00195 int toggle_led(int number_of_toggle)
00196 {
00197 unsigned int i;
00198 int result = -1;
00199
00200
00201
00202
00203 ccountt0 = Get_system_register(AVR32_COUNT);
00204
00205
00206 for(i=0; i<number_of_toggle; i++)
00207 {
00208 gpio_tgl_gpio_pin(LED0_GPIO);
00209 }
00210 ccountt1 = Get_system_register(AVR32_COUNT);
00211
00212 print(EXAMPLE_USART, " - Number of cycles: ");
00213 result = ccountt1 - ccountt0;
00214 print_ulong(EXAMPLE_USART, ccountt1 - ccountt0);
00215
00216 print(EXAMPLE_USART, "\n");
00217
00218 return result;
00219 }
00220
00221
00224 static void configure_hmatrix(int mode)
00225 {
00226
00227
00228 int i;
00229
00230 for(i=0;i<AVR32_HMATRIX_SLAVE_NUM;i++) {
00231 AVR32_HMATRIX.SCFG[i].defmstr_type = mode;
00232 }
00233 }
00234
00237 int main(void)
00238 {
00239
00240 int result;
00241
00242 static const gpio_map_t USART_GPIO_MAP =
00243 {
00244 {EXAMPLE_USART_RX_PIN, EXAMPLE_USART_RX_FUNCTION},
00245 {EXAMPLE_USART_TX_PIN, EXAMPLE_USART_TX_FUNCTION}
00246 };
00247
00248
00249 static const usart_options_t USART_OPTIONS =
00250 {
00251 .baudrate = 57600,
00252 .charlength = 8,
00253 .paritytype = USART_NO_PARITY,
00254 .stopbits = USART_1_STOPBIT,
00255 .channelmode = 0
00256 };
00257
00258 #if BOARD == UC3L_EK
00259
00260
00261
00262 pcl_configure_clocks(&pcl_dfll_freq_param);
00263
00264
00265
00266
00267
00268 #else
00269
00270
00271
00272 pcl_switch_to_osc(PCL_OSC0, FOSC0, OSC0_STARTUP);
00273 #endif
00274
00275
00276 gpio_enable_module(USART_GPIO_MAP,
00277 sizeof(USART_GPIO_MAP) / sizeof(USART_GPIO_MAP[0]));
00278
00279
00280
00281 usart_init_rs232(EXAMPLE_USART, &USART_OPTIONS, FPBA);
00282
00283 usart_write_line(EXAMPLE_USART, "\x1B[2J\x1B[H\r\nATMEL\r\n");
00284 usart_write_line(EXAMPLE_USART, "AVR UC3 - HMATRIX example\r\n\n");
00285
00286
00287
00288
00289 print(EXAMPLE_USART, "- Test 1 ----------------------------------------\n");
00290 print(EXAMPLE_USART, "------ All Slave Default Master Type are: ------\n");
00291 print(EXAMPLE_USART, " - No Default Master\n");
00292 print(EXAMPLE_USART, " - leds Toggle: ");
00293 print_ulong(EXAMPLE_USART, NB_TOGGLE);
00294 print(EXAMPLE_USART, " times\n");
00295 configure_hmatrix(AVR32_HMATRIX_DEFMSTR_TYPE_NO_DEFAULT);
00296
00297 result = toggle_led(NB_TOGGLE);
00298
00299
00300
00301
00302 print(EXAMPLE_USART, "- Test 2 ----------------------------------------\n");
00303 print(EXAMPLE_USART, "------ All Slave Default Master Type are: ------\n");
00304 print(EXAMPLE_USART, " - Last Default Master\n");
00305 print(EXAMPLE_USART, " - No Default Master\n");
00306 print(EXAMPLE_USART, " - leds Toggle: ");
00307 print_ulong(EXAMPLE_USART, NB_TOGGLE);
00308 print(EXAMPLE_USART, " times\n");
00309
00310 configure_hmatrix(AVR32_HMATRIX_DEFMSTR_TYPE_LAST_DEFAULT);
00311
00312 result -= toggle_led(NB_TOGGLE);
00313
00314 print(EXAMPLE_USART, "--------------------------------------------------\n");
00315
00316 print_ulong(EXAMPLE_USART, result);
00317 print(EXAMPLE_USART, " Cycles saved between test 1 and test 2\r\nDone!");
00318
00319
00320 SLEEP(AVR32_PM_SMODE_STATIC);
00321 while (TRUE);
00322 }
00323