Está en la página 1de 51

ING.

JOSE ESTRADA MONTES


Manejo de Puertos
ENTRADAS ANÁLOGAS
Y ENTRADAS/SALIDAS
DIGITALES (PUERTO B)

ING. JOSE ESTRADA M.


Manejo de Puertos
LEDS EN EL EXPLORER-16
(PUERTO A)

ING. JOSE ESTRADA M.


Manejo de Puertos
AD1PCFG

TRISB

PORTB PUERTO B
ING. JOSE ESTRADA

LATB

ODCB

ING. JOSE ESTRADA M.


Manejo de Puertos

AD1PCFG

El registro
AD1PCFG Configura TRISB
los pines del
microcontrolador
PORTB PUERTO B
como ANALOGICO ING . JOSE ESTRADA

O DIGITAL
LATB

ODCB

ING. JOSE ESTRADA M.


Manejo de Puertos

AD1PCFG
Después de configurado
como digital El registro TRISB
TRISB configura al pin
de puerto del
microcontrolador PORTB PUERTO B
como ENTRADA O ING. JOSE ESTRADA

SALIDA LATB

ODCB

ING. JOSE ESTRADA M.


Manejo de Puertos
Con un “1” en la posición de bit correspondiente en AD1PCFG es
programado como modo digital y un “0” como un canal de modo análogo.
TRISB en modo digital con donde un “1” programa el puerto como
entrada y un “0” como salida y solo será “1” cuando AD1PCFG este
programado en modo análogo.

ING. JOSE ESTRADA M.


Manejo de Puertos

AD1PCFG
PORTB y LATB tienen
funciones similares
TRISB

PORTB PUERTO B
ING . JOSE ESTRADA

LATB

ODCB

ING. JOSE ESTRADA M.


Manejo de Puertos
PORTB y
LATB
tienen
funciones
similares

LATB

PORTB

ING. JOSE ESTRADA M.


Manejo de Puertos
PORTB y
LATB
tienen
funciones
similares

Como es la
Lectura

LATB

PORTB

ING. JOSE ESTRADA M.


Manejo de Puertos
PORTB0=1

READ: PORTB es leído STORE: El dato es


almacenado dentro
de un registro
temporal en el PIC

Los niveles reales de voltaje en los pines del MCU son relevantes

ING. JOSE ESTRADA M.


Manejo de Puertos

MODIFY: El dato es modificado WRITE: PORTB es escrito con


y establece el bit RB0. el dato modificado. El
driver de salida de RB0
se activa y el capacitor
empieza a cargar.

Los niveles reales de voltaje en los pines del MCU son relevantes

ING. JOSE ESTRADA M.


Manejo de Puertos
PORTB1=1
READ: PORTB es leído STORE: porque el capacitor esta todavía
cargándose, el voltaje en RB0
esta todavía bajo y se lee como
un 0 (puesto que leemos
directamente de los pines y no
del registro PORTB).

ING. JOSE ESTRADA M.


Manejo de Puertos

MODIFY: El dato es modificado WRITE: PORTB es escrito con un


para establecer el bit. nuevo dato. El driver de
salida de RB1 se activa,
pero el driver de RB0
vuelve a desactivarse.

ING. JOSE ESTRADA M.


Manejo de Puertos

LATB0=1

READ: LATB es leído. STORE: El dato es almacenado


en un registro interno
temporal del PIC.

ING. JOSE ESTRADA M. 30


Manejo de Puertos

MODIFY: El dato es modificado WRITE: LATB es escrito con el


para establecer el bit dato modificado. El driver
RB0. de salida de RB0 se activa
y el capacitor empieza a
cargar.

ING. JOSE ESTRADA M.


Manejo de Puertos
LATB1=1
READ: LATB es leído. STORE: Puesto que los niveles de
voltaje en los pines del
PIC no son tan
relevantes, obtenemos el
valor esperado.

ING. JOSE ESTRADA M.


Manejo de Puertos
LATB1=1
MODIFY: El dato es modificado WRITE: LATB es escrito con el
para establecer el bit, nuevo dato. El driver
de salida de RB1 se activa
y el driver de salida de
RB0 permanece activo.

ING. JOSE ESTRADA M.


Manejo de Puertos
REGISTROS LAT
El registro LATx asociado con un pin de E/S elimina los problemas que podrían
ocurrir con las instrucciones de lectura-modificación-escritura (read-modify-
write). Una lectura del registro de LATx devuelve los valores mantenidos en las
salidas de los puertos latches, en lugar de los valores de los pines de E/S. Una
operación de lectura-modificación-escritura en el registro LAT, asociado con un
puerto I/O, se evita la posibilidad de escribir al pin de entrada valores en los
puertos latches. Una escritura en el registro LATx tiene el mismo efecto que
una escritura en el registro PORTx.

Las diferencias entre los registros PORT y LAT se pueden resumir como sigue:
• Escribir en el registro PORTx escribe el valor de datos en el puerto latch
• Escribir en el registro LATx escribe el valor de datos en el puerto latch.
• Una lectura del registro PORTx lee el valor de los datos en el pin de I/O.
• Una lectura del registro LATx lee el valor de datos retenido en el puerto
latch.

Cualquier bit y sus registros asociados de datos y de control que no son válidos
para un dispositivo concreto serán desactivados. Eso significa que los
correspondientes registros LATx y TRISx y el pin del puerto, se lee como
ceros.

ING. JOSE ESTRADA M.


Manejo de Puertos
REGISTROS PORT

Los datos sobre un pin E/S se accede a través de un registro PORTx.


Una lectura del registro PORTx lee el valor del pin E/S, mientras que
una escritura en el registro PORTx escribe el valor al latch puerto de
datos.

Muchas instrucciones, tales como las instrucciones BSET y BCLR, son


operaciones de leer-modificación-escritura (read-modify-write). Por lo
tanto, una escritura en un puerto implica que los pines del puerto se
leen, este valor es modificado, y después escribe en el puerto latch de
datos. Se debe tener cuidado cuando los comandos leer-modificar-
escribir (read-modify-write) se utilizan en los registros PORTx y
cuando algunos pines E/S asociados con el puerto se configuran como
entradas. Si un pin E/S configurado como entrada se cambia a una
salida en algún momento posterior, un valor inesperado puede ser salida
en el pin E/S. Este efecto se debe a que la instrucción de leer-
modificación-escritura (read-modify-write) lee el valor instantáneo en
el pin de entrada y carga este valor en el latch puerto de datos.
ING. JOSE ESTRADA M.
Manejo de Puertos
REGISTROS ODCx
Cada pin del puerto también se puede
configurar de forma individual, ya sea
para una salida digital o de drenaje
AD1PCFG
abierto. Esto es controlado por el
Registro de Control de Open-Drain,
ODCx, asociado con cada puerto.
Colocando a “1” cualquiera de los bits TRISB
configura el pin correspondiente para pin
como una salida de drenaje abierto.
La característica de drenaje abierto PORTB PUERTO B
permite la generación de salidas ING . JOSE ESTRADA

superior a VDD (por ejemplo, 5V) en


cualquier digital deseado sólo pines LATB
mediante el uso de resistencias
externas pull-up. La tensión máxima
permitida de drenaje abierto es el
mismo que el valor máximo especificado ODCB
en el Data Sheet, VIH= 5.5V
normalmente.

ING. JOSE ESTRADA M.


Manejo de Puertos
MAPA DE REGISTROS DE PORTB
Este es el mapa de los Registros que intervienen en el PORTB en el que
se puede ver la posición de los bits que están disponibles o no,
y cuando están en reset cual es el valor que tienen.

ING. JOSE ESTRADA M.


Interrupciones
Una interrupción es una suspensión temporal de la ejecución
de un programa, con la finalidad de atender a un dispositivo
que lo requiere y esto se realiza mediante una subrutina de
servicio de interrupción (ISR).

El MCU PIC24FJ128GA010 de 16 bits tienen un esquema de


excepción vectorizada con soporte para hasta 8 vectores de
interrupción no enmascarables y hasta 118 fuentes de
interrupción. Cada fuente de interrupción se puede asignar a
uno de los siete niveles de prioridad.

Atención rápida es de 4 ciclos de instrucción para ingreso a


la ISR y 3 ciclos para salir de la ISR. El Control de
Interrupciones reduce la numerosas peticiones de interrupción
de los periféricos a una simple petición de interrupción al
CPU, esta característica hace que sea superior a la mayoría
de las otras arquitecturas.
ING. JOSE ESTRADA M.
Interrupciones

Cada fuente de interrupción provoca siempre y cuando esta


habilitado, la ejecución de un conjunto de código único,
llamado rutina de servicio de interrupción (ISR).

ING. JOSE ESTRADA M.


Interrupciones

Solo se usa cuando se realiza Debug (depuración) o


Emulación

ING. JOSE ESTRADA M.


Interrupciones
PROCESO DE LA INTERRUPCIÓN

Cuando un evento de excepción ocurre:


1. Hardware (central o periférico) detecta eso.
2. Si la prioridad programada del evento excepción es
mayor que la actual prioridad de la CPU, se detiene la
ejecución actual del programa.
3. Se inicia la ISR (INTERRUPT SERVICE ROUTINE-
Rutina de servicio de Interrupción).
4. Cuando la ISR (Rutina de servicio de Interrupción)
finaliza.
5. El Hardware restaura la ejecución del programa que
había sido previamente detenido y devuelve en la
instrucción exacta que habría sido ejecutado de no
haber ocurrido el evento de excepción.

ING. JOSE ESTRADA M.


Interrupciones
TIPOS DE INTERRUPCIONES
1. Interrupción No enmascarables (No- Maskables Traps)
Están diseñados para detectar ciertos problemas de
hardware y software. tiene 4 fuentes de Non-Maskable
Traps:
• Oscillator Failure Trap
• Address Error Trap
• Stack Error Trap
• Math Error Trap
2. Interrupción por periférico y externo.
Estas son las regulares, solicitudes de interrupción
enmascarables que provienen de una variedad de periféricos
implementados:
• External Interrupt Pins
• Input Capture/Output Compare
• Communication Interfaces
(UART/SPI/I2C/USB/Ethernet)
• Analog I/O (Comparator, ADC/DAC) etc…
ING. JOSE ESTRADA M.
Interrupciones

PRIORIDAD DEL CPU

Una de las características fundamentales del


sistema procesamiento de excepciones, es
la IMPLEMENTACIÓN DE PRIORIDADES
PROGRAMABLE POR EL USUARIO para fuentes
de interrupción de periféricos y externos.

Esto requiere una comprensión del concepto de


prioridad de la CPU (de 16 bits) que puede operar
en 16 niveles de prioridad, desde 0 a 15.

ING. JOSE ESTRADA M.


Interrupciones

PRIORIDAD DEL CPU


Una fuente de interrupción (traps) tiene un nivel
de prioridad mayor que la actual prioridad de la
CPU con el fin de iniciar un proceso de atención a
la Interrupción.

Los niveles de prioridad de las fuentes de los


periféricos y interrupciones externas son
programados desde el nivel 0 al nivel 7, mientras
que los niveles de Prioridad del CPU del 8 al 15
son reservados para las fuentes No enmascarables
(Non-Maskables Traps).
ING. JOSE ESTRADA M.
Interrupciones
PRIORIDAD DEL CPU
La prioridad de la CPU para el hilo de ejecución actual se
indica con los bits "IPL" en el estado de la CPU y Control
Core registra con la prioridad del CPU para el hilo de
ejecución actual, se indica con los bits "IPL" en el registro
de estado de la CPU (Status Register) y el registro de
control del núcleo (Core Control register).
Al poner “111”deshabilita
todas las interrupciones
Status Register (SR)

IPL IPL IPL


2 1 0

Si IPL3 es “1” habilita


ING. JOSE ESTRADA
Core Control Register (CORCON)
interrupciones
IPL
3 no-enmascarables
ING. JOSE ESTRADA M.
Interrupciones
PRIORIDAD DEL CPU

La prioridad del CPU para el hilo de ejecución actual, se


indica con los bits "IPL" en el registro de estado de la
CPU (Status Register) y el registro de control del núcleo
(Core Control register).

Cuando el dispositivo se resetea, el estado de la prioridad


del CPU = 000

Los Bits de IPL son controlados automáticamente por la


lógica de procesamiento excepción basada en la fuente de
interrupción.

ING. JOSE ESTRADA M.


Interrupciones

PRIORIDAD DEL CPU

El programador puede establecer manualmente los bits de


prioridad de la CPU de usuario (IPL<2:0>) en cualquier
momento. Esto es útil para enmascarar temporalmente
todas las otras interrupciones para realizar una tarea con
mayor intensidad de la CPU.

IPL3 sólo se establece por el núcleo e indica un evento de


Traps (Non-maskable).

ING. JOSE ESTRADA M.


Interrupciones

PRIORIDAD DEL CPU

Las interrupciones por defecto son anidables. Cualquier ISR


que está en curso puede ser interrumpida por otra fuente
de interrupción que tiene un nivel de prioridad programada
más alta.

La siguientes figuras muestra como se mueve el rastro de


ejecución de la CPU que implica el inicio en el main ( ),
junto con 3 ISR pre-programados en diferentes niveles de
prioridad con anidación de interrupción habilitada.

ING. JOSE ESTRADA M.


Jerarquización de las Interrupciones
La atención rápida (latencia) en las interrupciones anidadas
para entrar es de 4 ciclos de instrucción y para salir es 3
ciclos.
RETURN

IRQ7
IRQ7 4 ciclos 7 ciclos
RETURN
IRQ4
7 ciclos
4 ciclos
RETURN
IRQ1

IRQ4 3 ciclos
IRQ1

main ( )
ING. JOSE ESTRADA
rastro de ejecución de la CPU

ING. JOSE ESTRADA M.


Jerarquización de las Interrupciones

La anidación de la interrupción se puede desactivar, con


un “1” el bit de control NSTDIS (INTCON1 <15>).

Cuando se habilita con “0” el bit NSTDIS, todas las


interrupciones en curso fuerzan la CPU prioridad a nivel 7,
ajustando IPL <2:0> = 111.

Esto efectivamente enmascara todas las demás fuentes de


interrupción hasta un RETFIE (regreso de interrupción) se
ejecuta.

ING. JOSE ESTRADA M.


Jerarquización de las Interrupciones

Cuando anidación de interrupción está deshabilitada, los


niveles de prioridad asignados por el usuario no tendrán
ningún efecto, salvo para resolver los conflictos entre las
solicitudes de interrupción simultáneamente pendientes.

Resolviendo conflicto de interrupciones, Por ejemplo, en el


reinicio del sistema, los registros IPCx, se inicializan de
tal forma que todas las fuentes de interrupción de
usuario, tengan un nivel de prioridad 4.

ING. JOSE ESTRADA M.


Jerarquización de las Interrupciones

Primero, por la prioridad asignada por el usuario de esa


fuente en el registro IPCx.

ING. JOSE ESTRADA M.


Jerarquización de las Interrupciones

Luego, se define
por la prioridad
orden natural
dentro de la
tabla de vectores
de interrupción

ING. JOSE ESTRADA M.


Configuración de las Interrupciones
Hay tres conjuntos de bits de control que deben tenerse
en cuenta cuando se trabaja con interrupciones:

• Banderas de interrupción
Indica que se ha producido un evento de Interrupción.
Que es fijado por el hardware y borrado por el
programador.

• Habilitadores de Interrupción
Activar o desactivar fuentes de interrupción de forma
individual.

• Asignación de prioridad
Establecer individualmente la prioridad de las fuentes
de interrupción
ING. JOSE ESTRADA M.
Configuración de las Interrupciones
Las banderas (Flag), los habilitadores (enable) y bits de
control de prioridad(IP) son usados por el Controlador de
Interrupciones dar prioridad a todas las solicitudes de
excepción y enviar un único vector y IP al CPU, ver figura:
VECTOR DE
NIVELES DE PRIORIDAD INTERRUPCION
DE INTERRUPCION Controlador de CPU
Interrupciones
INTERRUPCIONES NO Traps IP 8-15
ENMASCARABLES

Habilitador IP 08-15
Bandera IP 0-7 Ing.J.Estrada

Habilitador
NIVEL DE PRIORIDAD
INTERRUPCIONES Bandera IP 0-7 DE INTERRUPCION
DE PERIFERICOS

Habilitador

Bandera IP 0-7 Ing.J.Estrada

ING. JOSE ESTRADA M.


Registros de las Interrupciones

IFSx

IECx

INTERRUPCIONES
ING. JOSE ESTRADA IPCx

SR
&
CORCON

INTCONx

ING. JOSE ESTRADA M.


Registros de las Interrupciones

IFSx

Registros: ISF0,ISF1,
ISF2, IFS3 y IFS4.
IECx

Contienen el estado
INTERRUPCIONES
ING. JOSE ESTRADA IPCx de todas las banderas
(Flags) de interrupción
SR
&
CORCON

INTCONx

ING. JOSE ESTRADA M.


Registros de las Interrupciones

IFSx

Registros IEC0, IEC1,


IEC2, IEC3 y IEC4.
IECx

Habilitan (enable) las


INTERRUPCIONES
ING. JOSE ESTRADA IPCx interrupciones en el
dispositivo.
SR
&
CORCON

INTCONx

ING. JOSE ESTRADA M.


Registros de las Interrupciones

IFSx
Registros: IPC0, IPC1,
IPC2, …. IPC16.
IECx
Configura la prioridad
INTERRUPCIONES de las interrupciones
ING. JOSE ESTRADA IPCx

SR
&
CORCON

INTCONx

ING. JOSE ESTRADA M.


Registros de las Interrupciones

IFSx
Registros: SR (Status
Register) y CORCON
IECx (Core Control Register)

INTERRUPCIONES Configurar los bits


IPCx
IPL(3..0) que definen
ING. JOSE ESTRADA

el Nivel de Prioridad
SR
& del CPU.
CORCON

INTCONx

ING. JOSE ESTRADA M.


Registros de las Interrupciones

IFSx
Registros:
INTCON1,
IECx INTCON2

INTERRUPCIONES Contienen la
IPCx
configuración
ING. JOSE ESTRADA

global de las
SR
& interrupciones.
CORCON

INTCONx

ING. JOSE ESTRADA M.


La Interrupción Externa 0 (INT0)

Se configura el Registro IEC0 escribiendo en la posición


“0” un “1” habilitando la interrupción externa INT0 o un
“0” deshabilitándolo.

ING. JOSE ESTRADA M.


La Interrupción Externa 0 (INT0)

La interrupción externa INT0 ha ocurrido, indicándose con


la activación (con un “1”) de una bandera (flag) en la
posición 0 del Registro IFS0.

Interrupt Flag Status Register 0 (IFS0)


15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 = No ha ocurrido la
Interrupción externa INT0
INT0IF
1 = La interrupción externa
ING. JOSE ESTRADA INT0 ha ocurrido

ING. JOSE ESTRADA M.


La Interrupción Externa 0 (INT0)

En el registro IPC0, se configura la prioridad de la


interrupción externa INT0, como puede verse en la figura.

Interrupt Priority Control Register 0 (IPC0) 000: Deshabilitado


001: Prioridad 1 (baja)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 010: Prioridad 2
011: Prioridad 3
INT0IP<2:0>
100: Prioridad 4
101: Prioridad 5
ING. JOSE ESTRADA 110: Prioridad 6
111: Prioridad 7(alta)

ING. JOSE ESTRADA M.


Interrupciones

Declarando una interrupción en MPLABx

ING. JOSE ESTRADA M.


SISTEMAS DIGITALES BASADOS EN
MICROPROCESADORES

MUCHAS GRACIAS

ING. JOSE ESTRADA MONTES

También podría gustarte