Hi . EEPRom used 25LC256 .. I have crossed verified the SIMO in CRO and am getting proper pulses .but somi is always in high impedance state. i am not able read back any data.. not even a scrap data too ..
void write_2_EEPROM(void);
void read_M_EEPROM(void);
void spi_fifo_init(void);
void Gpio_select(void);
Uint16 rEdata[20]; // Receive data buffer
Uint16 dummy ,i;
void main(void)
{
// Step 1. Initialize System Control:
InitSysCtrl();
// Step 2. Initalize GPIO:
InitSpibGpio();
// Step 3. Initialize PIE vector table:
// Disable and clear all CPU interrupts
DINT;
IER = 0x0000;
IFR = 0x0000;
// Initialize PIE control registers to their default state:
InitPieCtrl();
InitPieVectTable();
// Step 4. Initialize all the Device Peripherals:
spi_fifo_init();
Gpio_select();
EALLOW ;
// Enable interrupts required for this example
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER6.bit.INTx3=1;
PieCtrlRegs.PIEIER6.bit.INTx4=1;
IER=0x20; // Enable CPU INT6
ERTM;
//EINT; // Enable Global Interrupts
write_2_EEPROM();
read_M_EEPROM();
for(;;);
}
void spi_fifo_init()
{
SpibRegs.SPICCR.bit.SPISWRESET=0; // Reset SPI
SpibRegs.SPICCR.all=0x7 ; //8-bit character, DISABLING Loopback mode
SpibRegs.SPICTL.all=0x0017; //Interrupt enabled, Master/Slave XMIT enabled
SpibRegs.SPISTS.all=0x0000;
SpibRegs.SPIBRR = 127; // Baud rate
SpibRegs.SPIFFTX.bit.SPIFFENA =0; // Enable FIFO's, set TX FIFO level to 8
SpibRegs.SPICCR.bit.SPISWRESET=1; // Enable SPI
// SpibRegs.SPIFFRX.all=0x002F; // Set RX FIFO level to 8
// SpibRegs.SPIFFCT.all=0x00;
SpibRegs.SPIPRI .all=0x0010;
}
void write_2_EEPROM()
{
Uint16 i;
GpioDataRegs.GPACLEAR.bit.GPIO16 = 1;
SpibRegs.SPITXBUF = 0x0600 ; \\ WREN
while(SpibRegs.SPISTS.bit.INT_FLAG == 0)
{}
dummy = SpiaRegs.SPIRXBUF;
GpioDataRegs.GPASET.bit.GPIO16 = 1;
for(i=0;i<=100;i++)
{}
GpioDataRegs.GPACLEAR.bit.GPIO16 = 1;
SpibRegs.SPITXBUF = 0x0200 ; \\ Write
for(i=0;i<=1000;i++)
{}
SpibRegs.SPITXBUF = 0x4000 ; \\ address as 4000
SpibRegs.SPITXBUF = 0x0000 ;
for(i=0;i<=2500;i++)
{}
SpibRegs.SPITXBUF = 0x0100; \\ Data is 01 and 02
SpibRegs.SPITXBUF = 0x0200;
for(i=0;i<=1500;i++)
{}
dummy = SpiaRegs.SPIRXBUF;
SpibRegs.SPISTS.bit.OVERRUN_FLAG = 1;
GpioDataRegs.GPASET.bit.GPIO16 = 1;
for(i=0;i<=200;i++)
{}
}
void read_M_EEPROM(void)
{
GpioDataRegs.GPACLEAR.bit.GPIO16 = 1;
SpibRegs.SPITXBUF = 0x0300 ; \\ Read
for(i=0;i<=1500;i++)
{}
SpibRegs.SPITXBUF = 0x4000 ; \\address
SpibRegs.SPITXBUF = 0x0000 ;
// while (SpibRegs.SPISTS.bit.INT_FLAG == 0)
// {}
// dummy=SpiaRegs.SPIRXBUF;
for(i=0;i<=2000;i++)
{}
SpibRegs.SPISTS.bit.OVERRUN_FLAG = 1;
SpibRegs.SPITXBUF = dummy ; \\ sending dummy data
for(i=0;i<=2000;i++)
{}
rEdata[1]= SpibRegs.SPIRXBUF ;
GpioDataRegs.GPASET.bit.GPIO16 = 1;
}
void Gpio_select(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO16= 0x00;
GpioCtrlRegs.GPADIR.bit.GPIO16 = 1;
GpioDataRegs.GPASET.bit.GPIO16 = 1;
EDIS;
}
//===========================================================================
// No more.
//===========================================================================