-
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())