/*
 * Copyright(C) Paul und Scherer (mct.de/mct.net)
 *
 * This example demonstrates how to...
 *
 *  ... use a timer to count pulses.
 */

#include <stdio.h>
#include <sys/arm7tdmi.h>
#include <target.h>

static int count;				// pulse count/interval

/*
 * Timer1 interrupt service
 */
static void __attribute__((interrupt))		// handle as ISR!
t1_isr(void)
{
	static int pulse;			// pulse counter

	if (Intern_t1ir&1) {			// interval done?
		count = pulse;			// yep, update count
		pulse = 0;			// reset counter
		Intern_t1ir = 1;		// clear int flag
	} else {
		pulse++;			// no, up counter
		Intern_t1ir = 0x10;		// clear int flag
	}
	Intern_vicvectaddr = 0;			// reset VIC priority logic
}

int
main(void)
{
	Intern_vicvectaddr0 = (long)t1_isr;	// set ISR addr
	Intern_vicintenable = 0x20;		// enable t1 int
	Intern_vicvectcntl0 = 0x25;		//  vector

	Intern_t1mr0	= _PCLK*5-1;		// set MR0 to 5s
	Intern_t1mcr   |= 3;			// int on MR0, reset
	Intern_t1ccr   |= 6;			// CR0 falling edge, int
	Intern_t1tcr	= 1;			// go...
	Intern_pinsel0 |= 0x200000;		// enable CAP1.0 (P0.10)
	ENABLE_INTERRUPTS;			//        core ints

	/*
	 * Connect P0.10 to a pulse signal source.
	 */
	while (1) if (count >= 0) printf("last count: %d\n", count), count = -1;
}
