ticker.c

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

This page was generated at 2005/3/19 15:4:13