void SPI_Transmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)))
;
}
void SPI_Transmit(uint8_t *data, uint8_t len) {
SS_LO();
data += len - 1;
for (; len > 0; len--) {
SPDR = *data--;
while (! (SPSR & _BV(SPIF))) {
// Busy loop.
}
}
SS_HI();
}
Hola, en la primera función solo transmitís de a un byte, en la segunda podes transmitir un buffer, el parámetro len indica el largo del buffer a transmitir. Se llamaría así:Código: C
uint8_t Buffer[16]; // Se llena el buffer de alguna manera, podria ser desde el puerto serie SPI_Transmit( Buffer, sizeof( Buffer ));
const prog_uint8_t PROGMEM Cadena[3] = {
0b10000001,
0b10000100,
0b10010000,
};
uint8_t Buffer[1];
for (x=0; x<3; x++) {
*Buffer = pgm_read_byte(&Cadena[x]);
SPI_MasterTransmit(Buffer, sizeof(Buffer));
}
const prog_uint8_t PROGMEM Cadena[3] = {
0b10000001,
0b10000100,
0b10010000,
};
uint8_t Buffer[1];
for (x=0; x<3; x++) {
*Buffer = pgm_read_byte(&Cadena[x]);
SPI_Transmit(Buffer, sizeof(Buffer));
}
void SPI_Transmit(uint8_t *data, uint8_t len) {
SS_LO();
data += len - 1;
for (; len > 0; len--) {
SPDR = *data--;
while (! (SPSR & _BV(SPIF)));
}
SS_HI();
}
En SPI atmega solo manda 8bits por paquete. Hay otros micro que tiene parecido al spi pero este es mas flexible que permite enviar de 4bits a 16bits.
ahora tu transmisor envia 3bytes segun tu ejemplo de un array de 3 variales tipo char(8bits).
Para que se entienda que una varible de 24bits el receptor debe unirlas una vez recividas en una de tipo long.