/*! \brief Main function. Execution starts here. */ int main(void) { //Initialize interrupt controller irq_initialize_vectors(); cpu_irq_enable(); // Initialize sleep manager sleepmgr_init(); // Initialize clock tree sysclk_init(); // Initialize hardware board resources board_init(); // Initialize user interface ui_init(); ui_powerdown(); // Sanity check about Silicon revision Vs Firmware build // for Silicon revision A, firmware should be specific if ((!firmware_rev_a) && (nvm_read_device_rev()==0)) { ui_si_revision_error(); while(ui_button()!=1); while(ui_button()!=2); while(ui_button()!=4); while(ui_button()!=8); } // Initialize DATA Flash at45dbx_init(); // Initialize ADC for on-board sensors adc_sensors_init(); // Initialize USB HID report protocol usb_hid_com_init(); // Start USB stack main_build_usb_serial_number(); udc_start(); // The main loop manages only the power mode // because everything else is managed by interrupt. // The USB Start of Frame event manages internal tick events for // on-board sensor updates as well as LCD display update. while (true) { if (main_b_msc_enable) { if (!udi_msc_process_trans()) { sleepmgr_enter_sleep(); } } else { sleepmgr_enter_sleep(); } if (usb_hid_com_is_start_dfu()) { main_start_dfu_session(); } } }
int main (void) { sysclk_init(); board_init(); pmic_init(); gfx_mono_init(); adc_sensors_init(); // Enable display backlight gpio_set_pin_high(NHD_C12832A1Z_BACKLIGHT); cpu_irq_enable(); while(true){ if(state==1){ start_game(); }else if(state==2){ tc_enable(&TCC0); tc_set_overflow_interrupt_callback(&TCC0, sun_count); tc_set_wgm(&TCC0, TC_WG_NORMAL); tc_write_period(&TCC0, 13500); tc_set_overflow_interrupt_level(&TCC0, TC_INT_LVL_LO); tc_write_clock_source(&TCC0, TC_CLKSEL_DIV256_gc); tc_enable(&TCC1); tc_set_overflow_interrupt_callback(&TCC1, button_press); tc_set_wgm(&TCC1, TC_WG_NORMAL); tc_write_period(&TCC1, 62500); tc_set_overflow_interrupt_level(&TCC1, TC_INT_LVL_LO); tc_write_clock_source(&TCC1, TC_CLKSEL_DIV8_gc); gfx_mono_draw_string("SUN: 0", 0, 0, &sysfont); gfx_mono_draw_string(">", 0, cursor_position, &sysfont); gfx_mono_draw_string("Score: 0", 63, 0, &sysfont); randomPeta(); char* score_string = NULL; uint16_t old_score = 0; for(j = 0; j <= 70; j++){ if(sun_value > 10){ lightsensor_measure(); while (!lightsensor_data_is_ready()) { // Wait until the conversion is complete } if(lightsensor_get_raw_value() > 250){ sun_value -= 10; sunBurst(); gfx_mono_draw_filled_rect(12,8,114,24,GFX_PIXEL_CLR); } } if(score > old_score){ sprintf(score_string, "%3d", score); gfx_mono_draw_string(score_string, 100, 0, &sysfont); old_score = score; } if(lose){ state=3; break; }else if(zombie==0){ state=4; break; } tampilkanPeta(); tampilkanTembak(); delay_ms(1000); } }else if(state==3){ cpu_irq_disable(); gfx_mono_draw_filled_rect(0,0,128,32,GFX_PIXEL_CLR); while(true){ gfx_mono_draw_string("GAME OVER",36,8,&sysfont) ; gfx_mono_draw_string("You Lose",39,20,&sysfont) ; } }else if(state==4){ cpu_irq_disable(); gfx_mono_draw_filled_rect(0,0,128,32,GFX_PIXEL_CLR); while(true){ gfx_mono_draw_string("GAME OVER",36,2,&sysfont) ; gfx_mono_draw_string("You Win",42,12,&sysfont) ; gfx_mono_draw_string("Score = ",30,22,&sysfont) ; char* score_string = NULL; sprintf(score_string, "%3d", score); gfx_mono_draw_string(score_string, 79, 22, &sysfont); } } } }
/** * \brief Main function. * * Initializes the board and reads out the production date stored in EEPROM and * set timezone from EEPROM if it is set. If it is not set it will open the * timezone selector to select the local timezone. It then runs the menu system * in an infinite while loop. */ int main(void) { uint8_t menu_status; struct keyboard_event input; uint32_t rtc_timestamp; sysclk_init(); board_init(); pmic_init(); gfx_mono_init(); touch_init(); adc_sensors_init(); // Enable display backlight gpio_set_pin_high(NHD_C12832A1Z_BACKLIGHT); // Workaround for known issue: Enable RTC32 sysclk sysclk_enable_module(SYSCLK_PORT_GEN, SYSCLK_RTC); while (RTC32.SYNCCTRL & RTC32_SYNCBUSY_bm) { // Wait for RTC32 sysclk to become stable } // If we have battery power and RTC is running, don't initialize RTC32 if (rtc_vbat_system_check(false) != VBAT_STATUS_OK) { rtc_init(); // Set current time to after production date rtc_timestamp = production_date_get_timestamp() + 1; rtc_set_time(rtc_timestamp); } // Get current time rtc_timestamp = rtc_get_time(); // Make sure RTC has not been set to a too early date . if (rtc_timestamp < FIRST_POSSIBLE_TIMESTAMP) { // Set time to 01.01.2011 00:00:00 rtc_set_time(FIRST_POSSIBLE_TIMESTAMP); } // Initialize USB CDC class cdc_start(); cpu_irq_enable(); // Display a splash screen showing button functions button_splash(); // Set timezone from EEPROM or to a default value timezone_init(); /* Main loop. Read keyboard status and pass input to menu system. * When an element has been selected in the menu, it will return the * index of the element that should be run. This can be an application * or another menu. */ while (true) { // (re)initialize menu system gfx_mono_menu_init(&main_menu); do { do { keyboard_get_key_state(&input); // Wait for key release } while (input.type != KEYBOARD_RELEASE); // Send key to menu system menu_status = gfx_mono_menu_process_key(&main_menu, input.keycode); // Wait for something useful to happen in the menu system } while (menu_status == GFX_MONO_MENU_EVENT_IDLE); switch (menu_status) { case 0: ntc_sensor_application(); break; case 1: lightsensor_application(); break; case 2: production_date_application(); break; case 3: date_time_application(); break; case 4: // Toggle LCD Backlight gpio_toggle_pin(NHD_C12832A1Z_BACKLIGHT); break; case GFX_MONO_MENU_EVENT_EXIT: // Fall trough to default and show button splash default: button_splash(); break; }; } }