|
AT90USB1287 не отрабатывает внешние прерывания, В чем дело? |
|
|
|
Aug 4 2008, 03:41
|
Знающий
   
Группа: Свой
Сообщений: 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. Схему и код выкладываю, чтобы не возникало лишних вопросов.
|
|
|
|
|
 |
Ответов
|
Aug 7 2008, 05:00
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
Цитата(Т.Достоевский @ Aug 7 2008, 03:44)  если на порту INTx = 0, то застрянет в прерывании Я уже говорил, что пробовал разные варианты (по фронту, спаду, по уровню). Не в этом дело. Читайте внимательно посты. Цитата(SysRq @ Aug 7 2008, 02:20)  Хм. Поставил под VirtualBox'ом на XPFundamentals себе IAR (30 дней триал) посмотреть что за зверь и за что его все любят  , собрал такой код: ............. При отладке в AVRStudio прерывание работает правильно! В опциях проекта ничего не менял, кроме установки --cpu=usb1287. Сделал то же самое (этот же пример кода, IAR v.5.11B, ubrof8) - не работает!!! Кто то из нас двоих не прав!
|
|
|
|
|
Aug 7 2008, 10:12
|

Местный
  
Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530

|
Цитата(alux @ Aug 7 2008, 12:01)  Проверить проект смогу вечером. Пока могу предположить две версии: 1) различия триальной и "вылеченной" версии IAR; (маловероятно) не моловероятно, а исключено. вылеч версия 4.21А нормально компилит и всё работает на ура. Проджект прикрепляю. Цитата(SysRq @ Aug 7 2008, 02:20)  [code] #define INT6 6 // почему-то пришлось задать вручную; видимо, с IAR с разбегу не разобрался #define INTF6 6 // почему-то пришлось задать вручную; видимо, с IAR с разбегу не разобрался SysRq, это всё решается настройками прожекта Project\Options, на закладке General Options находим System, и здесь ставим галочку напротив Enable bit definitions in I\O-include file.
Прикрепленные файлы
1287.rar ( 13.29 килобайт )
Кол-во скачиваний: 28
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
|
Aug 7 2008, 10:16
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
Цитата(sKWO @ Aug 7 2008, 13:12)  не моловероятно, а исключено. вылеч версия 4.21А нормально компилит и всё работает на ура. Остается версия номер 2. PS. Если не трудно, проверьте эту версию у себя. Т.е. в файле iousb1287.h раскомментировать определения для PE0...PE7 и изменить PE1 на UPE1.
|
|
|
|
Сообщений в этой теме
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 SysRq А можно понтересоваться (в целях повышения образов... Aug 6 2008, 14:38 alux Цитата(SysRq @ Aug 6 2008, 17:38) у вас О... Aug 6 2008, 15:43  SysRq Цитата(alux @ Aug 6 2008, 19:43) Получает... Aug 6 2008, 23:20 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|