#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;
}