This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

how to interface spi with arm lpc2378

how i should configure spi at45db161

tell me some basic idea
how to read and write
thank you

Parents
  • thank u
    i written this code for simple raed and write operation with spi
    but i m not getting

    InitSPI();

    IOCLR0 = SPI0_SEL; Write_SPI(0x84); // opcode Write on buffer 1 Write_SPI(0x00); Write_SPI(0x55); // data into buffer 1

    // data = Read_SPI();

    Write_SPI(0x83); //opcode buff to MM Write_SPI(0x00); // location of MM Write_SPI(0x00); // location of MM Delay(1000);

    Write_SPI(0x54); // Read opcode for buffer 1 Write_SPI(0x00); // bufffer address

    Delay(1000); data = Read_SPI(); TransmitChar0(data>>8); TransmitChar0(data);

    }
    /***************************************** /* main end */
    void InitSPI(void)
    { PCONP |= (1 << 8); PINSEL0 |= 0xC0000000; //P0.15 PINSEL1 |= 0x0000003C; //P0.16,P0.17,P0.18 PCONP |= (1 << 8); S0SPCR = 0x00; IODIR0 = SPI0_SEL; IOSET0 = SPI0_SEL; S0SPCR = 0x20; S0SPCCR = 0x96; // Check it first
    }

    void Write_SPI(unsigned char spiTx)
    { S0SPDR = spiTx; while(!(S0SPSR & SPIF));
    } unsigned char Read_SPI()
    { unsigned char spiRx; spiRx = S0SPDR; return (spiRx);
    } void SPI_ISR (void) __irq
    { S0SPINT = 0x01;

    VICVectAddr = 0x00000000;
    }

Reply
  • thank u
    i written this code for simple raed and write operation with spi
    but i m not getting

    InitSPI();

    IOCLR0 = SPI0_SEL; Write_SPI(0x84); // opcode Write on buffer 1 Write_SPI(0x00); Write_SPI(0x55); // data into buffer 1

    // data = Read_SPI();

    Write_SPI(0x83); //opcode buff to MM Write_SPI(0x00); // location of MM Write_SPI(0x00); // location of MM Delay(1000);

    Write_SPI(0x54); // Read opcode for buffer 1 Write_SPI(0x00); // bufffer address

    Delay(1000); data = Read_SPI(); TransmitChar0(data>>8); TransmitChar0(data);

    }
    /***************************************** /* main end */
    void InitSPI(void)
    { PCONP |= (1 << 8); PINSEL0 |= 0xC0000000; //P0.15 PINSEL1 |= 0x0000003C; //P0.16,P0.17,P0.18 PCONP |= (1 << 8); S0SPCR = 0x00; IODIR0 = SPI0_SEL; IOSET0 = SPI0_SEL; S0SPCR = 0x20; S0SPCCR = 0x96; // Check it first
    }

    void Write_SPI(unsigned char spiTx)
    { S0SPDR = spiTx; while(!(S0SPSR & SPIF));
    } unsigned char Read_SPI()
    { unsigned char spiRx; spiRx = S0SPDR; return (spiRx);
    } void SPI_ISR (void) __irq
    { S0SPINT = 0x01;

    VICVectAddr = 0x00000000;
    }

Children
  • The instructions for posting source code are very clear and easy to follow:

    www.danlhenry.com/.../keil_code.png

    If you can miss something so obvious as that, and not even notice the problem in the Preview or in the actual post - and do it twice - then it is very likely that you have missed important details in the NXP documentation.

    Go back to the NXP documentation and study it thoroughly...

  • thank you sir,

    actulally i m not getting sck clock from the processor,
    i checked that pin on CRO .
    in lpc user manual they given that in master mode clock counter value is even and equal to 8 or greater than this.
    i initialised tthat value also but then also i m not getting sck on that pin.
    whenever i get clock then i will go ahead.
    this is my code ..
    int main (void)
    { SYS_TargetResetInit(); PCONP |= (1 << 8);
    /* by default, it's enabled already, for safety reason */ PINSEL0 |= 0xC0000000; PINSEL1 |= 0x0000003C; S0SPCCR = 0x8; ** how much value i should enter
    i tried so many freqvency above 0x8 S0SPCR = 0x000;
    }

    void SYS_TargetResetInit(void)
    { SCS |= 0x20;
    /* Enable main OSC */ while( !(SCS & 0x40) );
    /* Wait until main OSC is usable */ CLKSRCSEL = 0x1;
    /* select main OSC, 12MHz, as the PLL clock source */ PCLKSEL0 = 0x55555555;
    /* PCLK is the same as CCLK */ PCLKSEL1 = 0x55555555; SYS_GPIOResetInit();
    }

    thank u

  • thank you sir,

    actulally i m not getting sck clock from the processor,
    i checked that pin on CRO .
    in lpc user manual they given that in master mode clock counter value is even and equal to 8 or greater than this.
    i initialised tthat value also but then also i m not getting sck on that pin.
    whenever i get clock then i will go ahead.
    this is my code ..
    < pre>
    int main (void)
    {

    SYS_TargetResetInit();

    PCONP |= (1 << 8);

    /* by default, it's enabled already, for safety reason */ PINSEL0 |= 0xC0000000;

    PINSEL1 |= 0x0000003C;

    S0SPCCR = 0x8;

    S0SPCR = 0x000;

    }

    void SYS_TargetResetInit(void)
    {

    SCS |= 0x20;

    /* Enable main OSC */

    while( !(SCS & 0x40) );

    /* Wait until main OSC is usable */

    CLKSRCSEL = 0x1;

    /* select main OSC, 12MHz, as the PLL clock source */

    PCLKSEL0 = 0x55555555;

    /* PCLK is the same as CCLK */

    PCLKSEL1 = 0x55555555;

    SYS_GPIOResetInit();

    }
    .