#define PTA_CCTRL_PULSE_TCR1		0x000F
#define PTA_CCTRL_PERIOD_RISING_TCR1	0x0007
#define PTA_CCTRL_PERIOD_FALLING_TCR1	0x000B
#define PTA_CCTRL_PULSE_TCR2		0x004F
#define PTA_CCTRL_PERIOD_RISING_TCR2	0x0047
#define PTA_CCTRL_PERIOD_FALLING_TCR2	0x004B
#define PTA_CCTRL_NO_CHANGE		0x01FF


#define PTA_HSQ_HIGH_WIDTH	0x0
#define PTA_HSQ_LOW_WIDTH	0x1
#define PTA_HSQ_PERIOD_RISING	0x2
#define PTA_HSQ_PERIOD_FALLING	0x3

#define PTA_HSR_NONE		0x0
#define PTA_HSR_INIT		0x3


/******************************************************************************\
**	cfxmain.c				Persistor and PicoDOS starter C file  
**	
*****************************************************************************
**	
**	
*****************************************************************************
**	
**	
\******************************************************************************/

#include	<cfxbios.h>		// Persistor BIOS and I/O Definitions
#include	<cfxpico.h>		// Persistor PicoDOS Definitions

#include	<assert.h>
#include	<ctype.h>
#include	<errno.h>
#include	<float.h>
#include	<limits.h>
#include	<locale.h>
#include	<math.h>
#include	<setjmp.h>
#include	<signal.h>
#include	<stdarg.h>
#include	<stddef.h>
#include	<stdio.h>
#include	<stdlib.h>
#include	<string.h>
#include	<time.h>

#include	<dirent.h>		// PicoDOS POSIX-like Directory Access Defines
#include	<dosdrive.h>	// PicoDOS DOS Drive and Directory Definitions
#include	<fcntl.h>		// PicoDOS POSIX-like File Access Definitions
#include	<stat.h>		// PicoDOS POSIX-like File Status Definitions
#include	<termios.h>		// PicoDOS POSIX-like Terminal I/O Definitions
#include	<unistd.h>		// PicoDOS POSIX-like UNIX Function Definitions

#include "pta.h"
#include "accel.h"

int done;
int dc = 10;
int per = 20;
int num_periods = 20;
void MyChore(void);
void MyChore(void)
{
static int n = 0;
static int i = 0;


if((n == dc) || (n == 0))
  {
  PinToggle(37);
if(n == dc)
	printf("Toggling high to low\n");
else
	printf("Togglin low to high \n");
}
if(n++ == per)
  {
	n = 0;
	i++;
  }

if(i == num_periods)
	done = 1;
return;
}


IEV_C_FUNCT(TPU12_PULSE_ISR)
{
pulse_isr(12);
}

IEV_C_FUNCT(TPU14_PULSE_ISR)
{
pulse_isr(14);
}


IEV_C_FUNCT(TPU12_PERIOD_ISR)
{
period_isr(12);
}

IEV_C_FUNCT(TPU14_PERIOD_ISR)
{
period_isr(14);
}








/******************************************************************************\
**	main
\******************************************************************************/
int main(int argc, char **argv)
	{
	short	i;
	short	result = 0;		// no errors so far
	
	
   // TMGSetSpeed(1000);
//	printf("Clock speed = %d kHz \n",TMGGetSpeed());
	
	// Identify the progam and build
	printf("\nProgram: %s: %s %s \n", __FILE__, __DATE__, __TIME__);
	// Identify the device and its firmware
	printf("Persistor CF%d SN:%ld   BIOS:%d.%d   PicoDOS:%d.%d\n", CFX,
		BIOSGVT.CFxSerNum, BIOSGVT.BIOSVersion, BIOSGVT.BIOSRelease, 
		BIOSGVT.PICOVersion, BIOSGVT.PICORelease);
	// Identify the arguments
	printf("\n%d Arguments:\n", argc);
	for (i = 0; i < argc; i++)
		printf("  argv[%d] = \"%s\"\n", i, argv[i]);
	
	
	/*
	  EIAEnableRx(false);
	  EIAForceOff(true);	
	
	PITSet100usPeriod(PITOff);
	*/
	
	
		PinClear(30);
/*		
	PinRead(35);
	PinClear(37);



	done = 0;

	PITInit(6);
	PITSet51msPeriod(1);
	PITAddChore(MyChore,6);
	 
	 
	*/
	
//	pta_start(14,2,&TPU14_PULSE_ISR,PTA_TCR1 | PTA_LOW_WIDTH);
	pta_start(12,1,&TPU12_PERIOD_ISR,PTA_TCR1 | PTA_PERIOD_RISING);


	printf("TCR1 Rate = %ld \n",TPUGetTCR1Clock());
	
	
	while(!done)
	 {
	 //for(i = 0;i<8;i++)
    //printf("%x %x \n",TPU.PRAM[chan][4],TPU.PRAM[chan][5]);
	 //printf("\n");
	// printf("%d \n",PinRead(35));	 
     }

	  
	  /*

	  EIAEnableRx(true);
	  EIAForceOff(false);	
	*/

	
	
// Various exit strategies
//	BIOSReset();			// full hardware reset
//	BIOSResetToPBM();		// full reset, but stay in Pesistor Boot Monitor
//	BIOSResetToPicoDOS();	// full reset, but jump to 0xE10000 (PicoDOS)
	return result;

	}	//____ main() ____//

