Estoy codificando en PIC24F y todavía estoy luchando con la configuración del oscilador. Entre los bits de configuración y los SFR, como CLKDIV y OSCCON, estoy un 'bit' perdido ... He estado haciendo que las cosas funcionen por prueba y error, pero todavía no he entendido exactamente lo que estoy haciendo: / (como cuando finalmente entiendes punteros y tener el momento "ohh").
Creo que las partes que me faltan son:
-
¿
- son los accesos directos de bits de configuración para SFR? se superponen?
- ¿cuáles son los valores predeterminados / de inicio y cuáles debo tocar?
- ¿cómo puedo verificar que el reloj esté funcionando a la velocidad correcta?
Si es necesario que sea más específico, estoy intentando configurar un PIC24FJ con un cristal externo de 12 MHz.
Editar:
// CONFIG2
#pragma config POSCMOD = HS // Primary Oscillator Select (HS Oscillator mode selected)
#pragma config I2C1SEL = PRI // I2C1 Pin Location Select (Use default SCL1/SDA1 pins)
#pragma config IOL1WAY = OFF // IOLOCK Protection (IOLOCK may be changed via unlocking seq)
#pragma config OSCIOFNC = OFF // Primary Oscillator Output Function (OSC2/CLKO/RC15 functions as CLKO (FOSC/2))
#pragma config FCKSM = CSDCMD // Clock Switching and Monitor (Clock switching and Fail-Safe Clock Monitor are disabled)
#pragma config FNOSC = PRI // Oscillator Select (Primary Oscillator (XT, HS, EC))
#pragma config SOSCSEL = SOSC // Sec Oscillator Select (Default Secondary Oscillator (SOSC))
#pragma config WUTSEL = LEG // Wake-up timer Select (Legacy Wake-up Timer)
#pragma config IESO = ON // Internal External Switch Over Mode (IESO mode (Two-Speed Start-up) enabled)
// CONFIG1
#pragma config WDTPS = PS32768 // Watchdog Timer Postscaler (1:32,768)
#pragma config FWPSA = PR128 // WDT Prescaler (Prescaler ratio of 1:128)
#pragma config WINDIS = OFF // Watchdog Timer Window (Windowed Watchdog Timer enabled; FWDTEN must be 1)
#pragma config FWDTEN = OFF // Watchdog Timer Enable (Watchdog Timer is disabled)
#pragma config ICS = PGx1 // Comm Channel Select (Emulator EMUC1/EMUD1 pins are shared with PGC1/PGD1)
#pragma config GWRP = OFF // General Code Segment Write Protect (Writes to program memory are allowed)
#pragma config GCP = OFF // General Code Segment Code Protect (Code protection is disabled)
#pragma config JTAGEN = ON // JTAG Port Enable (JTAG port is enabled)
Luego en el inicio de mi principal ():
OSCCONbits.COSC = 0b010;
CLKDIVbits.DOZE = 0b000;
¿Tengo derecho a asumir lo siguiente :?
#define FOSC 12000000UL
#define FCY FOSC/2