#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 = output; // 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(); }