LA EVM56002DSP EN PROYECTOS DE RADIOAFICIONADOS [1]

Traducción libre, experiencias y comentarios por Jabi Aguirre, EA2ARU y Eduardo Jacob, EA2BAJ para AMSAT-URE.

Jabi Aguirre
C/Astarloa 3 -1º G
48200 Durango - Bizkaia
e-mail: govier02@sarenet.es

Eduardo Jacob
PO Box 20051
48080 Bilbao
e-mail: jtpjatae@bi.ehu.es

Este artículo trata acerca de las aplicaciones para los radioaficionados con la placa de evaluación del DSP56002, un kit completo y de bajo costo que contiene un poderoso procesador digital de señal (DSP), el 56002 de la familia de los 56000 de Motorola. Es ideal para el filtrado de CW y señales de rebote lunar; para aplicaciones de tratamiento de audio tales como "denoising" ( reducción de ruido en una señal), "autonotching" ( eliminación automática de una señal no deseada), así como para la construcción de modems para trabajar en el campo digital en HF, VHF y UHF para su uso en aplicaciones terrestres y conexiones vía satélite. El artículo [1] que me ha servido de base para mi trabajo, contiene más detalles acerca del hardware y recursos necesarios para desarrollar aplicaciones. El trabajo se ha realizado primero traduciendo al castellano la parte mas importante de [1] y luego comentando las impresiones de los dos autores citados arriba. Presenta además una colección de programas en DSP listos para su experimentación por radioaficionados.


Indice

  1. La cuestión
  2. Un poco acerca del DSP 56002
  3. Un vistazo del DSP56002EVM
    1. Interface CODEC (SSI)
    2. Interface de la puerta host (SCI)
    3. Memoria estática RAM
    4. Memoria E(E)PROM
    5. Otros misceláneos
  4. Desarrollo de software y herramientas para el DSP56002EVM
  5. Aplicaciones de radioaficionados con el DSP56002EVM
    1. Un breve vistazo al kernel Leonid
  6. Consejos prácticos
    1. Interface
    2. Sistemas operativos
  7. Comentarios acerca de algunos programas disponibles
    1. Tratamiento de audio
    2. Modems Experimentales y para Aplicaciones de HF
    3. Morse
    4. Packet Radio
    5. Utilidades varias para probar y programar la EVM
  8. Conclusión
  9. Agradecimientos
  10. Referencias


La cuestión

Uno de las formas de aprender cuando sale al mercado un nuevo procesador, suele ser sencillamente tenerlo a mano y programarlo. Desafortunadamente, para el radioaficionado con recursos limitados, como somos la mayoría, aprender a programar un chip como el Motorola 56002 DSP es una tarea tremendamente complicada.

Pero con la introducción de las placas de evaluación (EVM, Evaluation Modules), normalmente a precios asequibles [2], se ha ayudado mucho a los cacharreadores para acercarles la tecnología DSP. Estos EVM incluyen suficiente material educacional para comenzar: una pequeña placa de circuito impreso que contiene el chip DSP, software para desarrollar y estudiar programas básicos y sencillos, así como material con unas referencias técnicas básicas del conjunto y de las partes principales. En el mundo de los radioaficionados, donde uno de los factores principales es el costo del hardware, estas EVM han sido recibidas con una gran acogida.

El DSP56002EVM puede ser usado como cualquier otra plataforma de desarrollo de DSP (conectado a un host) o funcionar por libre usando su memoria EEPROM, que se puede instalar como accesorio.

La familia del chip usado en esta EVM, tiene una merecida fama en el mundo de la ingeniería de comunicaciones. El chip es de la misma familia DSP de Motorola que utilizan los HAL PCI-40001, AEA DSP 1232 y DSP 2232, el DSP-12 de L.L.Grace, el Kenwood TS-870S y multitud de productos comerciales y militares.


Un poco acerca del DSP 56002

El corazón de la placa DSP56002EVM es el DSP 56002 a 40 Mhz., y 24 bits, en el que, por tanto, cada instrucción tiene una longitud de 24 bits. Una de las características de la familia 56000 es que los datos e instrucciones se guardan en direcciones de memoria separadas. Las instrucciones se guardan en el espacio "P" ( de program space). Los datos se guardan en dos espacios con direcciones separadas e independientes : "X" e "Y". Esta separación de datos e instrucciones se llama arquitectura Harvard. Es diferente a la arquitectura Von Neumann usada, por ejemplo en procesadores del tipo 80x86.

La arquitectura Harvard es típicamente usada en la tecnología DSP, sobre todo debido a que utiliza la arquitectura en paralelo. La potencia de esta arquitectura en paralelo se hace evidente cuando consideramos que la principal característica de los DSPs es su capacidad para realizar multiplicaciones y sumar (MAC) rápidamente. El 56002 puede multiplicar dos operandos, acumular (sumar) el resultado, tomar dos nuevos operandos de dos direcciones de datos independientes, realizar el ajuste de las direcciones y tomar la próxima instrucción todo ello en ¡ un ciclo de reloj!. El 56002 a 40 Mhz. puede realizar 20 millones de instrucciones por segundo. Otros chips tienen características similares, pero no tienen dos espacios de datos y una arquitectura de 24 bits, y ésto es lo que realmente distingue a la familia 56000.

La arquitectura de 24 bits del 56002 contiene una colección más potente de instrucciones que las de los chips a 16 bits. Contiene también una variada colección de modos de dirección extendida. Estos modos de dirección se obtienen en formatos de instrucciones de una palabra e instrucciones de dos palabras. Otra diferen-cia es el rango dinámico adicional de los datos a 24 bits ( 144.5 dB) frente a los 96.3 dB con los chips de 16 bits. El rango dinámico de 96 dB es suficiente para la calidad CD ( Compact Disc) ya que está lo suficientemente cerca del rango dinámico del oído humano ( 100 dB.) y es la que normalmente se utiliza en los productos comerciales. Pero esta diferencia de rango dinámico, es fundamental en aplicaciones tales como el detectar señales débiles en ambientes ruidosos.

El 56002 contiene una gran potencia y flexibilidad para realizar interfaces de todas clases. Los accesos al/del mundo exterior al DSP se pueden realizar a través de los pines I/O ( Input/Output), agrupados como puertos de propósito general y llamados "PA", "PB" y "PC", con 16 pines disponibles en cada puerto. Dependiendo de la aplicación, algunos de estos pines I/O se pueden usar para doblar algunas señales que existen ya en el chip, tales con el interface síncrono serie (SSI) ó el interface de comunicaciones en serie (SCI). Por ejemplo, el port B, "PB", en el DSP56002EVM se obtiene como un conector (J7) aparte y es el puerto usado para los interfaces realizados por los usuarios. Por ejemplo, los radioaficionados utilizamos este conector y sus direcciones asociadas para aplicar el PTT del transceptor, realizar las pulsaciones UP/DOWN de corrección de frecuencia de los transceptores, encender leds que nos indican las distintas funciones, enviar comandos CAT a las radios, etc.

La inicialización y uso de estos puertos esta documentada en la guía del 56002 que se adjunta al comprar el EVM. Otros chips tienen también periféricos similares para poder accedes a CODECs de alta velocidad, pero los periféricos SCI y OnCE ( OnChip Emulator) son características únicas en DSPs de punto fijo. Otra de las características del 56002 es la capacidad de programar la frecuencia del reloj por medio de un PLL incorporado. El PLL del 56002 determina la velocidad de reloj del DSP. Se utiliza un reloj de 4 Mhz para activar el PLL. Este reloj, tambien sirve como reloj del chip 6805 que realiza las funciones de interface de las comunicaciones vía serie (OnCE) por uno de los dos conectores DB-9 que vienen con la placa. Un reloj programable puede servir para muchas aplicaciones. Puede ayudar al diseñador a conseguir una gran variedad de tiempos (timings). En un equipo portátil, un reloj variable se puede utilizar para controlar su consumo. Los DSPs consumen mucha más potencia a alta velocidad que a baja. Los consumos de potencia pueden ser regulados seleccionando el valor más bajo de reloj que satisfaga los requerimientos de la aplica-ción que estemos desarrollando. Otra característica importantísima del 56002 es la inclusión en el chip de una ROM que incluye las tablas del algoritmo de la onda senoidal, función que es muy utilizada para aplicaciones en el campo de aplicaciones de comunicaciones; NCOs ( Numerically Controlled Oscillators), etc.


Un vistazo del DSP56002EVM

La Figura 1 muestra un diagrama de bloques del EVM56002DSP

imagen 1

Figura. 1 Diagrama de bloques del DSP56002EVM.

Interface CODEC (SSI)

Un CODEC (codificador-decodificador) de la empresa Crystal Semiconductor, el CS4215, realiza las con-versiones A/D y D/A . Este chip está diseñado para aplicaciones donde se necesiten conversiones de alta calidad de audio, tal como el mundo multimedia, y es capaz de convertir dos señales analógicas a valores digitales de 16 bits (A/D). También contiene dos conversores digitales analógicos de 16 bits (D/A), lógica-mente para procesar señales en estéreo. Estos conversores A/D y D/A forman las puertas de entrada y salida analógicas del EVM y son las únicas puertas con las que se comunica el DSP con el mundo exterior. El CS4215 es un chip flexible, capaz de realizar muestreos programables por el usuario; tiene asimismo pro-gramable la ganancia de entrada y la atenuación de salida. El CODEC se comunica con el DSP por medio de las puertas SSI, usando una cantidad mínima de ellas. El software del DSP debe inicializar la velocidad del reloj, y la velocidad de muestreo requerida por el usuario. Incluye además líneas adicionales de reset y de selección de datos y control que se necesiten para tener un control total del CODEC. En el caso del EVM, estas líneas de control son asignados a la puerta "C", "PC", como se ve en la Tabla 1.

PORT C DEL M56002

FUNCION

1

Recepción del SCI (puerto del host)

2

Transmisión del puerto SCI (puerto SCI)

3

Datos/Control del CODEC (D/C)

4

No usado ( utilizados por el kernel Leonid para DCD)

5

Reset del CODEC

6

Sincronización de frames del CODEC

7

Reloj serie del CODEC

8

Recepción del CODEC (SSI Rx)

9

Transmisión del CODEC (SSI Tx)

Tabla 1 : Asignaciones en el Port C, "PC", del 7EVM56002DSP

Es preciso hacer notar que el EVM solamente implementa una parte de las capacidades del CS4215. Una característica particular es que únicamente se ha realizado una entrada de audio, por la entrada de micrófono (mike). La entrada de línea está deshabilitada. Otra particularidad es que solamente se usa un cristal de referencia, de frecuencia 24.576 Mhz, y que está conectado a la posición "XTAL2" del CS4215 (que normalmente para otras aplicaciones está reservada para un cristal de 16.9344 Mhz). La referencia XTAL2 debe ser siempre elegida cuando se inicializan las velocidades de muestreo. Se puede elegir entre las siguientes velocidades de muestreo : 8, 9.6 , 16, 27.42857, 32 y 48 miles de muestras por segundo. Estas son velocidades muy utilizadas en aplicaciones de comunicaciones.

Interface On-Chip Emulation (OnCE). Un microprocesador en SMD de la familia 6805 simplifica el interface para realizar las tares de "debugging" (depuración del software). Este chip no solamente libera espacio en la placa, sino también rebaja el precio de coste del EVM. Su misión es convertir los comandos que recibe en serie provenientes del software de debugging desde el host (PC), a comandos de control en paralelo para controlar la operación del OnCE. La lógica de bajo nivel del interface OnCE es muy intrincada y consiste en diversos algoritmos de muy difícil programación y uso para los no expertos. El 6805 realiza toda esta labor pero solamente con una limitación: la velocidad. Este puerta serie, en el kit actual, es sólo capaz de operar hasta una velocidad de 19200 baudios. A esta velocidad, los programas muy largos pueden tardar un poco en ser cargados en la EVM. Pero igual que no es crucial para un desarrollador de programas para el DSP56002 el conocer el protocolo de bajo nivel del interface para la depuración de software, sí puede ser interesante el conocer las capacidades de la puerta OnCE a la hora de escribir otros programas o hacer posible el usar el EVM con otro hardware, por ejemplo en plataformas que no soporten el sistemas operativo DOS.

A continuación explicamos algunas de las características mas importantes del protocolo del interface OnCE. Para los que quieran mas detalles, se recomienda mirar en [3]. Las comunicaciones con el micro 6805 se hacen a 8 bits y 19200 baudios. El host (PC, en nuestro caso) envía un código de comando que puede consistir en único byte o varios bytes, dependiendo del comando. La respuesta del micro 6805 esta también codificada, y consiste así mismo, en un único o en varios bytes. En ciertas situaciones, como el reset, no hay respuesta, en cuyo caso el host debe confirmar que el EVM está en estado de trabajo por medio de una petición al respecto. La tabla 2 contiene un resumen de la estructura de los comandos.

HOST
(Hex)


Propósito

Respuesta del EVM
(Hex)

A0 Rx Lee el registro Rx de la OnCE D7 - RaRbRc (4 bytes)
A1 Wa
Escribe 1-byte
D1 - realizado
D2 - fallado
A2 WaWbWc
Escribe 4 bytes
D1 - realizado
D2 - fallado
A3 Reset del 6805 y del DSP No hay respuesta
A4 Reset del DSP No hay respuesta
A5
Fuerza al OnCE en debug
D3 - DSP muerto
D4 - realizado
A6 Pone en marcha el OnCE D4 - realizado
A7 Lee el estatus del DSP D7 - Sa (2 bytes)
A8 ... no usado
A9 Reset del 6805 No hay respuesta
AA-AB ... no usados
AC Chequea si el 6805 esta vivo D6 - respuesta del 6805
AD Obtener nivel del código La - nivel del código

Tabla 2 : Resumen de comandos del OnCE.

Interface de la puerta host (SCI)

La puerta serie OnCE es usada normalmente para procesos de depuración. La segunda puerta serie, SCI, nos permite un interface serie más tradicional. Cuando se usa la puerta SCI, la pata PC0 está programado para recibir los datos del SCI y la pata PC1 para transmitir datos. (Ver Tabla 1). Las aplicaciones que usan esta puerta serie para comunicaciones con un host, las pueden hacer en protocolo ASCII o KISS [4], por ejemplo. En el modo normal de trabajo, la puerta SCI es el único medio de comunicaciones del EVM con el mundo exterior. Es preciso hacer notar que no existe la pata de "flow control", y que por tanto, las aplicaciones que lo requieran deben proporcionar este "flow control".

Memoria estática RAM

El DSP 56002 tiene una memoria estática (SRAM) de 1024 palabras de 24 bits en el propio chip, y que a su vez está dividida en tres partes : 512 palabras de memoria de programa, "P"; 256 palabras de memoria, "X" y otras 256 palabras de memoria "Y". Esta memoria incluida en el chip, funciona a la velocidad del procesa-dor y normalmente está reservada para usarse por el código que se necesite para que funcione a máxima velocidad, tales como interrupciones críticas ó variables que sean de acceso muy frecuente.

Además existe otra SRAM exterior de 32k en tres chips 6206 (cada uno de 8k.s). La lógica necesaria para la decodificación de direcciones es complicada debido a los pequeños tiempos de acceso y retrasos de propagación de los circuitos.

Los diseñadores del EVM han optado por usar un camino más efectivo : partir las direcciones de acceso. Las líneas de direcciones 14 y 15 y los "enables" X/Y pueden realizarse por medio de dos caminos diferentes, simplemente por medio de un puente (jumper) exterior, el J12 (16K/32k). El resultado de las dos posibles formas de partir la memoria se ve en la Figura 2.

Figura 2

Figura. 2 : Las dos formas de partición de memoria en el EVM56002DSP

Ambas formas de partición mantienen el mismo compromiso. Por ejemplo la forma de 32K tienen las P, X, Y en el mismo espacio físico. El programador debe saber que, por ejemplo que en el formato de 32K, la dirección P(220) tiene la misma dirección física RAM que la X(220) ó la Y(220). En el formato 16K, las direcciones de P y X son las mismas, pero las de Y son independientes. Además las direcciones por encima de la 4000 son "shadow"( imágenes) RAM, esto es, el decodificador de direcciones no va a distinguir entre las direcciones del rango (0000 al 3FFF) con las del rango (4000 al 7FFF).

Estas peculiaridades las debe conocer bien el programador para poder hacer uso de toda la potencia del hardware. Un truco usado por los programadores es usar un único puntero para direccionar 2 buffers iguales de entrada y salida. Por ejemplo, un buffer se usa como origen de datos y asimismo como destino de datos. X e Y se pueden asignar con sus correspondientes elementos tal que la entrada y salida de datos tengan la misma dirección física, por ejemplo:

Input(10) es a la dirección X(080),

Output(10) es a la dirección Y(080),

Entonces, con un único puntero de registro común (pe. R2) ambos pueden descargar y guardar datos en la misma dirección. Tal como

move X:(R2),x0 ;Entrada de datos de X

move y0,Y:(R2) ;Salida de datos a Y

Un ejemplo de lo anterior se encuentra en el kernel de Leonid para la interrupción del CODEC, donde la eficiencia del código es crucial. Se detallará posteriormente la arquitectura utilizada para las aplicaciones de radioaficionado. Las aplicaciones de radioaficionados usan todas la partición de memoria a 16K.

Memoria E(E)PROM

El DSP56002EVM incluye como opción usar una EEPROM para la carga del programa y el arranque. Esto es esencial para aplicaciones "stand-alone" ( sin conexión con host). Se podría usar una EPROM como la 27C256, pero si se asume que el usuario debe tener todas las herramientas para convertir el código del 56002 a una forma tal que se pueda programar desde la propia EVM y arrancar en frío a continuación, sin que intervenga el host exterior, asumimos que es mucho más elegante y útil el uso de una EEPROM, tal como la Atmel At29C256 FLASH Memory. Con esta opción incluida, es fácil programarla con las herramientas incluidas con el EVM y por tanto poder hacer correr programas en el EVM sin necesidad de cargarlos desde el host exterior. Algo similar se utiliza en las TNC,s donde el programa se guarda en una EPROM, que al arrancar la TNC se pone en marcha y carga el programa con el que esta programado, tales como TAPR, BBS, TheNet, KISS...

Otros misceláneos

Aparte del DSP, CODEC y el OnCE 6805, se necesita muy poca lógica más para hacer el sistema totalmente operativo. La conversión a niveles RS-232 se hace por un clásico MAX232 ( las dos salidas y entradas serie se hacen con un único integrado MAX232). La lógica de reset del 56002 requiere asimismo de un poco de atención: el DSP se puede poner en funcionamiento de varias maneras dependiendo de la forma que se haga el reset. En el EVM, se usa un 74LS157 para enviar una señal "100" a las patas IRQA~, IRQB~, y NMI~ que ponen al DSP en el modo de arranque desde la EEPROM[5]. Una vez reconocido el estado, y si existe una EEPROM válida, el arranque interno de la DSP se realiza el desde la EEPROM.


Desarrollo de software y herramientas para el DSP56002EVM

El DSP56002EVM que he recibido viene con ensamblador del Motorola 56002, versión 5.3.2; un debugger de Domain Technologies, versión 1.02 [6], y algunos ejemplos para ensamblarlos. El ensamblador funciona bien y es muy similar a la edición profesional de Motorola. Genera código objeto en formato COFF. No usa cargador ( éste es un programa que combina algunos objetos preasemblados). Esto implica que todo el códi-go se ensambla en una única etapa. El hecho de que acepte "includes" que permiten leer otros códigos fuentes es una ayuda que se agradece a la hora de ensamblar códigos largos. Existe asimismo software de domi-nio público que incluye compilador, ensamblador, lincador y emulador de lenguaje C que se puede obtener a través de Internet [7].

Domain Technologies, Inc, ha desarrollado el Debug-EVM para el DSP56002EVM. Este debugger tiene similitudes con emuladores profesionales con su misma apariencia y capacidad. Este nivel de sofisticación es posible gracias al interface OnCE que permite una emulación completa en software de los distintos estados del EVM. El Debug-EVM permite el acceso y control de los estados internos del DSP, de la memoria y de los periféricos durante el proceso de depuración.

El Debug-EVM es un programa en DOS (no funciona bajo Windows) que se comunica con el DSP56002EVM a través de cualquier puerta serie del PC a la velocidad de 19200 baudios. Está organizado en ventanas múltiples que permiten ver los datos, el código del programa, los registros del DSP y el estatus del procesador en varios formatos. Durante la fase de depuración, el código del DSP y los datos son llevados del host (PC) a la memoria del DSP. El desarrollador puede entonces manipular los registros y los datos, así como situar puntos de ruptura (breakpoints) donde lo necesite. Es posible también interactuar, sin salirse del programa en marcha, mientras está funcionando el DSP. Esto permite que el código del DSP pueda depurarse a toda velocidad.


Aplicaciones de radioaficionados con el DSP56002EVM

El software que viene con el EVM contiene solamente un bagaje mínimo para que se pueda comenzar a programar. Una de las rutinas incluidas es la CODEC.ASM. Esta rutina contiene una colección de funciones que inicializan el CODEC y lo pone en marcha. Es una pieza complicada de código que requiere que el programador conozca cómo trabaja el CODEC y también todo el intrincado mundo del interface SSI del 56002. Afortunadamente, con el uso de los "define" (definiciones) se hace más sencillo el ajustar el CODEC para el trabajo que queramos que realice. El transferir datos desde y al CODEC se realiza fácilmente usando direcciones que se utilizan como buffers. Para hacer el DSP56002EVM mas accesible para los experimentadores, Johan ha reunido una colección (actualizada actualmente en [8] por el autor) de programas fácilmente comprensibles con una pequeña dedicación. El listado de los programas de Johan se incluye en la Tabla 3

Tabla 3 : Programas incluidos por Johan Forrer.

Los programas nativos del DSP56002EVM trabajan directamente sobre la EVM (no se usa el kernel Leonid), ya que no están pensados para un mundo tan específico como el de los radioaficionados, sino como plataforma para experimentación y aprendizaje.

Como ejemplo de código sencillo, el INOUT.ASM es muy interesante para el que se inicia pues permite verificar la operación del DSP y realizar algunos experimentos con el CODEC. El programa RTTY.ASM es un poco más complejo y requiere el conocimiento de filtros FIR. Se observa que usa una versión modificada de las rutinas del CODEC. El programa contiene una pequeña descripción que explica cómo funciona el módem en DSP. Se acompaña de un diagrama para un interface con un transceptor para su uso con este programa. Yo particularmente no lo recomiendo, prefiero el interface diseñado por el sudafricano Dannie Brynard, ZS6AWK y que lo hemos rediseñado desde AMSAT-URE [9]. También lo tienen los autores del artículo.

Un esfuerzo fundamental es la adaptación que ha realizado Johan del kernel Leonid. Cargando este módulo, funcionan los programas de radioaficionados desarrollados por el grupo finlandés del DSP-4 Alef Null [10]. El grupo Alef Null está desarrollando proyectos en DSP desde el año 1992. El DSP-4 es su cuarta generación de DSPs para radioaficionados. La placa DSP-4 es muy similar a la DSP56002EVM en muchos aspectos, excepto que usa el 56001. Se puede considerar el DSP-4 como un antecesor del DSP56002EVM. Esta similaridad en hardware y software entre ambos proyectos han llevado a Johan a trasladar el software del proyecto Alef Null al entorno del DSP56002EVM

El trasladar programas de Alef Null requiere solamente unos pequeños cambios: tener especial cuidado con la entrada de audio al CODEC y las localizaciones de las memorias P, X, Y y L. Después cargar el BIOS.CLD antes de ejecutar la aplicación de Alef Null. Finalmente comenzar la aplicación usando "GO 0". Por ejemplo, para cargar y ejecutar el programa ya compilado, G3RUH.CLD, yo escribo el siguiente archivo "bat" :

Contenido del fichero G3RUH.BAT

Este archivo .bat carga por la puerta OnCE el archivo g3ruh.cmd en el EVM, que a su vez consiste en :

Contenido del fichero G3RUH.CMD

Force r, hace un reset en el EVM.

La orden load bios carga el sistema operativo (basic input output) que se ha compilado previamente. En el BIOS está incluído el kernel Leonid. La orden load g3ruh carga el módem de 9600 bits/s. G3RUH.CLD y por fin, la orden go 0 pone en marcha todo el sistema. Ahora tendríamos un modem de 9600 bits/s con un interfaz de tipos Kiss por la puerta SCI del la EVM.

Para más información aconsejo revisar los ejemplos de código incluidos en [1].

El conjunto de software no se podía haber completado sin las contribuciones del polaco Pawel Jalocha, SP9VRC y del sudafricano Dannie Brynard, ZS6AWK. Se incluyen algunos de sus excelentes trabajos para experimentadores avanzados en DSP. Pawel ha sido especialmente activo al incluir directivas en los códigos fuentes que hacen que sus programas rueden sin problemas en ambas plataformas DSP-4 y EVM).

Un breve vistazo al kernel Leonid

Se puede definir un kernel en DSP como un "librería de comandos": una colección de rutinas residentes en la EEPROM de la tarjeta EVM que controlan, dirigen y facilitan la interacción del hardware contenido en la placa EVM (codec, SCI, etc…) con las aplicaciones escritas por los usuarios del DSP. Esto permite concentrarnos en el programa y no en los aspectos rutinarios (leer del codec, comunicarse por la SCI…) Un estudio profundo de un código de DSP como el kernel Leonid, no es el objeto y está fuera del alcance de éste artículo. Le recomiendo, al que le interese, que obtenga la documentación de Alef Null antes mencionada y lea el BIOS.ASM. Este código esta razonablemente bien comentado.

El kernel Leonid consiste de dos partes: el BIOS de bajo nivel y otra parte de alto nivel que contiene llama-das a algunas macros. El BIOS de bajo nivel está contenido en BIOS.ASM mientras que las llamadas a los macros están el LEONID.ASM. Hay que asegurarse de no mezclar las versiones adaptadas al EVM con las originales del DSP-4, pues no son compatibles. Son necesarios además varios ficheros para ensamblar estos fuentes, estos son: INTEQULC.ASM, IOEQULC.ASM .

El kernel Leonid contiene algunos componentes críticos y necesarios para las aplicaciones de comunicaciones en las redes de radioaficionados. Una rutina de bajo nivel ejecuta el protocolo HDLC para ensamblar y desensamblar paquetes en el estándar AX.25.

Además, y ya que el protocolo KISS se usa siempre con las rutinas HDLC, es posible usar el DSP56002DSP con programas que utilicen el protocolo TCP/IP, como el NOS, sin ningún otro hardware adicional. Más adelante incluimos una lista con programas probados para Radiopaket con este DSP. Todo lo que se requiere es la radio, el EVM y un PC ejecutando NOS ó cualquier otro programa similar (compatible KISS). Aparte de estas rutinas básicas, se han incluído tambien rutinas para detectar el "time-out" (tiempo conectado sin utilizar el canal) y el DCD (detección de portadora). Estas rutinas son necesarias y obligatorias en algunos países para trabajar en las redes de packet. El módem de FSK a 1200 baudios, compatible con las normas BELL 202, de Jarkko es un buen ejemplo de cómo hacer packet y ¡con unos medios tan sencillos !.

Unas pocas palabras nos pueden ayudar a interrelacionar los módulos de los distintos programas. La Figura 3 nos enseña como interactúa un programa con el kernel. Si lo examinemos con el programas TALK.ASM, veremos como se usa el Leonid y el BIOS. El programa TALK comienza inicializando el CODEC usando la llamada a "ctrlcd" ( etapa1 en la Figura 3). Este es un macro (definido en el LEONID.ASM) que inicializa los buffers del CODEC y prepara varios punteros y registros para trabajar con el CODEC. Los parámetros usados en el ejemplo son de la forma :

Figura 3 : Funciones del Leonid utilizadas en las inicializaciones del codec

El CODEC se inicializa en la etapa 2 usando el comando "opencd". Este macro requiere dos parámetros : el primero es la velocidad de muestreo (pe. 16 quiere decir 16 mil muestras por segundo), el segundo parámetro indica si se requiere o no el filtro pasa-altos incluido en el CODEC (ver la documentación del CS4215 para más detalles). Este macro incluye una instrucción de salto (jump) a la dirección P - 0028.

Esta dirección es parte de una tabla de saltos que envían el comando a la dirección apropiada del BIOS.

Esta tabla de saltos se ve en la Tabla 4(b) como parte de las direcciones de orden bajo de la dirección P. El salto a P(0028) deberá ser enviado al código de comienzo del CODEC estando ya el CODEC vivo. Es impe-rativo que antes de enviar esta instrucción al CODEC, sus vectores de interrupción, sus punteros asociados y buffers de datos estén ya preparados. De otra forma, el código puede romperse y morir.

Jarkko ha implementado una muy eficiente handler interrupción del CODEC en la rutina del BIOS usando la llamada interrupción rápida (fast interrupt) del 56002. Con esto se consigue, que en vez de usar la rutina normal de la interrupción, se colocan dos interrupciones en la dirección del vector de interrupción.

Cuando se llama una interrupción del CODEC, solamente se ejecutan estas instrucciones, y por tanto la ejecución del programa se acorta. Esta interrupciones rápidas se muestran en la Tabla 4(a).

Tabla 4(a) : Tabla a de interrupciones rápidas.

Las interrupciones actuales en las localizaciones de los vectores de interrupción, pueden leerse / escribirse indirectamente en el registro R7, además es imperativo que se reserve R7 únicamente para este propósito. Similarmente R3 es usado como un puntero del buffer del SCI ( ver el vector de interrupción SSI en el BIOS.ASM para más detalles).

Tabla 4(b) : Tabla b de interrupciones rápidas.

La captura de datos ocurre en la etapa (3). El macro "waitblk" requiere tres argumentos : "R2" indica que el registro R2 se usa como buffer para el puntero de entrada / salida; "buflen" es el nombre del buffer de entra-da / salida que se utiliza y el "batch" contiene el tamaño del bloque. El hecho de poder programar el tamaño del buffer nos permite una gran flexibilidad a la hora de escribir los códigos.

Esto se entiende rápidamente : si se necesita procesar una muestra cada vez, el tamaño del bloque debe ser uno. Pero debemos tener en cuenta que como la captura de datos tiene lugar como una operación de fondo, puede suceder que ese tiempo de proceso sea mayor que el tiempo entre las interrupciones del CODEC. Pero trabajando con grupos de datos en un determinado lapso de tiempo, se puede continuar en paralelo con el proceso de los datos previamente capturados. Esto solamente es válido cuando el tiempo que tarde el proceso de datos sea más corto que el tiempo de captura de un nuevo bloque de datos, porque si no los buffers de entrada / salida se saturan. Otro ejemplo que ilustra este método de adquisición de datos es el proceso en tiempo real de una FFT. Supongamos que capturamos y procesamos bloques de 256 valores y que tambien se mandan fuera otros 256 valores. Ahora supongamos que el tiempo para procesar la FFT de 256 valores es mayor que el tiempo entre las interrupciones de adquisición de datos del CODEC. Se ve claramente que es imposible sacar los datos procesados de la FFT. Pero, capturando primero una colección de datos, nos queda tiempo para calcular su FFT antes que llegue el siguiente bloque de 256 valores. O sea, se pueden recoger, procesar y escribir un chorro continuo de datos, sin pérdida alguna. Esto se puede hacer siempre que el intervalo de tiempo entra la entrada y salida de los datos tenga una duración igual que el que tarda en llenar un bloque.

Existe un número adicional de funciones que llaman a rutinas del SCI, timers, KISS y HDLC. Estas están listadas en la Tabla 4(b).


Consejos prácticos

Interface

Lógicamente la DSP56002EVM no viene con el interface para radio, ya que es un diseño con unas miras mucho más universales que la un enfoque exclusivo para radioaficionados. El interface es imprescindible para transmitir con la placa. Para jugar solamente con la recepción, no sería necesario el interface, pero sí recomendable.

Tras construir, probar, consultar y volver a construir varios interfaces, me parece mas completo el diseñado por Dannie Brynard, ZS6AWK que el diseñado por Johan Forrer. El diseño de Dannie, consta de dos integrados (batería de transistores darlington), que sirven para encender los Leds y poner activar el PTT, Mic UP /Down, etc. de las radios y tiene un tamaño de 100 x 25 mm. Para los interesados, el autor dispone de una serie limitada de interfaces completos, compuestos de placa PCB, componentes e instrucciones de mon-taje.

Para probar que el interface está bien montado y conectado, se aconseja compilar el código TSTSCI.ASM. Estas son las instrucciones y recomendaciones :

Con el programa TSTSCI.CLD (versión compilada del TSTSCI.ASM) se envían y reciben caracteres al EVM desde el por cualquier puerta serie. Cada carácter tecleado en el PC debe tener eco en el PC e iluminarse cada vez el Led PTT. El interface, que está basado en los previos de ZS6AWK y de KC7WW, utiliza cualquier programa terminal en el PC, ajustado a 19200 baudios ( siempre que el BIOS del EVM está compilado a esa velocidad) para comunicarse con la EVM. Los comandos son del programa son :

M

Debe imprimir en la pantalla un mensaje de TEST.

U

Debe iluminarse momentáneamente el Led UP ( amarillo)

D

Debe iluminarse momentáneamente el Led DCD (verde)

C

Debe iluminarse momentáneamente el Led CAT (amarillo)

S

Debe iluminarse momentáneamente el Led STATUS (rojo)
Cualquier carácter Eco en la pantalla e iluminarse momentáneamente el Led PTT (ámbar)

Como he indicado mas arriba creo necesario el recomendar que se monte la EEPROM 29C256. Se aconseja soldar un zócalo, y colocar luego el integrado en el zócalo. Dannie ha colocado un soporte tipo ZIF de los utilizados para grabar EPROMs ( los que tienen una palanquita) y ha grabado varias EEPROMS. Así no tiene mas que sacar una EEPROM y colocar la que le interese en ese momento. Cuando sale una nueva versión, no tiene mas que reprogramar la EEPROM donde tenga la versión vieja. Yo me volví loco para agenciarme la EEPROM. En España, tras esperar cerca de dos meses no me fue posible conseguir ni me dieron esperanzas de conseguirla. Así que utilizamos Internet y en JDR (http://www.jdr.com) las localizamos y encargamos. Me tardaron cerca de tres semanas en llegar, pero llegaron. El precio, sobre las 2000 pts, en destino y pidiendo varias, claro, porque si pides una, estoy seguro que cuesta mas el transporte que la mercancía.

Para programar esta EEPROM yo utilizo la utilidad FLSHBOOT por medio del archivo flshboot.cmd :

force r Realiza el reset en el EVM
load bios.cld Carga el kernel.
load apt.cld Carga el programa (en este caso el apt.cld, por ejemplo.)
load flshboot.cld Carga el programa que permite programar la EEPROM y arrancar de la misma.
break FlashCopyEnd
go FlashCopy Realiza la programación de la EEPROM.

De esta forma no necesito cargar el programa desde el PC, y tengo la EVM lista para ejecutar el programa nada más encenderla. Se puede lograr de esta manera hacer que la EVM se comporte por defecto como un modem de 1200, de 9600 o lo que utilicemos más habitualmente.

Sistemas operativos

Los ficheros con los que hemos trabajado y en principio no han dado ningún problema tienen las siguientes fechas.

BIOS.ASM 05/03/96
LEONID.ASM 2/27/96

Estos son los dos programas básicos. El Leonid yo lo tengo para 19200 baudios. El original que viene en [1] viene compilado a 9600 bds. Para compilar las últimas versiones del Leonid es necesario introducir la siguiente modificación en el fichero de Motorola IOEQULC.ASM :

En la tabla de registros

; Register Addresses

añadir la línea

PLL EQU $FFFD ; 56002 PLL

Con esta modificación se compila sin problemas el BIOS.ASM.

Un par de problemillas habituales al compilar los programas suele ser la redefinición del tipo de placa EVM56K=1 aparece en el leonid.asm y muchas veces también en el programa que se compila, para resolver el programa, basta con comentar uno de ellos. La redefinición de la variable buflen que es el tamaño del buffer sobre el que se realizan las operaciones del codec. En este caso, lo aconsejable es comentar la que figura en el leonid.asm


Comentarios acerca de algunos programas disponibles

Vamos a hacer una breve reseña de programas que están disponibles actualmente en código fuente para la EVM y que hemos tenido ocasión de probar. Os podeis fijar en que básicamente están realizados por 5 personas casi de todos los continentes: Johan Forrer KC7WW, Jarkko Vuori OH2LNS, Pawel Jalocha, SP9VRC, Dannie Brynard, ZS6AWK y Craig Newell VK4YEQ. Gran cantidad de estos programas están disponibles en [1] .

Tratamiento de audio

Son programas que se usan para filtrar y mejorar la señal de audio que llega. Es muy interesante disponer de los fuentes ya que hay parámetros que son ajustables y esto hace que la experi-mentación sea posible. Recordad los que dispongais de filtros internos o DSP que para gozar de la calidad de estos filtros hay que desactivarlos.

CORELFLT.ASM Por el polaco Pawel Jalocha, SP9VRC. Es un filtro de autocorrelación, especialmente válido para CW. Los resultados son realmente sorprendentes.

FFT-CUT.ASM También por Pawel. Es un filtro basado en FFT que del espectro de la señal, elimina las frecuencias que no llegan a un determinado umbral de ruido determinado automáticamente.

QRMQRN.ASM Por Jarkko Vuori OH2LNS. Diseñado inicialmente para el DSP-4. Filtro basado en el algoritmo LMS y que en el momento de la compilación por medio de una variable, puede ser transformado en un filtro de ruido contra QRN o de ranura contra QRM. Requiere bastante nivel de entrada. Los tenemos separados en QRM.ASM y QRN.ASM.

FFT-CW.ASM y FFT-SSB.ASM Por Pawel. Cada una de estas aplicaciones consiste en dos programas uno para la EVM que realiza la FFT de la señal y la manda a 57600 bit/s al segundo programa, éste de DOS que dibuja continuamente como en una banda de papel y en escala de grises realzando las frecuencias en las que hay más intensidad. Se consi-gue ver las rayas y los puntos de CW en pantalla. Hay que recordar esta velocidad de 57.600 requiere generar y cargar previamente un bios.cld compilado para esta velocidad, en vez de la normal de 19.200. Es sumamente curioso observar que si se pone por delante de la EVM un filtro eficaz en la pantalla se observa como la señal desaparece en el rango filtrado.

Modems Experimentales y para Aplicaciones de HF

Nos queda por probar el modem NEWQPSK. Por lo demás funcionan de una manera totalmente satisfactoria. En general todos pecan de no tener ayudas para la sintonización del receptor. Esta se puede suplir con el oído y la costumbre o bien sintonizando frecuencias "fijas" en las que sabemos que hay actividad habitualmente.

NEWQPSK.ASM Por Pawel. Es un modem experimental de HF con 15 portadoras separadas 125hz moduladas con DQPSK. Puede llegar a 2500 bps. Ofrece un interfaz de tipo KISS con lo que puede ser utilizado con los programas habituales de packet.

SLOWBPSK.ASM También por Pawel. Es una implementación de un modem BPSK de 30bps diseñado para contactos HF en banda estrechas.

RTTY.ASM Por Johan Forrer KC7WW. Es un demodulador que permite a través del empleo de un programa shareware suyo (precio 5$ !!!) denominado PCTOR 3.08 transmitir y recibir RTTY, ASCII y AMTOR y recibir Pactor FEQ y ARQ. Con otro programa PC PACTOR 0.20 es posible recibir pactor FEQ y ARQ y transmitir pero solo en modo FEC. Pero atención : leer cuidadosamente la documentación de las conexiones a nivel RS-232 porque hay sorpresas. Las conexiones que indica Johan únicamente para este programa requieren unir el pin 3 (RD) con el pin 8 (DCD) para DB25 ó el pin 2 (RD) con el pin 1 (DCD) para DB9.

FSKIFACE.ASM También por Pawel. Es un interface que permite emplear el programa JVFAX con la EVM para recibir SSTV y Fax. Los resultados son excepcionales e impactantes.

EVMAPT.ASM Realizado por Jabi a partir del trabajo de Craig Newell VK4YEQ. Permite demodular las señales APT de los satélites metereológicos, tanto los polares (NOAA, METEOR) como los geoestacionarios ( METEOSAT, etc.). Se utiliza para ello también el programa JVFAX.

FSK300.ASM Por Dannie. Es una modificación del modem FSK1200.ASM que se detalla abajo para poder trabajar a 300 bps en packet. Ofrece un interfaz de tipo KISS. Hay una variante con los filtros recalculados para los tonos Europeos.

Morse

Son filtros especia.lmente adecuados para la recepción de Morse.

BANDPASS.ASM Por Jarkko Vuori OH2LNS. Es un filtro de 800hz implementado con filtros FIR.

CW.ASM Por Dannie, ZS6AWK. Es un filtro implementado con filtros de tipo FIR de 2 posiciones (Estrecho y ancho). La selección del modo de funcionamiento se hace por medio de un programa DOS, que se comunica por el puerto SCI.

CW2.ASM También por Dannie, ZS6AWK. Es la versión mejorada del anterior. Es un filtro implementado con filtros de tipo FIR de tres posiciones (SSB, CW de 500hz y paso directo) y atenuación variable. La selección del modo de funcionamiento se hace por medio de un programa DOS, que se comunica por el puerto SCI.

Packet Radio

Son modems que permiten la conexión por packet.

FSK1200.ASM Por Pawel. Es el modem de radiopaquete tradicional FSK a 1200. Incluye un interface Kiss, y ha sido probado con éxito absoluto con los programas de DOS: TSTHOST, BPQ, GP, NOS, con los programas de Windows, Winpack 5.53 sobre BPQ, WinTNC. Lo único que en principio y de momento no puede funcionar es el FlexNet. (Y no es culpa de la EVM, sino de que no existe el interfaz de FlexNet a KISS). Parece ser además que está en desarrollo una versión para el mismo.

G3RUH.ASM Por Jarkko Vuori. Es un modem de 9600 bit/s totalmente compatible con el G3RUH. El interfaz es de tipo KISS y por ello, el software que funciona con el modem anterior, lo hace con este. Las experiencias han sido totalmente satisfactorias en pruebas terrestres y con satélites. Hay que comprobar que la tensión que entrega es la adecuada para el equipo de que disponemos. Suele ser un poco baja. Son necesarios también los ficheros FILTR.ASM, FILTX.ASM, INTEQULC.ASM, IOEQULC.ASM .

BPSK1200.ASM Por Pawel. Es un modem de BPSK a 1200 bit/s adecuado para la comunicación con satélites como el LO-19. Es de destacar que a través del interfaz de Dannie, podemos controlar desde el modem la frecuencia del transceptor a través de las salidas de Up y Down.

Utilidades varias para probar y programar la EVM

Son utilidades que permiten comprobar el funcionamiento de la EVM, del interfaz, programar la EEPROM, etc.

TSTSCI.ASM y TSTSCI1.ASM Por Dannie. Sirven para probar el funcionamiento de la placa de interfaz de Dannie y del cableado.

SCOPE.ASM También por Dannie. Es una demo del programa SPY.EXE de depuración de la DSP-4 y que permite hacer funcionar la EVM como osciloscopio o analizador de espectros

Existen varias utilidades para programar la EEPROM: FLASH.ASM, por Johan Forrer, solo puede programar P-Code. BOOT.ASM, por Chris Hanna, FLSHBOOT.ASM por Helmut Strickner, esta última es la que mejor funciona y es la que recomendamos.


Conclusión

Este artículo muestra que el DSP56002EVM tiene una gran potencia y flexibilidad para la programación, pero que también se tarda algún tiempo, debido a su complejidad, en aprender a programarlo. Pero es capaz de satisfacer las necesidades de los novatos y de los experimentadores mas veteranos en el entorno de las DSPs. Los radioaficionados cacharreadores tienen una magnífica base de trabajo con esta placa de evalua-ción. ¿Que posibles desarrollos esperamos/animamos que aparezcan para la EVM?, a nivel de soft: la posibilidad de cargar el programa de la puerta SCI que utilizaremos luego para la comunicación con el PC, la posbilidad de cargar todos las aplicaciones en EEPROM y seleccionarlas al arrancar el aparato, un kernel que permitan la multitarea, el desarrollo de modems para HF de rendimientos superiores a Pactor II pero de dominio público… A nivel de Hardware: placas de expansión de memoria, o con aplicaciones específicas…


Agradecimientos


Referencias

[1] QEX, Agosto 1995, Using the Motorola DSP56002EVM for Amateur Radio DSP Projects, By Johan Forrer, KC7WW, 26553 Priceview Drive, Monroe, OR 97456, USA, e-mail: forrerJ@ucs.orst.edu. Muchos de los ficheros originales a los que se hace referencia en este artículo están disponibles aqui.

[2] Consultar con Biltron S.A. Tfno: 94 - 4276800 ( Sobre las 23.000 pts.). Otra alternativa es adquirirlo en la TAPR, que actualmente está realizando una oferta de las placas al precio de 85 dólares. Esta oferta se ha agotado ya y habrá que esperar a que la vuelvan a realizar.

[3] EVM56002 EVM OnCE Interface, Rev 1.1. Craig Heller et al, Motorola Digital Signal Processing Divi-sion, Semiconductor Products Sector, 6501 William Cannon Drive West, Austin TX 78735-8598. Este software es suministrado con algunas versiones del kit.

[4] Chepponis, M. and Karn, P. "The KISS TNC: A simple Host-to-TNC Communications Protocol," Proceedings of the Sixth ARRL Computer Networking Conference, ARRL 1988.

[5] Libros interesantes que se pueden pedir a: Motorola’s Literature Distribution Center, PO Box 20912, Phoenix, Arizona 85036, USA (Tfno: 1-800-4412447). Algunos libros son gratutitos, pero otros no: DSP56000 Family Manual (DSP56K FAMUM/AD). DSP56002 Digital Processor User’s Manual (DSP56002UM/AD). DSP56000/DSP56001 Digital Signal Processor User’s Manual (DSP56000UM/AD).

[6] Domain Technologies, Inc, 1700 Alma Drive, Suite 245, Plano, TX 75075, USA. Una versión posterior, la 1.0402 es obtenible es su BBS, teléfono 214-587-1090. Domain también vende una versión profesional del debugger, el sistema de desarrollo LINK-56002. Además, también ofrecen una tarjeta para PC, bus ISA, basada en el 56002. Doamain puede ser conectada a través de Internet en el e-mail: domain@metronet.com

[7] Hacer ftp://nic.funet.fi/pub/ham/dsp/dsp56k-tools/gcc5616.tar.Z. Este programa es un trabajo de Andrew Sterian y está pensado para los DSP 56116/56156, pero, con alguna reserva, se puede utilizar con el 56002. Existe también un compilador del lenguaje C para el 56002 por el mismo autor bajo el nombre de gcc56k.tar.Z. También existe el conjunto de Alef Null que incluye ensamblador, lincador y simulador. Estos están es dominio público a causa de que no es la última versión oficial de Motorola. Pero trabajan bien. Otra fuente de interés para software es la BBS Dr. Bub de Motorola, en el teléfono: 512-891-3771 o el 512-891-3773. Tambien se encuentra esta BBS en el Servidor de Motorola.

[8] ftp://www.deustenet.es/amsat

[9] AMSAT-URE, Sección Española de AMSAT. C/Monte Igueldo 101, Madrid. Teléfono: 91 - 4771413.

[10] Autores: Kaj Wiik, OH6EH y Jarkko Vuori, OH2LNS. Alef Null DSP CARD 4, El Manual del usuario y el software para el DSP-4 son obtenibles en ftp://wooster.hut.fi/pub/ham/dsp-4.

[11] CS4215 16-bit Multimedia Audio Codec. Crystal Semiconductor Audio Databook. Crystal Semiconductor Corporation, PO Box 17847, Austin TX 78760, USA.

Back to EA2BAJ's Ham Homepage