PIC32 Reloj del sistema - Reloj periférico

2

En un software de demostración de Olimex para PIC32-MAXI-WEB, las palabras de configuración para el osc se establecen de la siguiente manera:

/** CONFIGURATION **************************************************/

#pragma config FNOSC    = PRIPLL        // Oscillator Selection
#pragma config FPLLMUL  = MUL_20        // PLL Multiplier
#pragma config FPLLIDIV = DIV_2         // PLL Input Divider
#pragma config FPLLODIV = DIV_1         // PLL Output Divider
#pragma config FPBDIV   = DIV_1        // Peripheral Clock divisor

Existen las siguientes macros para obtener las velocidades de reloj;

#define SYS_CLOCK             (80000000ul)
#define GetSystemClock()      (SYS_CLOCK)
#define GetPeripheralClock()  (SYS_CLOCK/2)
#define GetInstructionClock() (SYS_CLOCK)

El reloj principal debe ser 8MHz / 2 * 20/1 = 80

¿Es PeripheralClock = SYS_CLOCK / 2 un error / error tipográfico, ya que el FPBDIV está configurado en 1. Traté de buscarlo en la hoja de datos. ¿Existe realmente un error, o hay algún tipo de división interna por 2 que siempre está activa o activada por alguna otra condición / registro? (Al igual que el reloj de instrucciones fue FOsc / 4 en algunos dispositivos)

    
pregunta varesa

2 respuestas

3

Es un error. El reloj periférico debe ser igual al reloj del sistema si configura FPBDIV = DIV_1.

Así debería ser:

#define GetPeripheralClock()  (SYS_CLOCK)
    
respondido por el m.Alin
4

Sí, una mejor manera de definir el reloj periférico sería:

#define GetSystemClock()            (80000000ul)
#define GetInstructionClock()       (GetSystemClock())
#define GetPeripheralClock()        (GetSystemClock()/(1<<OSCCONbits.PBDIV))
    
respondido por el eGovind

Lea otras preguntas en las etiquetas