Disculpa se me complica al no ver toda la configuracion de ambos, aunque no creo que ayude en mucho, pero esto dice sobre el RCEN
If the I2C module is active, these bits may not be set (no spooling) and the SSPxBUF may not be written (or writes to the SSPxBUF are disabled).
Podrias usar para pollear el flag de interrupcion.
PIR3 SSP2IF: Master Synchronous Serial Port 2 Interrupt Flag bit
1 = The transmission/reception is complete (must be cleared in software)
El PORTC tiene el MSSP1
y PORTD el MSSP2
Estuve revisando y si usas de la libreria:
OpenSPI1(unsigned char sync_mode, unsigned char bus_mode, unsigned char smp_phase) y OpenI2C2(unsigned char sync_mode, unsigned char slew)
No te activa ambos ? y te olvidas de andar configurandolos por vos mismo?
Y otra de las cosas, mira el codigo de leer el registro usando en la funcion ReadSPI1, se basa en el flag:
unsigned char ReadSPI1( void )
{
unsigned char TempVar;
TempVar = SSP1BUF; //Clear BF
PIR1bits.SSP1IF = 0; //Clear interrupt flag
SSP1BUF = 0x00; // initiate bus cycle
//while ( !SSP1STATbits.BF ); // wait until cycle complete
while(!PIR1bits.SSP1IF); //wait until cycle complete
return ( SSP1BUF ); // return with byte read
}
Pero el de I2C en el bit BF :/