Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PCINT
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Дмитрий_Мигачев
Подскажите пожалуйста как с ними работать
defunct
Цитата(Дмитрий_Мигачев @ May 28 2006, 01:17) *
Подскажите пожалуйста как с ними работать

Как и с любым другим прерыванием, подробности в ДШ..

Хотите более полный ответ, тогда конкретизируйте ваш вопрос.
Какой МК, на чем пишете, для чего хотите применить PCINT..
Дмитрий_Мигачев
Про даташит это самособой, хотелось просто чтобы объяснили в кратце
ATmega48, VMLab на СИ, интересует собсно как с ними работать в прямом смысле.
Я понимаю так: выбираем на каком порту разрешены прерывания PCINT(а можно ли на всех сразу разрешить?), потом тама необходимо какую то маску накладывать, и по изменению уровня на разрешенных портах он уходит в соответствующее прерывание?. А вообще если есть пример кода, то можно просто на код взглянуть))
defunct
В ДШ очень четко все сказано:

The External Interrupts are triggered by the INT0 and INT1 pins or any of the PCINT23..0 pins.
Observe that, if enabled, the interrupts will trigger even if the INT0 and INT1 or PCINT23..0 pins
are configured as outputs. This feature provides a way of generating a software interrupt. The
pin change interrupt PCI2 will trigger if any enabled PCINT23..16 pin toggles. The pin change
interrupt PCI1 will trigger if any enabled PCINT14..8 pin toggles. The pin change interrupt PCI0
will trigger if any enabled PCINT7..0 pin toggles. The PCMSK2, PCMSK1 and PCMSK0 Registers
control which pins contribute to the pin change interrupts. Pin change interrupts on
PCINT23..0 are detected asynchronously. This implies that these interrupts can be used for
waking the part also from sleep modes other than Idle mode.


Внешние прерывания срабатывают по INT0 и INT1 пинам или по любому пину из PCINT23..0.
Заметьте, что прерывания сработают (если разрешены) даже если INT0, INT1 или PCINT23..0 пины сконфигурированы на вывод. Эта фича позволяет генерировать программные прерывания.
Прерывание PCI2 сработает если любой из разрешенных PCINT23..16 пинов изменит состояние.
PCI1 - если любой из PCINT15..8.
PCI0 - если любой из PCINT7..0.
PCMSK2, PCMSK1 и PCMSK0 регистры отвечают за настройку - какие пины из (PCINT23..16, PCINT15..8, PCINT7..0) будут возбуждать Pin Change прерывание. Pin Change прерывания на PCINT23..0 детектируются асинхронно. Последнее означает, что эти прерывания могут быть использованы для пробуждения МК из режимов сна, отличных от Idle.

Соответсвенно все что вам надо сделать, это определить обработчик прерывания PCINT для соответсвующей группы пинов и определить маску PCMSK - разрещающую прерывание PCINT от соответсвующих пинов, разрешить соответсвующее прерывание PCIX в регистре PCICR и установить флаг разрешения глобальных прерываний.

пример

Код
#pragma vector=PCINT0_vect
__interrupt void PCINT0_Handler(void){
// обработчик PCI0
}

...

int main(void)
{
//  настройка маски для группы PCI0 (PCINT7..0)
//  изменение уровня на PCINT4 и PCINT5 будут возбуждать прерывание
    PCMSK0 = (1 << 5) | (1 << 4); // пины PCINT4 и PCINT5 разрешить возбуждение PCInt
    PCICR = (1 << PCIE0);  // разрешить PCI0
    sei();             // разрешить прерывания
    for(;;);
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.