MSP430 проблема с прерываниями от портов

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 3
Зарегистрирован: Пт июл 02, 2010 12:49:54

Сообщение vanko »

Уважаемые Камрады на вас вся надежда....

Проблема в следующем: при вызове прерывания портом P1.4 (подача высокого напр. переключателем), светодиод висящий на порте P1.0 успешно загорается. Возврат кнопки в исходное сотояние и повторный щелчёк этой же кнопокой должен отключить светодиод, но этого не происходит. При этом например прерывание (с аналогичной коммандой) c порта P1.5 вырубает светодиод без проблем (но после этого и P1.5 перестает посылать прерывания). Основная проблема в том что контроллер просто перестает реагировать на последующие прерывания с портов, если они хоть раз вызывали эти самые прерывания (как будто прерывания одноразовые - 1 раз сработало, и дальше полный облом). Моделировал ситуацию в Proteus 7.6 SP4 и на реальном устройстве (MSP430F2013) - результат идентичен.

код программы:

Код: Выделить всё

#include  <msp430x20x1.h>

void main(void)
 {
  WDTCTL = WDTPW + WDTHOLD;                // Stop watchdog timer
  P1DIR |= 0x01;                           // Set P1.0 to output direction
  P1IE |= 0x30;                            // P1.4/P1.5 interrupt enabled
  P1IES &= ~0x30;                          // P1.4/P1.5 Low/Hi edge
  P1IFG &= ~0x30;                          // P1.4/P1.5 IFG cleared
 
  _BIS_SR(LPM0_bits + GIE);
 }

// Port 1 interrupt service routine
#pragma vector=PORT1_VECTOR
__interrupt void P1_ISR(void)
 {
  if(P1IFG == 0x10) // If P1.4 Low -> Hi
   { 
    P1OUT ^= 0x01;                             // Зажечь если не включен/отключить если уже зажжен
    P1IFG &= ~0x10;;                           // P1.4 IFG cleared
   }

  if(P1IFG == 0x20) //If P1.5 Low -> Hi
   { 
    P1OUT ^= 0x01;                            // Зажечь если не включен/отключить если уже зажжен  
    P1IFG &= ~0x20;                           // P1.5 IFG cleared   
   }  
 }
сильно не ругайте... я только учусь
Реклама
Родился
Сообщения: 3
Зарегистрирован: Пт июл 02, 2010 12:49:54

Сообщение vanko »

Proteus
Вложения
proteus.jpg
схема из Proteus'а
(60.5 КБ) 453 скачивания
Реклама
Родился
Сообщения: 3
Зарегистрирован: Пт июл 02, 2010 12:49:54

Сообщение vanko »

гм... хорошая мысля приходит всегда последней! Для тех, кто сталкнётся с той же проблемой: нужно порт который создает прерывание подътягивать через резистор к земле! Осталось только понять физику данного явления...

такой вариант работает без проблем:
Вложения
proteus 2.jpg
(73.29 КБ) 454 скачивания
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»