Para PIC16, ¿cómo puedo volver a usar el pin GPIO desde SPI?

0

Estoy intentando programar un PIC16F18877 Tengo un código generado automáticamente que configura SPI en algunos pines. (p. ej., RC4) Tengo un dispositivo que no es SPI correctamente, así que deseo golpearlo. ¿Cómo cambio el PIN de nuevo al uso de GPIO? Hay registros de PPS que controlan qué pines usa el SPI, pero no están seguros de cómo simplemente "apagarlo" y volver a utilizarlo para el uso de GPIO. No quiero redireccionar el SPI a otra parte.

EDITAR: El pasador se está bajando cuando el pestillo está alto y la tripulación es baja. Hay un tirón externo. La configuración de triple estado alto hace que el pin se ponga alto, tanto en el alcance como en el registro de puertos. ¿Entonces el PIC está bajando el pin incluso cuando SSP1 SSPEN está bajo?

    
pregunta BillyBag2

2 respuestas

2

Parece que lo que quieres lograr es usar los pines estándar del periférico SPI1, excepto el pin SDI1 (ya que especificaste el pin RC4, que corresponde al pin SDI1). Considere el siguiente extracto de la hoja de datos de PIC16F8877:

A partir de este extracto, parece que si hace SSPEN = 0, entonces deshabilitaría todos de los pines del periférico SPI. ¿Quiere decir que SOLAMENTE desea deshabilitar el pin SDI1 y utilizar el resto de los pines SPI (SCK, SDO y SS) como es normal a través del periférico SPI? Si ese es el caso, no estoy completamente seguro de si es posible lograrlo (nunca lo he intentado yo mismo).

Sin embargo, no hace ninguna mención de la configuración del registro TRIS. La hoja de datos menciona específicamente que aunque habilite el periférico SPI, aún necesita establecer la configuración de registro TRIS adecuada (consulte la sección 31.2.2 en la hoja de datos). ¿Configuró el bit de registro TRISC4 (asumiendo que el pin RC4 es el pin en cuestión) como entrada?

    
respondido por el wave.jaco
1

El problema, en este caso, fue que desconocía que en realidad son dos registros PPS. (RTFM) Uno para entrada y otro para salida. El registro de PPS que controla los dispositivos periféricos que un pin necesita establecer en cero, lo que significa GPIO.

por ejemplo.     RC3PPS = 0;     RC2PPS = 0;     RC4PPS = 0;

Estaba intentando "deshacer" ... SSP1CLKPPS = XYZ; SSP1DATPPS = ABC;

Esto solo tiene que ver con las entradas al SSP y no necesita ser "deshecho" para volver a cambiar el puerto a un GPIO. (Puede que sea necesario establecer SSPEN bajo, pero ya estaba haciendo esto).

Gracias a todos.

    
respondido por el BillyBag2

Lea otras preguntas en las etiquetas