Estoy usando un PIC de rango medio PIC16F1825 y lo he usado con un UART y SPI por un buen rato sin problemas. Cuando agregué código para manejar I2C (en lugar de SPI, es uno u otro en este PIC), tuve problemas al no recibir la interrupción de I2C, por lo que SCL permanecería estirado para siempre.
Después de una depuración considerable, descubrí que al eliminar el código que activaba el puerto serie se solucionó el problema: el ISR de I2C se llama y actúa normalmente.
Todo lo que estoy haciendo en el init serial es establecer SPBRG y luego:
bcf TXSTA, SYNC ; Async (default)
bsf RCSTA, SPEN ; Active serial port
bsf TXSTA, TXEN ; Enable TX
bsf RCSTA, CREN ; Enable RX
Eso es todo. No hay interrupciones habilitadas (acabo de establecer la bandera en transmitir)
He buscado en la documentación y en la errata y no encuentro ninguna pista de que habilitar el puerto serie dañaría la funcionalidad I2C de esta manera. ¿Es este mi malentendido o hay un error real de silicio aquí?