350 likes | 518 Views
Computadores (TU Sistemas Computacionales). Elementos de estructura de computadores. José Estay A / jea I semestre académico 2014. Registros de funciones especiales SFR. El conjunto archivo de registros está dividido en registros de funciones especiales SFR y registros de propósito general GPR
E N D
Computadores(TU Sistemas Computacionales) Elementos de estructura de computadores José Estay A / jea I semestre académico 2014
Registros de funciones especiales SFR • El conjunto archivo de registros está dividido en registros de funciones especiales SFR y registros de propósito general GPR • Los SFR tienen funciones predeterminadas, especificadas en la hoja de datos del 16F877 figura 2-3, y ocupan las localizaciones 00..1F en banco 0, 80..9F en banco 1, 100..10F en banco 2 y 180..18F en banco 3 • Muchos registros son repetidos en mas de un banco
Program counter: PCL • PCL contiene los 8 bits mas bajos del PC • Los bits superiores (PC 12..8) son accedidos vía PCLATH • El PC es incrementado por cada instrucción y su contenido es reemplazado durante un GOTO, CALL (dirección de programa) o RETURN (stack)
Status Register (Registro de estado) • El registro de estado graba el resultado de ciertas operaciones, el estado de la alimentación e incluye los bits de seleciión de banco • Las funciones de los bits son detalladas en 2.2.2.1 de la hoja de datos
Flag zero (Z) • Este flag es seteado cuando el resultado de una operación de registros es cero, y limpiado cuando no es cero • El set completo de instrucciones debe ser consultado para confirmar cuales operaciones afectan el flag Z • Las instrucciones BIT TEST y SKIP usan este flag para bifurcación condicional, pero hay que recordar que hay instrucciones dedicadas para decrementar o incrementar y brincar si es cero
Carry flag • El flag de carry es solo afectado por las instrucciones de sumar, restar y rotar • Si el resultado de una operación de suma genera un carry, este flag es seteado, esto es, cuando 2 números de 8 bits dan una suma de 9 bits. El bit de carry debe ser incluido en cálculos posteriores a fin de obtener el resultado correcto • En la resta el flag de carry debe estar seteado inicialmente, ya que provee el digito de prestamo (si se requiere) en el bit más significativo del resultado
Si el flag de carry es limpiado después de la resta, significa que el resultado fue negativo, ya que el sustraendo fue mayor que el minuendo. • Tomados juntos, el flag de carry y el de zero permiten detectar si el resultado de una operación aritmética es positivo, negativo o zero, como se muestra en la tabla a continuación:
Acarreo de dígito: DC Digit Carry • Un registro de archivo puede ser visto con un contenido de 8 bits o 1 byte • Puede también ser usado como 2 nibbles • Cada nibble puede representar un dígito HEX (0..F) • DC graba un carry desde el bit más significativo del nibble inferior (bit 3) • De este modo DC permite que se puede llevar a cabo aritmética HEX de la misma manera como la aritmética de 8 bits usa el flag C
Selección de banco de registros • En la MCU ‘F877 el archivo de registros de RAM está dividido en 4 bancos de 128 localizaciones, bancos 0..3 • Al encender el banco 0 es seleccionado por omisión • Para acceder a los otros bancos los bits de selección de bancos deben ser modificados, como se muestra en la tabla a continuación:
Se observa que algunos registros se repiten (mirrored) en más de un banco haciendo más fácil y rápido el acceso a ellos cuando se conmuta a ese banco • Por ejemplo, el registro de STATUS se repite en todos los bancos • Además un bloque de GPRs al final de cada banco se repite, tal que sus contenidos de datos son disponibles sin cambiar de banco • Los bancos de registros son seleccionados con los bits RP0 y RP1 del registro de STATUS. Pero en vez de esto, más convenientemente, la pseudo-operación BANKSEL puede ser usada. • El operando para BANKSEL es cualquier registro en ese banco, o su etiqueta. De hecho BANKSEL detecta los bits del banco en la dirección del registro y los copia en los bits de selección de banco del registro de STATUS
Power status bits • Hay 2 bits de sólo lectura en el reg. de STATUS los cuales indican el estado global de la MCU. • El bit Power Down (PD) es limpiado a cero cuando el modo SLEEP es ingresado • El bit Tome Out (TO) es limpiado cuando el tiempo del WdT ha finalizado
Puertos • Hay 5 puertos paralelo en el ‘F877, rotulados A..E • Todos los pines pueden ser usados como entradas o salidas digitales orientadas al bit o al byte. Sus funciones alternativas son resumidas en la tabla a continuación:
Se observa que muchos de los pines de los puertos tienen 2 o más funciones, dependiendo de la inicialización de los registros de control asociados • Al encender o resetear el sistema, los bits del registro de control de los puertos adoptarán una condición por omisión (ver tabla 2.1 en la hoja de datos, columnas a mano derecha) • Los bits del registro TRIS (Dirección sentido de los datos) en el banco 1 por omisión en 1, seteando así los puertos B, C y D como entradas • Si esto cumple con los requerimientos no es necesaria mas inicialización ya que otros registros de control relevantes son generalmente reseteados para ofrecer I/O digital sencilla por omisión
Sin embargo hay una importante excepción: los puertos A y E son seteados para entrada análoga por omisión, ya que el registro de control análogo ADCON1 en el banco 1por omisión es 0---0000 • Para setear estos puertos como entrada digital, este registro debe ser cargado con el código x---011x (x = don’t care) digamos 06 • Si entrada análoga es requerida sobre solo algunos pines seleccionados, ADCON1 puede ser inicializado con códigos de bit que pueden entregar un mix análogo/digital sobre los puertos A y E • Observe que ADCON1 está en el banco 1tal que BANKSEL es necesario para accederlo
TIMERS TEMPORIZADORES • El ‘F877 posee 3 timers en hwr hoja de datos secciones 5, 6 y 7) • Estos son usados para llevar a cabo operaciones de temporización simultáneamente con el programa • TIMER0 usa un registro de 8 bits, TMR0, registro de archivo dirección 01 • Su salida es un flag de overflow TMROIF, bit 2 del registro de control de interrupciones INTCON, dirección 0B
El registro del TIMER es incrementado vía una entrada del reloj la cual es derivada ya sea desde el oscilador MCU (fOSC) o de un tren de pulsos externos en RA4 • El registro cuenta desde 0 a 255 y luego da la vuelta a 0 nuevamente • Cuando el registro va desde FF a 00, se setea T0IF • Si el reloj interno es usado el registro actúa como un Timer • Cada instrucción en la MCU toma 4 ciclos de reloj para su ejecución, así el ciclo de instrucción es fOSC /4
Los timers son impulsados desde este reloj de instrucción, el cual puede ser monitoreado externamenteen CLKOUT si el chip está operando con un reloj RC • Si es precargado con un valor por ejemplo de 155D, Timer0 contará 100 pulsos de reloj antes que T0IF sea seteado • Si el chip está impulsado por un Xtal de 4 MHz, el reloj de instrucción será de 1 MHz y el Timer se sobrepasará despues de 100 uSeg • Si esto fuera usado para conmutar sobre una salida, una señal con un periodo exacto de 2x100 uSeg será obtenida
Alternativamente, una cuenta de pulsos externos puede ser realizada y leer el registro cuando termine o disparar la lectura por una señal externa • Así los Timers pueden ser usados como contadores • En la hoja de datos se muestra el diagrama de bloques completo del Timer0, el cual muestra un registro de preescala y el timer watchdog • El prescalador es un registro que divide por N, donde N=2, 4, 8, 16, 32, 64. 128 o 256, significando que la razón de la cuenta en la salida es reducida por este factor
El intervalo del timer watchdog también puede ser extendido si este es seleccionado como el reloj fuente • Los bits de selección de preescala y otros bits de control para el Timer0 se encuentran en OPTION_REG • Algunos valores típicos de configuración del Timer0 se muestran en la tabla a continuación:
Timer1 es un contador de 16 bits, que consiste de un TMR1H y un TMR1L (0E y 0F) • El máximo conteo es de 6553610 • Timer2 es un contador de 8 bits – TMR2 – con un preescalador de 4 bits, un posescalador de 4 bits y un comparador • Puede ser usado para generar PWM
Direccionamiento registro archivo indirecto • El registro de archivo 00 (INDF) es usado para direccionamiento registro indirecto • La dirección del registro es puesta en el registro seleccionador FSR • Cuando el dato es escrito o leído desde INDF es realmente escrito o leído desde el registro de archivo apuntado por FSR • Esto es muy usual para extraer una lectura o escritura de un bloque continuo de GPRs, por ejemplo cuando se salva los datos que están siendo leídos desde un puerto sobre un periodo de tiempo • Ya que 9 bits son necesarios para direccionar todos los regsitros (000-1FF), el bit IRP en el regsitro de estado es usado como un bit extra
Registros de control de interrupción • Los registros involucrados en el manejo de una interrupción son: INTCON, PIR1, PIR2, PIE1, PIE2 y PCON • Una INT en el PIC resulta siempre en un salto a la dirección de código 004 • Si hay mas de una fuente de interrupción, entonces la fuente debe ser detectada y la correspondiente ISR seleccionada • Por omisión las INT están deshabilitadas tal que los programas pueden ser cargados con su ORG en 0000 y el significado de la dirección 0004 puede ser ignorado
Si INT van a ser usadas la dirección del MAIN debe estar en 0005, o superior y un GOTO START puesto en la dirección 0000 • Un GOTO ISR puede ser puesto en la dirección 0004 usando la directiva ORG la cual establece la dirección en la cual la instrucción será puesta por el Assembler • El bit Global Interrupt Enable (INTCON, GIE) debe ser seteado para habilitar el sistema de interrupción • Por ejemplo, el bit INTCON, T0IE, es seteado para habilitar para que un rebalse del Timer0 dispare la secuencai de interrupción • Cuando el Timer0 se rebalsa, INTCON, T0IF (Timer0 Interrupt Flag) se setea para indicar la fuente de la interrupción y la ISR es así llamada
Los flags pueden ser verificados por la ISR para establecer la fuente de la INT, si mas de una está habilitada • Una lista de fuentes de interrupción y sus bits de control se muestran en la tabla a continuación:
Las fuentes de INT primarias son el Timer0 y el puerto B • La entrada RB0 es usada para interrupción simple • Pines RB4..RB7 pueden ser seteados tal que cualquier cambio en estas entradas inicia una INT • Esto puede ser usado para detectar cuando un botón o una tecla conectada al puerto B ha sido presionada, y la ISR procesa entonces la entrada correspondientemente • Las restantes fuentes de INT son habilitadas por el bit Peripheral Interrupt Enable (INTCON, PEIE)
Estos son individualmente habilitados y asociados a un flag en PIE1, PIE2, PIR1 y PIR2 • El diseñador debe decidir sobre la prioridad de las INT • La profundidad limitada del stack en el PIC debe se tomada en cuenta especialmente si varios niveles de subrutinas son implementados así como múltiples interrupciones
Registros de control de periféricos • La función de la mayoría de los bloques periféricos y sus configuraciones deben ser estudiadas y analizadas en la hoja de datos del F877 y en los múltiples ejemplos que se encuentran en bibliografía • El único periférico que no requiere de conexiones externas es la EEPROM • Este es un bloque de memorias R/W no volátil el cual almacena datos durante un power-down, por ejemplo un código de seguridad o una combinación para un candado electrónico • Un set de registros en el banco 2 y 3 son usados para acceder a esta memoria
Fin TUSistComp_Comp06 JEA/jea