Archives par mot-clé : TI

Les GPIO de la Stellaris Launchpad

J’ai enfin réussi à faire tourner et à débugger mon premier programme pour la Stellaris Launchpad. Oh, ce n’est pas grand chose, j’ai fait clignoter une LED. Mais qu’est ce que j’ai appris de choses!

En particulier, j’ai découvert pas mal de choses sur les fonctions GPIO (general purpose input/output) de ce microcontrôleur.

Accès GPIO par les bus APB et AHB

Le CPU ARM Cortex contient plusieurs bus de donnée à l’extérieur du coeur du processeur.

  • le bus APB, Advanced Peripheral Bus
  • le bus AHB, Advanced High-Performance Bus

Les périphériques internes du Stellaris sont connectés à l’un ou à l’autre de ces bus:

Archi interne Stellaris
Archi interne Stellaris

Pour les périphériques GPIO (= lignes de sorties qu’on peut piloter et lire), on a le choix du bus utilisé. Prenons l’exemple du port F, utilisé pour piloter les LEDs de la carte Stellaris Launchpad. Ce port est accessible depuis deux adresses:

  • Pour sa connexion à l’APB, les registres sont disponibles à partir de l’adresse 0x40025000
  • Pour sa connexion à l’AHB, les registres sont disponibles à partir de l’adresse 0x4005D000

Les registres accessibles sont les mêmes, mais le bus AHB possède une plus faible latence, et ses adresses sont plus pratiques à utiliser dans des calculs.

Mais attention : Au reset, seul l’accès par le bus APB est possible. Toute tentative d’accès aux ports AHB provoquera une exception de type “Bus Fault”, et comme dans un code basique, cette exception n’est pas activée, on obtiendra une “Hard Fault”.

Après quelques heures passées sur le sujet, j’ai bien relu la datasheet, et j’ai compris que les bons bits devaient être définis dans le registre GPIOHBCTL, documenté au paragraphe 5.5, page 247.

Recette 1: Accès GPIO qui produit une hardfault (ou une busfault) -> Vérifier GPIOHBCTL

 

Ecriture de données sur les ports GPIO

Après cette découverte, je n’ai plus eu de Hard Fault. En revanche, toute écriture dans le registre GPIODATA n’avait aucun effet.

De la même manière, seule une lecture attentive de la datasheet m’a donné l’explication. GPIODATA n’est pas un registre, mais une PLAGE de 256 registres.

En effet, tout accès à la zone [GPIODATA..GPIODATA+256*4] s’accompagne d’une écriture sur le port, mais les bits de poids faible de l’adresse sont utilisés comme un masque définissant quels bits seront écrits. Le but de cette fonctionnalité, documentée page 608, est de permettre les modifications de bits individuels du port sans utiliser la technique du read-modify-write:

WRITE(address, READ(address) OP mask)

En effet, les seuls bits modifiés du port sont ceux dont les bits d’adresse 9..2 sont à 1.

Supposons que j’écrive 0xEB à l’adresse GPIODATA+0x98, voici ce qui se passe:

gpiodata access

u signifie que le bit n’est pas modifié, 0 ou 1 montre la valeur réellement écrite.

Donc en général, pour la modification du bit N, vous devez écrire 1<<bit à l’adresse GPIODATA+(1<<bit)

Eh non! Vous avez encore mal lu! Les bits significatifs sont 9..2 et non 7..0 !

Pour la modification du bit N, vous devez écrire 1<<(bit+2) à l’adresse GPIODATA+(1<<(bit+2))

Recette 2: Si les GPIO ne changent pas, vérifiez votre adresse GPIODATA

 

Tout ceci m’inspire une 3e recette, car ce circuit est manifestement plus complexe et moins évident qu’un PIC:

Recette 3: Pour le Stellaris LM4F, le RTFM est vraiment important!

 

Linux sur la calculatrice Nspire

Depuis de nombreuses années, beaucoup d’enthousiastes s’affairent autour des calculatrices de Texas Instruments, car elles permettent des formes évoluées de programmation en C et en assembleur (c’est avec ces calculatrices que j’ai débuté la programmation dans ces langages, pendant mes années de prépa…). De nombreux jeux et programmes utilitaires ont été développés, malgré les nombreuses restrictions mises en place par Texas.

Plus récemment, Texas Instruments a cessé de développer sa gamme de TI-89 et TI-92+ pour sortir un nouveau modèle, bien plus puissant que l’ancien: la gamme des TI-Nspire. Cette calculatrice est restée longtemps hors d’accès de la communauté des développeurs indépendant, jusqu’à ce que le voile se lève peu à peu, aboutissant au projet Ndless, qui permet d’écrire des programmes en C et assembleur sur cette calculatrice.

TI-68k TI-Nspire
Apparence  TI-89v200 ti-nspire
CPU  68000 @ 16 MHz  ARM926 @ 90 MHz
Mémoire RAM  256 kB  32 MB
Mémoire Flash  2/4 MB  32 MB

Table: Comparaison des générations de calculatrices TI programmables

 

Avec ces capacités nettement plus évoluées, des projets de plus grande envergure ont pu alors voir le jour, tels que des centaines de jeux et utilitaires de grande qualité, mais également un émulateur de Game Boy, sublimé par la version couleur de la NSpire, et plus récemment: Linux.

C’est effectivement Linux qui a pu être porté par “tangrs” en Novembre 2012, un des développeurs les plus actifs de la communauté NSpire.

Aujourd’hui, j’apprends que nspire-linux va supporter l’architecture “device tree” qui vise à créer un Linux universel pour tous les ARM (de la manière à ce qui existe aujourd’hui dans le monde du PC), et que le prochain but est l’intégration officielle de la version nspire dans le Linux “Standard” (mainline).

Mes plus grandes félicitations à tous ces développeurs passionnés et acharnés. Pour les avoir suivi, je sais que la route a été longue.

La Stellaris Launchpad se transforme en Tiva-C Series Launchpad

De retour sur le site de Texas Instruments après quelques mois sur d’autres projets, je découvre quelques news du mois d’Avril.

Les processeurs LM4F de la Stellaris Launchpad ont disparu, ils ont été remplacés par une nouvelle ligne de composants nommés Tiva-C Series. Leurs caractéristiques sont identiques, ce sont des Cortex-M4F à 80 MHz avec un max de 256k de flash et 32k de RAM, et quasiment les mêmes périphériques.

Par contre, bonne nouvelle, les processeurs eux mêmes seront bientôt disponibles à l’unité, et des cartes de développement à bas coût compatibles avec les Stellaris Launchpad Tiva-C à 12 dollars sont disponibles!

Un petit doute m’a inquiété, les logiciels que j’ai commencé à développer, et les codes disponibles pour la Stellaris Launchpad seront ils encore utilisables? La réponse est Oui, et la réponse m’est arrivée directement du compte twitter officiel de Texas Instruments:

No change required.
No changes required.

Alors OK, je n’ai aucune intention d’utiliser leurs “machinWare” dont on ne maîtrise pas grand chose, mais c’est déja une bonne nouvelle: les logiciels compilés pour la Stellaris Launchpad (LM4F) fonctionneront pour la Tiva Launchpad (TM4C)

Donc pas de souci, vous pouvez acheter la nouvelle Tiva Launchpad sans regret, les logiciels resteront compatibles.

Vite fait: Apprenons à développer sur ARM avec Texas Instruments

Texas instruments propose depuis quelques semaines une promotion très intéressante sur sa carte de développement Stellaris LM4F120. C’est une carte de développement avec un microcontroleur ARM et les composants indispensables, sur une carte électronique utilisable pour bricoler, le tout pour 5 dollars.

Cela me semble parfait pour aborder le développement embarqué sur une plate forme 32 bits moderne. La carte a les fonctionnalités suivantes (description complète, description du kit):

  • CPU ARM Cortex M4 à 80 MHz, avec 256Ko de flash et 32Ko de RAM
  • Interface USB 2 (micro-B, le cable est fourni) avec un PC
  • Interface de débogage intégrée sur un autre port USB
  • Interface “Booster pack” similaire à l’Arduino pour pouvoir connecter ses propres montages additionnels
  • Des LEDs et des boutons pour les tests
  • de l’I2C, UART, CAN, ADC,  interruptions…
Carte Stellaris Launchpad de Texas Instruments
Carte Stellaris Launchpad de Texas Instruments

Je m’en suis procuré une, nous verrons comment nous en servir quand je l’aurai reçue, courant novembre apparemment.

Un des défis sera de la programmer avec la chaine d’outils libres GCC, au lieu de compter sur les outils payants de Texas Instruments.

Il vous faudra comprendre l’anglais un minimum pour passer commande, le paiement se fait par carte ou paypal, et il n’y a pas de frais de port!

 

C’est ici que ça se passe pour commander votre launchpad stellaris LM4F120!