Introducción al Code Composer Studio y al DSK C6713.
Práctica para configurar el códec AIC23
Funcionalidad de la tarjeta DSK6713 El DSP se comunica con los periféricos de la tarjeta DSK 6713 a través del EMIF (Interfaz de memoria externa) de 32- bit de ancho. La SDRAM, Flash y CPLD están todos conectados al bus. Las señales EMIF también se utilizan para las tarjetas externas (daughter). La DSP se comunica a través de señales analógicas de audio por po r medio del códec AIC23 y de cuatro conectores de audio de 3,5 mm (entrada de micrófono, entrada de línea, salida de línea, y salida de auriculares). El códec puede seleccionar el micrófono o la entrada de línea como la entrada activa. La salida analógica se envía tanto a la salida de línea y auriculares conectores de salida. La salida de línea tiene una ganancia fija, mientras que la salida de auriculares permite ajustar la ganancia. El CPLD (Complex Programmable Logic Dispositivo) se utiliza para implementar la lógica que une los componentes de la placa juntos. Los DSK incluye 4 indicadores LED y un interruptor DIP de 4 posiciones que permiten un a retroalimentación interactiva. En esta práctica de laboratorio, el CCS se utiliza para escribir, compilar y descargar el código en el DSKC6713. CCS incluye un compilador C, un ensamblador y un enlazador. También
la capacidad de graficar y admite la depuración en tiempo real. El compilador compila un programa fuente en C con extensión .c para producir un archivo fuente de ensamblador con extensión asm. El ensamblador ensambla un archivo extensión .asm para producir un archivo de objeto de lenguaje de máquina con la extensión .obj. El enlazador combina archivos objeto y bibliotecas de objetos para producir un archivo ejecutable con extensión .out. Este archivo ejecutable representa un archivo Formato (COFF) de objeto común relacionado. Este archivo ejecutable puede ser cargado y ejecutado directamente en el DSK6713.
Configuración del sistema Seguir las siguientes instrucciones, asegurando que el CC S y el DSKK6713 ya están conectados adecuadamente (previamente haber corrido el diagnóstico sin tener abierto el CCS). Abrir el CCS. En el menú GEL, seleccionar Check DSK! -- Quick test. Se desplegará el mensaje:15 Board Revision:1 CPLD Revision: 2. Esto asume que los cuatro DIP swithes (0,1,2,3) están en posición abierta. Presionar cualquier de los swithes y correr de nuevo el quick test again. Verificar el número equivalente.
Para el siguiente programa se generará una onda se noidal de 1 KHz en el uso de una tabla de consulta. Este programa utiliza el códec AIC23 en la Board Support Library 6713 para 6713 generar un tono. El tono se genera en función del estado del interruptor DIP 0. Cuando se presiona el interruptor, se genera el tono y el LED # 0 se enciende. El programa también crea un buffer para almacenar los datos de salida en la memoria. Mientras DIP # 0 está en la posición de encendido, el programa emite un tono y un gráfico. Este programa utiliza un bucle infinito para sondear el interruptor DIP. El bucle principal del código escribe cada punto de datos en la tabla de onda sinusoidal al codec utilizando el paquete AIC23 codec de la BSL. Cada función de escritura envía una única muestra de 16 bits para el códec. En este caso se envía los mismos datos dos veces, una para el canal izquierdo y una vez para el canal derecho. El códec es configurado para aceptar datos a una velocidad de 48.000 muestras estéreo por segundo. Ya que la tabla de senos es de 48 entradas de largo, la onda de salida resultante será una senoidal de 1KHz con la mismo salida para los canales izquierdo y derecho. El puerto serie se usa para transmitir datos al codec a un ritmo mucho más lento que el DSP pueda procesar los datos. Acepta los datos de 16 bits a la vez y las desplaza lentamente uno a la vez. La función de escritura devuelve un 1 si se ha completado la escritura con éxito o un 0 si el canal está ocupado en serie. El bucle while () alrededor de las funciones de escritura (Write) espera mientras que el puerto serie está ocupado p ara que el programa se puede sincronizar con la velocidad de datos del codec.
#include "dsk6713.h" #include "dsk6713_aic23.h" #include "dsk6713_led.h" #include "dsk6713_dip.h" // índice de table short loop = 0; // factor de ganancia short gain = 10 ; // output b u f f e r Int16 out_buffer [256]; // tamaño del buffer const short BUFFERLENGTH = 256; // contador para el buffer int i = 0 ; /* Codec configuration settings */ DSK6713_AIC23_Config config = { 0x0017, // 0 DSK6713_AIC23_LEFTINVOL Left line input channel volume 0x0017, // 1 DSK6713_AIC23_RIGHTINVOL Right line input channel volume 0x00d8, // 2 DSK6713_AIC23_LEFTHPVOL Left channel headphone volume 0x00d8, // 3 DSK6713_AIC23_RIGHTHPVOL Right channel headphone volume 0x0011, // 4 DSK6713_AIC23_ANAPATH Analog audio path control 0x0000, // 5 DSK6713_AIC23_DIGPATH Digital audio path control 0x0000, // 6 DSK6713_AIC23_POWERDOWN Power down control 0x0043, // 7 DSK6713_AIC23_DIGIF Digital audio interface format 0x0001, // 8 DSK6713_AIC23_SAMPLERATE Sample rate control 0x0001 // 9 DSK6713_AIC23_DIGACT Digital interface activation }; /* Pre-generated sine wave data, 16-bit signed samples */ Int16 sine_table[48] = { 0x0000, 0x10b4, 0x2120, 0x30fb, 0x3fff, 0x4dea, 0x5a81, 0x658b, 0x6ed8, 0x763f, 0x7ba1, 0x7ee5, 0x7ffd, 0x7ee5, 0x7ba1, 0x76ef, 0x6ed8, 0x658b, 0x5a81, 0x4dea, 0x3fff, 0x30fb, 0x2120, 0x10b4, 0x0000, 0xef4c, 0xdee0, 0xcf06, 0xc002, 0xb216, 0xa57f, 0x9a75, 0x9128, 0x89c1, 0x845f, 0x811b, 0x8002, 0x811b, 0x845f, 0x89c1, 0x9128, 0x9a76, 0xa57f, 0xb216, 0xc002, 0xcf06, 0xdee0, 0xef4c }; Uint32 fs = DSK6713_AIC23_FREQ_48KHZ; // main ( ) Código principal de rutinas, inicializa la BSL y corre la aplicación de los LEDS –
void main ( ) { DSK6713_AIC23_CodecHandle hCodec; DSK6713_init(); DSK6713_LED_init(); DSK6713_DIP_init(); //Inicializa el códec// hCodec = DSK6713_AIC23_openCodec(0, &config);
while(1) //DIP Swi tch API // DSK6713 DIP get (Uint32 dipNum) // Retorna un valor de 0 si el switch está en o f f // Retorna un valor de 1 si el switch está en on // i n f i n i t e loop { if (DSK6713_DIP_get ( 0 ) == 0) {// turn LED#0 on DSK6713_LED_on ( 0 ); out_buffer [i] = sine_table [loop] ; // wh i l e ( return value is not z e ro ) // see DSK6713 AIC23 write ( . . . ) // send data to left channel // output every Ts SW0 while (!DSK6713_AIC23_write (hCodec, sine_table [loop]*gain)); // send data to right channel while (!DSK6713_AIC23_write (hCodec, sine_table [loop]*gain)); i++; if (i==BUFFERLENGTH) i=0; // check for end of table if (++loop > 47) loop = 0; }//LED#0 o f f else DSK6713_LED_off (0); } } Crear un nuevo proyecto en CCS
Escribir el código y guardarlo como codecsin.c Crear un proyecto en CCS (Project!New). y guardarlo como codecsin.pjt Indexarlo al proyecto Agregar las librerías a la carpeta del proyecto, las cuales se ubican en /c6000/dsk6713/lib/). Scan file dependencies (Project ! Scan file dependencies). Configurar las opciones (Project ! Build options) de la siguiente forma: …
•
For the ’Basic’ target version : gen. debug info : opt speed vs size: prog level opt :
category: C671x full speed most critical none
•
For ’Feedback’ category: interlisting : opt/c and ASM(-s) For ’Preprocessor ’ category :
•
Define symbols:
CHIP_6713
Compilar y correr el programa. Carga del programa con el fin de cargar codecsin.out al DSK. Debe estar en el sinegraph carpeta \ Debug. Select Debug---Run. Conectar un altavoz a la salida LINE OUT de la DSK. Pulse el interruptor DIP # 0. El búfer de salida se actualiza continuamente cada 256 muestras, y el CCS puede desplegar puede trazar los datos de salida actuales almacenados en la memoria intermedia out_buffer. 1. Seleccione View!Graph!Time/Frequency, y configure el cuadro de dialogo tal como se muestra en la siguiente imagen.
2. Elija la transformada rápida de Fourier (FFT) para que el tamaño del cuadro sea de 2 orden. Pulse Aceptar y compruebe que el gráfico de magnitud FFT representa la componente de 1000 Hz.