Sunteți pe pagina 1din 13

INSTITUTO POLITECNICO NACIONAL UNIDAD PROFESIONAL INTERDISCIPLINARIA EN INGENIERIA Y TECNOLGIAS AVANZADAS - IPN

MATERIA Procesadores Digitales de Seales

ALUMNOS Cerda Baos Omar

PROFESOR Juan Manuel Madrigal Bravo.

TEMA Uso de la memoria externa del del DSP

Grupo 6TV1

Equipo 1

Practica No. 5 23/02/2011

Objetivo: Hacer uso de la directiva pragma para almacenar datos en la memoria externa del DSP. Para esto se guardar una seal de voz introducida a travs de un micrfono en la tarjeta de desarrollo, manipulando ciertos parmetros en el programa principal se guardara cierto lapso de voz, la cual despus reproduciremos. Antecedentes #Pragma nombre_directiva Con esta directiva se declaran directivas que usa el compilador de C. Si al compilarse el programa con otro compilador de C, este no reconoce la directiva, se ignora. Arquitectura del C6713 DSK El C6713DSK es una plataforma de desarrollo independiente de bajo costo, que permite al usuario, desarrollar y evaluar aplicaciones para la familia de DSP C67XX de Texas Instruments. De forma general se muestra en la fig. 5.1.

Figura 5.1. Diagrama a bloques del C6713DSK El DSK viene con un compendio amplio de dispositivos, adheridos en la tarjeta, que permite una amplia variedad de ambientes de aplicacin. Algunas de las caractersticas son: Un TMS320C6713 DSP de Texas Instruments trabajando a 225MHz. - El cdec estreo AIC23 8 Mbytes de memoria DRAM sncrona. 512 Kbytes de memoria Flash no-voltil es decir, guarda la informacin permanentemente, 4 LEDs y DIP switches para ingresar informacin Opciones configurables de arranque Configuracin del software de la tarjeta a travs de de una CPLD implementada Conectores de expansin para el caso que se desee conectar 2 tarjetas.

La interaccin del DSP incluido DSK6713 con los perifricos en la tarjeta se realiza a travs de un amplio EMIF (External Memory Interface) de 32-bits. La memoria SDRAM, Flash y la CPLD estn todas conectadas al este bus. A las seales EMIF son tambin conectados los puertos de expansin para alguna tarjeta hija, estos puertos son utilizados por terceros para algn complemento. Bilbioteca vectors_poll.asm y mtodo de poleo. En las practicas anteriores lo que hacamos es hacer que el cdec aceptara datos generndole interrupciones. En esta ocasin es diferente, la tarjeta recoger datos por tcnica de poleo que consiste en que la tarjeta estar programada (no por nosotros) para preguntar si cierto perifrico tiene datos que entregar, de ser as lo acepta, de nos ser asi se va a otro perifrico, y as sucesivamente. Es algo as como una multiplexacin. Los datos que se almacenaras sern de tipo de dato short, el cual requiere 2 bytes. Desarrollo De igual forma que las prcticas anteriores, necesitaremos archivos de soporte adicionales, para esta prctica requerimos hacer lo mismo. 1. Creamos el proyecto con el siguiente nombre : record_pr05.pjt. NOTA: Es importante respetar los nombres de archivos mencionados por el profesor, dado que unos archivos se auxilian de otros para compilar el programa principal, y en esta accin se hacen referencia mediante sus nombres. 2. Modificamos el archivo de comandos C6713DSK.cmd utilizado en prcticas anteriores para que contuviera las siguientes secciones y lo grabamos como C6713DSK_r.cmd. /*C6713dsk.cmd Linker command file*/ MEMORY { IVECS: org = 0h, len = 0x220 IRAM: org = 0x00000220, len = 0x0002FDE0 SRAM_EXT: org = 0x80000000, len = 0x01000000 FLASH: org = 0x90000000, len = 0x00020000 } SECTIONS { .EXTRAM .vecs .text .bss .cinit

:> SRAM_EXT :> IVECS :> IRAM :> IRAM :> IRAM

/*Created in vectors file*/ /*Created by C Compiler*/

.stack .sysmem .const .switch .far .cio .csldata }

:> IRAM :> IRAM :> IRAM :> IRAM :> IRAM :> IRAM :> IRAM

En este proyecto utilizaremos un archivo de secuencia de comandos que es el C6713dsk_r.cmd el cual contiene declarada a la memoria Flash, visible en la figura 5.2.

Figura 5.2. Secuencia de comandos, declarando a la memoria FLASH. 2. Cargamos el siguiente cdigo principal proporcionado por el professor. //record_pr07.c #include "C:\CCStudio_v3.1\MyProjects\arch soporte dsk\dsk6713_aic23.h" //Archivo de soporte del DSK Uint32 fs=DSK6713_AIC23_FREQ_8KHZ; //Frecuencia de muestreo #define N 24000 //Bffer long i; short var; short buffer[N]; #pragma DATA_SECTION(buffer,".EXTRAM") //buffer -> memoria externa void main() { comm_poll(); DSK6713_DIP_init(); DSK6713_LED_init(); while(1) { if(DSK6713_DIP_get(3) == 0) 3 est presionado { DSK6713_LED_on(3); for (i = 0; i<N; i++) buffer[i] = input_sample(); entrada DSK6713_LED_off(3); cuando el BFFER est lleno break;

//DSK, CODEC y McBSP //Bucle infinito //Verificar si el switch No. //Encender LED No. 3 //Lectura de una muestra de //Apagar el LED No. 3

} }; var=0; while(1) { if((DSK6713_DIP_get(0)==0)&&(var==0)) presionado y var=0 { DSK6713_LED_on(0); for (i = 0; i<N; i++) output_sample(buffer[i]); var=1; DSK6713_LED_off(0); se termine } if(DSK6713_DIP_get(0)==1) var=0; bandera }; }

//Verificar si SW No. 0 est //Apagar el LED No. 0 //Reproduccin inversa //Apagar el LED#0 cuando //Cambiar el estado de la

4. Agregar el archivo: C6713dskinit.c en el cual se encuentran las funciones: input_sample, output_sample, comm_intr, etc. (Este archivo forma parte de [3]) 5. Agregamos el archivo: vectors_poll.asm en el cual estn contenidos las rutinas de acceso a perifricos por poleo (este archivo forma parte de [3]). 6. Agregamos las libreras: C:\CCStudio_v3.1\C6000\csl\lib\csl6713.lib C:\CCStudio_v3.1\C6000\dsk6713\lib\dsk6713bsl.lib C:\CCStudio_v3.1\C6000\cgtools\lib\rts6700.lib 7. Se aadi el archivo de comando : C6713DSK_r.cmd . Hasta este momento nuestro cuadro de archivos de projecto nos queda como se muestra en la figura 5.3.

Figura 5.3 Cuadro de archivos de proyecto. 8. Modificamos el registro 4 del archivo C6713dskinit.h y cambie el registro: 0x0011 por 0x0015, para que admita la entrada con micrfono y salida con el audfono. (Este archivo forma parte de [3]). 9. Compilamos el programa. Una vez ms tuvimos un error de could not open file que fue causado por no escribir bien la ruta de acceso a un archivo. Pero fcilmente se solucion. 10. Cargamos el archivo .out en el DSP. 11. Conecte un micrfono y un audfono. 12. Ejecute el programa. 13. Presione el switch 3 y hable por el micrfono por algunos segundos. Verifique que el led 3 se encienda para indicar que la voz est siendo grabada y almacenada en un buffer. Desconecte el switch 3 para detener la grabacin. NOTA: Nuestra voz ser guardada en tipo de dato short, el cual requiere de 2 bytes. Y la frecuencia de muestreo es: Fs = 8khz, grabacin. entonces se requerirn : (8Khz)(2bytes) = 16 000 bytes por segundo de es de 16 Mbytes es posible guardar

Tomando en cuenta que la memoria externa aproximadamente: 16MB/16000muestras = 1000 segundos.

Para un dato ms riguroso. 1MB tiene 1024 kbytes, y un KB tiene 1024 bytes. Entonces : 16MB = 16 777 216 bytes 16777216/ 16000 bytes segundo = 1048 segundos de grabacin. 14. Presione el switch 0 y verifique que la seal de voz (almacenada en la memoria externa) se reproduzca. Verifique que el led 0 se encienda. Desconecte el switch 0 para detener la reproduccin. Resultados Efectivamente pudimos escuchar nuestra voz, hablamos de forma natural, fluida y suelta, y el sonido que escuchamos que se grab, era bastante inteligible y entediamos el mensaje que habamos grabado. Fueron nicamente 3 segundos porque la N=24000 y la frec de muestreo era de 8000 muestras por segundo. Cuestionario 1. Qu libreras se agregaron y porque?

csl6713.lib

Es la biblioteca de soporte del chip, es necesaria para que el compila genere el archivo ejecutable especializado nicamente para el chip 6713. Es la BSL Board Support Library (biblioteca de soporte de tarjeta) se agrego para poder controlar al DSP6713 estando dentro de la tarjeta a travs del CCStudio. Contiene la forma digital de conectarse entre la computadora y el DSP atravez de la tarjeta como intermediario.

dsk6713bsl.lib

rts6700.lib

Es una biblioteca con funciones extensivamente usadas por algoritmos en DSPs de proposito general. Es una biblioteca con soporte de datos y funciones algebraicas y trigonomtricas.

2. Capture las ventanas y ajustes realizados en el CCS. La figura 5.4 muestra la ventana del CCS con el programa compilado totalmente.

Figura 5.4 programa compilado correctamente. 3. De que valor se debe seleccionar N de tal forma que se puedan grabar exactamente 10 segundos de voz? Si tenemos 8000 muestras en un segundo, entonces en 80 000 muestras podremos almacenar 10 segundos. 4. Qu capacidad de memoria RAM requiere almacenar 10 segundos de voz? Sere quieren 80 000 mutestras y (80000 muestras )*(2 bytes muestra) = 160 kbytes 5. Qu funcin tiene el archivo: C6713dskinit.h?. Imprima su contenido. Es el archivo cabezera con los prototipos de funcin. Configuraciones como seleccionar la entrada de micrfono, la ganancia de entrada etctera, son obtenidas gracias a este archivo de cabezera.

/*C6713dskinit.h Include file for C6713DSK.C */ #include "C:\CCStudio_v3.1\MyProjects\ZSupport\arch soporte dsk\dsk6713.h" #include "C:\CCStudio_v3.1\MyProjects\ZSupport\arch soporte dsk\dsk6713_aic23.h" #define LEFT 1 #define RIGHT 0 union { Uint32 uint; short channel[2]; } AIC_data; extern far void vectors(); //data structure for union of 32-bit data //into two 16-bit data

//external function

static Uint32 CODECEventId, poll; // This is needed to modify the BSL's data channel McBSP configuration // See the changes below MCBSP_Config AIC23CfgData = { MCBSP_FMKS(SPCR, FREE, NO) | MCBSP_FMKS(SPCR, SOFT, NO) | MCBSP_FMKS(SPCR, FRST, YES) | MCBSP_FMKS(SPCR, GRST, YES) | MCBSP_FMKS(SPCR, XINTM, XRDY) | MCBSP_FMKS(SPCR, XSYNCERR, NO) | MCBSP_FMKS(SPCR, XRST, YES) | MCBSP_FMKS(SPCR, DLB, OFF) | MCBSP_FMKS(SPCR, RJUST, RZF) | MCBSP_FMKS(SPCR, CLKSTP, DISABLE) | MCBSP_FMKS(SPCR, DXENA, OFF) | MCBSP_FMKS(SPCR, RINTM, RRDY) | MCBSP_FMKS(SPCR, RSYNCERR, NO) | MCBSP_FMKS(SPCR, RRST, YES), MCBSP_FMKS(RCR, MCBSP_FMKS(RCR, MCBSP_FMKS(RCR, MCBSP_FMKS(RCR, MCBSP_FMKS(RCR, MCBSP_FMKS(RCR, MCBSP_FMKS(RCR, MCBSP_FMKS(RCR, MCBSP_FMKS(RCR, MCBSP_FMKS(XCR, MCBSP_FMKS(XCR, MCBSP_FMKS(XCR, MCBSP_FMKS(XCR, MCBSP_FMKS(XCR, MCBSP_FMKS(XCR, RPHASE, SINGLE) | RFRLEN2, DEFAULT) | RWDLEN2, DEFAULT) | RCOMPAND, MSB) | RFIG, NO) | RDATDLY, 0BIT) | RFRLEN1, OF(0)) | // This changes to 1 FRAME RWDLEN1, 32BIT) | // This changes to 32 bits per frame RWDREVRS, DISABLE), XPHASE, SINGLE) | XFRLEN2, DEFAULT) | XWDLEN2, DEFAULT) | XCOMPAND, MSB) | XFIG, NO) | XDATDLY, 0BIT) |

MCBSP_FMKS(XCR, XFRLEN1, OF(0)) | // This changes to 1 FRAME MCBSP_FMKS(XCR, XWDLEN1, 32BIT) | // This changes to 32 bits per frame MCBSP_FMKS(XCR, XWDREVRS, DISABLE), MCBSP_FMKS(SRGR, MCBSP_FMKS(SRGR, MCBSP_FMKS(SRGR, MCBSP_FMKS(SRGR, MCBSP_FMKS(SRGR, MCBSP_FMKS(SRGR, MCBSP_FMKS(SRGR, GSYNC, DEFAULT) | CLKSP, DEFAULT) | CLKSM, DEFAULT) | FSGM, DEFAULT) | FPER, DEFAULT) | FWID, DEFAULT) | CLKGDV, DEFAULT),

MCBSP_MCR_DEFAULT, MCBSP_RCER_DEFAULT, MCBSP_XCER_DEFAULT, MCBSP_FMKS(PCR, MCBSP_FMKS(PCR, MCBSP_FMKS(PCR, MCBSP_FMKS(PCR, MCBSP_FMKS(PCR, MCBSP_FMKS(PCR, MCBSP_FMKS(PCR, MCBSP_FMKS(PCR, MCBSP_FMKS(PCR, MCBSP_FMKS(PCR, MCBSP_FMKS(PCR, MCBSP_FMKS(PCR, }; DSK6713_AIC23_Config config = { \ 0x0017, /* Set-Up Reg 0 Left line input channel volume control */ \ /* LRS 0 simultaneous left/right volume: disabled */\ /* LIM 0 left line input mute: disabled */ \ /* XX 00 reserved */ \ /* LIV 10111 left line input volume: 0 dB */ \ \ 0x0017, /* Set-Up Reg 1 Right line input channel volume control */ \ /* RLS 0 simultaneous right/left volume: disabled */\ /* RIM 0 right line input mute: disabled */ \ /* XX 00 reserved */ \ /* RIV 10111 right line input volume: 0 dB */ \ \ 0x01f9, /* Set-Up Reg 2 Left channel headphone volume control */ \ /* LRS 1 simultaneous left/right volume: enabled */ \ /* LZC 1 left channel zero-cross detect: enabled */ \ /* LHV 1111001 left headphone volume: 0 dB */ \ \ 0x01f9, /* Set-Up Reg 3 Right channel headphone volume control */ \ /* RLS 1 simultaneous right/left volume: enabled */ \ XIOEN, SP) | RIOEN, SP) | FSXM, EXTERNAL) FSRM, EXTERNAL) CLKXM, INPUT) | CLKRM, INPUT) | CLKSSTAT, DEFAULT) DXSTAT, DEFAULT) FSXP, ACTIVEHIGH) FSRP, ACTIVEHIGH) CLKXP, FALLING) | CLKRP, RISING)

| | | | | |

1 right channel zero-cross detect: enabled */\ 1111001 right headphone volume: 0 dB */ \ \ 0x0015, /* Set-Up Reg 4 Analog audio path control */ \ /* X 0 reserved */ \ /* STA 00 sidetone attenuation: -6 dB */ \ /* STE 0 sidetone: disabled */ \ /* DAC 1 DAC: selected */ \ /* BYP 0 bypass: off */ \ /* INSEL 0 input select for ADC: line */ \ /* MICM 0 microphone mute: disabled */ \ /* MICB 1 microphone boost: enabled */ \ \ 0x0000, /* Set-Up Reg 5 Digital audio path control */ \ /* XXXXX 00000 reserved */ \ /* DACM 0 DAC soft mute: disabled */ \ /* DEEMP 00 deemphasis control: disabled */ \ /* ADCHP 0 ADC high-pass filter: disabled */ \ \ 0x0000, /* Set-Up Reg 6 Power down control */ \ /* X 0 reserved */ \ /* OFF 0 device power: on (i.e. not off) */ \ /* CLK 0 clock: on */ \ /* OSC 0 oscillator: on */ \ /* OUT 0 outputs: on */ \ /* DAC 0 DAC: on */ \ /* ADC 0 ADC: on */ \ /* MIC 0 microphone: on */ \ /* LINE 0 line input: on */ \ \ 0x0043, /* Set-Up Reg 7 Digital audio interface format */ \ /* XX 00 reserved */ \ /* MS 1 master/slave mode: master */ \ /* LRSWAP 0 DAC left/right swap: disabled */ \ /* LRP 0 DAC lrp: MSB on 1st BCLK */ \ /* IWL 00 input bit length: 16 bit */ \ /* FOR 11 data format: DSP format */ \ \ 0x0081, /* Set-Up Reg 8 Sample rate control */ \ /* X 0 reserved */ \ /* CLKOUT 1 clock output divider: 2 (MCLK/2) */ \ /* CLKIN 0 clock input divider: 2 (MCLK/2) */ \ /* SR,BOSR 00000 sampling rate: ADC 48 kHz DAC 48 kHz */ \ /* USB/N 1 clock mode select (USB/normal): USB */ \ \ 0x0001 /* Set-Up Reg 9 Digital interface activation */ \ /* XX..X 00000000 reserved */ \ /* ACT 1 active */ \ }; DSK6713_AIC23_CodecHandle hAIC23_handle;

/* RZC /* RHV

void c6713_dsk_init(); void comm_poll(); void comm_intr(); void output_sample(int); void output_left_sample(short); void output_right_sample(short); Uint32 input_sample(); short input_left_sample(); short input_right_sample();

Conclusiones

Bibliografa [1] Code Composer Studio IDE Getting Started Guide, User's Guide. SPRU509f. [2] Tratamiento digital de seales. Proakis. Manolakis FastRTS Library Programmers Reference

S-ar putea să vă placă și