Hi can someone please help me with the following code.I have two messages recorded onto the ISD1760 module and am trying to talk to it via SPI,however when i power up it cycles through and play's the two messages just one time and then sticks and just repeats the second message constantly.Any help will be very much appreciated.
#define PU 0x01
#define PLAY 0x40
#define FWD 0x48
#define CLR_INT 0x04
#define DATAOUT 11 //mosi
#define DATAIN 12 //miso
#define SPICLOCK 13 //sck
#define SLAVESELECT 10 //ss
void setup() {
byte clr;
pinMode(DATAOUT, OUTPUT);
pinMode(DATAIN, INPUT);
pinMode(SPICLOCK,OUTPUT);
pinMode(SLAVESELECT,OUTPUT);
digitalWrite(SLAVESELECT,HIGH); //disable device
SPCR = B01111111; //data lsb, clock high when idle, samples on falling
clr=SPSR;
clr=SPDR;
delay(10);
digitalWrite(SLAVESELECT,LOW);
spi_transfer(PU); // power up
spi_transfer(0x00); // data byte
digitalWrite(SLAVESELECT,HIGH);
delay(100);
digitalWrite(SLAVESELECT,LOW);
spi_transfer(CLR_INT); // clear interupt and eom bit
spi_transfer(0x00); // data byte
digitalWrite(SLAVESELECT,HIGH);
delay(100);
}
char spi_transfer(volatile char data)
{
SPDR = data; // Start the transmission
while (!(SPSR & (1<<SPIF))) // Wait for the end of the transmission
{
};
return SPDR; // return the received byte
}
void loop() {
digitalWrite(SLAVESELECT,LOW);
spi_transfer(CLR_INT); // clear interupt and eom bit
spi_transfer(0x00); // data byte
digitalWrite(SLAVESELECT,HIGH);
delay(100);
digitalWrite(SLAVESELECT,LOW);
spi_transfer(PLAY); // clear interupt and eom bit
spi_transfer(0x00); // data byte
digitalWrite(SLAVESELECT,HIGH);
delay(100);
digitalWrite(SLAVESELECT,LOW);
spi_transfer(FWD); // clear interupt and eom bit
spi_transfer(0x00); // data byte
digitalWrite(SLAVESELECT,HIGH);
delay(100);
digitalWrite(SLAVESELECT,LOW);
spi_transfer(CLR_INT); // clear interupt and eom bit
spi_transfer(0x00); // data byte
digitalWrite(SLAVESELECT,HIGH);
delay(100);
}