int main (void) { SystemInit(); /* Initialize GPIO (sets up clock) */ gpio_init(NULL); /* Set all pin to output */ gpio_set_direction_field(LED_PINS, (uint32_t)GPIO_OUTPUT); gpio_write_pin_field(LED_PINS, (uint32_t)GPIO_HIGH); #if TIMER_INTERRUPT_EXAMPLE timer_init(QN_TIMER0, led0_link); timer_config(QN_TIMER0, TIMER_PSCAL_DIV, TIMER_COUNT_US(1000, TIMER_PSCAL_DIV)); timer_enable(QN_TIMER0, MASK_ENABLE); timer_init(QN_TIMER1, led1_link); timer_config(QN_TIMER1, TIMER_PSCAL_DIV, TIMER_COUNT_US(2000, TIMER_PSCAL_DIV)); timer_enable(QN_TIMER1, MASK_ENABLE); timer_init(QN_TIMER2, led2_link); timer_config(QN_TIMER2, 10, TIMER_COUNT_MS(3, 10)); timer_enable(QN_TIMER2, MASK_ENABLE); timer_init(QN_TIMER3, led3_link); timer_config(QN_TIMER3, 10, TIMER_COUNT_MS(4, 10)); timer_enable(QN_TIMER3, MASK_ENABLE); #endif #if TIMER_PWM_EXAMPLE //P3.5 will output pwm wave with period for 1000us and pulse for 500us timer_init(QN_TIMER0, NULL); timer_pwm_config(QN_TIMER0, TIMER_PSCAL_DIV, TIMER_COUNT_US(1000, TIMER_PSCAL_DIV), TIMER_COUNT_US(500, TIMER_PSCAL_DIV)); timer_enable(QN_TIMER0, MASK_ENABLE); //P1.1 will output pwm wave with period for 2000us and pulse for 1000us timer_init(QN_TIMER1, NULL); timer_pwm_config(QN_TIMER1, TIMER_PSCAL_DIV, TIMER_COUNT_US(2000, TIMER_PSCAL_DIV), TIMER_COUNT_US(1000, TIMER_PSCAL_DIV)); timer_enable(QN_TIMER1, MASK_ENABLE); //P2.6 will output pwm wave with period for 4ms and pulse for 2ms timer_init(QN_TIMER2, NULL); timer_pwm_config(QN_TIMER2, 10, TIMER_COUNT_MS(4, 10), TIMER_COUNT_MS(2, 10)); timer_enable(QN_TIMER2, MASK_ENABLE); //P2.3 will output pwm wave with period for 6ms and pulse for 3ms timer_init(QN_TIMER3, NULL); timer_pwm_config(QN_TIMER3, 10, TIMER_COUNT_MS(6, 10), TIMER_COUNT_MS(3, 10)); timer_enable(QN_TIMER3, MASK_ENABLE); #endif #if TIMER_CAPTURE_TIMER_MOD_EXAMPLE /* * Capture timer mode is to capture trigger event, and record the time-stamp. * * Make sure the macro TIMER0_CAP_MODE is INCAP_TIMER_MOD. * * Timer0 will capture the P3.5 rising edge, and each rising edge will trigger * the callback function, as the same time the counter value will transmit to * timer0_env.count. * * Other timers are similar to this. */ timer_init(QN_TIMER0, timer0_callback); timer_capture_config(QN_TIMER0, INCAP_TIMER_MOD, 0, 0, 0); timer_enable(QN_TIMER0, MASK_ENABLE); #endif #if TIMER_CAPTURE_COUNTER_MOD_EXAMPLE /* * Capture event mode is to calculate the time of happened specified event with * specified numbers. * * Make sure the macro TIMER0_CAP_MODE is INCAP_COUNTER_MOD. * * Timer0 will count the time during 5 times rising edge of P3.5. After that, the * callback function will be called, as the same time the time value will transmit to * timer0_env.count. * * Other timers are similar to this. */ timer_init(QN_TIMER0, timer0_callback); timer_capture_config(QN_TIMER0, INCAP_COUNTER_MOD, 100, 0, 5); timer_enable(QN_TIMER0, MASK_ENABLE); #endif #if TIMER_CAPTURE_EVENT_MOD_EXAMPLE /* * Capture conter mode is used to count the numbers of a special event during a specified period. * * Make sure the macro TIMER0_CAP_MODE is INCAP_EVENT_MOD. * * Timer0 will count the numbers of rising edge during 1000ms with P3.5, and each rising * edge will trigger the callback function, as the same time the counter value will transmit * to timer0_env.count. * * Other timers are similar to this. */ timer_init(QN_TIMER0, timer0_callback); timer_capture_config(QN_TIMER0, INCAP_EVENT_MOD, 100, TIMER_COUNT_MS(1000, 100), 0); timer_enable(QN_TIMER0, MASK_ENABLE); #endif while (1) /* Loop forever */ { } }
/* **************************************************************************************** * @brief Test gpio work status * *****************************************************************************************/ void all_gpio_test(void) { // pin mux syscon_SetPMCR0(QN_SYSCON, P00_UART0_TXD_PIN_CTRL | P01_GPIO_1_PIN_CTRL | P02_GPIO_2_PIN_CTRL | P03_GPIO_3_PIN_CTRL | P04_GPIO_4_PIN_CTRL | P05_GPIO_5_PIN_CTRL | P06_GPIO_6_PIN_CTRL | P07_GPIO_7_PIN_CTRL | P10_GPIO_8_PIN_CTRL | P11_GPIO_9_PIN_CTRL | P12_GPIO_10_PIN_CTRL | P13_GPIO_11_PIN_CTRL | P14_GPIO_12_PIN_CTRL | P15_GPIO_13_PIN_CTRL | P16_GPIO_14_PIN_CTRL | P17_GPIO_15_PIN_CTRL ); syscon_SetPMCR1(QN_SYSCON, P20_GPIO_16_PIN_CTRL | P21_GPIO_17_PIN_CTRL | P22_GPIO_18_PIN_CTRL | P23_GPIO_19_PIN_CTRL | P24_GPIO_20_PIN_CTRL | P25_GPIO_21_PIN_CTRL | P26_GPIO_22_PIN_CTRL | P27_GPIO_23_PIN_CTRL | P30_GPIO_24_PIN_CTRL | P31_GPIO_25_PIN_CTRL | P32_GPIO_26_PIN_CTRL | P33_GPIO_27_PIN_CTRL | P34_GPIO_28_PIN_CTRL | P35_GPIO_29_PIN_CTRL | P36_GPIO_30_PIN_CTRL ); // driver ability syscon_SetPDCR(QN_SYSCON, 0x0); // 0 : low driver, 1 : high driver // pin pull ( 00 : High-Z, 01 : Pull-down, 10 : Pull-up, 11 : Reserved ) syscon_SetPPCR0(QN_SYSCON, 0xAAAAAAAA); syscon_SetPPCR1(QN_SYSCON, 0xAAAAAAAA); gpio_init(gpio_interrupt_callback); gpio_set_direction_field(TEST_PIN,(uint32_t)GPIO_OUTPUT); gpio_write_pin_field(TEST_PIN,(uint32_t)GPIO_LOW); delay_5(); gpio_write_pin_field(TEST_PIN,(uint32_t)GPIO_HIGH); delay_5(); gpio_write_pin_field(TEST_PIN,(uint32_t)GPIO_LOW); delay_5(); gpio_write_pin_field(TEST_PIN,(uint32_t)GPIO_HIGH); delay_5(); gpio_write_pin_field(TEST_PIN,(uint32_t)GPIO_LOW); delay_5(); gpio_write_pin_field(TEST_PIN,(uint32_t)GPIO_HIGH); delay_5(); gpio_write_pin_field(TEST_PIN,(uint32_t)GPIO_LOW); delay_5(); gpio_write_pin_field(TEST_PIN,(uint32_t)GPIO_HIGH); delay_5(); }
int main (void) { SystemInit(); #if 0 if (0x00000004 & inp32(0x40000038)) { outp32(0x40000038, 0x80000000); } else { Led_flash(); while(1); } #endif /* Initialize GPIO */ gpio_init(cb_gpio); #if TEST_SLEEP_NORMAL == TRUE // -------------------------------------------- // sleep wakeup // -------------------------------------------- //set all pin to gpio syscon_SetPMCR0(QN_SYSCON, 0x00000000); syscon_SetPMCR1(QN_SYSCON, 0x00000000); //set all gpio input gpio_set_direction_field(GPIO_PIN_ALL, GPIO_INPUT); gpio_write_pin_field(GPIO_PIN_ALL, (uint32_t)GPIO_HIGH); // pin pull ( 00 : High-Z, 01 : Pull-down, 10 : Pull-up, 11 : Reserved ) syscon_SetPPCR0(QN_SYSCON, 0xAAAA5AAA); // SWD pull-down save 20uA syscon_SetPPCR1(QN_SYSCON, 0x2AAAAAAA); // power down BUCK needed syscon_SetIvrefX32WithMask(QN_SYSCON, SYSCON_MASK_BUCK_BYPASS|SYSCON_MASK_BUCK_DPD, MASK_ENABLE); // power down Flash syscon_SetPGCR2WithMask(QN_SYSCON, SYSCON_MASK_FLASH_VCC_EN, MASK_DISABLE); // enable dbg power down syscon_SetPGCR2WithMask(QN_SYSCON, SYSCON_MASK_DBGPMUENABLE, MASK_ENABLE); // dis sar adc buffer syscon_SetPGCR1WithMask(QN_SYSCON, SYSCON_MASK_DIS_SAR_BUF, MASK_ENABLE); Led_flash(); do { delay(10); } while (gpio_read_pin(GPIO_P14) == GPIO_HIGH); sleep_init(); wakeup_by_sleep_timer(__32K_TYPE); wakeup_by_gpio(GPIO_P15, GPIO_WKUP_BY_LOW); do { gpio_set_direction(GPIO_P01, GPIO_INPUT); //enter_sleep(SLEEP_NORMAL, WAKEUP_BY_GPIO, Led_flash); if (wakeup_from_sleeptimer) { sleep_timer_set(32000); wakeup_from_sleeptimer = 0; #if QN_32K_RCO == TRUE clock_32k_correction_enable(clock_32k_correction_cb); #endif } #if QN_32K_RCO == TRUE if (gpio_sleep_allowed() && !dev_get_bf()) #else if (gpio_sleep_allowed()) #endif enter_sleep(SLEEP_NORMAL, WAKEUP_BY_OSC_EN|WAKEUP_BY_GPIO, Led_flash); } while(1); #endif #if TEST_SLEEP_DEEP == TRUE // -------------------------------------------- // deep sleep wakeup // -------------------------------------------- //set all pin to gpio syscon_SetPMCR0(QN_SYSCON, 0x00000000); syscon_SetPMCR1(QN_SYSCON, 0x00000000); //set all gpio input gpio_set_direction_field(GPIO_PIN_ALL, (uint32_t)GPIO_INPUT); gpio_write_pin_field(GPIO_PIN_ALL, (uint32_t)GPIO_HIGH); // pin pull ( 00 : High-Z, 01 : Pull-down, 10 : Pull-up, 11 : Reserved ) syscon_SetPPCR0(QN_SYSCON, 0xAAAA5AAA); // SWD pull-down save 20uA syscon_SetPPCR1(QN_SYSCON, 0x2AAAAAAA); // power down BUCK needed syscon_SetIvrefX32WithMask(QN_SYSCON, SYSCON_MASK_BUCK_BYPASS|SYSCON_MASK_BUCK_DPD, MASK_ENABLE); // power down Flash syscon_SetPGCR2WithMask(QN_SYSCON, SYSCON_MASK_FLASH_VCC_EN, MASK_DISABLE); // enable dbg power down syscon_SetPGCR2WithMask(QN_SYSCON, SYSCON_MASK_DBGPMUENABLE, MASK_ENABLE); // dis sar adc buffer syscon_SetPGCR1WithMask(QN_SYSCON, SYSCON_MASK_DIS_SAR_BUF, MASK_ENABLE); Led_flash(); do { delay(10); } while (gpio_read_pin(GPIO_P14) == GPIO_HIGH); sleep_init(); do { gpio_set_direction(GPIO_P01, GPIO_INPUT); wakeup_by_gpio(GPIO_P15, GPIO_WKUP_BY_CHANGE); enter_sleep(SLEEP_DEEP, WAKEUP_BY_GPIO, Led_flash); } while(1); #endif #if TEST_SLEEP_CPU_CLK_OFF == TRUE // -------------------------------------------- // clock gating // -------------------------------------------- // Set timer 0 wakeup timer_init(QN_TIMER0, NULL); timer_config(QN_TIMER0, TIMER_PSCAL_DIV, TIMER_COUNT_MS(1000, TIMER_PSCAL_DIV)); timer_enable(QN_TIMER0, MASK_ENABLE); sleep_init(); do { enter_sleep(SLEEP_CPU_CLK_OFF, WAKEUP_BY_TIMER0, NULL); Led_flash(); } while(1); #endif }