MSP430 interruption
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

MSP430 interruption



  1. #1
    invite6015f114

    MSP430 interruption


    ------

    Bonjour,

    Je suis en train de travailler sur un msp430 et j'aurai besoin d'être aiguiller un peu sur les interruption.
    Ma question est la suivante :
    Est-il possible de faire des interruptions sur le même port sans que cela n'aille dans la même IT?

    En gros faire une fonction pour l'interruption sur la patte P1.0 et une autre fonction pour la patte P1.1.

    Merci d'avance
    Cordialement
    Morcelino

    -----

  2. #2
    splinter974

    Re : MSP430 interruption

    Bonjour l'ami ,

    Je ne connais pas tout les Ucontrolleurs MSP430 low power de chez TI.
    En revanche je sais que certains permettent de faire ce que tu veux et d'autres non .
    Pour cela tu vas avoir le droit de manger de la datasheet ( génial <3 ) et de chercher la liste des interruptions possibles .

    Cordialement

  3. #3
    man-x86

    Re : MSP430 interruption

    La dernière fois que j'ai codé sur un msp430, j'ai utilisé "salement" les interruptions sur le port...
    J'ai activé les interruption sur le port que je voulais avec le masque correspondant à mes bits d'interruption.

    Chaque variation d'une entrée génère une interruption, ensuite "routée" vers la bonne fonction par un jeu de variables globales (pour gérer les priorités), en faisant attention au flag d'interruption.
    (En utilisant bien les modes low power, la consommation est ridicule, ça tient plusieurs minutes sur une pauvre capa chimique...)

  4. #4
    invite6015f114

    Re : MSP430 interruption

    Bonjour,

    Alors le problème c'est pas pour rentrer dans une interruption qui me pose problème mais le faite de pouvoir choisir qu'elle patte.
    Je pense donc faire qu'une seule interruption ou bien 2 mais pas sur les même ports.

    Alors voila le problème c'est que je teste plusieur solution mais que rien ne marche.

    Voila le bout de code:
    #pragma vector=PORT1_VECTOR
    __interrupt void Port1(void){
    P2OUT ^= 0x04; // permet de changer l'état d'une led pour être sur d'être rentrer dans l'interruption
    if((P1IFG &= 0x40)==1) // essai pour recuperer que la valeur du flag de la patte
    {
    P2OUT = 0x00; //toute led allumé
    delay(100000);
    }
    if(P2IN == 0x80)
    {
    P2OUT = 0x0F; //toute led éteinte
    delay(100000);
    }

    P1IFG &= ~0x40;
    P1IFG &= ~0x80;
    }
    Le gros souci c'est que je ne peux pas faire de masque avec P2IN qui normalement lit l'état des pattes. C'est pour cela que j'ai pas mal de souci.
    Si quelqu'un sait comment faire je suis preneur.

    et pour ce qui est des initalisations :
    P1IE |= 0x80; // P1.7 interrupt enabled
    P1IES |= 0x80; // P1.7 Hi/lo edge
    P1IFG &= ~0x80;

    P1IE |= 0x40; // P1.6 interrupt enabled
    P1IES |= 0x40; // P1.6 Hi/lo edge
    P1IFG &= ~0x40;

    Voila.
    j'espere que quelqu'un pourra m'aider

    Cordialement
    Morcelino

  5. A voir en vidéo sur Futura
  6. #5
    xberger

    Re : MSP430 interruption

    Citation Envoyé par morcelino Voir le message
    Alors le problème c'est pas pour rentrer dans une interruption qui me pose problème mais le faite de pouvoir choisir qu'elle patte.
    Citation Envoyé par morcelino Voir le message
    Le gros souci c'est que je ne peux pas faire de masque avec P2IN qui normalement lit l'état des pattes. C'est pour cela que j'ai pas mal de souci.
    Le masque tu dois le faire avec P2IFG pour savoir laquelle des 2 entrées (ou les 2) a déclenchée l'interruption
    Ta fonction d'interruption sera du genre :

    if((P2IFG & BIT6))
    {
    ...
    }
    if((P2IFG & BIT7))
    {
    ...
    }

  7. #6
    xberger

    Re : MSP430 interruption

    Ton IT ré-écrite proprement donne :

    #pragma vector=PORT1_VECTOR
    __interrupt void Port1(void)
    {
    P2OUT ^= BIT3; // permet de changer l'état d'une led pour être sur d'être rentrer dans l'interruption
    if(P1IFG & BIT6) // essai pour recuperer que la valeur du flag de la patte
    {
    P2OUT = 0x00; //toute led allumé
    delay(100000);
    }
    if(P1IFG & BIT7)
    {
    P2OUT = 0x0F; //toute led éteinte
    delay(100000);
    }
    P1IFG &= ~(BIT6+BIT7); // Reset des Flags IT
    }

    Je ne pense pas que le toggle que tu as mis à l'entrée de l'IT va te permettre de détecter quelque chose si tu allume ou éteint toutes les LED immédiatement après

    Cordialement

    Xavier

  8. #7
    invite6015f114

    Re : MSP430 interruption

    Pour le toggle, c'est juste pour savoir si l'IT est appelée.
    Car sinon on peut pas savoir si c'est un problème de registre ou bien dans la fonction.
    Enfin c'est comme ca que je vois.

    En tout cas fonctionne.

    Merci beaucoup xberger.

  9. #8
    xberger

    Re : MSP430 interruption

    De rien,

    Le plus gros problème dans ton code était me test : if((P1IFG &= 0x40)==1)

    Ici tu ne fais pas seulement un test des flags d'interruption mais tu les modifies aussi car tu utilises l'opérateur &= à la place de &

    Cordialement


    Xavier

  10. #9
    invite6015f114

    Re : MSP430 interruption

    A d'accord.
    C'est evident mais j'y ai même pas pensé

    Autrement petite dernière question

    J'ai un souci avec ce bout de code:
    #pragma vector=ADC_VECTOR
    __interrupt void ADC12 (void)
    {
    if (0x000 <= ADC12MEM0 && ADC12MEM0 < 0x2c1) // 0% à 25%
    {
    P6OUT &= ~BIT2;
    gGenePeriode = 0;
    }
    if(0x2c1 < ADC12MEM0 && ADC12MEM0 <= 0x747) // 25% à 50%
    {
    P6OUT |= BIT2;
    gGenePeriode = 1;
    }

    if(0x747 < ADC12MEM0 && ADC12MEM0 <= 0xc32) // 50% à 75%
    {
    P6OUT &= ~BIT2;
    gGenePeriode = 2;
    }
    if(0xc32 < ADC12MEM0 && ADC12MEM0 <= 0xfff) // 75% à 100%
    {
    P6OUT |= BIT2;
    gGenePeriode = 3;
    }

    _BIC_SR_IRQ(CPUOFF); // Endors le cpu
    }
    Alors le problème provient de la dernière instruction qui endors un peu trop le CPU. Et quand je bouge le potar apres 30sec, et bin ca ne rentre pas dans l'interruption, alors qu'avant tout marche comme prevu.

    Si j'enleve cette instruction plus rien ne marche. Donc comment faire pour que le cpu ne devienne pas la belle au bois dormant?

    Cordialement
    Morcelino

  11. #10
    xberger

    Re : MSP430 interruption

    Citation Envoyé par morcelino Voir le message
    Alors le problème provient de la dernière instruction qui endors un peu trop le CPU.
    Cette instruction indique qu'à la sortie de l'interruption le micro sera en mode LPM0 (CPU=OFF mais l'horloge des périphèriques et le 32kHz fonctionnent toujours).
    Elle endorsle CPU, mais dans un mode de sommeil différent de celui avant le réveil.
    Si tu ne mais pas cette instruction le CPU retourne dans le mode où il était avant son reveil par l'interruption.

    Voilà ce qui se passe dans ton cas.

    Au démarrage, le CPU est actif
    A l'entrée dans ton IT, le micro doit passé en mode actif (mais il y est déjà)
    A la sortie, tu lui impose de s'endormir mais tu n'as surement pas programmé les interruption pour qui se réveille à nouveau.

    si tu n'as pas de contraintes de consommation tu peux ne pas utiliser les mode basse-consommation (LPMx) pour laisser le CPU toujours actif
    ça sera plus simple

    Cordialement

    Xavier

  12. #11
    invite6015f114

    Re : MSP430 interruption

    Bonjour,

    Merci pour ta reponse.

    Et bin justement, j'ai des contraintes de consommation. Il faut au final un msp avecla plus faible conso possible.

    Dans ce cas la si j'endors mon cpu, il est toujours possible de le reveiller. Cela se fait-il dans les registre lors des initialisations?

    Cordialement
    Morcelino.

  13. #12
    xberger

    Re : MSP430 interruption

    Bonjour,

    C'est quoi la référence de ton MSP430 ?

    Xavier

Discussions similaires

  1. PIC : interruption externe et interruption on change ?
    Par jlg_47 dans le forum Électronique
    Réponses: 10
    Dernier message: 09/04/2012, 12h41
  2. MSP430 et TUSB3410
    Par invite8fe13b0e dans le forum Électronique
    Réponses: 1
    Dernier message: 21/03/2012, 14h56
  3. MSP430 external clock
    Par gold5 dans le forum Électronique
    Réponses: 0
    Dernier message: 08/09/2011, 10h53
  4. Timer du MSP430 F2013
    Par invite40f2798e dans le forum Électronique
    Réponses: 0
    Dernier message: 20/05/2010, 14h10
  5. microcontroleur msp430
    Par invite48fedcb2 dans le forum Électronique
    Réponses: 5
    Dernier message: 18/03/2008, 09h18
Découvrez nos comparatifs produits sur l'informatique et les technologies.