Informe - Escuela de Ingeniería Eléctrica

Anuncio
Universidad de Costa Rica
Facultad de Ingeniería
Escuela de Ingeniería Eléctrica
IE – 0502 Proyecto Eléctrico
Digitalizador de señales de banda base compleja
utilizando el TMS320VC5416 DSK
Por:
Rodrigo Chacón Quesada
Ciudad Universitaria Rodrigo Facio
Julio del 2008
Digitalizador de señales de banda base compleja
utilizando el TMS320VC5416 DSK
Por:
Rodrigo Chacón Quesada
Sometido a la Escuela de Ingeniería Eléctrica
de la Facultad de Ingeniería
de la Universidad de Costa Rica
como requisito parcial para optar por el grado de:
BACHILLER EN INGENIERÍA ELÉCTRICA
Aprobado por el Tribunal:
_________________________________
Ing. M.Sc. Claudio Umaña Valverde
Profesor Guía
_________________________________
Ing. M.Sc. Francisco Rojas Fonseca
Profesor lector
_________________________________
Ing. Dr. Jorge A. Romero Chacón
Profesor lector
ii
DEDICATORIA
A mis padres, mi abuelita Marielos y mis hermanas Karen y Tatiana, que me
brindaron su apoyo y amor incondicionalmente durante todos estos años. Gracias por todo
su esfuerzo, ya que sin ustedes jamás habría podido llegar hasta aquí.
A mis abuelos Manuel y Teresa, porque sus palabras y enseñanzas son y seguirán
siendo una fuente de inspiración para mí.
A mi novia Karla, que ilumina mi vida con su presencia. Gracias por su amor y
apoyo incondicional, los cuales me ayudan a seguir adelante.
iii
RECONOCIMIENTOS
A Dios, quien me ha guiado a lo largo de los años y ha quien le debo todo en la
vida.
A mi familia, porque estuvieron siempre a mi lado y además me brindaron su
apoyo. Gracias por todo.
A los profesores Claudio Umaña, Francisco Rojas y Jorge Romero, por sus consejos
durante la realización de este proyecto. De manera muy especial a los profesores Claudio y
Francisco, por su interés y dedicación, les agradezco enormemente el haberse involucrado
en cada parte del proyecto, brindándome su apoyo y dirección.
Gracias también a mis compañeros Fernando, Esteban, Felipe, Teodoro y Rodrigo,
por todo el apoyo brindado a lo largo de la carrera.
iv
INDICE GENERAL
INDICE DE FIGURAS ................................................................................ viii
INDICE DE TABLAS ...................................................................................... x
NOMENCLATURA ........................................................................................xi
RESUMEN .....................................................................................................xiv
CAPÍTULO 1: Introducción ........................................................................... 1
1.1
Objetivos ................................................................................................................. 2
1.1.1 Objetivo general .................................................................................................. 2
1.1.2 Objetivos específicos .......................................................................................... 2
1.2
Metodología ............................................................................................................ 3
CAPÍTULO 2: Desarrollo teórico................................................................... 4
2.1
2.2
2.3
2.4
2.5
2.6
Equivalente en banda base de señales pasa banda .................................................. 4
Teorema del muestreo............................................................................................. 8
Cuantización ........................................................................................................... 9
Medición de la impedancia de entrada de un equipo ............................................ 13
Puerto Serial Buferizado multicanal (McBSP)12 .................................................. 15
Controlador de acceso directo a memoria12 .......................................................... 17
CAPÍTULO 3: Simulaciones ......................................................................... 21
CAPÍTULO 4: Acople, muestreo y cuantización de la señal PAM ........... 31
4.1 Interfaz entre el generador de señales y la tarjeta de evaluación .................................... 31
4.1.1 Convertidor analógico a digital AD7450 ............................................................. 31
4.1.2 Clock Mode Register (CLKMD) ......................................................................... 38
4.2 Sincronización del AD7450 con el McBSP .................................................................... 40
4.3 Configuración del McBSP .............................................................................................. 46
4.3.1 Serial Port Control Register 1 .............................................................................. 49
4.3.2 Serial Port Control Register 2 .............................................................................. 49
4.3.3 Pin Control Register ............................................................................................ 50
4.3.4 Receive Control Register 1 .................................................................................. 50
4.3.5 Receive Control Register 2 .................................................................................. 50
4.3.6 Transmit Control Register 1 ................................................................................ 50
4.3.7 Transmit Control Register 2 ................................................................................ 51
4.3.8 Sample Rate Generator Register 1 ....................................................................... 51
4.3.9 Sample Rate Generator Register 2 ....................................................................... 51
4.3.10 Registros Multicanal .......................................................................................... 51
4.4 Configuración del DMA .................................................................................................. 53
4.4.1 Transfer Mode Control Register .......................................................................... 55
v
4.4.2 DMA Sync Select and Frame Count Register ..................................................... 55
4.4.3 Source Address Register ...................................................................................... 55
4.4.4 Destination Address Register .............................................................................. 56
4.4.5 Element Count Register ....................................................................................... 56
4.4.6 Registros globales ................................................................................................ 56
Capítulo 5: Resultados ................................................................................... 57
5.1 Código en CCS para el digitalizador de señales analógicas con el AD7450................ 57
5.1.1 Declaraciones y encabezado ................................................................................ 57
5.1.2 Definición de datos globales ................................................................................ 57
5.1.3 Configuración del DMA ....................................................................................... 60
5.1.4 Configuración del McBSP ................................................................................... 61
5.1.5 Función initMcbsp ............................................................................................... 61
5.1.6 Función initDMA................................................................................................. 61
5.1.7 Función initIrq ..................................................................................................... 62
5.1.8 Función main ....................................................................................................... 62
5.1.9 Función DMA_INT ............................................................................................. 63
5.2 Resultados en la interfaz TMS320VC5416 – AD7450 .................................................. 66
5.2.1 Resultados de la interfaz para el convertidor analógico a digital AD7450 .......... 66
5.2.2 Resultados con el reloj para el manejo del AD7450............................................ 69
CAPÍTULO 6: Conclusiones y recomendaciones ....................................... 75
6.1 Conclusiones ................................................................................................................... 75
6.2 Recomendaciones ........................................................................................................... 77
BIBLIOGRAFÍA ............................................................................................ 78
APÉNDICES ................................................................................................... 80
Apéndice A: Código en Matlab® para la simulación del proceso de muestreo. .................. 80
Apéndice B: Código en Matlab® para la simulación del proceso de cuantización. ............. 81
Apéndice C: Código en CCS para la implementación del digitalizador de señales analógicas
utilizando el AD7450. ........................................................................................................... 82
Apéndice D: Tablas .............................................................................................................. 89
Apéndice E: Configuración del McBSP ............................................................................... 97
E.1 Serial Port Control Register 1 ................................................................................ 97
E.2 Serial Port Control Register 2 .............................................................................. 101
E.3 Pin Control Register ............................................................................................. 104
E.4 Receive Control Register 1 .................................................................................. 108
E.5 Receive Control Register 2 .................................................................................. 110
E.6 Transmit Control Register 1 ................................................................................. 112
E.7 Transmit Control Register 2 ................................................................................. 113
E.8 Sample Rate Generator Register 1 ....................................................................... 114
E.9 Sample Rate Generator Register 2 ....................................................................... 115
Apéndice F: Configuración del DMA ................................................................................ 120
vi
F.1 Transfer Mode Control Register ........................................................................... 121
F.2 DMA Sync Select and Frame Count Register ...................................................... 124
F.3 Source Address Register....................................................................................... 126
F.4 Destination Address Register ............................................................................... 126
F.5 Element Count Register ........................................................................................ 127
F.6 Registros globales ................................................................................................. 128
vii
INDICE DE FIGURAS
Figura 2.1 Z(f) y Xl(f) correspondientes a x(t). .................................................. 7
Figura 2.2 Esquema de conexión para la medición de la impedancia de entrada
de un equipo. .................................................................................................... 14
Figura 2.3 Diagrama de bloques del McBSP.12 ................................................ 15
Tomado de ........................................................................................................ 15
Figura 2.4 Sub-direccionamiento de registros.12 .............................................. 18
Tomado de ........................................................................................................ 18
Figura 3.1 Ejemplo de una señal analógica de entrada. ................................... 22
Figura 3.2 Señal analógica muestreada a una tasa de 1kHz. ........................... 23
Figura 3.3 Señal analógica muestreada a una tasa de 9kHz. ........................... 24
Figura 3.4 Espectro de densidad de potencia de la señal original. .................. 26
Figura 3.5 Espectro de densidad de potencia de la señal sub-muestreada. ...... 27
Figura 3.6 Espectro de densidad de potencia de la señal sobre-muestreada.... 28
Figura 3.7 Señal resultante del proceso de cuantización con una resolución de
tres bits. ............................................................................................................ 29
Figura 3.8 Señal resultante del proceso de cuantización con una resolución de
seis bits. ............................................................................................................ 30
Figura 4.1 Diagrama de pines del convertidor AD7450.1 ................................ 32
Figura 4.2 Características de transferencia ideales para el AD7450.1.............. 33
Figura 4.3 Aplicando una entrada bipolar individual a la entrada del AD7450.1
.......................................................................................................................... 35
Figura 4.4 Interfaz propuesta. .......................................................................... 36
Figura 4.5 Simulación para el circuito propuesto. ........................................... 37
Figura 4.6 Clock Mode Register (CLKMD).13 ................................................ 38
Figura 4.7 Esquema de conexión AD7450-TMS320VC5416.1 ....................... 40
Figura 4.8 Diagrama de temporización de la interfaz serial.1 .......................... 43
viii
Figura 4.9 Temporización de la interfaz serial.1 .............................................. 44
Figura 4.10 Esquema resumen de la configuración del McBSP. ..................... 47
Figura 4.11 Estructura de configuración para el DMA.11 ................................. 54
Figura 5.1 Errores de compilación en líneas de los registros DMSRC y
DMDST. ............................................................................................................ 60
Figura 5.2 Configuración de los registros PMST y CLKMD. ......................... 64
Figura 5.3 Rutina de atención a interrupciones................................................ 65
Figura 5.4 Resultado de la compilación del proyecto. ..................................... 65
Figura 5.5 Señal de entrada bipolar entrante a la interfaz................................ 67
Figura 5.6 Señal unipolar de salida de la interfaz. ........................................... 68
Figura 5.7 Reloj obtenido en pin DC_BFSX0. ................................................ 70
Figura 5.8 Reloj obtenido en el pin DC_BCLKX0.......................................... 71
Figura 5.9 Esquemático de conexión entre el McBSP0 y el puerto P2.9 ......... 72
Figura 5.10 Diagrama de pines y diagrama lógico del SN74CBTD3384.14 .... 73
Figura E.1 Registro de control para el puerto serial 1 (SPCR1).12................... 97
Figura E.2 Registro de control para el puerto serial 2 (SPCR2).12 ................ 101
Figura E.3 Registro de control de pines (PCR).12 .......................................... 104
Figura E.4 Registro de control para la recepción 1 (RCR1).12 ...................... 108
Figura E.5 Registro de control para la recepción 2 (RCR2).12 ...................... 110
Figura E.6 Registro de control para la transmisión 1 (XCR1).12 ................... 112
Figura E.7 Registro de control para la transmisión 2 (XCR2).12 ................... 113
Figura E.8 Registro del generador de la tasa de muestreo 1 (SRGR1).12 ...... 114
Figura E.9 Registro del generador de la tasa de muestreo 2 (SRGR2).12 ...... 115
Figura F.1 Registro de control para el modo de transferencia (DMMCRn).12
........................................................................................................................ 121
Figura F.2 Registro para el conteo de tramas y selección del evento de
sincronización (DMSFCn).12 .......................................................................... 124
ix
INDICE DE TABLAS
Tabla 4.1 Especificaciones generales para la configuración del DMA. ........... 54
Tabla D.1 Registros del McBSP.12 ................................................................... 89
Tabla D.2 Registros del McBSP (continuación).12 .......................................... 90
Tabla D.3 Interrupciones al CPU y sincronización de eventos con el DMA del
McBSP.12 .......................................................................................................... 90
Tabla D.4 Registros del DMA.12 ...................................................................... 91
Tabla D.5 Registros del DMA (continuación).12 ............................................. 92
Tabla D.6 Mapeo de memoria para el DMA de la serie ´5410.12 ..................... 93
Tabla D.7 Mapeo de memoria para el DMA de la serie ´5410 (continuación).12
.......................................................................................................................... 94
Tabla D.8 Opciones para los eventos de sincronización de DMA en el ´5410.12
.......................................................................................................................... 95
Tabla D.9 Conector para expansión con periféricos, P2.9 ............................... 96
x
NOMENCLATURA
ABU
Autobuffering
DMCTRn
Element Count Register n
AD7450
ADC de 12 bits y frecuencia de
DMDSTn
Destination Address Register n
muestreo máxima de 1MSPS
DMMCRn
Transfer Mode Control Register
ADC
Analog to Digital Converter
DMPREC
DMA
CLKG
Clock Generator
CCS
Code Composer Studio
DMSA
Registro de direcciones
CLKGDV
Sample Rate Generator Clock
DMSDI
Registro de acceso con
Channel
Priority
and
Enable Control Register
Divider
autoincremento
CLKG
Clock Generator
DMSDN
Registro de acceso sin
CLKMD
Clock Mode Register
CLKMODE
Clock Mode
CLKR
Receive Clock pin
CLKRM
Receiver Clock Mode
DMSRCn
Source Address Register n
CLKRP
Receive Clock Polarity
DR
Data Receive pin
CLKS
External Clock Source pin
DRR
Data Receive Register
CLKS
External Clock Source pin
DSK
Development Starter Kit
CLKSM
McBSP Sample Rate Generator
DSP
Digital Signal Processor
CLKSP
External Clock Source Polarity
DSYN
DMA Sync Event
Clock Edge Select
DX
Data Transmit pin
CLKSTP
Clock Stop
DXENA
Data Transmit pin Enable
CLKX
Transmit Clock pin
DXR
Data Transmit Register
CLKXM
Transmitter Clock Mode
FPER
Frame Period
CLKXP
Transmit Clock Polarity
FRST
Frame-Sync Generator Reset
CPU
Central Processing Unit
FSG
Frame Synchronizations
CS
Chip Select
DARAM
Dual Access Random Access
autoincremento
DMSFCn
DMA Sync Event and Frame
Count Register n
Generator
FSGM
Sample Rate Generator
Memory
Transmit
DC
Corriente directa
Frame-Synchronization Mode
DDR
Data Receive Register
DLB
Digital Loop Back Mode
DMA
Direct Memory Access
FSR
Frame Synchronization Receive
pin
xi
FSRR
FSRM
FSRP
FSX
FSXM
Frame Synchronization Receive
RCR1
Receive Control Register 1
Register
RCR2
Receive Control Register 2
RDATDLY
Receive Data Delay
Receive Frame Synchronization
RFIG
Receive Frame Ignore
Mode
RFRLEN1
Receive Frame Length 1
Receive Frame-Synchronization
RFRLEN2
Receive Frame Length 2
Polarity
RFULL
Receive Shift Register Full
Frame Synchronization
RINTM
Receive Interrupt Mode
Transmit pin
RIOEN
Receive pins for general
Transmit Frame
purpose I/O pins Enable
Synchronization Mode
FSXP
RJUST
Transmit
Receive Data Justification and
Sign Extension
Frame-Synchronization Polarity
RMCM
Receive Multichannel Selection
FWID
Frame Width
GND
Ground
RPHASE
Receive Phases
GRST
Sample-Rate Generator Reset
RRDY
Receiver Ready
GSYNC
Sample Rate Generator Clock
RRST
Receiver Reset
Synchronization
RSR
Receive Shift Register
Multichannel Buffered Serial
RSYNCERR
Receive Synchronization Error
Port
RWDLEN1
Receive Word Length 1
MCR1
Multichannel Control Register 1
RWDLEN2
Receive Word Length 2
MCR2
Multichannel Control Register 2
SDATA
Serial Data
MSB
Most Significant Bit
SCLK
Serial Clock
Mse
Error cuadrático medio
SIND
DMA Source Address Transfer
PCM
Pulse Code Modulation
PCR
Pin Control Register
PLL
Phase Locked Loop
PLLMUL
PLL Multiplier
SPCR1
Serial Port Control Register 1
PLLDIV
PLL Divider
SPCR2
Serial Port Control Register 2
PLLCOUNT
PLL Count
SRGR1
Sample-Rate Generator
PLLON/OF
PLL ON-OFF
PMST
Processor Mode Status Register
RBR
Receive Buffer Register
McBSP
Enable
Index Mode Bit
SQNR
Signal to Noise Quantization
Ratio
Register 1
SRGR2
Sample-Rate Generator
Register 2
TDM
xii
Time Division Multiplexing
X
Condición no importa
XCOMPAND
Transmit Companding
XIOEN
Transmit
pins
for
general
purpose I/O pins Enable
Mode
XMCM
Transmit Multichannel
XCR1
Transmit Control Register 1
Selection Enable
XCR2
Transmit Control Register 2
XPHASE
Transmit Phases
XDATDLY
Transmit Data Delay
XRDY
Transmitter Ready
XEMPTY
Transmit Shift Register Empty
XRST
Transmitter Reset
XFIG
Transmit Frame Ignore
XSR
Transmit Shift Register
XFRLEN1
Transmit Frame Length 1
XSYNCERR
Transmit Synchronization Error
XFRLEN2
Transmit Frame Length 2
XWDLEN1
Transmit Word Length 1
XINTM
Transmit Interrupt Mode
XWDLEN2
Transmit Word Length 2
xiii
RESUMEN
El objetivo general de este proyecto fue realizar una descripción de todos los
elementos involucrados en el diseño de un digitalizador de señales analógicas en banda
base. Para el desarrollo del mismo se elaboró en primera instancia un marco teórico con los
temas de señales banda base, muestreo, cuantización y los módulos más importantes a
configurar dentro del módulo de evaluación a utilizar para la implementación del
digitalizador, el puerto serial buferizado (McBSP) y el controlador de DMA.
Posteriormente se simularon los procesos de muestreo y cuantización utilizando
MATLAB®, para de esta manera mostrar los efectos que tienen la selección de la tasa de
muestreo y la resolución de la aproximación en la cuantización durante el proceso de
digitalización de una señal analógica. Además se desarrolló el código en CCS (programa
utilizado para la programación del módulo de evaluación TMS320VC5416 DSK) necesario
para la implementación del digitalizador de señales banda base tomadas del equipo
generador de señales Agilent E4433B, además de describir cada una de las etapas de
configuración relacionadas con el mismo.
Se recomienda para futuros proyectos relacionados con este tema y/o con la
continuación directa de este, primeramente la realización de una investigación acerca del
módulo de evaluación, ya que como se pudo corroborar en este proyecto existen situaciones
que no se encuentran descritas correctamente en la documentación de la misma y que están
principalmente relacionadas con el manejo de periféricos.
xiv
CAPÍTULO 1: Introducción
Actualmente las comunicaciones digitales tienen gran importancia en nuestro
entorno, ya no son los sistemas de comunicaciones del futuro, si no los de hoy en día.
En muchas áreas donde la modulación analógica era la regla, las modulaciones
digitales se han ido abriendo espacio dada las ventajas que esta última presenta,
permitiendo simplificaciones en la arquitectura de la sección analógica de un sistema de
comunicaciones además de eliminar una serie de problemáticas que se presentan en el
procesamiento de la señal en el ámbito analógico.
Por estas y otras razones el tema de las comunicaciones digitales es de gran interés
hoy en día y es el tema base del presente proyecto.
Dentro de un esquema funcional básico de un sistema de comunicaciones digitales
el problema a resolver en este proyecto se encuentra dentro del bloque del demodulador
digital, y específicamente serán los temas de acople y digitalización los que abarque
primordialmente este trabajo.
Las tareas antes mencionadas se realizarán con señales en banda base compleja, y
abarcan principalmente el diseño e implementación de una etapa de muestreo y una etapa
de cuantización.
Al concluir el trabajo se espera que la implementación básica del demodulador
digital funcione como herramienta didáctica en otros cursos, y que además sirva para
despertar el interés en el tema de las comunicaciones digitales en otros estudiantes.
1
2
1.1
Objetivos
1.1.1
Objetivo general
Diseñar una etapa de digitalización para una señal PAM tomada del generador de
señales Agilent E4433B.
1.1.2
Objetivos específicos
(1) Diseñar una herramienta de demostración para el curso de laboratorio de
procesamiento digital de señales IE-1103.
(2) Diseñar una herramienta para la utilización del demodulador en el curso de
laboratorio eléctrico IV IE-1008.
(3) Implementar una herramienta para el kit de desarrollo del “TMS320VC5416
DSK”.
(4) Involucrar el uso de nuevas herramientas que incluyen el generador de señales
RF Agilent E4433B y el analizador de espectros Agilent E4402B en el desarrollo
del proyecto.
3
1.2 Metodología
Para la elaboración del proyecto se realizaron de manera paralela varias actividades
necesarias para el avance y finalización del mismo.
Estas actividades incluyeron:
Una investigación bibliográfica para reforzar los conocimientos del tema de
modulación digital y la elaboración del marco teórico correspondiente.
También se realizaron sesiones de familiarización con el uso de los instrumentos y
equipo necesarios para el desarrollo de los objetivos, como lo son el generador de señales,
analizador de espectros y la tarjeta de procesamiento digital de señales, entre otros.
Se realizó además trabajo de laboratorio, esto incluyó el modelado en MATLAB® del
proyecto así como su implementación haciendo uso de los recursos antes mencionados.
Asimismo forman parte importante de la metodología, reuniones con los profesores
guías del proyecto, sesiones para las aclaración de dudas y exposición de problemas
importantes que surgieron durante la elaboración del mismo.
CAPÍTULO 2: Desarrollo teórico
2.1
Equivalente en banda base de señales pasa banda
Las señales pasa banda (o señales de banda estrecha como también se les conoce)
son una clase de señales frecuentemente encontradas en el análisis de los sistemas de
comunicaciones. Las señales moduladas (ampliamente utilizadas para la transmisión de
información), son ejemplos de señales pasa banda. Definiciones de señal pasa banda y señal
pasa bajos (señal en banda base) se presentan a continuación:
Una señal pasa banda es una señal para la cual todas las componentes de
frecuencia están localizadas en un vecindario de una frecuencia central f o (y, por
supuesto, - f o ). En otras palabras, para una señal pasa banda X ( f ) º 0 para
f ± f o > W , donde W << f 0 . Una señal pasa bajos es una señal para la cual los
componentes de frecuencia están localizados alrededor de la frecuencia cero; esto es, para
f > W , se tiene X ( f ) º 0 .3
Más claramente, una señal pasa banda es una señal cuya representación en el
dominio de la frecuencia nunca es cero para frecuencias en un usualmente pequeño
vecindario de alguna alta frecuencia f o .7
Además, las señales que satisfacen la condición de que su ancho de banda es
mucho menor que su frecuencia de portadora son llamadas señales pasa banda de banda
estrecha.8
4
5
El procesamiento de la señal en baja frecuencia es más conveniente
matemáticamente hablando, además reduce los costos económicos de los equipos que
realizan este procesamiento. Es por las razones expuestas anteriormente que es deseable
reducir todas las señales pasa banda a su equivalente en pasa bajos, sin que lo anterior
signifique una pérdida en la generalidad.
En la sección 2.5 de [7] y específicamente mediante las ecuaciones 2.5.1 a 2.5.18 de
dicha sección, se expone de una manera amplia el desarrollo matemático que demuestra que
es posible obtener el equivalente en pasa bajos de una señal pasa banda anteriormente
mencionado. El presente documento se limitará a exponer las ecuaciones necesarias para la
obtención de dicho equivalente, comenzando con un glosario de los términos utilizados en
las expresiones matemáticas:
x(t ) : Señal pasa banda.
z (t ) : Señal analítica correspondiente a x(t ) , o pre envolvente de x(t ) .
xl (t ) : Representación en pasa bajos de x(t ) , en general es una señal compleja.
xc (t ) y x s (t ) : Llamadas componentes en fase y en cuadratura de la señal pasa
banda x(t ) , ambas señales pasa bajos.
6
Teniendo en cuenta las definiciones anteriores es posible mostrar a continuación los
pasos necesarios para obtener la representación en paso bajos de la señal pasa banda x(t ) :
-
Primero se debe calcular z (t ) , su parte real es igual a x(t ) y su parte imaginaria es
la transformada de Hilbert de x(t ) , es decir
z (t ) = x(t ) + j
-
1
p
¥
x(t )
ò t - t dt
(2.1-1)
-¥
Luego se obtiene xl (t ) moviendo Z ( f ) (espectro de z (t ) ) una cantidad f o hacia la
izquierda, lo anterior es el equivalente a realizar lo siguiente:
xl (t ) = z (t )e - j 2pf ot
-
(2.1-2)
xc (t ) y x s (t ) son la parte real y la parte imaginaria de la expresión anterior, lo que
significa
-
xc (t ) = Re[xl (t )]
(2.1-3)
x s (t ) = Im[xl (t )]
(2.1-4)
x(t ) puede ser entonces representada como
x(t ) = xc (t ) cos(2pf o t ) - x s (t ) sin( 2pf o t )
(2.1-5)
7
-
La relación básica entre los espectros de la señal real pasa banda x(t ) y la señal
pasa bajos equivalente xl (t ) es
X(f ) =
[
1
X l ( f - f o ) + X l* (- f - f o )
2
]
(2.1-6)
La expresión anterior se ilustra mejor si se observa la siguiente figura:
Figura 2.1 Z(f) y Xl(f) correspondientes a x(t).7
Tomado de “Communication Systems Engineering”, 2001, página 53.
8
2.2
Teorema del muestreo
El teorema de muestreo de Nyquist-Shannon, también conocido como teorema de
muestreo de Whittaker-Nyquist-Kotelnikov-Shannon, criterio de Nyquist o teorema de
Nyquist; es un teorema de especial interés en telecomunicaciones. Fue formulado por Harry
Nyquist en forma de conjetura en 1928 y demostrado formalmente por Claude E. Shannon
en 1949.15
Mediante este teorema se determinan las condiciones que son necesarias para
muestrear una señal analógica sin perder información en el proceso . Es decir, establece la
condición para la cual una señal analógica puede ser totalmente reconstruida a partir de un
conjunto de muestras discretas de ella misma.
El teorema se puede enunciar como:
Una señal de banda limitada de valor real sin componentes espectrales por encima
de una frecuencia de B Hz, se determina en forma unívoca por sus valores equidistantes en
intervalos no mayores que 1/(2B) segundos.10
Esto quiere decir que toda la información de la señal analógica se encuentra en la
señal muestreada, si se respeta la condición de que la frecuencia de muestro sea mayor a
dos veces el ancho de banda de la señal muestreada, en cuyo caso esta frecuencia de
muestreo es conocida como frecuencia de Nyquist. Aunque la condición anterior es
suficiente debe hacerse algo flexible en la práctica, por lo que se acostumbra a tomar una
frecuencia de muestreo ocho veces mayor al ancho de banda de la señal muestreada.
9
La demostración del teorema del muestreo se puede realizar a través de la propiedad
de convolución en frecuencia de la transformada de Fourier y se explica ampliamente en
[6], específicamente en la sección 4.1.1 en sus ecuaciones 4.1 a 4.9.
Por último, si no se respeta la condición del teorema del muestreo entonces no será
posible recuperar la señal analógica original a partir de la señal muestreada debido al efecto
de aliasing, que consiste en el traslape de los espectros repetidos y desplazados en
frecuencia de la señal original, obtenidos como resultado del proceso de muestreo.
2.3
Cuantización
Una señal analógica no puede ser representada por una señal digital debido a que el
número de bits necesarios para tal representación no es finito. Esto quiere decir que para el
procesamiento digital de una señal analógica es necesario primero reducir la cantidad de
bits necesarios para este fin, en otras palabras, la señal debe ser cuantizada a un número
finito de valores.
El proceso de cuantización entonces, reduce el número de bits necesarios para la
representación digital de la señal analógica a un número finito, pero al mismo tiempo
introduce una distorsión, pues se pierde información de la amplitud de la señal de entrada
en el proceso, información que no podrá ser recuperada.
10
La función del cuantizador (dispositivo que lleva a cabo el proceso de cuantización)
será por tanto, mapear las amplitudes de la señal entrante hacia el nivel permitido más
cercano. Matemáticamente un cuantizador es un dispositivo que realiza el mapeo:
xˆ = Q( x)
(2.3-1)
Donde x̂ es la salida del cuantizador, y Q(×) es una función que mapea los valores
(-¥, ¥) al valor más cercano en el grupo C = {y1 , y 2 ,..., y N } , es decir Q : (-¥, ¥) ® C .6
Al término C = {y1 , y 2 ,..., y N } en el párrafo anterior se le conoce con el nombre de
codebook, el cual está conformado por el conjunto de todos los valores de amplitud de la
salida permitidos por el cuantizador, mientras que a todos estos valores permitidos de
amplitud yi se les conoce individualmente con el nombre de codewords.
Otro término comúnmente utilizado cuando se habla de cuantizadores es la palabra
celda Ri. Este término se refiere a un conjunto de amplitudes de la señal de entrada que son
mapeadas hacia yi. Las celdas que tienen la característica de ser acotadas se conocen con el
nombre de celdas granulares, si en cambio la celda no es acotada se le llama entonces celda
sobrecargada.
Los esquemas de cuantización se pueden clasificar de manera general en dos tipos:
cuantización vectorial (se cuantizan grupos de amplitudes de la señal entrante de manera
conjunta) y cuantización escalar (cada amplitud entrante es cuantizada individualmente).
Los cuantizadores que llevan a cabo el proceso de cuantización dentro del esquema de
cuantización escalar se pueden clasificar además en cuantizadores uniformes (donde todas
11
las yi se encuentran uniformemente distribuidas) y cuantizadores no uniformes (donde todas
las yi no se encuentran uniformemente distribuidas).
Para calcular el desempeño de un cuantizador (cuanta información se pierde en el
proceso de cuantización) se utilizan comúnmente dos medidas: el error cuadrático medio
mse (por sus siglas en inglés) y el SQNR (signal-to-quantization-noise ratio), que pueden
ser calculados únicamente si se conoce la función densidad de probabilidad p x (x) de las
amplitudes entrantes al cuantizador.
El mse es simplemente una medida del promedio del error e( x) = xˆ - x (con x
como la señal de entrada al cuantizador y x̂ como su salida) al cuadrado. Dado que lo que
se pretende es tener un cuantizador que presente el menor error posible, un cuantizador con
un mse pequeño es considerado un buen cuantizador. La expresión matemática para el
cálculo del mse es la siguiente:
N
mse = å ò ( x - xˆ i ) 2 p x ( x)dx
i =1
Ri
(2.3-2)
Un amplio desarrollo de la ecuación anterior se muestra en la sección 4.2.2 de [6]
ecuaciones (4.17) a (4.25).
El SQNR se refiere por su parte a la relación entre la potencia de la señal de entrada
y la potencia del error (o ruido) introducido por el cuantizador.5
12
La expresión matemática para el SQNR es la siguiente:
¥
SQNR =
ò (x - x
m
) 2 p x ( x)dx
-¥
(2.3-3)
mse
Donde xm es la media de x. Al ser una relación de potencias, la expresión anterior
también puede escribirse como:
SQNRdB = 10 log10
[ ]
E X2
mse
(2.3-4)
De nuevo, debido a que lo que se quiere es un cuantizador que aporte la menor
distorsión posible (y dado que mse se encuentra en el denominador de la expresión anterior)
un SQNR alto caracteriza a un buen cuantizador.
Diseñar un cuantizador es equivalente a especificar sus codewords y1 , y 2 ,..., y N ; es
decir los N valores que el cuantizador permite a su salida y también especificar sus celdas
R1 , R2 ,..., R N , en otras palabras, los valores de la entrada x que son mapeados a y1, los
valores de la entrada x que son mapeados a y2, y así sucesivamente.6 El diseño de un buen
cuantizador es por tanto, la especificación de las codewords y las celdas que producen un
mse mínimo.
Por último, al codeword que minimiza el mse dentro de una celda se le llama
centroide. El centroide yi es el valor promedio de todos los valores en la celda Ri.
13
Matemáticamente el centroide de una celda se puede expresar como:
yi = E [x x e Ri ]
yi
ò
=
ò
Ri
Ri
2.4
(2.3-5)
xp x ( x)dx
(2.3-6)
p x ( x)dx
Medición de la impedancia de entrada de un equipo
En algunos casos prácticos es deseable conocer la impedancia de entrada de cierto
equipo, y lo más probable es que esta información no se tenga a mano.
En esta sección se resume un método para la medición de dicha impedancia y es
expuesto en forma amplia en [4].
El método se vale del hecho de que cuando dos resistencias del mismo valor están
conectadas en serie poseen una caída de tensión idéntica en cada una de ellas e igual a la
mitad del voltaje aplicado a la serie de estas resistencias.
14
El esquema de conexión para la medición de la impedancia de entrada de un equipo
se muestra en la siguiente figura:
Figura 2.2 Esquema de conexión para la medición de la impedancia de entrada de un
equipo.4
Tomado de http://proton.ucting.udg.mx/materias/mtzsilva/practica1/index.htm
Como se puede observar, conociendo el voltaje aplicado con ayuda del generador y
monitoreado por el canal 1 de un osciloscopio, se ajusta la resistencia variable R hasta que
en el canal 2, también de osciloscopio, se observe una señal cuya amplitud sea exactamente
la mitad de la del voltaje aplicado. Luego se procede a medir el valor al cual se ajustó la
resistencia variable R para determinar de este modo el valor de la impedancia de entrada
del equipo.
Se debe tener en cuenta que en los circuitos de corriente alterna la impedancia no es
enteramente resistiva, los elementos activos contribuyen también a dicha impedancia, por
15
lo que al medir la impedancia de entrada del equipo del modo descrito anteriormente esta
podría cambiar con la frecuencia.
2.5
Puerto Serial Buferizado multicanal (McBSP)12
El puerto serial buferizado multicanal es, como su nombre lo dice, un puerto que
permite una interfaz directa hacia otros dispositivos del DSP, codecs, convertidores
analógico a digital y otros dispositivos en el sistema.
El McBSP consiste básicamente de una ruta de datos y una ruta de control
conectadas a dispositivos externos mediante siete pines como se muestra en la siguiente
figura:
Figura 2.3 Diagrama de bloques del McBSP.12
Tomado de “TMS320C54x DSP Reference Set Volume 5: Enhanced Peripherals”, 1999,
página 2-3.
16
La interfaz para el intercambio de datos de los dispositivos externos con el McBSP
son el pin DX para la transmisión, y el pin DR para la recepción. La información de control
(reloj y sincronización de tramas) viaja a través de los pines CLKX, CLKR, FSX, FSR. El
DSP (´54x) se comunica con el puerto serial buferizado a través de los registros de control
(16 bits) utilizando como interfaz el bus de periféricos interno.
El CPU o el controlador de DMA leen los datos recibidos desde los registros DDR
(2 en total) y escriben los datos a ser transmitidos en los registros DXR (2 en total), los
datos escritos en estos registros son enviados a DX a través de los registros XSR (2 en total).
De forma similar, los datos recibidos por el pin DR son pasados al RSR (2 en total) y luego
escritos en el RBR (2 en total). RBR es luego copiado a DDR, el cual puede ser luego leído
por el CPU o el controlador de DMA. Esto permite la transferencia simultánea interna y
externa de datos.
Los registros DDR2, DXR2, XSR2, RSR2 y RBR2 no son utilizados si la longitud de
la palabra para recepción y transmisión es de 8, 12 o 16 bits.
Los registros restantes accesibles al CPU se utilizan para la configuración del
mecanismo de control del McBSP. Estos registros son enumerados en la Tabla 2-2, McBSP
Registers, en la página 2-5 de [12] (incluida en los apéndices, tablas D.1 y D.2).
El bloque de control consiste en la generación del reloj interno, generación de
señales para la sincronización de tramas y su control, además de la selección multicanal.
Este bloque de control envía avisos de eventos importantes al CPU o al controlador de
17
DMA a través de dos señales de interrupción y cuatro señales de eventos mostradas en la
Tabla 2-3 página 2-6 de [12] (incluida en los apéndices, tabla D.3).
2.6
Controlador de acceso directo a memoria12
La esencia del DMA es la transferencia de datos entre regiones de memoria sin la
intervención del CPU. El movimiento de los datos se puede dar entre regiones de memoria
interna, periféricos internos o dispositivos externos y de manera independiente al CPU.
En el caso del TMS320VC5416 DSK el DMA tiene seis canales programables
independientes lo cual permite seis contextos diferentes para la operación del DMA.
La configuración y operación del DMA, al igual que en el caso del McBSP, se
encuentra ligada a registros de control, estos registros se encuentran mapeados en memoria
utilizando un esquema de sub-direccionamiento que consiste en la multiplexación de un
conjunto de registros a una única posición en el mapa de memoria. Un sub-conjunto de
pilas de registros es utilizado para controlar el multiplexor de modo que se puedan escribir
o leer datos de los registros que se encuentran sub-direccionados. Lo que se logra con este
esquema de sub-direccionamiento es mapear un gran número de registros utilizando un
pequeño espacio en la memoria.
18
El esquema de sub-direccionamiento utilizado en el TMS320VC5416 DSK puede ser
representado gráficamente como se muestra en la siguiente figura:
Figura 2.4 Sub-direccionamiento de registros.12
Tomado de “TMS320C54x DSP Reference Set Volume 5: Enhanced Peripherals”, 1999,
página 3-4.
Para tener acceso a un registro sub-direccionado específico, el procedimiento se
realiza en dos fases:
1- La sub-dirección deseada se escribe en el registro de direcciones (DMSA).
2- El multiplexor conecta los registros de acceso (DMSDI y DMSDN) a la
dirección física requerida.
Cuando es realizada una lectura o una escritura en la pila de registros de datos, los
registros se mueven desde o hacia el registro de datos en cuestión en la manera que se
especifique previamente en el registro de direcciones.
19
La diferencia entre los dos tipos de registros de acceso es que DMSDI tiene
incremento automático de sub-dirección luego de un acceso (lectura o escritura). DMDSI es
más conveniente cuando se deban configurar todos los registros del DMA. Por otra parte, si
lo que se necesita es hacer un acceso a un único registro, o existe la necesidad de prevenir
la modificación de las sub-direcciones, DMSDN es el registro de acceso que se debe
utilizar.
En la tabla 3-1 páginas 3-6 y 3-7 de [12] (incluida en los apéndices, tablas D.4 y
D.5) muestra todos los registros del DMA. Únicamente un registro (DMPREC), aparte de
los registros de acceso y de direcciones, se encuentra direccionado directamente, todos los
demás registros se encuentran sub-direccionados.
Cada uno de los seis canales disponibles posee un conjunto de 5 registros con los
cuales se configuran cada uno de los canales respectivos, estos cinco registros se enumeran
a continuación:
1- Source Address Register (DMSRCn)
2- Destination Address Register (DMDSTn)
3- Element Count Register (DMCTRn)
4- Sync Event/Frame Count Register
5- Transfer Mode Control Register
Los registros Source y Destination Address almacenan la dirección de donde los
datos van a ser leídos y de donde los datos van a ser escritos respectivamente. Cada uno de
20
estos registros es de 16 bits, y contiene los 16 bits menos significativos de la dirección
extendida de la ubicación de la fuente o el destino. Estos registros son inicializados antes de
comenzar la transferencia, y son actualizados automáticamente durante las transferencias
por el controlador de DMA. El CPU puede hacer una lectura o escritura en cualquiera de
estos registros durante las transferencias si fuese necesario, las escrituras tienen efecto
inmediato y afectarán el progreso de la transferencia que se esté realizando al momento de
la escritura.
El DMCTRn (donde n como en todos los casos representa el número de canal al que
pertenece el registro) almacena el número de transferencias de DMA que se realizarán. Este
registro almacena un número de 16 bits sin signo que podría funcionar como un contador o
como una constante dependiendo del modo de direccionamiento que se esté utilizando.
Existen dos modos de direccionamiento en el DMA para el caso del
TMS320VC5416 DSK, el modo multiframe y el modo ABU. En el modo multiframe las
direcciones de la fuente y el destino son modificadas en cada transferencia de acuerdo a los
índices de elemento y de trama. Es un modo de operación más conveniente cuando los
datos transferidos están organizados en tramas o bloques. El modo ABU es utilizado para
implementar funciones de autobuffering, es en este modo donde DMCTRn es una
constante, y representa el tamaño del buffer.
Capítulo 3: Simulaciones
En el presente capítulo se describen los códigos elaborados en MATLAB® para la
simulación de los procesos de muestreo y cuantización de señales analógicas. Fueron
elaboradas dos funciones, una llamada muestreo y otra llamada cuantización.
Muestreo recibe una función definida como normalmente se hace en MATLAB®
(vector de tiempos y definición de la función), recibe como segundo parámetro el paso del
vector de tiempos de la señal a muestrear y por último, recibe la frecuencia de muestreo en
hertz.
Cuantización recibe también como primer parámetro una función la cual
generalmente será una señal muestreada, recibe además como segundo y tercer parámetros
los valores pico negativo y positivo (respectivamente), con estos valores se definen los
niveles de cuantización necesarios, y por último se especifica el número de bits que se
utilizará para llevar a cabo este proceso.
Utilizando las dos funciones anteriores se realizaron una serie de simulaciones con
el fin de ilustrar el fenómeno de aliasing en el muestreo y las ventajas de aumentar la
resolución (número de bits utilizado) durante el proceso de cuantización.
En el apéndice A se muestra el código correspondiente a la función muestreo, la
misma consiste básicamente en un lazo que actúa como un retenedor de orden cero
(sostiene el valor muestreado en un instante hasta el próximo tiempo de muestreo). Los
21
22
instantes de muestreo son generados a partir de la frecuencia de muestreo y el paso en el
vector de tiempos de la señal de entrada.
Por otro lado, en el apéndice B se muestra el código correspondiente a la función
cuantización, dicha función está conformada por dos etapas, una en la cual se generan las
celdas de cuantización de acuerdo a los valores pico y el número de bits indicado para la
aproximación; y otra que consiste en un lazo donde se ubica cada muestra de la señal
entrante en el nivel de cuantización más cercano.
Para ilustrar el fenómeno de aliasing con los códigos ya mencionados se definió una
señal formada por la suma de una onda senoidal con frecuencia de 1kHz y amplitud unitaria
con otra señal de tipo senoidal pero de frecuencia 3kHz y de amplitud máxima de 0,5. Esta
señal se muestra a continuación:
Señal de entrada
1.5
1
Amplitud
0.5
0
-0.5
-1
-1.5
0
0.5
1
1.5
2
2.5
tiempo (s)
3
3.5
4
4.5
5
Figura 3.1 Ejemplo de una señal analógica de entrada.
Elaboración propia.
-3
x 10
23
Se procedió luego a muestrear la señal anterior a dos tasas distintas, 1kHz (la cual
es inferior a límite de 6kHz según el teorema de Nyquist) y 9kHz (superior a la frecuencia
de Nyquist). La figura correspondiente a la señal muestreada a una tasa de 1kHz se muestra
a continuación:
Señal muestreada a frecuencia inadecuada
1.5
1
Amplitud
0.5
0
-0.5
-1
-1.5
0
0.5
1
1.5
2
2.5
3
tiempo (s)
3.5
4
4.5
5
-3
x 10
Figura 3.2 Señal analógica muestreada a una tasa de 1kHz.
Elaboración propia.
La representación en el tiempo de la señal resultante mostrada anteriormente difiere
sustancialmente de la señal original.
24
El segundo caso, en el que la señal analógica de entrada fue muestreada a una tasa
de 9kHz se ilustra en la siguiente figura:
Señal muestreada a frecuencia adecuada
1.5
1
Amplitud
0.5
0
-0.5
-1
-1.5
0
0.5
1
1.5
2
2.5
3
tiempo (s)
3.5
4
4.5
5
-3
x 10
Figura 3.3 Señal analógica muestreada a una tasa de 9kHz.
Elaboración propia.
Para este segundo caso, la representación temporal de la señal resultante mostrada
en la figura anterior presenta mayores semejanzas con la señal original que en el caso de la
figura 3.3.
25
Como se expuso en el desarrollo teórico del presente proyecto, para que no exista
aliasing, la frecuencia a la que una señal es muestreada debe ser al menos dos veces la
frecuencia máxima existente en la señal analógica de entrada. Para este caso en particular,
esa frecuencia tendría un valor de 3kHz, de modo que para que no se produzca aliasing el
proceso de muestreo se debería llevar a cabo a una frecuencia de al menos 6kHz. El caso de
la señal de la figura 3.2 por tanto producirá aliasing, dado que este límite de 6kHz no fue
respetado.
Es posible por otro lado comparar el espectro de densidad de potencia de la señal
original con los de las señales muestreadas. En la siguiente figura se muestra el
correspondiente a la señal original:
26
Espectro de densidad de potencia señal de entrada
-40
Power Spectrum Magnitude (dB)
-50
-60
-70
-80
-90
-100
-110
0
0.5
1
1.5
2
2.5
3
Frequency
3.5
4
4.5
5
x 10
Figura 3.4 Espectro de densidad de potencia de la señal original.
Elaboración propia.
El caso de la señal sub-muestreada se muestra a continuación:
4
27
Figura 3.5 Espectro de densidad de potencia de la señal sub-muestreada.
Elaboración propia.
El espectro de densidad de potencia de la señal sobre-muestreada se muestra en la
siguiente figura:
28
Figura 3.6 Espectro de densidad de potencia de la señal sobre-muestreada.
Elaboración propia.
Para el caso de la figura 3.5 se puede observar que no es posible recuperar la
información espectral de la señal original a partir del espectro de la señal sub-muestreada.
Sucede lo contrario para el caso de la señal sobre-muestreada, en el que al aplicar un filtro
como el superpuesto en la figura 3.6 produciría una señal que coincidiría con la señal de
entrada.
Tratando ahora el tema de la pérdida de información durante el proceso de
cuantización (ver desarrollo teórico del presente proyecto), es conocido que para poder
representar una señal analógica de manera digital se debe sacrificar algo de información
29
sobre esta, que no podrá ser recuperada luego, de modo que se limite la señal analógica de
entrada a un número finito de valores mediante el proceso de cuantización.
En las figuras 3.7 y 3.8 se muestra la señal de la figura 3.3 luego de ser cuantizada
con dos resoluciones diferentes. En la figura 3.7 se utilizó una resolución de tres bits y es
posible observar que la señal resultante difiere significativamente de la señal original, y por
tanto arruina el trabajo bien realizado en el proceso de muestreo.
Señal cuantizada con 3 bits de resolución
1
0.5
0
-0.5
-1
-1.5
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
5
-3
x 10
Figura 3.7 Señal resultante del proceso de cuantización con una resolución de tres
bits.
Elaboración propia.
Para el caso de la figura 3.8 el proceso de cuantización se llevó a cabo con una
resolución de seis bits, y como es posible observar, las semejanzas con la señal de la figura
3.3 son mayores respecto al caso anterior.
30
Señal cuantizada con 6 bits de resolución
1.5
1
0.5
0
-0.5
-1
-1.5
0
0.5
1
1.5
2
2.5
3
3.5
4
4.5
5
-3
x 10
Figura 3.8 Señal resultante del proceso de cuantización con una resolución de seis
bits.
Elaboración propia.
Queda entonces en evidencia la estrecha relación que existe entre el proceso de
muestreo y el proceso de cuantización durante la digitalización de una señal analógica, no
basta con que en una sola de estas etapas se realice un buen trabajo para obtener una
representación digital adecuada de la señal de entrada, si no que se debe muestrear a una
tasa que respete al menos el límite de la frecuencia de Nyquist y se debe utilizar una
resolución que sea adecuada para la aplicación en la que se trabaja.
CAPÍTULO 4: Acople, muestreo y cuantización de la señal PAM
4.1 Interfaz entre el generador de señales y la tarjeta de evaluación
4.1.1 Convertidor analógico a digital AD7450
La tarjeta de evaluación TMS320VC5416 (DSK) posee una variedad de
características y periféricos que le permiten solucionar una gran variedad de problemas sin
realizarle modificaciones. Entre los periféricos que incluye la tarjeta de evaluación se
encuentra un codec stereo (Burr Brown PCM3002), este le da la capacidad al DSK de
procesar señales analógicas, puede actuar como convertidor analógico a digital, o de digital
a analógico. Este códec se encuentra diseñado para trabajar con señales de audio tales como
la música y la voz por lo que su frecuencia de muestreo máxima no supera los 48kHz,
permitiendo un rango de frecuencias para las señales de entrada muy limitado para el caso
de este proyecto. Fue por esta razón que se decidió adquirir un convertidor de analógico a
digital que permitiera un rango mayor de frecuencias para la señal analógica a procesar.
El convertidor elegido fue el AD7450 de Analog Devices, cuya tasa de muestreo
máxima alcanza 1MSPS (más de veinte veces la tasa máxima del PCM3002) y realiza una
aproximación serial de 12 bits. Otra característica importante que posee este convertidor y
que influyó en su elección fue su simplicidad, este no requiere ningún tipo de configuración
por software como en el caso del PCM3002, y consta únicamente de ocho pines para la
señales de entrada y salida, alimentación, entre otras.
31
32
Otra característica del AD7450 es que su entrada es diferencial. La amplitud de la
señal diferencial es la diferencia entre las señales aplicadas a los pines VIN+ y VIN- del
AD7450. El diagrama de pines del convertidor se muestra en la siguiente figura:
Figura 4.1 Diagrama de pines del convertidor AD7450.1
Tomado de “AD7450 Datasheet”, página 6.
El pin VDD es la entrada para la alimentación del dispositivo, GND por su parte es la
referencia analógica mientras que CS (del inglés Chip Select) es una entrada lógica activa
bajo la cual inicializa y mantiene activas las conversiones en el AD7450. Por otra parte,
SDATA es la salida lógica resultante de la conversión y es de tipo serial. SCLK es donde se
conecta la entrada de reloj del convertidor que se utiliza durante el proceso de conversión.
Por último se encuentra VREF que es la entrada de referencia al convertidor. Esta referencia
es importante pues define la función de transferencia del AD7450 al definirse los niveles de
cuantización como se muestra a continuación:
1LSB =
2 × V REF
4096
(4.1-1)
33
VREF está relacionado con el rango para modo común, que es definido en [1] como
el valor promedio para cada una de las señales diferenciales. El valor de voltaje que se le dé
a esta entrada también depende del valor de VDD (5 V ó 3 V).
La función de transferencia ideal del convertidor se muestra a continuación:
Figura 4.2 Características de transferencia ideales para el AD7450.1
Tomado de “AD7450 Datasheet”, página 10.
En la figura anterior se puede observar la relación entrada-salida en el convertidor y
como afecta VREF esta relación.
Habiendo introducido las principales funciones de cada uno de los pines del
AD7450 es posible especificar los valores de diseño que se utilizarán para el mismo en el
caso particular del presente proyecto.
34
En la tabla D.9 incluida en los apéndices se muestra el conector P2 que se utiliza en
el módulo de evaluación para la expansión con periféricos de la tarjeta. En la misma se
indica la presencia de un voltaje de +5 Volts en los pines 5, 6, 9 y 10. Al tener disponible
este voltaje en la tarjeta y dado que de acuerdo a [1] con este es posible obtener el más alto
rendimiento por parte del AD7450 a VDD, se le aplicará esta señal de voltaje.
En P2 se encuentra disponible también un voltaje de +3.3 Volts (pines 19 y 20) que,
aunque no es lo óptimo dado que las señales analógicas que se muestrearán no superan 1
Voltrms por lo que se desperdiciarán palabras de código de acuerdo a la figura 4.2, será
utilizado como el valor conectado al pin VREF por facilidad durante la implementación. Para
poder utilizar el voltaje de +3.3 Volts antes mencionado debe ser primero activado el
regulador dentro de la tarjeta de evaluación que proporciona este voltaje. El esquema de
conexión del regulador puede ser consultado en [9] en el apéndice B del mismo (sección de
esquemáticos) en el que se indica que es necesario seleccionar el regulador conectando el
pin DC_DETECT (pin 75 de P2) del mismo a tierra (GND), que puede ser ubicada en el pin
76 del conector P2.
El pin GND del convertidor debe estar claramente conectado a la misma referencia
de la tarjeta de evaluación, esta se encuentra disponible en los pines 3, 4, 7, 8, 25, 26, 31,
32, 37, 38, 43, 44, 51, 52, 61, 62, 76, 77, 79 y 80 dentro de P2, por lo que el pin en cuestión
puede ir conectado a cualquiera de estos, excepto en el número 76 ya que se encuentra
ocupado por el regulador de +3,3 Volts.
35
Para el caso de las entradas al convertidor va a ser necesario diseñar una interfaz
que permita conectar una única entrada a la etapa diferencial (donde la amplitud de la señal
de entrada está dada por la diferencia de dos señales mono-polares), ya que para el caso de
este proyecto no se tienen entradas de tipo diferencial sino entradas bipolares individuales.
En [1] se hace una propuesta para dicha interfaz y es la que se muestra a continuación:
Figura 4.3 Aplicando una entrada bipolar individual a la entrada del AD7450.1
Tomado de “AD7450 Datasheet”, página 15.
En la figura anterior se muestra un amplificador operacional con realimentación
positiva para funcionar en modo de sumador para la interfaz, lo que se logra con esto es
subir un nivel DC a la señal bipolar entrante de modo que la misma pase a ser mono-polar a
la salida del amplificador, el nivel DC que se le suma a la señal bipolar será VREF por
facilidad, además VREF estará conectada a la entrada VIN- de modo que la señal de entrada
al convertidor (VIN+ - VIN-) sea la señal bipolar original.
36
La implementación del circuito descrito anteriormente no tuvo éxito, posiblemente
debido a presencia de realimentación positiva en el mismo. Por esta razón fue necesario
diseñar otra interfaz que realizará exactamente la misma tarea. Esta consta de dos etapas, la
primera es un inversor y la segunda un restador (el efecto de inversión de fase del restador
sobre la señal de entrada compensado por el inversor), ambas etapas en cascada producen el
mismo efecto que lo hace la interfaz propuesta en [1]. La interfaz propuesta con sus valores
de diseño se muestra en la siguiente figura:
1k
1k
1k
-
+
1k
-
+
Vl
Vo
1k
+
-
Vi
Vref
3,3
1k
Figura 4.4 Interfaz propuesta.
Elaboración propia.
Como se puede observar de la figura anterior los valores de todas las resistencias
son iguales para no introducir ningún tipo de ganancia, y VREF continúa siendo el valor DC
que se le suma a la señal de entrada.
37
Los resultados de la simulación del circuito anterior se muestran a continuación:
1.00
T
Vi
-1.00
1.00
Vl
-1.00
4.30
Vo
2.30
0.00
1.00m
2.00m
3.00m
Time (s)
Figura 4.5 Simulación para el circuito propuesto.
Elaboración propia.
De acuerdo a la simulación el circuito diseñado funciona correctamente, es posible
observar que la señal de salida del inversor (segunda de arriba a abajo) se encuentra
desfasada 180 grados de la señal de entrada (primera de arriba a abajo) tal y como era de
esperar; en la segunda etapa por otra parte se devuelve la onda a su fase original y suma el
nivel DC deseado haciendo la onda de esta manera mono-polar, tal y como se deseaba y se
muestra en la figura anterior (tercer onda de arriba a abajo).
38
Dados los resultados anteriores se decidió implementar la interfaz propuesta para
llevar a cabo la función anteriormente descrita, los resultados se muestran más adelante en
el presente documento.
4.1.2 Clock Mode Register (CLKMD)
Para los cálculos que se realizarán en la sección 4.2 del presente proyecto, se toma
160 MHz como valor para el reloj del CPU. Sin embargo, este valor no es el valor por
default en la tarjeta de evaluación y por tanto debe ser configurado manualmente.
Para realizar la configuración se necesita del jumper JP4 de la tarjeta de evaluación,
que es un conector de 4x2 que determina el valor de encendido del registro CLKMODE en
el DSP, además de seleccionar cuando el DSP trabaja en modo de microcontrolador o modo
microprocesador, y del registro CLKMD que se muestra en la siguiente figura:
Figura 4.6 Clock Mode Register (CLKMD).13
Tomado de “TMS320C54x DSP Reference Set Volume 1: CPU and Peripherals”, 1999,
página 8-29.
De acuerdo con [5], el reloj externo en el módulo de evaluación tiene un valor de 16
MHz, y para fijar la frecuencia del reloj del sistema se debe primero utilizar los jumpers en
39
JP4 para fijar los pines CLKMD1, CLKMD2 y CLKMD3 en 1, 0, 1. Esto provocará que el
chip encienda con una frecuencia en el PLL de 16 MHz.
Luego de realizar el paso anterior se debe configurar el registro CLKMD que como
se puede observar en la figura 4.6 consta de dos bytes. Los espacios PLLMUL y PLLDIV
definen de manera conjunta el multiplicador de frecuencia que se aplicará al reloj externo
(deben ser especificados con su valor real menos 1). PLLCOUNT se utiliza para asegurar
que el CPU no tendrá señal de reloj por parte del PLL hasta que este se encuentre
enganchado, así, únicamente las señales de reloj válidas serán enviadas al dispositivo.
PLLON/OFF y PLLNDIV por su parte habilitan o deshabilitan de manera conjunta la parte
del PLL en el generador de reloj (clock generator).
Para que el PLL produzca una frecuencia de 160 MHz PLLNDIV debe estar en 1,
PLLDIV debe ser 0 y PLLMUL deberá ser 9, de este modo:
f PLL =
CLKIN × (PLLMUL + 1) 16 MHz × (9 + 1)
=
= 160 MHz
PLLDIV + 1
(0 + 1)
(4.1-1)
El valor de PLLCOUNT se calculó de acuerdo a la ecuación que se muestra a
continuación:
PLLCOUNT >
LockupTime ( ms ) × CLKIN ( MHz )
16
(4.1-2)
De acuerdo a la figura 8.5 en la página 8-31 de [13] el LockupTime (en
microsegundos) mínimo para frecuencias mayores a 100 MHz de ser de 35 por lo que para
40
dejar un margen de seguridad será definido como 40, de modo que el valor de PLLCOUNT
será también de 40.
Juntando todos estos valores da como resultado un valor para el registro CLKMD
de: 1001 0 00101000 1 1 0, o lo que es lo mismo 0x9146.
4.2 Sincronización del AD7450 con el McBSP
El esquema de conexión propuesto para la tarjeta de evaluación y el ADC se
muestra en la figura 4.7 y fue tomado de [1]. El McBSP utiliza una señal continua de reloj y
una señal de sincronización de trama para sincronizar la transferencia de datos con
dispositivos periféricos tales como el AD7450. El esquema de conexión mostrado es la base
de la configuración del McBSP, pues define el comportamiento de cada uno de los pines del
puerto serial.
Figura 4.7 Esquema de conexión AD7450-TMS320VC5416.1
Tomado de “AD7450 Datasheet”, página 19.
41
Las consideraciones más importantes a tomar en cuenta en la configuración del
puerto serial y derivadas del esquema de conexión mostrado en la figura anterior son las
siguientes:
1- Las señales FSG y CKLG (generadas internamente) deberán estar habilitadas
(utilizando los bits FRST y GRST de los registros de control del McBSP
respectivamente) y funcionando de acuerdo a los valores configurados en el
SPCR2.
2- Los pines FSX y CLKX serán manejados de acuerdo a los valores programados
en el SRGR y controlarán las señales de los pines C S , FSR y SCLK, CLKR
respectivamente (bits FSXM, FSRM, CLKXM y CLKRM).
3- Debe generarse una interrupción al CPU al completarse la transferencia de una
palabra de 16 bits (RINTM).
Además, de la información de [1] (hoja de datos del AD7450) se tomaron en cuenta
las siguientes consideraciones:
4- Dado que C S es activo en bajo FSX y FSR deben serlo también (bits FSXP y
FSRR).
5- El AD7450 transmite los bits de las muestras luego de los flancos decrecientes
del reloj, por lo que CLKX y CLKR deberán también recibir y transmitir
muestras luego de los flancos decrecientes (bits CLKXP y CLKRP).
42
6- La longitud de la palabra será de 16 bits, pues el AD7450 transmite 4 ceros antes
de los 12 bits de la aproximación de la muestra cuantizada (RWDLEN).
7- Dado que la longitud de la palabra no supera los 16 bits, será necesaria una
única palabra por trama (RFRLEN1).
8- No habrá ningún tipo de compresión en los datos recibidos (RCOMPAND) y el
AD7450 transmite el MSB primero.
Para obtener el número de muestras por segundo a las que el AD7450 operará se
deben tener en cuenta una serie de variables pertenecientes tanto al ADC como al McBSP.
El reloj al cual operará el ADC y por tanto el reloj en CLKX se obtiene mediante la
fórmula:
CLKG =
CPUCLOCK
160 MHz
=
CLKGDV
CLKGDV
(4.2.1)
Donde CLKDV es un grupo de bits en el SRGR. Seleccionando el número de ciclos
de reloj que darán origen a un pulso de sincronización de trama con FPER en el mismo
registro, es como se fija el número de muestras por segundo deseadas, es decir:
tasa de muestreo =
CLKG
FPER
(4.2.2)
Sin embargo se deben respetar algunos tiempos para que el AD7450 funcione
correctamente, estos tiempos son los siguientes:
1- tSCLK: tiempo de muestreo del ADC y cuyo valor no puede ser menor a los 55,56ns.
43
2- t1: tiempo mínimo que debe permanecer C S en alto antes de iniciar una nueva
transmisión y que no debe ser menor a 25ns.
3- tQUIET: tiempo mínimo requerido entre el final de la lectura serial y el próximo
flanco decreciente de C S . Su valor es de 25ns.
4- tCONVERT: consta de al menos 16 ciclos de SCLK.
Algunos de estos tiempos se muestran en la siguiente figura:
Figura 4.8 Diagrama de temporización de la interfaz serial.1
Tomado de “AD7450 Datasheet”, página 4.
44
Una expresión para el cálculo de la tasa de muestreo que asegure que se respeten los
tiempos mínimos antes mencionados puede ser obtenida utilizando la figura 4.9 mostrada a
continuación:
Figura 4.9 Temporización de la interfaz serial.1
Tomado de “AD7450 Datasheet”, página 16.
Donde THROUGHPUT representa la tasa de muestreo y t8 tiene un valor mínimo
de 10ns. La expresión antes mencionada sería la siguiente:
1
> t CONVERT + t 8 + t QUIET min
THROUGHPUT
(4.2.3)
La cual, de acuerdo a lo expuesto anteriormente podría ser escrita como:
FPER
1
> 16 ×
+ 10ns + 25ns
CLKG
CLKG
(4.2.4)
Se tiene entonces que la tasa de muestreo que se utilizará será seleccionada
mediante las expresiones (4.2.1), (4.2.2) y (4.2.4).
45
De acuerdo con [1], para obtener el rendimiento máximo de 1MSPS el AD7450
deberá estar alimentado por una fuente de 5V, y la frecuencia máxima que SCLK puede
aceptar es de 18MHz. De (4.2.1) se obtiene que para este valor de CLKG, CLKGDV debe
ser 8,889, valor que no es posible obtener debido a que no es entero. Tomando en cuenta lo
anterior fueron evaluados tres pares de frecuencia de reloj-tasa de muestreo para CLKGDV
igual a 8, 9 y 10 y cuyos procedimientos de cálculo se muestran a continuación:
a) CLKGDV = 8 y una tasa de muestreo de 1MSPS:
De (4.2.1), CLKG resultaría ser 20MHz, sobrepasando de esta manera la frecuencia
máxima tolerada por SCLK. Este valor de CLKGDV queda entonces descartado.
b) CLKGDV = 10 y una tasa de muestreo de 1MSPS:
De (4.2.1), CLKG tendría un valor de 16MHz y evaluando (4.2.2) FPER obtiene un
valor de 16. Luego, sustituyendo estos valores en (4.2.4) el resultado sería:
1ms > 1ms + 10ns + 25ns
Resultado que no cumple la condición de desigualdad de modo que debe ser
también descartado.
c) CLKGDV = 9:
De (4.2.1) CLKG es 17,78MHz. Evaluando (4.2.2) para distintos valores de FPER
se obtiene que la tasa de muestreo máxima posible sin exceder el valor máximo de 1MSPS
se da en FPER = 18, y tiene un valor de 988kSPS aproximadamente.
46
Al sustituir los valores anteriores en (4.2.4) el resultado es el siguiente:
1,013ms > 900ns + 10ns + 25ns
Con estos valores se cumple con todas las condiciones necesarias para el buen
funcionamiento del ADC y cuyos valores serán entonces utilizados en la configuración del
McBSP.
4.3 Configuración del McBSP
En el apéndice E del presente proyecto se incluye una amplia descripción de las
consideraciones que se tuvieron en cuenta para llevar a cabo la configuración de cada uno
de los registros para el puerto serial buferizado multicanal en el CPU de la tarjeta de
evaluación.
La presente sección se limita a presentar las líneas de código resultantes para la
configuración del puerto serial mencionado anteriormente, así como un esquema resumen
en la figura 4.10 en la que se presentan las variables de mayor importancia dentro de cada
uno de los registros programados.
47
Figura 4.10 Esquema resumen de la configuración del McBSP.
Elaboración propia.
Como se puede observar en la figura anterior se inicia con la configuración de
CLKOFF, que se describe en la sección 5.1.9 del presente documento, seguido a esto se
encuentra la configuración de los jumpers en JP4, de los cuales se habló anteriormente en la
sección 4.1.2 junto con el registro CLKMD.
Seguidamente se encuentran los registros del puerto serial propiamente. En SPCR1
se especifica justificación a la derecha con relleno de ceros en los bits más significativos
para las palabras recibidas, además con RINTM se genera una interrupción al CPU luego
de que finalice una transmisión por parte del AD7450, de modo que el controlador de DMA
se sincronice con este evento.
48
Respecto a SPCR2 es importante resaltar que se configuró para que CLKG sea
habilitado y manejado de acuerdo a los valores programados en el SRGR[1,2] y que además
la señal de sincronización de trama FSG sea también habilitada y generara después de
(FPER + 1) ciclos de CLKG.
El registro PCR está relacionado con el funcionamiento de los pines del puerto
serial, para este caso se configuraron como pines para el puerto propiamente y no como
pines de entrada y salida, además se especifica que el pulso de sincronización de trama será
generado internamente, además se definen las polaridades de los pulsos y el reloj así como
el comportamiento de los pines FSX, FSR, CLKX y CLKR, de acuerdo al esquema de
conexión de la figura 4.7 y lo descrito anteriormente en la sección 4.2.
En el registro RCR1 se le indica al CPU que se manejarán palabras de 16 bits (12
bits de la aproximación que realiza el AD7450 más 4 bits de relleno en las posiciones más
significativas), una a la vez, por lo que al ocupar menos de 128 palabras por trama, se
indica una sola fase en RCR2.
Para el caso de los registros XCR1 y XCR2 estos se configuraron con sus valores por
default dado que en el presente proyecto no es necesario realizar transmisiones.
En el registro SRGR1 se especifica la duración del pulso de sincronización de trama
y el espacio CLKGDV descrito anteriormente en la sección 4.2. Por otro lado, en el registro
SRGR2 se le indica al DSP que el reloj será generado internamente, que el pulso de
sincronización de trama será transmitido a través de FSX, y se indica además el valor de
FPER (sección 4.2 del presente proyecto).
49
Los registros de control del McBSP que quedan por configurar tienen que ver con la
operación multicanal del puerto serial, en la cual las tramas son multiplexadas utilizando
time-division multiplexing (TDM). Para el caso de este proyecto este tipo de operación no
es de interés, por lo que debe ser deshabilitada. El procedimiento para hacer esto se
encuentra descrito en la sección 2.6.2 de [12], lo que se debe hacer es seleccionar RMCM =
0 y XMCM = 0 en MCR1 y MCR2 respectivamente.
Al estar deshabilitada la selección multicanal, todos los demás bits en los registros
MCR1 y MCR2 no son tomados en cuenta, al igual que el resto de los registros, por lo que
se les puede asignar cualquier valor.
Las líneas de código correspondientes a los registros antes descritos dentro de la
configuración del McBSP se muestran a continuación:
4.3.1 Serial Port Control Register 1
MCBSP_SPCR1_RMK(MCBSP_SPCR1_DLB_OFF, MCBSP_SPCR1_RJUST_RZF,
MCBSP_SPCR1_CLKSTP_DISABLE, MCBSP_SPCR1_DXENA_OFF,
MCBSP_SPCR1_ABIS_DISABLE, MCBSP_SPCR1_RINTM_RRDY,
MCBSP_SPCR1_RRST_DISABLE)
4.3.2 Serial Port Control Register 2
MCBSP_SPCR2_RMK(MCBSP_SPCR2_FREE_YES,
MCBSP_SPCR2_SOFT_DEFAULT, MCBSP_SPCR2_FRST_FSG,
50
MCBSP_SPCR2_GRST_CLKG, MCBSP_SPCR2_XINTM_DEFAULT,
MCBSP_SPCR2_XRST_DISABLE)
4.3.3 Pin Control Register
MCBSP_PCR_RMK(MCBSP_PCR_XIOEN_SP, MCBSP_PCR_RIOEN_SP,
MCBSP_PCR_FSXM_INTERNAL, MCBSP_PCR_FSRM_EXTERNAL,
MCBSP_PCR_SCLKME_0, MCBSP_PCR_CLKXM_OUTPUT,
MCBSP_PCR_CLKRM_INPUT, MCBSP_PCR_FSXP_ACTIVELOW,
MCBSP_PCR_FSRP_ACTIVELOW, MCBSP_PCR_CLKXP_FALLING,
MCBSP_PCR_CLKRP_FALLING)
4.3.4 Receive Control Register 1
MCBSP_RCR1_RMK(MCBSP_RCR1_RFRLEN1_DEFAULT,
MCBSP_RCR1_RWDLEN1_16BIT)
4.3.5 Receive Control Register 2
MCBSP_RCR2_RMK(MCBSP_RCR2_RPHASE_SINGLE,
MCBSP_RCR2_RFRLEN2_DEFAULT, MCBSP_RCR2_RWDLEN2_DEFAULT,
MCBSP_RCR2_RCOMPAND_MSB, MCBSP_RCR2_RFIG_NO,
MCBSP_RCR2_RDATDLY_0BIT)
4.3.6 Transmit Control Register 1
MCBSP_XCR1_RMK(MCBSP_XCR1_XFRLEN1_DEFAULT,
MCBSP_XCR1_XWDLEN1_DEFAULT)
51
4.3.7 Transmit Control Register 2
MCBSP_XCR2_RMK(MCBSP_XCR2_XPHASE_SINGLE,
MCBSP_XCR2_XFRLEN2_OF(0), MCBSP_XCR2_XWDLEN2_DEFAULT,
MCBSP_XCR2_XCOMPAND_DEFAULT, MCBSP_XCR2_XFIG_DEFAULT,
MCBSP_XCR2_XDATDLY_DEFAULT)
4.3.8 Sample Rate Generator Register 1
MCBSP_SRGR1_RMK(MCBSP_SRGR1_FWID_OF(15),
MCBSP_SRGR1_CLKGDV_OF(8))
4.3.9 Sample Rate Generator Register 2
MCBSP_SRGR2_RMK(MCBSP_SRGR2_GSYNC_DEFAULT,
MCBSP_SRGR2_CLKSP_DEFAULT, MCBSP_SRGR2_CLKSM_1,
MCBSP_SRGR2_FSGM_FSG, MCBSP_SRGR2_FPER_OF(17))
4.3.10 Registros Multicanal
MCBSP_MCR1_RMK(MCBSP_MCR1_RMCME_NO,MCBSP_MCR1_RPBBLK_SF1,
MCBSP_MCR1_RPABLK_SF0,MCBSP_MCR1_RMCM_CHENABLE)/* Multichannel
Control Register 1 */
MCBSP_MCR2_RMK(MCBSP_MCR2_XMCME_NO,MCBSP_MCR2_XPBBLK_SF1,
MCBSP_MCR2_XPABLK_SF0,MCBSP_MCR2_XMCM_ENNOMASK) /*
Multichannel Control Register 2 */
0x0000,
/* Receive Channel Enable Register Partition A */
52
0x0000,
/* Receive Channel Enable Register Partition B */
0x0000,
/* Receive Channel Enable Register Partition C */
0x0000,
/* Receive Channel Enable Register Partition D */
0x0000,
/* Receive Channel Enable Register Partition E */
0x0000,
/* Receive Channel Enable Register Partition F */
0x0000,
/* Receive Channel Enable Register Partition G */
0x0000,
/* Receive Channel Enable Register Partition H */
0x0000,
/* Transmit Channel Enable Register Partition A */
0x0000,
/* Transmit Channel Enable Register Partition B */
0x0000,
/* Transmit Channel Enable Register Partition C */
0x0000,
/* Transmit Channel Enable Register Partition D */
0x0000,
/* Transmit Channel Enable Register Partition E */
0x0000,
/* Transmit Channel Enable Register Partition F */
0x0000,
/* Transmit Channel Enable Register Partition G */
0x0000
/* Transmit Channel Enable Register Partition H */
53
4.4 Configuración del DMA
La configuración de los registros de DMA será el complemento de la configuración
del McBSP para llevar a cabo el proceso de digitalización de la señal analógica recibida en
el AD7450. Esta hará posible que las palabras de 16 bits recibidas en el DRR del McBSP
correspondiente sean transferidas al espacio de datos de la memoria (DARAM en este caso)
utilizando el controlador de DMA. El espacio de datos en la memoria (destino) será
configurado como un buffer circular. La dirección del buffer del destino se irá
incrementando en 1 luego de cada transferencia. Se utilizará el modo de direccionamiento
ABU para implementar el buffer circular. En este modo de operación el DMCTRn almacena
el tamaño del buffer, y Frame Count en DMSFCn no se utiliza.
Se acostumbra en la práctica muestrear una señal a una velocidad de 8 veces su
frecuencia, aunque según se explicó en la nota teórica bastaría hacerlo a dos veces su
frecuencia. Para el caso de este proyecto se seguirá esta costumbre por lo que la tasa de
muestras de la señal banda base a muestrear se configurará en el generador de señales con
una tasa de
CLKX
@ 123,5kSPS , lo que hará posible obtener 8 muestras por símbolo como
8
máximo.
Las especificaciones generales que se deberán tomar en cuenta durante la
configuración de los registros de DMA se resumen en la siguiente tabla:
54
Tabla 4.1 Especificaciones generales para la configuración del DMA.
Elaboración propia.
Modo ABU (sin decremento)
Modo de transferencia
McBSP0 data receive register (DRR10)
Dirección de la fuente
DARAM03
Buffer destino
1 palabra de 16 bits
Tamaño del buffer
Evento de sincronización DMA Channel #4 interrupt
DMA channel #4
Canal
Para la estructura de configuración del DMA se sigue la especificada en [11] y es la
que se muestra a continuación:
Figura 4.11 Estructura de configuración para el DMA.11
Tomado de “TMS320C54x Chip Support Library API Reference Guide”, 1999, página 6-4.
55
En el apéndice F se describen los valores que tomarán cada uno de los parámetros
en los registros de control de DMA siguiendo las especificaciones antes mostradas y la
estructura de configuración para canales individuales en el DMA.
Las líneas de código correspondientes a la configuración del DMA se muestran a
continuación y siguen el esquema de la figura 4.11:
PRIORITY = DMA_PRIORITY_HI
AUTOIX = DMA_DMPREC_AUTOIX_USE_DMA0
4.4.1 Transfer Mode Control Register
DMA_DMMCR_RMK(DMA_DMMCR_AUTOINIT_OFF,
DMA_DMMCR_DINM_ON, DMA_DMMCR_IMOD_FULL_ONLY,
DMA_DMMCR_CTMOD_ABU, DMA_DMMCR_SIND_NOMOD,
DMA_DMMCR_DMS_DATA, DMA_DMMCR_DIND_POSTINC,
DMA_DMMCR_DMD_DATA)
4.4.2 DMA Sync Select and Frame Count Register
DMA_DMSFC_RMK(DMA_DMSFC_DSYN_REVT0, DMA_DMSFC_DBLW_OFF,
DMA_DMSFC_FRAMECNT_DEFAULT)
4.4.3 Source Address Register
DMA_DMSRC_RMK(DMA_DMSRC_SRC_OF(0x0021))
56
4.4.4 Destination Address Register
DMA_DMDST_RMK(DMA_DMDST_DST_OF(buffer0))
4.4.5 Element Count Register
DMA_DMCTR_RMK(DMA_DMCTR_ELECNT_OF(Buffer_Sz1))
4.4.6 Registros globales
DMA_DMGSA_RMK(DMA_DMGSA_DEFAULT) /* Global Source Address Reload
Register */
DMA_DMGDA_RMK(DMA_DMGDA_DEFAULT) /* Global Destination Address
Reload Register */
DMA_DMGCR_RMK(DMA_DMGCR_DEFAULT) /* Global Element Count Reload
Register */
DMA_DMGFR_RMK(DMA_DMGFR_DEFAULT) /* Global Frame Count Address
Reload Register */
Capítulo 5: Resultados
5.1 Código en CCS para el digitalizador de señales analógicas con
el AD7450
En el apéndice C se muestra el código elaborado en el Code Composer Studio para
el diseño del digitalizador de señales en banda base utilizando el AD7450. El código se
encuentra seccionado en 9 secciones principales las cuales se enumeran y describen a
continuación:
5.1.1 Declaraciones y encabezado
En estas secciones se definen algunas variables que serán utilizadas a lo largo del
código, así como también se incluyen las librerías necesarias para que el código compile
correctamente.
Se definen en esta sección el tamaño del buffer de recepción buffer0 y el número de
muestras que serán almacenadas en buffer0_0 antes de invocar a la función main() para que
las procese. Buffer0_0 será por tanto un buffer auxiliar en donde se almacenarán las
muestras que buffer0 recibe una a una.
5.1.2 Definición de datos globales
En esta sección se declaran los nombres de las funciones a utilizar en el código, se
declara la sección donde serán trasferidos los datos por el controlador de DMA, se definen
los Handles para la configuración del DMA y el McBSP y por último variables a utilizar
57
58
durante la rutina de atención a interrupciones y durante la inicialización de las
interrupciones.
Las funciones declaradas son:
1. initIrq: es una función de tipo void que se utiliza para inicializar las
interrupciones y activar la interrupción al CPU por parte del DMA al
terminar una transferencia.
2. initDMA: también de tipo void y lleva a cabo la tarea de cargar la
configuración de DMA al canal 4 del mismo.
3. initMcbsp: función de tipo void con la que se carga la configuración del
McBSP al McBSP0.
4. main: en la que se debe programar el procesamiento que se le hará a los
datos almacenados en buffer0_0 una vez que estos estén listos. También se
invocan las funciones de inicialización.
5. DMA_INT: esta es la rutina de atención a interrupciones, se encuentra
relacionada con una interrupción por parte del DMA4.
Para reservar una sección en memoria en donde ubicar buffer0 y buffer0_0 se
utilizaron las siguientes líneas de código:
#pragma DATA_SECTION (buffer0, ".dma_mem0")
Int16 buffer0[Buffer_Sz]; //Arreglo de datos del ADC
Int16 buffer0_0[buffermax];
59
El espacio .dma_mem0 fue declarado en el archivo data_mem.cmd dentro de proyecto_1 de
la siguiente forma:
SECTIONS {
.dma_mem0 > D_DARAM03
}
Como se mencionó en la sección 4.4.5 este buffer fue ubicado dentro de la
DARAM03.
Los Handles son variables donde serán guardadas las configuraciones realizadas
para el DMA y el McBSP. Las líneas de código donde estas fueron declaradas se muestran a
continuación:
DMA_Handle
C5416_DMA_MCBSP_hDmaRcv;
MCBSP_Handle C5416_DMA_MCBSP_hMcbsp;
Por último se encuentran definidas unas variables que serán utilizadas en la rutina
de atención a interrupciones:
1. flag: que le indicará a la función main cuando buffer0_0 se encuentra listo para ser
procesado.
2. j: para llevar un control sobre el número de muestras restantes para llenar buffer0_0
con su tamaño máximo.
60
3. eventIdRcv: que se utiliza para inicializar las interrupciones de acuerdo a lo
especificado en la configuración del McBSP.
5.1.3 Configuración del DMA
Esta configuración fue desarrollada ampliamente en la sección 4.4 del presente
proyecto, las líneas de código correspondientes son exactamente las mismas que las
incluidas al final de cada sub-sección en la sección antes mencionada.
Existen un par de diferencias con respecto a lo descrito en las secciones 4.4.4 y
4.4.5 (registros para la dirección fuente y dirección destino dentro de la configuración del
DMA) y lo que se muestra en el apéndice C, esto debido a que como se muestran las líneas
de código correspondientes a dichas secciones producían errores de compilación en el
programa, tal y como se muestra en la siguiente figura:
Figura 5.1 Errores de compilación en líneas de los registros DMSRC y DMDST.
Elaboración propia.
Las líneas de código de estos dos registros tuvieron que ser escritas como se
muestra:
(DMA_AdrPtr)((Uint16)(_MCBSP_DRR10_ADDR)),
(DMA_AdrPtr)((Uint16)(buffer0)),
/* Source Address Register */
/* Destination Address Register */
61
De esta manera no se producían más errores a causa de la definición de estos
registros.
5.1.4 Configuración del McBSP
La configuración del McBSP fue descrita ampliamente en la sección 4.3 del
presente proyecto, las líneas de código correspondientes, al igual que para el caso anterior,
son exactamente las mismas que las incluidas al final de cada sub-sección en la sección 4.3.
5.1.5 Función initMcbsp
Esta función consta únicamente de tres funciones:
1. MCBSP_open: abre el McBSP0 y lo asigna al handle correspondiente.
2. MCBSP_config: asigna la configuración del McBSP realizada al handle
correspondiente, McBSP0 queda configurado de acuerdo a lo especificado en
mcbspCfg0 (nombre para la configuración del McBSP).
3. MCBSP_start: arranca el McBSP0 con la configuración asignada.
5.1.6 Función initDMA
Esta función consta también de tres funciones:
1. DMA_open: abre el DMA4 y lo asigna al handle correspondiente.
2. DMA_config:
asigna
correspondiente, DMA4
la
configuración
del
DMA
realizada
al
handle
queda configurado de acuerdo a lo especificado en
dmaCfgRcv (nombre para la configuración del DMA).
62
3. DMA_start: arranca el McBSP0 con la configuración asignada.
5.1.7 Función initIrq
Esta función consta de cuatro instrucciones:
1. DMA_getEventId: con esta instrucción se asignan las interrupciones de acuerdo a lo
especificado en la configuración del McBSP, es decir, se generará una interrupción
al CPU cada vez que ocurra un evento de recepción en el McBSP0, para esta
instrucción se utiliza la variable eventIdRcv mencionada anteriormente.
2. IRQ_clear: con esta instrucción se limpia cualquier interrupción de canal que se
encuentre pendiente para iniciar a atenderlas hasta que se esté listo.
3. IRQ_enable: se habilitan las interrupciones para la recepción de DMA (con la que el
DMA4 se encuentra sincronizado).
4. IRQ_globalEnable: con la que se habilitan todas las interrupciones globales.
5.1.8 Función main
Esta función se encuentra definida para albergar el código con el que serán
procesados los datos almacenados en buffer0_0, y además se invocan las funciones
necesarias para inicializar las interrupciones, el DMA y el McBSP. En el código
presentado en el apéndice C se encuentra dentro del main un lazo que fue programado
para corroborar que el código funcionara correctamente. Este lazo está sensando
continuamente el valor de flag, que le indica al main cuando se encuentran listos los
datos para ser procesados, cuando estos se encuentren listos lo único que se hace es
63
aumentar el valor de un contador, pero para evitar que esta variable se desborde se
monitoreó su valor para que no supere el valor de 500, momento en el que será llevada
de nuevo a cero. En la misma función main se limpia el valor de flag para evitar que se
tomen datos que aún no se encuentren listos. El valor del contador (k) se monitorea a
través del watch window en el CCS para verificar que el programa funcione
adecuadamente.
5.1.9 Función DMA_INT
Esta es la rutina de atención a interrupciones. En esta función se deshabilitan las
interrupciones mientras se está atendiendo la interrupción actual. Lo único que se hace en
esta interrupción es transferir los datos recibidos uno a uno en buffer0 hacia un espacio en
buffer0_0, cuando este último se encuentre lleno se le indica al main que hay datos listos
para ser procesados mediante flag; se limpia cualquier interrupción de canal que se
encuentre pendiente para iniciar a atenderlas hasta que se esté listo mediante IRQ_clear y
por último se vuelven a habilitar las interrupciones.
Lo último que falta por describir dentro del código de proyecto_1 es el archivo
Configuration2.tcf que es simplemente un archivo de configuración en el que se programan
gráficamente algunos registros, las rutas para encontrar las librerías, se relacionan las
interrupciones con rutinas de atención a interrupciones, entre otras cosas.
Uno de los registros que se configura dentro de este archivo es el CLKMD descrito
en la sección 4.1.2 y el registro PMST donde se encuentra el bit CLKOFF (sección 2.2 de
[9]) que debe estar en 0 para que las salidas de CLKOUT se encuentren habilitadas y de este
64
modo existan señales de reloj en los pines correspondientes. Estos registros fueron
programados de acuerdo a lo antes descrito como se puede observar en la siguiente figura:
Figura 5.2 Configuración de los registros PMST y CLKMD.
Elaboración propia.
Para relacionar DMA_INT con la interrupción de DMA se debe buscar la
interrupción de Hardware correspondiente al DMA4 que de acuerdo a 13 es la Hardware
Interrupt SINT12, por lo que dentro del menú Scheduling en HWI (Hardware Interrupt
65
Service Routine Manager) se busca esta interrupción y se escribe el nombre de la rutina de
atención a interrupciones como se muestra en la siguiente figura:
Figura 5.3 Rutina de atención a interrupciones.
Elaboración propia.
Habiendo configurado todo lo anterior se procedió a compilar el código y se obtuvo
el siguiente resultado:
Figura 5.4 Resultado de la compilación del proyecto.
Elaboración propia.
66
Como se puede observar de la figura anterior el código compila correctamente, pues
no hay errores de programación en el mismo. Existe únicamente un warning relacionado
con la sección especificada en el archivo Configuration2.cmd pero que no tiene ninguna
importancia.
5.2 Resultados en la interfaz TMS320VC5416 – AD7450
En la presente sección se presentarán los resultados correspondientes a la
implementación del digitalizador descrito a lo largo de este proyecto. Se inicia por la
interfaz para la señal bipolar hacia el convertidor de analógico a digital y luego los
resultados de la conexión entre este y el módulo de evaluación.
5.2.1 Resultados de la interfaz para el convertidor analógico a digital AD7450
Como se describió en la sección 4.1.1, el circuito de la figura 4.4 tiene el objetivo
de acoplar una señal bipolar hacia un conjunto de dos entradas diferenciales en el AD7450
aumentando el nivel de referencia de dicha señal de modo que la misma se vuelva unipolar.
Se sustituyó por tanto la interfaz de la figura 4.3 propuesta por el fabricante y se
presentaron los resultados de las simulaciones en la figura 4.5.
Se implementó el circuito de la figura 4.4 utilizando un LF353 el cual posee dos
amplificadores operacionales en un solo encapsulado y se probó la interfaz para diferentes
frecuencias, hasta cerca de 125KHz que es la frecuencia máxima recomendada para el
67
digitalizador de modo que se respete el criterio de 8 veces la frecuencia de muestreo que se
utiliza en la práctica para el procesamiento de señales.
En la siguiente figura se muestra una de las señales con las que se probó la interfaz,
en la misma VREF tenía un valor de 3,3V y la frecuencia de la señal fue de 25KHz, cabe
mencionar que la señal que se muestra es una señal en banda base del canal I con las que el
digitalizador deberá comúnmente operar:
Figura 5.5 Señal de entrada bipolar entrante a la interfaz.
Elaboración propia.
68
En la figura anterior se debe notar que la señal es de tipo bipolar y su referencia se
encuentra en 0V, además la escala de magnitud es de 50mV por división dando como
resultando una amplitud pico a pico de 1,41V aproximadamente.
A la salida de la interfaz se esperaría tener entonces una señal idéntica a la anterior
pero sumada a una señal DC de 3,3V, lo que daría como resultado una señal unipolar con
referencia en ese mismo nivel DC. La señal a la salida de la interfaz se muestra en la
siguiente figura:
Figura 5.6 Señal unipolar de salida de la interfaz.
Elaboración propia.
69
Como se puede observar de la figura anterior la interfaz cumple perfectamente el
objetivo, llevando su señal de entrada bipolar a una señal unipolar con referencia en VREF,
se debe tomar en cuenta que la escala de amplitud es diferente al caso de la figura 5.5 para
poder mostrar la referencia de la señal; la escala de tiempos sí es la misma en ambos casos
por lo que es fácil notar que no existe cambio en la fase de la señal y además que existe una
pequeña diferencia en la amplitud pico a pico (0,15V) debida a la tolerancia de las
resistencias con que la interfaz fue implementada (1kΩ ± 5%).
5.2.2 Resultados con el reloj para el manejo del AD7450
En esta sub-sección se describe el funcionamiento del reloj tomado de los puertos
del módulo de evaluación de acuerdo a la configuración del McBSP descrita en el capítulo
4 del presente proyecto.
Como fue descrito anteriormente el objetivo que se seguía con la configuración del
McBSP era generar un reloj internamente en el módulo de evaluación que manejara el
AD7450 con una frecuencia de reloj de cerca de 18MHz y obtener un pulso de
sincronización de trama de cerca de 1MHz.
Todo el diseño se especificó para el McBSP0 sin embargo se probó para todos los
puertos disponibles (el TMS320VC5416 posee tres puertos seriales buferizados).
Para el McBSP0 se obtuvieron los siguientes resultados que se muestran en las
figuras 5.7 y 5.8, en las mismas se observan relojes de 3.067MHz (en DC_BCLKX0) y de
70
47.96kHz (en DC_BFSX0), relojes que nada tienen que ver con los resultados que se
esperaban, lo anterior dio origen a una serie de investigaciones detalladas del
funcionamiento del módulo de evaluación, pues estos valores se obtuvieron siempre sin
importar el código que se cargara en la tarjeta, incluso si se cambiaban los valores en los
jumpers JP4, de los cuales se habló en la sección 4.1.2.
Figura 5.7 Reloj obtenido en pin DC_BFSX0.
Elaboración propia.
71
Los valores de frecuencia de las figuras 5.7 y 5.8 son, de acuerdo a [9] en su sección
2.2.7, la señal de reloj y el pulso de sincronización de trama que el CPLD configura por
default para el codec PCM3002 que viene con la tarjeta.
Lo anterior si bien es una indicación de lo que puede estar sucediendo no deja de ser
extraño, pues como se puede observar en la figura 5.9, proporcionada por el fabricante en
[9], la única conexión que existe hacia los pines DC_BCLKX0 y DC_BFSX0 es desde el
SN74CBTD3384.
Figura 5.8 Reloj obtenido en el pin DC_BCLKX0.
Elaboración propia.
72
El SN74CBTD3384 es simplemente un switch cuyo diagrama de pines y diagrama
lógico se muestra en la figura 5.10. Observando esta figura en conjunto con la 5.9 se puede
concluir por tanto que por ninguna razón deberían existir señales como las mostradas
anteriormente, las cuales se originan en el CPLD. Observando más atentamente el
esquemático de la figura 5.9 se nota un detalle aún más confuso, 1OE es un pin activo en
bajo, sin embargo, el mismo se encuentra conectado a tierra a través de un inversor, lo cual,
de acuerdo a 14 y como se puede observar en la figura 5.10 tendría deshabilitados los
switches y por tanto no existe conexión física entre los pines del puerto P2 y los pines
McBSP0 provenientes del DSP.
Figura 5.9 Esquemático de conexión entre el McBSP0 y el puerto P2.9
Tomado de “TMS320C5416 DSK Technical Reference”, 2002, página B-10.
73
Lo descrito anteriormente es un problema grave pues la información que provee el
fabricante no está del todo bien aún si el inversor en el pin 1OE fuera un error en el
esquemático, pues existe una conexión de algún tipo con los pines DC_BCLKX0 y
DC_BFSX0 en el puerto P2 y el CPLD que no se muestra en los documentos dados por el
fabricante en [9].
La segunda alternativa fue cargar la configuración elaborada al McBSP1 con
algunos pocos cambios al programa realizado en CCS (en la función init_Mcbsp y en la
configuración del DMA), esto se intentó hacer pero se obtuvieron los mismos resultados
mostrados anteriormente y un problema más, como se puede observar en la tabla D.9
incluida en los apéndices, el pin 42 del puerto P2 (DC_BDRR1) se encuentra en tercer
estado, lo cual imposibilitaría al McBSP1 a recibir los datos que generaría el AD7450, por
lo cual realizar la conexión para este puerto no tendría ningún sentido.
Figura 5.10 Diagrama de pines y diagrama lógico del SN74CBTD3384.14
Tomado de “SN54CBTD3384, SN74CBTD3384 10-bit fet bus switches with level shifting”,
páginas 1 y 2.
74
La opción restante para la conexión de la tarjeta con el convertidor de analógico a
digital es el McBSP2, sin embargo, como se conoce de cursos anteriores y como se
menciona también en [9] este puerto se encuentra reservado en el módulo de evaluación
para su funcionamiento con el codec PCM3002, lo cual dificulta también la conexión del
AD7450 con este puerto.
La solución de los problemas descritos anteriores requeriría de modificaciones en el
hardware de la tarjeta, las cuales se salen de los alcances de este proyecto. Debido a todas
estas razones no fue posible implementar el digitalizador de señales en su totalidad, en el
proyecto se dejó por tanto listo el acople de la señal banda base con el AD7450, se trajeron
del exterior del país dos AD7450 y se elaboró todo el código necesario para el
funcionamiento del mismo en conjunto con el TMS320VC5416, pero, debido a las
limitaciones encontradas para los puertos del módulo de evaluación descritos anteriormente
no fue posible realizar pruebas sobre el código ni implementar por completo el digitalizador
diseñado.
CAPÍTULO 6: Conclusiones y recomendaciones
6.1 Conclusiones
·
Con el fin de sentar las bases del digitalizador que se propone en este proyecto es
necesario recurrir a un marco teórico sobre los procesos involucrados en la
digitalización de señales analógicas.
·
Es posible elaborar una descripción completa para la implementación del
digitalizador de señales banda base utilizando el AD7450, sin importar el no poder
utilizar el convertidor analógico a digital PCM3002 de la tarjeta de evaluación
TMS320VC5416 DSK y de la poca disponibilidad de dispositivos integrados
adecuados para la aplicación, evidenciando de esta manera los conocimientos
adquiridos a lo largo de todo el semestre, y permitiendo mostrar las mayores
limitantes y los mayores problemas que tiene el módulo de evaluación en este tipo
de aplicaciones.
·
Se mostraron los efectos de aliasing en los espectros señales muestreadas a
frecuencias inadecuadas y la importancia de la resolución en la aproximación del
proceso de cuantización como complemento de un correcto muestreo de señales
analógicas para llevar a cabo la digitalización de la misma.
75
76
·
El acople para la entrada al ADC diseñado, que utiliza un LF353, funciona
correctamente para los requerimientos en frecuencia, en contraposición al circuito
recomendado por el fabricante del AD7450 que sugiere una realimentación positiva
y es de difícil implementación.
·
Se mostró el gran conjunto de variables relacionadas con la realización del código
necesario para la implementación del digitalizador de señales banda base y las
tareas que realiza cada una de ellas dentro del mismo y las formas de configurarlas.
·
Se comprobaron las facilidades que tienen los equipos generadores digitales de
señales y osciloscopios disponibles en el laboratorio de telecomunicaciones para la
toma de capturas que evidencien el correcto funcionamiento de la interfaz para
señales bipolares a entrada diferencial.
·
El uso de un lenguaje como lo es MATLAB® permite visualizar los resultados de la
teoría relacionada con los procesos involucrados en la digitalización de señales
analógicas, de no ser con una herramienta como esta, se dificultaría la percepción de
los mismos.
77
6.2 Recomendaciones
·
Brindarle al estudiante mayores bases teóricas relacionadas con temas tan
interesantes como el desarrollado en este proyecto, de modo que se despierte el
interés de ellos para realizar proyectos en el área y que permitan a los mismos tener
una visión mas clara de los conceptos envueltos en ellos para facilidad de los
profesores durante el desarrollo teórico en cursos posteriores.
·
Para futuros proyectos relacionados con este tema y/o con la continuación directa de
este mismo, es conveniente primero que se realice una investigación acerca del
módulo de evaluación TMS320VC5416 más allá de los objetivos del proyecto, ya
que como se pudo corroborar en este proyecto existen situaciones que no se
encuentran descritas correctamente en la documentación de la misma y
principalmente relacionadas con el manejo de periféricos.
78
BIBLIOGRAFÍA
1. Analog Devices. “AD7450 Datasheet”. Obtenido en Mayo 21, 2008 de
http://www.analog.com/UploadedFiles/Data_Sheets/AD7450.pdf
2. Anderson N.W., Karami H.R., Mangold P., Wezelenburg M., “Software-Definable
Implementation of a Dual Mode TDCDMA/DCS1800 Transceiver” Obtenido en
Marzo 24, 2008 de http://www.csem.ch/slats/files/ACTSUM98.PDF
3. Bauch, G; Proakis, J y Salehi, M. “Contemporary Communication Systems Using
MATLAB® and Simulink®”, 2 edición, Thomson-Brooks/Cole, Canada, 2004.
4. Centro universitario de ciencias exactas e ingenierías, Universidad de Guadalajara.
“Práctica 1 Medición de la impedancia de entrada y salida Fuentes y cargas de
pequeña
señal”.
Obtenido
en
Marzo
30,
2008
de
http://proton.ucting.udg.mx/materias/mtzsilva/practica1/index.htm
5. Clifton, D. “How the Pros Develop Embedded Software: A no-nonsense guide for
developers”.
Obtenido
en
Junio
20,
2008
de
http://www.codelode.com/Book/HowToDevelop.pdf
6. Nassar, C. “Telecommunications Demystified”, 1 edición, LLH Technology
Publishing, Estados Unidos, 2001.
7. Proakis, J y Salehi, M. “Communication Systems Engineering”, 2 edición, Prentice
Hall, Estados Unidos, 2001.
8. Proakis, J. “Digital Communications”, 4 edición, McGraw-Hill, Estados Unidos,
2001.
79
9. Spectrum Digital Incorporated. “TMS320C5416 DSK Technical Reference”.
Spectrum Digital Inc, Estados Unidos, 2002.
10. Stremler, F. “Introducción a los sistemas de comunicaciones”, 3 edición, AddisonWesley Iberoamericana, Estados Unidos, 1993.
11. Texas Instruments Incorporated. “TMS320C54x Chip Support Library API
Reference Guide”. Texas Instruments, Estados Unidos, 1999.
12. Texas Instruments Incorporated. “TMS320C54x DSP Reference Set Volume 5:
Enhanced Peripherals”. Texas Instruments, Estados Unidos, 1999.
13. Texas Instruments Incorporated. “TMS320C54x DSP Reference Set Volume 1:
CPU and Peripherals”. Texas Instruments, Estados Unidos, 1999.
14. Texas Instruments. “SN54CBTD3384, SN74CBTD3384 10-BIT FET BUS
SWITCHES WITH LEVEL SHIFTING”. Obtenido en Julio 2, 2008 de
http://focus.ti.com/docs/prod/folders/print/sn74cbtd3384.html
15. Wikipedia, la enciclopedia libre. “Teorema de muestreo de Nyquist Shannon”.
Obtenido
en
Abril
28,
2008
http://es.wikipedia.org/wiki/Teorema_de_muestreo_de_Nyquist-Shannon
de
APÉNDICES
Apéndice A: Código en Matlab® para la simulación del proceso de
muestreo.
function y=muestreo(func,tp,f)
%MUESTREO
Realiza el muestreo de una señal temporal
%
Y=MUESTREO(FUNC,Tm,F)
%
func=la función dada en un archivo .m
%
tp=pasos en el vector de tiempos de func
%
f=frecuencia de muestreo a utilizar
y=zeros(size(func));
%señal muestreada tendrá tantos
%puntos como la señal a
muestrear
t=0:1/f:tp*(length(func)-1);
inst=round(t/tp+1);
%tiempos de muestreo
%instantes de muestreo
n=length(inst);
%número de muestras a tomar
%se toman las muestras
m=[];
m=func(inst);
for i=1:n-1
y([inst(i):inst(i+1)])=m(i);
y([inst(n):length(y)])=y(inst(n));
end
%se llenan los vectores
%retenedor de orden cero
Apéndice B: Código en Matlab® para la simulación del proceso de
cuantización.
function y=cuantizacion(func,nvref,vref,bits)
%CUANTIZACION
Realiza el proceso de cuantización sobre la señal
%
muetsreada func.
%
Y=CUANTIZACION(FUNC,NVREF,VREF,BITS)
%
%
%
%
func=señal muestrada de entrada dada
nvref=nivel desde el que hay que cuantizar
vref=nivel hasta el que hay que cuantizar
bits=número de bits del cuantizador
qs=(vref-nvref)/2^bits; %Se genera el vector de niveles
niv=[];
for i=0:2^bits-1
niv(i+1)=nvref+i*qs;
end
y=[];
%Lazo para el proceso de cuantización
for j=1:length(func)
for i=1:2^bits-1
if(func(j)>=niv(i) & func(j)<niv(i+1))
y(j)=niv(i);
elseif(func(i)>=niv(2^bits))
y(j)=niv(2^bits);
end
end
end
plot(y)
Apéndice C: Código en CCS para la implementación del digitalizador de
señales analógicas utilizando el AD7450.
/*******************************************************************/
/* Nombre del archivo: C5416_DMA_MCBSP_Proyecto.c
*/
/* DESCRIPTION: Este programa utiliza el Mcbsp0 para leer
*/
/*
muestras de manera continua desde el AD7450 12-bit 1MSPS
*/
/*
Convertidor analógico a digital. Las muestras son guardadas */
/*
en un buffer llamado buffer0_0 en el espacio de datos.
*/
/* AUTOR
: Rodrigo Chacón Quesada, Universidad de Costa Rica.
*/
/*
Elaborado en 2008 por Escuela de Ingeniería Eléctrica U.C.R. */
/* VERSION: 1.0
*/
/*******************************************************************/
/* Declaraciones */
#define CHIP_5416 1
#define Buffer_Sz1 1
#define buffermax 80
/*Tamaño de buffer0*/
/*Tamaño de buffer0_0*/
/* Encabezado */
#include
#include
#include
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<csl.h>
<csl_irq.h>
<csl_dma.h>
<csl_mcbsp.h>
<dsk5416.h>
/*Incluir las librerías necesarias*/
//----Definición de datos globales---void
void
void
void
void
initIrq( void );
initDma( void );
initMcbsp( void ); /*Definición de funciones*/
main( );
DMA_INT( void );
/* Se define el buffer donde se recibirán los datos*/
#pragma DATA_SECTION (buffer0, ".dma_mem0")
Int16 buffer0[Buffer_Sz]; //Arreglo de datos del ADC
Int16 buffer0_0[buffermax];
/* Variables del DSP/BIOS */
DMA_Handle
C5416_DMA_MCBSP_hDmaRcv;
MCBSP_Handle C5416_DMA_MCBSP_hMcbsp;
/* Variables Globales */
int flag=0;
//Bandera para la rutina de atención a interrupciones
int j=0;
//Contador para tamaño máximo de buffer0_0
Uint16 eventIdRcv;
//Se utiliza para inicializar las interrupciones
/* Configuración del DMA */
static DMA_Config dmaCfgRcv={
DMA_PRIORITY_HI,
DMA_DMPREC_AUTOIX_USE_DMA0,
DMA_DMMCR_RMK(
DMA_DMMCR_AUTOINIT_OFF,
DMA_DMMCR_DINM_ON,
DMA_DMMCR_IMOD_FULL_ONLY,
DMA_DMMCR_CTMOD_ABU,
DMA_DMMCR_SLAXS_DEFAULT,
DMA_DMMCR_SIND_NOMOD,
DMA_DMMCR_DMS_DATA,
DMA_DMMCR_DLAXS_DEFAULT,
DMA_DMMCR_DIND_NOMOD,
DMA_DMMCR_DMD_DATA
),
/* Transfer Mode Control Register */
DMA_DMSFC_RMK(
DMA_DMSFC_DSYN_REVT0,
DMA_DMSFC_DBLW_OFF,
/*
DMA_DMSFC_FRAMECNT_DEFAULT
),
Sync Select and Frame Count Register */
(DMA_AdrPtr)((Uint16)(_MCBSP_DRR10_ADDR)),
(DMA_AdrPtr)((Uint16)(buffer0)),
/* Source Address Register */
/* Destination Address Register */
DMA_DMCTR_RMK(
DMA_DMCTR_ELECNT_OF(Buffer_Sz1)
),
DMA_DMGSA_RMK(
DMA_DMGSA_DEFAULT
),
/* Element Count Register */
/* Global Source Address Reload Register */
DMA_DMGDA_RMK(
DMA_DMGDA_DEFAULT
),
/* Global Destination Address Reload Register */
DMA_DMGCR_RMK(
DMA_DMGCR_DEFAULT
),
/* Global Element Count Reload Register */
DMA_DMGFR_RMK(
DMA_DMGFR_DEFAULT
)
/* Global Frame Count Address Reload Register */
};
/* Configuración del McBSP */
static MCBSP_Config mcbspCfg0={
MCBSP_SPCR1_RMK(
MCBSP_SPCR1_DLB_OFF,
MCBSP_SPCR1_RJUST_RZF,
MCBSP_SPCR1_CLKSTP_DISABLE,
MCBSP_SPCR1_DXENA_OFF,
MCBSP_SPCR1_ABIS_DISABLE,
MCBSP_SPCR1_RINTM_FRM,
MCBSP_SPCR1_RRST_DISABLE
),
MCBSP_SPCR2_RMK(
MCBSP_SPCR2_FREE_YES,
MCBSP_SPCR2_SOFT_DEFAULT,
MCBSP_SPCR2_FRST_FSG,
MCBSP_SPCR2_GRST_CLKG,
MCBSP_SPCR2_XINTM_DEFAULT,
MCBSP_SPCR2_XRST_DISABLE
),
MCBSP_RCR1_RMK(
MCBSP_RCR1_RFRLEN1_DEFAULT,
MCBSP_RCR1_RWDLEN1_16BIT
),
MCBSP_RCR2_RMK(
MCBSP_RCR2_RPHASE_SINGLE,
MCBSP_RCR2_RFRLEN2_DEFAULT,
MCBSP_RCR2_RWDLEN2_DEFAULT,
MCBSP_RCR2_RCOMPAND_MSB,
MCBSP_RCR2_RFIG_NO,
MCBSP_RCR2_RDATDLY_0BIT
),
/*
/*
Serial Port Control Register 1
Serial Port Control Register 2
*/
*/
/*
Receive Control Register 1
*/
/*
Receive Control Register 2
*/
MCBSP_XCR1_RMK(
MCBSP_XCR1_XFRLEN1_DEFAULT,
MCBSP_XCR1_XWDLEN1_DEFAULT
),
MCBSP_XCR2_RMK(
MCBSP_XCR2_XPHASE_SINGLE,
MCBSP_XCR2_XFRLEN2_OF(0),
MCBSP_XCR2_XWDLEN2_DEFAULT,
MCBSP_XCR2_XCOMPAND_DEFAULT,
MCBSP_XCR2_XFIG_DEFAULT,
MCBSP_XCR2_XDATDLY_DEFAULT
),
MCBSP_SRGR1_RMK(
MCBSP_SRGR1_FWID_OF(15),
MCBSP_SRGR1_CLKGDV_OF(8)
),
MCBSP_SRGR2_RMK(
MCBSP_SRGR2_GSYNC_DEFAULT,
MCBSP_SRGR2_CLKSP_DEFAULT,
MCBSP_SRGR2_CLKSM_1,
/*
MCBSP_SRGR2_FSGM_FSG,
MCBSP_SRGR2_FPER_OF(17)
),
MCBSP_MCR1_RMK(
MCBSP_MCR1_RMCME_NO,
MCBSP_MCR1_RPBBLK_SF1, /*
MCBSP_MCR1_RPABLK_SF0,
MCBSP_MCR1_RMCM_CHENABLE
),
MCBSP_MCR2_RMK(
MCBSP_MCR2_XMCME_NO,
MCBSP_MCR2_XPBBLK_SF1, /*
MCBSP_MCR2_XPABLK_SF0,
MCBSP_MCR2_XMCM_ENNOMASK
),
MCBSP_PCR_RMK(
MCBSP_PCR_XIOEN_SP,
MCBSP_PCR_RIOEN_SP,
MCBSP_PCR_FSXM_INTERNAL,
MCBSP_PCR_FSRM_EXTERNAL,
MCBSP_PCR_CLKXM_OUTPUT,
MCBSP_PCR_CLKRM_INPUT,
MCBSP_PCR_SCLKME_0,
MCBSP_PCR_FSXP_ACTIVELOW,
MCBSP_PCR_FSRP_ACTIVELOW,
MCBSP_PCR_CLKXP_FALLING,
/*
/*
Transmit Control Register 1
*/
/*
Transmit Control Register 2
*/
Sample Rate Generator Register 1
Sample Rate Generator Register 2
*/
*/
Multichannel Control Register 1
*/
Multichannel Control Register 2
*/
/*
Pin Control Register
*/
MCBSP_PCR_CLKRP_FALLING
),
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
Receive Channel Enable Register Partition A
Receive Channel Enable Register Partition B
Receive Channel Enable Register Partition C
Receive Channel Enable Register Partition D
Receive Channel Enable Register Partition E
Receive Channel Enable Register Partition F
Receive Channel Enable Register Partition G
Receive Channel Enable Register Partition H
Transmit Channel Enable Register Partition A
Transmit Channel Enable Register Partition B
Transmit Channel Enable Register Partition C
Transmit Channel Enable Register Partition D
Transmit Channel Enable Register Partition E
Transmit Channel Enable Register Partition F
Transmit Channel Enable Register Partition G
Transmit Channel Enable Register Partition H
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
};
/* Funciones Auxiliares */
/***********************************************************************\
* Función: initMcbsp()
* Descripción: Habilita el Mcbsp0
\***********************************************************************/
void initMcbsp() {
C5416_DMA_MCBSP_hMcbsp = MCBSP_open(MCBSP_PORT0, MCBSP_OPEN_RESET);
MCBSP_config ( C5416_DMA_MCBSP_hMcbsp, &mcbspCfg0 );
MCBSP_start(C5416_DMA_MCBSP_hMcbsp,MCBSP_RCV_START|MCBSP_SRGR_START
|MCBSP_SRGR_FRAMESYNC,MCBSP_SAMPLE_RATE_DELAY_DEFAULT);
}
/***********************************************************************\
* Función: initDMA()
* Descripción: Habilita el DMAchannel4
\***********************************************************************/
void initDMA() {
C5416_DMA_MCBSP_hDmaRcv = DMA_open( DMA_CHA4, DMA_OPEN_RESET );
DMA_config( C5416_DMA_MCBSP_hDmaRcv, &dmaCfgRcv );
DMA_start( C5416_DMA_MCBSP_hDmaRcv );
}
/***********************************************************************\
*Función: initIrq()
*Descripción: Habilita las interrupciones y asocia la identificación de
*eventos con la interrupción del canal de DMA.
\***********************************************************************/
Void initIrq( void )
{
eventIdRcv = DMA_getEventId( C5416_DMA_MCBSP_hDmaRcv );
/* Limpiar cualquier interrupción de recepción de canal pendiente ( IFR ) */
IRQ_clear( eventIdRcv );
/* Habilitar interrupción de recepción de DMA ( IMR ) */
IRQ_enable( eventIdRcv );
/* Habilitar las interrupciones globales */
IRQ_globalEnable( );
}
/* Función main() */
/***********************************************************************\
* Función: main()
* Descripción:
\***********************************************************************/
void main() {
int k=0;
CSL_init();
/* Deshabilitar las interrupciones globales durante la configuración */
IRQ_globalDisable( );
/* Inicializar el controlador de DMA */
initDMA( );
/* Inicializar McBSP0 para la transferencia de datos */
initMcbsp( );
/* Inicializar las interrupciones */
initIrq( );
/* Re-habilitar las interrupciones globales*/
IRQ_globalEnable( );
while(1)
{
if(flag) {
k++;
/*Lazo para verificar el funcionamiento del programa*/
if(k>500)
k=0;
flag=0;
}
}
}
/***********************************************************************\
* Función: DMA_INT()
* Descripción: Rutina de atención a interrupciones, toma las muetras
* transferidas por el controlador de DMA al espacio de datos y las
* almacena en buffer0_0
\***********************************************************************/
void DMA_INT(void) {
IRQ_globalDisable( );
buffer0_0[j] = buffer0[0];
j++;
if (j==buffermax) {
j=0;
flag = 1;
}
IRQ_clear( IRQ_EVT_RINT0 );
IRQ_globalEnable( );
}
/***********************************************************************\
* Fin de C5416_DMA_MCBSP_Proyecto.c
\**************************************************************************/
Apéndice D: Tablas
Tabla D.1 Registros del McBSP.12
Tabla D.2 Registros del McBSP (continuación).12
Tabla D.3 Interrupciones al CPU y sincronización de eventos con el DMA del
McBSP.12
Tabla D.4 Registros del DMA.12
Tabla D.5 Registros del DMA (continuación).12
Tabla D.6 Mapeo de memoria para el DMA de la serie ´5410.12
Tabla D.7 Mapeo de memoria para el DMA de la serie ´5410 (continuación).12
Tabla D.8 Opciones para los eventos de sincronización de DMA en el ´5410.12
Tabla D.9 Conector para expansión con periféricos, P2.9
Apéndice E: Configuración del McBSP
En el desarrollo del presente apéndice se hará una justificación de cada uno de los
valores de los bits de configuración dentro de los registros del McBSP. En el archivo
csl_mcbsp.h (desarrollado por Texas Instruments Incorporated) que se incluirá dentro del
proyecto nombrado como Proyecto_1 (que contiene el código desarrollado para la
implementación del digitalizador de la señal analógica en banda base) se definen una serie
de constantes y estructuras que serán utilizadas para representar los valores con los que se
configurarán los registros antes mencionados.
E.1 Serial Port Control Register 1
Figura E.1 Registro de control para el puerto serial 1 (SPCR1).12
Digital Loop Back Mode (DLB) (Sección 2.5.2.5 de [12])
Consiste en un modo de trabajo en el que los pines DR, FSR, CLKR se encuentran
conectados internamente a través de multiplexores a DX, FSX y CLKX respectivamente,
esto permite realizar pruebas sobre un código para el puerto serial con un único DSP, por lo
que para el caso de este proyecto DLB debe estar deshabilitado, entonces:
DLB = 0 = MCBSP_SPCR1_DLB_OFF
Receive Data Justification and Sign-Extension (RJUST) (Sección 2.3.8 de [12])
Con estos bits se le indica al DSP si los datos en los registros DRR[1,2] se
encuentran justificados a la derecha o a la izquierda con respecto al bit más significativo, y
además si se hace relleno con ceros en los bits más significativos o en los menos
significativos dependiendo del tipo de justificación seleccionada. Además en el caso de
justificación a la derecha, se puede hacer extensión de signo en los bits más significativos.
El formato utilizado para el caso en cuestión será justificado a la derecha con
relleno de ceros en los bits más significativos, por lo tanto:
RJUST = 00b = MCBSP_SPCR1_RJUST_RZF
Clock Stop Mode (CLKSTP) (Sección 2.7.1 de [12])
Estos dos bits en conjunto con el bit CLKXP del registro PCR, el cual será descrito
más adelante, se utilizan para configurar el Clock Stop Mode del McBSP, el cual es
compatible con el protocolo SPI, que es una configuración del tipo maestro-esclavo, con un
dispositivo maestro y uno o más dispositivos esclavos. Los bits de CLKSTP habilitan o
deshabilitan el Clock Stop Mode y seleccionan una de las dos variantes para la
temporización.
En el presente trabajo no se trabajará con el protocolo SPI por lo que:
CLKSTP = 0Xb = MCBSP_SPCR1_CLKSTP_DISABLE
A-bis interface functionality (ABIS) (Sección 2.6.4 de [12])
Este modo de operación se encuentra relacionado con enlaces PCM, lo cual no se
ajusta al caso del presente proyecto, por lo tanto:
ABIS = 0 = MCBSP_SPCR1_ABIS_DISABLE
DX Enable (DXENA) (Sección 2.3.4.8 de [12])
Este bit controla el estado de alta impedancia en DX, por lo que dependiendo del
modo de operación (modo normal o modo A-bis) se le agrega un retardo extra al primer bit
o a todos los bits transmitidos al pasar del estado de alta impedancia a un estado válido
desde el reconocimiento de un flanco creciente en CLKX.
Para el caso del presente proyecto no habrá transmisión de datos por lo que:
DXENA = 0 = MCBSP_SPCR1_DXENA_OFF
Receive Interrupt Mode (RINTM) (Sección 2.3.3 de [12])
En el caso de este proyecto se utilizará la opción 1 de la sección 2.3.3 de [12], en la
cual se generará una interrupción al CPU cuando se finalice con la recepción de una
palabra (por tanto relacionada con el bit RRDY), es decir, cuando se finalice a una
transmisión por parte del AD7450, de modo que el controlador de DMA (que se sincroniza
con un evento de recepción por parte del MCBSP) transfiera los datos en el momento que se
encuentren listos en el DRR del MCBSP correspondiente.
Entonces:
RINTM = 00b = MCBSP_SPCR1_RINTM_RRDY
Receive Synchronization Error (RSYNCERR) (Sección 2.3.7.2 de [12])
Está relacionado con la decisión que toma el CPU al recibir un pulso de
sincronización de trama. Toma el valor de 1 al darse un pulso de sincronización de trama
inesperado. En general es manejado por la lógica interna y sólo puede ser limpiado por un
reset en el receptor o por el usuario al escribir un cero en este bit. De modo que para
asegurar que se inicie el programa correctamente:
RSYNCERR = 0 = MCBSP_SPCR1_RSYNCERR_DEFAULT
Receiver Reset (RRST) (Sección 2.3.1 de [12])
Se utiliza para hacer un reset de manera independiente al receptor y de este modo
llevar la máquina de estados al estado inicial, lo cual implica un reset de todos los
contadores y bits de estado, que en el caso del receptor incluyen RFULL, RRDY y
RSYNCERR. Los resets no son deseables para el caso de este proyecto en particular por lo
que:
RRST = 0 = MCBSP_SPCR1_RRST_DISABLE
Los bits 8,9 y 10 de este registro están reservados por lo que no hay datos asociados
con ellos, sin embargo estos siempre son leídos como ceros. Además RFULL y RRDY son
registros de sólo lectura por lo que tampoco pueden ser configurados y son también escritos
como cero en la configuración.
Se tiene por tanto que la línea de código dentro de la configuración para el McBSP
para este primer registro debe ser:
MCBSP_SPCR1_RMK(MCBSP_SPCR1_DLB_OFF, MCBSP_SPCR1_RJUST_RZF,
MCBSP_SPCR1_CLKSTP_DISABLE, MCBSP_SPCR1_DXENA_OFF,
MCBSP_SPCR1_ABIS_DISABLE, MCBSP_SPCR1_RINTM_RRDY,
MCBSP_SPCR1_RRST_DISABLE) /* Serial Port Control Register 1 */
E.2 Serial Port Control Register 2
Figura E.2 Registro de control para el puerto serial 2 (SPCR2).12
Emulation FREE and SOFT Bits (FREE y SOFT) (Sección 2.8 de [12])
Estos bits determinan el estado del reloj CLKX cuando se encuentra un breakpoint
en el proceso de compilación del lenguaje de alto nivel, si FREE = 1, entonces el valor de
SOFT no importa, y lo que sucede es que el reloj no se detiene durante el breakpoint por lo
que la transmisión no se detiene tampoco (free running). Si en cambio FREE = 0, entonces
ahora SOFT si toma efecto. Si SOFT = 0, entonces se detiene el reloj y la transmisión se
aborta, por otro lado, si SOFT = 1, y una transmisión está en progreso, esta no se detiene
hasta que se complete la transferencia.
Para el caso de este proyecto los breakpoints no serán necesarios durante el
funcionamiento normal del programa por lo que:
FREE = 1 = MCBSP_SPCR2_FREE_YES
SOFT = X = MCBSP_SPCR2_SOFT_DEFAULT
Frame-Sync Generator Reset (FRST) (Sección 2.3.1 de [12])
Si FRST = 1, la señal de sincronización de trama FSG es habilitada y se generara
después de (FPER + 1) ciclos de CLKG, todos los contadores de trama son inicializados de
acuerdo a sus valores programados, por tanto:
FRST = 1 = MCBSP_SPCR2_FRST_FSG
Sample-Rate Generator Reset (GRST) (Sección 2.3.1 de [12])
Si GRST = 1, CLKG es habilitado y manejado de acuerdo a los valores
programados en el SRGR[1,2], entonces:
GRST = 1 = MCBSP_SPCR2_GRST_CLKG
Transmit Interrupt Mode (XINTM) (Sección 2.3.3 de [12])
Funciona de manera muy similar al caso de RINTM descrito para el SPCR1
anteriormente, sin embargo aplica para el caso de transmisión. Se le asignará el valor de
XINTM = 00b, que si bien lo que hace es generar una interrupción en cada palabra serial al
cambiar el bit XRDY en SPCR2, en el caso del presente proyecto no se realizan
transmisiones, por lo que el valor de estos bits no tendrá ningún efecto. Se tiene entonces
que:
XINTM = 00b = MCBSP_SPCR2_XINTM_DEFAULT
Transmit Synchronization Error (XSYNCERR) (Sección 2.3.7.2 de [12])
Funciona de manera muy similar al caso de RSYNCERR descrito para el SPCR1
anteriormente, sin embargo aplica para el caso de transmisión. Escribir un uno en este bit
inicia la condición de error, que se utiliza principalmente con propósitos de prueba o a
menos que esta condición se requiera. Por lo tanto:
XSYNCERR = 0 = MCBSP_SPCR2_XSYNCERR_DEFAULT
Transmitter reset (XRST) (Sección 2.3.1 de [12])
Es el equivalente a RRST del SPCR1 para el caso del transmisor. Debido a lo
anterior:
XRST = 0 = MCBSP_SPCR2_XRST_DISABLE
Los bits 10 al 15 son leídos como ceros pues son reservados, y los bits XEMPTY y
XRDY son bits de sólo lectura, por lo que no pueden ser configurados y también son
escritos como cero en la configuración.
La línea de código dentro de la configuración del McBSP para este registro sería
entonces:
MCBSP_SPCR2_RMK(MCBSP_SPCR2_FREE_YES,
MCBSP_SPCR2_SOFT_DEFAULT, MCBSP_SPCR2_FRST_FSG,
MCBSP_SPCR2_GRST_CLKG, MCBSP_SPCR2_XINTM_DEFAULT,
MCBSP_SPCR2_XRST_DISABLE) /* Serial Port Control Register 2 */
E.3 Pin Control Register
Figura E.3 Registro de control de pines (PCR).12
Receive/Transmit General Purpose I/O Mode [(R/X)IOEN] (Sección 2.9 de [12])
Los pines CLKX, FSX, DX, CLKR, FSR y DR pueden ser utilizados como pines de
entrada/salida de propósito general en vez de pines del puerto serial si los valores de los
bits en cuestión se encuentran en uno, y además los bits (R/X)RST de los registros antes
descritos se encuentran en cero. Para el caso de este proyecto en particular el uso que se les
quiere dar a dichos pines es el de pines de puerto serial, por lo tanto:
RIOEN = 0 = MCBSP_PCR_RIOEN_SP
XIOEN = 0 = MCBSP_PCR_XIOEN_SP
Transmit Frame-Synchronization Mode (FSXM) (Sección 2.5.3.3 de [12])
De acuerdo al esquema de conexión propuesto para la tarjeta de evaluación y el
AD7450, FSX será la señal que maneje el pin C S conforme a los valores programados en
el SRGR2, para habilitar esta funcionalidad FSXM debe ser igual a 1, el valor para este bit
debe ser entonces:
FSXM = 1 = MCBSP_PCR_FSXM_INTERNAL
Receive Frame-Synchronization Mode (FSRM) (Sección 2.5.3.2 de [12])
Será configurado tomando en cuenta el diagrama de conexión propuesto para la
tarjeta de evaluación y el AD7450, en el cual se muestra el pin FSR controlado por una
fuente externa, en este caso por el pin FSX. El valor de este bit será por lo tanto:
FSRM = 0 = MCBSP_PCR_FSRM_EXTERNAL
Transmitter Clock Mode (CLKXM) (Sección 2.5.2.7 de [12])
Su valor está también relacionado con el esquema de conexión para la tarjeta de
evaluación y el AD7450. Las acciones de este bit también dependen de su modo de
operación (modo normal o modo SPI). Para el modo de operación normal (que es el modo
con el que se trabajará en este proyecto), cuando se selecciona el valor de este bit como
uno, CLKX trabajaría como un pin de salida manejado internamente del mismo modo que la
señal FSG. Es por eso que:
CLKXM = 1 = MCBSP_PCR_CLKXM_OUTPUT
Receiver Clock Mode (CLKRM) (Sección 2.5.2.6 de [12])
El efecto de este bit también depende del modo de operación del McBSP,
específicamente si se está trabajando en Digital Loop Back Mode o no. Tomando en cuenta
que a DLB se le asignó un valor de cero, este bit será configurado con un cero también, de
modo que el reloj asociado a él sea manejado por una fuente externa, que en este caso será
el pin CLKX, según los requerimientos del esquema de conexión entre el módulo de
evaluación del DSP y el AD7450. Por lo tanto:
CLKRM = 0 = MCBSP_PCR_CLKRM_INPUT
Los bits del 0 al 3 están relacionados con las polaridades del pulso de
sincronización de trama de recepción y del pulso de sincronización de trama de
transmisión, así como de las polaridades del reloj de transmisión y del reloj de recepción.
Dado que las polaridades de los pulsos de sincronización de trama de recepción y del reloj
de recepción son dependientes de FSX y CLKX respectivamente (como se puede observar
en la figura 4.7), se les debe asignar un valor que haga que su polaridad coincida con estos
últimos, mientras que para el caso de la polaridad del pulso de sincronización de trama de
transmisión este se hará activo en bajo, dado que el pin C S del AD7450 es activo en bajo,
y para CLKX se hará una muestra de los datos recibidos en el flanco decreciente de este,
según las especificaciones del ADC. De este modo se tiene:
FSXP = 1 = MCBSP_PCR_FSXP_ACTIVELOW
FSRP = 1 = MCBSP_PCR_FSRP_ACTIVELOW
CLKXP = 1 = MCBSP_PCR_CLKXP_FALLING
CLKRP = 0 = MCBSP_PCR_CLKRP_FALLING
Los bits 14 y 15 están reservados por lo que serán siempre leídos como ceros,
mientras que los bits 4 al 6 son de sólo lectura. Aunque el bit 7 es mostrado en la figura
anterior como de sólo lectura, actualmente puede ser configurado, se le asignó el nombre de
SCLKME, y está relacionado con el bit CLKSM del SRGR2 para el manejo del reloj
mediante una fuente externa o internamente utilizando el reloj del CPU. En el caso del
presente trabajo el reloj que se utilizará será generado internamente, por lo que los valores
de SCLKME y CLKSM serán 0 y 1 respectivamente.
SCLKME = 0 = MCBSP_PCR_SCLKME_0
Para el registro PCR la línea de código correspondiente dentro de la configuración
del McBSP será:
MCBSP_PCR_RMK(MCBSP_PCR_XIOEN_SP, MCBSP_PCR_RIOEN_SP,
MCBSP_PCR_FSXM_INTERNAL, MCBSP_PCR_FSRM_EXTERNAL,
MCBSP_PCR_SCLKME_0, MCBSP_PCR_CLKXM_OUTPUT,
MCBSP_PCR_CLKRM_INPUT, MCBSP_PCR_FSXP_ACTIVELOW,
MCBSP_PCR_FSRP_ACTIVELOW, MCBSP_PCR_CLKXP_FALLING,
MCBSP_PCR_CLKRP_FALLING) /* Pin Control Register */
E.4 Receive Control Register 1
Figura E.4 Registro de control para la recepción 1 (RCR1).12
Un pulso de sincronización de trama le indica al McBSP el inicio de una
transmisión, el conjunto de datos que le sigue a un pulso de sincronización de tramas podría
tener dos fases, phase 1 y phase 2. El número de fases se selecciona con el bit (R/X)PHASE
en los registros RCR2 y XCR2 para recepción y transmisión respectivamente. El número de
palabras por trama y bits por palabra puede ser seleccionado de manera independiente para
cada fase utilizando los espacios (R/X)FRLEN[1,2] y (R/X)WDLEN[1,2]. El número
máximo de palabras por trama es 128 para una única fase y 256 para dos fases, y el número
de bits por palabra puede ser seleccionado de entre 8, 12, 16, 20, 24 o 32 bits.
Para el caso de este proyecto en particular, se utilizará una única palabra de 16 bits
por trama (en el AD7450 son agregados 4 ceros a la aproximación de 12 bits en la
transmisión), lo que a su vez quiere decir que se requiere de una sola fase. Se debe tener en
cuenta que el número de palabras por trama debe ser programado en el registro como el
número real de palabras por trama menos 1, por lo tanto para el RCR1 se tiene:
RFRLEN1 = 0000000b = MCBSP_RCR1_RFRLEN1_DEFAULT
RWDLEN1 = 010b = MCBSP_RCR1_RWDLEN1_16BIT
Los bits 0 al 4 y el bit 15 son reservados por lo que serán siempre leídos como
ceros.
De todo lo anterior se puede expresar la línea de código correspondiente al RCR1
dentro de la configuración del McBSP como:
MCBSP_RCR1_RMK(MCBSP_RCR1_RFRLEN1_DEFAULT,
MCBSP_RCR1_RWDLEN1_16BIT) /* Receive Control Register 1 */
E.5 Receive Control Register 2
Figura E.5 Registro de control para la recepción 2 (RCR2).12
Dado que, como se justificó anteriormente, se requiere de una única fase, RFRLEN2
y RWDLEN2 no importan, es decir, se les puede asignar cualquier valor. Así, valores
válidos para estos parámetros serían:
RPHASE = 0 = MCBSP_RCR2_RPHASE_SINGLE
RFRLEN2 = XXXXXXXb = MCBSP_RCR2_RFRLEN2_DEFAULT
RWDLEN2 = XXXb = MCBSP_RCR2_RWDLEN2_DEFAULT
Receive companding mode (RCOMPAND) (Sección 2.4 de [12])
Está relacionado con el proceso de compresión que se utiliza para los datos en los
enlaces PCM. En el presente proyecto no se trabajará con enlaces PCM, además de que no
se tienen palabras de 8 bits que es otra condición necesaria para poder utilizar esta
característica, de manera que el modo de compresión para los datos recibidos debe estar
deshabilitado y la transmisión se inicia con el MSB primero (según las hojas de datos del
AD7450), es decir:
RCOMPAND = 00b = MCBSP_RCR2_RCOMPAND_MSB
Receive Frame Ignore (RFIG) (Sección 2.3.6.2 de [12])
Se encuentra muy relacionado con RSYNCERR ya que forma parte del proceso de
decisión al recibir un pulso de sincronización de trama. Al recibir un pulso de
sincronización de trama este podría ser o no inesperado, si no lo es entonces se reciben los
datos de manera normal, pero sí lo es, existen dos posibles acciones a tomar dependiendo
del valor de RFIG. En caso de que este bit sea 1 cuando se recibe un pulso de
sincronización de trama inesperado, entonces este simplemente se ignora y la recepción
continúa sin interrupciones, si por el contrario este bit es 0 en el mismo momento, la
recepción se aborta, el valor de RSYNCERR cambia a 1, inmediatamente se inicia una
nueva recepción y la palabra anterior se pierde. En el caso de este proyecto en particular es
deseable que se ignoren estos pulsos inesperados de modo que:
RFIG = 1 = MCBSP_RCR2_RFIG_NO
Receive data delay (RDATDLY) (Sección 2.3.4.6 de [12])
El inicio de una trama está definido por el primer ciclo de reloj en el cual un pulso
de sincronización de trama se encuentra activo. El inicio de la recepción o transmisión de
datos con respecto al inicio de la trama puede ser retrasada si se requiere. A este retardo se
le llama retardo de datos. RDATDLY y XDATDLY fijan el retardo de datos en una recepción
y una transmisión respectivamente. Para el presente caso se asumirá que los datos para
recepción se encuentran listos en el mismo ciclo de reloj serial, por lo tanto:
RDATDLY = 00b = MCBSP_RCR2_RDATDLY_0BIT
La línea de código correspondiente para el RCR2 dentro de la configuración del
McBSP es entonces:
MCBSP_RCR2_RMK(MCBSP_RCR2_RPHASE_SINGLE,
MCBSP_RCR2_RFRLEN2_DEFAULT, MCBSP_RCR2_RWDLEN2_DEFAULT,
MCBSP_RCR2_RCOMPAND_MSB, MCBSP_RCR2_RFIG_NO,
MCBSP_RCR2_RDATDLY_0BIT) /* Receive Control Register 2 */
E.6 Transmit Control Register 1
Figura E.6 Registro de control para la transmisión 1 (XCR1).12
La transmisión de datos en el caso de este proyecto no es necesaria, por lo que los
valores que se le den a los parámetros XFRLEN[1,2] y a XWDLEN[1,2] son indiferentes.
Las funciones de estos parámetros se expusieron anteriormente cuando se hizo referencia
del RCR1. Se puede tomar entonces:
XFRLEN1 = XXXXXXXb = MCBSP_XCR1_XFRLEN1_DEFAULT
XWDLEN1 = XXXb =MCBSP_XCR1_XWDLEN1_DEFAULT
Los bits 0 al 4 y el bit 15 son reservados por lo que serán siempre leídos como
ceros.
Se tendría por tanto que la palabra de código correspondiente a XCR1 dentro de la
configuración del McBSP es la siguiente:
MCBSP_XCR1_RMK(MCBSP_XCR1_XFRLEN1_DEFAULT,
MCBSP_XCR1_XWDLEN1_DEFAULT) /* Transmit Control Register 1 */
E.7 Transmit Control Register 2
Figura E.7 Registro de control para la transmisión 2 (XCR2).12
Por las mismas razones que para el caso de RCR2 y XCR1 expuestas anteriormente:
XPHASE = 0 = MCBSP_XCR2_XPHASE_SINGLE
XFRLEN2 = 0000000b = MCBSP_XCR2_XFRLEN2_OF(0)
XWDLEN2 = 000b = MCBSP_XCR2_XWDLEN2_DEFAULT
XCOMPAND = 00b = MCBSP_XCR2_XCOMPAND_DEFAULT
XFIG = 0 = MCBSP_XCR2_XFIG_DEFAULT
XDATDLY = 00b = MCBSP_XCR2_XDATDLY_DEFAULT
Aunque en algunos casos se podría tener cualquier otro valor. La línea de código
correspondiente para este registro es entonces:
MCBSP_XCR2_RMK(MCBSP_XCR2_XPHASE_SINGLE,
MCBSP_XCR2_XFRLEN2_OF(0), MCBSP_XCR2_XWDLEN2_DEFAULT,
MCBSP_XCR2_XCOMPAND_DEFAULT, MCBSP_XCR2_XFIG_DEFAULT,
MCBSP_XCR2_XDATDLY_DEFAULT) /* Transmit Control Register 2 */
E.8 Sample Rate Generator Register 1
Figura E.8 Registro del generador de la tasa de muestreo 1 (SRGR1).12
Frame Width (FWID) (Sección 2.5.3.1 de [12])
El valor de (FWID + 1) determina el ancho del pulso de sincronización de trama,
FSG, durante su período activo. Tomando en cuenta el punto 6) de la sección 4.2 de este
documento, a FWID se le debe asignar un valor de 15. Es por eso que:
FWID = 00001111b = MCBSP_SRGR1_FWID_OF(15)
Sample Rate Generator Clock Divider (CLKGDV) (Sección 2.5.2.2 de [12])
CLKG tendrá un valor de frecuencia igual a 1/(CLKGDV+1) del reloj del CPU para
este caso. Lo que significa que el reloj del CPU (o incluso una señal externa de reloj) es
dividido por un valor entre 1 y 256.
En el punto c) de la sección 4.2 del presente documento se concluyó que el valor
por el cual se debe dividir el reloj del CPU es 9, por lo cual CLKGDV debe ser 8. Por lo
tanto:
CLKGDV = 00001000b = MCBSP_SRGR1_CLKGDV_OF(8)
La línea de código correspondiente al SRGR1 dentro de la configuración del McBSP
es entonces:
MCBSP_SRGR1_RMK(MCBSP_SRGR1_FWID_OF(15),
MCBSP_SRGR1_CLKGDV_OF(8)) /* Sample Rate Generator Register 1 */
E.9 Sample Rate Generator Register 2
Figura E.9 Registro del generador de la tasa de muestreo 2 (SRGR2).12
McBSP Sample Rate Generator Clock Mode (CLKSM) (Sección 2.5.2.1 de ([12])
A través de este bit se le especifica al McBSP si se va a utilizar su reloj interno
(CLKSM = 1) o si se utilizará una señal externa de reloj (CLKSM = 0). La configuración del
McBSP desarrollada en esta sección se ha basado en la utilización del reloj interno del
CPU, por lo que:
CLKSM =1 = MCBSP_SRGR2_CLKSM_1
Sample Rate Generator Clock Synchronization (GSYNC) y CLKS Polarity Clock Edge
Select (CLKSP) (Secciones 2.5.2.4 y 2.5.2.3 de [12])
Se utilizan únicamente cuando (CLKSM = 0) por lo que el valor que se le de a estos
bits no tiene relevancia. Se tiene entonces que:
GSYNC =X = MCBSP_SRGR2_GSYNC_DEFAULT
CLKSP = X = MCBSP_SRGR2_CLKSP_DEFAULT
Sample Rate Generator Transmit Frame-Synchronization Mode (FSGM) (Sección
2.5.3.3 de [12])
El valor de este bit debe ser uno de modo que la señal de salida a través del pin FSX
sea FSG manejada de acuerdo a los valores programados en los registros de control y
siguiendo la polaridad indicada en FSXP. Se tiene entonces que:
FSGM = 1 = MCBSP_SRGR2_FSGM_FSG
Frame Period (FPER) (Sección 2.5.3.1 de [12])
Al igual que CLKGDV, el valor de FPER se justificó en la sección 4.2 del presente
documento. Sin embargo se debe tener un cuidado extra al configurar el valor de estos bits
en el registro, pues es el valor de (FPER + 1) el que determina cuando el próximo pulso de
sincronización de trama se vuelve activo, por lo que el valor a programar en el registro para
FPER será 17, es decir:
FPER = 000000010001b = MCBSP_SRGR2_FPER_OF(17)
La línea de código correspondiente al SRGR2 dentro de la configuración del McBSP
es entonces:
MCBSP_SRGR2_RMK(MCBSP_SRGR2_GSYNC_DEFAULT,
MCBSP_SRGR2_CLKSP_DEFAULT, MCBSP_SRGR2_CLKSM_1,
MCBSP_SRGR2_FSGM_FSG, MCBSP_SRGR2_FPER_OF(17)) /* Sample Rate
Generator Register 2 */
Los registros de control del McBSP que quedan por configurar tienen que ver con la
operación multicanal del puerto serial, en la cual las tramas son multiplexadas utilizando
time-division multiplexing (TDM). Para el caso de este proyecto este tipo de operación no
es de interés, por lo que debe ser deshabilitada. El procedimiento para hacer esto se
encuentra descrito en la sección 2.6.2 de [12], lo que se debe hacer es seleccionar RMCM =
0 y XMCM = 0 en MCR1 y MCR2 respectivamente.
Al estar deshabilitada la selección multicanal, todos los demás bits en los registros
MCR1 y MCR2 no son tomados en cuenta, al igual que el resto de los registros, por lo que
se les puede asignar cualquier valor.
Las líneas de código correspondientes a estos registros dentro de la configuración
del McBSP se muestran a continuación:
MCBSP_MCR1_RMK(MCBSP_MCR1_RMCME_NO,MCBSP_MCR1_RPBBLK_SF1,
MCBSP_MCR1_RPABLK_SF0,MCBSP_MCR1_RMCM_CHENABLE)/* Multichannel
Control Register 1 */
MCBSP_MCR2_RMK(MCBSP_MCR2_XMCME_NO,MCBSP_MCR2_XPBBLK_SF1,
MCBSP_MCR2_XPABLK_SF0,MCBSP_MCR2_XMCM_ENNOMASK) /*
Multichannel Control Register 2 */
0x0000,
/* Receive Channel Enable Register Partition A */
0x0000,
/* Receive Channel Enable Register Partition B */
0x0000,
/* Receive Channel Enable Register Partition C */
0x0000,
/* Receive Channel Enable Register Partition D */
0x0000,
/* Receive Channel Enable Register Partition E */
0x0000,
/* Receive Channel Enable Register Partition F */
0x0000,
/* Receive Channel Enable Register Partition G */
0x0000,
/* Receive Channel Enable Register Partition H */
0x0000,
/* Transmit Channel Enable Register Partition A */
0x0000,
/* Transmit Channel Enable Register Partition B */
0x0000,
/* Transmit Channel Enable Register Partition C */
0x0000,
/* Transmit Channel Enable Register Partition D */
0x0000,
/* Transmit Channel Enable Register Partition E */
0x0000,
/* Transmit Channel Enable Register Partition F */
0x0000,
/* Transmit Channel Enable Register Partition G */
0x0000
/* Transmit Channel Enable Register Partition H */
Apéndice F: Configuración del DMA
En esta sección se describirán los valores que tomarán cada uno de los parámetros
en los registros de control de DMA siguiendo las especificaciones antes mostradas y la
estructura de configuración para canales individuales en el DMA.
Iniciando por los valores de priority y de autoix se tiene que el primero de ellos
corresponde a la prioridad que se le dará al canal sobre los demás canales de DMA (puede
ser alta o baja), para este caso en particular será seleccionada como alta para el canal
número 4.
El valor de autoix por su parte se encuentra relacionado con el modo de
autoinicialización del DMA. El DMA puede configurarse para que se reinicialice
automáticamente luego de completar la transferencia de un bloque. Algunos de los registros
de DMA pueden ser configurados previamente para la próxima transferencia de un bloque a
través de los registros de recarga del DMA (DMGSA, DMGDA, DMGCR, y DMGFR). Cada
canal de DMA tiene su propio conjunto de registros de recarga. El valor que se escriba en
autoix le indicará al controlador si cada canal utilizará su propio conjunto de registros de
recarga (autoix = 1) o si todos los canales utilizarán los registros de recarga del canal cero,
que es la configuración por default (autoix = 0). En el presente trabajo la información no
será transmitida por bloque; como se mencionó anteriormente, se trabajará en modo ABU
que no requiere de estos registros de recarga, y además el modo de autoinicialización estará
deshabilitado. Entonces los valores que se le darán a estos dos bits descritos anteriormente
dentro de la configuración del DMA serán:
PRIORITY = DMA_PRIORITY_HI
AUTOIX = DMA_DMPREC_AUTOIX_USE_DMA0
F.1 Transfer Mode Control Register
Figura F.1 Registro de control para el modo de transferencia (DMMCRn).12
DMA autoinitialization mode bit (AUTOINIT) (Sección 3.2.3.4 de [12])
Este bit le indica al controlador de DMA si se habilita o deshabilita el modo de
autoinicialización, en el caso de este proyecto este debe estar deshabilitado por lo que:
AUTOINIT = DMA_DMMCR_AUTOINIT_OFF
DMA interrupt generation mask bit (DINM) (Sección 3.2.3.4 de [12])
Está relacionado con la generación de interrupciones por parte del DMA, al darle un
valor de uno a este bit se generan interrupciones con base en el bit IMOD por lo que:
DINM = DMA_DMMCR_DINM_ON
DMA interrupt generation mode bit (IMOD) (Sección 3.2.3.4 de [12])
Su valor puede realizar distintas operaciones dependiendo del modo de operación
que se esté utilizando (modo ABU o multi-trama). Como se ha mencionado anteriormente,
el modo de operación en este caso será el modo ABU por lo que se le dará a este bit un
valor de 0, de modo que el DMA genere una interrupción únicamente cuando el buffer
destino se encuentre lleno. Se tiene entonces que:
IMOD = DMA_DMMCR_IMOD_FULL_ONLY
DMA Transfer Counter Mode Control Bit (CTMOD) (Sección 3.2.3.4 de [12])
Este bit le indica al controlador de DMA el modo de operación con el que se está
trabajando. Como se ha mencionado varias veces anteriormente, para este proyecto se
utilizará el modo ABU por lo que:
CTMOD = DMA_DMMCR_CTMOD_ABU
DMA Source Address Transfer Index Mode Bit (SIND) (Sección 3.2.3.4 de [12])
Este espacio en el registro en cuestión tiene la función de indicarle al controlador de
DMA si debe o no modificar la dirección del origen de los datos, y en caso de tener que
hacerlo también se le indica cómo debe hacerlo. La dirección del destino para este caso en
particular no debe modificarse por lo que:
SIND = DMA_DMMCR_SIND_NOMOD
DMA Source Address Space Select Bit y DMA Destination Address Space Select Bit
(DMS y DMD) (Sección 3.2.3.4 de [12])
Con estos bits se le indica al controlador de DMA en donde se encuentran las
direcciones de la fuente y del destino dentro del mapa de memoria del DSP. Para el caso de
este proyecto tanto la fuente como el destino se encontrarán en el espacio de datos, tanto los
DRR de todos los McBSP como la DARAM03 (donde estará ubicado buffer0) se encuentran
dentro de este espacio.
Por la razón expuesta anteriormente estos espacios dentro del registro DMMCR
serán configurados como se muestra a continuación:
DMS = DMA_DMMCR_DMS_DATA
DMD = DMA_DMMCR_DMD_DATA
DMA Destination Address Transfer Index Mode Bit (DIND) (Sección 3.2.3.4 de [12])
Realiza la función equivalente a SIND pero para el caso de la dirección destino. El
modo ABU requiere que esta dirección se incremente luego de que se escriba algo en ella,
dado que se trata de un buffer, por esta razón es que:
DIND = DMA_DMMCR_DIND_POSTINC
Con todos los valores para los espacios dentro del registro DMMCR descritos
anteriormente, este queda completamente definido. Las líneas de código dentro de la
configuración del DMA para el caso de este registro se muestran a continuación:
DMA_DMMCR_RMK(DMA_DMMCR_AUTOINIT_OFF,
DMA_DMMCR_DINM_ON, DMA_DMMCR_IMOD_FULL_ONLY,
DMA_DMMCR_CTMOD_ABU, DMA_DMMCR_SIND_NOMOD,
DMA_DMMCR_DMS_DATA, DMA_DMMCR_DIND_POSTINC,
DMA_DMMCR_DMD_DATA) /* Transfer Mode Control Register */
F.2 DMA Sync Select and Frame Count Register
Figura F.2 Registro para el conteo de tramas y selección del evento de sincronización
(DMSFCn).12
DMA Sync Event (DSYN) (Sección 3.2.3.3 de [12])
Este espacio dentro del registro DMSFC especifica cual evento de sincronización es
utilizado para iniciar las transferencias de DMA para el correspondiente canal de DMA. En
la tabla D.8 incluida en los apéndices se muestran los eventos de sincronización que están
disponibles para el DSP TMS320VC5416. De acuerdo a las especificaciones dadas
anteriormente en la tabla 4.1, el controlador de DMA deberá sincronizarse con un evento de
recepción en el McBSP0. Es por esta razón que DSYN deberá configurarse como:
DSYN = DMA_DMSFC_DSYN_REVT0
Double Word Mode (DBLW) (Sección 3.2.3.3 de [12])
Indica el tamaño en bits de los elementos transferidos a través del DMA. Existen dos
opciones, 16 bits o 32 bits (en cuyo caso este modo deberá estar activado). Como se ha
mencionado anteriormente, los elementos transferidos tendrán un tamaño exacto de 16 bits,
por lo que este modo deberá estar desactivado. De este modo:
DBLW = DMA_DMSFC_DBLW_OFF
Frame Count (Sección 3.2.3.3 de [12])
Como se mencionó en el inicio de la presente sección, este espacio dentro del
registro DMSFC no se toma en cuenta durante la operación en modo ABU ya que se
encuentra relacionado con el número de tramas que serán transferidas por bloque (modo
multitrama). Por esta razón a este espacio se le asigna el valor por default:
FRAMECOUNT = DMA_DMSFC_FRAMECNT_DEFAULT
Las líneas de código correspondientes a este registro dentro de la configuración del
DMA se muestran a continuación:
DMA_DMSFC_RMK(DMA_DMSFC_DSYN_REVT0, DMA_DMSFC_DBLW_OFF,
DMA_DMSFC_FRAMECNT_DEFAULT) /* Sync Select and Frame Count Register */
F.3 Source Address Register
Como se mencionó anteriormente en el desarrollo teórico, este registro almacenará
la dirección de la fuente de datos. Para este caso se tiene que la fuente de datos será el DRR
de alguno de los McBSP. Por tanto de acuerdo a las especificaciones de la tabla 4.1, la
fuente sería el DRR1_0 (pues las palabras son de 16 bits), y de acuerdo a la tabla 3-15 en
las páginas 3-35 y 3-36 de [12] (incluida en los apéndices, tablas D.6 y D.7) la dirección
que se almacenará en este registro es la 0x0021.
La línea de código correspondiente a este registro dentro de la configuración del
McBSP sería entonces:
DMA_DMSRC_RMK(DMA_DMSRC_SRC_OF(0x0021)) /* Source Address
Register*/
F.4 Destination Address Register
Este registro cumple la misma función que el DMSRC (registro anterior) pero para
el caso de la dirección de destino. Sin embargo es un poco más difícil de definir debido a
que se le debe reservar una sección en memoria donde será ubicado el buffer circular para
el que serán trasladados los datos. Para hacer esto se declara una sección llamada
dma_mem0 dentro de un archivo .cmd como una sección dentro de la DARAM03 (espacio
de datos) en el proyecto en el que se desarrolla el código (proyecto_1 en este caso). Luego,
en esta sección debe ser definido un buffer que será el encargado de recibir uno a uno los
datos generados por el AD7450 hacia el DRR1_0. El nombre asignado al buffer antes
mencionado fue buffer0. A continuación se muestra únicamente la línea de código
correspondiente al registro DMDST, las definiciones de las secciones y demás tareas antes
mencionadas serán mostradas en el capítulo 5 sección 5.1 del presente proyecto:
DMA_DMDST_RMK(DMA_DMDST_DST_OF(buffer0)) /* Destination Address
Register */
F.5 Element Count Register
Este registro se encuentra descrito en la sección 3.2.3.2 de [12]. En el modo ABU
(que se utiliza para implementar el buffer circular) este registro almacena el tamaño del
buffer destino. Este registro (DMTCRn) por tanto no se modifica durante las transferencias
en este modo. Para el caso específico del presente proyecto, se decidió definir una constante
en la sección de declaraciones del código en CCS desarrollado (mostrado en la sección 5.1)
que representará el tamaño del buffer que se necesite y de manera que pueda ser modificado
con mayor facilidad. El nombre de la constante mencionada es Buffer_Sz1 y se encuentra
actualmente configurada con un valor de 1, de modo que el DMA generará una interrupción
luego de que se transfiera cada muestra. La línea de código correspondiente a este registro
se muestra a continuación:
DMA_DMCTR_RMK(DMA_DMCTR_ELECNT_OF(Buffer_Sz1)) /* Element Count
Register */
F.6 Registros globales
Como se mencionó anteriormente el DMA puede configurarse para que se
reinicialice automáticamente luego de completar la transferencia de un bloque. Algunos de
los registros de DMA pueden ser configurados previamente para la próxima transferencia de
un bloque a través de los registros de recarga del DMA (DMGSA, DMGDA, DMGCR, y
DMGFR). Estos registros son los registros globales. Dado que el modo de
autoinicialización se encuentra deshabilitado para el caso particular de este proyecto pues
no se utiliza el multiframe mode, el valor de estos registros no se toma en cuenta y pueden
entonces ser configurados con sus valores por default:
DMA_DMGSA_RMK(DMA_DMGSA_DEFAULT) /* Global Source Address Reload
Register */
DMA_DMGDA_RMK(DMA_DMGDA_DEFAULT) /* Global Destination Address
Reload Register */
DMA_DMGCR_RMK(DMA_DMGCR_DEFAULT) /* Global Element Count Reload
Register */
DMA_DMGFR_RMK(DMA_DMGFR_DEFAULT) /* Global Frame Count Address
Reload Register */
Descargar