Programmation sur RX

Création d'un projet RX62T dans HEW

Pour programmer sur les microcontrôleurs Renesas, le fabricant fournit un IDE "HEW" qui intègre également un simulateur. Son rôle est évidemment de permettre le développement et le débogage du code embarqué.
L'IDE fonctionne sous forme de projets.
Pour créer un projet, il suffit de se reporter au TP n°1 de systèmes embarqués, afin de de savoir quels fichiers sont à inclure, supprimer ou modifier.
Toutefois, on note certaines différences. En effet, sur ce tp, vous serez amenés à configurer un projet pour le RX62N et non pas le RX62T.

Quand vous avez configuré le projet pour le RX62T en choisissant le bon microcontrôleur, il est nécessaire de coller le dossier RPDL disponible dans le projet "drone_cpp" situé dans le dépôt et les fichiers hwsetup.h,hwsetup.c, flashLED.c et flashLED.h dans les sources du projet.
Dans HEW, il faut donc inclure les fichiers de la RPDL suivants : Interrupt_CMT.c,Interrupt_INTC.c et Interrupt_SCI.c
Comme d'habitude, il suffit de faire "Projetct->Add files" et de sélectionner uniquement les fichiers C. Les headers seront linkés automatiquement.

La RPDL

La RPDL, Renesas Peripheral Driver Library, est une bibliothèque de périphériques fournie par Renesas permettant de manipuler ces derniers avec des fonctions de haut niveau.
Cela permet un gain de temps très important puisque l’utilisation est très largement simplifiée, et les fonctions sont bien documentées.

Exemple : création d’une temporisation :
Par exemple, voici le code utilisé pour générer une temporisation de 100 ms avec un timer :

R_CMT_CreateOneShot(1,PDL_NO_DATA,0.1,PDL_NO_FUNC,0);

La fonction R_CMT_CreateOneShot permet de configurer un timer pour un évènement unique.

Ses paramètres sont :
  • Le numéro du timer à utiliser, un entier compris entre 0 et 3 inclus, ici le 1.
  • La configuration à utiliser. Ici, on utilise la constante PDL_NO_DATA qui permet d’utiliser les valeurs par défaut.
  • Le temps d’attente en secondes, dans un float.
  • La fonction à appeler à la fin de l’attente. Ici on souhaite simplement continuer l’exécution du flux courant donc on utilise la constante PDL_NO_FUNC.
  • La priorité de l’interruption (la fonction appelée à la fin). Le paramètre est ignoré s’il n’y en a pas, comme dans le cas présenté.

Exemple : envoi de messages via le port série :
Voici un exemple plus important avec une partie de l’envoi de la configuration au module wifi :

R_SCI_Send(2,PDL_NO_DATA,"AT+WD\r\n",0,PDL_NO_FUNC);

R_CMT_CreateOneShot(2,PDL_NO_DATA,0.1,PDL_NO_FUNC,0);

R_SCI_Send(2,PDL_NO_DATA,"AT+WM=2\r\n",0,PDL_NO_FUNC);

R_CMT_CreateOneShot(2, PDL_NO_DATA,0.1,PDL_NO_FUNC, 0);

R_SCI_Send(2,PDL_NO_DATA,"AT+WAUTH=0\r\n",0,PDL_NO_FUNC);

Ici, on alterne un envoi de trame série avec une attente de 100 ms. Nous avons dû mettre en place cette temporisation pour s’assurer que le module wifi ait le temps de traiter la configuration, puisqu’avant cet ajout le module n’arrivait pas à gérer la réception de toutes les informations.

La fonction R_SCI_Send permet l’envoi d’un message sur le port série paramétré auparavant.
Ses paramètres sont :
  • Le port à utiliser, un entier compris entre 0 et 6 inclus mais différent de 4.
  • La configuration à utiliser. Ici, on utilise la constante PDL_NO_DATA qui permet d’utiliser les valeurs par défaut.
  • L’adresse de début du message à envoyer, sous forme d’un uint8_t (créé ici à partir d’un tableau de char)
  • Le nombre d’octets à envoyer dans le cas d’un envoi de données binaires. Ici on le met à 0 puisqu’on envoie des données ASCII, il repère tout seul la fin de la chaîne.
  • La fonction à appeler à la fin de l’envoi. Ici on souhaite simplement continuer l’exécution du flux courant donc on utilise la constante PDL_NO_FUNC.
  • La priorité de l’interruption (la fonction appelée à la fin). Le paramètre est ignoré s’il n’y en a pas, comme dans le cas présenté.

Exemple : paramétrage du port série :
Cet ensemble de fonctions permet de paramétrer le port série et l’interruption de réception.

R_SCI_Set active le port sur lequel série on travaille, ici le port représenté par la constante PDL_SCI_PIN_SCI2_A.
R_SCI_Create crée le port au niveau logiciel.

Ses paramètres sont :
  • Le numéro de port série à utiliser.
  • Configuration du channel : 8 bits, sans parité, 1 bit d’arrêt.
  • Le taux de transfert en bauds
  • La priorité de l’interruption de réception
R_SCI_Receive permet d’activer la fonction d’interruption pour la réception. Ses paramètres sont :
  • Le numéro de port série à utiliser.
  • La configuration à utiliser. Ici, on utilise la constante PDL_NO_DATA qui permet d’utiliser les valeurs par défaut.
  • Le buffer de récupération des caractères.
  • Le nombre de caractères à lire avant de lancer l’interruption.
  • L’interruption à déclencher le nombre atteint.
  • Une deuxième fonction d’interruption à exécuter en cas d’erreur.

Dernière mise à jour : 25/03/2013 12h00
Auteurs : Nicolas COSNARD, Pierre GUINAULT