Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Thread

SPI NOT RESPONDING

SPI NOT RESPONDING

2005-03-14 by rockraj_2003

HELLO FRIENDS,

No body giving me suggestion on how to program SPI.
My real task is to configure "DP1203" by using LPC2104.
The only way to configure DP1203 is throu "SPI".
I got an example file from Keil. 
Its working and producing SCK(Serial Clock).
I fixed the Clk Frequency at 100Khz. But I am getting only 40 Mhz.
I just Send an 8 bit Data After if i send other Data its not 
reponding.
The SCK pin is in low State.
The "DP1203" has got 8 address bit and 8 data bit.
So totally 16 bit for One Configuration of Registers.
But I want to Configure more than 20 Registers.
Can any one Suggest me where i am doing the mistake.

Here is the Code
#include <LPC210x.H>

#define SPI_SPCR       (*((volatile unsigned char *) 0xE0020000))
#define SPI_SPSR       (*((volatile unsigned char *) 0xE0020004))
#define SPI_SPDR       (*((volatile unsigned char *) 0xE0020008))
#define SPI_SPCCR      (*((volatile unsigned char *) 0xE002000C))
#define SPI_SPTCR      (*((volatile unsigned char *) 0xE0020010))
#define SPI_SPTSR      (*((volatile unsigned char *) 0xE0020014))
#define SPI_SPTOR      (*((volatile unsigned char *) 0xE0020018))
#define SPI_SPINT      (*((volatile unsigned char *) 0xE002001C))

int main (void) 
{
int i;
VPBDIV = 1; 
IODIR = 0x80; 
IOSET = 0x80;
PINSEL0 = 0x5500;
SPI_SPCCR = 0x93; 
SPI_SPCR = 0x20;
while (1) {
do SPI_SPDR = 0x55; 
while((SPI_SPSR & 0x80)==0); 
for(i=0;i<10000;i++);
SPI_SPSR = 0x00;
do SPI_SPDR = 0x0F; 
while((SPI_SPSR & 0x80)==0);
goto OUT;
}

OUT: for(i=0;i<1000;i++);

while (1) {
do SPI_SPDR = 0xF0; 
while((SPI_SPSR & 0x80)==0);
for(i=0;i<100000;i++);
goto OUT;
}
}






Thank U,

with Regards,
Rajendra R

Re: SPI NOT RESPONDING

2005-03-14 by Mark Butcher

Hallo Rajendra

The initialisation seems OK - 100k in master mode.

Make sure the SSEL pin is pulled up to '1' - there is an error in 
the device which doesn't allow sending if this is not the case.

Try the following transmission code - eg

unsigned char ucTest[] = {1,2,3,4,5};

fnSendSPIMessage(ucTest, sizeof(ucTest));

void fnSendSPIMessage(unsigned char *ptrData, unsigned short 
usLength)
{
  while (!(SPI_SPSR & SPIF)) {}; // wait for transmitter free
                                 // ensures that write works
  while (usLength--) {
    IOCLR = SPI_SSEL_OUT;       // activate SSEL  
    SPI_SPDR = *ptrData++;      // Set data Byte
    while (!(SPI_SPSR & SPIF)) {}; // wait for transmission to 
complete
    IOSET = SPI_SSEL_OUT;       // remove SSEL
  }
}

Note: SPI_SSEL_OUT is an output port to contol the SSEL line to the 
slave - the LPC2104 doesn't do this itself and SSEL can not be used 
for this purpose (needs the pullup and can not be programmed as 
output).
SPIF is 0x80.

This may help. The LPC2104 works OK as master but the SSEL line has 
to be wasted. As slave I gave up because it just didn't send 
sensible data back...

Regards

Mark Butcher

www.mjbc.ch

--- In lpc2000@yahoogroups.com, "rockraj_2003" <rockraj_2003@y...> 
wrote:
Show quoted textHide quoted text
> 
> HELLO FRIENDS,
> 
> No body giving me suggestion on how to program SPI.
> My real task is to configure "DP1203" by using LPC2104.
> The only way to configure DP1203 is throu "SPI".
> I got an example file from Keil. 
> Its working and producing SCK(Serial Clock).
> I fixed the Clk Frequency at 100Khz. But I am getting only 40 Mhz.
> I just Send an 8 bit Data After if i send other Data its not 
> reponding.
> The SCK pin is in low State.
> The "DP1203" has got 8 address bit and 8 data bit.
> So totally 16 bit for One Configuration of Registers.
> But I want to Configure more than 20 Registers.
> Can any one Suggest me where i am doing the mistake.
> 
> Here is the Code
> #include <LPC210x.H>
> 
> #define SPI_SPCR       (*((volatile unsigned char *) 0xE0020000))
> #define SPI_SPSR       (*((volatile unsigned char *) 0xE0020004))
> #define SPI_SPDR       (*((volatile unsigned char *) 0xE0020008))
> #define SPI_SPCCR      (*((volatile unsigned char *) 0xE002000C))
> #define SPI_SPTCR      (*((volatile unsigned char *) 0xE0020010))
> #define SPI_SPTSR      (*((volatile unsigned char *) 0xE0020014))
> #define SPI_SPTOR      (*((volatile unsigned char *) 0xE0020018))
> #define SPI_SPINT      (*((volatile unsigned char *) 0xE002001C))
> 
> int main (void) 
> {
> int i;
> VPBDIV = 1; 
> IODIR = 0x80; 
> IOSET = 0x80;
> PINSEL0 = 0x5500;
> SPI_SPCCR = 0x93; 
> SPI_SPCR = 0x20;
> while (1) {
> do SPI_SPDR = 0x55; 
> while((SPI_SPSR & 0x80)==0); 
> for(i=0;i<10000;i++);
> SPI_SPSR = 0x00;
> do SPI_SPDR = 0x0F; 
> while((SPI_SPSR & 0x80)==0);
> goto OUT;
> }
> 
> OUT: for(i=0;i<1000;i++);
> 
> while (1) {
> do SPI_SPDR = 0xF0; 
> while((SPI_SPSR & 0x80)==0);
> for(i=0;i<100000;i++);
> goto OUT;
> }
> }
> 
> 
> 
> 
> 
> 
> Thank U,
> 
> with Regards,
> Rajendra R

Re: SPI RESPONDING

2005-03-15 by rockraj_2003

Hello Mark,

Thanks for Ur Response.I tried Ur Code its working fine.
I aslo changed my prog.This Code is also giving the Same response.
I didn't CLR the SSEL pin at all.But I regularly changed SPIF to 0x00.

Now, my doubt is if i want to use MISO as well what should i do.
Since in the Data Sheet THE mentioned SPI as duplex.

How I can use MISO.

Silly Question, but I don't know about this.
If the SPI is in MOSI, it can send DATA (MASTER OUTPUT) at the Same 
time it receive data in SLAVE.(SLAVE INPUT).How much time it will 
wait to receive DATA. If again I put some Data to the SPI_SPDR it 
will transmit or it will wait to receive.   

> > #define SPI_SPCR       (*((volatile unsigned char *) 0xE0020000))
> > #define SPI_SPSR       (*((volatile unsigned char *) 0xE0020004))
> > #define SPI_SPDR       (*((volatile unsigned char *) 0xE0020008))
> > #define SPI_SPCCR      (*((volatile unsigned char *) 0xE002000C))
> > #define SPI_SPTCR      (*((volatile unsigned char *) 0xE0020010))
> > #define SPI_SPTSR      (*((volatile unsigned char *) 0xE0020014))
> > #define SPI_SPTOR      (*((volatile unsigned char *) 0xE0020018))
> > #define SPI_SPINT      (*((volatile unsigned char *) 0xE002001C))
> > 
> > int main (void) 
> > {
> > int i;
> > VPBDIV = 1; 
> > IODIR = 0x80; 
> > IOSET = 0x80;
> > PINSEL0 = 0x5500;
> > SPI_SPCCR = 0x93; 
> > SPI_SPCR = 0x20;
> > while (1) {
> > do SPI_SPDR = 0x55; 
> > while((SPI_SPSR & 0x80)==0); 
> > SPI_SPSR = 0x00;
> > do SPI_SPDR = 0x0F; 
> > while((SPI_SPSR & 0x80)==0);
> > SPI_SPSR = 0x00;
> > do SPI_SPDR = 0xF0; 
> > while((SPI_SPSR & 0x80)==0);
> > SPI_SPSR = 0x00;
> > }
> > }


with Regards
Rajendra R



--- In lpc2000@yahoogroups.com, "Mark Butcher" <M_J_Butcher@I...> 
wrote:
Show quoted textHide quoted text
> 

> Hallo Rajendra
> 
> The initialisation seems OK - 100k in master mode.
> 
> Make sure the SSEL pin is pulled up to '1' - there is an error in 
> the device which doesn't allow sending if this is not the case.
> 
> Try the following transmission code - eg
> 
> unsigned char ucTest[] = {1,2,3,4,5};
> 
> fnSendSPIMessage(ucTest, sizeof(ucTest));
> 
> void fnSendSPIMessage(unsigned char *ptrData, unsigned short 
> usLength)
> {
>   while (!(SPI_SPSR & SPIF)) {}; // wait for transmitter free
>                                  // ensures that write works
>   while (usLength--) {
>     IOCLR = SPI_SSEL_OUT;       // activate SSEL  
>     SPI_SPDR = *ptrData++;      // Set data Byte
>     while (!(SPI_SPSR & SPIF)) {}; // wait for transmission to 
> complete
>     IOSET = SPI_SSEL_OUT;       // remove SSEL
>   }
> }
> 
> Note: SPI_SSEL_OUT is an output port to contol the SSEL line to the 
> slave - the LPC2104 doesn't do this itself and SSEL can not be used 
> for this purpose (needs the pullup and can not be programmed as 
> output).
> SPIF is 0x80.
> 
> This may help. The LPC2104 works OK as master but the SSEL line has 
> to be wasted. As slave I gave up because it just didn't send 
> sensible data back...
> 
> Regards
> 
> Mark Butcher
> 
> www.mjbc.ch
> 
> --- In lpc2000@yahoogroups.com, "rockraj_2003" <rockraj_2003@y...> 
> wrote:
> > 
> > HELLO FRIENDS,
> > 
> > No body giving me suggestion on how to program SPI.
> > My real task is to configure "DP1203" by using LPC2104.
> > The only way to configure DP1203 is throu "SPI".
> > I got an example file from Keil. 
> > Its working and producing SCK(Serial Clock).
> > I fixed the Clk Frequency at 100Khz. But I am getting only 40 Mhz.
> > I just Send an 8 bit Data After if i send other Data its not 
> > reponding.
> > The SCK pin is in low State.
> > The "DP1203" has got 8 address bit and 8 data bit.
> > So totally 16 bit for One Configuration of Registers.
> > But I want to Configure more than 20 Registers.
> > Can any one Suggest me where i am doing the mistake.
> > 
> > Here is the Code
> > #include <LPC210x.H>
> > 
> > #define SPI_SPCR       (*((volatile unsigned char *) 0xE0020000))
> > #define SPI_SPSR       (*((volatile unsigned char *) 0xE0020004))
> > #define SPI_SPDR       (*((volatile unsigned char *) 0xE0020008))
> > #define SPI_SPCCR      (*((volatile unsigned char *) 0xE002000C))
> > #define SPI_SPTCR      (*((volatile unsigned char *) 0xE0020010))
> > #define SPI_SPTSR      (*((volatile unsigned char *) 0xE0020014))
> > #define SPI_SPTOR      (*((volatile unsigned char *) 0xE0020018))
> > #define SPI_SPINT      (*((volatile unsigned char *) 0xE002001C))
> > 
> > int main (void) 
> > {
> > int i;
> > VPBDIV = 1; 
> > IODIR = 0x80; 
> > IOSET = 0x80;
> > PINSEL0 = 0x5500;
> > SPI_SPCCR = 0x93; 
> > SPI_SPCR = 0x20;
> > while (1) {
> > do SPI_SPDR = 0x55; 
> > while((SPI_SPSR & 0x80)==0); 
> > for(i=0;i<10000;i++);
> > SPI_SPSR = 0x00;
> > do SPI_SPDR = 0x0F; 
> > while((SPI_SPSR & 0x80)==0);
> > goto OUT;
> > }
> > 
> > OUT: for(i=0;i<1000;i++);
> > 
> > while (1) {
> > do SPI_SPDR = 0xF0; 
> > while((SPI_SPSR & 0x80)==0);
> > for(i=0;i<100000;i++);
> > goto OUT;
> > }
> > }
> > 
> > 
> > 
> > 
> > 
> > 
> > Thank U,
> > 
> > with Regards,
> > Rajendra R

Re: SPI RESPONDING

2005-03-15 by Mark Butcher

Hallo Rajendra

When the SPI (master) sends 8 bits of data over the MOSI line it 
also clocks in 8 bits of data via the MISO line. Therefore when a 
byte of data has successfully been sent (SPI_SPSR & 0x80 becomes 
true) it also has a byte of received data which can be read from 
SPI_SPDR. (when no slave it is probably 0xff or 0x00 depending on 
the line state - if the slave has nothing to send it depends on the 
device - eg. the LPC210x in slave mode sends byte the last received 
byte)

This means that the slave must prepare and send data - the exact 
sequence will depend on your peripheral device but it generally 
means that you must first send a command byte to inform which data 
it should sent to you and then you can read it (one or a sequence of 
bytes). If the master has no data to send  while reading the byte(s) 
it can send a dummy byte (0xff or 0x00 etc.).

The code to send and also read in full duplex (assuming the slave 
supports it) could look like this:

void fnSendReceive(unsigned char *out, unsigned char *in, unsigned 
short usLength)
{
   while (usLength--) {
          IOCLR = SPI_SSEL_OUT; // activate SSEL
          SPDR = *out;          // send data byte
	  while (!(SPSR & SPIF)) {}; // wait for transmission to 
complete
	  IOSET = SPI_SSEL_OUT; // remove SSEL
	  *in++ = (unsigned char)SPDR;   // save data
   }
}

Note that the LPC210x has a very simple SPI which has only one 
interrupt flag to indicate when the transmission has completed and 
the received data is available. There is no buffering in the 
transmitter and so it is imperative that the flag is set before 
sending the next byte otherwise it may be lost - as consequence the 
throughput tends to suffer since the software processing has to take 
place almost completely between transmission periods and it is 
hardly possible to do any work during the byte transmission interval.

Regards

Mark Butcher

www.mjbc.ch


--- In lpc2000@yahoogroups.com, "rockraj_2003" <rockraj_2003@y...> 
wrote:
> 
> Hello Mark,
> 
> Thanks for Ur Response.I tried Ur Code its working fine.
> I aslo changed my prog.This Code is also giving the Same response.
> I didn't CLR the SSEL pin at all.But I regularly changed SPIF to 
0x00.
> 
> Now, my doubt is if i want to use MISO as well what should i do.
> Since in the Data Sheet THE mentioned SPI as duplex.
> 
> How I can use MISO.
> 
> Silly Question, but I don't know about this.
> If the SPI is in MOSI, it can send DATA (MASTER OUTPUT) at the 
Same 
> time it receive data in SLAVE.(SLAVE INPUT).How much time it will 
> wait to receive DATA. If again I put some Data to the SPI_SPDR it 
> will transmit or it will wait to receive.   
> 
> > > #define SPI_SPCR       (*((volatile unsigned char *) 
0xE0020000))
> > > #define SPI_SPSR       (*((volatile unsigned char *) 
0xE0020004))
> > > #define SPI_SPDR       (*((volatile unsigned char *) 
0xE0020008))
> > > #define SPI_SPCCR      (*((volatile unsigned char *) 
0xE002000C))
> > > #define SPI_SPTCR      (*((volatile unsigned char *) 
0xE0020010))
> > > #define SPI_SPTSR      (*((volatile unsigned char *) 
0xE0020014))
> > > #define SPI_SPTOR      (*((volatile unsigned char *) 
0xE0020018))
> > > #define SPI_SPINT      (*((volatile unsigned char *) 
0xE002001C))
Show quoted textHide quoted text
> > > 
> > > int main (void) 
> > > {
> > > int i;
> > > VPBDIV = 1; 
> > > IODIR = 0x80; 
> > > IOSET = 0x80;
> > > PINSEL0 = 0x5500;
> > > SPI_SPCCR = 0x93; 
> > > SPI_SPCR = 0x20;
> > > while (1) {
> > > do SPI_SPDR = 0x55; 
> > > while((SPI_SPSR & 0x80)==0); 
> > > SPI_SPSR = 0x00;
> > > do SPI_SPDR = 0x0F; 
> > > while((SPI_SPSR & 0x80)==0);
> > > SPI_SPSR = 0x00;
> > > do SPI_SPDR = 0xF0; 
> > > while((SPI_SPSR & 0x80)==0);
> > > SPI_SPSR = 0x00;
> > > }
> > > }
> 
> 
> with Regards
> Rajendra R
>

Re: [lpc2000] Re: SPI RESPONDING

2005-03-15 by microbit

Hi Rajendra (Mark),

Mark has covered SPI operation very well, that's the nuts and bolts of it.

Maybe one last remark to make it sink in a bit easier again.
Think of SPI as a 16 bit shift register, with a "Master" as 8 bit shift register,
and a Slave as an 8 bit shift register, and with a feedback from the output of bit 15
into bit 0.

Thus, all that happens is that Master and Slave _exchange_ their 8 bits when the
8 clock pulses are issued. No matter which side (ie. Master or Slave), data is read
on one edge of clock pulses, while data is output on the opposite edge of the clock pulse.
This means the Master for example can change the "1" or "0" data output while it's
reading the data line, since the Slave is NOT sampling MOSI at that moment, and vice-versa
for the Slave with MISO.

The only thing that qualifies a Master from a Slave is whom issues the clock pulses.
Hence the whole system is synchronous.
There might even be times where it is handy to "hold" the SPI transfer. That even can
be one in HW : Some SPI (SLAVE) devices have a /HOLD input pin. 
(A bit restricting IMO, because you can only change /Hold when clock "idle").

Because you can clock data at rising or falling edge - and - you can keep your clock "Idle" 
High or Low _between_ bit transfers, there are FOUR combinations  ::::
referred to sometimes as SPI Mode 0,1,2 and 3.

Happy trails
-- Kris

> Hallo Rajendra
> 
> When the SPI (master) sends 8 bits of data over the MOSI line it 
> also clocks in 8 bits of data via the MISO line. Therefore when a 
> byte of data has successfully been sent (SPI_SPSR & 0x80 becomes 
> true) it also has a byte of received data which can be read from 
> SPI_SPDR. (when no slave it is probably 0xff or 0x00 depending on 
> the line state - if the slave has nothing to send it depends on the 
> device - eg. the LPC210x in slave mode sends byte the last received 
> byte)
> 
> This means that the slave must prepare and send data - the exact 
> sequence will depend on your peripheral device but it generally 
> means that you must first send a command byte to inform which data 
> it should sent to you and then you can read it (one or a sequence of 
> bytes). If the master has no data to send  while reading the byte(s) 
> it can send a dummy byte (0xff or 0x00 etc.).
> 
> The code to send and also read in full duplex (assuming the slave 
> supports it) could look like this:
> 
> void fnSendReceive(unsigned char *out, unsigned char *in, unsigned 
> short usLength)
> {
>    while (usLength--) {
>           IOCLR = SPI_SSEL_OUT; // activate SSEL
>           SPDR = *out;          // send data byte
>         while (!(SPSR & SPIF)) {}; // wait for transmission to 
> complete
>         IOSET = SPI_SSEL_OUT; // remove SSEL
>         *in++ = (unsigned char)SPDR;   // save data
>    }
> }
> 
> Note that the LPC210x has a very simple SPI which has only one 
> interrupt flag to indicate when the transmission has completed and 
> the received data is available. There is no buffering in the 
> transmitter and so it is imperative that the flag is set before 
> sending the next byte otherwise it may be lost - as consequence the 
> throughput tends to suffer since the software processing has to take 
> place almost completely between transmission periods and it is 
> hardly possible to do any work during the byte transmission interval.
> 
> Regards
> 
> Mark Butcher
> 
> www.mjbc.ch
> 
> 
> --- In lpc2000@yahoogroups.com, "rockraj_2003" <rockraj_2003@y...> 
> wrote:
> > 
> > Hello Mark,
> > 
> > Thanks for Ur Response.I tried Ur Code its working fine.
> > I aslo changed my prog.This Code is also giving the Same response.
> > I didn't CLR the SSEL pin at all.But I regularly changed SPIF to 
> 0x00.
> > 
> > Now, my doubt is if i want to use MISO as well what should i do.
> > Since in the Data Sheet THE mentioned SPI as duplex.
> > 
> > How I can use MISO.
> > 
> > Silly Question, but I don't know about this.
> > If the SPI is in MOSI, it can send DATA (MASTER OUTPUT) at the 
> Same 
> > time it receive data in SLAVE.(SLAVE INPUT).How much time it will 
> > wait to receive DATA. If again I put some Data to the SPI_SPDR it 
> > will transmit or it will wait to receive.   
> > 
> > > > #define SPI_SPCR       (*((volatile unsigned char *) 
> 0xE0020000))
> > > > #define SPI_SPSR       (*((volatile unsigned char *) 
> 0xE0020004))
> > > > #define SPI_SPDR       (*((volatile unsigned char *) 
> 0xE0020008))
> > > > #define SPI_SPCCR      (*((volatile unsigned char *) 
> 0xE002000C))
> > > > #define SPI_SPTCR      (*((volatile unsigned char *) 
> 0xE0020010))
> > > > #define SPI_SPTSR      (*((volatile unsigned char *) 
> 0xE0020014))
> > > > #define SPI_SPTOR      (*((volatile unsigned char *) 
> 0xE0020018))
> > > > #define SPI_SPINT      (*((volatile unsigned char *) 
> 0xE002001C))
> > > > 
> > > > int main (void) 
> > > > {
> > > > int i;
> > > > VPBDIV = 1; 
> > > > IODIR = 0x80; 
> > > > IOSET = 0x80;
> > > > PINSEL0 = 0x5500;
> > > > SPI_SPCCR = 0x93; 
> > > > SPI_SPCR = 0x20;
> > > > while (1) {
> > > > do SPI_SPDR = 0x55; 
> > > > while((SPI_SPSR & 0x80)==0); 
> > > > SPI_SPSR = 0x00;
> > > > do SPI_SPDR = 0x0F; 
> > > > while((SPI_SPSR & 0x80)==0);
> > > > SPI_SPSR = 0x00;
> > > > do SPI_SPDR = 0xF0; 
> > > > while((SPI_SPSR & 0x80)==0);
> > > > SPI_SPSR = 0x00;
> > > > }
> > > > }
> > 
> > 
> > with Regards
> > Rajendra R
> > 
> 
> 
> 
> 
> 
>       Yahoo! Groups Sponsor 
>             ADVERTISEMENT
>            
>      
>      
> 
> 
> --------------------------------------------------------------------------------
> Yahoo! Groups Links
> 
>   a.. To visit your group on the web, go to:
>   http://groups.yahoo.com/group/lpc2000/
>     
>   b.. To unsubscribe from this group, send an email to:
>   lpc2000-unsubscribe@yahoogroups.com
>     
>   c.. Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service. 
> 
> 

[Non-text portions of this message have been removed]

Re: [lpc2000] Re: SPI RESPONDING

2005-03-15 by k b shah (lascaux)

data will be sent out in master mode along with the spi clock.
The same clock will be used to shift data in received on MISO pin. i.e. the  shifting of data out and shifting of data in will occure simultaneously.
kb 
Show quoted textHide quoted text
  ----- Original Message ----- 
  From: rockraj_2003 
  To: lpc2000@yahoogroups.com 
  Sent: Tuesday, March 15, 2005 1:46 AM
  Subject: [lpc2000] Re: SPI RESPONDING



  Hello Mark,

  Thanks for Ur Response.I tried Ur Code its working fine.
  I aslo changed my prog.This Code is also giving the Same response.
  I didn't CLR the SSEL pin at all.But I regularly changed SPIF to 0x00.

  Now, my doubt is if i want to use MISO as well what should i do.
  Since in the Data Sheet THE mentioned SPI as duplex.

  How I can use MISO.

  Silly Question, but I don't know about this.
  If the SPI is in MOSI, it can send DATA (MASTER OUTPUT) at the Same 
  time it receive data in SLAVE.(SLAVE INPUT).How much time it will 
  wait to receive DATA. If again I put some Data to the SPI_SPDR it 
  will transmit or it will wait to receive.   

  > > #define SPI_SPCR       (*((volatile unsigned char *) 0xE0020000))
  > > #define SPI_SPSR       (*((volatile unsigned char *) 0xE0020004))
  > > #define SPI_SPDR       (*((volatile unsigned char *) 0xE0020008))
  > > #define SPI_SPCCR      (*((volatile unsigned char *) 0xE002000C))
  > > #define SPI_SPTCR      (*((volatile unsigned char *) 0xE0020010))
  > > #define SPI_SPTSR      (*((volatile unsigned char *) 0xE0020014))
  > > #define SPI_SPTOR      (*((volatile unsigned char *) 0xE0020018))
  > > #define SPI_SPINT      (*((volatile unsigned char *) 0xE002001C))
  > > 
  > > int main (void) 
  > > {
  > > int i;
  > > VPBDIV = 1; 
  > > IODIR = 0x80; 
  > > IOSET = 0x80;
  > > PINSEL0 = 0x5500;
  > > SPI_SPCCR = 0x93; 
  > > SPI_SPCR = 0x20;
  > > while (1) {
  > > do SPI_SPDR = 0x55; 
  > > while((SPI_SPSR & 0x80)==0); 
  > > SPI_SPSR = 0x00;
  > > do SPI_SPDR = 0x0F; 
  > > while((SPI_SPSR & 0x80)==0);
  > > SPI_SPSR = 0x00;
  > > do SPI_SPDR = 0xF0; 
  > > while((SPI_SPSR & 0x80)==0);
  > > SPI_SPSR = 0x00;
  > > }
  > > }


  with Regards
  Rajendra R



  --- In lpc2000@yahoogroups.com, "Mark Butcher" <M_J_Butcher@I...> 
  wrote:
  > 

  > Hallo Rajendra
  > 
  > The initialisation seems OK - 100k in master mode.
  > 
  > Make sure the SSEL pin is pulled up to '1' - there is an error in 
  > the device which doesn't allow sending if this is not the case.
  > 
  > Try the following transmission code - eg
  > 
  > unsigned char ucTest[] = {1,2,3,4,5};
  > 
  > fnSendSPIMessage(ucTest, sizeof(ucTest));
  > 
  > void fnSendSPIMessage(unsigned char *ptrData, unsigned short 
  > usLength)
  > {
  >   while (!(SPI_SPSR & SPIF)) {}; // wait for transmitter free
  >                                  // ensures that write works
  >   while (usLength--) {
  >     IOCLR = SPI_SSEL_OUT;       // activate SSEL  
  >     SPI_SPDR = *ptrData++;      // Set data Byte
  >     while (!(SPI_SPSR & SPIF)) {}; // wait for transmission to 
  > complete
  >     IOSET = SPI_SSEL_OUT;       // remove SSEL
  >   }
  > }
  > 
  > Note: SPI_SSEL_OUT is an output port to contol the SSEL line to the 
  > slave - the LPC2104 doesn't do this itself and SSEL can not be used 
  > for this purpose (needs the pullup and can not be programmed as 
  > output).
  > SPIF is 0x80.
  > 
  > This may help. The LPC2104 works OK as master but the SSEL line has 
  > to be wasted. As slave I gave up because it just didn't send 
  > sensible data back...
  > 
  > Regards
  > 
  > Mark Butcher
  > 
  > www.mjbc.ch
  > 
  > --- In lpc2000@yahoogroups.com, "rockraj_2003" <rockraj_2003@y...> 
  > wrote:
  > > 
  > > HELLO FRIENDS,
  > > 
  > > No body giving me suggestion on how to program SPI.
  > > My real task is to configure "DP1203" by using LPC2104.
  > > The only way to configure DP1203 is throu "SPI".
  > > I got an example file from Keil. 
  > > Its working and producing SCK(Serial Clock).
  > > I fixed the Clk Frequency at 100Khz. But I am getting only 40 Mhz.
  > > I just Send an 8 bit Data After if i send other Data its not 
  > > reponding.
  > > The SCK pin is in low State.
  > > The "DP1203" has got 8 address bit and 8 data bit.
  > > So totally 16 bit for One Configuration of Registers.
  > > But I want to Configure more than 20 Registers.
  > > Can any one Suggest me where i am doing the mistake.
  > > 
  > > Here is the Code
  > > #include <LPC210x.H>
  > > 
  > > #define SPI_SPCR       (*((volatile unsigned char *) 0xE0020000))
  > > #define SPI_SPSR       (*((volatile unsigned char *) 0xE0020004))
  > > #define SPI_SPDR       (*((volatile unsigned char *) 0xE0020008))
  > > #define SPI_SPCCR      (*((volatile unsigned char *) 0xE002000C))
  > > #define SPI_SPTCR      (*((volatile unsigned char *) 0xE0020010))
  > > #define SPI_SPTSR      (*((volatile unsigned char *) 0xE0020014))
  > > #define SPI_SPTOR      (*((volatile unsigned char *) 0xE0020018))
  > > #define SPI_SPINT      (*((volatile unsigned char *) 0xE002001C))
  > > 
  > > int main (void) 
  > > {
  > > int i;
  > > VPBDIV = 1; 
  > > IODIR = 0x80; 
  > > IOSET = 0x80;
  > > PINSEL0 = 0x5500;
  > > SPI_SPCCR = 0x93; 
  > > SPI_SPCR = 0x20;
  > > while (1) {
  > > do SPI_SPDR = 0x55; 
  > > while((SPI_SPSR & 0x80)==0); 
  > > for(i=0;i<10000;i++);
  > > SPI_SPSR = 0x00;
  > > do SPI_SPDR = 0x0F; 
  > > while((SPI_SPSR & 0x80)==0);
  > > goto OUT;
  > > }
  > > 
  > > OUT: for(i=0;i<1000;i++);
  > > 
  > > while (1) {
  > > do SPI_SPDR = 0xF0; 
  > > while((SPI_SPSR & 0x80)==0);
  > > for(i=0;i<100000;i++);
  > > goto OUT;
  > > }
  > > }
  > > 
  > > 
  > > 
  > > 
  > > 
  > > 
  > > Thank U,
  > > 
  > > with Regards,
  > > Rajendra R




        Yahoo! Groups Sponsor 
              ADVERTISEMENT
             
       
       


------------------------------------------------------------------------------
  Yahoo! Groups Links

    a.. To visit your group on the web, go to:
    http://groups.yahoo.com/group/lpc2000/
      
    b.. To unsubscribe from this group, send an email to:
    lpc2000-unsubscribe@yahoogroups.com
      
    c.. Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service. 



[Non-text portions of this message have been removed]

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.