Étape 5: Implémentation du Code ATTiny USI I2C - USI Hardware
Le matériel de l’USI a trois broches:
DO - sortie de données, utilisé pour trois fils (SPI) mode de communication uniquement
DI/SDA-série/entrée de données, utilisé comme SDA dans configuration I2C
Denise/SCL - horloge, utilisé comme SCK en configuration I2C
En outre, le matériel de l’USI a trois registres:
Données de déplacements USIDR - Registre à décalage données USI - dans et hors de la quincaillerie de l’USI
USISR - USI Status Register - a les drapeaux d’État et compteur 4 bits (voir ci-dessous)
USICR - USI contrôle Register - a permet d’interrompre, horloge modes et fonctions du logiciel horloge stroboscopique
Compteur 4 bits
Le compteur 4 bits occupe les 4 bits de poids faible de USISR et est utilisé pour chronométrer les interruptions de débordement lors du fonctionnement en mode esclave ainsi que pour aider à générer des impulsions d’horloge SCK en mode "master". Étant un compteur 4 bits, il compte vers le haut de 0 à 15 avant débordement. À pleins à craquer, il peut déclencher une interruption (USI_OVERFLOW_vect, activé par un peu en USICR). Ceci est utilisé pour la table d’État esclavagiste USI pour garder une trace de transmission qu’il bascule entre les États de transmission (plus à ce sujet dans la section de code slave).
Lorsqu’il agit comme un maître, le compteur 4 bits est utilisé avec le bit horloge stroboscopique USICR pour générer l’horloge de la SCK. Vous mettre le compteur à déborder dans le nombre d’impulsions d’horloge vous souhaitez générer (généralement 8 ou 1, avec 8 étant une transmission de données et 1 étant une transmission ACK/NACK). Ensuite, vous en boucle jusqu'à ce que les débordements de compteur, continuellement définissant le bit de stroboscope de horloge et effectuant une délai d’attente. Plus d’informations sur cela peut être vu dans la section code maître.
Unité de contrôle horloge à deux fils (détecteur de Condition de départ)
L’unité de commande d’horloge TWI est un module à l’USI qui surveille la ligne SCK pour démarrer et arrêter des conditions. Son but premier est le détecteur de la condition de démarrage, qui, lorsque activé, génère une interruption de la USI_START_vect dès qu’il détecte une condition de départ valide. Ce gestionnaire d’interruption est le point de départ pour la manutention de transmission mode esclave I2C USI et doit mettre en place le compteur 4 bits débordement après que la transmission de l’adresse s’est produite. A partir de là, l’interruption de débordement gère le reste de ce message I2C et réinitialise le détecteur de condition de départ pour le prochain message.
Lire la fiche technique
Je n’entrerai pas dans les détails sur chacun des bits dans chacun de ces registres, mais si vous cherchez à écrire du code de l’USI, il est essentiel que vous Lisez ces sections de la feuille de données. Je recommande la lecture de l' ensemble universel Interface Serial - section USI (pages 142-150 de la fiche technique complète de ATTiny2313). Cela vous donnera toutes les informations dont vous aurez besoin en plus de ce que j’ai souligné ici.