Esempio n. 1
0
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);
    }
}
Esempio n. 2
0
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();
	}
}