Estoy tratando de dejar que dos uC se hablen. Ambos chips son de la familia dsPIC33EP. El esclavo responderá según lo que el amo le haya enviado. Mi pregunta es que, dado que SPI es dúplex completo, ¿sería demasiado tarde para enviar los datos al maestro en un ciclo de comunicación? ¿Debo cargar un byte para transmitir el búfer antes de recibir un byte? Por favor vea mi código mientras demuestro mis dudas.
void ISR() iv IVT_ADDR_SPIINTERRUPT{
char data;
SpiIntFlag=0;//clear interrupt flag
data=SPIBUF;//read the incoming byte
//send back one byte according to the received byte
if(data==0x01){
SPIBUF=0xF1;
}
else if(data==0x02){
SPIBUF=0xF2;
}
else if(data==0x03){
SPIBUF=0xF3;
}
else if(data==0x04){
SPIBUF=0xF4;
}
}
Como puede ver, se enviará un byte después de que el esclavo reciba uno. ¿Significa que recibir y enviar no sucede al mismo tiempo? He intentado este código con ATmega32u4 en 5MHZ. Pero parece que el maestro recibe un byte correspondiente de acuerdo con el byte enviado al esclavo. Además, no se reciben bytes adicionales, por lo que creo que este proceso de comunicación (lectura y envío) ocurre al mismo tiempo. ¿Qué pasa con el retraso que causaron las declaraciones ()?
¿Es esta la forma correcta de hacer la comunicación SPI? Todo lo que quiero lograr es que el maestro envíe un byte de comando y el esclavo devuelva un par de bytes de vuelta de acuerdo con él.