#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#include "MCG.h"
#include "Display.h"

#include "ADC.h"
#include "VREF.h"
#include "DAC.h"
#include "OPAMP.h"
#include "PDB.h"

#define LED1_DD	PTFDD_PTFDD2 = 1
#define LED1	PTFD_PTFD2

void PDB_SoftwareTrig(void);
void PDB_Continuous_Mode(void);

void main(void) 
{
  EnableInterrupts;
  vfnMCG_Init();
  vfnSCIInit();
  
  PDB_Continuous_Mode();
  PDB_SoftwareTrig ();
  LED1_DD;
  
  for(;;) 
  {

  __RESET_WATCHDOG();	
  } 
}

void PDB_Continuous_Mode(void)
{	
	//set prescaler value, assuming bus clock = 24MHz
	PDBC1_PRESCALER = 0b011;	//uses bus clock/8 as PDB input
	PDBC1_MULT = 0b0;	
	PDBC1_CONT = 0b1;		//one shot mode
	
	PDBSC_PDBIE = 0b1;	//PDB interrupt enable
	PDBSC_PDBIF = 0b1;	//PDB interrupt clear

	PDBSC_TOS = 0b10;	//trigger n is OR function of all channel output
	
	PDBSC_DACTOE = 0b1;	//DAC trigger enable
	
	//set buffered register content
	PDBMOD = 400;	//Modulus is 0.33us*400 ticks = 132us
	DACINT = 50; 	//DAC trigger interval 0.33us*50 ticks = 16.5us
	PDBIDLY = 400;
	
	PDBDLYA = 50;	//CH0 delay is 0.33us*50 ticks = 16.5us
	PDBDLYB = 100;	//CH1 delay is 0.33us*50 ticks = 33us
	PDBDLYC = 150; 	//CH2 delay is 0.33us*150 ticks = 49.5us
	PDBDLYD = 200; 	//CH3 delay is 0.33us*200 ticks = 66us
	PDBDLYE = 250; 	//CH4 delay is 0.33us*250 ticks = 82.5us
	PDBDLYF = 300; 	//CH5 delay is 0.33us*300 ticks = 99us
	PDBDLYG = 350; 	//CH6 delay is 0.33us*350 ticks = 115.5us
	PDBDLYH = 400; 	//CH7 delay is 0.33us*400 ticks = 132us
	
	PDBSC_LDOK = 0b1;	//load buffered registers
	while(PDBSC_LDOK);	//wait till LDOK is cleared
	
	PDBCHEN = 0xff;	//enable all channel output
	
	PDBSC_PDBEN = 0b1;	//counter enable
}

void PDB_SoftwareTrig(void)
{
	PDBC1_TRIGSEL = 0b111;	//software trigger input
	PDBC2_SWTRIG = 0b1;	//fire software trigger
}


