C program to determine the time elapsed between two rising edges using the HC12 input capture subsystem

#include "hc12.h"
#include "DBug12.h"

#define TRUE  1
#define FALSE 0

volatile unsigned int first, second, time, done;

main()
{
    done = FALSE;

	/* Turn on timer subsystem */
	TSCR = 0x80;
	/* Set prescaler to 32 */
	TMSK2 = 0x05;

    /* Setup for IC1 */
	TIOS = TIOS & ~0x02;             /* Configure PT1 as IC */
    TCTL4 = (TCTL4 | 0x04) & ~0x08;  /* Capture Rising Edge */
    TFLG1 = 0x02;                    /* Clear IC1 Flag */
    TMSK1 = TMSK1 | 0x02;            /* Enable IC1 Interrupt */

    /* Setup for IC2 */
	TIOS = TIOS & ~0x04;             /* Configure PT2 as IC */
    TCTL4 = (TCTL4 | 0x10) & ~0x20;  /* Capture Rising Edge */
    TFLG1 = 0x04;                    /* Clear IC2 Flag */
    TMSK1 = TMSK1 | 0x04;            /* Enable IC2 Interrupt */

    enable();

    while (!done) ;

    time = second - first;         /* Calculate total time */

	DBug12FNP->printf("time = %d\r\n",time)  /* print to screen */;
}

@interrupt void tic1_isr(void)
{
    first = TC1;
    TFLG1 = 0x02;
}

@interrupt void tic2_isr(void)
{
    second = TC2;
    done = TRUE;
    TFLG1 = 0x04;
}


/*      INTERRUPT VECTORS TABLE 68HC12
 */
void tic1_isr();
void tic2_isr();

void (* const _vectab[])() =                   /* 0x0B10 */
{
        0,              /* BDLC            */
        0,              /* ATD             */
        0,              /* reserved        */
        0,              /* SCI0            */
        0,              /* SPI             */
        0,              /* Pulse acc input */
        0,              /* Pulse acc overf */
        0,              /* Timer overf     */
        0,              /* Timer channel 7 */
        0,              /* Timer channel 6 */
        0,              /* Timer channel 5 */
        0,              /* Timer channel 4 */
        0,              /* Timer channel 3 */
        tic2_isr,       /* Timer channel 2 */
        tic1_isr,       /* Timer channel 1 */
        0,              /* Timer channel 0 */
        0,              /* Real time       */
        0,              /* IRQ             */
        0,              /* XIRQ            */
        0,              /* SWI             */
        0,              /* illegal         */
        0,              /* cop fail        */
        0,              /* cop clock fail  */
        (void *)0xff80, /* RESET           */
};