Яка різниця між Перериванням на зміну та Зовнішнім перериванням на ПОС


11

Чим відрізняється функція між IOC та EXT Interrupt на ПОС? В даний час я використовую PIC12F1822, і крім додаткового шару перевірки ви маєте відношення до IOC (тобто, який штифт спричинив переривання) два однакові.

Яка практична різниця, якщо така є? Коли б ви використовували те чи інше?

Відповіді:


8

Подивіться на цей документ, де зазначено:

Перерва на зміну
Ця функція схожа на зовнішню функцію переривання , за винятком того, що переривання зміни порту буде ініційовано будь-якою зміною (не лише одним типом переходу) на будь-якому із штифтів, для якого вона включена. Це робить його більш гнучким (доступний на більшій кількості штифтів), але і складніше з ним правильно працювати.


5

Це, ймовірно, робиться для спрощення архітектури переривання мікросхеми шляхом меншої кількості записів у векторній таблиці переривань. Переривання при зміні може бути встановлено, коли реєстрація портів змінюється, і може бути корисною для чогось на зразок матриці клавіатури, де ви не хочете писати звичайний сервіс переривання (ISR) на кожен окремий контакт. Ви можете написати лише той, який може перевірити значення всього порту, який може бути тим, що вас справді цікавить, залежно від програми.


5

Три найбільші відмінності між перемиканням на зміну та зовнішніми перервами:

  1. Зовнішні штифти переривання дозволяють програмному продукту визначати, чи слід переривання викликати піднімаючий край або падаючий край; якщо, наприклад, штифт низький і його цікавлять лише падаючі краї, переривання не буде спровоковано, поки штифт не підніметься і не впаде. Використовуючи переривання на зміну, потрібно було б прокинутися на обох подіях.
  2. Зовнішні штифти переривання мають індивідуальні біти стану фіксації. Навіть якщо вхідний імпульс надходить і проходить, перш ніж програмне забезпечення матиме можливість відповісти на нього, програмне забезпечення все одно може з’ясувати, що це сталося, і реагувати належним чином.
  3. Зчитування порту вводу / виводу, у якого ввімкнено переривання зміни штифта саме в той момент, коли зміни введення можуть призвести до того, що переривання зміни PIN-коду не запуститься. На відміну від цього, зчитування підключеного порту вводу / виводу зовнішній штир переривання не впливає на переривання.

Зовнішні перериви PIC є більш універсальними та надійними, ніж загальноприйняті переривання штифтової зміни. Я б запропонував використовувати колишній, коли це практично.


3

В основному зовнішній перерив буде ініційований на певному (зростаючому чи падінні, визначеному користувачем) межі, тоді як переривання на зміну буде спровоковано на будь-якому краю (як піднімається, так і падає).


Принаймні, для згаданого PIC12F1822 OP, МОК також може бути налаштований (визначений користувачем) для спрацьовування по піднімається краю, падаючому краю або обом (розділ 13). Отже, мені здається, єдина відмінність у тому, що зовнішнє переривання може бути налаштоване тільки для запуску на будь-якому з двох крайових виявлень.
PetPaulsen

2

Перерва при зміні, як правило, для половини байтів вводу / виводу, де зовнішні переривання, як правило, для окремих біт. Як ви вже говорили, одне, що вам потрібно зробити в ISR МОК, - це з’ясувати, який біт (або біти) змінився.

МОК також трохи жорсткіший у використанні, навіть поза цим. Обов’язково слід прочитати порт незабаром, перш ніж дозволити переривання, а ще важливіше - ПРОЧИТАТИ ПОРТ у секторі ISR! Якщо у вас є сигнал, що змінюється повільно, і ви думаєте, що ви можете встановити прапор всередині ISR і зробити читання пізніше, поза межами ISR, подумайте ще раз! Читання порту (або будь-якого біта на порту, якщо я правильно пам'ятаю), скидає засувку на компараторі, що запускає переривання. Якщо ви не очистите його всередині ISR, він негайно повториться, коли ви вийдете з ISR. Якщо ви пам’ятаєте, що це робите, це все добре, але якщо ви забудете і думаєте, що можете прочитати порт, коли дістанетесь до нього, ви будете трохи засмучені, поки не згадаєте зробити прочитане в ISR.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.