// OK  le 15 /06 /11 sur 64MC802
// exemple de mise en oeuvre de convertion ADC
// scénario: automatic sample , trigerred  conv (déclenchement auto sur timer 3)
// 3 capteurs à convertir en utlisant le scénario scan: AN0,AN1,AN2 sur CH0
// IT ADC sur timer 3 => qd les 3 conv ont été réalisés alors traitement
// ATTENTION : datasheet prioritaire sur référence manuel section 16
// exemple : ADC1BUF1,2 etc.. non implémenté sur dspic33  64MC8xx
// SMPI en non DMA n'est pas documenté 

#include "p33FJ64MC802.h"

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <timer.h>


#include "ConfigSystem.h"  // definition des labels Fcy etc....
#include "delay.h"





_FOSCSEL(FNOSC_FRC);			
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF  & POSCMD_XT);	// Clock Switching is enabled and Fail Safe Clock Monitor is disabled
													// OSC2 Pin Function: OSC2 is Clock Output
													// Primary Oscillator Mode: XT Crystal
_FWDT(FWDTEN_OFF); 


// les differentes configs on été eclatées dans des fichiers distinct
// meilleure visibilité
extern  void  Init_ADC_TimerIT_Scan( void );
extern void UART_puts(char * string);
extern  void InitClock();
extern void InitUART();
extern void InitPORT_AND_PIN();
extern void InitTimer3();



unsigned char BUFFER[30]={0};
unsigned int CAPTEUR[3];
unsigned char flagIT=0;
unsigned char scanCounter=0; // compteur de voie
unsigned char HelloMsg[7]="Bonjour";

// IT ADC déclenché automatiquement au rythme du timer 3
void __attribute__((interrupt, no_auto_psv)) _ADC1Interrupt(void)
{	
	CAPTEUR[scanCounter]=ADC1BUF0; // stockage capteur par capteur
	scanCounter++;					// capteur suivant
	if(scanCounter==4)	
		{
		scanCounter=0;
		flagIT=1;  // 3 capteurs convertis => traitement différé	
		}

IFS0bits.AD1IF = 0;		// Clear the ADC1 Interrupt Flag

PORTBbits.RB14=!PORTBbits.RB14; // debug
}

int main ( void )
{
	unsigned int ADCValue=0;

	

	InitClock();	// This is the PLL settings	
	InitPORT_AND_PIN();
	InitUART();
	Init_ADC_TimerIT_Scan();
	InitTimer3();

	UART_puts(HelloMsg);



    /* Infinite Loop */


    while ( 1 )
	{  
	

		if (flagIT==1)
			{
			sprintf(BUFFER,"capt 0: %d \n", CAPTEUR[0]);
			UART_puts(BUFFER);
			sprintf(BUFFER,"capt 1: %d \n", CAPTEUR[1]);
			UART_puts(BUFFER);
			sprintf(BUFFER,"capt 2: %d \n", CAPTEUR[2]);
			UART_puts(BUFFER);

			}

	
	}	


		
	
	
}


