Partage
  • Partager sur Facebook
  • Partager sur Twitter

STM32 Cortex M3 interruption et priorités

registre IPR

Sujet résolu
    9 juin 2014 à 17:31:58

    Bonjour,

        Je travaille sur un microcontrôleur STM32F103ZE et il y a un point que je ne comprends pas concernant les registres IPRn. Ces derniers sont au nombre de 20 et sont utilisés pour définir la priorité des exceptions/interruptions, ce sont des registres de 4 octets et chaque octet code la priorité d'une exception/interruption. Seulement sur chaque octets, seuls les 4MSB sont utilisés et les autres restent à 0. On a donc 16 combinaisons possibles pour définir une priorité pour une interruption/exception donnée. Après lorsque je regarde la table des vecteurs dans la doc, on peut voir que par défaut, chaque périphérique a sa propre priorité et ça dépasse largement les 16 niveaux de priorité possible. o_O Comment se fait-il que par exemple l'ADC1_2 a la priorité 25 ou que le timer6 la priorité 61 ?

    Quelqu'un a une idée ?

    Merci. :)

    • Partager sur Facebook
    • Partager sur Twitter
    - Il y a un chemin vers chaque sommet, même le plus haut -
      9 juin 2014 à 21:07:04

      peut-être un choix du fondeur qui avait un peu de place à économiser...

      • Partager sur Facebook
      • Partager sur Twitter

      oui. non. enfin je regarde et je te dis.

        10 juin 2014 à 11:44:27

        Sub-Zéro a écrit:

        Quelqu'un a une idée ?

        Tu fais une confusion entre la priorité d’une interruption et son numéro. Il est vrai que sur certaines architectures, ces deux notions sont confondu mais ce n’est pas le cas ici, c.f. programming manual page 34.

        • Partager sur Facebook
        • Partager sur Twitter
        Zeste de Savoirbépocode minimal  — Ge0 <3
          10 juin 2014 à 15:36:39

          simbilou a écrit:

          Sub-Zéro a écrit:

          Quelqu'un a une idée ?

          Tu fais une confusion entre la priorité d’une interruption et son numéro. Il est vrai que sur certaines architectures, ces deux notions sont confondu mais ce n’est pas le cas ici, c.f. programming manual page 34.


          Euh non, si on prends le ADC_1_2, il a la position 16+18 = 34 et sa priorité par défaut est 25. :o Les 4 LSB sont censés rester à 0 : "The processor implements only bits[7:4] of each field, bits[3:0] read as zero and ignore writes". Alors pourquoi on trouve des priorités par défaut inférieur à 16 ou encore des priorités de nombres impaires ?

          Source: http://www.keil.com/dd/docs/datashts/st/stm32f10xxx.pdf

          • Partager sur Facebook
          • Partager sur Twitter
          - Il y a un chemin vers chaque sommet, même le plus haut -
            10 juin 2014 à 16:13:42

            Sub-Zéro a écrit:

            Euh non

            Si, j’insiste. Keil te complique la vie en utilisant deux fois le mot priority pour designer deux choses différentes. Le vocabulaire est malheureux et hélas répandus dans les documentations. Je t’ai un donné un lien vers le manuel de programmation fourni par le constructeur qui évite cet écueil, jettes-y au moins un coup d’œil.

            Cet amalgame qui fait entrer deux concepts différents (quoique subtilement relié) dans un même mot est un peu pénible mais pas extrêmement gênant en soit une fois qu’on a compris le truc.

            • Partager sur Facebook
            • Partager sur Twitter
            Zeste de Savoirbépocode minimal  — Ge0 <3
              10 juin 2014 à 18:20:02

              moi j'ai téléchargé ton programming manual (la doc fournie par ST, donc... source fiable), et je comprends comme lui, et c'est aussi ça que j'avais vu en cours, quand on avait travaillé dessus. mais ça commmence à dater pour tenir ma mémoire pour fiable là-dessus (j'ai jamais travaillé en électronique embarquée après ça).

              chaque interruption a un octet qui définit sa priorité, et cette priorité est un nombre entre 0 et 15 qui est déposé sur les 4 MSB du registre de commande des priorité (registre NVIC_IPRx, page 125 de ton document).

              ceci dit, si tu es capable d'expliquer clairement en quoi ce qu'on dit est faux, je prends.

              • Partager sur Facebook
              • Partager sur Twitter

              oui. non. enfin je regarde et je te dis.

                10 juin 2014 à 18:51:05

                remace a écrit:

                chaque interruption a un octet qui définit sa priorité, et cette priorité est un nombre entre 0 et 15 qui est déposé sur les 4 MSB du registre de commande des priorité (registre NVIC_IPRx, page 125 de ton document).

                ceci dit, si tu es capable d'expliquer clairement en quoi ce qu'on dit est faux, je prends.

                Mais ce n’est pas faux ! Et c’est facile à comprendre, c’est pour ça que je l’ai redirigé vers cette ressource, il est question de « IRQ number », chacune ayant une « priority » configurable entre 0 et 15 (c’est même plus fin que ça parce que l’on peut gérer des sous-groupes mais bref).

                Le problème du PO est que dans la documentation de Keil, « priority » est un mot pouvant désigner tantôt l’« IRQ number », tantôt « priority » suivant le contexte.

                EDIT : Hum, en relisant de plus près ce n’est pas vrai. La colonne priority de la doc de Keil donne une sorte de sous-priorité qui n’est prise en compte que si deux IRQ ayant la même priorité (tel que fixé par les registres NVIC_IPRx) arrivent en même temps. Il faut bien que le hardware prenne une décision dans ce cas.

                -
                Edité par simbilou 10 juin 2014 à 19:19:20

                • Partager sur Facebook
                • Partager sur Twitter
                Zeste de Savoirbépocode minimal  — Ge0 <3
                  10 juin 2014 à 19:53:17

                  Ok, donc il y a bien 16 niveau de priorité possible pour une IRQ que l'on peu configurer grâce aux 4 MSB de chacun des 4 octets de NVIC_IPRn. Cette colonne priorité serait donc une sous-priorité matérielle. Ça me parait plutôt logique, par contre, je vois pas où c'est indiqué dans la doc.

                  Merci beaucoup :)

                  PS. On peu plus mêtre un sujet en résolu ?

                  -
                  Edité par Sub-Zéro 10 juin 2014 à 19:54:59

                  • Partager sur Facebook
                  • Partager sur Twitter
                  - Il y a un chemin vers chaque sommet, même le plus haut -
                    10 juin 2014 à 19:57:55

                    moi j'ai réussi, et sur ton topic, alors... je sais pas quoi te dire, à part "c'est fait, docteur!"
                    • Partager sur Facebook
                    • Partager sur Twitter

                    oui. non. enfin je regarde et je te dis.

                      12 juin 2014 à 0:56:58

                      Sub-Zéro a écrit:

                      Ok, donc il y a bien 16 niveau de priorité possible pour une IRQ que l'on peu configurer grâce aux 4 MSB de chacun des 4 octets de NVIC_IPRn. Cette colonne priorité serait donc une sous-priorité matérielle. Ça me parait plutôt logique, par contre, je vois pas où c'est indiqué dans la doc.

                      Merci beaucoup :)

                      PS. On peu plus mêtre un sujet en résolu ?

                      -
                      Edité par Sub-Zéro le 10 juin 2014 à 19:54:59

                      Certaines choses ne sont pas forcément dites dans une doc, parfois pour la simple et bonne raison que c'est tellement évident pour l'auteur (et les relecteurs) que l'on ne pense pas à l'indiquer. Parfois pour éviter de surcharger la documentation aussi on va passer sur les notions qui pourront être probablement sues par la plupart des lecteurs.

                      Car mine de rien quand on s'attaque à un MCU 32 bits et les priorités, c'est rarement la première fois qu'on touche à un MCU.

                      Il faut parfois aller dans d'autres parties de la doc pour avoir des infos.

                      J'ai déjà rencontrer le cas sur une doc de microprocesseur Freescale, même en lisant le chapitre sur ce qui nous intéressait on manquait de quelques infos, après discussion avec Freescale la réponse se trouvait dans uen partie qui à priori n'était pas super pertinente. En gros parfois tu as des infos de manière indirecte.

                      -
                      Edité par zeqL 12 juin 2014 à 0:58:47

                      • Partager sur Facebook
                      • Partager sur Twitter

                      STM32 Cortex M3 interruption et priorités

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown