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.
- 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());
}
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.
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()); }