📄 timer.c
字号:
/* */
/* */
/* DESCRIPTION */
/* */
/* */
/* AUTHOR */
/* */
/* Young Sun KIM, Samsung Electronics, Inc. */
/* */
/* DATA STRUCTURES */
/* */
/* */
/* FUNCTIONS */
/* */
/* Watchdog timer functions: */
/* */
/* WatchDogFunc Test function for watchdog */
/* WatchDogStart WatchDog timer(timer1) will be initialized and */
/* start. */
/* WatchDogReload This function is called by timer0 for reload watch */
/* dog timer counte value. */
/* WatchDog0Lisr Timer0 interrupt service routine for system timer */
/* WatchDog1Lisr Timer1 interrupt service routine for watchdog timer */
/* */
/* DEPENDENCIES */
/* */
/* */
/* HISTORY */
/* */
/* NAME DATE REMARKS */
/* */
/* in4maker 09-15-1998 Created initial version 1.0 */
/* */
/*************************************************************************/
/*************************************************************************/
/* */
/* NAME : WatchDogFunc() */
/* */
/* FUNCTIONS : Watchdog timer functions. */
/* TIMER0 used to basic system timer. */
/* TIMER1 used to watchdog timer. */
/* */
/* Whenever the system timer0 interrupt occurred, the watch */
/* dog timer(timer1) count value will be reloaded at timer0 */
/* interrupt service routine as call WatchDogReload(). */
/* */
/* EXAMPLES : */
/* */
/* */
/* VARIABLES USED */
/* */
/* HISTORY */
/* */
/* NAME DATE REMARKS */
/* */
/* in4maker 06-07-1999 Created initial version 1.0 */
/* */
/*************************************************************************/
void WatchDogFunc(int reconf)
{
Disable_Int(nTIMER0_INT);
Disable_Int(nTIMER1_INT);
if(reconf) /* timer0 reconfiguration */
SysSetInterrupt(nTIMER0_INT, tm0isr);
else
SysSetInterrupt(nTIMER0_INT, WatchDog0Lisr);
SysSetInterrupt(nTIMER1_INT, WatchDog1Lisr);
/* TIMER 0 used to system basic timer */
TDATA0 = t_data_ms(ONE_SECOND/TICKS_PER_SECOND);
TCNT0 = 0x0;
TMOD = 0;
/* TIMER 1 used to system watchdog timer */
WatchDogSetup();
Enable_Int(nTIMER0_INT); /* Timer0 interrupt enable */
Enable_Int(nTIMER1_INT); /* Timer1 interrupt enable */
/* TIMER RUN enable */
TimerStart(TIMER_DEV0);
TimerStart(TIMER_DEV1);
}
/*************************************************************************/
/* */
/* NAME : WatchDogStart() */
/* */
/* FUNCTIONS : TIMER1 will be initialized for watchdog functions */
/* if the counter value(3sec) counted out, the SNDS100 */
/* will be reset by software or hardware method. */
/* */
/* EXAMPLES : */
/* */
/* */
/* VARIABLES USED */
/* */
/* HISTORY */
/* */
/* NAME DATE REMARKS */
/* */
/* in4maker 06-07-1999 Created initial version 1.0 */
/* */
/*************************************************************************/
/* Watchdog timer start */
void WatchDogSetup(void)
{
IOPDATA &= ~(1<<17); /* Output 0 to P17(TOUT1) */
IOPMOD |= (1<<17); /* Enable P17 to output port */
/* TOUT1 will be cleared */
TCNT1 = 0; /* Clear timer counter register */
TDATA1 = t_data_ms(3*ONE_SECOND); /* Set watchdog time to 3sec */
TMOD = 0; /* Set timer mode : */
/* Interval mode,timer start */
//IOPCON = (1<<31); /* Timer1 output(TOUT1)enable */
WatchDogStatus = 0;
}
/*************************************************************************/
/* */
/* NAME : WatchDogReload() */
/* */
/* FUNCTIONS : This function is called at timer0 interrupt servive */
/* routine for reload watchdog timer count value to avoid */
/* system reset by watchdog timer1. */
/* */
/* EXAMPLES : */
/* */
/* */
/* VARIABLES USED */
/* */
/* HISTORY */
/* */
/* NAME DATE REMARKS */
/* */
/* in4maker 06-07-1999 Created initial version 1.0 */
/* */
/*************************************************************************/
void WatchDogReload(void)
{
TimerStop(TIMER_DEV1);
Disable_Int(nTIMER1_INT);
TDATA1 = t_data_ms(3*ONE_SECOND); /* Set watchdog time to 3sec */
WatchDogStatus = 0;
Enable_Int(nTIMER1_INT); /* Timer0 interrupt enable */
TimerStart(TIMER_DEV1);
}
/*************************************************************************/
/* */
/* NAME : WatchDog1Lisr() */
/* */
/* FUNCTIONS : This function will be served when the watchdog timer */
/* count value is counted out. */
/* If TOUT1(P17) merged to System reset input(nRESET), */
/* The system will be reset by the input signal from TOUT1. */
/* Any other case, rebooted by boot ROM. */
/* */
/* EXAMPLES : */
/* */
/* */
/* VARIABLES USED */
/* */
/* HISTORY */
/* */
/* NAME DATE REMARKS */
/* */
/* in4maker 06-07-1999 Created initial version 1.0 */
/* */
/*************************************************************************/
void WatchDog1Lisr(void)
{
#ifdef WDT_HW_RESET
Print("\r\r@@System hardware reset.\r");
Print("Reset signal came from TOUT1 as reset input\r");
/* This for the System hardware reset */
/* P17 have been merged system reset input pin */
IOPDATA &= ~(1<<17); /* Output 0 to P17(TOUT1) */
IOPMOD |= (1<<17); /* P17 output mode enable */
#else
Print("\r\r@@System software reset.\r");
Print("System will be reboot by boot ROM.\r");
//Reset_Boot_Rom() ; /* If ROM at address zero */
//StartUserPgm();
Reset_Handler();
//C_Entry();
return;
#endif
WatchDogStatus = 1;
}
/*************************************************************************/
/* */
/* NAME : WatchDog0Lisr() */
/* */
/* FUNCTIONS : Basic system timer using timer0. */
/* */
/* EXAMPLES : */
/* */
/* */
/* VARIABLES USED */
/* */
/* HISTORY */
/* */
/* NAME DATE REMARKS */
/* */
/* in4maker 06-07-1999 Created initial version 1.0 */
/* */
/*************************************************************************/
void WatchDog0Lisr(void)
{
clk_tick0++;
if(clk_tick0 == TICKS_PER_SECOND)
{
clk_tick0 = 0;
if(++tm0.tm_sec > 59)
{
tm0.tm_sec = 0;
if(++tm0.tm_min > 59)
{
tm0.tm_min = 0;
if(++tm0.tm_hour > 23)
{
tm0.tm_hour = 0;
if(++tm0.tm_mday > 30)
{
tm0.tm_mday = 0;
if(++tm0.tm_mon > 11)
{
tm0.tm_mon = 0;
tm0.tm_year++;
}
}
}
}
}
/* 4 means digit number for LED display */
IOPDATA = ~(1<<tm0.tm_sec%4);
}
WatchDogReload(); /* WatchDog timer value will be re-loaded */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -