Применено: SRAM типа CY62158EV30 (CYPRESS) с организацией памяти 8-Mbit (1024K x 8). Эта микросхема имеет 8-битную шину данных и 20-битную шину адреса. В качестве регистра-защелки использована микросхема 74ABT16373 (FAIRCHILD) - 16 битный регистр.
Принцип работы: в первом такте происходит запись младшего и старшего байтов адреса в регистр 74ABT16373 стробирующим импульсом с порта P6.5 на
входы регистра LE1, LE2. Во втором такте при записи данных в память SRAM на порт P4 микроконтроллера выставляется байт данных, на порт P5 выставляются старшие биты адреса (16, 17, 18, 19). Сигнал низкого уровня на порте P6.7 выводит из регистра на шину адреса памяти младший и старший адресные байты. Происходит запись сигнала импульсом низкого уровня с порта P6.0 на вход WE памяти.
В режиме чтения режим работы схожий, в этом случае P4 работает как порт входа.
#define PORTINIT P6DIR |= 0xA7
#define LE16_ON P6OUT |= BIT5
#define LE16_OFF P6OUT &= ~BIT5
#define OE16_ON P6OUT |= BIT7
#define OE16_OFF P6OUT &= ~BIT7
#define WE_ON P6OUT |= BIT0
#define WE_OFF P6OUT &= ~BIT0
#define OE_ON P6OUT |= BIT1
#define OE_OFF P6OUT &= ~BIT1
#define CE_ON P6OUT |= BIT2
#define CE_OFF P6OUT &= ~BIT2
#define LBUSout P4OUT
#define MBUSout P5OUT
#define LBUSin P4IN
#define MBUSin P5IN
#define LBUSdir P4DIR
#define MBUSdir P5DIR
#define INPUT 0x00
#define OUTPUT 0xff
void SRAM_Init(void);
void SRAM_Write(unsigned char byte, unsigned long Address);
unsigned char SRAM_Read(unsigned long Address);
void SRAM_Init(void)
{
PORTINIT;
LE16_OFF;
OE16_ON;
CE_ON;
WE_ON;
OE_ON;
}
void SRAM_Write(unsigned char byte, unsigned long Address)
{
LBUSdir = OUTPUT;
MBUSdir = OUTPUT;
LBUSout = Address & 0x00FF;
MBUSout = (Address & 0xFF00)>>8;
LE16_ON;
LE16_OFF;
LBUSout = byte;
MBUSout = (Address & 0xFF0000)>>16;
OE16_OFF;
WE_OFF;
WE_ON;
OE16_ON;
LBUSdir = INPUT;
MBUSdir = INPUT;
}
unsigned char SRAM_Read(unsigned long Address)
{
LBUSdir = OUTPUT;
MBUSdir = OUTPUT;
LBUSout = Address & 0x00FF;
MBUSout = (Address & 0xFF00)>>8;
LE16_ON;
LE16_OFF;
LBUSdir = INPUT;
MBUSout = (Address & 0xFF0000)>>16;
OE16_OFF;
OE_OFF;
OE_ON;
OE16_ON;
MBUSdir = INPUT;
return LBUSin;
}