int main(void){
unsigned int SPICON1Value,SPICON2Value,SPISTATValue,k;
// Configuramos PLL para trabajar a 40 MIPS con Cristal de 4MHz.-
PLLFBD = 0x004E; // M=80.
CLKDIV = 0x0000; //N1=2, N2=2.
// Cambiamos clock para incroporar PLL.-
__builtin_write_OSCCONH(0b011); // Indicamos cambio a clock primario con PLL.-
__builtin_write_OSCCONL(0x01); // Iniciamos cambio.-
while(OSCCONbits.OSWEN == 1) {}; // Esperamos a que se termine el cambio de clock.
AD1PCFGL=0xFFFF; // Todos los pines digitales.-
// Habilitamos escritura sobre registros RPINRx y RPORX.
__builtin_write_OSCCONL(OSCCON & ~(0x40));
iPPSInput(IN_FN_PPS_SCK1,IN_PIN_PPS_RP5); // Asignamos pin clock SCK1 a RP5.-
iPPSInput(IN_FN_PPS_SDI1,IN_PIN_PPS_RP6); // Asignamos pin recepción SDI1 a RP6.-
iPPSInput(IN_FN_PPS_SS1,IN_PIN_PPS_RP7); // Asignamos pin SS a RP7.-
iPPSOutput(OUT_PIN_PPS_RP4,OUT_FN_PPS_SDO1); // Asignamos RP4 al pin de transmisión SDO.-
// Bloqueamos escritura sobre registros RPINRx y RPORX.
__builtin_write_OSCCONL(OSCCON |0x40);
/* Turn off SPI modules */
CloseSPI1(); //Disbale SPI1 mdolue if enabled previously
//***************** SPI1 configuration (CKE=0, CKP=1) ******************************************************
SPICON1Value = SPI_MODE16_OFF & SPI_CKE_OFF & SPI_SMP_OFF & CLK_POL_ACTIVE_LOW & ENABLE_SDO_PIN & SLAVE_ENABLE_ON & MASTER_ENABLE_OFF;
SPICON2Value = FRAME_ENABLE_OFF;
SPISTATValue = SPI_ENABLE ;
OpenSPI1(SPICON1Value,SPICON2Value,SPISTATValue );
//************ SPI interrupt configuration *****************************
ConfigIntSPI1(SPI_INT_EN | SPI_INT_PRI_1); //slave with priority 1
}