Quelle est la différence entre Interruption sur changement et Interruption externe sur PIC

11

Quelle est la différence de fonction entre IOC et EXT Interrupt sur un PIC? J'utilise actuellement un PIC12F1822, et à part la couche supplémentaire de vérification que vous avez à faire avec l'IOC (c'est-à-dire quelle broche a causé l'interruption), les deux sont identiques.

Quelle est la différence pratique, le cas échéant? Quand utiliseriez-vous l'un ou l'autre?

tsiflana
la source

Réponses:

8

Regardez ce document qui dit: -

Interruption en cas de changement
Cette fonction est similaire à la fonction d'interruption externe , sauf qu'une interruption de changement de port sera déclenchée par tout changement (et pas seulement un type de transition) sur l'une des broches pour lesquelles elle est activée. Cela le rend plus flexible (étant disponible sur plus de broches), mais aussi plus difficile à gérer correctement.

péril cerveau
la source
5

Cela est probablement fait pour simplifier l'architecture d'interruption de la puce en ayant moins d'entrées dans la table de vecteur d'interruption. L'interruption en cas de changement peut être définie pour se déclencher lorsqu'un registre de port change et peut être utile pour quelque chose comme une matrice de clavier où vous ne voulez pas écrire une routine de service d'interruption (ISR) pour chaque broche unique. Vous pouvez en écrire un seul qui peut vérifier la valeur de l'ensemble du port, ce qui pourrait être ce qui vous intéresse vraiment en fonction de l'application.

Jon L
la source
5

Les trois plus grandes différences entre le changement d'interruption et les broches d'interruption externes:

  1. Les broches d'interruption externes permettent au logiciel de spécifier si l'interruption doit être déclenchée par un front montant ou par un front descendant; si, par exemple, une broche est basse et que l'on s'intéresse uniquement aux fronts descendants, une interruption ne sera pas déclenchée tant que la broche ne montera pas et ne tombera pas ensuite. En utilisant l'interruption sur changement, il faudrait se réveiller sur les deux événements.
  2. Les broches d'interruption externes ont des bits d'état de verrouillage individuels. Même si une impulsion d'entrée va et vient avant que le logiciel n'ait la possibilité d'y répondre, le logiciel peut toujours découvrir que cela s'est produit et réagir de manière appropriée.
  3. La lecture d'un port d'E / S dont une interruption de changement de broche est activée au moment précis où les changements d'entrée peuvent entraîner le déclenchement de l'interruption de changement de broche. En revanche, la lecture du port d'E / S connecté à une broche d'interruption externe n'a aucun effet sur l'interruption.

Les interruptions externes du PIC sont plus polyvalentes et fiables que les interruptions à changement de broches à usage général. Je suggère d'utiliser le premier lorsque cela est possible.

supercat
la source
3

Fondamentalement, l'interruption externe sera déclenchée sur un front spécifique (montant ou descendant, défini par l'utilisateur), tandis que l'interruption sur changement sera déclenchée sur n'importe quel front (montant et descendant).

Bruno Ferreira
la source
Au moins pour le PIC12F1822 l'OP mentionné, l'IOC peut également être configuré (défini par l'utilisateur) pour un déclenchement sur front montant, front descendant ou les deux (section 13). Donc, pour moi, la seule différence semble être que cette interruption externe ne peut être configurée pour se déclencher que sur l'une des deux détections de front.
PetPaulsen
2

L'interruption au changement concerne généralement un demi-octet d'E / S, les interruptions externes étant généralement des bits individuels. Comme vous l'avez déjà dit, une chose que vous devez faire dans l'IOC ISR est de déterminer quel bit (ou bits) a changé.

Le CIO est également un peu plus difficile à utiliser, même au-delà. Il est impératif de lire le port peu de temps avant d'activer l'interruption, et encore plus important de LIRE LE PORT à l'intérieur de l'ISR! Si vous avez un signal qui change lentement et que vous pensez que vous pouvez définir un indicateur à l'intérieur de l'ISR et faire votre lecture plus tard, en dehors de l'ISR, détrompez-vous! La lecture du port (ou tout bit sur le port, si je me souviens bien), réinitialise le verrou sur le comparateur qui déclenche l'interruption. Si vous ne le désactivez pas à l'intérieur de l'ISR, il se redéclenche immédiatement lorsque vous quittez l'ISR. Si vous vous souvenez de faire cela, tout va bien, mais si vous oubliez et pensez que vous pouvez lire le port lorsque vous vous y déplacez, vous serez un peu frustré jusqu'à ce que vous vous souveniez de faire la lecture dans l'ISR.

Scott Seidman
la source