18 de mayo de 2012

Configuration Words en PIC18F26J50


Las Flash Configuration Words (FCW) son cuatro (de 16 bits cada una), y están almacenadas al final de la memoria FLASH de programa, ocupando las últimas 8 direcciones de la FLASH (hay dos direcciones asignadas para cada Configuration Word). Si el micro tiene 64Kbytes de FLASH (desde la dirección 0x0000 hasta 0xFFFF) entonces las Configuration Words van a ocupar desde la dirección 0xFFF8 hasta la 0xFFFF.
En RESET estas Words se copian automáticamente en RAM, en registros para configuración, mapeados desde la dirección 0x300000 hasta la 0x300007, se los puede leer pero no escribir, incluso son esos (los de RAM) los valores que usa el micro para su configuración (si los valores en FLASH fueran cambiados en Runtime por ejemplo en una self-write, ese cambio no tendría efecto hasta que no suceda un RESET y la consiguiente copia en RAM)
  • CONFIG1 0x300000 CONFIG1L 0x300001 CONFIG1H
  • CONFIG2 0x300002 CONFIG2L 0x300003 CONFIG2H
  • CONFIG3 0x300004 CONFIG3L 0x300005 CONFIG3H
  • CONFIG4 0x300006 CONFIG4L 0x300007 CONFIG4H

El seteo de FCW conviene que figure en el source del proyecto para que contenga la configuración de acuerdo a su hardware y no sea necesario almacenar esa información aparte.

Para especificar esta información de configuración en el source se utilizan directivas que son diferentes (según el compilador)

    Para el C18 luce de esta manera
       #pragma config CPUDIV = NOCLKDIV
       #pragma config USBDIV = OFF
       #pragma config FOSC = HS
       #pragma config PLLEN = ON
       ...

    Para el CCS es algo así
    (No me gusta este compilador porque se sale mucho del estándar de C, pero es una opinión personal)
       #FUSES NOWDT  
       #FUSES WDT128 
       #FUSES HS  
       #FUSES NODEBUG 
       ...

    Para el HI-TECH PICC18 se parece a esto
    __CONFIG(1, DEBUG_OFF & XINST_OFF & STVREN_ON & PLLDIV_1 );
    __CONFIG(2, IESO_OFF & FCMEN_OFF & LPT1OSC_ON );
    __CONFIG(3, DSWDTPS_8192 & DSWDTEN_OFF & DSBOREN_OFF);
    __CONFIG(4, WPDIS_OFF);

¿Dónde encuentro los nombres de esas constantes?
 
En el compilador HI-TECH los valores de la constantes están en :

C:\Archivos de programa\HI-TECH Software\PICC-18\9.80\docs\18f26j50.html

(para windows en español y versión 9.80)

Se usan con la directiva

#pragma config

(Que es compatible con C18 pero también con la nueva versión de HI-TECH)

Esto es porque Microchip compró la empresa HI-TECH, los compiladores HI-TECH y C18 se fusionaron en un nuevo compilador llamado XC. Por lo que vi de momento el "nuevo" compilador no es más que el HI-TECH con compatibilidad agregada para C18, para nuevos proyectos (hoy 2012) aconsejan usar HI-TECH, ya que los XC van a ser backward compatibles con ese compilador.