Sainz de Murieta Mangado, Joseba Andoni Sainz de Murieta Mangado, Joseba Andoni Departamento de Ingeniería de Sistemas y Automática Departamento de Ingeniería de Sistemas y Automática ARQUITECTURA ARQUITECTURA eman ta zabal zazu Hay dos cosas infinitas: el Universo y la estupidez humana. Y del Universo no estoy seguro. Albert Einstein
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Sainz de Murieta Mangado, Joseba AndoniSainz de Murieta Mangado, Joseba AndoniDepartamento de Ingeniería de Sistemas y AutomáticaDepartamento de Ingeniería de Sistemas y Automática
ARQUITECTURAARQUITECTURA
eman ta zabal zazu
Hay dos cosas infinitas: el Universo y la estupidez humana. Y del Universo no estoy seguro.Albert Einstein
Las CPU´s atendiendo al tipo de instrucciones que utilizan pueden clasificarse en:
CISC: (Complex Instruction Set Computer) Computadores de juego de instrucciones complejo, que disponen de un repertorio de instrucciones elevado (unas 80), algunas de ellas muy sofisticadas y potentes,
pero que como contrapartida requieren muchos ciclos de máquina para ejecutar las instrucciones complejas.
RISC: (Reduced Instruction Set Computer) Computadores de juego de instrucciones reducido, en los que el repertorio de instrucciones es muy reducido (en nuestro caso 35), las instrucciones son muy simples
y suelen ejecutarse en un ciclo máquina. Además los RISC deben tener una estructura pipeline y ejecutar todas las instrucciones a la misma velocidad.
SISC:(Specific Instruction Set Computer) Computadores de juego de instrucciones específico.
La CPU está conectado a dos memorias por medio de dos buses separados.
Una de las memorias contiene solamente las instrucciones del programa, y es llamada Memoria de Programa.
La otra memoria solo almacena los datos y es llamada Memoria de Datos.
Los microcontroladores PIC tienen una memoria de datos de 8 bits, y una memoria de programa que, según el modelo, puede ser de 12 bits, 14 bits y 16 bits, siendo en los de gama media de 14 bits.
Quiere decir que aplica la técnica de segmentación que permite al procesador realizar simultáneamente la ejecución de una instrucción y la búsqueda de código de la siguiente. De esta manera, se puede ejecutar una instrucción en un ciclo. (Cada ciclo de instrucción son cuatro ciclos de reloj).
Cualquier instrucción puede utilizar cualquier elemento de la arquitectura como fuente o destino.
Arquitectura basada en banco de registros:
Implica que todos los elementos del sistema, es decir, temporizadores, puertos de entrada/salida, posiciones de memoria, etc, están implementados físicamente como registros.
En la figura se muestra como la ALU (Unidad Aritmético-Lógica) efectúa sus operaciones con dos operandos, uno que proviene del registro W (Work
VDD Es la alimentación, que puede ser de 2V a 6V.VDD
es el terminal positivo.
MCLR Es el Reset del microcontrolador (Master Clear)
OSC1/CLKIN OSC2/CLKOUT Son los terminales para la conexión del oscilador externo que proporciona la frecuencia de trabajo o frecuencia del reloj principal.
RA0-RA45
PORTA - Puerto de Entrada/Salida (I/O Port)TOCK1 – Entrada del contador temporizador TMR0
RB0-RB78
PORTB -
Puerto de Entrada/Salida (I/O Port)INT – Entrada de interrupción externa
El circuito oscilador interno se emplea para generar el reloj del dispositivo. Este reloj es el que se emplea para ejecutar las instrucciones y hacer funcionar a los diversos periféricos.
Cada cuatro ciclos de reloj, se genera un ciclo de instrucción.
Existen hasta ocho modos de configurar el oscilador. Esta configuración se realizará mediante los bits de configuración.
Existen dos modos que permiten direccionar la salida del oscilador interno (CLKOUT) hacia uno de los pines de salida.
Los modos del oscilador son:
LP: Cristal de baja frecuenciaXT: Cristal / ResonadorHS: Cristal / Resonador de alta frecuenciaRC: Célula R-C externa (con CLKOUT)EXTRC: Célula R-C externaEXTRC: Célula R-C externa con CLKOUTINTRC: Célula R-C interna de 4MHzINTRC: Célula R-C interna de 4MHz con CLKOUT
En los modos XT, LP o HS se conecta un cristal o un resonador cerámico a los pines OSC1/CLKIN y OSC2/CLKOUT para establecer la frecuencia de reloj de trabajo.
En los modos XT, LP o HS se puede emplear una señal de reloj externa para gobernar el funcionamiento del oscilador interno.
Oscilador: Célula R-C
En aplicaciones insensibles al tiempo puede emplearse una solución económica para establecer la frecuencia de reloj mediante el empleo de una célula R-C.
La frecuencia del oscilador vendrá determinada por la tensión de
alimentación, el valor de la resistencia, el valor del condensador y la temperatura de trabajo.
El oscilador R-C interno (no en todos los dispositivos de la gama media) proporciona una señal de reloj fija de 4MHz a Vdd=5V y 25ºC.
Se emplea el registro OSCCAL para sintonizar la frecuencia del oscilador interno.
Bit 7:4 CAL3:CAL0. Bits de calibración del oscilador RC interno0000= Frecuencia más baja del rango...1111= Frecuencia más alta del rango
Bit 3 CALFST: Bit de compensación (offset) del rango de osc.1= Incrementa la frecuencia del oscilador en el rango CAL3:CAL00= No se aplica compensación
Bit 2 CALFST: Bit de compensación (offset) del rango de osc.1= Decrementa la frecuencia del oscilador en el rango CAL3:CAL00= No se aplica compensación
Cada uno de estos bloques dispone de su propio bus (arquitectura Harvard) de forma que el acceso a ambos bloques puede tener lugar durante el mismo ciclo de oscilador.
Los PIC de gama media disponen de un contador de programa de 13 bits capaz de direccionar un espacio de memoria de 8K x 14.
La anchura del bus de la memoria de programa es de 14-bits. Esta es la longitud de una instrucción y dado que en estos microcontroladores todas las instrucciones son de palabra simple, el espacio disponible es de 8K de instrucciones.
La memoria de programa se encuentra dividida en cuatro
páginas de 2K-words
cada una de ellas.
Para moverse entre páginas de memoria será necesario modificar los bits altos del PC lo cual se realizará escribiendo
el valor deseado en un SFR llamado PCLATH (Program
Counter
Latch
High).
En una ejecución de programa secuencial, será el propio PC el encargado de saltar de página sin necesitar de la intervención del usuario.
Este es el motor que hace que el programa avance, y que después de ejecutarse una instrucción, vaya a la siguiente, o a la que la instrucción anterior indica
000H
3FFH
004H
Vector Reset
Vector Interrupción
RI (Registro de Instrucciones)
14
13
Nivel 1
Nivel 8
13
PilaLIFO
Apunta al principio del programa después de
encenderse o resetearse
Cuando a través de una instrucción, ejecutamos un subproceso o subrutina, el contador de programa (PC) dejará de contar en su curso habitual e irá a la posición de memoria de programa donde empieza esta
subrutina; en el primer nivel de la pila se almacenará esta llamada, hasta que se acaben de ejecutar las
instrucciones que contiene, momento en el cual se recogerá y seguirá con las instrucciones normales a partir de la llamada.Las instrucciones son de 14 bits
Algunos de los microcontroladores de la gama media, poseen una memoria de programa superior a 2K-words, pero las instrucciones CALL y GOTO solamente tienen un rango de 11 bits, es decir, solo
tienen capacidad de direccionar saltos dentro de una página de 2K-words.
Para solucionar esto se emplean los bits 4 y 3 del PCLATH de forma que permiten direccionar la página de memoria deseada.
Es decir, antes de ejecutar una instrucción CALL o GOTO, el usuario debe asegurarse de que estos bits del PCLATH están direccionando
la página deseada.
Al regresar de la subrutina, no es necesario manipular el PCLATH
ya que son recuperados
del STACK los 13 bits del contador de programa.
Ejemplo:
Llamada desde la página 0 a una subrutina situada en la página 1.
La memoria de datos se encuentra dividida en diferentes bancos, siendo necesario manipular una serie de bits de control del registro STATUS para conmutar entre estos bancos de memoria.
16F84
Dos bancos de datos o páginas de 128 registros de 8 bits cada uno.El PIC16F84 usa:
Los 80 primeros de la página “0” (00h al 4Fh)Los 12 primeros de la página “1” (80h al 8Bh)
Los primeros 12 registros de ambas páginas son específicos (SFR) y los 68 restantes, solo en la página 0 son de propósito general (GPR).
La memoria RAM así como algunos registros especiales son los mismos en los dos bancos del mapa de memoria del PIC. La anchura de los registros en la memoria es de 8 bis.
Para mover un valor de un registro a otro registro, se ha de pasar a través del acumulador (W), por lo que los movimientos de datos de un registro a otro requerirán de dos ciclos de instrucción.
Direccionamiento:
A la memoria de datos se puede acceder de forma directa o indirecta.
Direccionamiento directo:Requiere el empleo de los bits RP1:RP0 del registro STATUS.
Un tanque de fuel con capacidad de 255 litros dispone de un sensor que transmite al microcontrolador la capacidad remanente y la guarda en el byte FUEL.
Se desea escribir una rutina que active el bit 0 del byte ALARMA
cuando el nivel del tanque sea menor o igual a 20 litros y que active el bit 1 de este mismo byte cuando el nivel sea menor o igual a 5 litros.
Compuesta por una serie de registros de 8bits cada uno (64 registros en el 16F84 del 00h al 3Fh).
Está situada en un bloque distinto y aislado de la de programa.
Este tipo de memoria permite 1 millón de ciclos de escritura y es capaz de guardar la información más de 40 años, sin necesidad de ningún recurso externo.
No se puede acceder directamente a estos registros, sino que hay
que emplear registros especiales específicos (EEDATA, EEADR, EECON1, EECON2).
EEDATAContiene los 8 bits a leer o escribir en la EEPROM
EEADRContiene los dirección de la EEPROM a la que se quiere acceder.
EECON1Contiene los bits de control.
EECON2Habilita la lectura o escritura en la EEPROM
Interrupciones:Para poder hacer uso de las interrupciones es necesario activar el bit
GIE (Global Interrupt
Enable) del registro INTCON. De esta forma se habilitan todas las interrupciones no enmascaradas.
Además, es necesario habilitar individualmente cada uno de los periféricos que queramos usar como fuente de interrupción mediante su correspondiente bit
de habilitación (ENABLE).
Cuando un determinado periférico provoque una interrupción, lo hará poniendo a "1" su bit
de FLAG, el cual será necesario volver a poner a "0" por software antes de regresar al programa principal.
Cuando se dispara una interrupción programada, el microcontrolador responde de la siguiente forma:
•
Se pone a cero el bit
GIE. (Impidiendo así que una segunda interrupción interrumpa a la primera)
•
La CPU termina de ejecutar la instrucción en curso.
Para gestionar las interrupciones, será necesario usar, como mínimo un registro de control que recogerá los bits de flag
de las interrupciones internas del dispositivo.
Este registro se denomina:
INTCON (Interrupt
Control Register)
Además, si el dispositivo reconoce interrupciones asociadas a periféricos, será necesario emplear otros registros de control destinados a habilitar o deshabilitar las interrupciones y a guardar los bits de flag.
Bit1= La operación de escritura en la EEPROM se ha completado 0= La operación de escritura en la EEPROM no se ha completado
Bit 3 BCLIF: Bus Collision
Interrupt
Flag
Bit1= Se ha producido una colisión de bus en el módulo SSP configurado en modo I2C maestro0= Se ha producido una colisión de bus
Bit 2 Uninplemented
Bit 1 Uninplemented
Bit 0 CCP2IE: CCP2 Interrupt
Enable
BitModo Capture1= Se ha producido una captura del TIMER10= No se ha producido una captura del TIMER1Modo Compare1= Se ha producido una coincidencia del TIMER10= No se ha producido una coincidencia del TIMER1Modo PWM: No se utiliza
Cuando se produce una interrupción, el microcontrolador guarda en el STACK la dirección de retorno del programa.
Generalmente, es necesario también hacer una copia de los valores de los registros clave como por ejemplo el acumulador (W) o el registro STATUS. Esta copia se deberá implementar por software.
A esta acción de guardar información se la conoce normalmente como PUSH mientras que a la acción de recuperar la información guardada se la denomina POP.
Estos no son mnemónicos de instrucciones sino acciones conceptuales y se realizan programando una secuencia de instrucciones o realizando segmentos de código almacenados como macros.
Copia del contexto ante una interrupción:LIST P=16F84include <p16f84.inc>
WBuffer equ 0x0cStatBuffer equ 0x0dpush macro
movwf WBuffer ;guarda el acumuladorswapf WBuffer, F ;intercambia los nibblesswapf STATUS,W ;obtiene el STATUS alteradomovwf StatBuffer ;lo guarda en StatBufferendm
pop macroswapf StatBuffer,W ;restablece el registro STATUSmovwf STATUS ; /swapf WBuffer,W ;restablece el acumuladorendmorg 0x00goto Inicio ;salta el vector de interrupciónorg 0x04pushcall rsi ;llama a la rutina de serviciopopretfie
Inicio ........movlw b’11111000’ ;Máscara para habilitar todas las movwf INTCON ;interrupciones del reg. INTCON........
bucle ................goto bucle ;Bucle del programa principal
Es necesario emplear la instrucción SWAPF ya que ésta no modifica
ninguno de los flag
del registro
STATUS.
Si empleáramos la instrucción MOVF se modificaría el flag
rsi btfsc INTCON,RBIF ;Testea la interrupción RB4:RB7call rsi_rbbtfsc INTCON,INTF ;Testea la interrupción externa INTcall rsi_intbtfsc INTCON,T0IF ;Testea la interrupción del timer 0call rsi_tmr0return
rsi_rb ..............................bcf INTCON, RBIF ;Restaura el flag de la interrupciónreturn
rsi_int ..............................bcf INTCON, INTF ;Restaura el flag de la interrupciónreturn
rsi_tmr0 ..............................bcf INTCON, T0IF ;Restaura el flag de la interrupciónreturn
Si se encuentran habilitadas varias interrupciones, será necesario testear el registro INTCON para saber cual de las posibles interrupciones ha sido la que ha provocado la ruptura de la ejecución cíclica del programa principal.
Una vez identificada la interrupción, se ejecutará la subrutina correspondiente reactivando el flag
de interrupción antes de regresar.
Sainz de Murieta Mangado, Joseba AndoniSainz de Murieta Mangado, Joseba AndoniDepartamento de Ingeniería de Sistemas y AutomáticaDepartamento de Ingeniería de Sistemas y Automática
ARQUITECTURAARQUITECTURA
eman ta zabal zazu
Hay dos cosas infinitas: el Universo y la estupidez humana. Y del Universo no estoy seguro.Albert Einstein