void WDT_Example_Reset(void) { unsigned long i = 0; /********************** Configure System clock *************************/ SysCtlClockSet(100000000, SYSCTL_OSC_INT | SYSCTL_XTAL_12_MHZ); SysCtlDelay(TICK_SLOW); // Power WDT/GPIO on // Note: For LPC17xx, Watchdog module is always enabled. SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); // Configure LED pin PC3 xGPIOSPinTypeGPIOOutput(PC3); // Reset source is watchdog ? if(xtrue == WDTStatusFlagCheck(WDT_FLAG_TIMEOUT)) // Watchdog has reset mcu { // Clear Watchdog timeout flag WDTStatusFlagClear(WDT_FLAG_TIMEOUT); // Turn off the LED GPIOPinClr(GPIOC_BASE, GPIO_PIN_3); while(1); } // First configure watchdog else { // Configure watchdog into reset mode. WDTCfg(WDT_CFG_RESET_MODE | WDT_CFG_CLKSRC_IRC, 0xFFFFF); WDTEnable(); // Feed Watchdog and blink LED 50 times. for(i = 0; i < 50; i++) { WDTFeed(); // LED ON GPIOPinClr(GPIOC_BASE, GPIO_PIN_3); SysCtlDelay(20*TICK_SLOW); // LED OFF GPIOPinSet(GPIOC_BASE, GPIO_PIN_3); SysCtlDelay(20*TICK_SLOW); } // Stop Feed watchdog and wait for mcu reset. while(1); } }
int main(void) { int nCounter = 0; //給Beep Loop用的Counter //初始化參數 u8gLCD_BOOT = 1; u32NeedWriteFlash = 0; u32ADC = POWER_LOWEST_ADC + 100; //檢查電源用的參數,電不夠時把馬達動作變小。 u8MotorSuspended = 0; //看看馬達是不是在暫停狀態 //正式程式碼,開始初始化動作。 SysCLK_config_clock_select(0); // 配置時鐘 EL_Init(); ADC_Init(); //讀取CPU ID u32IAP_ReadUID(uid); sn = uid[0] + uid[1] +uid[2] +uid[3]; //讀取記憶的速度 memset(BufferFlash, 0x0, IAP_FLASH_PAGE_SIZE_BYTES); u32IAP_ReadUserDataFlash(BufferFlash, IAP_FLASH_PAGE_SIZE_BYTES); memcpy(BackupBuffer, BufferFlash,IAP_FLASH_PAGE_SIZE_BYTES); BeeperInit(); HallInit(); KeyInit(); PWMInit(); // For motor control voltage. WDT_Enable(); //Enable the watch dog. InitialTimeTick(TIME_TICK_NUMBER); while(u8gLCD_BOOT != 0); //time tic 開始後就會叫callback, 此時LCD及Beeper,KeyBounce要初始完成。 u32ADC = ADC_Read(); if(u32ADC > POWER_LOWEST_ADC && u32ADC != 0) { LCD_Init(); // LCD update for(nCounter = 0 ; nCounter < 2; nCounter++) { BeepMillisecondsAndWait(500); WDTFeed(); } } else { //如果一開始就電量不足,在閃一下後,就離開,等下次初始化。 EL_OnOff(); delay_us(1000); EL_OnOff(); delay_us(1000); return 0; } StatusInit(); nCounter = 0; while(sn % 1000 != UID) { #ifndef PROGRAMING BeepMillisecondsAndWait(500); #endif WDTFeed(); } if( !(GPIO2->DATA & (1 << 1)) && !(GPIO0->DATA & (1 << 5))) { while(1) { WDTFeed();// Feed Dog. } } while(1) { WDTFeed();// Feed Dog. u32ADC = ADC_Read(); PWM_CheckSuspend(u32ADC); WDTFeed();// Feed Dog. ProcessHall(); Status_ProcessKey(GetKey()); WriteFlash(); } }