Labora Andres Julian Jimenez y Alejandro Navarrete

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

UNIVERSIDAD EL BOSQUE

CENTRO DE DESARROLLO TECNOLÓGICO


FACULTAD DE INGENIERÍA
PROGRAMA DE INGENIERÍA ELECTRÓNICA

Asignatura: Sistemas embebidos Fecha: 02/03/23


Nombre de la práctica: Laboratorio de ordenamiento
Nombre estudiantes: Andrés Julián Jiménez, Alejandro Navarrete Rojas
Objetivos:
Desarrollar un sistema embebido utilizando el STM32CubeMX, STM32CubeIDE y
utilizando instrucciones HAL realizado una transferencia DMA memoria a memoria con un
mínimo 16KB .

Marco Teórico:

DMA: El DMA (acceso directo a la memoria) permite que el dispositivo de red mueva
los datos del paquete directamente a la memoria del sistema, reduciendo la utilización de
la CPU. Sin embargo, la frecuencia y los intervalos aleatorios en los cuales los paquetes
llegan no permiten que el sistema ingrese un estado de energía más bajo. El coalescentes
DMA permite que el NIC recoja los paquetes antes de que inicie un evento DMA. Esto
puede aumentar la latencia de la red, pero también aumenta las probabilidades de que el
sistema consuma menos energía. Los adaptadores y dispositivos de red basados en el
controlador Ethernet Intel® I350 (y controladores posteriores) Asistencia la fusión de
DMA.
Microcontrolador STM32F411RE:
Un Microcontrolador STM32F411RE es un circuito integrado reconfigurable,
compuesto de interconexiones internas programables, las cuales combinan bloques
lógicos, de procesamiento de señales digitales, etc. Su núcleo de procesamiento tiene
como base un procesador Cortex®-M4, con frecuencia de operación de 84MHz, unidad
de punto flotante, entre otras características. Este integrado es una muy buena opción a la
hora de tratar con sistemas embebidos debido a sus 10 temporizadores programables, de
16 y 32 bits, conversor ADC de 12 bits, 3 puertos USARTs, múltiples canales de uso
general (GPIO), etc. Sus módulos son programables mediante software especializado de
su casa matriz, STM, específicamente STM CubeMX, y STM CubeIDE

Metodología y equipos:
● El sistema va a estar esperando a que el push button se active para iniciar el
proceso de transferencia.
● El sistema cuando este en el proceso de transferencia y se inicia sin errores se
debe prender el LED amarillo.
● El sistema cuando el DMA generé la interrupción de fin se debe realizar lo
siguiente:
a. Apagar el LED amarillo
b. Verificar si el sistema reporta errores: prender el rojo titilando
c. Si la transferencia se da con éxito debe prender el LED verde titilando

Materiales
● Resistencias
● Leds (amarillo, verde, rojo)
● STM32CubeMX, STM32CubeIDE
● Pulsador
● STMA32F411RE

Procedimiento

Lo primero que realizamos es configurar los pines que encenderán los leds:

PC5 siendo el led rojo, PC6 led verde, PC8 led amarillo, PC13 el boton azul de la tarjeta,
se puso en pull down para correcto funcionamiento del código.

Se agregó en el DMA una request para pasar de memoria a memoria.

Acá nos fijamos bien de que estuviera en byte y luego habilitamos las interrupciones para
ese stream del dma.
Luego se registraron los callbacks:

Los callbacks se registraron dentro del static void MX_DMA_Init y antes del
HAL_NVIC_SetPriority.

Y luego se definieron algunas variables y las funciones de que hará cuando haya error o
transferencia exitosa.

fall va a ser un identificador para saber si hubo error, o transferencia completa.


Dentro de la función de transferencia completa se apga el led amarillo y rojo, y se le
asigna valor de 2 a fall.
En la función de rutina error se apagan los leds verde y amarillo y asigna 1 al valor de
fall.
En el código dentro del while se pregunta si se presiona el boton, cuando se presione se
reinicia el valor de fall, y se enciende el led amarillo, luego se inicia la transferencia de
datos de origen a destino con un tamaño de 16384 bytes.

Cuando termine la transferencia se realizará una interrupción y dependiendo de que si


hubo error o si fue exitosa la transferencia se realizará lo explicado anteriormente en las
funciones correspondientes.

Suponiendo error, el fall sería igual a 1, entonces dentro del while entra al if de fall ==1,
y empezará a titilar el led rojo con un delay de 100 ms entre cada encendido/apagado.

Suponiendo transferencia exitosa, el fall sería igual a 2, entonces dentro del while entra al
if de fall ==2, y empezará a titilar el led verde con un delay de 100 ms entre cada
encendido/apagado.

Como ya no se modifica el valor de fall (en ambos casos), ahí se quedará por siempre o
hasta que se vuelva a presionar el botón.

Resultados:

Antes de disminuir la frecuencia, lo que se veía era que la transferencia terminaba muy
rapido, el led amarillo se encendia y apagaba muy rapido, casi no se alcanzaba a ver.

https://youtu.be/PcTKmHqxneM

Se disminuyó la frecuencia a 0.1Mhz, donde se apreciaba mejor el tiempo que se demora


en realizar la transferencia, se cronómetro y se obtuvo alrededor de 680ms, en este caso
si se puede ver el led amarillo para la transferencia completa:

https://youtube.com/shorts/sm8U-1iKPrg?feature=share
Para el error, el led amarillo dura menos tiempo y empieza a titilar el led rojo antes que
en el caso de la transferencia completa con el led verde.

https://youtube.com/shorts/nCPajUiPuy4?feature=share

Los leds no se prenden más lento o más rápido, el reloj en este caso no los afecta.

Entre los dos casos, es difícil medir el tiempo de ejecución para 84 Mhz, se utilizó una
fórmula aproximada que nos mostró el profe en clase:
(𝑐𝑎𝑛𝑡𝑖𝑑𝑎𝑑 𝑑𝑒 𝑑𝑎𝑡𝑜𝑠)/(𝑓𝑟𝑒𝑐𝑢𝑒𝑛𝑐𝑖𝑎 𝑑𝑒𝑙 𝑟𝑒𝑙𝑜𝑗) = 𝑡𝑖𝑒𝑚𝑝𝑜 𝑑𝑒 𝑒𝑗𝑒𝑐𝑢𝑐𝑖ó𝑛

(16384)/(84 𝑀ℎ𝑧) = 195. 04𝑢𝑠

Para el caso de 0.1Mhz se midió con cronómetro obteniendo tiempo de transferencia de


aprox 680 ms.

Ahora vamos modificar el tamaño de datos a transferir:

con el doble se obtuvo aprox 1.4s

Conclusiones: Con una frecuencia de reloj muy alta, los tiempos de ejecución
disminuyen, con una frecuencia de reloj baja los tiempos de ejecución aumentan.
Adicionalmente se halla que existe una relación entre tiempo, frecuencia y tamaño de
datos, el tiempo de ejecución aumenta según aumenta el tamaño de datos, por ejemplo se
duplicó el tamaño de datos, y se observó que a base de esto el tiempo de ejecución
también se duplicó. El tiempo de ejecución tiene una relación inversamente proporcional
con respecto a la frecuencia.

Bibliografía:

[2] Knuth, Donald (1998). «5.2.2: Ordenamiento por intercambio». El arte de programar ordenadores,
Volumen 3 (en inglés) (segunda edición). Addison-Wesley. pp.

También podría gustarte