intro ccs dsk tms320c6713

19
  UNIVERSIDAD  TÉCNICA FEDERICO S  ANTA M  ARÍA Departamento de Electrónica INTRODUCCIÓN AL CODE COMPOSER STUDIO  Y AL DSK  TMS320C6713 CURSO L  ABORATORIO DE PROCESAMIENTO DIGITAL DE SEÑALES SIGLA ELO - 385 PROFESOR  M  ATÍAS Z  AÑARTU  Valparaíso, Noviembre de 2011  

Upload: isco-goyri

Post on 04-Oct-2015

227 views

Category:

Documents


0 download

DESCRIPTION

descripcion de dsk

TRANSCRIPT

  • UNIVERSIDAD TCNICA FEDERICO SANTA MARA

    Departamento de Electrnica

    INTRODUCCIN AL CODE COMPOSER STUDIO Y AL DSK TMS320C6713

    CURSO

    LABORATORIO DE PROCESAMIENTO DIGITAL DE SEALES

    SIGLA

    ELO - 385

    PROFESOR

    MATAS ZAARTU

    Valparaso, Noviembre de 2011

  • Introduccin

    En este documento se han resumido las herramientas bsicas que se usarn en este laboratorio para realizar

    procesamiento digital de seales (DSP) en tiempo real sobre la plataforma DSK TMS320C6713. Esta introduccin le

    permitir familiarizarse con el hardware, el ambiente de trabajo y las herramientas de software para programar, depurar y

    verificar el cdigo ser cargado en el hardware. El contenido se ha sintetizado lo suficiente para otorgar una gua

    introductoria al estudiante, sin saturarlo con exceso de informacin. Aquellos interesados en profundizar los temas

    presentado podrn encontrar el material de referencia completo en la pgina web del la asignatura ELO385.

    Sobre el Hardware

    Durante el desarrollo del laboratorio se utilizar una tarjeta TMS320C6713 DSK (C6713 DSK) de Texas Intruments

    (TI). La sigla DSK corresponde a Digital Starter Kit, lo cual se refiere a que el procesador de seales (TMS320C6713)

    viene en una tarjeta con de una serie de componentes adicionales (por ejemplo, cdec audio, distintos tipos de memoria,

    control de perifricos, etc.), lo que transforma a la tarjeta DSK en una plataforma de iniciacin y experimentacin para el

    desarrollo de aplicaciones de procesamiento de seales.

    La tarjeta C6713 DSK, est conectada al puerto USB del PC corriendo en Windows. Instalado en el PC se encuentra el

    software que permite compilar, ensamblar, depurar y cargar las aplicaciones de la tarjeta DSK. En la Fig. 1, se muestra

    una vista superior de la tarjeta, con sus principales componentes. Para las entradas y salidas de seales anlogas, el DSK

    posee un CODEC STEREO AIC23, con una frecuencia de muestreo de hasta 96 kHz y una resolucin de hasta 32

    bits. Para fines prcticos, en este laboratorio el CODEC de audio ser generalmente manipulado con un muestreo de 16

    kHz por canal y con una resolucin de 16 bits.

    Para cada laboratorio los grupos de trabajo necesitarn estar equipados con un generador de seales y un osciloscopio,

    tanto para verificar el procesamiento de sus algoritmos como para visualizar el procesamiento de las formas de onda.

    Para algunos laboratorios se aconseja utilizar en lo posible un osciloscopio con analizador de espectro.

    La Tarjeta C6713 DSK es controlada por el PC mediante el programa Code Composer Studio (CCS). sta es una

    herramienta diseada para agilizar y enriquecer el proceso de desarrollo para programadores que crean y prueban

    aplicaciones de procesamiento digital de seales en tiempo real proveyendo herramientas para configuracin,

    construccin, depuracin y anlisis de programas. En las siguientes secciones se detalla el uso de este programa.

  • (a)

    (b)

    Fig. 1. (a) Vista superior tarjeta C6713 DSK; (b) Diagrama de bloques con los perifricos de la DSK y su interconexin.

  • Especificaciones tcnicas generales

    El DSP TMS320C6713 opera a 225 MHz otorgando hasta 1800 millones de instrucciones por segundo

    (MIPs) y 1350 MFLOPS. Esta generacin de DSP est diseada para aplicaciones que requieren alta

    precisin para aplicaciones tales como audio profesional, aplicaciones mdicas y mtodos de monitoreo y

    diagnstico. La tarjeta C6713 DSK est basada en la plataforma TMS320C6000 DSP e incluye las siguientes

    caractersticas:

    DSP TMS320C6713 de punto flotante y 32 bits

    Soporte JTAG incorporado via USB.

    Cdec de audio estreo (AIC23) de alta fidelidad de hasta 32 bits y 96 kHz.

    Cuatro entradas de audio de 3.5mm para micrfono, entradas y salidas de lnea estreo, y audfonos.

    4 LEDs e interruptores accesibles para el usuario.

    Memoria Flash de 512KB y DRAM de 16MB.

    Configuracin de la tarjeta a travs de un CPLD.

    Puerto de expansin para mdulos plug-in.

    Interfaz estndar IEEE JTAG incorporada.

    Puerto universal de alimentacin de +5V

    Code Composer Studio

    El Code Composer Studio es el entorno de desarrollo integrado (IDE) para los DSP de Texas Instruments que permite

    trabajar con lenguaje de programacin ANSI C, adems de incorporar herramientas de depuracin y herramientas de

    emulacin e intercambio de datos con aplicaciones externas.

    1. Conexin entre DSK y PC

    Antes de iniciar CCS se debe comprobar la correcta conexin de la tarjeta C6713 DSK y la comunicacin con el

    programa CCS. Para ello conecte la tarjeta DSK al PC, energcela y luego abra la aplicacin CCS. Siempre

    manipule con cuidado la tarjeta C6713 DSK. Si todo sale bien se debera abrir el ambiente de trabajo, si no, un mensaje

    de error aparecer. En ese caso verifique los pasos anteriores e intente nuevamente. El CCS y sus drivers deben estar

    correctamente instalados en el PC. Una vez en el ambiente de trabajo de CCS, debe establecer la conexin con la tarjeta

    mediante el men DebugConnect. Si la conexin ha sido exitosa un mensaje de confirmacin aparecer en la esquina

    inferior izquierda del ambiente de trabajo.

  • 2. Creando y configurando un proyecto

    Para ejemplificar esta seccin, descargue la carpeta de cdigos pertenecientes al laboratorio 1 desde la pgina web del

    curso. En el programa CCS seleccione el men de tems ProjectNew (ver Fig. 2). En Project Name escribir un

    nombre al proyecto (por ejemplo Proy1), en Location seleccionar la carpeta de trabajo recin creada, en Project Type

    seleccionar que la salida ser un ejecutable (.out), en Target seleccionar la familia de DSP que se va a utilizar (en este

    caso, TMS320C67XX) y presionar finalizar. Notar que CCS cre un archivo de proyecto .pjt donde se guardan la

    configuracin y referencias de los archivos usados en el proyecto. Es importante no modificar el contenido de este

    archivo ya que ello seguramente har que el proyecto no funcione adecuadamente.

    En la barra de herramientas del proyecto (ver Fig. 3), se puede ver que el proyecto tiene por defecto dos modos de

    compilacin: Debug y Release. El primer modo sirve para depurar el cdigo lnea por lnea, visualizando el valor de las

    variables en distintas etapas del cdigo. El segundo modo optimiza el cdigo en tamao y/o velocidad para su uso

    directo como versin final.

    Cada uno de estos modos de compilacin se puede configurar seleccionando ProjectBuild Options, donde aparece

    la ventana de la Fig. 4.

    Fig. 2. Ventana de creacin del Proyecto.

    Fig. 3. Barra de herramientas de proyectos.

  • Lo principal aqu es seleccionar el tipo de DSP a compilar, seleccionando en el campo Target Version el DSP c671X.

    Los encabezados y libreras propias de la DSK no son archivos de sistema incluidos en el Code Composer, por lo que

    hay que indicarle al proyecto dnde est la ruta con las libreras correspondientes para los perifricos del DSK. Para

    hacer esto, es necesario seleccionar ProjectBuild Options e ir a la categora Preprocessor, y en el campo llamado

    Include Search Path (-i) colocar

    $(Install_dir)\c6000\dsk6713\include

    que es la carpeta donde se encuentran los encabezados del DSK. Adems, los encabezados incluidos necesitan definir el

    tipo de DSP especfico que se est usando, por lo que es necesario seleccionar ProjectBuild Options e ir a la

    categora Preprocessor, y en el campo llamado Pre-define Symbol (-d) colocar

    DEBUG; CHIP_6713

    Ahora se comenzar a agregar archivos al proyecto, para esto, desde el men de tems seleccionar ProjectAdd Files

    to Project. Los programas necesarios para cada proyecto son:

    Lab_XX.c : Contiene el cdigo C para las actividades iniciales de cada laboratorio junto con las

    funciones de inicializacin de registros para el DSP. Este archivo ser otorgado para

    cada sesin de laboratorio y deber ser modificado para realizar las actividades

    requeridas.

    Fig. 4. Ventana de Build Options.

  • lnk.cmd : Indica al compilador la configuracin de la memoria del DSP, es decir, cantidad de

    memoria interna y externa, para programa y datos, adems de definir en qu secciones

    se almacenarn ciertos tipos de variables, y vincula libreras externas al proyecto.

    En el cdigo fuente Lab_XX.c vienen incluidos algunos encabezados (header files) necesarios para que el cdigo

    compile:

    dsk6713.h : Contiene las declaraciones en general para la configuracin y control de los elementos

    externos de la DSK.

    dsk6713_aic23.h : Contiene las declaraciones para la configuracin y control del cdec de audio AIC23

    dsk6713_led.h : Contiene las declaraciones para el manejo de los LED externos.

    dsk6713_dip.h : Contiene las declaraciones para el manejo de los DIP switchs.

    fastmath67x.h : Contiene las declaraciones para el uso de funciones matemticas optimizadas para el

    DSP.

    Una vez cargados los archivos, se debe compilar y correr el programa mediante los siguientes pasos:

    Desde el men de tems seleccionar ProjectRebuild All (o el cono ), con esto, el programa CCS recompila,

    reensambla y reenlaza todos los archivos del proyecto. Mensajes acerca del avance, advertencias, y errores en este

    proceso se observan en la ventana inferior en el CCS.

    Para cargar el programa en la tarjeta, seleccionar desde el men de tems FileLoad Program. Buscar el Archivo

    Proy1.out en la carpeta Proy1\Debug y apretar el botn aceptar para cargar en la tarjeta. Esto abre automticamente

    una ventana con el cdigo Assembler del programa seleccionado.

    Para ejecutar el programa en el DSP seleccione DebugRun o presionando en el cono . Ya que en la mayora de

    los casos el programa corre en un loop infinito, es necesario detenerlo utilizando DebugHalt o presionando en el

    cono . Es posible que al detener su programa se produzca un ruido audible que es producto de la interrupcin

    forzada del programa sin cerrar la comunicacin con el cdec dentro del loop infinito. En este caso, corra y detenga su

    programa nuevamente.

    En el caso de trabajar en un proyecto con mltiples archivos, no es necesario compilarlos todos cada vez que se ha

    modificado alguno. El programa CCS ofrece la posibilidad de realizar una compilacin incremental, es decir compila slo

    aquellos archivos que han sido modificados desde la ltima compilacin, para esto haga click en el icono . Si el

    archivo .out, ha sido cargado al menos una vez en la tarjeta, es posible usar la opcin de FileReload Program para

    cargar el ltimo programa compilado.

    Al terminar su sesin de trabajo, asegrese de que su programa est detenido mediante DebugHalt. Termine la

    conexin DebugDisconnect y cierre CCS. Una vez realizados estos pasos, desconecte el puerto USB del PC y

    remueva la fuente de alimentacin de la tarjeta DSK. Siempre manipule con cuidado la tarjeta C6713 DSK.

  • 3. Visualizacin de variables

    Watch Windows

    Cuando se desarrollan o prueban programas es comn tratar de verificar el valor de una variable durante la ejecucin de

    un programa, para esto el programa CCS cuenta con Breakpoints y Watch Window para observar dichos valores. Los

    Breakpoints son banderas que indican al DSP detener la ejecucin del programa en el punto indicado. Esto permite,

    por ejemplo, conocer el valor de una variable justo despus de la ejecucin de algn algoritmo, de modo que se pueda

    revisar el correcto funcionamiento de la funcin o procedimiento que implementa dicho algoritmo, o verificar el

    correcto llamado a alguna rutina de interrupcin. Para agregar un Breakpoint basta con hacer doble click en la lnea del

    programa en C o en Assembler, otra forma, es ubicar el cursor en la posicin deseada y seleccionar el icono de la

    barra de herramientas. Un punto rojo indicar la presencia del Breakpoint. Para quitar un Breakpoint se repite el

    procedimiento descrito anteriormente.

    Las Watch Window ( ) son ventanas que permiten visualizar el valor de las diferentes variables utilizadas en el

    programa (recuerde que las variables locales existen slo dentro de las funciones que las crean). La Fig. 5 muestra una

    Watch Window tpica.

    La primera columna indica el nombre (o direccin) de la variable a visualizar. La segunda muestra el valor de la variable

    (en rojo si ha cambiado su valor recientemente). La tercera indica el tipo de variable visualizada (int, long, unsigned,

    float, etc.). Finalmente la cuarta columna permite seleccionar el formato de la visualizacin de la variable (decimal,

    hexadecimal, char, etc.). Para agregar una variable en la lista, basta con hacer doble click al final de ella y escribir el

    nombre de la variable. Recuerde que en C una variable existe slo dentro de la funcin donde es definida, salvo en el

    caso de las variables globales (es decir, cree variables globales para visualizar datos y grficos). Para ejecutar el programa

    en el DSP seleccione DebugRun o presionando en el cono , el programa se ejecutar hasta encontrar un

    breakpoint o llegar al final de la ejecucin. Otra opcin es seleccionar DebugAnimate ( ), al igual que Run al

    Fig. 5. Watch Window.

  • llegar a un Breakpoint el programa se detendr, pero continuar automticamente pasada una cantidad de tiempo

    indicada en OptionCustomizeAnimate Speed. En caso que los datos no se actualicen, verifique que

    ProyectBuild optionsCompilerGenerate debug info est configurada como Full Symbolic Debug.

    Grficos

    Si bien las Watch Windows son muy tiles ya que permiten visualizar y modificar variables internas del DSP, cuando se

    trabaja con variables de tipo arreglo con un alto nmero de elementos, la visualizacin en forma de tabla puede no ser la

    ms recomendable, siendo preferible un formato grfico. Esto se logra a travs de ViewGraphTime/Frequency,

    apareciendo la ventana indicada en la Fig. 6:

    Las opciones ms importantes de configuracin de grficos son:

    Display Type : Grfico simple, doble, transformada de Fourier, entre otras.

    Start Address : Direccin del primer dato (Puede usar el nombre de la variable asociada al

    arreglo ya que en C el nombre del arreglo coincide con la direccin inicial

    del mismo).

    Acquisition Buffer Size : Cantidad de datos a ser tomados a partir de la direccin base.

    Index Increment : Separacin entre los datos a tomar.

    Display Data Size : Cantidad de datos a mostrar en el grfico.

    DSP Data Type : Formato de los datos a ser representados: int, long, float.

    Sampling Rate (Hz) : Tasa de muestreo en frecuencia del arreglo de datos para representar datos

    en funcin del tiempo (en vez del nmero de muestras)

    Fig. 6.a) Panel de propiedades para un grfico; b) Grfico

  • 4. Uso del Cdec de Audio y Generacin de Seales

    La DSK TMS320C6713 utiliza el cdec estreo de altas prestaciones de Texas Instruments AIC23 (chip TLV320AIC23),

    el cual permite muestrear seales de audio anlogas provenientes de una lnea de entrada o micrfono y convertirlas en

    datos digitales para ser procesados por el DSP, y permite convertir datos digitales desde el DSP en seales de audio

    anlogas que salen por la lnea de salida y de audfonos para poder medir y escuchar esas seales, adems de poseer un

    canal de comunicacin digital exclusivamente para configurar el cdec, segn los requerimientos del usuario.

    Entre las caractersticas del cdec, se encuentra el funcionamiento a tasas de muestro de seales de entre 8 kHz y 96 kHz

    con altas razones de seal-ruido (SNR>90 dB) gracias al uso de ADCs y DACs de tipo sigma-delta, trabajando con

    tensiones alternas de 1.41 V de amplitud (1 VRMS), y se puede configurar el cdec para controlar el volumen de los

    canales, intercambiar la lectura entre el canal de micrfono y la lnea de entrada, cambiar el sobremuestreo de los

    conversores, etc. Adems, posee un preamplificador polarizado para micrfonos electret y una salida de audfonos para

    manejar impedancias de 16 y 32 .

    El cdec se comunica con la DSP a travs del puerto buffer serial multicanal (McBSP) utilizando dos canales, uno para

    cambiar los registros de configuracin del cdec, y otro para enviar y recibir los datos digitales de audio entre el DSP y el

    cdec, tal como se aprecia en la Fig. 7

    Los conectores de audio para el cdec son los conocidos jacks stereo de 2.5mm, y la seal de audio tiene acoplamiento

    alterno (AC), adems de poseer polarizador para la entrada de micrfono y filtros pasabajos pasivos entre el cdec y los

    jacks de audio.

    Fig. 7: Diagrama de bloques del cdec AIC23

  • Manejo del cdec de audio a travs del CCS

    La finalidad del laboratorio de DSP es poder leer y escribir seales de audio utilizando el cdigo C generado y cambiado

    para cada experiencia. Para ello, es necesario poder controlar los registros de configuracin del cdec y poder enviar y

    recibir datos digitales para manipularlos con el DSP. Para ello, se utilizar una interfaz de programacin de aplicaciones

    (API) entregada por el fabricante para simplificar al mximo la inicializacin, configuracin y manejo en tiempo real del

    cdec, utilizando funciones y procedimientos debidamente soportados y documentados.

    La Board Support Library (BSL) es la biblioteca encargada de proveer el cdigo C necesario para manejar todos los

    dispositivos externos de la DSK, incluyendo el cdec de audio. La biblioteca especfica para este DSK se llama

    dsk6713bsl.lib, mientras que los encabezados necesarios para manejar especfico para el cdec se llaman

    dsk6713.h y dsk6713_aic23.h, y todos ellos se encuentran en la ruta $(TI_DIR)\C6000\dsk6713, la

    cual no corresponde a una ruta de sistema original, por lo que se deben tomar las medidas correspondientes para poder

    incluir la biblioteca y los encabezados en el proyecto.

    Las funciones de manejo del cdec contenidas en la biblioteca son las siguientes:

    DSK6713_AIC23_CodecHandle DSK6713_AIC23_openCodec(int id, DSK6713_AIC23_Config *Config);

    Inicializa y configura el cdec simbolizado por la variable id (0 en este caso), y utilizando la configuracin contenida en

    el puntero *Config, retorna una variable de identificacin del cdec del tipo DSK6713_AIC23_CodecHandle que

    permitir manipular el resto de las funciones.

    void DSK6713_AIC23_rset(DSK6713_AIC23_CodecHandle hCodec, Uint16 regnum, Uint16 regval);

    Permite cambiar un registro de configuracin regnum especfico del cdec identificado como hCodec (variable

    inicializada utilizando la funcin anterior) al valor especificado en regval.

    Uint16 DSK6713_AIC23_rget(DSK6713_AIC23_CodecHandle hCodec, Uint16 regnum);

    Adquiere el valor del registro regnum del cdec identificado como hCodec.

    void DSK6713_AIC23_config(DSK6713_AIC23_CodecHandle hCodec, DSK6713_AIC23_Config *Config);

    Permite configurar de una vez todos los registros del cdec identificado como hCodec.

    void DSK6713_AIC23_setFreq(DSK6713_AIC23_CodecHandle hCodec, Uint32 freq);

    Permite ajustar la frecuencia de muestreo del cdec identificado como hCodec a un valor determinado, dentro de

    ciertos valores permitidos.

    Int16 DSK6713_AIC23_write(DSK6713_AIC23_CodecHandle hCodec, Uint32 val);

  • Escribe una palabra entera en la salida del cdec hCodec, entregando un 1 como resultado si se termina de escribir

    satisfactoriamente en el cdec.

    Int16 DSK6713_AIC23_read(DSK6713_AIC23_CodecHandle hCodec, Uint32 *val);

    Lee la seal de entrada del cdec hCodec y la deja en la direccin *val, entregando un 1 como resultado si se termina

    de escribir satisfactoriamente en el cdec.

    void DSK6713_AIC23_outGain(DSK6713_AIC23_CodecHandle hCodec, Uint16 outGain);

    Ajusta la ganancia de los canales de salida del cdec hCodec.

    void DSK6713_AIC23_loopback(DSK6713_AIC23_CodecHandle hCodec, Int16 mode);

    Habilita el modo loopback (transferir lo ledo en el canal de entrada del cdec directamente en el canal de salida) si

    mode es TRUE.

    void DSK6713_AIC23_mute(DSK6713_AIC23_CodecHandle hCodec, Int16 mode);

    Deshabilita las lneas de entrada del cdec si mode es TRUE.

    void DSK6713_AIC23_powerDown(DSK6713_AIC23_CodecHandle hCodec, Uint16 sect);

    Apaga las distintas secciones del cdec (ADC, DAC, reloj, etc.) desde la variable sect.

    void DSK6713_AIC23_closeCodec(DSK6713_AIC23_CodecHandle hCodec);

    Libera al cdec y finaliza su configuracin y manejo.

    Como se mencion anteriormente, el cdec puede ser configurado mediante un canal de comunicaciones digital

    exclusivamente habilitado para ello, a travs de 11 registros de 9 bits con distintos valores segn las diferentes

    configuraciones que dispone el cdec. Los registros son los listados en la Tabla I, y estn detallados en el manual del

    cdec disponible en la pgina web del ramo.

    Entre los registros importantes, est el Analog audio path control (registro 0000101 regnum = 0x0004), que

    permite configurar el manejo de datos anlogo entre los distintos canales de entrada y salida del cdec. Por defecto este

    registro tiene un valor 000010010 regval= 0x0012 el cual habilita la entrada de lnea. Asignando a este registro el

    nuevo valor 000010101 regval= 0x0015 se selecciona y activa el micrfono con una ganancia de 20 dB. Para

    mayores detalles consulte el manual del codel AIC23

  • Por defecto, existe una configuracin definida en una constante del encabezado dsk6713_aic23.h llamada

    DSK6713_AIC23_DEFAULTCONFIG que permite la utilizacin de las lneas de entrada y salida a mxima ganancia, con

    una tasa de muestreo de 48 kHz, etc. Para cambiar la configuracin se puede inicializar el cdec con otra constante

    distinta a la antes mencionada, o cambiar solo el registro que uno desea cambiar utilizando la funcin

    DSK6713_AIC23_rset.

    Las frecuencias de muestreo disponibles estn en constantes definidas en el encabezado dsk6713_aic23.h, y son las

    siguientes:

    DSK6713_AIC23_FREQ_8KHZ

    DSK6713_AIC23_FREQ_16KHZ

    DSK6713_AIC23_FREQ_24KHZ

    DSK6713_AIC23_FREQ_32KHZ

    DSK6713_AIC23_FREQ_44KHZ

    DSK6713_AIC23_FREQ_48KHZ

    DSK6713_AIC23_FREQ_96KHZ

    Por defecto, el cdec debe escribir/leer los dos canales para mantener la tasa de muestreo, desde un buffer serial de

    datos de 32 bits, donde los primeros 16 bits corresponden al canal izquierdo y los siguientes 16 bits para el canal

    derecho. (ver Fig. 8).

    Tabla I: Registros de configuracin disponibles en el cdec N Direccin Descripcin del Registro

    1 0000000 Left line input channel volume control

    2 0000001 Right line input channel volume control

    3 0000010 Left channel headphone volume control

    4 0000011 Right channel headphone volume control

    5 0000100 Analog audio path control

    6 0000101 Digital audio path control

    7 0000110 Power down control

    8 0000111 Digital audio interface format

    9 0001000 Sample rate control

    10 0001001 Digital interface activation

    11 0001111 Reset Register

    Fig. 8: Modo de lectura/escritura por defecto del cdec

  • Lo anterior significa que las funciones DSK6713_AIC23_read y DSK6713_AIC23_write deben escribirse dos veces

    contiguamente en cada ciclo del DSP con el fin de trabajar a la frecuencia de muestreo configurada, en donde la primera

    funcin lee/escribe en el canal izquierdo y la segunda funcin lee/escribe el canal derecho.

    Como se debe leer/escribir variables enteras de 16 bits (incluyendo el signo en el bit ms significativo, i.e.., short),

    pero la DSP manipula comnmente variables de punto flotante (i.e., float), es necesario hacer una conversin de tipo

    (typecasting) de manera de poder manejar adecuadamente las variables entre el DSP y el cdec. Por ejemplo, si se trabaja

    con variables de punto flotante normalizadas (de amplitud unitaria como mximo), la ganancia entre la variable interna

    de punto flotante y la variable de lectura/escritura del cdec debe tener un valor de 0x7FFF (32767 en decimal o 15 bits

    en 1), de manera de utilizar el mximo rango del cdec considerando el bit ms significativo como signo. Tenga cuidado

    tambin de mantener la estructura float en sus operaciones aritmticas dentro del cdigo (e.g., si tiene que dividir X

    por dos utilice X/2.0 en vez de X/2).

    Ejemplo simple

    El siguiente cdigo fuente de ejemplo (.c) permite adquirir las seales de los dos canales de la lnea de entrada, sumarlas y

    restarlas, y entregar la diferencia de las seales de entrada por el canal izquierdo, mientras que por el canal derecho se

    obtiene la suma entre esas dos seales, todo lo anterior utilizando la configuracin por defecto del cdec, pero a una

    frecuencia de muestreo de 24 kHz.

    El cdigo muestra primero las lecturas de los canales izquierdo y derecho con la funcin correspondiente dentro de una

    sentencia condicional while, para asegurarse que la siguiente lnea de cdigo se efecte solo cuando el canal se haya

    ledo satisfactoriamente. Despus, se acondicionan las seales ledas desde el cdec a un valor flotante unitario, por lo

    que se divide el entero adquirido por 32767 (15 bits o 0x7FFF en hexadecimal) y se hace un typecasting primero a

    short (entero de 16 bits) y despus a flotante. Con las variables flotantes acondicionadas, se procede a la operatoria,

    para despus reacondicionar las variables a entero, multiplicando el flotante por 32767 y efectuando un typecasting a

    short. Cabe destacar que es necesario asegurar de alguna manera de que los flotantes no sobrepasen el valor unitario

    para que no ocurran saturaciones u overflows. Finalmente, se procede a escribir la variable acondicionada en el cdec,

    usando la misma tcnica de la sentencia while para asegurar que se efectu efectivamente la escritura en el cdec antes

    de pasar a la siguiente instruccin.

  • #include

    #include

    DSK6713_AIC23_Config el_config = DSK6713_AIC23_DEFAULTCONFIG;

    DSK6713_AIC23_CodecHandle el_handle0;

    unsigned int int_in_r,int_in_l,int_out_r,int_out_l;

    float float_in_r,float_in_l,float_out_r,float_out_l;

    void main()

    {

    // Initialize Board Support Library

    DSK6713_init();

    //open the codec in el_handle0

    el_handle0 = DSK6713_AIC23_openCodec(0, &el_config);

    //Set Freq of AIC23 Codec

    DSK6713_AIC23_setFreq(el_handle0, DSK6713_AIC23_FREQ_24KHZ);

    while(1)

    {

    //Left channel read

    while(!DSK6713_AIC23_read(el_handle0, &int_in_l));

    //Right channel read

    while(!DSK6713_AIC23_read(el_handle0, &int_in_r));

    //typecasting - unitary float variable

    float_in_l=((float)(short)(int_in_l))/32767.0;

    float_in_r=((float)(short)(int_in_r))/32767.0;

    //signal manipulation

    float_out_l=float_in_r-float_in_l;

    float_out_r=float_in_r+float_in_l;

    //typecasting full range 16-bit signed integer

    int_out_l=(short)(32767*float_out_l);

    int_out_r=(short)(32767*float_out_r);

    //Left channel write

    while(!DSK6713_AIC23_write(el_handle0, int_out_l));

    //Right channel write

    while(!DSK6713_AIC23_write(el_handle0, int_out_r));

    }

    }

  • Efectos de los ADC/DAC

    En la Fig. 9 se puede apreciar el grfico de respuesta al colocar una seal sinusoidal de 6 Vp-p y 500 Hz de frecuencia

    solo en el canal izquierdo, apreciando que en la salida, tanto el canal izquierdo como el derecho, muestran la misma

    sinusoidal pero con una amplitud de 2.8 Vp-p (la mxima) y desfasada respecto de la entrada. El desfase es debido a que

    el cdec posee tanto en la entrada como en la salida filtros digitales antialiasing que desfasan la seal linealmente con la

    frecuencia; mientras que la diferencia de amplitud es debido al acondicionador anlogo que le da el offset a la seal de

    entrada para que su rango de entrada sea de 0 a 3V.

    En la Fig. 10 se pueden ver las seales que entran y salen directamente del cdec, apreciando que aqu si conservan la

    amplitud entre la entrada y la salida, pero conservndose la diferencia en la fase. Los acondicionadores anlogos entre el

    cdec y los jacks estreo no provocan una distorsin significativa en la fase.

    Fig. 9: seales de E/S del jack estreo, usando el cdigo de ejemplo

    Lout, Rout

    Lin

  • Finalmente, en la Fig. 11 se puede apreciar el efecto del cambio de fase en funcin de la frecuencia al utilizar una

    sinusoidal de 1 kHz de frecuencia, pues la seal de entrada al chip no tiene la misma fase que la mostrada en la figura

    anterior.

    Fig. 10: seales de salida del jack estreo y de E/S directamente del cdec AIC23, usando el cdigo de ejemplo

    Fig. 11: seales de salida del jack estreo y de E/S directamente del cdec AIC23, usando el cdigo de ejemplo

    Lout, Rout

    Chip_Lin

    Chip_Lout

    Lout, Rout

    Chip_Lin

    Chip_Lout

  • 5. Configuracin del linker

    El linker es un archivo .cmd que debe ser incluido en cada proyecto de CCS y que se utiliza para unir el cdigo

    assembler creado en la compilacin y usado como un Common Object File Format (COFF) con otros archivos de

    librera, adems de configurar el manejo y mapeo de las secciones de memoria de las distintas variables e instrucciones

    del cdigo; todo ello para crear el ejecutable a grabarse en el DSP. Por lo general no tendrn que hacer cambios al

    archivo que se les dar por defecto para los proyectos de las distintas experiencias, pero de todas formas se da cuenta

    aqu una breve descripcin de las componentes que conforman el linker. A continuacin se presenta el cdigo por

    defecto del linker usado en esta asignatura.

    -heap 0x400

    -stack 0x400

    -IC:\CCStudio_v3.1\c6000\dsk6713\lib

    -ldsk6713bsl.lib

    -lcsl6713.lib

    -lfastmath67x.lib

    -lrts6700.lib

    MEMORY

    {

    /* 64 Kbytes of internal RAM, equivalent to 16K of 32bit instructions */

    vecs: o= 00000000h l= 00000200h /* The first 512 bytes (128 instr.) */

    /* are reserved for the vector table */

    IRAM: o= 00000200h l= 0000FFE0h /* The remaining IRAM is usable for program. 63.5K bytes */

    SDRAM: o = 80000000h l = 01000000h /* DSP 6713 */

    /*SDRAM: o = 80000000h l = 00400000h /* DSP 6711 */

    }

    SECTIONS

    {

    ".vectors" > vecs

    .cinit > IRAM

    .text > IRAM

    .stack > IRAM

    .bss > IRAM

    .const > IRAM

    .data > IRAM

    .far > SDRAM

    .switch > IRAM

    .sysmem > IRAM

    .tables > IRAM

    .cio > IRAM

    }

  • En la etapa de configuracin, los parmetros heap y stack definen respectivamente al espacio de memoria

    dinmica (usando malloc()) y la reservada para variables internas. El parmetro con I define el directorio

    alternativo donde existen bibliotecas de sistema, el cual es el caso de las bibliotecas del fabricante para el DSK6713, y el

    parmetro con -l define las bibliotecas adicionales que el cdigo necesita para operar. En este caso, se deben agregar los

    siguientes archivos de bibliotecas:

    - dsk6713bsl.lib: Agrega las funciones definidas especficamente para los elementos del DSK (LEDs,

    DIP switches, Codec AIC23, Memoria Flash).

    - csl6713.lib: Agrega las funciones para el manejo de perifricos del DSP (necesario si se usa la

    biblioteca anterior)

    - fastmath67x.lib: Agrega las funciones correspondientes a las operaciones matemticas optimizadas

    para el DSP.

    - rts6700.lib: Agrega las funciones bsicas de ANSI C acondicionadas para el DSP.

    En la etapa de memoria, se configura el mapeo de direcciones de memoria fsica en distintas partes, definindolas con

    distintos nombres. En este caso, se tienen 3 secciones de memoria fsica:

    - vecs: Espacio de memoria para vectores de interrupcin y otras funciones predefinidas.

    - IRAM: RAM interna del DSP (de mayor velocidad)

    - SDRAM: RAM externa al DSP de 16MB.

    Finalmente, en la etapa de sections se definen en qu espacio de memoria fsica sern mapeadas los diversos tipos de

    datos (secciones) del programa

    - .cinit: Tablas para inicializar variables y constantes

    - .const: Constantes creadas con la macro #define

    - .switch: Tablas con las expresiones que usan switch-case

    - .bss: Espacio no inicializado reservado para variables globales y estticas

    - .stack: Espacio reservado para el stack de sistema (variables locales y argumentos de funciones)

    - .data: Reserva espacio para datos no inicializados en general

    - .far: Espacio reservado para tipos de datos que son declarados como far.

    - .sysmem: Espacio reservado para memoria heap dinmica (usando malloc())

    - .cio: Espacio para funciones stdio (como printf())