lpcware

SSP

Discussion created by lpcware Employee on Jun 15, 2016
Latest reply on Apr 13, 2017 by Rick Bouten
Content originally posted in LPCWare by jdurand on Mon Sep 17 14:55:42 MST 2012
I'm using an LPC1226 and have ported SSP code over from a 1754 part where I have it talking to the same SPI part (a FLASH) with no problem.  I double-checked that I update the register names correctly, but maybe I missed something?

What I'm seeing here is when I send data, wait for the response, and then read the DR it always reads zero.  I checked the pins with a logic analyzer and the part is responding properly with non-zero data.

I slowed the clock down to less than 1MHz and while the part happily returned data, the DR is still zero.

Any ideas?

LPC_IOCON->PIO0_14 = 2; // SPI_CLK special function output
LPC_IOCON->PIO0_16 = 0b10010; // SPI_MISO special function input with pullup
LPC_IOCON->PIO0_17 = 2; // SPI_MOSI special function output

LPC_SYSCON->SYSAHBCLKCTRL |= 1<<11; // turn on clock
LPC_SYSCON->SSPCLKDIV = 1; // set SSP_PCLK to SystemCoreClock / 1 = 24MHz
LPC_SSP->CR0 =0x0007; // SPI mode 0,0, 8 bit data, Serial Clock Rate = SSP_PCLK / 1 = 24MHz
LPC_SSP->CPSR = 2; // SPI bit clock is SSP_PCLK / 2 = 12MHz (Flash can handle 33 in slow mode)
LPC_SSP->CR1 = 0b10; // enable SSP (should be last register written)


char SPI(char c) {  // send a byte and return the result

LPC_SSP->DR = c; // send byte to FIFO
while(!(LPC_SSP->SR & 4)); // wait until something in the receive FIFO
return (uint8_t)LPC_SSP->DR; // return the result
}

Outcomes