desktop

Bus de memoria externa

Como saben. Los pic18f8xxxx tienen la ventaja de poder conectar una memoria FLASH, EEPROM o SRAM a 28 de sus pins para poder controlarlos de manera "sencilla". Me he dado a la tarea de implementar dicha interfaz pero por mas que hago, no logro mandar datos a la memoria SRAM externa que tengo conectada. Estoy utilizando C18 como compilador y el pic18f87j50 como dispositivo. Esto es lo que he hecho hasta el momento.

Código:
1.- // CONFIG3L - Seleccionar los pragmas necesarios para configurar dicha interfaz
#pragma config EASHFT = ON
#pragma config MODE = XM20
#pragma config BW = 16
#pragma config WAIT = ON

2.- //Habilitar el modo "Extended microcontroller mode" para activar la interfaz (el bit 7 del registro MEMCON es el que habilita o deshabilita la funcion de "bus de memoria externa"

Código:
MEMCON=1;               //Byte Select Mode.

3.- Modifiqué el Linker file de dicho pic agregando las siguientes lineas:

Código:
CODEPAGE   NAME=xram       START=0x20000           END=0x1FFFFF       PROTECTED
SECTION	   NAME=SRAM_BASE  ROM=xram

4.- En el main.c de mi proyecto escribi las lineas:
Código:
#pragma romdata SRAM_BASE //= SRAM_BASE // Declare section to place the ext variables
                                           // declare some variables

rom far int var_ext;        //Inicializo una variable en una dirección "externa" definida en el linker file (0x20000)

#pragma romdata	// return to default section - in case you have local variables

int var_int;             //Inicializo una variable en la memoria interna del pic

Al debuggear con el pickit3 puedo ver que la variable interna si se inicializa (con 256) pero la externa no (su valor es 0) lo cual me hace pensar que no esta pudiendo accesar a la memoria SRAM externa. Alguien sabe se a nivel software he hecho algo mal? Revise el hardware y no encontré ningún error. Estoy usando la memoria AS7C34098A de Alliance Memory Inc. y dos latches TI-HC373(LATCHX8) ya que la interfaz los necesita para poder funcionar. Si alguien tiene alguna idea de como puedo solucionar o si quiera encontrar algún error en el software o en el hardware le agradeceré mucho la información. Si a alguien le interesa este tema y necesita que proporcione mas información, lo haré con gusto.
Muchas Gracias
 
El hecho de declarar una variable no te garantiza nada. Yo realizaria varias operaciones de escritura y lectura. Por ejemplo, un lazo que asigne valores de un contador ascendente a n direcciones, e inmediatamente despues OTRO lazo que lea esas mismas direcciones.
 
Atrás
Arriba