México D.F. a 17 de Abril de 1995

Taller de Microprocesadores

Profesor:

Antonio Mondragón

Anteproyecto

Programador de EPROM´S

Integrantes:

César Villarreal

Mauricio Ordóñez

Víctor Iniestra

Objetivo:

-Desarrollar un circuito útil compatible con el kit desarrollado en clase.

-Comprender y emplear los métodos de programación de los EPROM´S.

-Proveernos de una manera fácil y económica de un programador de EPROM´S.

Alcances y Limitaciones:

Se podrán grabar EPROM´S de la familia 27XX excepto:

-2704, 2708 ya que estos requieren de tres fuentes de alimentación independientes.

-Todos aquellos cuyo voltaje de programación rebase los 12.5V. Esto último porque nuestra fuente de VPP será el DAC que no da voltajes demasiado elevados.

Nuestro programador de EPROM´S podrá grabar el contenido de la memoria del microprocesador. Como la memoria del micro es relativamente pequeña, podrán ser necesarios varios pasos de programación para llenar completamente una EPROM grande.

Asi mismo se podrán grabar EPROM´S de 24 o 28 pines. Esto cubre una rango de 2KB (2716) a 64KB (27512).

El programador comprobará el buen funcionamiento del EPROM verificando cada localidad conforme ésta se vaya escribiendo.

Diagrama a Bloques:

Analizando un 2716 y comparándolo con un 2732 nos damos cuenta que son, para fines de programación, idénticos:

Tienen las mismas patas de datos y de direcciones, excepto porque el 2732 tiene una más. Se necesitará, eso sí, redireccionar la señal VPP, podría ser a mano con un JUMPER, o con algún dispositivo no TTL que funcione como lo haría un MUX a "grandes" voltajes.

Veamos los demás:

Nos damos cuenta de que el bus de datos es el mismo para los cuatro casos. Además el bus de direcciones es el mismo, sólo se van agragando patas de direccionamiento al chip.

Proponemos:

Del micro pondremos un GAL, este gal activará cuando sea debido los siguientes componentes. Podría estar conectado a cs_extra del gal que ya se tenía para hacer cambios mínimos al kit.

Un registro de 8 FF, llamado datOut, aquí el micro pondrá los datos que deberán ser programados en el EPROM. Este registro será visto por el programa como una localidad de memoria más.

Dos registros de 8 FF c/u, dir0 y dir1. Dos localidades de memoria más para el micro. Aqui se pondrá la dirección en la que se deberá programar el dato dentro del EPROM.

datIn será como datOut, pero alrevés. Es decir, se habilitará el EPROM para lectura y el dato que de él salga se guardará en este registro de 8 FF para que se pueda verificar la programación.

Para la selección adecuada de todos estos circuitos tendremos un registro de 4 FF, llamado oe (output enable). Habilitará o no las salidas de los anteriores circuitos con la siguiente lógica:

0000: Nada se habilita.

0001: Se habilita la salida del EPROM.

0010: Se habilitan las salidas de los registros dir0 y dir1.

0100: Se habilita la salida de datOut.

1000: Se habilita datIn.

Obviamente las combinaciones activarían las salidas de más de un registro o EPROM a la vez.

Ahora veremos las conexiones al conector zif de 28 patas (donde se pondrá el EPROM).

Núm. pata 24:	Núm. pata 28: 	2716	2732	2764	27128	27256     27512

	N/A		1	N/A	N/A	VPP	VPP	VPP	  A15
	N/A		2	N/A	N/A	A12	A12	A12	  A12
	1		3	A7	A7	A7	A7	A7	  A7
	2		4	A6	A6	A6	A6	A6	  A6
	3		5	A5	A5	A5	A5	A5	  A5
	4		6	A4	A4	A4	A4	A4	  A4
	5		7	A3	A3	A3	A3	A3	  A3
	6		8	A2	A2	A2	A2	A2	  A2
	7		9	A1	A1	A1	A1	A1	  A1
	8		10	A0	A0	A0	A0	A0	  A0
	9		11	D0	D0	D0	D0	D0	  D0
	10		12	D1	D1	D1	D1	D1	  D1
	11		13	D2	D2	D2	D2	D2	  D2
	12		14	GND	GND	GND	GND	GND	  GND
	13		15	D3	D3	D3	D3	D3	  D3
	14		16	D4	D4	D4	D4	D4	  D4
	15		17	D5	D5	D5	D5	D5	  D5
	16		18	D6	D6	D6	D6	D6	  D6
	17		19	D7	D7	D7	D7	D7	  D7
	18		20	E/P	CE	CE	CE	CE	  CE
	19		21	A10	A10	A10	A10	A10	  A10
	20		22	OE	VPP	OE	OE	OE	  OE
	21		23	VPP	A11	A11	A11	A11	  A11
	22		24	A9	A9	A9	A9	A9	  A9
	23		25	A8	A8	A8	A8	A8	  A8
	24		26	VCC	VCC	?	A13	A13	  A13
	N/A		27	N/A	N/A	PGM	PGM	A14	  A14
	N/A		28	N/A	N/A	VCC	VCC	VCC	  VCC

	Se ve que se necesitará una decodificación en:

	N/A		1	N/A	N/A	VPP	VPP	VPP	  A15
	20		22	OE	VPP	OE	OE	OE	  OE
	21		23	VPP	A11	A11	A11	A11	  A11
	24		26	VCC	VCC	?	A13	A13	  A13

Otras líneas como la 27 no representa problema ya que el valor de PGM puede ser fijado por el programa obligando a A14 a tener un valor especifico.

La decodificación de VCC y de VPP proponemos hacerla mediante JUMPERS, para así asegurar el correcto acceso de la corriente al EPROM. El programa deberá avisar al usuario el cambio que se necesite hacer a los JUMPERS.

Pseudocódigo de la organización global del software:

El programa será a base de menus. Un primer menú será dedicado a la gestión de la memoria del micro. Éste será necesario para la verificación de los datos que serán programados en el EPROM.

Una segunda opción pedirá el tipo de EPROM. La tercera opción programará y verificará al EPROM. La programación y verificación será más o menos así:

datOut, datIn, dir0, dir1 y oe se definirán como apuntadores de caracteres y se les asignará el valor de la localidad de memoria donde los gal´s los mapean.

El programa pedirá la dirección de inicio en donde se encuentran los datos a programar (esto en el micro). Luego pedirá el número de datos a programar, y por último pedirá la dirección dentro del EPROM a partir de la cual se programará.

1.-Pone la dirección de programación del EPROM en dir0 y en dir1.
2.-Pone los datos en datOut.
3.-Activa datOut y datIn con OE.
4.-Dale al DAC la instrucción para que empiece a dar los 12.5V
5.-Aplica el CE del EPROM durante, al menos, 50ms.
6.-Desactiva CE del EPROM.
7.-Baja la salida del DAC a 0V.
8.-Desactiva datOut y activa datIn (Todo con OE)
9.-Activa CE del EPROM
10.-Carga datIn y comprueba lo anteriormente programado.
11.-Repite el ciclo hasta que se acaben los datos.

Instrucciones básicas:

Para compilar

cc68000 archivo.c

Para encadenar el proyecto

linker -f link.spc start.o alacia.o alptm.o victor.o inout.o eprom.o memoria.o proyecto.o libc.a

Para pasar a código máquina

down -d mot %1.out -o %1.hex

Para ver listado

abs %1.out %1.lst

Ejemplo para el tic

cc68000 ptm99.c -o ptm99.o cc68000 pia99.c -o pia99.o cc68000 acia99.c -o acia99.o cc68000 vector99.c -o vector99.o cc68000 tipdef.h -o tipdef.o cc68000 tic99.c -o tic99.o linker -f link.spc start.o ptm99.o pia99.o acia99.o fputc.o vector99.o tic99.o libc.a -o tic99.out

Utilerías

/*Programa que convierte archivos de tipo BINARIO a hexadecimal*/
#include 
#include 
void main (void)
{
  FILE *archivo, *salida;
  int ch;
  archivo=fopen("binary.","r");
  salida=fopen("com1:","w");
  clrscr ();
      while (!feof(archivo)==1)
     {
      ch=(getc(archivo));
      if (ch<=9)
       {
	fprintf(salida,"0");
       }
      fprintf(salida,"%x",ch);
     }
    fclose (archivo);
    fclose (salida);
}
/*Programa que convierte archivos de tipo BINARIO a hexadecimal*/
#include 
#include 
void main (void)
{
  FILE *archivo, *salida;
  archivo=fopen("binary.","r");
  salida=fopen("con","w");
  clrscr ();
      while (!feof(archivo)==1)
     {
      fprintf(salida,"%02x",getc(archivo));
     }
    fclose (archivo);
    fclose (salida);
}