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 + -
显示快捷键?