Está en la página 1de 11

MICROPROCESADORES Y MICROCONTROLADORES

I Introducción a los microprocesadores (MPU) y los micro controladores (MCU)

Breve bosquejo histórico

La empresa norteamericana Intel está estrechamente vinculada con la historia de los


MPU y los MCU, a comienzos de la década de los años 70, sus ingenieros se enfocaron
a desarrollar un circuito integrado según las especificaciones de un cliente (todo
proyecto nace de una necesidad, si no hay necesidad no hay proyecto).

Especificaciones:

Un solo circuito integrado


Con lógica de control para manejar datos de entrada/salida
Con registros internos
Que realizara operaciones aritméticas en código BCD

En esas fechas ya existían los circuitos integrados de aplicación específica, tales como
circuitos con compuertas, sumadores, registros de corrimiento, memorias, etc., pero el
cliente quería todo en un solo circuito integrado.

Así, en 1971 surge el chip de calculadora 4004 que reemplazaba a seis circuitos
integrados de aplicación específica. El cuatro en la denominación indicaba que el
circuito integrado procesaba 4 bits simultáneamente.

Se había logrado claridad en cuanto al principio de operación del circuito, había


comenzado una nueva era, ya que necesidades posteriores se fundamentaron en el
diseño y principios de operación originales del chip de calculadora 4004.

Evolución: Costo

1971: 4004 => 4 bit y lo especificado por el cliente original 300 dólares Cap. X

1972: 8008 => 8 bits + lo del 4004 + códigos alfanuméricos

1974: 8080 => 8 bits + lo del 8008 + operaciones lógicas

1976: 8085 => 8 bits + lo del 8080 + otras funciones (mejora)

1978: 8086=> 16 bits + lo del 8085 3 dólares Cap. 100 X

Comparando los datos en cuanto a costo y capacidad entre 1971 y 1978, se ve


claramente que se había trascendido de la “invención” a la “innovación”, es decir, “un
producto apto para el mercado”. Si un producto no es apto para el mercado, por más
intelecto, genialidad, y esfuerzo empeñado no sirve.

Hoy hay microprocesadores de 32 y 64 bits multifuncionales aptos para el mercado


Elementos de una computadora (modelo de von Neumann)

Unidad aritmética
y lógica (ALU)

Unidad de Unidad de
Unidad de
memoria salida
entrada

Unidad de
Control

El Microprocesador.

La unión de la unidad de control y la unidad aritmética y lógica, junto con algunos


registros de transferencia (no indicados en el diagrama a bloques), forman la unidad
central de proceso o CPU de una computadora.

El concepto de CPU nace con las computadoras electrónicas de la primera generación


de la electrónica, fabricadas a base de tubos de vacío.

El concepto de microprocesador nace con las computadoras de la tercera generación


de la electrónica, fabricadas a base de circuitos integrados.

Por lo tanto: un microprocesador (MPU) es un CPU integrado.

La arquitectura interna de un microprocesador varia ampliamente entre los diferentes


fabricantes, sin embargo, constan básicamente de las mismas partes.

Sistema con base en microprocesador (MPU)

Bus de Direcciones

RAM ROM UNIDADES


FLASH EPROM DE E/S
MPU
(CPU)

Bus de Datos

Bus de Control
En el sistema anteriormente expresado, las memorias y las unidades de entrada/salida,
son circuitos integrados independientes, así como el microprocesador (MPU). Ejemplos
de unidades de entrada/salida son PIA, ACIA, UART, USART, etc., conectados mediante
tres medios:

Bus de direcciones: Para direccionar el circuito a acceder


Bus de Control: Para dar orden de acceso a los circuitos seleccionados
Bus de Datos: Para mandar/recibir datos vía memorias o unidades de entrada/salida

El Micro controlador.

Si todo el sistema anteriormente descrito se integra en un solo circuito integrado, se


genera un micro controlador.

Micro controlador: Sistema completo que incluye en un solo chip:

MPU (CPU)
Memoria (ROM, RAM, EPROM, E2PROM, FLASH)
Oscilador y reloj internos
Puertos de entrada/salida paralela
Puertos de entrada/salida serie asíncrona y síncrona
Unidad de tiempo (temporizadores)
Convertidor Analógico-Digital (ADC)
Convertidor Digital Analógico (DAC)
Sensores
Protocolos de comunicación, etc.

Un micro controlador varia en costo y aplicación según los atributos con los que
cuente, pero debe incluir al menos el MPU y los puertos de entrada/ salida

II Arquitectura y Funcionamiento de un MPU

Las señales.

Señal: Cualquier magnitud física que contiene algún tipo de información.

Para los sistemas digitales: magnitud física de naturaleza eléctrica codificada en código
binario y normalizado en unidades llamadas palabras.

Las instrucciones.

De transferencia (para mover información de un lado a otro sin cambiarla)


De procesamiento (para procesar información cambiando su contenido)
De control (para bifurcaciones condicionadas y no condicionadas)
Forma.

Las primeras computadoras se programaban en “lenguaje de máquina” que es un


código binario que ejecuta directamente la computadora; posteriormente, se
generaron los “lenguajes ensambladores” que son lenguajes de programación que
permiten escribir instrucciones en forma simbólica (nemónicos) utilizando nombres
fácilmente recordables que se dan a las opresiones que efectúan.

La característica de los lenguajes ensambladores es que son propios de cada


microprocesador, es decir, cada fabricante genera su propio lenguaje ensamblador, y
por ende, no son universales. Para generar de alguna manara aplicaciones universales,
se crearon los llamados lenguajes de alto nivel, los cuales son universales y se pueden
aplicar a cualquier microprocesador siempre y cuando éste tenga el compilador
correspondiente para el lenguaje de alto nivel a emplear.

En el curso emplearemos tanto el lenguaje ensamblador del microprocesador como el


lenguaje “C” de alto nivel.

El lenguaje ensamblador es necesario para entender cabalmente el funcionamiento y


la arquitectura interna del micro controlador.

Programa Programa Programa en


en lenguaje lenguaje de
Fuente
ensamblador alto nivel
(assembly)

Programa Ensamblador
Traductor (assembler) Compilador

Programa en Programa en
Programa
lenguaje de lenguaje de
Objeto
máquina máquina

En el diagrama a bloques anterior, se destaca que finalmente la información se procesa


en lenguaje de máquina, es decir, en código binario, ceros y unos o sea voltaje y no
voltaje.
III Modos de direccionamiento y conjunto de instrucciones

Especificaciones del micro controlador.

Núcleo: ARM CortexTM-M4

MPU: TM4C1294NCPDT (de Texas Instruments)

Arquitectura: Harvard tipo CISC

Longitud de palabra: 32 bits dirección-hables cada 8 bits

Lenguajes de programación: Ensamblador y “C” con instrucciones ortogonales

Tarjeta de desarrollo: TIVATM C Series TM4C1294 (de Texas Instruments)

Voltaje de operación: 2.97 ≤ V ≤ 3.63 volts

Nomenclatura.

Ver, por favor, la página 1855 de la hoja de datos (Data Sheet)

Modelo de programación.

Es la arquitectura interna del microprocesador, donde residen la Unidad Aritmética y


Lógica (ALU), la Unidad de Control y los Registros de Transferencia mencionados
anteriormente.

Ver, por favor, el modelo de programación en las páginas 86 y 87 de la hoja de datos


(Data Sheet)

Registros:

R0 a R12: Registros de propósito general de 32 bits cada uno, contienen datos o


direcciones de memoria cuando funcionan como apuntadores.

R13: Apuntador de pila (Stack Pointer), consta de dos formas:

Apuntador de pila principal (main stack pointer o MSP) para operación del software del
sistema.
Apuntador de pila de proceso (process stack pointer o PSP) para operación del
software de usuario (externo).

Sólo un apuntador de pila esta activo a la vez, en nuestro caso, siempre se considera el
MSP.

Al hablar de un apuntador de pila, tenemos que definir la pila a la que apunta, ahora
bien, la pila o Stack es una región definida en la memoria del micro controlador, de
propósito específico y acceso aleatorio, en donde el apuntador se decrementa o
incrementa automáticamente según si los datos entran o salen de la pila.

En general, un apuntador se define como un registro de 32 bits que contiene la


dirección de alguna localidad de memoria a la que apunta, para posteriormente,
introducir o sacar datos de dicha localidad.

Memoria

RX: Dirección de memoria Dato

R14: Registro de liga (Link Register), almacena la dirección de retorno al programa principal de
una subrutina o interrupción.

R15: Contador de programa (Program Counter), apunta a la instrucción en curso del programa.

Registros especiales:

PSR: Registro de estados del programa (Program Status Register) o registro de banderas

31 0

PSR

El PSR es un registro de 32 bits que se puede invocar en tres formas:

APSR: (Aplication Program Status Register)


IPSR: (Interrupt Program Status Register)
EPSR: (Execution Program Status Register)

Como APSR, los bits 31 al 27 ocupan las banderas N, Z, V, C y Q respectivamente, el


resto se considera Reservado.

N=1 si el resultado de la última operación efectuada fue negativo


Z=1 si el resultado de la última operación efectuada fue cero
V=1 si el resultado de la última operación produjo un sobre flujo para valores signados
C=1 si el resultado de la última operación produjo un acarreo para valores no signados
Q=1 si se produjo una saturación con instrucciones *SSAT y USAT

* Limitan los resultados a los valores máximo y mínimo signados y no signados


permitidos por la capacidad de los registros en lenguaje de alto nivel.
Como IPSR, los bits 0 al 7 ocupan el número de interrupción (ISR-Number), asociado al
tipo y fuente de interrupción, el resto se considera reservado.

Como EPSR, los bits 31 a 27 se consideran reservados, los bits 26 y 25 ocupan las
banderas ICI/IT respectivamente, ICI es “instrucciones e interrupciones continuas”, IT
es “instrucciones del tipo Si-Entonces en lenguaje C”, el bit 24 es siempre 1 e indica
que el microprocesador ejecuta el set de instrucciones corto (Thumb Instructions), los
bits 23 a 16 se consideran reservados incluyendo los bits 19 a 16 (GE), los bits 15 a 10
ocupan también las banderas IC/IT respectivamente y los bits 9 a 0 se consideran
reservados para ésta invocación.

Estos registros se pueden acceder individualmente o en conjunto como PSR, en cuyo


caso sólo los bits 23 a 16 y 8 a 9 se consideran reservados.

Registros de máscaras de interrupción.

Son tres registros de 32 bits cuyas funciones son las siguientes:

31 567 0

PRIMASK: Sólo se ocupa el bit 0


Si este =1 => interrupciones globales no permitidas
Si este =0 => interrupciones globales permitidas

FAULTMASK: Sólo se ocupa el bit 0


Si este =1 => interrupciones globales y por error de usuario no permitidas (Fault)
Si este =0 => interrupciones globales y por error de usuaria permitidas (Fault)

BASEPRI: Sólo se ocupan los bits 5, 6 y 7, para definir la prioridad en la ejecución del
software, en donde 000 es la más alta prioridad y 111 es la última prioridad.

Al reset, el valor de los tres registros anteriores es 0

CONTROL: Registro de 32 bits que proporciona el orden y la vía de ejecución de las


instrucciones, es decir, determina quién, cuándo y por donde se efectúan los comandos, es el
“director de tráfico” del sistema.

Mapa de memoria TM4C1294NCPDT.

Las direcciones de memoria se especifican como números de 32 bits en notación hexadecimal,


de la dirección 0x00000000 a la 0xFFFFFFFF mapeados de la siguiente manera:

La memoria se puede direccionar para longitudes de palabra de 8, 16 o 32 bits, cundo se


direcciona para 16 o32 bits de longitud de palabra, el PC (contador de programa) tendrá un
avance siempre par.
0x00000000
1024K Flash/ROM

0x000FFFFF

0X20000000
256K SRAM
0X2003FFFF

0X40000000

I/O PORTS
0X400FFFFF

0XE0000000
Internal I/O
Private Peripheral
Bus PPB
0XE0041FFF

0XFFFFFFFF

Modos de Operación
ARM ISR-NUMBER
Foreground (main program) => Thread mode 0
Background (interrupt service routine) => Handler mode X

El programa automaticamente pasa de un modo de operación a otro, de modo que el


cambio es transparente para el usuario.

Lenguaje Ensamblador

Como ya se había mencionado, los lenguajes ensambladores son lenguajes de


programación que permiten escribir instrucciones en forma simbólica (nemónicos)
utilizando nombres fácilmente recordables que se relacionan con las opresiones que
efectúan, dichos nemónicos de derivan del lenguaje original, inglés normalmente.

Formato de las instrucciones: Consta de cuatro campos

Etiqueta Código de Operación Operando Comentarios

INI Instrucción (operador) , Datos a ser procesados ; Libre Doc. Propia

Los campos del Código de Operación y Operando son obligatorios, mientras que los
campos de Etiqueta y Comentarios son opcionales a elección y conveniencia del
programador y el proceso a controlar.
Para aplicar el formato de las instrucciones, se definirán los llamados Modos de
Direccionamiento

Modos de Direccionamiento.

Es el formato de las instrucción usado para especificar la localidad de memoria para la


lectura o escritura de datos, se asocia con el campo del operando.

Inmediato.

El dato a ser procesado reside en la instrucción misma

# implica direccionamiento inmediato

El operando se procesa en hexadecimal (0x…) aunque se especifique en otra base, por


ejemplo en la instrucción MOV R0, #100; 100 se especifica en decimal, pero el
microprocesador lo procesa en hexadecimal.

De forma tal que si, por ejemplo, la instrucción está grabada en la dirección 0x0…0268,
significa “mueve al registro R0 el número 0x64, ya que 100 10 = 6416 (operando).
F04F es el código de la instrucción MOV R0 en forma inmediata (operador).
Así, el dato a ser procesado reside en la instrucción misma.

*En cambio, la instrucción MOV R0, #0x100; mueve al registro R0 el numero 100 16

EEPROM R0= 00000064 (MOV R0, #100)

PC = 0x00000268 F04F0064

*R0= 00000100 (MOV R0, #0x100)


--- 32 bits ---
Indexado.

Un registro apunta a la dirección de memoria donde reside el dato a ser procesado.

LDR R0, [R1]; R0 se carga con el dato que reside en la dirección de memoria que
apunta R1, así, si R1 apunta a la dirección de memoria 0x20000004, y el contenido de
esta es, por ejemplo, 2F6A, entonces R0= 0x00002F6A.

En este caso, el código de operación (operador) está en la dirección que apunta el PC


en memoria EEPROM, y el dato a ser procesado (operando) está en la dirección que
apunta el Registro R1 en memoria RAM.

Indexado con offset.

Un registro apunta a una dirección de memoria, y el dato a ser procesado reside en la


dirección que apunta dicho registro más un offset.
LDR R0, [R1, #4]; R0 se carga con el dato que reside en la dirección de memoria que
apunta R1 + 4, así si R1 apunta a la dirección de memoria 0x20000004, el registro R0 se
carga con el contenido de la dirección 0x20000004 + 4 = 0x20000008, y si el contenido
de ésta es, por ejemplo, 0x2FFA96AC, entonces R0= 0x2FFA96AC.

En este caso, el código de operación (operador) está en la dirección que apunta el PC


en memoria EEPROM, y el dato a ser procesado (operando) está en la dirección que
apunta el Registro R1 + 4 en memoria RAM.

R1 conserva su valor original

Indexado con pre incremento.

LDR R0, [R1, #4]! ; primero R1 se incrementa en 4, entonces R0 se carga con el dato
que reside en la dirección de memoria que apunta R1 sin incremento

Indexado con pos incremento.

LDR R0, [R1], #4; primero R1 se carga con el dato que reside en la dirección de
memoria que apunta R1, entonces R1 se incrementa en 4

Indexado vía registros.

LDR R0, [R1, R2]; R0 se carga con el dato que reside en la localidad de memoria que
apunta R1 + R2

Registro.

Los datos a ser procesados y los resultados de las instrucciones residen en los registros

MOV R2, R1; Se copia el contenido de R1 a R2; R1 conserva su valor

ADD R2, R0; Suma el contenido de R0 a R2, R2 = R2 + R0; R2 pierde su valor original

ADD R2, R0, R1; Suma el contenido de R0 + R1 a R2; R2 = R0 + R1 tanto R1 como R0


conservan sus valores

Registro lista.

Las instrucciones “PUSH” y “POP” que atañen a la pila del stack, operan sobre un
registro o sobre una lista de registros: Sabemos que SP = R13, LR = R14, PC = R15

PUSH LR; Salva a LR en la pila del stack

POP LR; Recupera a LR del stack con su valor original

PUSH R1-R3, LR; Salva a R1, R2, R3 y LR en la pila del stack

POP R1- R3, PC; Recupera R1, R2, R3 y PC con sus valores originales
Realizar los siguientes ejercicios, considerar una longitud de palabra de 32 bits para el
área de datos de memoria RAM

EEPROM xxxxxx = código de operación

PC 0x00000144 xxxxxx

a) LDR R0, [R1, #4]!


b) LDR R0, [R1], #4

RAM Para ambas instrucciones, determinar el


R1 0x20000004 DATO el orden de almacenamiento del dato y
en donde se almacena el dato

Si R1 = 0x20000004 y R2 = 0x0000000C
Y se tiene la instrucción LDR R0, [R1, R2]
Determinar la dirección de la cual se cargara el dato y en donde se almacenara

Notas: 1 Recordar que en hexadecimal los número 0 al 9 son igual que en decimal
2 Cada digito hexadecimal ocupa 4 bits, por lo tanto 8 caracteres
hexadecimales abarcan 32 bits
3 La memoria normalmente se direcciona cada 16 o 32 bits, lo que ocasiona
que el PC tenga un avance siempre par
4 El microprocesador siempre procesa los datos en hexadecimal

También podría gustarte