SPI slave not working for me

03 Oct 2011

Hi,

I am trying to get SPISlave to work. In my software slave address is software detected. It works on other processors. I tried to dump all the relevent register values everything looks Okexcept that I dont get any data into the slave. I looked at the signals using scope everything looks good there too.

Here I am posting the code. I tried using NC for Slave select line too. Can someone tell me whtas going on.

  1. include "mbed.h"

void NewAddressHandle(void); void SPIDataHandle(void);

DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); DigitalOut ssel(p9); PortIn Addr(Port0, 0x00078000);

Serial pc(p28 , p27); SPISlave ToMain(p5, p6, p7, p8); mosi, miso, sclk, ssel InterruptIn AddressStable(p30);

int main() { ssel = 1; ToMain.format(8,3);

LPC_SPI->SPCR |= 0x00000018;

pc.printf("PINSEL = 0x%08X\r\n",LPC_PINCON->PINSEL0); pc.printf("PINMODE = 0x%08X\r\n",LPC_PINCON->PINMODE0); pc.printf("clk = 0x%08X\r\n",LPC_SC->PCLKSEL0); pc.printf("SPCR = 0x%08X\r\n",*(uint32_t*)LPC_SPI_BASE); pc.printf("SPSR = 0x%08X\r\n",*(((uint32_t*)LPC_SPI_BASE)+1)); ToMain.reply(0x00); NVIC_SetVector(SPI_IRQn, (uint32_t)SPIDataHandle); NVIC_EnableIRQ(SPI_IRQn);

pc.printf("Waiting For Address\r\n"); AddressStable.rise(&NewAddressHandle);

led1 = 1;

while(1) { if(ToMain.receive()) { pc.printf("Got %x\r\n", ToMain.read()); ssel = 1; } } }

void NewAddressHandle(void) { int gotAddr; ssel = 0; gotAddr = (Addr.read() >> 15); pc.printf("Got Address %x\r\n", gotAddr); }

void SPIDataHandle(void) { pc.printf("Got %x\r\n", ToMain.read()); }