static int clock_tests(int argc, cmd_args *argv) { if (argc < 2) { printf("not enough arguments:\n"); printf("%s <clock-name>\n", argv[0].str); printf("%s ?\n", argv[0].str); goto out; } if(argv[1].str[0] == '?') print_clock_list(); else clock_measure(argv[1].str); out: return 0; }
/** * \brief main function */ int main(void) { static const gpio_map_t USART_GPIO_MAP = { {EXAMPLE_USART_RX_PIN, EXAMPLE_USART_RX_FUNCTION}, {EXAMPLE_USART_TX_PIN, EXAMPLE_USART_TX_FUNCTION} }; // USART options static const usart_options_t USART_OPTIONS = { .baudrate = 57600, .charlength = 8, .paritytype = USART_NO_PARITY, .stopbits = USART_1_STOPBIT, .channelmode = 0 }; #if BOARD == UC3L_EK scif_osc32_opt_t opt_osc32 = { // 2-pin Crystal and high current mode SCIF_OSC_MODE_2PIN_CRYSTAL_HICUR, // oscillator startup time AVR32_SCIF_OSCCTRL32_STARTUP_0_RCOSC, /* * select the alternate xin32_2 and xout32_2 for the * 32kHz crystal oscillator */ true, // disable the 1kHz output false, // enable the 32kHz output true }; #else scif_osc32_opt_t opt_osc32 = { // 2-pin crystal mode .mode = SCIF_OSC_MODE_2PIN_CRYSTAL, // startup time .startup = AVR32_SCIF_OSCCTRL32_STARTUP_0_RCOSC }; #endif // Set system clock sysclk_init(); // Start OSC_32KHZ scif_start_osc32(&opt_osc32,true); // Assign GPIO pins to USART0. gpio_enable_module(USART_GPIO_MAP, sizeof(USART_GPIO_MAP) / sizeof(USART_GPIO_MAP[0])); // Initialize USART in RS232 mode usart_init_rs232(EXAMPLE_USART, &USART_OPTIONS, FPBA); // Welcome message usart_write_line(EXAMPLE_USART, "\x1B[2J\x1B[H\r\nATMEL\r\n"); usart_write_line(EXAMPLE_USART, "AVR UC3 - FREQM example\r\n"); #ifndef INTERRUPT_MODE_SUPPORT uint32_t result; status_code_t status; uint32_t duration = 128; usart_write_line(EXAMPLE_USART, "/*** Normal Mode ***/\r\n"); freqm_enable(); status = freqm_write_config(AVR32_FREQM_REF_OSC32, AVR32_FREQM_CPU, duration); if (status == ERR_TIMEOUT) { usart_write_line(EXAMPLE_USART, "FREQM Module Config Fail!"); while(true); } result = clock_measure(); usart_write_line(EXAMPLE_USART, "CPU Clock:\r\n"); display_result(OSC32K_FREQ_HZ, duration, result); usart_write_line(EXAMPLE_USART, "HSB Clock:\r\n"); freqm_set_clock_source(AVR32_FREQM_HSB); result = clock_measure(); display_result(OSC32K_FREQ_HZ, duration, result); usart_write_line(EXAMPLE_USART, "PBA Clock:\r\n"); freqm_set_clock_source(AVR32_FREQM_PBA); result = clock_measure(); display_result(OSC32K_FREQ_HZ, duration, result); usart_write_line(EXAMPLE_USART, "PBB Clock:\r\n"); freqm_set_clock_source(AVR32_FREQM_PBB); result = clock_measure(); display_result(OSC32K_FREQ_HZ, duration, result); pm_set_clk_domain_div(PM_CLK_DOMAIN_3,PM_CKSEL_DIVRATIO_16); usart_write_line(EXAMPLE_USART, "PBB Clock(Main clock/16):\r\n"); freqm_set_clock_source(AVR32_FREQM_PBB); result = clock_measure(); display_result(OSC32K_FREQ_HZ, duration, result); usart_write_line(EXAMPLE_USART, "Test Complete!\r\n"); while (true) { /* * Force a NOP instruction for an eventual placement of a debug * session breakpoint. */ asm("nop\n"); } #else INTC_init_interrupts(); INTC_register_interrupt(&freqm_int_handler, AVR32_FREQM_IRQ, AVR32_INTC_INT0); freqm_enable_measurement_done_int(); cpu_irq_enable(); usart_write_line(EXAMPLE_USART, "/*** Interrupt Mode ***/\r\n"); uint32_t duration = 128; uint32_t result; status_code_t status; freqm_enable(); status = freqm_write_config(AVR32_FREQM_REF_OSC32, AVR32_FREQM_CPU, duration); if (status == ERR_TIMEOUT) { usart_write_line(EXAMPLE_USART, "FREQM Module Config Fail!"); while(true); } freqm_start(); while(true) { if(flag == 0) { result =(uint32_t)(((F32)value / duration) * OSC32K_FREQ_HZ); usart_write_line(EXAMPLE_USART, "CPU Clock:\r\n"); display_result(OSC32K_FREQ_HZ, duration, result); usart_write_line(EXAMPLE_USART, "Test Complete!\r\n"); flag = 1; } /* * Force a NOP instruction for an eventual placement of a debug * session breakpoint. */ asm("nop\n"); }; #endif return 0; }