Nous allons lire la datasheet de l'ATmega328P, ce document d'environ 300 pages décrit le fonctionnement du microcontrôleur ATmega328P. Voici quelques astuces pour vous aider à vous y retrouver:
Utilisez le sommaire: Le PDF contient un sommaire, vous pouvez cliquer sur les liens pour vous rendre directement à la section qui vous intéresse. Assurez-vous d'utiliser un lecteur PDF qui en dispose:
Attardez-vous sur la section "Register Description": À la fin de chaque partie, une section "Register Description" décrit les registres utilisés par le module. Cette partie nous intéresse particulièrement, car elle nous permet de connaître les registres à utiliser pour configurer le module.
Regardez les exemples: La documentation contient des exemples de code (y compris de C), qui peuvent vous aider à comprendre comment utiliser un module.
Aidez vous de la section USART0 (de la page 143 à la page 165) pour répondre aux questions ci-dessous:
U2X0 du registre UCSR0A?TX et RX ?
Nous allons créer un firmware uart_basic qui contiendra une première implémentation de la communication UART.
Écrivez désormais le code C d'une fonction uart_init(unsigned long baudrate) qui initialise le module UART
avec la configuration suivante:
115200 baudsU2X0 activéÉcrivez désormais le code C d'une fonction uart_send_byte(uint8_t byte) qui envoie un octet sur l'UART.
Ensuite, écrivez le code de la fonction uart_send_string(char *str) qui envoie une chaîne de caractères
sur l'UART.
Rappel: En C, une chaîne de caractères est un tableau de caractères terminé par le caractère '\0'.
Testez votre code en envoyant des messages sur l'UART. Pour cela, vous pouvez utiliser le programme minicom:
$ minicom -b 115200 -o -D /dev/ttyACM0
Cette commande nous sera utile par la suite, n'hésitez pas à la mettre dans un script, ou dans une règle
Makefile, comme make com.
Affichez maintenant un compteur qui s'incrémente, par exemple:
Compteur: 1
Compteur: 2
Compteur: 3
...
Pour cela, vous pourrez utiliser la fonction sprintf afin de construire un buffer à donner
à la fonction uart_send_string.
Implémentez désormais la fonction uart_receive_byte qui attend la réception d'un octet sur l'UART et le
retourne.
Implémentez la fonction uart_receive_string qui attend la réception d'une chaîne de caractères sur l'UART
et la retourne.
Modifiez le firmware uart_basic afin qu'il vous demande d'entrer du texte, puis vous le retourne:
$ minicom -b 115200 -o -D /dev/ttyACM0
Entrez du texte: Hello World!
Vous avez saisi: Hello World!