interfacing external memory device with arduino due micro controller

Dear Sir,

I have written code for interfacing external memory device (HM62V16100I) with arduino due micro controller.
I am writing 10 different data (from a to j) on 10 different address location.
& I wanted to read the same data (from a to j) when I am doing the read operation from memory.

But what i am seeing only the last data (j) is coming 10 times.(may be i am reading the ports).

How to read external memory device.Do we need to enable something(some register). I am not using external bus interface, I have assign I/O my own to interface with external memory.

I am not sure port register that i have used is correct.

can you please tell me how to interface external memory device from arduino due microcontroller. I urgently need that code.

/*********************************************IO

SIGNALS********************************************

LIBS SIGNAL#######

PB15----LIBS_DATA(INPUT TO uC)

PB12----TC_SERIAL_DATA(OUTPUT)

PA0----TC_TRP_PULSE(OUTPUT)

PB13----TC_SERIAL_CLOCK(OUTPUT)

PB25----DH_DATA_READ_ENABLE(OUTPUT)

PB26----DH_MODE(OUTPUT)

PB27----DH_CLOCK(OUTPUT)

PB16----LIBS_DATA_READY(INPUT)

PB14----LIBS_ON_OFF(INPUT)

SRAM memory ADDRESS#####

PC1----SRAM ADDRESS:AD0(OUTPUT)

PC2----SRAM ADDRESS:AD1(OUTPUT)

PC3----SRAM ADDRESS:AD2(OUTPUT)

PC4----SRAM ADDRESS:AD3(OUTPUT)

PC5----SRAM ADDRESS:AD4(OUTPUT)

PC6----SRAM ADDRESS:AD5(OUTPUT)

PC7----SRAM ADDRESS:AD6(OUTPUT)

PC8----SRAM ADDRESS:AD7(OUTPUT)

PC9----SRAM ADDRESS:AD8(OUTPUT)

PC12----SRAM ADDRESS:AD9(OUTPUT)

PC13----SRAM ADDRESS:AD10(OUTPUT)

PC14----SRAM ADDRESS:AD11(OUTPUT)

PC15----SRAM ADDRESS:AD12(OUTPUT)

PC16----SRAM ADDRESS:AD13(OUTPUT)

PC17----SRAM ADDRESS:AD14(OUTPUT)

PC18----SRAM ADDRESS:AD15(OUTPUT)

PC19----SRAM ADDRESS:AD16(OUTPUT)

PC21----SRAM ADDRESS:AD17(OUTPUT)

PC22----SRAM ADDRESS:AD18(OUTPUT)

PC23----SRAM ADDRESS:AD19(OUTPUT)

SRAM memory DATA#####

PD0----SRAM DATA:D0(IN/OUTPUT)

PD1----SRAM DATA:D1(IN/OUTPUT)

PD2----SRAM DATA:D2(IN/OUTPUT)

PD3----SRAM DATA:D3(IN/OUTPUT)

PD4----SRAM DATA:D4(IN/OUTPUT)

PD5----SRAM DATA:D5(IN/OUTPUT)

PD6----SRAM DATA:D6(IN/OUTPUT)

PD7----SRAM DATA:D7(IN/OUTPUT)

PD8----SRAM DATA:D8(IN/OUTPUT)

PD9----SRAM DATA:D9(IN/OUTPUT)

PD10----SRAM DATA:D10(IN/OUTPUT)

PC24----SRAM DATA:D11(IN/OUTPUT)

SRAM memory Control lines#####

PC28----SRAM CONTROL:WE bar(OUTPUT)

PC25----SRAM CONTROL:OE bar(OUTPUT)

PA19----SRAM CONTROL:UB bar(OUTPUT)

PA20----SRAM CONTROL:LB bar(OUTPUT)


*****/

#include <asf.h>

/*******************************FUNCTIONS FOR

UART*****************************************************/
void uart_ini(void);
void uart_tx(unsigned char DATA);
unsigned char uart_rx(void);

unsigned char LIBS_DATA[88625];// this memory location used to store the LIBS data
//unsigned char LIBS_DATA[88835];// this memory location used to store the LIBS data
union int_char // this union is used to convert int val to two char or two char to int
{
unsigned int ival;
unsigned char cval[2];
}conv;

unsigned long cycle_count=0;
unsigned long data_cycle=0;
unsigned long data_count=0;
unsigned long pulsenum=0;
unsigned long r;
unsigned char chr=0;
unsigned long t=0;
unsigned long DATA0_10=0,DATA24=0,DATA_12=0;
unsigned long ADD=0,ADD1_9=0,ADD12_19=0,ADD21_23=0;
unsigned long ADD_TEMP=0;
unsigned long count=0;
int main (void)
{
//unsigned int p;
sysclk_init();// system clock enable
board_init();// board function enable

/********************************POAR C I/O

configuration******************************/
/********************************prg for o/p address

lines*****************************/
/********************************PC24 as i/o lines initially made as

o/p***************/
REG_PIOC_WPMR=0x50494F00;
REG_PIOC_PER=0x13EFF3FE; //0x12EFF3FE;
REG_PIOC_PDR=0xEC100C01; //0xED100C01;
REG_PIOC_OER=0x13EFF3FE; //0x12EFF3FE
REG_PIOC_ODR=0xEC100C01; //0xED100C01;
REG_PIOC_IDR=0xFFFFFFFF;
REG_PIOC_OWER=0x13EFF3FE; //0x12EFF3FE
REG_PIOC_PUDR=0x13EFF3FE;
REG_PIOC_PUER=0x00000000;
REG_PIOC_CODR=0x13EFF3FE;
// clear all output pin

/******************************** I/O configuration as per new

console**********/
REG_PIOB_WPMR=0x50494F00;
REG_PIOB_PER =0x0E01F000;
REG_PIOB_PDR=0xF1FE0FFF;
REG_PIOB_OER=0x0E003000;
REG_PIOB_ODR=0xF1FFCFFF;
REG_PIOB_IDR=0xFFFFFFFF;
REG_PIOB_OWER=0x0E003000;
REG_PIOB_PUDR=0x0E003000;
REG_PIOB_PUER=0x0001C000;
REG_PIOB_CODR=0x0E003000;// clear all output pin

REG_PIOA_WPMR=0x50494F00;
REG_PIOA_PER =0x00188000;
REG_PIOA_PDR=0x00008000; //**
REG_PIOA_OER=0x00180000;
REG_PIOA_ODR=0x00008000; //**
REG_PIOA_IDR=0xFFFFFFFF;
REG_PIOA_OWER=0x00180000;
REG_PIOA_PUDR=0x00180000;
REG_PIOA_PUER=0x00008000; //**
REG_PIOA_CODR=0x00180000;// clear all output pin

/********************************POAR C I/O

configuration******************************/
/********************************prg for I/O lines initially made as

o/p*****************************/
REG_PIOD_WPMR=0x50494F00;
REG_PIOD_PER=0x000007FF;
REG_PIOD_PDR=0xFFFFF800;
REG_PIOD_OER=0x000007FF;
REG_PIOD_ODR=0xFFFFF800;
REG_PIOD_IDR=0xFFFFFFFF;
REG_PIOD_OWER=0x000007FF;
REG_PIOD_PUDR=0x000007FF;
REG_PIOD_PUER=0x00000000;
REG_PIOD_CODR=0x000007FF;

uart_ini();// uart function initialization

while(1)
{

chr=uart_rx();

if(chr=='n')
{

chr=uart_rx();
chr=0;
t = 1 ;
}
if (t == 1) {
ADD= 0x00000000; //(write opeation)
chr = 'a';
REG_PIOC_SODR|=0x02000000 ; //memory OE bar (for read

& write)
REG_PIOC_SODR|=0x10000000 ; //memory WE bar (for writing)
for (cycle_count=0;cycle_count<10; cycle_count++) {

for(r=0;r<10000;r++);

/write into memory start****/
ADD1_9=(ADD&0x000001FF)<<1;
ADD12_19=(ADD&0x0001FE00)<<3;
ADD21_23=(ADD&0x000E0000)<<4;

REG_PIOC_ODSR=(ADD1_9|ADD12_19|ADD21_23); //Addressing processing

REG_PIOC_CODR|=0x10000000 ; //memory WE bar (for writing)

REG_PIOD_ODSR= chr; //data i/p-o/p

REG_PIOC_SODR|=0x10000000 ; //memory WE bar (for writing)

chr ++;

ADD ++;

}

ADD= 0x00000000;
/******make i/O lines as i/p (read opeation) *****************/
REG_PIOD_OER=0x00000000;
REG_PIOD_ODR=0xFFFFFFFF;

for (cycle_count=0;cycle_count<10; cycle_count++) {

ADD1_9=(ADD&0x000001FF)<<1;
ADD12_19=(ADD&0x0001FE00)<<3;
ADD21_23=(ADD&0x000E0000)<<4;

REG_PIOC_ODSR=(ADD1_9|ADD12_19|ADD21_23);

for(r=0;r<10000;r++);
REG_PIOC_CODR|=0x02000000 ;//memory OE bar (for read & write)

conv.ival=REG_PIOD_ODSR; //data i/p-o/p

REG_PIOC_SODR|=0x20000000 ; //memory WE bar (for reading)

ADD ++;

uart_tx=conv.cval[1];
uart_tx=conv.cval[0];
conv.cval[1]=0;
conv.cval[0]=0;
conv.ival=0;

} t = 0;

}

}
}

void uart_ini(void)
{
REG_PIOA_WPMR =0x50494F00;
REG_PIOA_PER|=0x00000c00;
REG_PIOA_PDR|=0x00000300;
REG_PIOA_OER|=0x00000200;
REG_PIOA_PUDR|=0x00000200;
REG_PIOA_PUER|=0x00000100;
REG_PIOA_ODR|=0x00000100;
REG_PIOA_ABSR=0x00000000;
REG_UART_CR=0x00000000;
REG_UART_CR=0x00000050;
REG_UART_MR=0x00000800;
REG_UART_IER=0x00000000;
REG_UART_IDR=0xFFFFFFFF;
REG_UART_BRGR=0x0000002E;
//REG_UART_BRGR =0x00000017;
}
void uart_tx(unsigned char DATA)
{
while(!(REG_UART_SR&0x00000002));
REG_UART_THR=DATA;
}

unsigned char uart_rx(void)
{
unsigned char DATA;
while(!(REG_UART_SR&0x00000001));
DATA=(unsigned char)REG_UART_RHR;
return DATA;
}

Regards
Monika