#include <kd_sfrs.h>


void inits_ad()
{

	unsigned int regtemp;

	asm { di; }
	wsr=0;	//Aunque podemos usar cualquier ventana para int_mask/int_mask1
	int_mask=int_mask & 0xFD; // Deshabilitamos int del AD (realizaremos encuesta, no int)
    
/*  Modifiquem el registre IOC2, seleccionem les opcions del conversor.*/
	wsr=0xf; regtemp=ioc2;
	regtemp = regtemp & 0xF7; // AD_TIME_ENA=0 para modo compatible con 196KB
	wsr=0x0; ioc2=regtemp;
	
	wsr=0xf; regtemp=ad_command;
	regtemp = regtemp | 0x10; // 8 bits
	wsr=0x0; ad_command=regtemp;

/*  Finalment cal habilitar les interrupcions per poder servir-les. */
	asm { ei;}
                          
}

unsigned int conversio_ad(char canal) {
/* Este bucle espera a que se haya acabado la interrupciĆ³n que lee el contenido del
   registro de resultado del conversor AD (rutina RSIADDone). Una vez acabada se
   muestra el resultado por el array de leds de la placa placa */
	unsigned int regtemp;							
	
	wsr=0x0; // Para leer ad_result
    	while (ad_result&0x08); // Esperar a que haya acabado (encuesta)

	asm { di; }

 	wsr=0xf; regtemp=ad_command;
	if (canal==1) { regtemp&=0xF9; regtemp|=1; }       // ...001
	else if (canal==2) { regtemp&=0xFA; regtemp|=2; }  // ...010
	else if (canal==3) { regtemp&=0xFB; regtemp|=3; }  // ...011	     




	regtemp = regtemp | 0x08; // GO=1
	wsr=0x0; ad_command=regtemp;

	asm { ei; }


    	while (ad_result&0x08); // Esperar a que haya acabado (encuesta)
	
	asm { di; }

	regtemp=ad_result;
	regtemp=regtemp>>8;
	regtemp &= 0xFF;

	asm { ei; }

	return regtemp;
}