Go Down

Topic: SPI slave (Read 652 times) previous topic - next topic

harrihnz

Good Morning,

New to this, so please bear with me.

Trying to implement Due in SPI slave mode.

Have followed Nick Gammon's excellent article   http://gammon.com.au/spi

This all works really well until I try porting the slave code to a Due.
   Compiling throws up a series of errors where SPCR  SPE and others are undefined.

  After doing a bit of digging, it would appear   that SPI.h   causes the chip to setup in master SPI mode, and that
then certain register bits need to be written to turn it into a slave
At least I think thats what this code is doing.

Code: [Select]
  // turn on SPI in slave mode
  SPCR |= _BV(SPE);


However the register architecture on the due is different,
according to the data sheet for the SamX3
there is a register called SPI_MR    with a byte called MSTR  which must be set 0 to  enter Slave mode
(its quite likely there are others I don't know about yet)
Can someone explain the syntax required to do this
   regards
      Harry



exedor

Check out the SPI.cpp file at :
C:\Program Files (x86)\arduino-1.5.2\hardware\arduino\sam\libraries\SPI\SPI.cpp

It has a line in it's constructor that goes something like this:
   SPI_Configure(spi, id, SPI_MR_MSTR | SPI_MR_PS | SPI_MR_MODFDIS);

I would be willing to bet if you either removed SPI_MR_MSTR or changed the logic to something like:

!SPI_MR_MSTR & (SPI_MR_PS | SPI_MR_MODFDIS) depending on the actual bits you need you might be able to achieve what you are looking for with some variant of this.





harrihnz

Thanks Exedor,
I'll study that
   Harry

Go Up