Bienvenido: Ingresar
location: Diferencias para "WebHome/Hardware/LPC2114/ModuloPLL"
Diferencias entre las revisiones 21 y 24 (abarca 3 versiones)
Versión 21 con fecha 2013-09-10 20:21:28
Tamaño: 9981
Comentario:
Versión 24 con fecha 2013-09-10 21:24:51
Tamaño: 9736
Comentario:
Los textos eliminados se marcan así. Los textos añadidos se marcan así.
Línea 4: Línea 4:
Línea 9: Línea 8:
{{attachment:pll.png | "pll.png" | width='20%' }} {{attachment:pll.png|"pll.png"|height="177",width="677"}}
Línea 12: Línea 11:
||'''Nombre''' ||'''Descripción''' ||'''Rango de operación''' ||
||Fosc ||Frecuencia del oscilador externo ||10 a 20 Mhz ||
||Fcco ||Frecuencia del oscilador controlado por corriente ||156 Mhz a 320 Mhz ||
||cclk ||Frecuencia interna del microcontrolador ||10 a 60 Mhz ||
Línea 13: Línea 16:
||'''Nombre'''||'''Descripción'''||'''Rango de operación'''||
|| Fosc || Frecuencia del oscilador externo|| 10 a 20 Mhz ||
|| Fcco || Frecuencia del oscilador controlado por corriente || 156 Mhz a 320 Mhz ||
|| cclk || Frecuencia interna del microcontrolador || 10 a 60 Mhz ||

Línea 20: Línea 21:
Por un lado tenemos el multiplicador M, este modulo divide la frecuencia interna por un entero y este valor es comparado con la frecuencia externa, el echo de llamarlo multiplicador, se debe a que del punto de vista de la frecuencia interna, ésta será la frecuencia del oscilador externo multiplicada por M  Por un lado tenemos el multiplicador M, este modulo divide la frecuencia interna por un entero y este valor es comparado con la frecuencia externa, el echo de llamarlo multiplicador, se debe a que del punto de vista de la frecuencia interna, ésta será la frecuencia del oscilador externo multiplicada por M
Línea 32: Línea 33:
ahora P deberá ser 2  ahora P deberá ser 2
Línea 34: Línea 35:
Fcco = cclk * 2 * 2 = 58,9824 = 235,9296 Mhz Fcco = cclk * 2 * 2 = 58,9824 * 2 * 2 = 235,9296 Mhz
Línea 36: Línea 37:
Queda para este ejemplo entonces M = 4 y P = 2  Queda para este ejemplo entonces M = 4 y P = 2
Línea 39: Línea 40:

La configuración del PLL se realiza mediante los siguientes registros

|| '''Dirección''' ||
'''Nombre''' || '''Descripción''' || '''Acceso''' ||
|| 0xE01FC080 || PLLCON  || Registro de Control, permite la habilitación del PLL, las modificaciones realizadas no tienen efecto hasta que se realiza la secuencia de actualización. || R/W ||
|| 0xE01FC084 || PLLCFG  || Registro de Configuración, establece los divisores P y M, las modificaciones realizadas no tienen efecto hasta que se realiza la secuencia de actualización || R/W ||
|| 0xE01FC088 || PLLSTAT || Registro de STATUS, informa sobre el estado del PLL y los divisores que se están usando en este momento  || R ||
|| 0xE01FC08C || PLLFEED || Registro FEED o de habilitación del PLL, escribiendo una secuencia de caracteres en este registro (secuencia de actualización) se habilitan las modificaciones echas en PLLCON y PLLCFG  || W ||
La configuración del PLL se realiza mediante los siguientes registros
||'''Dirección''' ||'''Nombre''' ||'''Descripción''' ||'''Acceso''' ||
||0xE01FC080 ||PLLCON ||Registro de Control, permite la habilitación del PLL, las modificaciones realizadas no tienen efecto hasta que se realiza la secuencia de actualización. ||R/W ||
||0xE01FC084 ||PLLCFG ||Registro de Configuración, establece los divisores P y M, las modificaciones realizadas no tienen efecto hasta que se realiza la secuencia de actualización ||R/W ||
||0xE01FC088 ||PLLSTAT ||Registro de STATUS, informa sobre el estado del PLL y los divisores que se están usando en este momento ||R ||
||0xE01FC08C ||PLLFEED ||Registro FEED o de habilitación del PLL, escribiendo una secuencia de caracteres en este registro (secuencia de actualización) se habilitan las modificaciones echas en PLLCON y PLLCFG ||W ||
Línea 49: Línea 48:
=== Registro de Control ===
Línea 51: Línea 49:

=== Registro de Control ===
Línea 52: Línea 52:
   * bit 0 (PLLE) es el que habilita el PLL para que se enganche a la fase, valor de reset = 0.
   * bit 1 (PLLC) en el momento que este bit y PLLE están en 1 y luego de una secuencia de actualización, el PLL pasa a ser el oscilador del microcontrolador, valor de reset = 0.
   * bit 2 - 7 son reservados y no deben ser escrito con 1.

* bit 0 (PLLE) es el que habilita el PLL para que se enganche a la fase, valor de reset = 0.
 * bit 1 (PLLC) en el momento que este bit y PLLE están en 1 y luego de una secuencia de actualización, el PLL pasa a ser el oscilador del microcontrolador, valor de reset = 0.
 * bit 2 - 7 son reservados y no deben ser escrito con 1.
Línea 59: Línea 60:
||'''PLLC''' ||'''PLLE''' ||'''Estado del PLL''' ||
||0 ||0 ||el PLL es desactivado y desconectado, el microcontrolador funciona con el reloj externo conectado en forma directa ||
||0 ||1 ||el PLL es activado, el PLL comienza a funcionar, pudiendo ser conectado cuando la fase se enganche (PLOCK = 1) ||
||1 ||0 ||igual que 0 0, esto previene que se conecte el PLL sin ser habilitado previamente ||
||1 ||1 ||el PLL está activo y es el oscilador interno del microcontrolador ||
Línea 60: Línea 66:
|| '''PLLC''' || '''PLLE''' || '''Estado del PLL''' ||
|| 0 || 0 || el PLL es desactivado y desconectado, el microcontrolador funciona con el reloj externo conectado en forma directa ||
|| 0 || 1 || el PLL es activado, el PLL comienza a funcionar, pudiendo ser conectado cuando la fase se enganche (PLOCK = 1) ||
|| 1 || 0 || igual que 0 0, esto previene que se conecte el PLL sin ser habilitado previamente ||
|| 1 || 1 || el PLL está activo y es el oscilador interno del microcontrolador ||
Línea 66: Línea 67:
=== Registro de Configuración  ===

=== Registro de Configuración ===
Línea 68: Línea 71:
   * MSEL bit 0 a 4 valor del multiplicador M, donde para un valor M = 1 tenemos MSEL = 00000, para M = 2 MSEL = 00001 y así hasta M = 32, si bien este sería el valor mas alto, los valores posibles son de 1 a 6, dada la menor frecuencia del oscilador externo ( 10 Mhz) y el mayor valor del oscilador interno ( 60 Mhz )
   * PSEL bit 5 a 6 el divisor P se configura de la siguiente forma:
|| '''PSEL bits''' || '''Valor de P''' ||
|| 00 || 1 ||
|| 01 || 2 ||
|| 10 || 4 ||
|| 11 || 5 ||
Línea 76: Línea 72:
   * bit 7 es un bit reservado y no se debe escribir 1  * MSEL bit 0 a 4 valor del multiplicador M, donde para un valor M = 1 tenemos MSEL = 00000, para M = 2 MSEL = 00001 y así hasta M = 32, si bien este sería el valor mas alto, los valores posibles son de 1 a 6, dada la menor frecuencia del oscilador externo ( 10 Mhz) y el mayor valor del oscilador interno ( 60 Mhz )
 * PSEL bit 5 a 6 el divisor P se configura de la siguiente forma:
Línea 78: Línea 75:
=== Registro de STATUS === ||'''PSEL bits''' ||'''Valor de P''' ||
||00 ||1 ||
||01 ||2 ||
||10 ||4 ||
||11 ||5 ||


 * bit 7 es un bit reservado y no se debe escribir 1

=== Registro de STATUS ===
Línea 80: Línea 86:
   * bits 0 a 4, MSEL valores actuales del multiplicador M
   * bits 5 a 6, PSEL valores actuales del divisor P
   * bits 7, reservado
   * bits 8, PLLE valores actuales del PLLE
   * bits 9, PLLC valores actuales del PLLC
   * bits 10,PLOCK, refleja el estado del lazo del PLL, es decir si el PLL ya se encuentra enganchado en fase, este bits es muy importante porque permite decidir cuando se está en condiciones de que el PLL pase a ser el oscilador del microcontrolador.
   * bits 11 a 15 reservados.
==== Interrupción  ====

* bits 0 a 4, MSEL valores actuales del multiplicador M
 * bits 5 a 6, PSEL valores actuales del divisor P
 * bits 7, reservado
 * bits 8, PLLE valores actuales del PLLE
 * bits 9, PLLC valores actuales del PLLC
 * bits 10,PLOCK, refleja el estado del lazo del PLL, es decir si el PLL ya se encuentra enganchado en fase, este bits es muy importante porque permite decidir cuando se está en condiciones de que el PLL pase a ser el oscilador del microcontrolador.
 * bits 11 a 15 reservados.

==== Interrupción ====
Línea 90: Línea 98:
=== PLL Feed Register o registro de actualización  === === PLL Feed Register o registro de actualización ===
Línea 94: Línea 102:
 
== Programa de configuración  ==
Este programa realizado en assembler se debe intercalar en el STARTUP y permite configurar un PLL en esta caso para que oscile a 58,9824 Mhz partiendo de un cristal que lo hace a 14.7456 Mhz 

== Programa de configuración ==
Este programa realizado en assembler se debe intercalar en el STARTUP y permite configurar un PLL en esta caso para que oscile a 58,9824 Mhz partiendo de un cristal que lo hace a 14.7456 Mhz
Línea 98: Línea 107:
Línea 102: Línea 110:
/* 
* Establecer PLL 
/*
* Establecer PLL
Línea 109: Línea 117:
        @ PLLCFG = PLLCFG_VALUE se configura el divisor D y el multiplicador P según una constante          @ PLLCFG = PLLCFG_VALUE se configura el divisor D y el multiplicador P según una constante
Línea 111: Línea 119:
        str r3, [r0, #PLLCFG_OFFSET]           str r3, [r0, #PLLCFG_OFFSET]
Línea 117: Línea 125:
        @ PLLFEED = PLLFEED1, PLLFEED2          @ PLLFEED = PLLFEED1, PLLFEED2
Línea 124: Línea 132:
        @ repetir mientras ((PLLSTAT & PLLSTAT_PLOCK) == 0)          @ repetir mientras ((PLLSTAT & PLLSTAT_PLOCK) == 0)
Línea 131: Línea 139:
        @ PLLCON = PLLCON_PLLC||PLLCON_PLLE          @ PLLCON = PLLCON_PLLC||PLLCON_PLLE
Línea 136: Línea 144:
        @ PLLFEED = PLLFEED1, PLLFEED2  
        @ una nueva secuencia de actualización hace efectivo el cambio y ahora el PLL es el oscilador del sistema 
        @ PLLFEED = PLLFEED1, PLLFEED2
        @ una nueva secuencia de actualización hace efectivo el cambio y ahora el PLL es el oscilador del sistema
Línea 139: Línea 147:
        str r2, [r0, #PLLFEED_OFFSET]          str r2, [r0, #PLLFEED_OFFSET]
Línea 148: Línea 156:
@ PLL configuration  @ PLL configuration
Línea 161: Línea 169:
        @ el valor del CFG corresponde a un M = 4 MSEL = 00011 y P = 2 PSEL = 01  
        .equ PLLCFG_VALUE, 0x23        
        @ el valor del CFG corresponde a un M = 4 MSEL = 00011 y P = 2 PSEL = 01
        .equ PLLCFG_VALUE, 0x23
Línea 165: Línea 173:

PLL (PHASE LOCKED LOOP)

El PLL o Lazo Enganchado de Fase, es básicamente un sistema de lazo cerrado de frecuencia, se basa en un control de fase que mide la diferencia entre una frecuencia de entrada patrón y la frecuencia de un oscilador controlado, de esta forma el error de fase actuará sobre el oscilador de frecuencia variable modificando su salida acercándola a la frecuencia del oscilador patrón.

Intercalando divisores podemos generar frecuencias superiores a la frecuencia patrón, este uso es el dado por el microcontrolador, permitiendo de este modo elevar la frecuencia desde un cristal de 10 a 20 Mhz a 10 a 60 Mhz de frecuencia interna.

"pll.png"

Tabla de las distintas frecuencias que intervienen en el PLL

Nombre

Descripción

Rango de operación

Fosc

Frecuencia del oscilador externo

10 a 20 Mhz

Fcco

Frecuencia del oscilador controlado por corriente

156 Mhz a 320 Mhz

cclk

Frecuencia interna del microcontrolador

10 a 60 Mhz

En la figura se muestra el diagrama simplificado del PLL aplicado al microcontrolador, como vemos, tenemos dos divisores que permiten configurar al dispositivo a una frecuencia interna para una frecuencia dada del cristal externo.

Por un lado tenemos el multiplicador M, este modulo divide la frecuencia interna por un entero y este valor es comparado con la frecuencia externa, el echo de llamarlo multiplicador, se debe a que del punto de vista de la frecuencia interna, ésta será la frecuencia del oscilador externo multiplicada por M

Si por ejemplo tenemos un oscilador de 10 Mhz y este divisor lo configuramos a 6, entonces el oscilador se acomodará para dar una salida a la frecuencia interna de 60 Mhz.

El divisor P, es utilizado para configurar la frecuencia del oscilador interno a un rango dado por el fabricante, en este caso 156 Mhz a 320 Mhz, una vez establecido la frecuencia que queremos mediante M, establecemos P para que el OCC funcione en el rango en el cual fue diseñado, siguiendo el ejemplo con P = 2 la frecuencia del OCC es 60 * 2 * 2 = 240Mhz el cual es una frecuencia valida.

Veamos ahora el calculo para un oscilador externo de 14,7456 Mhz

Establecemos M = 4

cclk = M * Fosc = 4 * 14,7456 = 58,9824

ahora P deberá ser 2

Fcco = cclk * 2 * 2 = 58,9824 * 2 * 2 = 235,9296 Mhz

Queda para este ejemplo entonces M = 4 y P = 2

Configuración del PLL en el ARM

La configuración del PLL se realiza mediante los siguientes registros

Dirección

Nombre

Descripción

Acceso

0xE01FC080

PLLCON

Registro de Control, permite la habilitación del PLL, las modificaciones realizadas no tienen efecto hasta que se realiza la secuencia de actualización.

R/W

0xE01FC084

PLLCFG

Registro de Configuración, establece los divisores P y M, las modificaciones realizadas no tienen efecto hasta que se realiza la secuencia de actualización

R/W

0xE01FC088

PLLSTAT

Registro de STATUS, informa sobre el estado del PLL y los divisores que se están usando en este momento

R

0xE01FC08C

PLLFEED

Registro FEED o de habilitación del PLL, escribiendo una secuencia de caracteres en este registro (secuencia de actualización) se habilitan las modificaciones echas en PLLCON y PLLCFG

W

Registro de Control

El PLLCON es un registro de 8 bits de los cuales solo dos bits tienen función.

  • bit 0 (PLLE) es el que habilita el PLL para que se enganche a la fase, valor de reset = 0.
  • bit 1 (PLLC) en el momento que este bit y PLLE están en 1 y luego de una secuencia de actualización, el PLL pasa a ser el oscilador del microcontrolador, valor de reset = 0.
  • bit 2 - 7 son reservados y no deben ser escrito con 1.

La secuencia correcta es: establecer primero el PLL y que este se enganche a la fase (PLLE = 1 ) y luego activar el PLL (PLLE = 1 y PLLC = 1)

Las diferentes combinaciones de los bits PLLC y PLLE pueden mostrarse en la siguiente tabla

PLLC

PLLE

Estado del PLL

0

0

el PLL es desactivado y desconectado, el microcontrolador funciona con el reloj externo conectado en forma directa

0

1

el PLL es activado, el PLL comienza a funcionar, pudiendo ser conectado cuando la fase se enganche (PLOCK = 1)

1

0

igual que 0 0, esto previene que se conecte el PLL sin ser habilitado previamente

1

1

el PLL está activo y es el oscilador interno del microcontrolador

Registro de Configuración

Como se describió anteriormente este registro de 8 bits, posee los valores de P y M

  • MSEL bit 0 a 4 valor del multiplicador M, donde para un valor M = 1 tenemos MSEL = 00000, para M = 2 MSEL = 00001 y así hasta M = 32, si bien este sería el valor mas alto, los valores posibles son de 1 a 6, dada la menor frecuencia del oscilador externo ( 10 Mhz) y el mayor valor del oscilador interno ( 60 Mhz )
  • PSEL bit 5 a 6 el divisor P se configura de la siguiente forma:

PSEL bits

Valor de P

00

1

01

2

10

4

11

5

  • bit 7 es un bit reservado y no se debe escribir 1

Registro de STATUS

Provee los valores actuales del PLL, estos valores pueden ser distintos de los guardados en los registros de control y configuración, solo la secuencia de actualización hace efectivo los cambios de esos registros al PLL y mientras que esta no se produzca, los valores internos del PLL no se modifican.

  • bits 0 a 4, MSEL valores actuales del multiplicador M
  • bits 5 a 6, PSEL valores actuales del divisor P
  • bits 7, reservado
  • bits 8, PLLE valores actuales del PLLE
  • bits 9, PLLC valores actuales del PLLC
  • bits 10,PLOCK, refleja el estado del lazo del PLL, es decir si el PLL ya se encuentra enganchado en fase, este bits es muy importante porque permite decidir cuando se está en condiciones de que el PLL pase a ser el oscilador del microcontrolador.
  • bits 11 a 15 reservados.

Interrupción

El bit PLOCK puede ser conectado al controlador de interrupciones, lo que permite activar el PLL y continuar haciendo otra cosa, en el momento en que se enganche la fase (PLOCK = 1) se genera una interrupción, la cual coloca al PLL con entrada del oscilador interno y desactiva la interrupción.

PLL Feed Register o registro de actualización

El registro de actualización es utilizado para generar la secuencia de actualización, esta secuencia es para registrar los cambios que se realicen en el PLL, esto evita cualquier error de escrituras accidentales en los registros de configuración.

La secuencia son dos caracteres que se escriben en este registro en ciclos de bus consecutivos, estos caracteres son 0xAA y 0x55, esto significa que la interrupción debe ser desactivada en este período de configuración, si los caracteres no son los correctos, o alguna de las anteriores condiciones no se cumple, los cambios en PLLCON o PLLCFG no se realizan.

Programa de configuración

Este programa realizado en assembler se debe intercalar en el STARTUP y permite configurar un PLL en esta caso para que oscile a 58,9824 Mhz partiendo de un cristal que lo hace a 14.7456 Mhz

...........
...........
...........
/*
* Establecer PLL
* -----------------------------------------------------------------------------
*/
        @ Se usa r0 para cargar la posición del primer registro del PLL
        @ para acceder luego a los demás registros se utilizará esta dirección como base mas un offset
        ldr r0, PLLBASE
        @ PLLCFG = PLLCFG_VALUE se configura el divisor D y el multiplicador P según una constante
        mov r3, #PLLCFG_VALUE
        str r3, [r0, #PLLCFG_OFFSET]

        @ PLLCON = PLLCON_PLLE  se configura el PLLE = 1 y PLLC = 0 esto es para activar el PLL
        mov r3, #PLLCON_PLLE
        str r3, [r0, #PLLCON_OFFSET]

        @ PLLFEED = PLLFEED1, PLLFEED2
        @ se realiza la secuencia de actualización para hacer efectivos los cambios
        mov r1, #PLLFEED1
        mov r2, #PLLFEED2
        str r1, [r0, #PLLFEED_OFFSET]
        str r2, [r0, #PLLFEED_OFFSET]

        @ repetir mientras ((PLLSTAT & PLLSTAT_PLOCK) == 0)
        @ este bucle se realiza hasta que se enganche la fase
pll_loop:
        ldr r3, [r0, #PLLSTAT_OFFSET]
        tst r3, #PLLSTAT_PLOCK
        beq pll_loop

        @ PLLCON = PLLCON_PLLC||PLLCON_PLLE
        @ una vez enganchada la fase se procede a configurar el PLL como oscilador del microcontrolador
        mov r3, #PLLCON_PLLC||PLLCON_PLLE
        str r3, [r0, #PLLCON_OFFSET]

        @ PLLFEED = PLLFEED1, PLLFEED2
        @ una nueva secuencia de actualización hace efectivo el cambio y ahora el PLL es el oscilador del sistema
        str r1, [r0, #PLLFEED_OFFSET]
        str r2, [r0, #PLLFEED_OFFSET]
...........
...........
...........
PLLBASE:        .word   0xE01FC080
/*
* las constantes de 8 bits son usadas como valores inmediatos y offset
*/

@ PLL configuration

        .equ PLLCON_OFFSET,   0x0
        .equ PLLCFG_OFFSET,   0x4
        .equ PLLSTAT_OFFSET,  0x8
        .equ PLLFEED_OFFSET,  0xC

        .equ PLLCON_PLLE,    (1 << 0)
        .equ PLLCON_PLLC,    (1 << 1)
        .equ PLLSTAT_PLOCK,  (1 << 10)
        .equ PLLFEED1,        0xAA
        .equ PLLFEED2,        0x55

        @ el valor del CFG corresponde a un M = 4 MSEL = 00011 y P = 2 PSEL = 01
        .equ PLLCFG_VALUE,    0x23

@ configuracíon del PLL para cristal de 14,7456 Mhz

UntitledWiki: WebHome/Hardware/LPC2114/ModuloPLL (última edición 2013-10-27 16:09:51 efectuada por GuillermoSteiner)