/*---------------------------------------------------------------------------------------------------------*/ int main(void) { uint32_t u32IntCnts = 0; /* 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("CPU @ %d Hz\n", SystemCoreClock); printf("+------------------------------------------+\n"); printf("| WDT Time-out Interrupt Sample Code |\n"); printf("+------------------------------------------+\n\n"); printf("# WDT Settings:\n"); printf(" - Clock source is 10 kHz \n"); printf(" - Time-out interval is 2^14 * WDT clock \n"); printf(" (around 1.6384 second) \n"); printf(" - Interrupt enable \n"); printf("# System will generate a WDT time-out interrupt event after around 1.6384 second.\n"); printf(" (Use PA.0 high/low period time to check WDT time-out interval)\n\n"); /* Use PA.0 to check time-out period time */ GPIO_SetMode(PA, BIT0, GPIO_PMD_OUTPUT); PA0 = 1; PA0 = 0; /* Because of all bits can be written in WDT Control Register are write-protected; To program it needs to disable register protection first. */ SYS_UnlockReg(); /* Select WDT time-out interval to 2^14 * WDT clock then start WDT counting */ g_u8IsWDTTimeoutINT = 0; WDT_Open(WDT_TIMEOUT_2POW14, 0, FALSE, FALSE); /* Enable WDT interrupt function */ WDT_EnableInt(); /* Enable WDT NVIC */ NVIC_EnableIRQ(WDT_IRQn); while(1) { /* Check if WDT time-out interrupt occurred or not */ while(g_u8IsWDTTimeoutINT == 0); g_u8IsWDTTimeoutINT = 0; PA0 ^= 1; printf("WDT time-out interrupt occurred. INT counts: %d \r", ++u32IntCnts); } }
/*---------------------------------------------------------------------------------------------------------*/ 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(); if(WDT_GET_RESET_FLAG() == 1) { /* Use PA.0 to check time-out period time */ GPIO_SetMode(PA, BIT0, GPIO_PMD_OUTPUT); PA0 = 1; WDT_CLEAR_RESET_FLAG(); printf("\n\n*** WDT time-out reset occurred ***\n"); while(1); } printf("\n\nCPU @ %d Hz\n", SystemCoreClock); printf("+--------------------------------------+\n"); printf("| WDT Time-out Reset Sample Code |\n"); printf("+--------------------------------------+\n\n"); printf("# WDT Settings:\n"); printf(" Clock source is 10 kHz; Enable interrupt; Time-out interval is 2^14 * WDT clock.\n"); printf("# When WDT start counting, system will generate a WDT time-out interrupt after 1.6384 ~ 1.7408 s.\n"); printf(" Measure PA.0 low period to check time-out interval and do not reload WDT counter will cause system reset.\n\n"); /* Use PA.0 to check time-out period time */ GPIO_SetMode(PA, BIT0, GPIO_PMD_OUTPUT); PA0 = 1; PA0 = 0; /* Because of all bits can be written in WDT Control Register are write-protected; To program it needs to disable register protection first. */ SYS_UnlockReg(); /* Enable WDT time-out reset function and select time-out interval to 2^14 * WDT clock then start WDT counting */ g_u8IsWDTTimeoutINT = 0; WDT_Open(WDT_TIMEOUT_2POW14, WDT_RESET_DELAY_1026CLK, TRUE, FALSE); /* Enable WDT interrupt function */ WDT_EnableInt(); /* Enable WDT NVIC */ NVIC_EnableIRQ(WDT_IRQn); while(1); }
/*---------------------------------------------------------------------------------------------------------*/ 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("| WDT Time-out Wake-up Sample Code |\n"); printf("+----------------------------------------+\n\n"); /* To check if system has been reset by WDT time-out reset or not */ if(WDT_GET_RESET_FLAG() == 1) { WDT_CLEAR_RESET_FLAG(); printf("*** System has been reset by WDT time-out event ***\n\n"); while(1); } printf("# WDT Settings:\n"); printf(" - Clock source is LIRC \n"); printf(" - Time-out interval is 2^14 * WDT clock \n"); printf(" (around 1.6384 ~ 1.7408 s) \n"); printf(" - Interrupt enable \n"); printf(" - Wake-up function enable \n"); printf(" - Reset function enable \n"); printf(" - Reset delay period is 18 * WDT clock \n"); printf("# System will generate a WDT time-out interrupt event after 1.6384 ~ 1.7408 s, \n"); printf(" and will be wake up from power-down mode also.\n"); printf(" (Use PA.0 high/low period time to check WDT time-out interval)\n"); printf("# When WDT interrupt counts large than 10, \n"); printf(" we will not reset WDT counter value and system will be reset immediately by WDT time-out reset signal.\n"); /* Use PA.0 to check time-out period time */ PA->MODE = 0xFFFFFFFD; PA0 = 1; /* Enable WDT NVIC */ NVIC_EnableIRQ(WDT_IRQn); /* Because of all bits can be written in WDT Control Register are write-protected; To program it needs to disable register protection first. */ SYS_UnlockReg(); /* Configure WDT settings and start WDT counting */ g_u32WDTINTCounts = g_u8IsWDTWakeupINT = 0; WDT_Open(WDT_TIMEOUT_2POW14, WDT_RESET_DELAY_18CLK, TRUE, TRUE); /* Enable WDT interrupt function */ WDT_EnableInt(); while(1) { /* System enter to Power-down */ /* To program PWRCTL register, it needs to disable register protection first. */ SYS_UnlockReg(); printf("\nSystem enter to power-down mode ...\n"); /* To check if all the debug messages are finished */ while(IsDebugFifoEmpty() == 0); CLK_PowerDown(); /* Check if WDT time-out interrupt and wake-up occurred or not */ while(g_u8IsWDTWakeupINT == 0); g_u8IsWDTWakeupINT = 0; PA0 ^= 1; printf("System has been waken up done. WDT interrupt counts: %d.\n\n", g_u32WDTINTCounts); } }