/*---------------------------------------------------------------------------------------------------------*/ int main(void) { /* Unlock protected registers */ SYS_UnlockReg(); /* Init System, peripheral clock and multi-function I/O */ SYS_Init(); /* Init UART0 for printf */ UART0_Init(); printf("\n\nCPU @ %d Hz\n", SystemCoreClock); printf("+-------------------------------------------------------+\n"); printf("| GPIO Power-Down and Wake-up by PB.3 Sample Code |\n"); printf("+-------------------------------------------------------+\n\n"); /* Configure PB.3 as Input mode and enable interrupt by rising edge trigger */ GPIO_SetMode(PB, BIT3, GPIO_PMD_INPUT); GPIO_EnableInt(PB, 3, GPIO_INT_RISING); NVIC_EnableIRQ(GPAB_IRQn); /* Waiting for PB.3 rising-edge interrupt event */ while(1) { printf("Enter to Power-Down ......\n"); PowerDownFunction(); UART_WAIT_TX_EMPTY(UART0); printf("System waken-up done.\n\n"); } }
/*---------------------------------------------------------------------------------------------------------*/ int main(void) { /* Unlock protected registers */ SYS_UnlockReg(); /* Init System, peripheral clock and multi-function I/O */ SYS_Init(); /* Lock protected registers */ SYS_LockReg(); /* Init UART0 for printf */ UART0_Init(); printf("\n\nCPU @ %d Hz\n", SystemCoreClock); printf("+-------------------------------------------------------+\n"); printf("| GPIO Power-Down and Wake-up by PB.3 Sample Code |\n"); printf("+-------------------------------------------------------+\n\n"); /* Configure PB.3 as Input mode and enable interrupt by rising edge trigger */ PB->MODE = (PB->MODE & (~GPIO_MODE_MODE3_Msk)) | (GPIO_MODE_INPUT << GPIO_MODE_MODE3_Pos); PB->INTTYPE |= (GPIO_INTTYPE_EDGE << GPIO_INTTYPE_TYPE3_Pos); PB->INTEN |= GPIO_INTEN_RHIEN3_Msk; NVIC_EnableIRQ(GPB_IRQn); /* Enable interrupt de-bounce function and select de-bounce sampling cycle time is 1024 clocks of LIRC clock */ GPIO->DBCTL = (GPIO_DBCTL_ICLK_ON | GPIO_DBCTL_DBCLKSRC_LIRC | GPIO_DBCTL_DBCLKSEL_1024); PB->DBEN |= BIT3; /* Unlock protected registers before entering Power-down mode */ SYS_UnlockReg(); /* Waiting for PB.3 rising-edge interrupt event */ while(1) { printf("Enter to Power-Down ......\n"); /* Enter to Power-down mode */ PowerDownFunction(); printf("System waken-up done.\n\n"); } }
/*---------------------------------------------------------------------------------------------------------*/ int main(void) { /* Unlock protected registers */ SYS_UnlockReg(); /* Init System, peripheral clock and multi-function I/O */ SYS_Init(); /* Lock protected registers */ SYS_LockReg(); /* Init UART0 for printf */ UART0_Init(); printf("\n\nCPU @ %d Hz\n", SystemCoreClock); printf("+-------------------------------------------------------+\n"); printf("| GPIO Power-Down and Wake-up by PB.3 Sample Code |\n"); printf("+-------------------------------------------------------+\n\n"); /* Configure PB.3 as Input mode and enable interrupt by rising edge trigger */ GPIO_SetMode(PB, BIT3, GPIO_MODE_INPUT); GPIO_EnableInt(PB, 3, GPIO_INT_RISING); NVIC_EnableIRQ(GPB_IRQn); /* Enable interrupt de-bounce function and select de-bounce sampling cycle time is 1024 clocks of LIRC clock */ GPIO_SET_DEBOUNCE_TIME(GPIO_DBCTL_DBCLKSRC_LIRC, GPIO_DBCTL_DBCLKSEL_1024); GPIO_ENABLE_DEBOUNCE(PB, BIT3); /* Unlock protected registers before entering Power-down mode */ SYS_UnlockReg(); /* Waiting for PB.3 rising-edge interrupt event */ while(1) { printf("Enter to Power-Down ......\n"); /* Enter to Power-down mode */ PowerDownFunction(); printf("System waken-up done.\n\n"); } }
/*---------------------------------------------------------------------------------------------------------*/ int32_t main (void) { /* Init System, peripheral clock and multi-function I/O */ SYS_Init(); /* Init UART for printf */ UART_Init(); printf("\n\nCPU @ %dHz\n", SystemCoreClock); printf("+----------------------------------------+\n"); printf("| Mini58 System Driver Sample Code |\n"); printf("+----------------------------------------+\n"); /* Unlock protected registers before setting Brown-out detector function and Power-down mode */ SYS_UnlockReg(); /* Output selected clock to CKO, CKO Clock = HCLK / 2^(1 + 1) */ CLK_EnableCKO(CLK_CLKSEL2_CLKOSEL_HCLK, 1, 0); /* Enable Brown-out detector function */ SYS_ENABLE_BOD(); /* Set Brown-out detector voltage level as 2.7V */ SYS_SET_BOD_LEVEL(SYS_BODCTL_BODVL_2_7V); /* Enable Brown-out detector interrupt function */ SYS_DISABLE_BOD_RST(); /* Enable Brown-out detector and Power-down wake-up interrupt */ NVIC_EnableIRQ(BOD_IRQn); NVIC_EnableIRQ(PDWU_IRQn); printf("System enter to Power-down mode.\n"); printf("System wake-up if VDD voltage is lower than 2.7V.\n\n"); /* Enter to Power-down mode */ PowerDownFunction(); /* Wait for Power-down mode wake-up interrupt happen */ while(1); }
/*---------------------------------------------------------------------------------------------------------*/ void RTC_AlarmAndWakeupTest(void) { printf("# Set RTC Current Date/Time is: 2012/07/10 13:10:55. \n"); printf("# Set RTC Alarm Date/Time is: 2012/07/10 13:11:07. \n"); printf("# System enter to Power Down on RTC Date/Time 2012/07/10 13:10:55; \n"); printf(" and waken-up on RTC Date/Time 2012/07/10 13:11:07. \n"); printf("Press any key to start test ... \n\n"); getchar(); /* Wait RTC Register Access Enable */ RTC_WaitAccessEnable(); /* Set RTC Current Date/Time */ RTC_SetCurrentCalendar(12, 7, 10); RTC_SetCurrentTime(13, 10, 55); _RTC_SET_DWR(RTC_DWR_TUESDAY); /* Set RTC Alarm Date/Time */ RTC_SetAlarmCalendar(12, 7, 10); RTC_SetAlarmTime(13, 11, 7); /* Wait RTC Register Access Enable */ RTC_WaitAccessEnable(); /* Check if RTC Current Date/Time are ok except [SEC] data */ if ((_RTC_GET_YEAR() != 12) || (_RTC_GET_MON() != 7) || (_RTC_GET_DAY() != 10) || (_RTC_GET_HOUR() != 13) || (_RTC_GET_MIN() != 10)) { printf("Set RTC Current Date/Time fail. \n\n"); return ; } /* Check if RTC current Date/Time are ok */ if ((_RTC_GET_ALARM_YEAR() != 12) || (_RTC_GET_ALARM_MON() != 7) || (_RTC_GET_ALARM_DAY() != 10) || (_RTC_GET_ALARM_HOUR() != 13) || (_RTC_GET_ALARM_MIN() != 11) || (_RTC_GET_ALARM_SEC() != 7)) { printf("Set RTC Alarm Date/Time fail. \n\n"); return ; } /* Enable RTC NVIC */ NVIC_EnableIRQ(RTC_IRQn); /* Enable RTC Alarm Interrupt */ _RTC_ALARM_INT_ENABLE(); printf("Cunnret Date/Time is 2012/07/10 13:10:55 and system enter to Power Down. \n"); g_u8IsRTCAlarmINT = 0; /* System enter to Power Down */ PowerDownFunction(); while (g_u8IsRTCAlarmINT == 0); printf("System waken-up and current Date/Time is %d/%02d/%02d %02d:%02d:%02d. \n", (2000+_RTC_GET_YEAR()), _RTC_GET_MON(), _RTC_GET_DAY(), _RTC_GET_HOUR(), _RTC_GET_MIN(), _RTC_GET_SEC()); /* Disable RTC NVIC */ NVIC_DisableIRQ(RTC_IRQn); /* Disable RTC Alarm Interrupt */ _RTC_ALARM_INT_DISABLE(); printf("\n"); }
/*---------------------------------------------------------------------------------------------------------*/ int main(void) { volatile uint32_t u32InitCount; /* Unlock protected registers */ SYS_UnlockReg(); /* Init System, peripheral clock and multi-function I/O */ SYS_Init(); /* Lock protected registers */ SYS_LockReg(); /* Init UART0 for printf */ UART0_Init(); printf("\n\nCPU @ %d Hz\n", SystemCoreClock); printf("+-------------------------------------------------+\n"); printf("| Timer0 Power-down and Wake-up Sample Code |\n"); printf("+-------------------------------------------------+\n\n"); printf("# Timer Settings:\n"); printf(" Timer0: Clock source is LIRC(10 kHz); Toggle-output mode and frequency is 1 Hz; Enable interrupt and wake-up.\n"); printf("# System will enter to Power-down mode while Timer0 interrupt count is reaching 3;\n"); printf(" And be waken-up while Timer0 interrupt count is reaching 4.\n\n"); /* To program PWRCON register, it needs to disable register protection first. */ SYS_UnlockReg(); /* Open Timer0 frequency to 1 Hz in toggle-output mode */ TIMER_Open(TIMER0, TIMER_TOGGLE_MODE, 1); /* Enable Timer0 interrupt and wake-up function */ TIMER_EnableInt(TIMER0); TIMER_EnableWakeup(TIMER0); /* Enable Timer0 NVIC */ NVIC_EnableIRQ(TMR0_IRQn); /* Start Timer0 counting */ TIMER_Start(TIMER0); u32InitCount = g_u8IsTMR0WakeupFlag = g_au32TMRINTCount[0] = 0; while(g_au32TMRINTCount[0] < 10) { if(g_au32TMRINTCount[0] != u32InitCount) { printf("Timer0 interrupt count - %d\n", g_au32TMRINTCount[0]); if(g_au32TMRINTCount[0] == 3) { PowerDownFunction(); /* Check if Timer0 time-out interrupt and wake-up flag occurred */ while(1) { if(((CLK->PWRCON & CLK_PWRCON_PD_WU_STS_Msk) == CLK_PWRCON_PD_WU_STS_Msk) && (g_u8IsTMR0WakeupFlag == 1)) break; } printf("System has been waken-up done. (Timer0 interrupt count is %d)\n\n", g_au32TMRINTCount[0]); } u32InitCount = g_au32TMRINTCount[0]; } } /* Stop Timer0 counting */ TIMER_Stop(TIMER0); printf("*** PASS ***\n"); while(1); }