Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Por
Para instalar el programa, ejecute mdk51v959.exe, luego de clic en next. Luego, seleccione la
caja I agree to all terms of the preceding License Agreement, y de clic en next. Deje por defecto
la ruta que proporciona el software (C:\Keil_v5 y C:\Keil_v5\ARM\PACK), y de clic en Next.
Ingrese los datos que le piden y de clic en Next, se iniciará la instalación del paquete.
• Keil::ARM Compiler
• Keil::MDK-Middleware
• Keil::FM4 DFP
• ARM::CMSIS
Luego ejecute en orden los ejecutables de las carpetas Keil C51 v9.59, Keil MDK-ARM 5.24a y
Keil MDK-ARM 5.25 uVision 5. Finalmente, quedará instalado el software, ejecute en modo
administrador uVision y desde File->License Management copie el Computer ID (CID), y ejecute
el crack y pegue el CID donde se le indica para generar una nueva licencia. Luego adicionelo a la
lista y quedará configurado y listo para usar sin restricciones.
UPTC Ingeniería Electrónica Eduardo Avendaño Fernández 3
Fig. 4. Configuración de licencia
La board Cypress FM4 se conecta al host PC vía un cable USB usando una herramienta de
programación y depuración CMSIS. Conecte el cable USB al conector CN2 en la tarjeta FM4 y
conecte el otro extremo a su PC. Permita que Windows termine de instalar los drivers de su
tarjeta.
El DSP equivalente al programa hola mundo consiste en copiar muestras de entrada leídas
desde el ADC al DAC. El código fuente en lenguaje C para tal programa se lista en la figura 4.
Este programa sirve como una plantilla para otros programas basados en el mismo modelo de
procesamiento en tiempo real basado en manejo de interrupciones.
El código fuente en C loop_intr.c se que muestra en la figura 5, funciona como sigue:
La función main(), hace un llamado a la función de inicialización audio_init(). Esta función
configura las interrupciones de entrada salida del códec WM8731 que muestrearán la señal de
entrada análoga e interrumpe el procesador a la frecuencia de muestreo determinada por el
parámetro pasado a la función. En ese caso, el parámetro hz48000 configura una frecuencia de
muestreo a 48 kHz. El parámetro mic_in especifica que la entrada al ADC del códec WM8731
vendrá de la entrada del micrófono (Conector CN11) de la board Cypress FM4. Cambiar este
parámetro a line_in especifica la entrada de audio del nivel de línea (Conector CN6) en la tarjeta
Cypress FM4. El parámetro intr e I2S HANDLER especifica que se usará la entrada/salida basada
en interrupción (opuesto a consulta basada en acceso directo a memoria - DMA), y es el
nombre de la interrupción. Como resultado, cada vez que una interrupción ocurre, la rutina del
servicio de interrupción I2S HANDLER será llamada. Exactamente una interrupción ocurrirá por
periodo de muestreo. Los dos canales de audio, el canal izquierdo y derecho son procesados en
el mismo llamado a ISR.
Al inicio de la ISR I2S HANDLER, el valor del pin GPIO es proporcioando un cambio en cada
instante que ocurre una interrupción. Dentro de I2S_HANDLER(), la función i2s_rx() retorna la
muestra de entrada actual leída desde el periférico I2S. El dato contenido en la variable
audio_IN (un entero con signo de 32 bits, declarado en audio.h) está compuesto de 16 bits para
el canal derecho y 16 bits para el canal izquierdo.
Para procesar cada canal independientemente, los canales son separados en las líneas 12 y 13.
Puesto que este ejemplo es un simple bucle de audio (es decir, lee muestras desde el ADC que
se copian al DAC), las muestras del canal derecho e izquierdo son empaquetadas en la variable
audio_OUT (un entero con signo de 32 bits, declarado en audio.h) y son enviadas de regreso al
periférico I2S usando la función i2s_tx().
Los siguientes pasos servirán como guía a través del proceso de construcción y ejecución de
programas para DSP usando lenguaje C en la tarjeta Cypress FM4.
4. Construya el proyecto seleccionando Build target del menú Project o dando clic en el
botón de la barra de herramientas Build. El proyecto debería construirse sin errores.
5. Conecte usando un cable USB la board Cypress FM4 al host PC.
6. Conecte los audífonos y micrófono en los sockets correspondientes en la board FM4,
como se muestra en la figura 7.
7. Conmute al depurador dando clic en el botón de la barra de herramientas Start/Stop
Debug Session. Al hacerlo se descargará automáticamente el código ejecutable en la
memoria flash del procesador ARM.
8. Una vez el depurador de Windows haya aparecido, de clic en el botón de la barra de
herramientas Run.
Importante: Nunca descarge y ejecute el software a la tarjeta sin los audífonos conectado a sus
oidos. El amplificador del audífono en la board tiene una alta ganancia y podría dañarle sus
oídos. Cuando pruebe software, lleve lentamente los audífonos a sus oídos.
9. Una vez el programa esté corriendo, debería ser capaz de escuchar sonidos capturados
por el micrófono en los auriculares. Dependiendo de las características del micrófono y
auriculares, el sonido podría ser fuerte o suave. Si no puede oír nada, intente soplar
gentilmente el micrófono.
10. Puede salir del depurador dando clic en el botón de la barra de herramientas Start/Stop
Debug Session. No es estrictamente necesario iniciar una sesión de depuración (Debug)
UPTC Ingeniería Electrónica Eduardo Avendaño Fernández 6
cada vez que quiera probar un programa. En lugar de ello, luego de construir (build)
satisfactoriamente, puede dar clic en el botón de la barra de herramientas Download o
presionar F8.
Como se describió anteriormente, un pin GPIO puede ser usado como un indicador por el
tiempo de ejecución del programa en tiempo real.
En el caso del loop intr.c, los valores de los pines GPIO es conmutada cada vez que ocurra una
interrupción (línea 9):
gpio_toggle(P10);
Puesto que la interrupción debería ocurrir una vez por periodo de muestreo, la señal esperada
en el pin P10 es una onda cuadrada de frecuencia 24 kHz (tasa de muestreo de 48 kHz). Conecte
una terminal del osciloscopio al pin seleccionado sobre la board FM4 para confirmar la forma
de onda a la salida. Observe que las conexiones GPIO son rotuladas al lado inferior de la board
FM4. El pin GPIO puede ajustarse en (HIGH-ALTO) o reset (LOW-BAJO) usando declaraciones de
programa.
gpio_set(P10, HIGH);
gpio_set(P10, LOW);
Nota: cuando se usa boards FM4 PURPURA, especifique y use el pin P10. Cuando se use las
boards FM4 AZULES, especifique y use el pin P15. Las ubicaciones de los pines son marcadas en
el lado inferior de las boards FM4.
El programa listado en la figura 8, muestra una modificación simple del audio que pasa a través
de un programa en el cuál muestras retrasadas del canal izquierdo son sumadas a la salida del
canal de audio izquierdo actual.
Retardo
G
9. Creando un eco
Construya el proyecto y descárguelo a la board FM4. Experimente con diferentes valores de los
parámetros DELAY_BUF_SIZE y GAIN.
Pregunta 2: Qué podría suceder si el valor de ganancia (Gain - G) fuera mayor o igual a 1?
Pregunta 3: Dibuje y grafique en el dominio del tiempo mostrando lo que piense que debería
obtener en la respuesta al impulso para el caso de una ganancia de 0.6?
Observe en la función main() que los programas de muestra usualmente toman audio del
puerto \mic_in. Cambielo a \line_in para usar el puerto de entrada de línea. Esto es apropiado
para recibir música de un reproductor de audio o de un generador de funciones. Desenergize
los micrófonos operando a voltajes mucho menores que los dispositivos de nivel de línea.
La línea en el Jack de la board FM4 debería solamente recibir un voltaje máximo de 894 mV pico
a pico; este es el nivel de audio de línea del consumidor. Se debe monitorear cualquier señal
Referencias
[1] FM4-176L-S6E2CC-ETH - ARM Cortex-M4 MCU Starter Kit Guide, March 26 2015.
[2] ARM University Worldwide Education Program. ARM-based Digital Signal Processing Lab-in-
a-Box, 2014.
[3] Esta guía esta basada en El Laboratorio de DSP en tiempo real recuperado de internet de la
url: https://faculty-web.msoe.edu/prust/EE3221/RTDSP_Lab1.pdf. Reconozco todos los
derechos de los autores creadores que aunque se apoyan en el programa de educación mundial
de universidad ARM, acá se hace una adecuación y traducción para aplicarlo en el curso de DSP.