www.pudn.com > arm_uDisk.rar > Library.c


#include "2410addr.h" 
#include "2410lib.h" 
#include "def.h" 
 
 
void Wdt_Setting(void) 
{ 
     //t_watchdog = 1 / (PCLK / (Prescaler value + 1 ) / Division_factor) 
 
    rINTMSK  &= ~(BIT_WDT);           //Watch dog Interrupt service is available 
         
    //If PCLK = 45MHz 
    rWTCON   = (((PCLK/1000000)-1)<<8) | (3<<3) | (1<<2); //Prescaler=(44),Clock division 128,Interrupt enable 
    rWTDAT   = 7812;//Around 1 sec. 
    rWTCNT   = 7812; 
    rWTCON   = rWTCON | (1<<5);   //Watch-dog timer enable 
 
} 
 
void __irq IsrWdt(void) 
{ 
	U32 temp; 
	temp=rINTMSK; 
	rINTMSK=0xffffffff; 
 
	rWTCON=0x00;//Disable WDT 
 
//    rSRCPND = BIT_WDT;  //Clear pending bit 
//    rINTPND = BIT_WDT; 
    ClearPending(BIT_WDT); 
    rINTPND;            //Prevent an double interrupt pending 
	rINTMSK=temp; 
    rINTMSK |= BIT_WDT;         //WDT Interrupt Mask 
} 
 
void PWR_StartTimer(void) 
{ 
//    Uart_Printf("\nAll 5 timers are running, and clock from PCLK=FCLK/4."); 
    // Frequency = (PCLK/Prescaler/Divider)/(rTCNTB) 
    //rTCFG0=0x8080;   //Prescaler=128;  
    rTCFG0=0x00; 
    //rTCFG1=0x611111;  //Divider=1/4; 
    rTCFG1=0x600000; //Divider=1/2; 
    //rTCNTB0=0x8000;  //(4000+4000), high=4000, low=4000 
    //rTCMPB0=0x4000;  //low=4000 
    rTCNTB0=0x01; 
    rTCMPB0=0x00; 
    rTCNTB1=0x03; 
    rTCMPB1=0x01; 
    rTCNTB2=0x05; 
    rTCMPB2=0x02; 
    rTCNTB3=0x07; 
    rTCMPB3=0x03; 
    rTCNTB4=0x8000; 
    rTCON=0x6aaa0a; //manual update 
    rTCON=0x599909; //run 
}