Gracias por tu respuesta Maunix, veo que sigues siendo el primero de la clase
. No he conseguido cambiar el PLL en tiempo real. De todas formas me di cuenta de que para habilitar/deshabilitar el PLL con INTOSC a 8Mhz conmutando de este modo entre 32Mhz y 8 Mhz.... es mejor cambiar la frecuencia de INTOSC entre 8Mhz y 4Mhz y teniendo en cuenta que el PLL fijo es x4, obtengo 32Mhz y 16Mhz(frecuencia con la que mi hardware externo sigue funcionando OK)... con lo que aún gano velocidad de ejecución
.
Os comento que con esto último no he tenido ningún problema... sólo consiste en cambiar los bits IRCF2:IRCF0 del registro OSCCON... 111=8Mhz y 110=4Mhz; despues de cada cambio de frecuencia se han de dejar, como mínimo, 2 ciclos de reloj del oscilador anterior y entre 3 y 4 ciclos del nuevo reloj para que la señal se estabilice. Tampoco me he parado a contar los "Nops"... con lo siguiente funciona bien(en C18)...
OSCCON.IRFC0 = 1; // cambiamos a 32Mhz...
OSCCON.IRFC1 = 1;
OSCCON.IRFC2 = 1;
Delay10TCYx(1); //delay de 10 instrucción de reloj
.
.
.
OSCCON.IRFC0 = 0; // cambiamos a 16Mhz...
OSCCON.IRFC1 = 1;
OSCCON.IRFC2 = 1;
Delay10TCYx(1); //delay de 10 ciclos de instrucción
.
.
.
OSCCON.IRFC0 = 1; // cambiamos a 32Mhz...
OSCCON.IRFC1 = 1;
OSCCON.IRFC2 = 1;
Delay10TCYx(1); //delay de 10 ciclos de instrucción
etc.
Sólo cabe recordar, que se debe habilitar el PLL(OSCTUNE.PLLEN = 1) y que este PLL sólo funciona si INTOSC = 8Mhz o 4Mhz....
Espero que esto le sirva de algo a alguien en algún momento... vaya frase más fea que me ha quedado XD XD XD
Saludos a todos y gracias de nuevo maunix!