5.1          Arranque programado en el TMS320C31: Boot-Loader.

 

El TMS320C31 tiene, al igual que todos los DSPs de la familia TMS320C3x, ROM interna del tipo OTP (One Time Programmable). A diferencia que en el caso del TMS320C30 esta ROM interna ya viene programada de fábrica con un programa denominado boot-Loader[1]. El reset del TMS320C31, funcionando en modo microcomputador (arranque desde memoria ROM interna), provoca que la CPU del DSP lea la posición 000000h de la ROM interna. En dicha posición se encuentra la dirección de comienzo del programa denominado boot-loader ubicado, a su vez, en la ROM interna del DSP.

 

En la figura 2.24 se muestran los diagramas de flujo que describen el funcionamiento del programa boot-loader.

 

El programa boot-loader gestiona el trasvase de bloques de datos (código diseñado por el usuario) enviados desde otro sistema microprocesador y recibidos por el puerto serie de que dispone el TMS320C31 o ubicados en algún dispositivo externo de memoria (colocado en el mapa de memoria del DSP en una de las tres posiciones conocidas como BOOT1, BOOT2 ó BOOT3, véase figura 2.16, y normalmente de tipo EPROM) hacia otras posiciones del mapa de memoria del DSP ocupadas por dispositivos de almacenamiento RAM.

 

 

Figura 2.23. Diagrama de flujo del programa Boot-loader (ubicado en ROM interna del TMS320C31).

 

El programa es realmente sencillo. Consiste en un bucle que espera una señal, generada por el usuario, que le indique que debe iniciar el trasvase de bloques de datos. Mientras el programa se encuentre en el bucle de espera, la única tarea que realiza el DSP es comprobar si el usuario ha generado alguna de las señales de inicio de trasvase de bloques de datos. El usuario dispone de cuatro líneas de entrada al DSP,  a , como señales para iniciar el trasvase de los bloques de datos. Inicialmente estas señales se usan como líneas digitales de entrada al programa y no como líneas de petición de interrupciones externas, y le sirven al usuario para indicarle al boot-loader hacia donde debe ir a buscar el código que va a cargar en memoria RAM ubicada en el mapa de memoria del DSP. Cuando una de estas líneas es activada por el usuario, el programa boot-loader inicia la carga programada, bien desde memoria externa (desde una dirección de tres posibles, BOOT1, BOOT2 ó BOOT3), bien mediante el puerto serie (el DSP estaría esperando datos que otro sistema digital, que puede ser otro DSP, le envía empleando un protocolo serie síncrono).

 

1.      Carga desde Memoria Externa. El programa boot-loader accede a un dispositivo de memoria, normalmente de tipo EPROM, ubicado en BOOT1, BOOT2 ó BOOT3 en el mapa de memoria para realizar el trasvase de un bloque de datos (programa diseñado por el usuario) hacia otras posiciones del mapa de memoria del DSP. Antes de trasladar los bloques de código el programa boot-loader precisa que se le pasen una serie de parámetros de configuración o programación del tipo y modo de transferencia que debe realizar (cabecera del bloque de datos, primeros cuatro registros de 32 bits). La cabecera de un bloque de datos se muestra en la tabla 2-6. Estos valores de configuración son, el tipo de dispositivo de memoria al que se accede a recoger el bloque de datos (con un ancho de bus programable de 8, 16 ó 32bits), la palabra de control para la configuración del acceso a dichos periféricos de memoria a través del bus principal, el tamaño del bloque de datos que se desea transferir y, finalmente, la dirección de destino o de ubicación del bloque. Posteriormente aparece la primera instrucción del bloque de datos que se trasladará a otra zona del mapa de memoria del DSP.

            

           En definitiva, primero se configura el modo y tipo de transferencia, luego se realiza la misma. Se pueden realizar transferencias de múltiples bloques de datos desde las zonas BOOTs hacia otras zonas en el mapa de memoria del DSP, figura 2.24. El boot-loader se termina añadiendo, al final del último bloque transferido, el código 00000000h que representa que el tamaño del siguiente bloque a transferir es 0 (no existe tal bloque en realidad). Obsérvese que, al menos, el primer bloque debe tener longitud mayor de cero para que tenga sentido invocar al programa boot-loader, si no fuese así el sistema arrancaría de forma impredecible.

 

Posición

Descripción

Valores válidos

0

Tipo de memoria boot (8, 16 ó 32)

0x8, 0x10, 0x20

1

Configuración accesos por el bus principal

 

2

Tamaño del bloque del programa (blk)

0 < Tamaño bloque < 224

3

Dirección de destino

Cualquier dirección de 24 bits es válida

4

Código de inicio del programa

Cualquier instrucción o dato de 32 bits

Tabla 2-6. Registros de configuración del programa boot-loader: Cabecera del bloque de código en memoria externa (BOOT1, BOOT2 ó BOOT3).

 

Posición

Valor

Descripción

BOOTn+0

0x08

Memoria externa de ancho 1 byte, 0x8

BOOTn+1

0x00

BOOTn+2

0x00

BOOTn+3

0x00

BOOTn+4

0x58

Tipo de acceso: 0x1058

·   SWW   = 11

·   WCNT = 2

BOOTn+5

0x10

BOOTn+6

0x00

BOOTn+7

0x00

BOOTn+8

0xFF

Tamaño bloque de código a trasladar: 0x1FF

BOOTn+9

0x01

BOOTn+10

0x00

BOOTn+11

0x00

BOOTn+12

0x00

Dirección de destino del código: 0x809C00

BOOTn+13

0x9C

BOOTn+14

0x80

BOOTn+15

0x00

Tabla 2-7. Cabecera del bloque de código en memoria externa (BOOT1, BOOT2 ó BOOT3) con tipo de memoria boot de un ancho de 1 byte (8 bits).

 

Posición

Valor

Descripción

BOOTn+0

0x0010

Memoria externa de ancho 2 bytes, 0x10

BOOTn+1

0x0000

BOOTn+2

0x1058

Tipo de acceso: 0x1058

·SWW   = 11

·WCNT = 2

BOOTn+3

0x0000

BOOTn+4

0x01FF

Tamaño bloque de código a trasladar: 0x1FF

BOOTn+5

0x0000

BOOTn+6

0x9C00

Dirección de destino del código: 0x809C00

BOOTn+7

0x0080

Tabla 2-8. Cabecera del bloque de código en memoria externa (BOOT1, BOOT2 ó BOOT3) con tipo de memoria boot de un ancho de 2 bytes (16 bits).

 

Posición

Valor

Descripción

BOOTn+0

0x00000020

Memoria externa de ancho 4 bytes

BOOTn+1

0x00001058

Tipo de acceso: 0x1058

·   SWW   = 11

·   WCNT = 2

BOOTn+2

0x000001FF

Tamaño bloque de código a trasladar: 0x1FF

BOOTn+3

0x00809C00

Dirección de destino del código: 0x809C00

Tabla 2-9. Cabecera del bloque de código en memoria externa (BOOT1, BOOT2 ó BOOT3) con tipo de memoria boot de un ancho de 4 bytes (32 bits).

 

           En las tres tablas anteriores, tablas 2-7, 2-8 y 2-9, se muestra la secuencia de acceso del programa boot-loader a cualquiera de las posiciones BOOT1, BOOT2 ó BOOT3 con memoria externa configurada con un ancho de 1, 2 ó 4 bytes.

 

2.      Carga desde el puerto serie. El boot-loader configura automáticamente el puerto serie en modo de trasferencia de datos de ancho 32 bits y en modo de transferencia de bits fixed-burst (se verá cuando se estudie el periférico puerto serie síncrono del DSP). Como en el caso de la carga desde memoria externa se precisa de una cabecera para iniciar y programar la operación de carga. La cabecera, en este caso, sólo incluye el tamaño del bloque y la dirección de destino del bloque de datos.

 

Comentarios sobre el programa boot-loader:

 

·        Genera una pila de 1x32 bits (una word) que se encuentra en la posición 809800h (dentro de la RAM interna, bloque 0). No puede aparecer como destino de una instrucción esa dirección (cuando se traslade el control al DSP, a saber que puede haber en esa posición).

 

·        Las banderas de las interrupciones (registro IF) que se activen se ponen a 1, no las limpia el programa boot-loader, de forma que hay que comenzar limpiándolas antes de habilitar las interrupciones externas si se desea hacer uso, en el programa del usuario (bloque de código trasladado por el boot-loader), de las mismas y no se desea que aparezca una interrupción espúrea.

 

·        En modo microcomputador el TMS320C31 trae definidos, de fábrica, los vectores de interrupciones y excepciones software (la ROM interna OTP la programó el fabricante) para que apunten a direcciones fijas del bloque 1 de la RAM interna. Si se desea usar alguna interrupción debe ubicarse, en la posición del bloque 1 de RAM asignada por el fabricante, una instrucción de salto a las correspondientes rutinas de servicio de las interrupciones, figura 2.25.

 

·        El arranque efectivo se realiza desde la dirección de comienzo del primer bloque transferido, una vez efectuada la transferencia de los bloques de datos en el mapa de memoria del DSP.

 

Figura 2.24. Redireccionamiento de los vectores de interrupción y de las excepciones software en el TMS320C31 en modo microcomputador.

 



[1] Equiparable al Búfalo en el Motorola MC68HC11.

e-REdING. Biblioteca de la Escuela Superior de Ingenieros de Sevilla.


IMPLANTACIÓN DE UNA RED ASÃNCRONA DE ENSEÑANZA DEDICADA A LA IMPARTICIÓN DE LA ASIGNATURA COPLEMENTOS DE SISTEMAS ELECTRÓNICOS DIGITALES DE 3º CURSO DE INGENIERÃA DE TELECOMUNICACIÓN.

: Oliveros Garrido, Antonio
: Ingeniería Telecomunicación
Contenido del proyecto: