Interrupciones en FreeRTOS

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 39

Interrupciones en

FreeRTOS.

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

Agenda.







Concepto de controlador de hardware (drivers).


Eventos.
Semforos en Interrupciones.
Colas para sincronizar interrupciones
Anidando interrupciones.
Ejemplos.
 Driver I2C.

Ejemplo con memoria serie.

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

Controlador de Hardware. Driver.




La estrategia propuesta para manejar los diferentes


perifricos va a ser la siguiente:





Manejar las particularidades del hardware en cdigo bien


definido y separado de la lgica del programa (slo tratar con el
perifrico, no introducir la lgica propia del programa en el
cdigo del driver).
Generar interfaces tan generales y claras como sea posible. Por
ejemplo, generar funciones: inicializar(), escribir(), leer(),
obtenerEstado().
Utilizar las primitivas del RTOS para la interfaz del sistema
(semforos, colas de mensajes).
En la medida de lo posible, generar interfaces bloqueantes (ser
gentil avisar cuando se espera por un perifrico)

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

Drivers. mbito de aplicacin.

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

Drivers. Objetivo.


El objetivo principal de escribir el cdigo


de los controladores de los diferentes
perifricos con interfaces comunes y con
cdigo bien delimitado es uniformizar el
tratamiento de todos (o casi todos) los
perifricos.

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

Eventos.
Los sistemas en tiempo real necesitan
responder a los eventos generados por su
entorno en tiempo conocido y acotado.
 Cmo se implementa?


 Encuesta

del dispositivo (polling).


 Por interrupciones.

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

Atencin de eventos por


interrupciones.
Al introducir el uso de interrupciones,
Cunto tiempo usar en ellas?Por qu?.
 Cmo comunicar el cdigo de las
interrupciones con el del resto del
sistema?
 Cmo hacer esta comunicacin segura?.


Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

Uso de semforos en
interrupciones.
Un semforo binario se lo puede utilizar
para sincronizar una tarea con una
interrupcin.
 Si es necesario procesar con muy baja
latencia un evento externo, el cdigo de la
interrupcin puede desbloquear una tarea
de alta prioridad para atenderlo.


Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

Semforos en interrupciones

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

Semforos en interrupciones.


xSemaphoreGiveFromISR
(
xSemaphoreHandle xSemaphore,
signed portBASE_TYPE *pxHigherPriorityTaskWoken
)

portEND_SWITCHING_ISR
(
portBASE_TYPE HigherPriorityTaskWoken
)

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

10

Semforos en interrupciones.

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

11

Semforos en interrupciones.

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

12

Semforos de conteo en int.

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

13

Colas de mensajes en
interrupciones.
Los semforos son usados para
comunicar eventos entre tareas y entre
tareas e interrupciones.
 Las colas de mensajes son usadas para
comunicar eventos y transferir datos
entre tareas y entre tareas e
interrupciones


Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

14

Colas de mensajes. Funciones.


 portBASE_TYPE xQueueReceiveFromISR
(
xQueueHandle pxQueue,
void *pvBuffer,
portBASE_TYPE *pxTaskWoken
)

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

15

Colas de mensajes. Funciones.




portBASE_TYPE xQueueSendFromISR
(
xQueueHandle pxQueue,
const void *pvItemToQueue,
portBASE_TYPE *pxHigherPriorityTaskWoken
)
portBASE_TYPE xQueueSendToBackFromISR
(
xQueueHandle pxQueue,
const void *pvItemToQueue,
portBASE_TYPE *pxHigherPriorityTaskWoken
)
portBASE_TYPE xQueueSendToFrontFromISR
(
xQueueHandle pxQueue,
const void *pvItemToQueue,
portBASE_TYPE *pxHigherPriorityTaskWoken
)

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

16

Uso eficiente de las colas.




Las colas de FreeRTOS son colas que


trabajan por copia por lo que se puede
caer en uso poco eficiente de las colas si:
 Se

transfieren elementos de muchos bytes.


 Se transfieren elementos a alta frecuencia.

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

17

Uso eficiente de las colas.




Para tener un uso eficiente en condiciones


de muchos datos o mucha frecuencia de
datos:
 Poner

en un buffer comn los elementos y


utilizar semforos para sincronizar las tareas.
 Interpretar los datos en la ISR y encolar la
cantidad mnima (teniendo en cuenta que el
tiempo en las ISR debe ser muy poco).
Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

18

Anidamiento de interrupciones.


Recordando. Los procesadore LPC17xx


tienen 5 bits para configurar la prioridad de las
interrupciones.
La CMSIS tiene funciones para configurar la
prioridad de las interrupciones


void NVIC_SetPriority (IRQn_t IRQn, uint32_t priority)

Configuracin del archivo FreeRTOSConfig.h

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

19

FreeRTOSConfig.h


Las constantes que pueden afectar el


anidamiento de interrupciones:



configKERNEL_INTERRUPT_PRIORITY. Define la prioridad del


ncleo del sistema operativo en si mismo.
configMAX_SYSCALL_INTERRUPT_PRIORITY. Define la prioridad
mxima que puede tener una interrupcin para utilizar las funciones
terminadas en FromISR.

Si configMAX_SYSCALL_INTERRUPT_PRIORITY tiene ms
prioridad que configKERNEL_INTERRUPT_PRIORITY se va a
trabajar con un esquema de anidamiento de
interrupciones.
Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

20

Configuracin por defecto.





configMAX_SYSCALL_INTERRUPT_PRIORITY
configKERNEL_INTERRUPT_PRIORITY

Las interrupciones
que no necesitan
usar ninguna
funcin del
sistema operativo
pueden tener
cualquier prioridad

5
31

Las interrupciones que tienen


prioridad desde 0 (por defecto para
todos los perifricos) a 4 No
pueden usar ninguna funcin de
FreeRTOS!!!!!!.

Las interrupciones que tienen


prioridad desde 5 hasta 31
pueden llamar a las funciones
de FreeRTOS que terminan en
FromISR
Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

21

Ejemplo. Driver I2C.




La intencin de este
ejemplo es generar
un driver simple (pero
completamente
funcional) de I2C para
utilizar la memoria
EEPROM (24LC64)
disponible en los
sticks de LPC1769
Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

22

I2C. Qu es?






I2C es un bus diseado por Philips en los 80s.


Es un bus que se lo utiliza para comunicar varios dispositivos compartiendo
el mismo bus, usualmente dentro de la misma placa de circuito impreso.
La velocidad de este bus originalmente era de 100KHz, hay un modo de
400KHz y existe un modo de hasta 3.4 Mbit/s.
Es un protocolo de comunicacin multimaestro, multiesclavo
Es un bus que soporta muchos dispositivos esclavos y varios maestros en el
mismo bus.

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

23

I2C. Breve Descripcin elctrica


El bus consta de dos pines: SCL y SDA.
 Estos pines son bidireccionales y trabajan
en configuracin de drain abierto, por lo
que requieren necesariamente de
resistencias de pull-up.


Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

24

I2C. Breve Descripcin elctrica

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

25

I2C. Seales.


La Seal SDA es la seal


de datos que va a ser
vlida cuando SCL est
alta.
Todas las transferencias
de datos comienzan con
una condicin de
arranque (bit de START)
y finalizan con la
condicin de parada (bit
de STOP).
Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

26

I2C. Seales




La unidad de transferencia del protocolo I2C es


el byte.
Los bytes se transfieren enviando primero el bit
ms significativo MSB.
Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

27

I2C. Transferencias de datos

Las transferencias del I2C comienzan enviando una


direccin de dispositivo (propia de cada tipo de
dispositivo I2C), un bit de R/W y luego los datos. Luego
de cada dato el dispositivo que los recibe genera un
pulso de recibido (ACK) o de no recibido (NACK).
Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

28

I2C. Operaciones entre maestros y


esclavos.

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

29

Memoria EEPROM 24LC64.




Es una memoria de
8KBytes con interfaz I2C.
Puede funcionar con un
SCL mximo de 400KHz
entre 2.5V y 5.5V.
Tiene tres bits de
direccionamiento adems
de la palabra de
configuracin de I2C
Se pueden escribir hasta
32 bytes en una sola
operacin.
Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

30

24LC64. Bytes de control.

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

31

24LC64. Escritura

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

32

24LC64. Lectura.

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

33

Controlador I2C. LPC1769


El LPC1769 tiene 3 controladores I2C
disponibles.
 La placa LPCXPRESSO que tiene el
LPC1769 tiene una memoria 24LC64
conectado al controlador I2C1.
 El controlador se puede configurar tanto
como maestro o como esclavo.


Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

34

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

35

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

36

Consideraciones para el driver I2C




El driver que se propone para manejar el I2C desde


FreeRTOS contiene los siguientes supuestos:







No va a hacer controles de errores o timeout (para simplificar el


cdigo).
Los datos se van a transferir por copia.
La prioridad de la interrupcin del driver es fija y no va a cambiar
a lo largo del programa.
Las funciones de lectura y escritura son bloqueantes.
Est basado en el driver de CodeRed.
La sincronizacin se va a realizar utilizando un semforo para la
lectura y otro para la escritura.

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

37

Driver I2C. Cdigo.




Ver programa de FreeRTOS:


 main.c
 i2cdriverRTOS.c
 i2c.h
 FreeRTOSConfig.h

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

38

Bibliografa.


Using the FreeRTOS Real Time Kernel. NXP LPC17xx Edition. Richard Barry.

FreeRTOS http://www.freertos.org/

LPC1769 LPCXPRESSO BOARD SPECIFICATION


http://http://www.embeddedartists.com/products/lpcxpresso/lpc1769_xpr.php

Hoja de datos de la memoria EEPROM 24LC64


http://ww1.microchip.com/downloads/en/devicedoc/21189f.pdf

Manual del procesador LPC17xx


http://www.nxp.com/download/pip/LPC1769FBD100/user_manual/

Especificacin de I2C. http://www.nxp.com/documents/user_manual/UM10204.pdf

Juan Alarcn.
jalarcon@electron.frba.utn.edu.ar

39

También podría gustarte