/* 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++;
}