/* Time ticker for H8/3052F 2005/03/07 This code was designed and coded by SHIBUYA K. */ #include "ticker.h" #include "3052.h" #define BASE_CLOCK 25 /* MHz */ #define TIMER0_COUNT (BASE_CLOCK*TICK) void timer0_interrupt() __attribute__((interrupt_handler)); volatile unsigned long tick = 0; void TickerInit() { ITU.TSTR.BIT.STR0 = 0; /* stop timer0 */ ITU.TSNC.BIT.SYNC0 = 0; /* no sync */ ITU.TMDR.BIT.PWM0 = 0; /* not PWM mode */ ITU0.TCR.BYTE = 0x20; /* auto clear on compare-match A; raise edge; clock 1x */ ITU0.TIOR.BYTE = 0x00; /* no TIOCA, TIOCB */ ITU0.TIER.BYTE = 0x01; /* interrupt on compare-match A */ SYSCR.BIT.UE = 1; /* use UI bit for user bit */ ITU0.GRA = TIMER0_COUNT; ITU0.TCNT = 0; ITU0.TSR.BIT.IMFA = 0; /* clear flag */ ITU.TSTR.BIT.STR0 = 1; /* start timer0 */ } void microwait(unsigned long n) { unsigned long t0 = tick+(n/TICK)+1; while(t0 != tick) ; } void timer0_interrupt() { ITU0.TSR.BIT.IMFA = 0; /* clear flag */ tick++; }