Gamoover

Si vous êtes nouveau, n'hésitez pas à vous présenter ici et à poser toutes vos questions, meme si elles vous paraissent ridicules... Gamoover regroupe une communauté de passionnés prêts à vous aider ! Bienvenue à vous ;)

LaunchPad tuto 003 : Gérer un bouton (et par extension, les interrupts)

Démarré par KodeIn, Mercredi 25 Mai 2011, 10:41:36 AM

KodeIn

Bon, tout petit ajout : une ligne de code intéressante qui permet de jouer avec le choix du flanc du signal sur lequel va se provoquer l'interruption.

Voilà voilà.
Je continue à bosser petit à petit sur le tuto 4 :D
Atari 2600 | Spectravideo SV-328 :'( | Amiga 500 | NES - SNES - N64 - NGC - Wii - GBA - GBAsp - DSi | PS1 - PS2 - PS3 - PSP 2000 | MD - DC | XBox - 360 | MacBook | OpenPandora GHZ edition \o/
WIP [pause] : Borne Euro générique de chez Jeux COURTET
Tutos LaunchPad MSP430 001 - 002 - 003 - 004 en attente

AsPiC


KodeIn

De ce que je sais, les deux termes sont admissibles.
Mais si vous préférez que j'utilise front plutôt que flanc, faites-le moi savoir ;)
Atari 2600 | Spectravideo SV-328 :'( | Amiga 500 | NES - SNES - N64 - NGC - Wii - GBA - GBAsp - DSi | PS1 - PS2 - PS3 - PSP 2000 | MD - DC | XBox - 360 | MacBook | OpenPandora GHZ edition \o/
WIP [pause] : Borne Euro générique de chez Jeux COURTET
Tutos LaunchPad MSP430 001 - 002 - 003 - 004 en attente

Taralom

#19
Bonsoir,

je me suis mis au msp430

J'ai essayé ta gestion des interruptions mais j'ai une erreur de compilation
(je fait ca à l'ancienne avec Gvim, make et mspdebug.)

Lors de la compilation de ton code (copier coller)
j'ai le message suivant :

$ make
msp430-gcc -Wall -g -mmcu=msp430g2231 -c pushButton.c
pushButton.c:55:6: warning: return type of 'main' is not 'int'
pushButton.c:73:0: warning: ignoring #pragma vector
pushButton.c:74:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'
make: *** [pushButton.o] Error 1


la deuxième ligne indique mes options de compilation.
la troisième que tu a écrit void main(void)
la quatrième que la commande #pragma vector sera ignoré (c'est pas cool, ca veut dire qu'en assembleur, ca ne va pas mettre le code interruption à l'endroit souhaité)
la quatrième que la définition du code d'interruption est incorrect.

Je n'ai pas cherché de solution et demain c'est lundi.

Je regarderai de plus près quand j'aurais le temps.
(A priori dans la doc de 650 pages tu devrais trouver la réponse. Aux alentours de la page 40 :p

mon code est différent (int main(void) par exemple ce qui evite le warning ...)
mais j'ai les même retour d'erreur (1 erreur et 1 warning qui fera tous planter)

KodeIn

#20
Effectivement, le compilateur de l'IDE de TI et MSPGCC4 sous linux (et os X) ne possèdent pas exactement le même comportement (certainement une histoire de librairies).
Et donc, nécessitent un code source légèrement différent. Quel bonheur intense >:(

Après une rapide recherche sur google, je suis tombé sur ces pages http://mspgcc.sourceforge.net/manual/x918.html  et  http://justinstech.org/2010/09/msp430-coding-interrupts-for-mspgcc/ .
Le PRAGMA serait donc, avec MSPGG, remplacé par
interrupt (INTERRUPT_VECTOR) IntServiceRoutine(void)
{
   /* Any normal C code */
}


Un peu plus complet :
/*WDT interval timer- code based on msp430 examples*/
//compiler=mspgcc
#include<msp430x22x2.h>
#include<signal.h> //interrupt service routine
#include <io.h> //usually included on msp430 header, but for sfr register access.
void main(void) {
WDTCTL = WDT_MDLY_32; //~30mS intervals
P1DIR |=BIT1;
IE1 |= WDTIE; //enable interrupt
_BIS_SR(LPM0_bits + GIE); //not low power mode and enable interrupts
}//end of main
//interrupt service routine
interrupt(WDT_VECTOR) watchdog_timer(void)
{
P1OUT ^= BIT1;
}//end of interrupt


Après un coup de lecture plus poussé, si tu utilises MSPGC uniarch, il semble que ça sera encore différent. :?
Vous comprendrez aisément que je n'ai pas spécialement envie de passer mon temps à chercher et trouver la manière dont il faut coder mes tutos pour tous les compilateurs existants…
Je vais m'en tenir à CCS et éventuellement MSPGCC si je me décide à m'y mettre (enfant gâté, je suis habitué aux IDE où on fait tout à la souris, vi/vim/nano etc. c'est un choc brutal pour moi  :D).



pushButton.c:55:6: warning: return type of ‘main’ is not ‘int’

A ce sujet, je suis surpris tu peux peut-être envisager d'utiliser
int main(void)
avec un
return 0;
à la fin de ta boucle main.

Au fait, Taralom, pourrais-tu nous dire comment tu es arrivé sur ce forum dédié à l'arcade pour des tutos de MSP430?
(puis éventuellement faire une petit post de présentation ici ;) )




Et au sujet du 4ème tuto, il sera en attente jusqu'à ce que j'aie réussi à faire mon petit interpréteur SNES, désolé.
Atari 2600 | Spectravideo SV-328 :'( | Amiga 500 | NES - SNES - N64 - NGC - Wii - GBA - GBAsp - DSi | PS1 - PS2 - PS3 - PSP 2000 | MD - DC | XBox - 360 | MacBook | OpenPandora GHZ edition \o/
WIP [pause] : Borne Euro générique de chez Jeux COURTET
Tutos LaunchPad MSP430 001 - 002 - 003 - 004 en attente

Taralom

Bien vu.
Plus d'erreur de compilation.

par contre au niveau des includes, je n'utilise que les deux suivant et ca semble suffir

#include <msp430.h>
#include <legacymsp430.h>

j'aurais plus de temps ce week end. Donc d'ici là : patience

(comment je suis tomber ici ?
tape "led verte launchapd msp430" dans google.)

Taralom

#22
Bonsoir,

je n'ai pas eu beaucoup de temps aujourd'hui.
J'ai quand même tester mon code (l'impatience !!)

Eh ben ca marche pas !!  ;)

Je suis quand même aller et plus loin.
Il semblerai que la ligne
_BIS_SR(LPM0_bits + GIE); //not low power mode and enable interrupts

Fasse basculer le µC dans un mode différent et fasse planter le code "classique".
Je m'explique :

Sans cette ligne, les interruptions ne sont pas gérés mais un code de type HelloWorld fonctionne sans problème.
Le simple fait de dé commenter cette ligne ne va plus faire fonctionner celui ci.

Comme dit précedement, je manque cruellement de temps en semaine. (et surtout en début de semaine !!) (env. 30 minutes aujourd'hui sur ce µC)
Je ferai donc mes recherches ce week end.

Bonne soirée.
Je vous tiendrez au courant

KodeIn

 :-((
J'ai essayé de mon coté plusieurs bouts de code... comme toi, j'arrive à compiler, mais il refuse de lire l'état des boutons. :?
C'est frustrant, je n'ai pas trouvé de tutos vraiment clairs au sujet des interruptions utilisant MSPGCC comme compilateur.

Désolé de ne pas pouvoir t'aider plus que ça, je vais continuer à chercher, au cas où.
Atari 2600 | Spectravideo SV-328 :'( | Amiga 500 | NES - SNES - N64 - NGC - Wii - GBA - GBAsp - DSi | PS1 - PS2 - PS3 - PSP 2000 | MD - DC | XBox - 360 | MacBook | OpenPandora GHZ edition \o/
WIP [pause] : Borne Euro générique de chez Jeux COURTET
Tutos LaunchPad MSP430 001 - 002 - 003 - 004 en attente