#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"

void main(void) 
{
  EnableInterrupts;
  vfnMCG_Init();
  vfnSCIInit();
  
	/** Enabled VREF to source internal peripherals */
	vfnVREF_Init (_IntUseOnly);
	 
	/** Enable sine wave to exit from DAC*/
	vfnDACFillBuffer();
	vfnDACInit(gu8DACConfig1, gu8DACConfig2);
	vfnDACSetPointer (0,15);
	
	/** Amplify DACO with OPAMP0*/
	vfnOPAMPInit ();
	vfnOPAMPConfig (OPAMP0);
	
	
	/** Configure ADC */
	vfnADCHWTrigger (0);
	vfnADC_Init ();
	vfnADConfigChannel(1);

	ADCSC1A = ADCSC1A_AIENA_MASK | ADC_DACO_CH;
	ADCSC1B = ADCSC1B_AIENB_MASK | ADC_DACO_CH;
	ADCSC1C = ADCSC1C_AIENC_MASK | ADC_DACO_CH;
	ADCSC1D = ADCSC1D_AIEND_MASK | ADC_DACO_CH;
	ADCSC1E = ADCSC1E_AIENE_MASK | ADC_OPAMP0_CH;
	ADCSC1F = ADCSC1F_AIENF_MASK | ADC_OPAMP0_CH;
	ADCSC1G = ADCSC1G_AIENG_MASK | ADC_OPAMP0_CH;
	ADCSC1H = ADCSC1H_AIENH_MASK | ADC_OPAMP0_CH;
	
	/** Configure PDB to trigger DAC */
	vfnPDBInit();
	vfnPDBConfig(PDB_ONESHOT_MODE);

	PDB_TRIGGER;
 
  for(;;) 
  {
	if (ADC_COCO)
	{
		ADC_COCO_CLEAR;
		vfnGraphicWords(&sADC.gu16LatestResult[0]);
	}
	
  __RESET_WATCHDOG();	
  } 
}


