Mi pregunta es sobre el uso de FRC como fuente de oscilador y el pin OSC2 como pin de E / S.
En varios manuales diferentes en chips dsPIC30F (por ejemplo: DS70139G, página 126) está escrito:
LP Secondary 0 0 0 XXXXX (Note 1, 2)
FRC Internal FRC 0 0 1 XXXXX (Note 1, 2)
LPRC Internal LPRC 0 1 0 XXXXX (Note 1, 2)
Note 1: The OSC2 pin is either usable as a general purpose I/O pin or is completely
unusable, depending on the Primary Oscillator mode selection (FPR<4:0>).
Busqué cuidadosamente manuales, erratas, foros, etc. Pero no puedo encontrar una aclaración sobre cómo configurar los bits FPR en el registro FOSC para poder utilizar OSC2 como una E / S que sugiere Note 1
. ¿Es esto posible en absoluto?
La errata en dsPIC30F3012 sugiere usar FRC con PLL y el escalador posterior para hacer que este pin sea utilizable (DS80448D - páginas 3, 15). Pero esta errata indica que este problema es aplicable solo a la revisión B0, que es relativamente antiguo. Tenemos los chips de la revisión B1. ¿Fue este problema realmente solucionado en B1? En caso afirmativo, no debería ser necesario solucionar el problema, pero en este caso, ¿cómo debería utilizarse esta función?
¿Hay alguna diferencia en los dispositivos dsPIC30F3010 y dsPIC30F4011 con respecto a este problema?
Yo uso ensamblador de XC16 v1.11. El código de ejemplo es (la parte que establece FOSC):
.section __FOSC.sec, code
.pword 0xC701; // FRC with 4x PLL.
Actualizar:
Hice experimentos sobre la programación de FPRs indocumentados en el dispositivo. Como entorno estaba usando MPLABX y ICD3. Resulta que la compilación siempre va bien y el archivo .hex siempre contiene los valores que puse en el código. Pero parte de la cadena de herramientas bloquea la programación de los valores FPR no documentados en el dispositivo. Después de programar las pestañas "Bits de configuración", se muestra el valor C100 (FRC sin PLL) y el dispositivo funciona como este valor realmente está programado allí.
El comportamiento descrito anteriormente (bloqueo de la programación) pasa a la mayoría de los valores. Los valores 0x02, 0x04, 0x06, 0x08, 0x09, 0x0b, 0x0c logran pasar, pero el dispositivo no parece funcionar correctamente.
Estos experimentos no han destruido el dispositivo.