Outils pour utilisateurs

Outils du site


robotics:computing:communication_spi_atmega

Différences

Cette page vous affiche les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue comparative

robotics:computing:communication_spi_atmega [2012/03/08 16:38]
ldo créée
robotics:computing:communication_spi_atmega [2012/09/20 10:52] (Version actuelle)
Ligne 10: Ligne 10:
 L'​esclave désigné peut envoyer des messages seulement si le maitre génère le signal d'​horloge (il ne peut pas le générer lui-même). L'​esclave désigné peut envoyer des messages seulement si le maitre génère le signal d'​horloge (il ne peut pas le générer lui-même).
  
-===== mode esclave =====+===== Mode esclave =====
 SS/ est configuré en entrée. La communication n'est active que si SS/ passe à 0. SS/ est configuré en entrée. La communication n'est active que si SS/ passe à 0.
  
-===== mode maitre =====+===== Mode maitre =====
 SS/ est configuré en sortie. c'est lui qui initialise les communications en choisissant l’esclave avec qui il veut échanger. SS/ est configuré en sortie. c'est lui qui initialise les communications en choisissant l’esclave avec qui il veut échanger.
  
Ligne 30: Ligne 30:
  
 ===== Initialisation Master ===== ===== Initialisation Master =====
-configurer SS/, MOSI et SCK en sortie (MISO est automatiquement configurée en entrée). +  * configurer SS/, MOSI et SCK en sortie (MISO est automatiquement configurée en entrée). 
-configurer le registre de controle SPCR en mettant à 1 SPE (active la communication SPI) et MSTR  (maitre) +  ​* ​configurer le registre de controle SPCR en mettant à 1 SPE (active la communication SPI) et MSTR  (maitre) 
-sélectionne la vitesse du SPI et active les interruptions SPI (mettre à 1 le bit SPIE de SPCR) +  ​* ​sélectionne la vitesse du SPI et active les interruptions SPI (mettre à 1 le bit SPIE de SPCR) 
-effacer les flags des interruptions SPI en lisant SPSR et SPDR +  ​* ​effacer les flags des interruptions SPI en lisant SPSR et SPDR 
-active les interruptions globales (mettre à 1 bit I de SREG) +  ​* ​active les interruptions globales (mettre à 1 bit I de SREG)
-Routine d’interruption SPI +
-- copie l'​octet à envoyer dans SPDR +
-Initialisation Esclave +
-- configurer MISO en sortie (SS/, MOSI et SCK sont automatiquement configurée en entrée). +
-- activer la communication SPI (en mettant à 1 le bit SPE de SPCR) +
-- active les interruptions SPI (mettre à 1 le bit SPIE de SPCR) +
-- effacer les flags des interruptions SPI en lisant SPSR et SPDR +
-- active les interruptions globales (mettre à 1 bit I de SREG) +
-Routine d’interruption SPI +
--  +
  
 +===== Initialisation Esclave =====
 +  * configurer MISO en sortie (SS/, MOSI et SCK sont automatiquement configurée en entrée)
 +  * activer la communication SPI (en mettant à 1 le bit SPE de SPCR)
 +  * active les interruptions SPI (mettre à 1 le bit SPIE de SPCR)
 +  * effacer les flags des interruptions SPI en lisant SPSR et SPDR
 +  * active les interruptions globales (mettre à 1 bit I de SREG)
  
 +===== Exemple Master =====
 +Le master envoie le caractère 0xAA.
 +<code c>
 /* /*
  * SPI_Master.c  * SPI_Master.c
Ligne 55: Ligne 53:
  */  */
  
-#​include<​avr/​io.h>​ /* pour les definitions des registres */+#​include<​avr/​io.h>​
  
-/* PORT +#define DDR_SPI DDRB /* SPI PORTB */ 
- * PB3 MOSI +#define DD_MOSI 3 /* MISO PB4*/ 
- * PB4 MISO +#define DD_SCK 5 /* SCK PB5 */
- * PB5 SCK +
- * */ +
- +
-#define DDR_SPI DDRB /* SPI est sur le port B */ +
-#define DD_MOSI 3 /* MISO est sur PB4*/ +
-#define DD_SCK 5 /* SCK sur PB5 */+
  
 void SPI_MasterInit(void) void SPI_MasterInit(void)
Ligne 73: Ligne 65:
 } }
  
-void SPI_MasterTransmit(char data)+char SPI_MasterTransmit(char data)
 { {
  SPDR = data; /* start transmission */  SPDR = data; /* start transmission */
  while (!(SPSR & (1<<​SPIF)));​ /​* wait transmission end */  while (!(SPSR & (1<<​SPIF)));​ /​* wait transmission end */
-return SPDR;+ return SPDR;
 } }
  
 int main (void) int main (void)
 { {
- 
- PORTD = 0x00; 
- 
  SPI_MasterInit();​  SPI_MasterInit();​
  
Ligne 94: Ligne 83:
  return 1;  return 1;
 } }
 +</​code>​
robotics/computing/communication_spi_atmega.1331221137.txt.gz · Dernière modification: 2012/09/20 10:52 (modification externe)