Download GITT: Sistemas Electrónicos para Procesamiento de Señales
Document related concepts
no text concepts found
Transcript
GITT: Sistemas Electrónicos para Procesamiento de Señales 2016 PRACTICA 1: INTRODUCCION A CODE COMPOSER STUDIO Y DSP/BIOS Objetivos: El objetivo principal de esta práctica es familiarizarse con la tarjeta DSK6713 de Texas Instruments, la cual utilizamos a los largo de todas la sesiones prácticas, y con el sistema operativo (herramienta de configuración) DSP/BIOS. Para ello comenzaremos por configurar todos los pasos necesarios para crear un proyecto en la herramienta de programación proporcionada por el fabricante denominada Code Composer Studio. Material: Máquina virtual de Windows XP con la versión del Code Composer Studio para la DSK6713. Tarjeta DSK6713. A) Creación, configuración y compilación de un proyecto Lo primero que vamos hacer es crea un nuevo proyecto y configurar el DSP/BIOS Abrir un nuevo proyecto: Desde la opción Project->New se despliega una ventana (Figura 1) donde introducimos el nombre del proyecto (que automáticamente se añade en la línea Location creando una carpeta con ese nombre) y donde especificamos el dispositivo objetivo (Target), que en nuestro caso debe ser C67XX. Figura 1. Ventana de creación de proyecto Una vez creado el proyecto, en la parte izquierda del entorno CCS (Figura 2) aparece el proyecto (ej1.prj) con una serie de carpetas que se irán llenando a medida que avancemos en el proyecto. Por ejemplo, la carpeta Source contendrá los fuentes en C y la carpeta Include los .h. Es muy importante tener en cuenta que sólo se compila lo que esté presente en estas carpetas. Algunos archivos hay que agregarlos manualmente 1 GITT: Sistemas Electrónicos para Procesamiento de Señales 2016 mientras que otros se añaden automáticamente. Antes de compilar, es preciso comprobar que todos los archivos necesarios se encuentran presentes. Figura 2. Code Composer Studio tras crear un proyecto. Utilización de DSP/BIOS: Para utilizar DSP/BIOS es necesario llamar a la ventana de configuración de DSP/BIOS, mediante File->New->DSP/BIOS Configuration, que da lugar a la ventana de la Figura 3. Figura 3. Configuración DSP/BIOS. Trabajando con el sistema DSK6713 seleccionaremos la opción dsk6713.cdb, lo que da lugar a la ventana de la Figura 4. 2 GITT: Sistemas Electrónicos para Procesamiento de Señales 2016 Figura 4. Ventana de configuración de DSP/BIOS. Lo primero que hay que hacer es salvar el archivo de configuración con la opción File->Save As. Se recomienda usar siempre la opción Save as y no la opción Save, a fin de salvar el archivo en la carpeta de proyecto y garantizar que todos nuestros archivos quedan en esa carpeta. Le damos un nombre, como ejemplo1.cdb. Finalmente, añadimos el archivo al proyecto con la opción Project -> Add Files to Project (Figura 5). Para ello, en tipo seleccionamos el tipo de archivo (.cdb). Figura 5. Añadir archivo de configuración DSP/BIOS al proyecto. 3 GITT: Sistemas Electrónicos para Procesamiento de Señales 2016 Al añadir el citado archivo se observa que ejemplo1.cdb aparece en la carpeta DSP/BIOS Config, pero se han añadido otros archivos en la carpeta Generated Files, necesarios para el linker. Figura 6. Herramienta de configuración de DSP/BIOS. Si desplegamos el archivo de configuración de DSP/BIOS, vemos que en ella se pueden definir varias pestañas: System: permite configurar diversas cuestiones del sistema. Instrumentation: permite definir objetos de instrumentación. Para agregar estos objetos, seleccionar “LOG – Event Log Manager” con el click derecho y luego “Insert LOG”. En esta práctica definimos los objetos LOG0 y LOG1, que sirven para imprimir mensajes por pantalla. Scheduling: aquí podemos definir diversas tareas planificables. Para esta práctica definiremos una tarea periódica PRD0 en ‘Scheduling PRD’ y una tarea IDL en ‘Scheduling PRD’ que será IDL0. Synchronization: permite definir objetos de sincronización de tareas, tales como semáforos, colas de mensajes, etc. Input/Output: sirve para definir objetos de comunicación con el host. CSL: Chip Support Library, herramienta gráfica de configuración de los periféricos CSL.lib. Una vez creados estos elementos, se procede a configurarlos. Haciendo click con el botón derecho del ratón y eligiendo la opción propiedades se puede definir: En el caso de la tarea periódica (PRD0) su periodicidad en ticks (que por defecto es 1tick = 1 ms) y la función en código C asociada, que siempre deberá llevar un guión bajo delante (por ejemplo, si la función asociada en C se denomina parpadea, aquí habrá que escribir _parpadea). Destacar que las funciones que no lleven el guión bajo son consideradas por el compilador como funciones en lenguaje ensamblador. 4 GITT: Sistemas Electrónicos para Procesamiento de Señales 2016 En el caso de la tarea idle tan sólo es necesario definir la función en C asociada (_idle0). Observación: no es necesario renombrar el archivo .c con un guion bajo adelante. Finamente, escribimos el archivo C. File->New->Source File: void parpadea(void); void idle0(void); #include "ejemplo1cfg.h" #include "dsk6713_led.h" #include "dsk6713_dip.h" #define APAGADO 0 #define ENCENDIDO 1 int estado=0; /* Variable global que guarda el estado del LED */ void main(){ } void idle0(){ LOG_printf(&LOG0,"Aplicación ejecutándose"); } void parpadea(){ switch(estado){ case APAGADO: LOG_printf(&LOG1,"LED ON"); DSK6713_LED_on(2); estado=ENCENDIDO; break; case ENCENDIDO: LOG_printf(&LOG1,"LED OFF"); DSK6713_LED_off(2); estado=APAGADO; break; } } Este archivo se salva con la opción File-> Save as (para garantizar que lo guardamos en la carpeta de proyecto) con un nombre_cualquiera.c y, a continuación, lo añadimos a la carpeta de proyecto (Project->Add Files to Project) Observaciones al código: 1. El archivo “ejemplo1cfg.h” los genera el archivo de configuración de DSP/BIOS y es necesario incluirlo. Su nombre es el mismo que se le ha dado al .cdb seguido de cfg.h. 2. Nótese que el main se encuentra vacío. Tras ejecutarse el main, el scheduler toma el mando y ejecuta las diferentes tareas definidas de forma pre-emptiva. 3. En el main sólo hay que incluir aquello que se desee que se ejecute una única vez (configuraciones, inicialización de tablas o valores, etc.). 5 GITT: Sistemas Electrónicos para Procesamiento de Señales 2016 4. La tarea periódica sólo se ejecutará cada vez que se cumpla la condición definida por los ticks. 5. Durante los tiempos muertos, se ejecuta la tarea idle, que lo que hace es imprimir un mensaje por pantalla. 6. Para manejar los elementos hardware incluido en la placa (board) del DSK6713 se utilizarán funciones de la Board Support Library (BSL), como por ejemplo DSK6713_LED_on(2) o DSK6713_LED_off(2), que encienden o apagan el LED definido como 2 (con un argumento diferente actuarían sobre los otros LEDS de usuario). Opciones de compilación: Para que el programa se pueda compilar y linkar correctamente, el preciso realizar los siguientes pasos previos: Figura 7. Build options: compiler. Project-> Build options, pestaña Compiler, picar en Preprocessor (Figura 7). o Añadir en Include Search Path C:\CCStudio_v3.1\C6000\dsk6713\include o Modificar Pre-Define Symbol a “_DEBUG;CHIP_6713” (sin las comillas) Project-> Build options, pestaña Linker, picar en Basic (Figura 8) o Añadir en Include libraries: C:\CCStudio_v3.1\C6000\dsk6713\lib\dsk6713bsl.lib 6 GITT: Sistemas Electrónicos para Procesamiento de Señales 2016 Figura 8. Build options: linker. Visualización de resultados: Una vez compilado y linkado el programa correctamente y sin errores, se procede a volcarlo sobre el sistema DSK6713 con la opción: File->Load Program, y el ejecutable está en la carpeta Debug con la extensión .out (si previamente no hay conexión con el DSK es necesario hacer Debug->Connect) Con la opción Debug->Go main la ejecución del programa va al main. A partir de aquí es posible ejecutar el programa Run, detenerlo, señalar breakpoints, etc. Picando con el botón derecho del ratón sobre una línea de código (Figura 9) se pueden señalar breakpoints (Toggle Software Breakpoint) con lo que la línea queda marcada con un círculo rojo a la izquierda, o visualizar el valor de una variable (Add to Watch Window). Es importante usar las opciones de depuración de código para saber por qué nuestro programa no funciona correctamente. Con los breakpoints podemos comprobar si nuestro programa entra en determinadas funciones y la visualización de los valores de variables permite determinar si se actualizan adecuadamente. 7 GITT: Sistemas Electrónicos para Procesamiento de Señales 2016 Figura 9. Depuración del código. En el caso particular de esta práctica, debería observarse parpadear el LED 2 (le frecuencia dependerá del valor introducido en los ticks). Para visualizar los mensajes por pantalla, es necesario usar la opción del menú DSP/BIOS->Message Log. Entonces se despliega una ventana donde se puede elegir visualizar el objeto LOG0 o el LOG1. Funciones de la BSL: La Board Support Library permite la gestión de los LEDs, DIP Switches, el Codec de audio y la memoria Flash que incorpora la tarjeta. Funciones para el manejo de los LEDs: o DSK6713_LED_on(numero_LED) o DSK6713_LED_off(numero_LED) o DSK6713_LED_toggle(numero_LED) Funciones para lectura de los DIP Switches: o DSK6713_DIP_get(numero_interruptor) - ACTIVIDAD A 1. Modificar el programa para que: a) El LED2 parpadee a velocidad doble y mitad. b) Los 3 LEDs parpadeen a la vez , pero a diferentes velocidades. c) Asignar el LED que parpadea a los valores de los interruptores. 8 GITT: Sistemas Electrónicos para Procesamiento de Señales 2016 Obs.: DSK6713_DIP_get(numero_interruptor) Valor= DSK6713_DIP_get(1); 2. Modificar el programa para, en lugar de usar una tarea periódica, utilizar el Timer 1 y una interrupción HWI. Como ya no se utilizará la tarea periódica, se debe borrar el objeto PRD0 que se había configurado en el apartado anterior. Procedimiento: • Seleccionar la ventana de configuración de DSP/BIOS, Scheduling, HWI y seleccionar HWI_INT15 • Programar el timer y la función que manejará la interrupción como se muestra en la figura 10. Destacar que la selección “Use Dispatcher” permite que el compilador guarde automáticamente todos los registros utilizados en la interrupción. Figura 10. Configuración de HWI_INT15. Para la configuración del Timer1, seleccionar CSL en la pantalla de configuración de DSP/BIOS, picando sobre TIMER, como se muestra en la figura 11 9 GITT: Sistemas Electrónicos para Procesamiento de Señales 2016 Figura 11. Configuración de los timers. • • • Insertamos una nueva configuración de Timer (en la parte derecha del gráfico aparecen los datos a introducir) Seleccionamos Timer_Device1 Habilitamos el dispositivo con el manejador hTimer1 y pre-inicializamos con la configuración anterior, como se muestra en la figura 12. Figura 12. Configuración del Timer1 Por último, habría que añadir en el main la línea de código: IRQ_enable(TIMER_getEventId(hTimer1)); 10