Intro Ccs Dsk Tms320c6713
-
Upload
isco-goyri -
Category
Documents
-
view
227 -
download
0
description
Transcript of Intro Ccs Dsk Tms320c6713
-
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())