1 Introducción

Anuncio
CURSO DE PIC32MX
_n L_ngu[j_ C32
TABLA DE CONTENIDO
1
INTRODUCCIÓN ............................................................................................................................1
ARQUITECTURA DEL PIC32......................................................................................................................1
Lectura y escritura de un PBCLK Peripheral.....................................................................................2
Bus Masters y Acceso Concurrente ....................................................................................................2
Módulo de Prefetch Cache..................................................................................................................4
Funcionamiento del módulo de Prefetch Cache .................................................................................6
DMA (Direct Memory Access) ............................................................................................................6
NÚCLEO MIPS M4K ................................................................................................................................9
Pipelines ...........................................................................................................................................10
MINI-32.................................................................................................................................................12
2
EL PRIMER PROGRAMA ...........................................................................................................16
CREACIÓN DEL PROYECTO .....................................................................................................................16
CREACIÓN DEL ARCHIVO FUENTE ...........................................................................................................18
GRABACIÓN DEL PIC32 USANDO EL BOOTLOADER ................................................................................20
CREACIÓN DE LIBRERÍAS ........................................................................................................................22
BITS CONFIGURACIÓN ............................................................................................................................25
3
EL CIRCUITO DE RELOJ ...........................................................................................................26
RENDIMIENTO VS CONSUMO DE ENERGÍA ..............................................................................................27
GENERACIÓN DEL SYSTEM CLOCK (SYSCLK) ......................................................................................28
Oscilador Externo Primario (POSC)................................................................................................29
Oscilador Externo Secundario (SOSC).............................................................................................32
Oscilador Interno de Alta Velocidad (FRC) .....................................................................................32
Oscilador Interno de Baja Potencia (LPRC) ....................................................................................34
GENERACIÓN DEL PERIPHERAL BUS CLOCK (PBCLK)...........................................................................34
GENERACIÓN DEL USB CLOCK (USBCLK) ...........................................................................................34
4
PUERTOS DE ENTRADA-SALIDA ............................................................................................36
REGISTROS DE CONTROL ........................................................................................................................37
EL PROBLEMA DE LA ESCRITURA............................................................................................................39
EJEMPLO 1. USO DE PUERTOS DE ENTRADA/SALIDA ..............................................................................41
PRÁCTICA 1. USO DE PUERTOS DE ENTRADA/SALIDA ............................................................................43
INTERFACES DIGITALES DE DISTINTOS VOLTAJES ..................................................................................44
Conexión de 3.3V a 5V......................................................................................................................44
Conexión de 5V a 3.3V......................................................................................................................47
DISPLAY DE CRISTAL LÍQUIDO (LCD)....................................................................................................54
EJEMPLO 2: USO DE DISPLAY LCD 16X2 ...............................................................................................56
EJEMPLO 3: MOSTRAR VALORES NUMÉRICOS EN LCD 16X2 ..................................................................57
LIBRERÍAS DE C32..................................................................................................................................60
TIPOS DE DATOS DE C32.........................................................................................................................61
PRÁCTICA 2: FUNCIONES TRIGONOMÉTRICAS EN LCD 16X2 ..............................................................62
5
INTERRUPCIONES ......................................................................................................................63
BITS ASOCIADOS CON CADA FUENTE DE INTERRUPCIÓN .........................................................................63
LIBRERÍA DE MANEJO DE INTERRUPCIONES ...........................................................................................66
MANEJO DE INTERRUPCIONES DE UN VECTOR (SINGLE VECTOR) ..........................................................66
EJEMPLO 1: INTERRUPCIÓN CN EN SINGLE VECTOR ..............................................................................67
Configuración de Change Notification .............................................................................................68
MÚLTIPLES INTERRUPCIONES EN UN SOLO VECTOR (SINGLE VECTOR)...................................................70
EJEMPLO 2. INTERRUPCIONES INT0 Y CN EN EL MISMO VECTOR ...........................................................71
MANEJO DE INTERRUPCIONES CON MÚLTIPLES VECTORES .....................................................................73
EJEMPLO 3. INTERRUPCIONES INT0 Y CN EN MÚLTIPLES VECTORES......................................................75
USO DE UN TECLADO MATRICIAL ..........................................................................................................77
5.1.1
Conexión de un Teclado matricial con un PIC32...............................................................77
5.1.2
Algoritmo para lectura del teclado.....................................................................................78
EJEMPLO 4. USO DE TECLADO MATRICIAL .............................................................................................84
6
TIMERS...........................................................................................................................................85
7
CONVERTIDOR ANÁLOGO-DIGITAL ....................................................................................86
8
MODULACIÓN DE ANCHO DE PULSO (PWM) .....................................................................87
9
COMUNICACIÓN SERIAL .........................................................................................................88
10
ALMACENAMIENTO MASIVO .................................................................................................89
11
UNIVERSAL SERIAL BUS ..........................................................................................................90
12
ETHERNET ....................................................................................................................................91
13
SISTEMAS OPERATIVOS DE TIEMPO REAL (RTOS).........................................................92
APÉNDICE A ...........................................................................................................................................93
BITS DE CONFIGURACION...............................................................................................................93
APÉNDICE B: LIBRERÍAS ...................................................................................................................96
LIBRERÍA LCD .......................................................................................................................................96
LIBRERÍA TECLADO .............................................................................................................................. 106
BIBLIOGRAFÍA .................................................................................................................................... 111
1- Introducción
1 INTRODUCCIÓN
El presente curso está enfocado a estudiantes o Ingenieros de Electrónica o área afín
con buenos conocimientos de programación en Lenguaje C y conocimiento de
Microcontroladores. Si usted nunca ha usado un Microcontrolador, le recomiendo
empezar con uno de 8 bits y una vez dominado puede saltar a una familia de 16 bits o
32 bits. En este curso se supone que el lector sabe programar en lenguaje C, por lo tanto
no se explicarán detalles básicos del lenguaje C y nos enfocaremos más en lo que se
puede hacer con un Microcontrolador PIC32 usando el lenguaje C32.
Arquitectura del PIC32
Los PIC32 son una familia de microcontroladores de 32 bits de propósito general
del fabricante Microchip Technology®. La Figura 1-1 muestra un diagrama a bloques
del PIC32. Los PIC32 contienen un núcleo de 32 bits MIPS M4K desarrollado por
MIPS Technologies. Este núcleo está basado en arquitectura Harvard, ya que posee
buses separados de datos y de instrucción conectados al Bus Matrix.
El núcleo conecta a todos los módulos a través de este Bus Matrix, el cual es un
switch de alta velocidad que proporciona conexiones punto a punto entre módulos como
se muestra en la figura. El Bus Matrix corre a la misma velocidad que el CPU. Los
módulos conectados directamente a este bus son llamados SYSCLK Peripherals y
pueden correr a la misma velocidad que el CPU, por lo tanto todos los accesos a los
SYSCLK Peripherals se pueden completar en 1 sólo ciclo de reloj.
Figura 1-1. Diagrama a bloques del PIC32 [1]
Ing. Juan Ramon Terven Salinas
1
1- Introducción
Dentro del chip se encuentra otro bus llamado Peripheral Bus, el cual se usa para
comunicar módulos de menor velocidad como el SPI, UART, I2C, ADC, RTCC, etc.
Los módulos conectados al Peripheral Bus son denominados PBCLK Peripherals. Estos
módulos corren a una velocidad determinada por el PBCLK, el cual se deriva del reloj
principal (SYSCLK).
Por medio de los bits de configuración y en tiempo de ejecución se puede configurar la
velocidad del PBCLK en tasas de 1:1, 1:2, 1:4 y 1:8 del SYSCLK.
Lectura y escritura de un PBCLK Peripheral
Cuando PBCLK corre a la misma velocidad que SYSCLK (1:1), el CPU y los
SYSCLK Peripherals pueden acceder a los PBCLK Peripherals en un ciclo de reloj.
Sin embargo si PBCLK corre a una frecuencia menor, una lectura a un PBCLK
Peripheral tomará tantos ciclos de reloj como lo especifique el divisor. Por ejemplo si el
PBCLK corre a 1:8 del SYSCLK entonces se tomarán 8 ciclos de reloj en leer un PBCLK
Peripheral.
En la escritura es diferente, ya que cuando el CPU escribe en un SFR de un PBCLK
Peripheral, el Bus Matrix toma la operación de escritura y permite al CPU continuar
con la siguiente operación. Como resultado aún si el PBCLK corre a 1:8 del SYSCLK, el
CPU completará la escritura en un ciclo. Sin embargo la escritura real en el SFR se
completará hasta 8 SYSCLKs después.
Bus Masters y Acceso Concurrente
La arquitectura del PIC32 usa un concepto llamado Bus Masters. Los Bus Masters
son un conjunto especial de módulos que pueden iniciar una lectura o escritura de otro
módulo (o Target). Por ejemplo el CPU puede leer y escribir en la SRAM o en
cualquier otro periférico. De manera similar, el DMA puede leer y escribir en cualquier
otro periférico del bus.
Los PIC32 siguen evolucionando pero hasta la fecha los Bus Masters son CPU,
ICD, USB, DMA, Ethernet y CAN.
El Bus Matrix permite funcionamiento concurrente de Bus Masters, por ejemplo si
un Bus Master inicia una transacción con un módulo, otro Bus Master puede iniciar una
Ing. Juan Ramon Terven Salinas
2
1- Introducción
segunda transacción con otro módulo aun cuando no haya terminado el Bus Master
anterior.
La Figura 1-2 muestra un ejemplo de 3 transacciones concurrentes. Mientras el
CPU esta tomando instrucciones del módulo Prefetch Cache, el USB esta leyendo o
escribiendo en la SRAM, y al mismo tiempo el módulo DMA puede leer del módulo
UART. En este ejemplo, las transacciones usan caminos separados y no se generan
conflictos ni retrasos.
Figura 1-2. Acceso concurrente [1]
En otro ejemplo, si el CPU quiere acceder a la SRAM mientras el USB está accediendo
a esta, ocurre un conflicto y el Bus Matrix arbitrará y permitirá a uno de ellos completar
antes que el otro pueda continuar.
La prioridad está determinada por la programación de los registros del Bus Matrix. Por
medio de programación podemos darle mayor prioridad al CPU o a cualquier otro Bus
Master.
Como podemos ver, los Bus Masters pueden transferir datos dentro y fuera del
microcontrolador sin ninguna asistencia del CPU. Los Bus Masters pueden leer y
escribir en otros Bus Masters excepto en el CPU, por ejemplo el módulo DMA puede
leer o escribir registros USB, sin embargo no puede acceder a los registros del CPU.
Solamente el CPU puede acceder a sus registros.
Ing. Juan Ramon Terven Salinas
3
1- Introducción
Módulo de Prefetch Cache
Como se puede observar en las figuras anteriores, el PIC32 usa una memoria Flash
de 128 bits de longitud de palabra. Los diseñadores del PIC32 escogieron este ancho
para incrementar el flujo de instrucciones y mejorar el rendimiento del CPU.
Para mejorar aún más el rendimiento, el PIC32 usa un módulo llamado Prefetch
Cache el cual se adelanta a las instrucciones y almacena 128 bits de instrucción en una
memoria caché de alta velocidad.
El módulo Prefetch Cache está diseñado para almacenar en caché solo el contenido
de la memoria Flash. La memoria SRAM corre a la misma velocidad que el CPU y no
requiere de ninguna memoria caché.
La Figura 1-3 muestra tres escenarios diferentes:
1. El escenario “Ideal” asume que la memoria Flash corre a la misma velocidad
que el CPU. Esto conlleva a que si la frecuencia del procesador aumenta, el
rendimiento (performance) aumenta linealmente.
Figura 1-3. Efecto de Prefetch Cache [2]
Pero en casi todos los procesadores de alta velocidad, la memoria Flash esta
limitada a una frecuencia menor que la del CPU. Por ejemplo la memoria del PIC32
corre a 30 MHz máximo. Esta restricción provoca que si la frecuencia del
procesador es mayor que 30MHz, el CPU tiene que insertar un estado de espera por
Ing. Juan Ramon Terven Salinas
4
1- Introducción
cada leida de la memoria Flash. Si el procesador opera a 60 MHz, se requieren 2
estados de espera.
Debido a estos estados de espera, el rendimiento del CPU se ve reducido.
2. La línea “Non-Cached” muestra lo que ocurre cuando no hay módulo
Prefetch Cache disponible y la memoria Flash está limitada a 30 MHz.
Observe como el rendimiento del procesador cae significativamente con
respecto al “Ideal”.
3. La línea “Cached” muestra el rendimiento cuando el módulo Prefetch Cache
está habilitado. Observe que el rendimiento es significativamente mejor que
el escenario “Non-Cached”.
El Módulo Prefetch Cache consiste de un Prefetch Buffer, memoria caché y la
circuitería lógica asociada (vea la Figura 1-4). Por medio de software podemos habilitar
o inhabilitar el prefetch buffer o la memoria caché.
Figura 1-4. Prefetch Cache [2]
El prefetch buffer tiene la función de obtener los siguientes 128 bits de de la
memoria Flash en función de la instrucción actual que se esté ejecutando. La memoria
caché tiene 16 líneas de 128 bits. Cada línea puede almacenar 4 instrucciones de 32 bits
u 8 instrucciones de 16 bits.
Por medio de software podemos reservar hasta 4 líneas para almacenar datos
constantes. Esta característica es útil si la aplicación interactúa frecuentemente con
datos constantes.
Toda la memoria caché puede ser leída y escrita por el software y también puede ser
bloqueada. Cuando una línea es bloqueada, ya no puede ser reemplazada por nuevos
datos. Esta característica es útil para incrementar el rendimiento de fragmentos de
código usados frecuentemente, como un pequeño ciclo o el prólogo de una interrupción.
Ing. Juan Ramon Terven Salinas
5
1- Introducción
Funcionamiento del módulo de Prefetch Cache
A continuación se describe el funcionamiento del módulo de Prefetch Cache en un
proceso de 6 pasos:
1. El CPU pide una dirección de Flash específica (puede ser una instrucción o un
dato constante).
2. Si es la primera vez que el CPU accede a esta dirección, quiere decir que la
memoria caché no contiene esa dirección en particular. Esta condición es
llamada Cache Miss (falla de caché).
3. Como hubo un fallo en caché, el módulo de prefetch cache carga el prefetch
buffer con los datos requeridos (mas unas cuantas instrucciones o datos mas
hasta llenar los 128 bits). Esto puede tardar unos cuantos ciclos (SYSCLK)
debido a la baja velocidad de la Flash.
4. Una vez que el buffer tiene los 128 bits de datos, los copia en una línea
disponible de la memoria caché. El controlador de caché usa el algoritmo LRU
(Leas Recently Used) o de “menos usado recientemente” para determinar que
línea de caché usar.
5. Ahora que la dirección pedida está en memoria caché, el módulo caché le pasa el
contenido al CPU.
6. Mientras el CPU ejecuta la instrucción, el modulo de Prefetch Cache
automáticamente carga los siguientes 128 bits de datos de la memoria Flash y
los tiene listos en caso que el CPU los necesite.
DMA (Direct Memory Access)
El DMA es un módulo Bus Master usado para transferir datos de periféricos a
memoria sin la intervención del CPU. El módulo DMA puede acceder a cualquier
dirección de memoria dentro del sistema, ya sea SRAM, Flash o SFRs de periféricos.
Este módulo está diseñado para aumentar la tasa de transferencia de datos y mejorar
el rendimiento del PIC32.
Ing. Juan Ramon Terven Salinas
6
1- Introducción
Para entender como ayuda el DMA veamos un ejemplo. Suponga que necesitamos
desarrollar una aplicación que recibe datos por el módulo UART a una tasa de 115200
bps (bits por segundo). Una solución común (sin DMA) consiste en los siguientes pasos
(vea la Figura 1-5):
1. El módulo UART recibe datos.
2. Se llena el buffer de recepción (comúnmente son 4 bytes en los PIC).
3. Se genera una interrupción.
4. El CPU deja pendiente lo que está haciendo para obtener los datos del buffer
5. y guardarlos en la RAM para futuras operaciones.
Figura 1-5. Transacción UART sin DMA [3]
Este procedimiento se repite cada vez que se llena el buffer, y si estamos recibiendo
a 115200 bps, el CPU es interrumpido aproximadamente cada 0.3 milisegundos.
Tome en cuenta que esta tasa de transferencia es muy baja, el módulo UART del
PIC32 soporta una transferencia de 20Mpbs, lo cual equivaldría a una interrupción cada
2 microsegundos.
Cuando el CPU es interrumpido constantemente de esta manera se reduce bastante
el rendimiento.
Ahora veamos como ayuda el módulo DMA.
Ing. Juan Ramon Terven Salinas
7
1- Introducción
Por medio de software podemos asignar un canal del DMA (se tienen hasta 8
canales) al módulo UART para que obtenga los datos del buffer UART y los deposite
en RAM. El procedimiento se muestra en la Figura 1-6:
1. El módulo UART recibe datos.
2. Se llena el buffer de recepción.
3. El DMA obtiene los datos del buffer UART
4. y los deposita en RAM, además podemos hacer que el DMA tomé múltiples
datos del UART.
5. Cuando el número de bytes especificados se transfieren a RAM entonces el
DMA interrumpe al CPU para decirle que ya están listos los datos en RAM para
que los utilice.
Figura 1-6. Transacción UART con DMA [3]
De esta manera, el CPU puede hacer otras tareas de mayor importancia y dejar el
manejo del periférico al módulo DMA logrando un mayor rendimiento del CPU.
Ing. Juan Ramon Terven Salinas
8
1- Introducción
Núcleo MIPS M4K
Además de todas las fantásticas características de la arquitectura del PIC32, su
verdadero poder radica en su núcleo. Toda la familia PIC32 posee como corazón un
procesador MIPS M4K de 32 bits capaz de funcionar a una frecuencia máxima de 80
MHZ y proporcionando un rendimiento cercano a 1 instrucción por cada ciclo de reloj!
A diferencia de las familias anteriores de PICs como PIC24, PIC18, PIC16, etc. El
rendimiento del PIC32 no se puede medir simplemente con la velocidad del oscilador,
ya que debido a la compleja arquitectura interna de su núcleo y a los módulos que
ayudan a mejorar el rendimiento (Prefetch cache, cache, DMA), la duración de cada
instrucción varía por diversos factores como son, la aplicación, el compilador, la
estructura del código, etc.
Sin embargo con todos los módulos de rendimiento activados y con una
optimización de código, el PIC32 puede llegar a funcionar a 80 MIPS1 (Millones de
Instrucciones por Segundo) con un reloj de 80 MHz.
A continuación de listan las características principales del procesador MIPS M4K
que poseen los PIC32 [6] :
•
Hasta 1.5DMIPS/MHz de rendimiento.
•
Memoria caché programable para mejorar la ejecución desde memoria Flash.
•
Modo de instrucciones de 16-bit (MIPS16e) para generar código más compacto.
•
Controlador de interrupciones sectorizado con 63 niveles de prioridad.
•
Modos de operación de Usuario y Kernel (para optimizar el uso de sistema
operativo).
•
Manipulaciones de bit atómicas (en un solo ciclo) en registros de periféricos.
•
Unidad de multiplicación y división capaz de multiplicar 32 x 16 bits en un ciclo
de reloj.
•
Soporte para depuradores y programadores por JTAG e ICD.
•
Modos de alimentación programables para reducir el consumo de potencia.
•
Pipeline de 5 niveles.
•
Protección de código interna para proveer propiedad intelectual.
1
No confundir MIPS que se refiere al nombre del fabricante del núcleo (cuyo origen proviene de
con el término MIPS que es el acrónimo de Millions of
Instructions per second (Millones de instrucciones por segundo).
Microprocessor without Interlocked Pipeline Stages)
Ing. Juan Ramon Terven Salinas
9
1- Introducción
Pipelines
El nucleo del PIC32 consiste de 2 pipelines (Figura 1-7), un pipeline de instrucción
de 5 niveles y un pipeline iterativo en la unidad de Multiplicación y División.
Figura 1-7. Pipelines [4]
Las 5 etapas del pipeline de la unidad de ejecución (Figura 1-8) son las siguientes:
1. Búsqueda de Instrucción (Instruction Fetch)
2. Ejecución (Execution)
3. Búsqueda de memoria (Mem Fetch)
4. Alineación de memoria (Align)
5. Escritura en memoria (Writeback)
La Figura 1-8 muestra como las instrucciones (I0, I1, I2, I3, I4) se ejecutan en el
pipeline.
•
Asuma que C1 es el primer ciclo de reloj del CPU. Durante este ciclo, la
instrucción “I0” es tomada de la memoria de programa (Inst Fetch) y resto del
pipeline está vacio.
•
En el siguiente ciclo C2, la instrucción “I0” pasa a la etapa de ejecución (E) y al
mismo tiempo, la siguiente instrucción “I1” es tomada.
•
En el siguiente ciclo C3, “I0” pasa a la etapa M e “I1” pasa a la etapa E y al
mismo tiempo la siguiente instrucción (“I2”) se busca en memoria (etapa I).
Ing. Juan Ramon Terven Salinas
10
1- Introducción
•
En el ciclo C4 ya se tienen 4 etapas del pipeline llenas y en ciclo C5 ya se tiene
el pipeline lleno.
A partir de aquí, el CPU ejecuta una instrucción por cada ciclo de reloj recibido.
Figura 1-8. Pipeline de la unidad de ejecución [4]
Ing. Juan Ramon Terven Salinas
11
1- Introducción
MINI-32
Los PIC32 los encontramos en versiones de 64 pines y 100 pines de montaje
superficial. La Figura 1-9 muestra los empaquetados disponibles.
Figura 1-9. Opciones de encapsulado [5]
Para poder realizar prácticas en una tablilla de pruebas usaremos la tarjeta MINI-32
desarrollada por MikroElectronika (http://www.mikroe.com), mostrada en la Figura
1-10.
Esta mini tarjeta posee un PIC32MX534F064H y los componentes mínimos para
echar a volar nuestro microcontrolador (oscilador de cristal de 8 MHz, oscilador de
cristal de baja velocidad de 32.768kHz, boton de reset, conector USB para grabación y
posible alimentación, LED de alimentación y otros 2 LEDs de uso general).
Figura 1-10. Mini-32 [14]
Ing. Juan Ramon Terven Salinas
12
1- Introducción
La Mini-32 tiene el mismo tamaño que un chip de 40 pines (DIP40) y la podemos
usar en nuestra tablilla de pruebas como si fuera un chip de 40 pines. La Figura 1-11
muestra los pines disponibles y sus funciones.
Es importante mencionar que esta tarjeta viene con un Bootloader grabado con
comunicación USB, de tal forma que no necesitamos un programador de PICs para
hacer nuestras prácticas. Solo requerimos un cable USB con conector mini-B que no
viene incluido en la tarjeta.
Figura 1-11. Pines de la Mini-32 [14]
La Figura 1-12 muestra el diagrama detallado de la tarjeta Mini-32 desarrollada por
Microelectrónica y la Figura 1-13 muestra todos los pines del PIC32MX534F0G4H.
Ing. Juan Ramon Terven Salinas
13
1- Introducción
Figura 1-12. Diagrama detallado de la Mini-32 [14]
Ing. Juan Ramon Terven Salinas
14
1- Introducción
Figura 1-13. Pines del PIC32MX534F064H [9]
Ing. Juan Ramon Terven Salinas
15
Descargar