time.c

来自「ADS下的bios工程」· C语言 代码 · 共 87 行

C
87
字号
#include <bios/s3c2410x.h>#include <bios/time.h>#include <bios/timer.h>#include <bios/stdio.h>extern int bootFlag ;extern void Lan_WatchDog(void);extern void set_IrqAction(int, void (*)());volatile unsigned int    centisecs;volatile unsigned int    watch_dog;struct timer    timers[NR_TIMERS];void clear_timer(int timer){    timers[timer].to = 0;    timers[timer].status = 0;}void set_timer(int timer, int cs){    timers[timer].to = cs;    timers[timer].status = 0;}void set_timer_fn(int timer, void (*fn)(int)){    timers[timer].to_fn = (void (*))fn;}static void led_timeout(int timer){    flash_led(1) ;	/* Turn on/off led 0 only */    set_timer(timer, 20);}void time_interrupt(void){    int    i;    centisecs += 1;    for (i = 0; i < NR_TIMERS; i ++) {        if (timers[i].to) {            timers[i].to -= 1;            if (timers[i].to == 0) {                timers[i].status = 1;                if (timers[i].to_fn) {                    timers[i].to_fn(i);                }            }        }    }}void wait_cs(int cs){    int    target = centisecs + cs;    while (centisecs < target)         ;}void time_init(void){    centisecs = 0;    /* setup interrupt controller to IRQ mode */    INT_ENABLE(INT_TIMER0) ;    /* setup timer special register, and enable timer */    s3c24xxx_timer_initialize() ;    set_IrqAction(INT_TIMER0, time_interrupt) ;    /* setup logical timer used in bios */    set_timer(LED_TIMER, 20);    set_timer_fn(LED_TIMER, led_timeout);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?