You are on page 1of 65

DigitalSignalProcessorDSP.

Nota:

GuadelUsuarioDigitalSignalProcessor

Todos los ejemplos de esta gua fueron desarrollados y probados


especialmente para el DSP TMS320 F28016, utilizando la placa de
desarrollo creada por OLIMEX (TMS320-P280161). Por lo tanto, los
proyectos, sugerencias y comentarios pueden no necesariamente
funcionar en otros modelos DSP.
Para aprovechar mejor esta gua, se recomienda al lector tener
conocimientos bsicos de programacin en C/C++ (struct, funciones,
main(), #define, etc.) y de microcontroladores y perifricos
(direccionamiento, registros, interrupciones, etc.).
La informacin entregada en esta gua es referencial y es suficiente para
tener un concepto general del modo de uso de un DSP. En ningn caso
representa una gua completa sobre cmo utilizar cualquier elemento
del mismo. Para mayor detalle descargar la documentacin desde
www.ti.com o las guas ms importantes y proyectos de ejemplo desde
www.olimex.cl en la seccin Tarjetas Olimex->DSP.

GuadelUsuarioDigitalSignalProcessor

Tabla de Contenidos.
1
2

5
6

Introduccin. ................................................................................................................... 7
Detalles tcnicos. ............................................................................................................ 9
2.1
Procesador DSP. ..................................................................................................... 9
2.2
Tarjeta de Desarrollo para el DSP. ....................................................................... 14
Programacin. ............................................................................................................... 17
3.1
Flujo de un programa............................................................................................ 17
3.2
CodeComposer Studio. ......................................................................................... 18
3.2.1
Caractersticas............................................................................................... 19
3.3
Cmo Programar? Hola Mundo! ........................................................................ 20
3.3.1
Instalacin y Configuracin CCS. ................................................................ 20
3.4
Blinking Led. ........................................................................................................ 24
3.5
Debuggear............................................................................................................. 29
3.5.1
Escribir datos en un Archivo de Salida ........................................................ 35
3.5.2
Leer Datos en un Archivo de Salida ............................................................. 37
3.5.3
Graficar datos en tiempo real........................................................................ 37
3.6
Conversor ADC. ................................................................................................... 40
3.7
Uso de Archivos GEL .......................................................................................... 45
3.8
Ejemplo Echo Back usando SCI........................................................................... 48
Ejemplo......................................................................................................................... 50
4.1
Cmo crear un nuevo Proyecto? ......................................................................... 50
4.2
Uso de librera FFT y otras modificaciones. ........................................................ 55
4.3
Filtrado de Seales. .............................................................................................. 60
Resumen Atajos Teclado. ............................................................................................. 64
Manuales de Referencia de TI.COM ............................................................................ 65

GuadelUsuarioDigitalSignalProcessor

ndice de Figuras.
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura

1-1 Esquema del uso de un DSP. ............................................................................... 7


2-1 Mapa de memoria del DSP. ............................................................................... 11
2-2 Diagrama de bloques del DSP. .......................................................................... 13
2-3 Tarjeta de desarrollo para el DSP TMS320 F28016. ......................................... 14
2-4 Esquemtico de la tarjeta de desarrollo TMS320 F28016. ................................ 15
3-1 Flujo de un Programa Tipo. ............................................................................... 17
3-2 Seleccin de Configuracin de la Tarjeta. Emulador XDS100. ........................ 21
3-3 Nombre de la Conexin. .................................................................................... 22
3-4 Eleccin de modelo del DSP. ............................................................................ 22
3-5 Propiedades del Procesador. .............................................................................. 23
3-6 Presionar el Botn Save & Quit......................................................................... 23
3-7 Botones para Compilar. ..................................................................................... 24
3-8 Placa Conectada o no Conectada. ...................................................................... 25
3-9 Cargar un Programa. .......................................................................................... 25
3-10 Modo de Booteo del ejemplo. M0 SARAM. ................................................... 26
3-11 Cambio valor BLINK_TIME. ......................................................................... 27
3-12 Cambio para apagar el LED al presionar el botn. .......................................... 27
3-13 Colocacin de un Breakpoint........................................................................... 29
3-14 Valor de una variable en tiempo de ejecucin. ................................................ 30
3-15 Step-over (F10) y Step-into (F11). .................................................................. 30
3-16 Watch Window. ............................................................................................... 31
3-17 Agregar variables Globales.............................................................................. 33
3-18 Eleccin de Variables Globales. ...................................................................... 34
3-19 Parte del esquemtico de la tarjeta. Botn de GPIO 9. .................................... 34
3-20 Administrador de Breakpoints. ........................................................................ 35
3-21 Men contextual de Action. ............................................................................. 35
3-22 Parmetros para escribir datos en un archivo. ................................................. 36
3-23 Indicador de largo de las variables. ................................................................. 36
3-24 Leer datos desde un archivo............................................................................. 37
3-25 Parmetros para graficar una seal. ................................................................. 38
3-26 Grfico realizado con los datos. ....................................................................... 39
3-27 Diagrama de Bloques del ADC. ...................................................................... 41
3-28 Diagrama Simple del Bloque ADC. ................................................................ 42
3-29 Trimmer AN_TR, botn GPIO9 y Led GPI11. ............................................... 43
3-30 Ejemplo Conversor ADC. ................................................................................ 44
3-31 Men desplegable para archivo GEL............................................................... 46
3-32 Programa EchoBack con Hyperterminal. ........................................................ 49
4-1 Creacin de un proyecto. ................................................................................... 50
4-2 Guardar Cdigo Fuente...................................................................................... 51
4-3 Opciones par incluir archivos de cabecera. ....................................................... 52
4-4 Carpetas del proyecto. ....................................................................................... 53
4-5 Configuracin Build_Option. ............................................................................ 54

Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura
Figura

GuadelUsuarioDigitalSignalProcessor

4-6 Configuracin de botones. ................................................................................. 55


4-7 Funcin Gpio_Select(). ...................................................................................... 56
4-8 Inclusin de libreras usando o <>. ............................................................... 56
4-9 Forma de incluir una librera al CCS. ................................................................ 57
4-10 Cdigo bsico para utilizar la FFT. ................................................................. 58
4-11 Funciones disponibles para la FFT. ................................................................. 59
4-12 Comand Linker de ejemplo para ocupar la librera FFT. ................................ 60
4-13 Comand Linker mnimo para librera FFT. ..................................................... 60
4-14 Esquema de un Filtro FIR. ............................................................................... 61
4-15 Ejemplo cdigo para Historial. ........................................................................ 62
4-16 Macro para definir filtro. ................................................................................. 62
4-17 Cdigo para Convolucin. ............................................................................... 62

GuadelUsuarioDigitalSignalProcessor

ndice de Tablas.
Tabla 3-1 Configuracin Jumpers para Booteo. ................................................................... 26
Tabla 3-2 Archivos principales de un proyecto. ................................................................... 28
Tabla 3-3 Funciones GEL disponibles. ................................................................................ 47
Tabla 5-1 Tabla resmen de atajos. ...................................................................................... 64

GuadelUsuarioDigitalSignalProcessor

1 Introduccin.
Un DSP o Digital Signal Processor (Procesador Digital de Seales) es un
microprocesador especializado en el anlisis de seales en tiempo real. Se caracteriza por
poseer un set de instrucciones que permiten manejar de manera eficiente el procesado de
una seal.

Figura 1-1 Esquema del uso de un DSP.

Todo el diseo de un DSP se basa en el manejo eficiente de una seal digitalizada,


ya que debido a la latencia tpica de cualquier procesador, la operacin matemtica debe
hacerse en un tiempo acotado, para que se pueda trabajar en tiempo real. Cuando se
convierte una seal analgica en digital, sta es muestreada cada cierto intervalo, por lo que
cualquier operacin matemtica debe hacerse entre muestras, es decir, una vez que llegue
una muestra se debe realizar la operacin y debe estar lista antes de que llegue la otra. Un
DSP proporciona una rapidez y baja latencia, que permite el procesado de seales en
tiempo real, y an as siendo una herramienta de bajo consumo.

Entre las aplicaciones que ms utilizan un DSP se encuentran:

mbito industrial (automatizacin, control, bombas, compresin, robtica, etc.).


Automotriz (direccin electrnica, sensado de presin de torque y de inercia, sensor
de colisin, etc.).
Digital (AC/DC, UPS, DC/AC, displays LCD, etc.).
Sensado Avanzado (RFID, medicin ptica, lector de cdigo de barras, sensado y
anlisis mdico, medidor de flujo, control de pantallas Touch Screen, efectos de
audio y control retroalimentado, etc.).
Control de motores (fase simple, trifsicos, induccin AC, Brushless DC, etc.).

Las herramientas mnimas necesarias para comenzar a trabajar con el DSP son: el
hardware, que consta de la placa de desarrollo fabricada por OLIMEX la TMS320 P28016
y el conector TMS320-JTAG para programar la tarjeta; y el software, que consta del Code
Composer Studio (CCS) el cual es un IDE que permite programar, compilar y debuggear
los programas realizados para el DSP. La tarjeta de OLIMEX adems necesita de un driver

GuadelUsuarioDigitalSignalProcessor

que se instala en el CCS. Todo lo anterior se encuentra disponible en la pgina de


Ingeniera MCI LTDA2 junto a todo lo necesario para su utilizacin.
Esta gua constar de varios captulos referentes a un DSP, pero se trabajar en
detalle con la tarjeta de desarrollo del TSM320 P280163. Se explicar a grandes rasgos la
arquitectura de un DSP y del esquemtico de la tarjeta. Adems se mostrarn algunos
ejemplos prcticos para el uso de esta tarjeta y una ayuda bsica para el uso de la
herramienta Code Componer Studio (CCS) de Texas Instrument.
De ahora en adelante, toda referencia a la palabra DSP, ser para el modelo
TMS32028016 utilizado en la placa de desarrollo TSM320 P28016.

GuadelUsuarioDigitalSignalProcessor

2 Detalles tcnicos.
Se mostrarn las caractersticas ms importantes tanto del procesador del DSP como
de la tarjeta de desarrollo.

2.1 Procesador DSP.


El procesador del DSP es el TMS320F28016 y posee las siguientes caractersticas:

Tecnologa esttica CMOS de altas-prestaciones (velocidad de reloj se ajusta con un


PLL interno usado como multiplicador):
o 100 MHz (10 ns tiempo de ciclo). Ciclo de trabajo avanzado.
o 60 MHz (16.67 ns tiempo de ciclo). Ciclo de trabajo Normal.
o Diseo de bajo consumo (1.8 V en el ncleo, 3.3 V I/O).
CPU de 32-bit de altas prestaciones (TMS320C28x)
o 16x16 y 32x32 operaciones MAC (permite multiplicar en un slo ciclo dos
nmeros de 16 bit o dos de 32).
o 16x16 Dual MAC (multiplica dos nmeros de 16 bit y luego otros, todo en
el mismo ciclo).
o Arquitectura de Bus Harvard (buses separados para memoria de datos y
memoria de programa).
o Operaciones atmicas (lee y escribe en el mismo bus de operaciones, esto
evita que se acceda a la memoria por error).
o Rpida respuesta a interrupciones y procesamiento.
o Modelo unificado de programacin de memoria.
o Codigo-Eficiente (en C/C++ y Ensamblador).
Memoria en el Chip
o 16Kx16 Flash, 6Kx16 SARAM (Single Access RAM permite slo un
acceso en un slo ciclo de instruccin). 16Kx16 significa que posee de
memoria de 16 Kword (Word = 2 bytes) que se accede en bloques de 16 bits
por cada ciclo de instruccin)
o 1Kx16 OTP ROM (one-time programable ROM - memoria que se programa
slo una vez).
Boot ROM (4Kx16) memoria para cdigo que el DSP lee al reiniciarse. Contiene
las configuraciones iniciales.
o Con modos de boteo por Software (via SCI, SPI, CAN, I2C, y I/O paralelo).
o Tablas matemticas estndar.
Control de Sistema y Reloj.
o Soporta cambios dinmicos en el radio PLL.
o Oscilador dentro del Chip.
o Mdulo Watchdog Timer (reinicia el DSP cuando este timer se completa).

GuadelUsuarioDigitalSignalProcessor

10

Cualquier pin GPIO A, (General propose I/O) puede ser conectado a uno de las tres
interrupciones externas del ncleo.
Bloques PIE (peripheral Interrupt Expansion) que soportan todas las 43
interrupciones de perifricos.
Llave/Bloqueo de Seguridad de 128-bit.
o Protege bloques Flash/OTP/L0/L1.
o Previene Firmware de ingeniera inversa.
Tres CPU-timers de 32 bits.
Control de perifricos mejorado
o 8 salidas PWM, donde 4 son HRPWM con resolucin de 150 ps MEP.
o 2 entradas de capturas.
o 3 timer de 32 bits.
Perifricos de puerto serial.
o Mdulo SPI.
o Mdulo SCI (UART).
o Mdulo CAN.
o Bus I2C (Inter-Integrated-Circuit).
Conversores ADC de 12 bit, 16 canales.
o Canales 2x8 entrada multiplexor.
o Dos Sample-and-Hold (muestrea y retiene).
o Conversin Simple/Simultnea.
o Rpida tasa de Conversin: 267 ns 3.75 MSPS.
o Referencia externa o interna para comparar en el conversor.
Hasta 35 pines GPIO programables individualmente, Multiplexadas con filtro de
entrada.
Avanzadas caractersticas de emulacin
o Funciones de anlisis y Breakpoint.
o Debugeo en Tiempo real via Hardware.
Soporte de desarrollo incluye
o ANSI Compilador C/C++/Enamblador/Linker
o CodeComposer Studio IDE.
o DSP/BIOS.
o Control Digital de Motor y Libreras de Software digital de potencia.
Modo de bajo consumo y Ahorro de energa.
o Soporta los modos IDLE, STANDBY y HALT.
o Deshabilita individualmente los relojes de perifricos.
El mapa de memoria se compone de lo siguiente:

11

GuadelUsuarioDigitalSignalProcessor

Figura 2-1 Mapa de memoria del DSP.

12

GuadelUsuarioDigitalSignalProcessor

El mapa muestra las direcciones de memoria que el DSP es capaz de direccionar, as


como tambin la distribucin de la misma, es decir, qu direccin ocupan los diferentes
dispositivos destinados a funciones diferentes. Se observa que el bus de datos es de 32 bit,
esto se nota en el largo de las direcciones que logra acceder el DSP, ya que si el mximo
fuera hasta FF, entonces el bus sera de 8 bit.
Debido a la arquitectura Harvard, el espacio de memoria de programa y de datos se
encuentran separados utilizando un bus independiente para cada memoria. Esto permite que
mientras se accede a un espacio de memoria de programa, sea posible acceder a la memoria
de datos al mismo tiempo, es decir, es posible acceder a ellos casi al mismo tiempo.

13

GuadelUsuarioDigitalSignalProcessor

El diagrama de bloques del DSP se compone de lo siguiente:

Figura 2-2 Diagrama de bloques del DSP.

14

GuadelUsuarioDigitalSignalProcessor

2.2 Tarjeta de Desarrollo para el DSP.


La tarjeta de desarrollo y sus mdulos principales se muestran en la siguiente
figura:

Figura 2-3 Tarjeta de desarrollo para el DSP TMS320 F28016.

El esquemtico de la tarjeta se muestra a continuacin:

15

GuadelUsuarioDigitalSignalProcessor

Figura 2-4 Esquemtico de la tarjeta de desarrollo TMS320 F28016.

GuadelUsuarioDigitalSignalProcessor

16

Las principales caractersticas que posee la tarjeta son:

MCU: TMS320F28016 32KB Flash, 12KB RAM, 3.75 MPSP 2x8 Canales ADC, 8
PWM, CAN, SPI, RS232, I2C.
Conector JTAG.
Conversor USB-to-RS232 permite alimentar la tarjeta y adems conectarse a la
mayora de notebooks sin la necesidad de un puerto serial RS232.
Conector CAN y driver.
Conector UEXT con SPI, RS232 y I2C para conectar a otros mdulos OLIMEX.
Conector para control de Motor.
Botn de usuario.
Potencimetro Trimmer conectado a entrada analgica.
LED indicador de alimentacin.
LED indicador de estado del usuario.
Botn RST (Reset).
Conector Jack para alimentacin AC o DC externa.
Regulador de Voltaje ms filtro capacitivo en la fuente de poder.
Headers de extensin para cada pin del DSP.
rea de prototipo paso de 0.1 con bus GND y VCC.
PCB: FR-4, 1.5 mm.
Dimensiones 100x80 mm.

17

GuadelUsuarioDigitalSignalProcessor

3 Programacin.
Este captulo mostrar la forma de programar el DSP. Se explicar cmo utilizar los
perifricos de la placa adems de indicar las herramientas ms tiles para crear un
programa complejo como por ejemplo el CodeComposer Studio (CCS), el administrador de
recursos (memoria) y el Debugger.

3.1 Flujo de un programa


Un programa cualquiera requiere algunas configuraciones mnimas para poder
funcionar. stas pasan por estados definidos para mantener un orden y para que no
permitan configurar errneamente la tarjeta. La siguiente figura muestra este proceso:

Figura 3-1 Flujo de un Programa Tipo.

18

GuadelUsuarioDigitalSignalProcessor

Partiendo del Reset, se inicia un cdigo de programa que indica el espacio de


memoria que contiene la primera instruccin. Esta secuencia es la llamada Secuencia de
Boteo. Posteriormente viene el CodeStartBranch que es usado para redirigir desde el boteo
a la rutina C init. ste puede ser configurado para deshabilitar el timer WatchDog si es que
ste sobrepasa el lmite dado antes de que se ejecute main(). El CodeStartBranch es
asignado a la seccin BEGIN por el linker. Luego viene la rutina C init la cual posee el
archivo de boteo del compilador el cual es automticamente incluido en la librera en
tiempo de ejecucin.
Posteriormente en la funcin main() (Initialize System Control), se inicializa el
sistema de control, se encienden los relojes de los perifricos y se ajustan las escalas de
stos. Adems se puede deshabilitar el WatchDog Timer. Se configuran los pines de
propsito general GPIO (Initialize GPIO) para las funciones perifricas o como
entrada/salida. Se inicializa completamente el PIE Vector Table con punteros al Servicio
de Rutina de Interrupciones (ISR) que se encuentran en DSP280x_DefaultIsr.c. Es til
para propsitos de debugeo tener inicializada esta tabla, incluso si no se va a utilizar el ISR.
Antes de comenzar el main() con lo requerido por el usuario, faltara inicializar los
perifricos requeridos para el proyecto deseado. Esto es, configurar los bits segn la forma
en que se utilizarn las funciones de los pines GPIO. Finalmente se deben habilitar las
interrupciones PIE y CPU requeridas por el programa, as como cualquier cdigo adicional.

3.2 CodeComposer Studio.


Code Composer Studio (CCS) es un IDE (Integrated Development Environment),
es decir, un ambiente de desarrollo integrado para programar los DSP de Texas
Instruments. CCS entrega todas las herramientas necesarias para soporte de software en
tiempo real para el DSP TSM320.
CCS permite un manejo rpido y sencillo para moverse en todas las fases del
proceso de diseo de una aplicacin, incluyendo cdigo y compilacin, debug, anlisis y
afinamiento. En lo siguiente se explicar lo bsico para poder comenzar a utilizar el CCS y
crear aplicaciones simples, que sern la base para programas ms complejos posteriores.
Es posible bajar una versin de prueba del CCS en este link4, o directamente de la
pgina oficial www.ti.com. Luego para poder utilizar esta versin con la tarjeta de
desarrollo de OLIMEX, se debe bajar una actualizacin llamada XDS100 la cual puede ser
descargada de OLIMEX desde aqu5. Entre las principales propiedades del CCS se
encuentran las siguientes:

http://dl-www.ti.com/lit/ml/sprc119d/sprc119d.zip 500MB aprox. Version de prueba de 120 dias.

http://www.olimex.cl/soft/DSP/XDS100pp_Beta2.exe

GuadelUsuarioDigitalSignalProcessor

19

Algoritmo TMS320 DSP estndar.


Familiar y fcil de usar IDE con editor CodeWright integrado.
Kernel DSP/BIOS escalable en tiempo real y herramientas de configuracin.
Herramientas para generacin de cdigo en lenguajes C/C++/Assembly.
Debuggeador de cdigo fuente con anlisis en tiempo real.
Variedad de simuladores preconfigurados y tarjetas para todas las plataformas.
Variedad de Guas Rpidas.
o Tutoriales para comenzar con el IDE CCStudio, Code Tuning, DSP BIOS,
RTDX y emulacin en tiempo real.
o Cdigos de ejemplo y librerias.
Soporte para TMS320C2000, TMS320C5000 (incluyendo los procesadores
OMAP), y TMS320C6000 (incluyendo procesadores the DaVinci ).

3.2.1 Caractersticas.
Entre las caractersticas que posee el ambiente de desarrollo de CCS se encuentran
las herramientas de trabajo que mejoran el tiempo de trabajo para desarrollo de software y
optimizan el funcionamiento para todas las aplicaciones DSP en tiempo real.
Las herramientas ms importantes del Code Composer Studio incluyen:

Herramientas para generacin de cdigo DSP TMS320: compilador C/C++,


ensamblador y linkeador.
Viene con Visual Proyect Manager con interfaz de control de cdigo y soporte para
multiproyectos que permite manejar sobre 100 archivos.
Configuracin Drag and Drop CCStudio que soporta:
o Drivers XDS560 de emulacin de alta velocidad.
o Drivers XDS510 de emulacin.
o Simuladores para todos los dispositivos, solo para CPU y CPU ms memoria
para funcionamiento ptimo.
o Opciones de definicin configurable para tarjetas.
Editor CodeWright totalmente integrado.
Administrador de components soporta multiples versions de DSP/BIOS y de
herramientas de generacin de cdigo dentro del IDE.
Debugger posee las siguientes propiedades:
o Debug Rewind: Retrocede en la simulacin.
o Simples breakpoints.
o Breakpoints avanzados y de Hardware.
o Puntos de prueba para inyeccin/extraccin de datos.
o Navegador para Smbolos y Watch Windows avanzado.
o Administrador unificado de Breakpoints para configurar y administrar
breakpoints por software y hardware desde una sola y simple interfaz.
Connect/Disconnect; conexin robusta y resilente entre el cliente y la tarjeta.

GuadelUsuarioDigitalSignalProcessor

20

Transmitidor de datos RTDX para intercambio en tiempo real entre la tarjeta y el


cliente.
Un sin nmero de guas y cdigos de ejemplo para hardware y software. Adems
de tutoriales y manuales.

El software Code Composer Studio adems incluye:

DSP/BIOS Kernel para el TMS320 DSPs


o Multihebras previamente vacas.
o Comunicacin entre hebras (threads).
o Manejo de Interrupcin.
Algorimos estndar TMS320 DSP para poder volver a usar el software.
Soporte de libreras para el Chip con el fin de simplificar la configuracin del
dispositivo.
Libreras DSP para optimizar las funcionalidades del DSP.

3.3 Cmo Programar? Hola Mundo!


3.3.1 Instalacin y Configuracin CCS.
A continuacin se explicar la configuracin bsica necesaria para el CCS. EL CCS
se puede descargar desde la pgina www.ti.com, o directamente en el siguiente link6, donde
luego de instalarlo aparecern dos conos. Dependiendo de la versin el nombre podra
cambiar. Para la versin actual 3.3 ser CCStudio v3.3 y Setup CCStudio v3.3. El
primero corresponde al CCS en s, mientras que el otro se debe correr antes de empezar
cualquier proyecto. Este programa se encarga de la configuracin bsica del DSP as como
tambin de sus libreras. Para el correcto funcionamiento con la placa, se debe actualizar la
versin del CCS con el ltimo Service Pack disponible en la pgina de Texas Instruments,
luego bajar el driver XDS100 que se puede descargar desde el siguiente link7 o desde la
pgina de www.olimex.cl. Este ltimo se encarga de emular la tarjeta a travs del JTAG de
la tarjeta con el puerto paralelo del PC y ste a la vez con el CCS.
Sin embargo varias de las capacidades del CCS no son compatibles usando este driver,
entre ellas:

GuadelUsuarioDigitalSignalProcessor

21

Es ms lento que otras versiones como las XDS510 o XDS560 que utilizan el JTAG
en vez del puerto USB.
Carece de soporte por hardware para adaptative clocking.
Carece de RTDX (Real Time Data Exchange) y HSRTDX (High Speed RTDX).
Carece de soporte por hardware para reloj TCLKR externo.
Carece de soporte para deteccin en caso de quiebre del cable en donde lo interprete
como prdidad de poder de la tarjeta.

Una vez instalado todo lo anterior se ejecuta Setup CCStudio v3.3 donde aparecer
a siguiente ventana:

Figura 3-2 Seleccin de Configuracin de la Tarjeta. Emulador XDS100.

Seleccionar Create Board y luego elegir la conexin TIXDS100pp Emulator y


presionar el botn ADD. En la siguiente ventana escribir un nombre arbitrariamente
presionar el botn NEXT y luego FINISH. Esto ltimo se muestra en la siguiente ventana:

22

GuadelUsuarioDigitalSignalProcessor

Figura 3-3 Nombre de la Conexin.

Luego se marca la tarjeta creada y se escoge la tarjeta DSP modelo TSM320C2800


y se agrega a la conexin, tal como se muestra en la siguiente figura:

Figura 3-4 Eleccin de modelo del DSP.

23

GuadelUsuarioDigitalSignalProcessor

Para agregarla simplemente se presiona el botn ADD y aparecer la siguiente


ventana:

Figura 3-5 Propiedades del Procesador.

Posteriormente se presiona OK y se guarda desde el panel de configuraciones en la


barra de herramientas o presionando el botn Save & Quit. Luego de ello, el CCS se
iniciar automticamente.

Figura 3-6 Presionar el Botn Save & Quit.

24

GuadelUsuarioDigitalSignalProcessor

3.4 Blinking Led.


Para probar el correcto funcionamiento, se corrern algunos de los proyectos de
ejemplo. Descargar el ejemplo Blinking_LED desde la pgina de OLIMEX y abrir el
proyecto en el CCS. Para esto ir a Project->Open y buscar el archivo con el nombre
Blinking_LED.pjt, luego presionar el botn Open. Primero que nada se debe compilar el
programa. Para esto se debe presionar el botn sealado en la siguiente figura como
Compilar todo o por medio de la barra de herramientas en Project->Rebuild All. Esta
accin compilar todos los archivos, incluso aquellos referenciados desde el archivo
principal (main).

Figura 3-7 Botones para Compilar.

El botn Compilar, compilar slo los archivos que se hayan modificado desde la
ltima vez que se compil, si no se ha modificado ningn archivo, entonces no se
compilar nada. Se puede usar tambin desde la barra de herramientas en Project->Build
o simplemente presionando F7. El botn compilar todo mencionado anteriormente fuerza a
que se compilen todos los archivos del proyecto, estn o no modificados.
Una vez compilado el proyecto y sin errores, se procede a cargar el programa a la
tarjeta. Se conecta la placa al PC por medio del JTAG (para compilar no es necesario que la
placa est conectada) y luego se alimenta la placa con una fuente continua de 6 a 9 V o
usando el puerto USB. Posteriormente se ingresa a Debug->Connect o se presiona Alt+C
para que el CCS reconozca la placa. Si est todo bien, aparecer el mensaje Connected y
luego Halted en la esquina inferior izquierda del CCS lo que indicar que se reconoci
correctamente, de lo contrario aparecer un error y el mensaje Disconnected.

25

GuadelUsuarioDigitalSignalProcessor

Figura 3-8 Placa Conectada o no Conectada.

Cuando la placa se encuentre conectada y reconocida, se procede a cargar el


programa. Al momento de crear un proyecto, automticamente se crea una carpeta llamada
Debug, que es la que contiene el cdigo final del programa que ser cargado en la tarjeta.
El archivo creado as, tiene el mismo nombre que el proyecto pero con la extensin *.OUT.
Para cargar el programa se debe ingresar en File->Load Program o simplemente presionar
CTRL+L. Dentro de la carpeta del proyecto, aparecer una llamada Debug, y dentro de
ella un archivo llamado Blinking_Led.out. Seleccionarlo y presionar Open y CCS
comenzar automticamente a cargar el programa en la tarjeta. Para poder realizar lo
anterior, CCS debe haber reconocido previamente la tarjeta y debe mostrar el mensaje
Connected (muestra Halted una vez conectado que es algo as como Pausado). Lo anterior
se ver segn la siguiente figura:

Figura 3-9 Cargar un Programa.

Una vez que el programa ha sido cargado correctamente, es posible ejecutarlo. Para
esto se debe ingresar a Debug->Run o simplemente presionar F5 e inmediatamente el
programa comenzar a funcionar. Para esto la tarjeta debe permanecer conectada al PC por
medio del JTAG y alimentada correctamente. Adems los jumper de configuracin deben
ser los adecuados. Esto de indica en lo siguiente.
Si se desea que la tarjeta ejecute el programa al reiniciarse sin la necesidad de
hacerlo mediante el JTAG, es necesario guardar el cdigo del programa en la memoria
FLASH, ya que la otra memoria es voltil, razn por la cual se pierde el programa al quitar

26

GuadelUsuarioDigitalSignalProcessor

la alimentacin de la placa. Adems se debe configurar correctamente los jumpers. stos,


se indican mediante la etiqueta boot (autoarranque) en la Figura 2-3. La configuracin de
stos se muestra en la siguiente tabla. Ms adelante se explicar en detalle cmo hacer esto.
Modo de Booteo
FLASH/ROM
SCI-A
SPI-A
I2C
e-CAN-A
M0 SARAM
OTP
I/O paralelo

Descripcin

GPIO18

GPIO29

GPIO34

Salta a la direccin 0x33 7FF6 de la FLASH/ROM.


Carga un Stream de datos desde la SCI-A.
Carga la data desde una memoria serial EEPROM
externa mediante SPI usando SPI-A.
Carga la data desde una EEPROM externa, en la
direccin 0x50 del bus I2C.
Llama al CAN_BOOT para cargar desde la bandeja
de entrada 1 del eCAN-A.
Salta a la direccin 0x00 0000 de M0 SARAM.
Salta a la direccin 0x3D 7800 de la memoria OTP.
Carga la data desde GPIO0-GPIO15.

1
1
1

1
1
0

1
0
1

0
0
0

1
0
0

0
1
0

Tabla 3-1 Configuracin Jumpers para Booteo.

La configuracin del ejemplo Blinking_LED requiere que la tarjeta se encuentre en


el modo de booteo M0 SARAM. Este modo se ilustra en la siguiente figura:

Figura 3-10 Modo de Booteo del ejemplo. M0 SARAM.

La funcionalidad el programa consiste en hacer parpadear un LED que se encuentra


conectado al pin 70 (GPIO 11). El parpadeo se produce cada medio segundo, tiempo que
est determinado por la variable BLINK_TIME dentro de la cabecera del cdigo. Adems
cada vez que el botn de la placa es presionado (conectado al pin 61, GPIO 9) el LED se
enciende y se mantiene as por el tiempo que dure presionado el botn. Cuando se suelta,
el LED sigue parpadeando.

27

GuadelUsuarioDigitalSignalProcessor

Por ejemplo si se desea cambiar el tiempo de parpadeo se cambia el valor 500000


dado a la variable BLINK_TIME por otro elegido arbitrariamente. Si se coloca 1000000 el
parpadeo se realizar cada un segundo, ya que la variable se encuentre medida en [useg].
Luego se cambia el valor del botn para que apague el LED cada vez que se presiona en
vez de encenderlo. Estos cambios se muestran en las siguientes figuras:

Figura 3-11 Cambio valor BLINK_TIME.

Figura 3-12 Cambio para apagar el LED al presionar el botn.

GuadelUsuarioDigitalSignalProcessor

28

Al realizar estos cambios, luego compilar (F7) y finalmente ejecutar el programa


(F5), se notar que el led ahora parpadear cada un segundo, y que ahora cuando se
presione el botn el led se apagar en vez de encenderse.
Para detener un programa se debe presionar Debug->Halt (Shift+F5) o cual har
que el programa se pause. Para volver a ejecutarlo desde el principio se debe presionar
Debug->Restart (CTRL+Shift+F5). Para reiniciar el emulador se debe ingresar Debug>Reset Emulator (CTRL+Shift+R).
Entre los archivos principales que se observan en la Figura 3-12 se tienen:
Nombre Archivo
Blinking_LED_main.c

Descripcin
Cdigo Fuente especfico del Ejemplo.

DSP280x_CodeStartBranch.asm

Cdigo fuente comn (compartido).


Contienen funciones genricas para
configurar los perifricos a un estado
definido o funciones que se podran
reutilizar en diferentes aplicaciones.

DSP280x_CpuTimers.c
DSP280x_DefaultIsr.c
DSP280x_GlobalVariableDefs.c
DSP280x_PieCtrl.c
DSP280x_PieVector.c
DSP280x_SysCtrl.c

Archivo requerido para utilizar los archivos


de cabecera (Header Files).
Cdigo Fuente compartido. Se utiliza para
ajustar y configurar algunos perifricos.

28016_RAM_lnk_cmd

DSP280x_Headers_nonBIOS.cmd

Permite asignar secciones a los bloques de


memoria especficos de un dispositivo.
Archivo linker requerido por los archivos de
cabecera especficos de los perifricos.
Asigna una seccin de datos de los registros
de los perifricos a una apropiada locacin
de memoria.

Tabla 3-2 Archivos principales de un proyecto.

Entre las carpetas mencionadas en la misma figura se encuentra la carpeta Include


que contiene todos los archivos de cabecera que sern incluidos en el proyecto
(generalmente de extensin *.h), esto es, los archivos incluidos en el cdigo fuente del
usuario (por ejemplo, los que tienen #include en Blinking_LED_main.c). Entre estos est:
DSP280x_Device.h, que incluye los archivos de cabecera especficos para manejar algunos
perifricos y algunas macros y typedef especficas para algunos dispositivos; y
DSP280x_Examples.h que define parmetros que son usados en el cdigo fuente de
ejemplo, adems es requerido por algunos archivos fuente comunes. En general al
comenzar un nuevo proyecto, se deben incluir, a lo menos, los archivos mencionados en la
Tabla 3-2 y los pertenecientes a la carpeta Include.

29

GuadelUsuarioDigitalSignalProcessor

Otra carpeta es la DSP/BIOS Config que contiene el archivo de configuracin o


script para poder trabajar en aplicaciones en tiempo real que requieran un manejo de
memoria y recursos al lmite. Adems permite sincronizacin en tiempo real; comunicacin
cliente-tarjeta en tiempo real; e instrumentacin en tiempo real.
La carpeta GEL Files, contiene unos archivos llamados General Extension
Language (GEL) que son usados para inicializar automticamente el dispositivo cuando se
inicia el CCS. Se encarga entre otras cosas de reconocer que la tarjeta se encuentra
conectada; de compilar y cargar el programa con un solo click; y de configurarse apenas se
inicia el CCS (por esto se debe quitar del proyecto este archivo si se va a utilizar otro
dispositivo o ejemplo). Funciona por medio de un lenguaje interpretado similar a C lo que
lo hace cmodo para trabajar. Del mismo modo posee una gran variedad de funciones
donde adems es posible crear las propias segn la necesidad.

3.5 Debuggear.
El debugeo (viene de Debugging en ingls - Limpieza) es un proceso metdico que
permite reducir los bug o errores en un programa. Entre estos permite: colocar Breakpoints;
ejecucin instruccin a instruccin; y observar el valor de una variable en tiempo de
ejecucin. CCS tiene varias funcionalidades que permiten realizar estas tareas de manera
simple.
CCS permite colocar Breakpoints en alguna lnea de cdigo. Cuando el programa se
ejecute y se encuentre con un breakpoint, ste se detendr en esa lnea y no continuar hasta
que se le ordene (no ejecuta la lnea que posee el breakpoint). En el tiempo en que se
encuentre detenido, es posible observar los valores de las variables que el programa tiene
en ese momento. Adems es posible modificar esos valores y asignarles alguno
arbitrariamente. Para colocar un breakpoint simplemente se debe hacer doble click al
comienzo de la lnea, a lo cual aparecer un punto rojo, que indica que se ha colocado un
breakpoint. Para sacarlo se debe volver a hacer doble-click. Esto se muestra en la siguiente
figura:

Figura 3-13 Colocacin de un Breakpoint.

30

GuadelUsuarioDigitalSignalProcessor

Para el ejemplo de la figura, se utiliz el mismo proyecto Blinking_led.pjt donde se


agregaron las lneas que se muestran. Cuando se corre el programa, se ver que se detiene
justo en esa lnea y si se coloca el cursor del Mouse sobre la variable variable por unos
segundos, aparecer el valor que posee en ese momento. El valor mostrado en este caso es
el que el compilador le asigna a las variables que no son inicializadas. Si luego se ejecuta la
siguiente lnea con Debug->Step over o simplemente presionando F10, la variable tendr
el valor de 24. Esto se muestra en la siguiente figura:

Figura 3-14 Valor de una variable en tiempo de ejecucin.

Se observa ahora que la variable es igual a 24 y la flecha amarilla (que indica la


lnea en la que se encuentra la ejecucin de instrucciones), ha avanzado. Si se vuelve a
presionar F10, ahora la variable es igual a 124, y la flecha amarilla se colocar en la
siguiente lnea de instruccin vlida (los comentarios no figuran como cdigo ejecutable),
tal como muestra la siguiente figura:

Figura 3-15 Step-over (F10) y Step-into (F11).

Ahora bien, si la lnea de ejecucin (flecha amarilla) en la que se encuentra


corresponde a una funcin, se pueden realizar dos cosas. Realizar un Step-over (F10) con lo
cual ejecutar la funcin completamente para luego saltar a la siguiente lnea. O bien se
puede hacer un Debug->Step-into (F11) que ejecuta la primera instruccin de la funcin,
es decir, comienza a ejecutar la funcin lnea a lnea. Una vez dentro, es posible realizar lo
mismo antes mencionado, como leer variables o ejecutar lnea a lnea. Si se desea que se

31

GuadelUsuarioDigitalSignalProcessor

complete la funcin y que se site en la siguiente lnea de cdigo luego de sta, se debe
presionar Debug->Step-out (Shift+F11). Esto terminar de ejecutar la funcin y se
colocar en la siguiente lnea que corresponda antes de haber entrado a la funcin. Tambin
es posible saltar hasta cualquier lnea deseada con Debug->Run to Cursor (CTRL+F10).
Para que el programa siga ejecutndose normalmente luego de haber estado pausado
por un breakpoint, se debe presionar Run (F5). Si existe otro breakpoint ms adelante, el
programa se detendr ah. Para ejecutar el programa instruccin a instruccin (en lenguaje
ensamblador) en vez de lnea en lnea (lnea de cdigo), se utilizan las funciones presentes
en Debug->Source Stepping.
Otra forma de ver las variables en tiempo de ejecucin es utilizando el llamado
Watch Window. Esto es un ventana en la cual se van agregando variables simplemente
haciendo click derecho sobre ella y presionando Add to Watch Window. Por cada variable
agregada, se permite ver su nombre, su valor, su tipo y el formato en que se desea ver el
valor. Esto se muestra en la siguiente figura:

Figura 3-16 Watch Window.

Por ejemplo en la figura anterior, se observa que se agreg la variable variable


cuyo valor es 24, de formato INT y adems se pide que su valor se muestre en decimal
(Redix=dec). Para cambiar esto ltimo se presiona donde dice Redix y aparecer una lista
con otros formatos, donde por ejemplo, si se elige HEX, el valor 24 aparecer en
hexadecimal (0x18) en vez de decimal. Los tab indican qu variables se vern. El tab
Watch Locals permite ver las variables que actualmente se estn ejecutando en la funcin,
mientras que Watch permite ver tanto las variables locales como globales. Adems es
posible agregar expresiones dentro Watch Windows. Por ejemplo se puede escribir en la
columna Name lo siguiente: variable+500. Con lo anterior, cada vez que se actualice el
valor de esta variable, tambin aparecer el resultado de esa expresin.
Si ahora se hace click derecho en el tab de Watch 1, y se presiona Add Globals to
Watch, se podrn agregar variables globales. Por ejemplo si se agrega la variable

32

GuadelUsuarioDigitalSignalProcessor

GpioDataRegs segn se observa en las siguientes imgenes, ser posible ver cmo
cambian los registros al momento de presionar el botn de la tarjeta. Por ejemplo se
expande la estructura de la variable segn GpioDataRegs->GPADAT->bit y se observa el
registro del pin 61 llamado GPIO 9. Se observa que tiene un valor 0, pero si se mantiene
presionado el botn de la tarjeta y luego se presiona Refresh (aparece en el mismo men
que Add Globals to Watch), se ver cmo este valor cambia a 1. Esto indica que el botn
est presionado, o lo que es lo mismo, el pin est conectado a LOW (esto se observa en el
esquemtico de la tarjeta en la Figura 2-4, donde se ve que al presionar el botn, el pin 61
hace puente con tierra).

33

GuadelUsuarioDigitalSignalProcessor

Figura 3-17 Agregar variables Globales.

34

GuadelUsuarioDigitalSignalProcessor

Figura 3-18 Eleccin de Variables Globales.

Figura 3-19 Parte del esquemtico de la tarjeta. Botn de GPIO 9.

Si se desea que las variables se actualicen en tiempo real en la Watch Windows, se


debe ingresar a Debug->Real Time Mode. Luego en el tab de la ventana de Watch
Windows, hacer click derecho y en el men desplegable hacer click a Continuous Refresh.
Con esto las variables se actualizarn apenas cambie su registro. Esto se debe hacer luego
de haber compilado y cargado en la tarjeta el cdigo fuente. En caso de que aparezca algn
error y CCS no se pueda conectar a la tarjeta, se debe desactivar la opcin Real Time.
Para poder realizar los siguientes tres puntos, se debe haber compilado el cdigo
fuente y luego cargarlo en la tarjeta de desarrollo, antes de realizar los cambios, ya que el

35

GuadelUsuarioDigitalSignalProcessor

CCS verifica las variables y arreglos antes de visualizarlos o guardarlos. Adems se debe
tener la placa conectada al CCS (ATL+C).

3.5.1 Escribir datos en un Archivo de Salida


Una vez compilado y cargado el cdigo fuente, se ingresa un breakpoint en el punto
en el cual se desee obtener algn dato. En este caso se ingresa en la lnea 201 en donde se
tiene una variable del tipo unsigned int16 (Uint16) Historial[BUF_SIZE]. Luego se
ingresa a Debug->Breakpoints donde aparecer una ventana en la parte inferior del CCS, tal
como se muestra en la siguiente figura:

Figura 3-20 Administrador de Breakpoints.

Se observa que aparece el nmero de lnea, as como otras caractersticas. Tiene


especial importancia la columna Action, ya que si se presiona aparecer un men
contextual con una opcin llamada Write Data to a File. Esto se muestra en lo siguiente:

Figura 3-21 Men contextual de Action.

Al presionar, aparecer una ventana que se deber llenar con la siguiente


informacin:

36

GuadelUsuarioDigitalSignalProcessor

Figura 3-22 Parmetros para escribir datos en un archivo.

El primer campo File indica la direccin en donde se guardar el archivo creado con
los datos del programa, cuya extensin ser *.DAT. La forma del archivo consiste en la
primera lnea con informacin sobre el archivo y luego cada lnea representa un dato con el
formato dado por los parmetros indicados en el programa. En Format se indica el formato
en el cual se representan los datos. Como la variable que se quera guardar es Uint16,
entonces se elige Integer (INT). En Start Address se debe indicar la direccin de memoria
del DSP en la cual se comenzar a leer para su posterior guardado dentro del archivo. Debe
estar en formato hexadecimal, aunque es posible tambin incluir el nombre de la variable,
como en este caso donde se coloc Historial. En Page se indica la seccin de memoria que
ser leda. Como Historial se encuentra en la memoria de datos, entonces se elige Data. En
Length se indica el largo o tamao de la memoria a ser leda con el formato dado
anteriormente. Como se tiene una variable que es un arreglo, en la figura anterior se
observa que se guardarn los 20 primeros valores.
Luego cada vez que el programa pase por la lnea del breakpoint, guardar los 20
primeros valores del arreglo Historial en el archivo ArchivoSalida.dat. No borrar los datos
sino que los escribir a continuacin de cada corrida siempre y cuando se mantenga la
ventana que se muestra en la siguiente figura:

Figura 3-23 Indicador de largo de las variables.

No importa si el programa se detiene y luego contina, los datos se seguirn


escribiendo mientras esta ventana se mantenga. Si se presiona Stop (botn con un
cuadrado) se dejar de escribir los datos en el archivo, y si se presiona Play (botn con un
tringulo) se seguir escribiendo desde la ltima ubicacin en el archivo. Si se cierra esta
ventana, el procedimiento debe hacerse de nuevo desde los ajustes de los parmetros.

37

GuadelUsuarioDigitalSignalProcessor

Cuando se guardan datos en un archivo, ste sigue creciendo y creciendo mientras


corra el programa, por lo que se debe tener cuidado de no sobreestimar los recursos del
computador, al crear un archivo excesivamente grande.

3.5.2 Leer Datos en un Archivo de Salida


Para leer datos se realiza el mismo procedimiento anterior, pero con la diferencia de
que en el men contextual se debe presionar Read data from a File. As aparecer la
siguiente figura:

Figura 3-24 Leer datos desde un archivo.

El campo File indica el archivo a ser ledo donde cada lnea representa el valor que
se le asignar a la variable cada vez que el programa pase por esa lnea. Wrap Around
indica que si se llega al final del archivo, entonces se comenzar desde el principio. Si est
desactivado y se llega al fin del archivo el programa ser pausado (Halted) y aparecer un
mensaje. Los otros campos son los mismos que para escribir un archivo de salida.
Cabe mencionar que tanto escribir como leer datos de un archivo consumen
recursos del DSP, por lo que algunas operaciones podran tardar ms que si la tarjeta lo
hiciera sola en tiempo real. Para maximizar la utilidad de estas aplicaciones se recomienda
utilizar archivos cortos y variables auxiliares para que no tome demasiado tiempo en
realizar estas acciones.

3.5.3 Graficar datos en tiempo real.


Esta opcin es bastante til cuando se desean ver seales en tiempo real. Para poder
hacerlo se debe haber compilado y cargado el cdigo en el programa. Luego se ingresa a
View->Graph->Time/Frequency donde aparecer la siguiente ventana:

GuadelUsuarioDigitalSignalProcessor

38

Figura 3-25 Parmetros para graficar una seal.

Entre los parmetros ms importantes se debe indicar:

Display time: Indica el tipo de grfico. Puede ser de tiempo simple o doble, FFT,
constelacin, etc
Start Address: Igual que lo mencionado anteriormente al escribir y leer datos.
Puede ser una direccin en formato hexadecimal o el nombre de alguna variable. Es
recomendable colocar la direccin de la variable. Para saberla se presiona el botn
derecho sobre la variable en el cdigo fuente, y en el men contextual emergente
presionar View location of, para lo cual aparecer una ventana en la parte derecha
del CCS, con el nombre de la variable y su direccin de memoria. Escribirla de la
forma (por ejemplo) 0xF34F.
Page: Indica la seccin de memoria en la cual se leer la direccin dada en el punto
anterior.

GuadelUsuarioDigitalSignalProcessor

39

Acquisition Buffer Size: Indica la cantidad de valores que sern ledos desde la
direccin en un instante dado de tiempo. Es til para cuando se desean leer frames
en vez de un solo dato. Por ejemplo si importa slo un dato en cada momento se
coloca un 1, pero si la variable es un frame o arreglo de 100, entonces se indica el
largo del frame igual a 100 en este campo.
Index Increment: ndice de incremento para el grfico. til cuando se desea
graficar dos variables en el mismo grfico.
Display Data Size: Tamao de la ventana en la cual se mostrarn los datos.
DSP Data Type: Tipo de datos del procesador. Esta opcin afecta el valor con el
que sern mostrados los datos. Si la variable es de 16 bits (int) se recomienda
colocar la opcin 16-bit unsigned integer.
Sample Rate (Hz): Tasa a la que sern mostrados los datos. Esto slo afecta los
labels del eje del tiempo. As los labels sern desde 0 hasta
1
DisplayDataSize
. Para el grfico en el dominio de la frecuencia, este
SampleRate
campo contiene el nmero de muestras usadas para el anlisis de la FFT.
Autoscale: Si est activado, vara automticamente el eje Y segn el mximo valor
mostrado en la ventana o display. Se recomienda desactivarlo para tener un mejor
panorama de la seal.

Luego de haber configurado lo anterior y presionar OK, se tendr lo de la siguiente


figura. Pero antes de debe ingresar Debug->Real Time Mode.

Figura 3-26 Grfico realizado con los datos.

40

GuadelUsuarioDigitalSignalProcessor

Para una correcta visualizacin se debe hacer un click derecho sobre el grfico, y en
el men contextual presionar Continuous Refresh. As el grfico se ir actualizando
automticamente con cada dato. Para observar la seal que se desea simplemente se debe
correr el programa (F5) y el grfico comenzar a actualizar los datos que se estn
monitoreando.

3.6 Conversor ADC.


Se sabe que el DSP TMS320F28016 posee 16 canales para un conversor ADC de 12
bit para transformar una seal analgica en digital, cada uno con S/H (Sample and Hold Muestrea y retiene). Cada resultado de conversin puede ser accesado individualmente a
travs de un nico registro por canal. La conversin permite un rango entre 0 y 3 volts,
cuya frmula es:

IN
ADCvalor = 4096 ADC
3

(3.1)

Donde IN ADC es el valor del voltaje del conversor y el 4096 equivale al valor
mximo para un nmero de 12 bit. Cualquier voltaje menor a 0 volt ser entregado como
cero, y cualquiera mayor a 3 volt, ser entregado como 4095.
En el diagrama de bloques del mdulo ADC que se muestra en la siguiente figura,
se observa que slo posee un conversor de 12 bit, el cual utilizando multiplexores (MUX)
en dos bloques de 8 canales cada uno, permite obtener hasta 16 canales. Luego el mdulo
ADC se encarga de guardar los valores en sus registros correspondientes y sus respectivas
direcciones. Utilizando los registros de control es posible utilizar los secuenciadores, los
cuales permiten 16 autoconversiones en una sola sesin (tiempo dado entre la conversin
del primer canal y el ltimo), donde cada conversin es guardada en cualquier registro
previamente seleccionado.

41

GuadelUsuarioDigitalSignalProcessor

Figura 3-27 Diagrama de Bloques del ADC.

En la siguiente figura se muestra un diagrama de bloques simplificado. Se observa


la funcionalidad de los secuenciadores, los cuales permiten realizar un muestreo simultneo
por medio de los S/H, que permiten obtener una lectura de dos canales al mismo tiempo,
pero la conversin se realiza por orden. Por ejemplo en ADCINA5 se puede medir voltaje,
mientras que en ADCINB5 se puede medir corriente, y as obtener la potencia instantnea
en tiempo real. Por medio del autosecuenciamiento, se puede elegir el orden en el cual los
canales ADC de conectan al ncleo del conversor, para as crear una secuencia simple de
hasta 8 muestras, o de hasta 16, utilizando los secuenciadotes en cascada.

42

GuadelUsuarioDigitalSignalProcessor

Figura 3-28 Diagrama Simple del Bloque ADC.

Entre los principales bloques se encuentran dos bloques de multiplexores (MUX) de


8 canales que expanden la capacidad de conversin a 16 canales. Junto a estos se
encuentran dos S/H (Sample and Hold) que permiten la conversin simultnea antes
mencionada. El Sequence Arbiter (rbitro del Secuenciador) mantiene la pista de las
seales de entrada unidas al ADC, incluyendo el modo simultneo. Autosecuenciadores
duales dan flexibilidad seleccionando al azar la forma en que los canales de entrada se
conectan al ncleo ADC. Cada secuenciador de 8-estados puede ser usado
independientemente para convertir hasta ocho canales en una secuencia predeterminada o
en cascada para formar un secuenciador simple de 16 estados.
Por medio del registro ADCMACONV es posible ajustar el nmero mximo de
conversiones por secuencia. Se observa adems que es posible usar una de tres seales para

43

GuadelUsuarioDigitalSignalProcessor

disparar (trigger) el inicio de secuencia (SOC Start of Sequence) en el Secuenciador 1 y


dos seales para SOC en el Secuenciador 2. Existen 16 registros de resultados
(ADCResult0-ADCResult15) que mantienen el conteo ADC antes de que sean transferidos
a la memoria del sistema. Cuando se termina una secuencia (EOC End of Sequence) se
producen tres diferentes seales de interrupciones que son ADCINT, SEQ1INT y
SEQ2INT las cuales pueden ser usadas para transferir los resultados al sistema de memoria.
Las interrupciones son generadas cuando el secuenciador completa la ltima conversin del
ltimo canal de la secuencia. El Servicio de Rutina de Interrupcin (ISR - Interrupt Service
Routine) dispone de estas nicas seales de interrupcin para las operaciones ADC.
Ahora se ver el otro ejemplo provisto por OLIMEX8 que consiste en utilizar un
conversor ADC. Para esto se utiliza el potencimetro de la placa que se encuentra
conectado al pin 34, llamado ADCINB7. Los elementos de los ejemplos que se vern se
muestran en la siguiente figura:

Figura 3-29 Trimmer AN_TR, botn GPIO9 y Led GPI11.

La funcionalidad del ejemplo consiste en hacer parpadear el LED a cierta


frecuencia, la cual est regulada por el trimmer (potencimetro). ste se encuentra
conectado al conversor ADC del pin 34 (pin ADCB7) y en base a la medida obtenida, es
como cambia la frecuencia de parpadeo del led.
Entro lo principal del cdigo del programa basado en la Figura 3-30, se observa
dentro del while{} el siguiente cdigo AdcRegs.ADCST.bit.INT_SEQ1== 0;. Este cdigo
pregunta por el registro que indica que el secuenciador 1 ha terminado la secuencia y es
8

Bajar este y otros ejemplos desde www.olimex.cl, seccin Tarjetas Olimex->DSP.

GuadelUsuarioDigitalSignalProcessor

44

posible la lectura del conversor ADC, correspondiente al pin 34 (ADC B7 en la placa).


Posterior a eso se resetea ese bit (AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;) para
esperar por la nueva secuencia. De ah se observa que guarda los datos de los 15
conversores en un arreglo llamado AdcSampleTable[]. Con el cdigo ADC_Result =
AdcRegs.ADCRESULT15>>4; guarda el valor que ser usado en el ejemplo en esa
variable. El smbolo >>4 divide el valor obtenido en la conversin por 24 , esto permite
bajar la resolucin a la lectura, puesto que como se mide entre 0 y 3, los bit menos
significativos estn de ms para este tipo de experimento, pues se est utilizando un
conversor de 12 bits sobre una variable de 16 bits. Luego el programa apaga el led y con el
valor medido guardado en ADC_Result, se utiliza como entrada en una funcin llamada
Delay(), que no es ms que un for{} simple de ciclo variable dado por el parmetro de
entrada de la funcin, el cual viene de la muestra obtenida del conversor. Posteriormente se
vuelve a encender el led para luego volver a utilizar la funcin delay. Esto se muestra en la
Figura 3-30 donde se observa que adems de medir el valor de ADCB7, tambin mide
todos los conversores, es decir los otros 15 (son 16 en total). En este caso
ADCSampleTable[15] corresponde al pin 34 (ADCB7).

Figura 3-30 Ejemplo Conversor ADC.

Para poder utilizar los conversores ADC se deben configurar los siguientes
registros:

Tasa de muestreo.
Configurar/Seleccionar el Autosecuenciador.

GuadelUsuarioDigitalSignalProcessor

45

Modo de muestreo.
Seleccionar la seal SOC (Star of Conversion Comienzo de la Conversin).
Asignar los canales para el(los) secuenciador(es) tal que los diecisis resultados
de los registros de 16-bit mantendrn el conteo de los canales de entrada segn
se desee y para un determinado nmero de conversiones por secuencia.
Configurar interrupcin en EOS (End-of-Sequence Fin de Secuencia).
Para mayores detalles y especificaciones sobre cmo configurar las caractersticas
del conversor ADC se debe dirigir al manual de referencia TMS320x280x, 2801x, 2804x
DSPAnalog-to-Digital Converter (ADC) (spru716b.pdf) o a An Overview of Designing
Analog Interface With TMS320F28xx/28xxx DSCs (spraap6a.pdf).

3.7 Uso de Archivos GEL


CCS permite la utilizacin de unos archivos o script de extensin *.GEL, que
permiten por medio de un men desplegable, la compilacin de un proyecto, carga de
cdigo o simplemente ajusta la ventana Watch Windows con las variables de
consideracin. Este archivo se carga una vez junto con el proyecto, y junto a ste aparece el
men GEL con las funciones disponibles. Cabe mencionar que el archivo GEL queda
cargado en el CCS, por lo que al cambiar de proyecto, se debe quitar manualmente.
Para dar una visin de lo que se puede hacer con este archivo, se mostrar el men
GEL del ejemplo ADC conversor. El archivo GEL viene ya creado con el ejemplo por lo
que slo bastar con cargarlo en el proyecto. Para esto ingresar a FILE->Load GEL y
buscarlo en la misma carpeta del ejemplo. Para crear un archivo GEL propio se debe leer la
ayuda de VII.- spraa74a.pdf - Creating Device Initialization GEL Files. disponible en
www.ti.com.
Un vez cargado el archivo GEL aparecer el siguiente men en la barra de
herramientas. Adems el archivo GEL aparecer en el panel del proyecto en la carpeta
GEL FILES.

46

GuadelUsuarioDigitalSignalProcessor

Figura 3-31 Men desplegable para archivo GEL.

Antes de haber cargado el archivo GEL, en el men mencionado anteriormente no


aparece nada, pero luego se observar en el men desplegable las funciones disponibles del
archivo. En el men se observa una opcin llamada DSP280x ADC Seq_ovd Test y dentro
de ste, tres funciones llamadas Load_and_Build_Project(); Load_Code(); y
Setup_WatchWindow(). Si se observa el archivo GEL y se abre, se vern varios tems. El
primero llamado menuitem que tiene el nombre del men GEL entre comillas en la barra
de herramientas. Este men corresponde a uno general para agrupar las funciones segn
utilidad o gusto del usuario. El otro tem que se observa se llama hotmenu y corresponde a
la funcin en s. Se ven tres funciones hotmenu que son las que aparecen en el men de la
barra de herramientas. Los nombres de estas funciones se pueden crear arbitrariamente,
para que hagan referencia a su utilidad. Por ejemplo la tercera funcin hotmenu
Setup_WatchWindow() ajusta la ventana Watch Window con las variables de inters.
Dentro de sta se observa la funcin GEL_WatchReset() que borra todas las variables que
se encuentren actualmente dentro de la ventana. La funcin GEL_WatchAdd() agrega una
variable de inters. Con lo anterior es posible as agregar todas las variables deseadas, sin
tener que buscarlas dentro del cdigo una por una cada vez que se reinicia el CCS.

47

GuadelUsuarioDigitalSignalProcessor

Lo anterior permite crear una mezcla de funciones dentro de otras para realizar as
las tareas ms comunes en un solo paso. Las funciones base mostradas en el ejemplo son
las que aparecen con el prefijo GEL y vienen dentro de la librera de CCS. A continuacin
se muestra una tabla con las funciones provistas. Para un mayor detalle de su uso dirigirse a
la ayuda de CCS.

Funciones GEL
GEL_AddInputFile()

GEL_AddOutputFile()

GEL_AdvancedReset()

GEL_Animate()

GEL_AsmStepInto()

GEL_AsmStepOver()

GEL break Statment

GEL_BreakPtAdd()

GEL_BreakPtDel()

GEL_BreakPtDisableGEL_BreakPtReset() GEL_CancelTimer

GEL_DisableRealtime()

GEL_Exit()

GEL_SymbolShowSection()

GEL_ProbePtAdd()

GEL_EnableClock()

OnHalt

GEL_EnableRealtime()

GEL_HWBreakPtDisable

GEL_IsInRealTimeMode

GEL_Go()

GEL_SharedMemHaltOnStepOff()

GEL_Halt()

GEL_Load()

GEL Grammar

GEL_HWBreakPtAdd()

GEL_HWBreakPtReset()

GEL_LoadGel()

GEL_MapDelete()

GEL_HWBreakPtDel()

GEL_MemoryFill()

GEL_MapReset()

GEL_MapAddStr()

GEL_SharedMemHaltOnStepOn()

GEL_MapOff()

GEL_MapOn()

GEL_PatchAssembly()

GEL_PinConnect()

GEL_PortConnect()

GEL_PortDisconnect()

GEL_SyncRun

GEL_ProjectCreateDefaultConfig()

GEL_ProjectLoad()

GEL_ProjectRebuildAll()

GEL_RemoveDebugState

GEL_RemoveInputFile()

GEL_RemoveOutputFile() GEL_Reset()

GEL_SetSimMode()

GEL_SetWaitInResetMode()

GEL_RefreshWindows

GEL_LowPowerRun()

GEL_SrcDirRemoveAll()

GEL_SrcStepInto()

GEL_SrcStepOver()

GEL_StopTransferToFile()

GEL_SymbolAdd()

GEL_SymbolAddRel()

GEL_SymbolHideSection() GEL_SymbolRemove()

GEL_TextOut()

GEL_TransferToFile

GEL_TransferToFileConfg GEL_UnloadAllSymbols()

OnFileLoaded()

Gel_LoadProfileConfiguration

OnPreFileLoaded()

GEL_ProjectClose()

GEL_ProjectRebuildAllConfig()

GEL_OpenWindow()

OnReset()
GEL_MapAdd()

GEL_ProjectBuild()

GEL_ProjectRebuildAllConfig()

GEL_MemoryLoad()

GEL_MemorySave()

GEL_StepOver

GEL_ProbePtDel()

GEL_ProbePtDisable

GEL_ProbePtReset()

GEL_SyncStepOver

GEL_ProjectRemoveConfig()

GEL_ProjectSave()

GEL_ProjectSetActive()

GEL_Restart()

GEL_RestoreDebugState

GEL_SrcDirAdd()

GEL_RunF()

GEL_WatchAdd()

GEL_SharedMemHaltOnWriteOff()

GEL_StepInto

GEL_StepOut

GEL_SyncHalt

GEL_SharedMemHaltOnWriteOn()

GEL_SyncStepInto

GEL_SyncStepOut

GEL_SymbolLoad()

GEL_OpenMemoryWindow

GEL_SymbolLoadRel()

GEL_System()
GEL_WatchReset()

GEL_UnloadGel()

GEL_ProjectSetActiveConfig()

GEL_WatchDel()

OnResetDetected()

GEL_SetBlockResetMode()

OnTargetConnect()

GEL_Run()

GEL_SetTimer

GEL_OpenDisassemblyWindow

GEL_TargetTextOut()

OnRestart()

GEL_ProjectCreateCopyConfig() GEL_ClearProfileConfigurationGEL_CloseWindow()

Tabla 3-3 Funciones GEL disponibles.

48

GuadelUsuarioDigitalSignalProcessor

3.8 Ejemplo Echo Back usando SCI.


Este ejemplo, al igual que los anteriores, est disponible en la pgina de Ingeniera
MCI LTDA9. Su funcin es la de utilizar el puerto SCI (Serial Communication Interface)
comnmente conocido como puerto UART, que consiste de una conexin de dos cables
asncrona. Se basa en el formato NRZ (non return to zero). Permite la autodeteccin de la
velocidad de conexin. Cola FIFO de 16 niveles. Cada funcionalidad del SCI es
configurable por software donde bytes dedicados son programados para inicializar el
formato de comunicacin deseado del SCI. Entre otras cosas permite configurar la
velocidad de conexin, modo de operacin y protocolo, paridad, largo de los caracteres, Bit
de parada, y habilitar interrupciones y prioridades.
La conexin se realiza utilizando los pines GPIO28 y GPIO29. Estos pines pueden
utilizarse como de uso general en caso de que no se use el puerto SCI. El ejemplo funciona
de la siguiente forma; cuando vienen datos a travs de este puerto, el programa los enva de
vuelta, produciendo lo que se conoce como Eco. Viene ya configurado y listo para usar y lo
nico externo que se necesita es la conexin desde el puerto SCI al PC utilizando el puerto
serial. Una opcin es utilizar el puerto USB disponible en la placa del DSP, instalar un
driver para crear un enlace virtual entre el puerto USB y el puerto serial del PC y luego
correr el programa. Este driver se encuentra disponible en la pgina oficial de FTDI10, que
es la marca que provee el chip de la tarjeta que convierte de USB a serial. Si se desea
utilizar el Hyperterminal se debe bajar el driver VCP (Virtual COM port). Este driver
crear un enlace para el puerto USB, por lo que al utilizar el hyperterminal aparecer un
puerto adicional a los ya existentes. En caso de no disponer de lo anterior, se debe crear una
conexin por medio de un circuito externo entre el puerto serial y la tarjeta (utilizando el
conector UEXT). Se debe tener cuidado de los niveles de voltaje a tarjeta y el puerto serial
del PC, por lo que se recomienda utilizar un chip adecuado (se recomienda MAX232).
Para utilizar el ejemplo se debe utilizar el hyperterminal. Se debe crear una
conexin y se debe configurar para una velocidad de 9600 baudios, 8N1. El puerto a elegir
depende del tipo de conexin. Si se utiliza el puerto serial con el circuito externo,
generalmente es el puerto COM1, si se utiliza el puerto USB, generalmente aparece un
puerto con un nmero mayor a 30.
Luego de iniciar la conexin, se compila y carga el programa en la tarjeta y al
instante aparecer lo siguiente en el hyperterminal, donde cada vez que se escriba algo, el
programa lo enviar de vuelta.

www.olimex.cl
http://www.ftdichip.com/FTDrivers.htm

10

49

GuadelUsuarioDigitalSignalProcessor

Figura 3-32 Programa EchoBack con Hyperterminal.

50

GuadelUsuarioDigitalSignalProcessor

4 Creando un ejemplo desde cero


El siguiente ejemplo explicar desde cero la forma de crear un proyecto. Se partir
de una estructura bsica a partir de la cual, se comenzarn a agregar libreras o cdigo para
realizar alguna tarea o satisfacer la necesidad del usuario. Si bien programar un DSP
requiere bastante dedicacin y grandes conocimientos en programacin y procesadores, es
posible aminorar esto partiendo desde una configuracin bsica basada en los ejemplos. Por
ello se crear un esqueleto de proyecto el cual ser la base para cualquier otro, logrando as
para cada utilidad, la mnima cantidad de configuraciones.

4.1 Por dnde partir?


Lo primero a realizar ser la creacin del proyecto en s. Para esto se comienza
desde el CCS sin abrir nada y se ingresa Proyect->new. Aparecer una ventana como la de
la siguiente figura, en la cual se ingresa el nombre del proyecto (LucesRitmicasDSP), la
carpeta donde se crear el proyecto, el tipo de proyecto (*.OUT) y el modelo de la tarjeta
DSP.

Figura 4-1 Creacin de un proyecto.

Con lo anterior se crear una carpeta con el nombre del proyecto en la carpeta
seleccionada junto a dos archivos de extensin: *.PJT que contiene toda la informacin del
proyecto; y *.SBL con informacin externa. Ahora se procede a agregar un cdigo fuente.
Esto se realiza ingresando File->New->Source File. As se crear un archivo en blanco sin
ninguna extensin. Para comenzar simplemente se copia el cdigo del ejemplo del
conversor ADC y guardamos el archivo con extensin *.C para que el CCS lo marque
como lenguaje C. Luego se agrega al proyecto por medio de Proyect->Add Files to
Project. As la carpeta del proyecto contendr el archivo LucesRitmicas.c.

51

GuadelUsuarioDigitalSignalProcessor

Figura 4-2 Guardar Cdigo Fuente.

Con lo anterior, se necesita ahora agregar las libreras y archivos de cabecera. Para
mantener el orden con respecto a esto y separar los cdigos de lo que son cabeceras, se
crearn dos carpetas al estilo de los ejemplos vistos. As se crearn tres carpetas llamadas
DSP280x_common; DSP280x_headers; y DSP280x_examples. Las dos primeras
contendrn todas las cabeceras necesarias para poder correr los ejemplos, es decir, se
copiarn de los mismos ejemplos. La ltima carpeta ser la que contendr al proyecto
creado anteriormente. As cuando se indique la carpeta en donde se crear el proyecto, se le
debe indicar ../ DSP280x_examples, la cual debe estar completamente vaca. Ahora se
debe agregar los directorios al proyecto para que incluya las cabeceras, ya que sino se hace,
el compilador no es capaz de encontrar los archivos mencionados en #include. Esto se hace
ingresando a Project->Build Options. As aparecer una ventana como la siguiente:

52

GuadelUsuarioDigitalSignalProcessor

Figura 4-3 Opciones par incluir archivos de cabecera.

En la pestaa Compiler se selecciona la categora Preprocessor y se ingresa en


Include Search Path (i): el siguiente comando para agregar una carpeta:
..\..\DSP280x_headers\include;..\..\DSP280x_common\include. Por la forma en cmo
estn creadas las carpetas, con el comando anterior incluir las direcciones en donde se
encuentran la mayora de los archivos de cabecera. As las carpetas deben quedar como:

GuadelUsuarioDigitalSignalProcessor

53

Figura 4-4 Carpetas del proyecto.

Luego dependiendo de las funciones usadas en el cdigo, ser la forma del rbol de
carpetas del proyecto con los archivos a ser agregados. Para agregar un archivo o cabecera
al proyecto de debe ingresar a Project->Add Files to Project o simplemente haciendo
click derecho sobre el nombre del proyecto. Entre los archivos principales se deben incluir:

DSP280x_headers/source/DSP280x_GlobalVariableDefs.c
DSP280x_headers/cmd/DSP280x_Headers_nonBIOS.cmd
DSP280x_common/cmd/28016_RAM_lnk.cmd
DSP280x_common/source/:
o DSP280x_CodeStartBranch.asm
o DSP280x_Adc.c
o DSP280x_DefaultIsr.c
o DSP280x_PieCtrl.c
o DSP280x_PieVect.c
o DSP280x_SysCtrl.c
o DSP280x_usDelay.asm
o DSP280x_Gpio.c

Dependiendo del tipo de proyecto que se desea crear, es posible ir agregando o


quitando estos archivos. Por ejemplo si se desea usar SCI se debe incluir el archivo
DSP280x_common/source/DSP280x_Sci.c. Algunos de estos archivos son excluyentes, por
lo que debe tener cuidado de no definir algunas variables dos veces, lo que provoca un error
de compilacin. Todo lo anterior est definido exclusivamente para que funcione con el
ejemplo del conversor ADC, pero an as es suficiente como para comenzar a trabajar, sin
la necesidad de partir completamente desde cero. La configuracin de memoria con los
archivos *.CMD tambin es bsica, por lo que si se desea un uso de memoria ms exigente,
se debe modificar el archivo 28016_RAM_lnk.cmd.

54

GuadelUsuarioDigitalSignalProcessor

Antes de compilar se debe configurar el CCS. Para esto se debe ingresar a las
opciones de compilacin en Project->Build Options. En la pestaa Linker ingresar en la
categora Basic y en Stack Size (-stack) elegir 0x380 y en Code Entry Point (-e) escribir
code_start. Esto indica el tamao del stack y la direccin de memoria en la cual se
guardar el comienzo del cdigo del programa. Esto se indica en el archivo
28016_RAM_lnk.cmd y DSP280x_CodeStartBranch.asm. Luego en la misma pestaa
Linker ingresar en la categora Libraries y modificar el Search Path (i) a
..\..\DSP280x_headers\include y el Incl Libraries (-l) ingresar rts2800_ml.lib. Con todo
lo anterior, la configuracin debera verse como:

Figura 4-5 Configuracin Build_Option.

Ahora se est listo para duplicar el ejemplo de los conversores ADC. Para crear el
ejemplo de las luces rtmicas se partir desde ste punto. Si se desea evitar lo anterior,
simplemente se puede copiar en una nueva carpeta todo un ejemplo completo y partir desde
ah, pero con el problema de que ante cualquier cambio, pueda aparecer un error ante la
falta de algn tipo de archivo. Se recomienda leer cuidadosamente los ejemplos para
utilizar los perifricos.

55

GuadelUsuarioDigitalSignalProcessor

4.2 Uso de librera FFT y otras modificaciones.


Este ejemplo es parte del proyecto LucesRitmicas el cual consiste en muestrear una
seal de audio, calcular su espectro de frecuencias, y en base a los sonidos bajos, medios y
altos, encender o apagar unos led. Se partir del ejemplo visto anteriormente donde el
programa se ejecuta idntico al del conversor ADC, pero en este caso manejaremos otros
pines para prender 3 led externos conectados en la placa, y se ajustar un conversor ADC
diferente al conectado al potencimetro de la tarjeta.
Primero se activarn los LED para usarlos como luces. Se crearn 3 salidas
idnticas a las usadas para el ejemplo del Blinking_LED. Se usarn #define para identificar
los LEDs. Esto se muestra en lo siguiente:

Figura 4-6 Configuracin de botones.

Ahora falta configurar esos pines como salida. Esto se realiza en la funcin
Gpio_select(); donde el valor del registro es GpioCtrlRegs.GPADIR.all=0x00000800
(0000 1000 0000 0000). Este valor ( 1 lgico) indica que el pin 11 funciona como salida
(el pin conectado al led de estado de la placa). Su valor corresponde con cada pin, partiendo
desde cero, donde si aparece un 1, indica que el pin funciona como salida. Por ejemplo si se
desea que el pin 11 y el 3 funcionen como salida entonces se debe ingresar un 0x0000 0808
(0000 1000 0000 1000). Ahora como se desea que funcionen 3 pines como salida adems
del pin 11, se debe tener que configurar como 0x0000 040E (0000 1000 0000 1110), en
donde se utilizarn el PIN 1, PIN 2 y PIN 3.
La funcin Gpio_Select() se muestra en la siguiente figura. Por ahora el resto de los
registros se debe dejar idntico. Esta funcin tambin puede ser incluida manualmente,
simplemente ingresndola en el cdigo fuente, pero debe quitarse del proyecto el archivo
DSP280x_Gpio.c ya que crear un error de compilacin el tener dos veces la funcin
definida. Luego de haber realizado los cambios, es posible usar los leds simplemente
ingresando las macros dadas, del mismo modo que el ejemplo del Blinking_Led.

56

GuadelUsuarioDigitalSignalProcessor

Figura 4-7 Funcin Gpio_Select().

Ahora para el control en el dominio de la frecuencia se usarn unas libreras,


disponibles en www.ti.com, para el manejo de la FFT (Fast Fourier Transform). Para
agregar estas libreras simplemente se busca por el archivo sprc081.zip, se descomprime y
luego se instala. El directorio de instalacin es siempre el mismo y es
C:\TIDCS\C28\DSP_TBOX\FFT. En esta carpeta aparecern otras tres ms llamadas clin;
cstb y doc. Para poder utilizar esta librera simplemente se debe agregar el archivo
.\clib\include\fft.h y .\clib\lib\fft.lib al mismo directorio en donde se encuentra el cdigo
fuente o en los directorios dados en el linker del compilador (como se muestra en la Figura
4-5 en la seccin Search Path). Luego la librera fft.h se debe ingresar en esa misma figura,
en la Categora Libraries, en Include Libraries, ingresando fft.lib. Si existen ms de una
librera, simplemente se separan por punto y comas (;). As esto debe quedar como en la
Figura 4-9.
En el cdigo fuente se debe incluir explcitamente el archivo fft.h. Para ello se
utiliza la macro #include junto a comillas () o a parnteris (<>). Esto se ve de la siguiente
manera:

Figura 4-8 Inclusin de libreras usando o <>.

En el caso del uso de comillas, el compilador buscar el archivo en el mismo


directorio del cdigo fuente, mientras que en el caso de parntesis <>, el compilador
buscar las libreras en los directorios agregados en las opciones del CCS.

57

GuadelUsuarioDigitalSignalProcessor

Figura 4-9 Forma de incluir una librera al CCS.

Luego para utilizar la librera FFT, se debe ingresar un conjunto de funciones, que
entre otras cosas, maneja los clculos y arregla de tal forma los datos, que permite ser lo
ms eficiente posible en el clculo. Esto debido a que las funciones FFT estn programadas
en lenguaje ensamblador, al mximo de eficiencia por instruccin. Adems es necesario
modificar el archivo de memoria o *.cmd. Dentro del cdigo fuente se debe incluir, donde
corresponda (ya sea en la cabecera, dentro o fuera del main) lo siguiente:

58

GuadelUsuarioDigitalSignalProcessor

Figura 4-10 Cdigo bsico para utilizar la FFT.

La utilidad y funcin de cada lnea de la figura anterior se explica con mayor detalle
en la documentacin de la librera. Bsicamente se puede explicar que se toman los datos
los cuales se guardan en una estructura llamada RFFT32 fft. En sta se realizan los
procesos de muestreo (nmero de puntos N=128 y ventana de Hamming), bit reverse y
conversin, adems de otros clculos tiles como peak de frecuencia y de amplitud. Las

59

GuadelUsuarioDigitalSignalProcessor

operaciones disponibles de pueden ver ingresando fft. donde luego de unos momentos
aparecer un men contextual con las funciones disponibles. Esto se ve a continuacin:

Figura 4-11 Funciones disponibles para la FFT.

Luego es posible realizar cualquier accin que se desee en base a la potencia de la


seal o en base a su frecuencia, por ejemplo se puede utilizar fft.peakmag que calcula el
mdulo de la FFT. En base a este valor se pueden manejar los LED en base a la potencia
del audio o de una seal cualquiera. Para un mejor uso de estas funciones dirigirse al
manual provisto por Texas Instruments.
Para la ubicacin de la memoria simplemente se agregan los comandos mostrados
en las siguiente figuras en el archivo linker 28016_RAM_lnk.cmd. Se eliminaron algunas
secciones, pero la versin completa se encuentra en la documentacin de la FFT. Se debe
agregar H0RAM en la pgina 0 de la memoria y la FFTtf en SECTIONS. Tambien es
posible no especificar estas secciones y dejar que el linker las cree sola, pero se tiene la
posibilidad de que no alcance el espacio de memoria, creando un error de compilacin, o de
que se pisoteen variables, creando un error en tiempo de ejecucin. Para que el linker cree
solo los espacios se deben agregar las siguientes lneas: #pragma DATA_SECTION(ipcb,
"FFTipcb"); y #pragma DATA_SECTION(mag, "FFTmag"). Estas lneas se deben
agregar debajo de la definicin de la variable N = 128 al comienzo del cdigo fuente.

60

GuadelUsuarioDigitalSignalProcessor

Figura 4-12 Comand Linker de ejemplo para ocupar la librera FFT.

An as lo anterior, la documentacin provista por TI recomienda como mnimo


tener las siguientes secciones para sus variables y operaciones:

Figura 4-13 Comand Linker mnimo para librera FFT.

4.3 Filtrado de Seales.


Para el filtrado de seales se utilizar la herramienta ms conocida, la Convolucin.
Con ello se proceder a manejar una seal por medio de un filtro FIR, que requiere pocas
muestras de la seal y adems es bastante eficiente. A continuacin se muestra un esquema
de la forma en que se aplica un filtro FIR utilizando convolucin.

GuadelUsuarioDigitalSignalProcessor

61

Muestra
De
Entrada

Z0

Z-1

Z-2

Z-N+1

Filtro[0]

Filtro[1]

Filtro[2]

Filtro[N-1]

Salida
Figura 4-14 Esquema de un Filtro FIR.

Para realizar esta operacin se debe proceder de la siguiente manera.

Guardar las muestras de la seal en una variable HISTORIAL[BUFFER] con un


buffer dado por el usuario.
El buffer depender de la calidad que se le quiera dar al filtrado y del tipo de filtro
que se le quiera aplicar.
Crear el filtro a aplicar utilizando los requerimientos necesarios para la seal, como
frecuencia de corte, ganancia o factor de amortiguamiento.
Realizar la operacin de convolucin entre la variable HISTORIAL[] y el filtro.
En base a la respuesta obtenida, es el significado que se le dan a los resultados.

Lo ms complicado de lo anterior es obtener un filtro. Sin embargo existen muchas


pginas en la cuales entregando las caractersticas antes mencionadas, te entregan los
valores del filtro. Generalmente slo basta indicar la frecuencia de corte y el nmero de
puntos del filtro el cual corresponde al tamao del buffer para la variable Historial.
Se supondr que ya se tiene un filtro que realiza alguna operacin del tipo pasa bajo
para cierta frecuencia de corte fc. Se tiene en este caso un buffer obtenido arbitrariamente
de 128 muestras. Supongamos que las muestras las obtenemos del conversor ADC
(ADC_Results). Lo primero que se debe realizar es ir guardando las muestras en el buffer,
pero con la condicin de ir moviendo las muestras a medida que llegan, es decir, con el
principio de que el primero en entrar es el ltimo en salir. De esta forma se crea una
variable donde las muestras ms nuevas se encuentran al comienzo y las ms antiguas al
final. El cdigo para hacer esto es:

62

GuadelUsuarioDigitalSignalProcessor

Figura 4-15 Ejemplo cdigo para Historial.

Donde BUF_SIZE corresponde al nmero de valores del filtro que se quiera


aplicar. Es importante recalcar que este valore debe ser lo ms mnimo posible, para evitar
llenar la memoria con valores innecesarios. Se recomienda un valor cercano a los 32 para
una calidad de procesado mediana. Por ejemplo el filtro conviene escribirlo de la siguiente
manera por medio de una variable global:

Figura 4-16 Macro para definir filtro.

Sin embargo existen varios programas o funciones que pueden correr en tiempo de
ejecucin, que crean automticamente el filtro basndose en parmetros dados. Estas
funciones pueden ser encontradas gratis en la web.
Para la convolucin se debe multiplicar la ltima muestra que llega con el ltimo
trmino del filtro. En muchos casos los filtros son simtricos por lo que esto no es de real
importancia, pero se dejar lo ms robusto posible para futuras aplicaciones. Otro punto
importante, es que en la mayora de las veces se utilizan filtros normalizados. Estos son
tiles para evitar un cambio en la potencia de la seal y evitar distorsiones no deseadas.
Ahora se procede a aplicar el filtro a la seal en tiempo real. Esto se realiza con el
siguiente cdigo:

Figura 4-17 Cdigo para Convolucin.

Se observa que se aplica el filtro a todas las muestras anteriores (32 muestras), para
producir una variable resultante de salida. Esta es la que deber ir como muestra para un
arreglo de salida dependiendo del tipo de seal con la que se est trabajando.

63

GuadelUsuarioDigitalSignalProcessor

Con lo anterior se tendr la muestra resultante en la variable Salida. Si la seal fuera


un archivo se sonido, entonces esta muestra (Salida) al final del ciclo for{;;} se deber
entregar como entrada para el dispositivo de audio o hacia algn amplificador para
reproducirla. Este tipo de accin debe ser lo suficientemente rpida como para alcanzar a
realizar todo el procesado de la seal, antes de que llegue la siguiente muestra, ya que de lo
contrario, se corre el riesgo de que el audio quede daado o se escuche mal. Por esta razn
se recomiendan usar filtros de no ms de 64 muestras.

GuadelUsuarioDigitalSignalProcessor

64

5 Resumen Atajos Teclado.

Atajo

Descripcin

F5

Run

Shift+F5

Halt

F7

Build

Ctrl.+F7

Compile File

Alt+C

Connect

Ctrl.+L

Load Program

Ctrl+Shift+L
Ctrl.+R

Reload Program
Reset Cpu

Ctrl.+Shift+R

Reset Emulador

Tabla 5-1 Tabla resmen de atajos.

65

GuadelUsuarioDigitalSignalProcessor

6 Manuales de Referencia de TI.COM


Esta seccin contiene los manuales de referencia para cada mdulo disponible en el
DSP TSM320F28016. Se incluye una hoja de datos (datasheet) general, una gua sobre
cmo empezar a programar (Quick Start) y un manual de referencia por cada mdulo, el
cual explica en detalle sus registros y la forma de configurarlos. Para obtener estos archivos
dirigirse a www.ti.com y buscarlos por el cdigo dado al comienzo de cada referencia o
directamente de www.olimex.cl en la seccin Tarjetas Olimex->DSP.

I.II.III.IV.V.VI.VII.VIII.IX.X.XI.XII.XIII.-

TMS320F28016- Data Manual (Datasheet).


spraam0a.pdf - Getting Started With TMS320C28x Digital Signal Controllers.
spru716b.pdf - TMS320x280x, 2801x, 2804x DSPAnalog-to-Digital Converter (ADC).
spraap6a.pdf - An Overview of Designing Analog Interface With TMS320F28xx/28xxx DSCs.
spru361e.pdf - TMS320 DSP Algorithm Standard Demonstration Application.
spru424c.pdf - TMS320 DSP Algorithm Standard Developers Guide.
spraa74a.pdf - Creating Device Initialization GEL Files.
C280x/C2801x C/C++ Header Files and Peripheral Examples Quick Start.
spru566f.pdf - TMS320x28xx, 28xxx DSP Peripheral Reference Guide.
spru258a.pdf - TMS320 DSP Product Family Glossary.
spraa85a.pdf - Programming TMS320x28xx and 28xxx Peripherals in C/C++.
spru712f.pdf - TMS320x280x, 2801x, 2804x DSP System Control and Interrupts.
spru625.pdf - TMS320C28x DSP/BIOS Application Programming Interface (API)
Reference Guide.
XIV.- spraa88 Using PWM Output as a Digital-to-Analog Converter on a TMS320F280x.
XV.spra958g.pdf - Running an Application from Internal Flash Memory on the TMS320F28xxx
DSP.
XVI.- spru051b.pdf - TMS320x28xx, 28xxx DSP Serial Communication Interface (SCI) Reference
Guide.
XVII.- spru059d.pdf - TMS320x28xx, 28xxx DSP Serial Peripheral Interface (SPI) Reference Guide.