реклама на сайте
подробности

 
 
> AT90USB1287 не отрабатывает внешние прерывания, В чем дело?
alux
сообщение Aug 4 2008, 03:41
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Отлаженый проект переношу с MEGA324P на AT90USB1287. После соответствующей коррекции программы перестало отрабатывать нажатия на матричной клавиатуре 4х4. Изменилась схема подключения клавиатуры: раньше COL и RAW подключались к двум разным портам. Теперь занимают один PORTF. И, так как у AT90USB1287 только PORTB имеет PCINT (зачем было так ограничивать функциональность МК ?!!), то выводы RAW через диоды анодами подключены к выводу внешнего прерывания INT6 (PORTE6). Прерывания настраиваю как обычно:
Код
int main()
{
  // Initialise
  ACSR = (1<<ACD);  // Analog Comparator Disable
  .................
  PORTE = (1<<KEY_INT);  // INT6 -> input, pull-up - ON

  key_Init();
__enable_interrupt();    // set the Global Interrupt Enable Bit
.....................................
///////////////////////////////////////////

#define ENABLE_INT6   {EIFR |= (1<<INTF6); EIMSK |= (1<<INT6);}// Clear interrupt status flag, Enable external interrupt INT6
#define DISABLE_INT6  EIMSK &= ~(1<<INT6)    // Disable external interrupt INT6

void key_Init(void)
{
  /* Init ports */  
  KEYMATRIX_DDR = 0x0f;            // Set row lines to input, Set column lines to output  
  KEYMATRIX_PORT = 0xf0;    // Pull row lines high, Drive all column lines low  
    
  /* Enable external interrupt */
  ENABLE_INT6;            // Enable pin change interrupt INT6
}

Выяснилось, что не вызывается обработчик прерывания INT6. Проверяю по звуковому сигналу BEEP.
В симуляторе в AVRSTUDIO тоже прогнал - не вызываются прерывания: ни по низкому уровню, ни по фронтам (заднему и переднему). АЦП (PORTF) не использую. В чем дело?

PS. Схему и код выкладываю, чтобы не возникало лишних вопросов.
Прикрепленные файлы
Прикрепленный файл  shema1.pdf ( 103.82 килобайт ) Кол-во скачиваний: 304
Прикрепленный файл  shema2.pdf ( 77.4 килобайт ) Кол-во скачиваний: 225
Прикрепленный файл  keymatrix.rar ( 1.31 килобайт ) Кол-во скачиваний: 44
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SysRq
сообщение Aug 6 2008, 14:38
Сообщение #2


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



А можно понтересоваться (в целях повышения образованности smile.gif ), у вас ОС какая-то используется?
Код
#pragma vector=INT6_vect
OS_INTERRUPT void INT6_ISR()
{
  OS::TISRW_SS ISRW;
  //...
}


Собрал на WinAVR простенький код, прерывание работает в отладчике AVRStudio правильно.

Код
#include <avr\io.h>
#include <avr\interrupt.h>

#define ENABLE_INT6   {EIFR |= (1<<INTF6); EIMSK |= (1<<INT6);}// Clear interrupt status flag, Enable external interrupt INT6
#define DISABLE_INT6  EIMSK &= ~(1<<INT6)    // Disable external interrupt INT6

volatile unsigned char a = 0, b = 0;

SIGNAL(INT6_vect)
{
    a++;    
    DISABLE_INT6;            // Prevent further external interrupts
}

int main(void)
{
    ACSR = (1 << ACD);  // Analog Comparator Disable
    PORTE = (1 << 6);  // INT6 -> input, pull-up - ON    
    
    sei();
    
    while(1)
    {
        b++;        
        ENABLE_INT6;
    }
    
    return 0;
}


Makefile стандартный, создан через MFile из комплекта WinAVR, и задан MCU = at90usb1287.
Go to the top of the page
 
+Quote Post
alux
сообщение Aug 6 2008, 15:43
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(SysRq @ Aug 6 2008, 17:38) *
у вас ОС какая-то используется?

scmRTOS
Рекомендую!
Цитата(SysRq @ Aug 6 2008, 17:38) *
Собрал на WinAVR простенький код, прерывание работает в отладчике AVRStudio правильно.
А у меня тот же код, сгенеренный в IARе (ubrof8) для AT90USB1287 не работает в AVRStudio. Получается, что IAR v5.11B виноват? 05.gif
Я уже начал писать рекламацию Atmel.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Aug 6 2008, 23:20
Сообщение #4


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(alux @ Aug 6 2008, 19:43) *
Получается, что IAR v5.11B виноват?

Хм. Поставил под VirtualBox'ом на XPFundamentals себе IAR (30 дней триал) посмотреть что за зверь и за что его все любят smile.gif , собрал такой код:
Код
#include <ioavr.h>
#include <inavr.h>

#define INT6  6 // почему-то пришлось задать вручную; видимо, с IAR с разбегу не разобрался
#define INTF6 6 // почему-то пришлось задать вручную; видимо, с IAR с разбегу не разобрался

#define ENABLE_INT6   {EIFR |= (1<<INTF6); EIMSK |= (1<<INT6);}// Clear interrupt status flag, Enable external interrupt INT6
#define DISABLE_INT6  EIMSK &= ~(1<<INT6)    // Disable external interrupt INT6

volatile unsigned char a = 0, b = 0;

#pragma vector=INT6_vect
__interrupt void INT6_ISR()
{
    a++;    
    DISABLE_INT6;            // Prevent further external interrupts
}

int main( void )
{
    PORTE = (1 << 6);  // INT6 -> input, pull-up - ON    
    
    __enable_interrupt();    // set the Global Interrupt Enable Bit
    
    while(1)
    {
        b++;        
        ENABLE_INT6;
    }
    
    return 0;
}


При отладке в AVRStudio прерывание работает правильно! В опциях проекта ничего не менял, кроме установки --cpu=usb1287.

IAR:
Цитата
IAR Assembler for AVR 5.11B/W32 (5.11.2.5)
Translates Atmel assembler to IAR assembler 1.25 (1.2.4.109)
IAR C/C++ Compiler for AVR 5.11B/W32 [Evaluation] (5.11.2.3)
IAR XLINK 4.61C (4.61.3.0)
IAR Build Utility 5.1.1.453.7838 (5.1.1.453)

AVRStudio: 4.14 build 589
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alux   AT90USB1287 не отрабатывает внешние прерывания   Aug 4 2008, 03:41
- - alux   Глас вопиющего в пустыне... У меня проект останови...   Aug 5 2008, 03:17
- - SysRq   Фьюз JTAGEN проверьте. Если включен JTAG (можно и ...   Aug 5 2008, 09:48
|- - alux   Цитата(SysRq @ Aug 5 2008, 12:48) Фьюз JT...   Aug 5 2008, 10:47
- - GDI   Проверьте в симуляторе какие значения в регистры п...   Aug 5 2008, 10:59
- - alux   По-умолчанию, при разрешении соответствующего внеш...   Aug 5 2008, 12:34
- - GDI   В вшем коде не видно настройки DDRE, надеюсь на вх...   Aug 5 2008, 12:44
|- - alux   Цитата(GDI @ Aug 5 2008, 15:44) В вшем ко...   Aug 5 2008, 13:40
- - GDI   Цитатау этого камня не правильно пронумерованы век...   Aug 5 2008, 13:47
- - sKWO   alux, прочитайте ответ Александра Редчука на телес...   Aug 5 2008, 14:47
|- - alux   Цитата(sKWO @ Aug 5 2008, 17:47) прочитай...   Aug 5 2008, 15:42
|- - sKWO   Цитата(alux @ Aug 5 2008, 18:42) Этот пос...   Aug 6 2008, 15:02
- - Т.Достоевский   По уровню? То-есть если на порту INTx = 0, то заст...   Aug 7 2008, 00:44
|- - alux   Цитата(Т.Достоевский @ Aug 7 2008, 03:44)...   Aug 7 2008, 05:00
|- - SysRq   Цитата(alux @ Aug 7 2008, 09:00) Сделал т...   Aug 7 2008, 05:53
|- - alux   Проверить проект смогу вечером. Пока могу предполо...   Aug 7 2008, 09:01
|- - sKWO   Цитата(alux @ Aug 7 2008, 12:01) Проверит...   Aug 7 2008, 10:12
|- - alux   Цитата(sKWO @ Aug 7 2008, 13:12) не молов...   Aug 7 2008, 10:16
- - SysRq   Цитата(alux @ Aug 7 2008, 14:16) ...раско...   Aug 7 2008, 14:08
|- - alux   Цитата(SysRq @ Aug 7 2008, 17:08) На этом...   Aug 7 2008, 15:25
- - SysRq   А в железе?   Aug 7 2008, 18:17
|- - alux   Цитата(SysRq @ Aug 7 2008, 21:17) А в жел...   Aug 7 2008, 19:25
- - alux   Обработчик внешнего прерывания не вызывается из-за...   Aug 8 2008, 18:58
- - alux   Снова проблема с внешним прерыванием. На этот раз ...   Sep 4 2008, 15:38
|- - ReAl   Цитата(alux @ Sep 4 2008, 18:38) Кодint m...   Sep 5 2008, 07:33
|- - alux   Цитата(ReAl @ Sep 5 2008, 10:33) не реком...   Sep 5 2008, 09:12
|- - ReAl   Цитата(alux @ Sep 5 2008, 12:12) Потребно...   Sep 6 2008, 12:53
- - SasaVitebsk   Надеюсь вы учли, что просыпаться только Only ...   Sep 4 2008, 18:55
|- - alux   Цитата(SasaVitebsk @ Sep 4 2008, 21:55) Н...   Sep 5 2008, 06:12
- - alux   Второй раз наступаю на одни и те же грабли: Кодvo...   Sep 6 2008, 08:33


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 16:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.0144 секунд с 7
ELECTRONIX ©2004-2016