Estoy intentando usar un Analog Discovery 2 para leer las transmisiones SPI de mi mbed.
Código:
#include "mbed.h"
#include "LPC17xx.h"
void init() {
LPC_PINCON->PINSEL0 |= 0xC0000000; //Pin P0.15 allocated to function 4 SCLK
LPC_PINCON->PINSEL1 |= 0x03<<0; //Pin P0.16 allocated to function 4 NSS
LPC_PINCON->PINSEL1 |= 0x03<<2; //Pin P0.17 allocated to function 4 MISO
LPC_PINCON->PINSEL1 |= 0x03<<4; //Pin P0.18 allocated to function 4 MOSI
//p0.15, P0.18. P0.23 are outputs
LPC_GPIO0->FIODIR |= (1<<15)| (1<<18)| (1<<23);
LPC_SC->PCONP |= 1 <<8; //enable POWER to SPI (redundant following reset)
LPC_SC->PCLKSEL0 |= 1<<16; //pclk = cclk
LPC_SPI->SPCCR |= 8; //clock divider
LPC_SPI->SPCR |= 3<<3; //clock phase
LPC_SPI->SPCR |= 1<< 5; //master mode
int dummy=LPC_SPI->SPSR;
}
int main () {
init();
while(1) {
LPC_GPIO0->FIOCLR = 1<<23; //select slave
LPC_SPI->SPDR = 0x5A; //write willl initiate transfer
while (!(LPC_SPI->SPSR & (1<<7))); //wait until transfer complete
LPC_GPIO0->FIOSET = 1<<23; //release slave
wait(0.5);
LPC_GPIO0->FIOCLR = 1<<23; //select slave
LPC_SPI->SPDR = 143; //write willl initiate transfer
while (!(LPC_SPI->SPSR & (1<<7))); //wait until transfer complete
LPC_GPIO0->FIOSET = 1<<23; //release slave
}
}
He intentado leer el resultado generado de lo anterior con un éxito limitado. En todos los casos, los datos y las líneas de reloj simplemente subirán hasta que se reinicie el mbed.
Sin embargo, cuando elimino la espera (0.5); llame, obtengo las lecturas correctas en la pantalla.
¿Alguien puede explicar por qué la función de espera () hace que el analizador no lea las transmisiones correctamente?