#include <SPI.h>
void setup(void){
SPI.begin(); // Initialisation SPI
SPI.setClockDivider(SPI_CLOCK_DIV8); // Horloge F_CPU/64
digitalWrite(SS,HIGH); // Désactive le périphérique
}
void loop(void){
digitalWrite(SS,LOW);
for(i=0;i<64;i++) SPI.transfer(0xe0);
digitalWrite(SS,HIGH);
}
#include <avr/io.h>
#define SPI_DDR DDRB
#define SPI_PORT PORTB
#define SPI_SS 2
#define SPI_MOSI 3
#define SPI_MISO 4
#define SPI_SCK 5
void spi_init(void){ // Initialisation du bus SPI
SPI_DDR |= (1<<SPI_MOSI)|(1<<SPI_SCK)|(1<<SPI_SS); // Définition des sorties
SPI_DDR &= ~(1<<SPI_MISO); // Définition de l'entrée
SPI_PORT |= (1<<SPI_SS); // Désactivation du périphérique
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1); // Activation SPI (SPE) en état maître (MSTR)
// horloge F_CPU/64 (SPR1=1,SPR0=0)
}
void spi_activer(void){ // Activer le périphérique
SPI_PORT &= ~(1<<SPI_SS); // Ligne SS à l'état bas
}
void spi_desactiver(void){ // Désactiver le périphérique
SPI_PORT |= (1<<SPI_SS); // Ligne SS à l'état haut
}
uint8_t spi_echange(uint8_t envoi){ // Communication sur le bus SPI
SPDR = envoi; // Octet a envoyer
while(!(SPSR & (1<<SPIF))); // Attente fin envoi (drapeau SPIF du statut)
return SPDR; // Octet reçu
}
int main(void){
spi_init();
int i;
spi_activer();
for(i=0;i<64;i++) spi_echange(0xe0); // Que de rouge
spi_desactiver();
}