void timer_pool_init (void) { int i; for( i=0; i < NUMTIMERS; i++) { timer_pool[i].value = 0; timer_pool[i].free = TRUE; } volatile int tmp; __builtin_sysreg_write(__TMRIN0H, 0); __builtin_sysreg_write(__TMRIN0L, TIMEOUT_PERIOD);// set period of timer interruptf(SIGTIMER0LP, decrement_timers); // interrupt vector of timer tmp = __builtin_sysreg_read(__INTCTL); tmp = tmp | INTCTL_TMR0RN; __builtin_sysreg_write(__INTCTL, tmp); // start timer tmp = __builtin_sysreg_read(__IMASKL); tmp = tmp | INT_TIMER0L; // allow timer interrupt __builtin_sysreg_write(__IMASKL, tmp); giet(1); // global interrupt enable }
void delay_ms(u16 ms) { uint32_t delay = (int32_t) ((long long) ms * (CLOCKS_PER_SEC / 5000)); uint32_t start = __builtin_sysreg_read(reg_CYCLES); /* Spin until the delay expires. */ while ((__builtin_sysreg_read(reg_CYCLES) - start) < delay) { /* do nothing */ } }
void giet(int state) { volatile int tmp; tmp = __builtin_sysreg_read(__SQCTL); if (state) tmp = tmp | SQCTL_GIE; //global interrupt enable else tmp = tmp & (~SQCTL_GIE); __builtin_sysreg_write(__SQCTL, tmp); }