Routine Interruption Pic32MX
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Routine Interruption Pic32MX



  1. #1
    cedric300

    Routine Interruption Pic32MX


    ------

    Bonjour,

    Je voudrais comprendre les routines d'interruption sur les Pic32mx (compilo xc32);
    Je trouve plein d'exemple sur mes interruptions qui fonctionne mais je voudrai comprendre, pour ne plus chercher un exemple sur le net.

    Malgré toutes les documentations que j'ai trouvées je ne comprends pas. (Doc Compilo; Le PIC Pic32MX)
    Code:
    __ISR(v,ipl)
    => Ou puis je trouver la liste des v (Vector)?
    => ipl, je ne comprends ce que c'est? a quoi il sert?

    La fonction qui suit veut dire quoi, a quoi sert elle??
    Code:
    void __ISR(_UART2_VECTOR, ipl2) IntUart2Handler(void){ ... }
    Merci, pour vos éclaircissements.

    -----

  2. #2
    cedric300

    Re : Routine Interruption Pic32MX

    Re bonjour,

    Je crois que je viens de comprendre;
    J’étais resté sur le principe des interruptions des pic 8 bits

    void __ISR(_UART2_VECTOR, ipl2) => C'est un blabla pour dire au compilo que c'est une fonction particulière
    IntUart2Handler(void) => C'est le nom de la fonction
    { ... } => le code

    Donc si je comprends bien c'est un élément par fonction interruption et chacun a son blabla?
    Ce n'est plus comme les 8bit avec C18:
    void isr (void){
    if (uart){}
    if(TIMER){}
    ...
    }

    Nouvelle question: Pourquoi dans certaines fonctions trouvées sur le net le flag est testé??

    Le blabla a t'il un nom plus... sérieux?

    Merci et désole si mes questions sont flou, c'est flou encore dans ma tête.

  3. #3
    schneiderj

    Re : Routine Interruption Pic32MX

    Bonsoir,

    je vais essayé de te répondre, mais tout ne sera pas parfait car je débute également (cela fait un an que je suis sur un projet avec un PIC32). Et les interruptions ne sont pas simples à comprendre par rapport à ceux des PIC18.

    Tout d'abord il faut savoir qu'il y a 64 possibilités d’interruption qui sont représenté par 64 vecteurs. Ce qui fait que dans ta fonction tu n'a pas besoin de tester 20 flags pour savoir quelle interruption a eu lieu. Seulement celles qui correspondent à ces vecteurs. Tu trouveras cette attribution dans le datasheet de ton microcontrolleur. Par exemple pour la série PIC32MX5XX/6XX/7XX cela est donné dans la table 7-1.

    C'est ainsi que tu vois que le vecteur de l’interruption de l'UART1 en émission est partagé avec SPI3TX et 7 autres interruptions (vecteur 24).

    Un autre point déconcertant : quand tu lis la doc relative aux interruptions tu as de beaux tableaux qui donnent tout un tas de chiffres... il faut aller dans le datasheet du microcontrolleur pour savoir où est placé le bit que tu recherches (le même tableau 7-1). Donc pour l’interruption de mon uart1 en émission cela donne IFS0<28> IEC0<28> IPC6<4:2> IPC6<1:0>. cela va déjà beaucoup mieux.

    Par exmple pour l'UART5 en reception j'ai :
    Code:
    void __ISR(_UART5_VECTOR, ipl2) IntUart5Handler(void) {
        // Is this an RX interrupt?
        if (INTGetFlag(INT_U5RX)) {
    
            // Echo what we just received.
            UART5_Buffer_Rx[UART5_NbreBytes_Rx] = ReadUART5();
            // Clear the RX interrupt Flag
            INTClearFlag(INT_U5RX);
            if (UART5_Buffer_Rx[UART5_NbreBytes_Rx] == 0x2A) // correspond à *
                UART5_Rx_Recu = 1;
            else if (UART5_Buffer_Rx[UART5_NbreBytes_Rx] == 0x0D)
                UART5_Rx_Recu = 1;
            else if (UART5_NbreBytes_Rx == 0) {
                // Le premier caractére est + ou -
                if ((UART5_Buffer_Rx[UART5_NbreBytes_Rx] == 0x2B) || (UART5_Buffer_Rx[UART5_NbreBytes_Rx] == 0x2D))
                    UART5_Rx_Recu = 1;
            }
    
            UART5_NbreBytes_Rx++;
        }
    }
    Cherche dans mes messages, j'ai posé une question au sujet de la document de C32... pas facile de si retrouver. Finalement ce que je fini par préférer c'est les commentaires dans le code qui peuvent facilement être trouvés à l'aide de MPLAB.X.
    Mais il faut un point d'entré... et le code n'est pas le meilleur endroit pour cela, reste les forums et les recherches sur le net.
    Par contre attention, pour des raisons de compatibilité de code, tous les anciennes fonctions sont présentes (nommé legacy quelque chose). Il vaut mieux trouver des fonctions plus récentes qui assurent le même boulot... par

    J’espère ne pas avoir écrit trop de connerie...
    Jean-Marie

    Ha encore un point : attention à l'ordre des priorités. ipl0 correspond en gros à ne pas avoir d’interruption. ipv7 est par contre la top 1, priorité absolue. Et au sein de ces priorités tu peux encore jouer un peu plus finement en définissant des sous priorités. Je crois avoir en ce moment un problème à ce niveau et je pense ouvrir un message à ce sujet

  4. #4
    cedric300

    Re : Routine Interruption Pic32MX

    Merci schneiderj;

    Ton explication confirme ce que je pensais, c'est rassurant.

    A++

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

    Re : Routine Interruption Pic32MX

    Salut Cedric,

    Personnellement j'utilise les exemples de code pour les PIC32. Il en existe un grand nombre et l'avantage c'est qu'il se limite à un périphérique ou une fonction.
    Il en existe pour l'UART avec/sans le DMA, pour les interruptions, etc...
    Tu verras que le code de traitement d'une interruption UART est relativement simple.

    Concernant les vecteurs d'interruptions, la méthode la plus simple pour savoir ou ils sont définis c'est d'utiliser MPLAB X.
    En effet, dans MPLAB X il y a la navigation "hyperlien" (CTRL + click).

    Exemple, tu vas sur le vecteur d'interruption pour savoir comment il est défini.
    Pour l'UART il s'agit de _UART2_VECTOR tu fais CTRL + click et le fichier ppic32mx.h s'ouvre tout seul et positionne le curseur sur le vecteur que tu cherches ;=))))

    a+

  7. #6
    cedric300

    Re : Routine Interruption Pic32MX

    Merci RISC,

    Mais je voulais comprendre,
    Récupéré les exemples de code de microchip sans réellement les comprendre n'est pas très constructif.
    Je reconnais que le système hyperlien de Mplab est une merveille. Mais je vouais savoir si il existait une doc ou il y aurait les vecteurs référencés avec des infos complémentaires qu'il étais bon a savoir pour évité des piégés/problèmes.

    RISC
    Il en existe un grand nombre et l'avantage c'est qu'il se limite à un périphérique ou une fonction.
    schneiderj
    C'est ainsi que tu vois que le vecteur de l’interruption de l'UART1 en émission est partagé avec SPI3TX et 7 autres interruptions (vecteur 24).
    C'est ce genre d'arnaque qu'il est bon a savoir et pas toujours évident a trouver dans ppic32mx.h.

    Merci
    A++

  8. #7
    RISC

    Re : Routine Interruption Pic32MX

    Salut,
    Citation Envoyé par cedric300 Voir le message
    Récupéré les exemples de code de microchip sans réellement les comprendre n'est pas très constructif.
    Rien n'empêche de lire les exemples pour comprendre les phases importantes de l'initialisation. C'est le but du jeu.
    On peut aussi le faire par tatonnement...c'est simplement beaucop plu slong ;=)

    Je reconnais que le système hyperlien de Mplab X est une merveille. Mais je vouais savoir si il existait une doc ou il y aurait les vecteurs référencés avec des infos complémentaires qu'il étais bon a savoir pour évité des piégés/problèmes.
    Justement, certaines des définitions utilisées dans le compilateur ne sont documentées que dans le compilateur et c'est le cas des vecteurs d'interruption.
    La seule façon de les trouver est celle que j'ai mentionnée ;=)

    tous les masques et champs de bits n'existent que dans les fichiers headers du compilateur...A toi les hyperliens ;=)

    a+

Discussions similaires

  1. RTCC Pic32Mx
    Par invite024026d4 dans le forum Électronique
    Réponses: 13
    Dernier message: 23/11/2012, 09h07
  2. Timer PIC32MX
    Par E_78 dans le forum Électronique
    Réponses: 3
    Dernier message: 26/07/2012, 08h38
  3. PIC : interruption externe et interruption on change ?
    Par jlg_47 dans le forum Électronique
    Réponses: 10
    Dernier message: 09/04/2012, 12h41
  4. Problème de configuration d'oscillateur PIC32MX
    Par invite3bb6cfa9 dans le forum Électronique
    Réponses: 5
    Dernier message: 19/03/2012, 20h47
  5. PWM Sur PIC32MX
    Par youril dans le forum Électronique
    Réponses: 2
    Dernier message: 23/09/2011, 22h25
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...