📄 interrupts.c
字号:
#include "config.h"#include "project.h"#define TIMER_LOAD_VAL 0xffff#define READ_TIMER (0xFFFFFFFF - T0TC)static unsigned int timestamp = 0;static unsigned int lastdec;unsigned int get_timer_masked (void);void reset_timer (void){ reset_timer_masked ();}unsigned int get_timer (unsigned int base){ return get_timer_masked() - base;}void set_timer (unsigned int t){ timestamp = t;}void udelay (unsigned long usec){// printf("udelay = %d, T0TC = %d\n", usec, T0TC);//#if 0 unsigned int tmo;//#if defined (CONFIG_LPC2292) || defined(CONFIG_LPC2468)#if defined(CONFIG_LPC2468) tmo = (usec * CFG_HZ) / 1000000;#else tmo = usec / 1000; tmo *= CFG_HZ; tmo /= 1000;#endif// printf("udelay = %d, tmo = %d\n", usec, tmo); tmo += get_timer (0);// printf("udelay = %d, tmo = %d\n", usec, tmo); while (get_timer_masked () < tmo) { printf("T0TC = %d\n", T0TC); __asm__ __volatile__(" nop"); // /*NOP*/; }//#endif}void reset_timer_masked (void){ /* reset time */ lastdec = READ_TIMER; timestamp = 0;}unsigned int get_timer_masked (void){ unsigned int now = READ_TIMER; if (lastdec >= now) { /* normal mode */ timestamp += lastdec - now; } else { /* we have an overflow ... */ timestamp += lastdec + TIMER_LOAD_VAL - now; } lastdec = now; return timestamp;}void udelay_masked (unsigned long usec){ unsigned int tmo; unsigned int endtime; signed long diff; if (usec >= 1000) { tmo = usec / 1000; tmo *= CFG_HZ; tmo /= 1000; } else { tmo = usec * CFG_HZ; tmo /= (1000*1000); } endtime = get_timer_masked () + tmo; do { unsigned int now = get_timer_masked (); diff = endtime - now; } while (diff >= 0);}void ndelay(unsigned long nsec){ unsigned int loops = nsec / 600; while (loops-- > 0) { __asm__ __volatile__ (" nop"); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -