Forums

SPI NOT RESPONDING

Started by rockraj_2003 March 14, 2005

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



An Engineer's Guide to the LPC2100 Series


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 , "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




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 , "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 , "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




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 , "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
>




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 , "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 Links
>
> a.. To



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
----- Original Message -----
From: rockraj_2003
To:
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 , "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 , "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 Links

a.. To