|
|
  |
Внешнее прерывание Atmega64, по низкому уровню |
|
|
|
Jan 9 2018, 13:40
|
Знающий
   
Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458

|
Цитата(Александр1 @ Jan 9 2018, 16:25)  Какой длительности уровень? Прерывание по низкому уровню генерируется тогда, когда уровень удерживается достаточно долго, чтобы МК перешел к обработке прерывания. МК может быть занят обработкой другого прерывания. И когда МК освободится, то уровень может уже измениться и прерывание будет пропущено. Да, это я видел в даташите, у меня низкий уровень висит непрерывно. В моем случае АЦП, которое запрашивает прерывание и МК - разные устройства. АЦП запросил прерывание и повис в нуле, МК мог быть выключен, МК включили, он увидел внешнее IRQ получасовой давности и приступил к обработке. Если пользоваться перепадами - возникает зависон в момент включения. В даташите есть что-то невнятное о наличии тактирования для прерывания от постоянного уровня. Какое тактирование? Тактовый генератор самого МК? У меня он работает непрерывно, МК не спит.
|
|
|
|
|
Jan 9 2018, 13:55
|
Местный
  
Группа: Участник
Сообщений: 465
Регистрация: 13-05-15
Из: Запорожье
Пользователь №: 86 663

|
Цитата(AndreyVN @ Jan 9 2018, 16:40)  В даташите есть что-то невнятное о наличии тактирования для прерывания от постоянного уровня. Где написано? Приведите цитату. Если прерывание не запускается при включении питания, то, может быть, вновь сбросить биты ISC300 ISC301 в регистре EICRA (хотя при включении они и так должны быть сброшены), сбросить флаг и разрешить прерывание?
|
|
|
|
|
Jan 10 2018, 06:10
|
Знающий
   
Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458

|
Цитата(Александр1 @ Jan 9 2018, 16:55)  Где написано? Приведите цитату. Если прерывание не запускается при включении питания, то, может быть, вновь сбросить биты ISC300 ISC301 в регистре EICRA (хотя при включении они и так должны быть сброшены), сбросить флаг и разрешить прерывание? Пардон, это касается как раз перепадов. Note that recognition of falling or rising edge interrupts on INT7:4 requires the presence of an I/O clock, described in “Clock Systems and their Distribution” on page 37. Пересадил Int0 на Int1 - такая же картина, по спаду - работает, по низкому уровню - нет. Инициализация прерывания производится не сразу, там много кода, инициализируются LCD экран, таймеры, карта памяти, только потом очередь доходит до внешних IRQ и долгожданного asm("SEI"). Не отработана пока версия о том, что летящие подряд прерывания блокируют фоновую программу.
|
|
|
|
|
Jan 10 2018, 06:42
|
Местный
  
Группа: Участник
Сообщений: 465
Регистрация: 13-05-15
Из: Запорожье
Пользователь №: 86 663

|
Цитата(AndreyVN @ Jan 10 2018, 09:10)  Не отработана пока версия о том, что летящие подряд прерывания блокируют фоновую программу. Если есть сомнения, то нужно набросать простую программку, обрабатывающую только INT0 (и больше НИКАКОГО кода), и, при обработке прерывания, "мигающая светодиодом". Убедиться в том, что INT0 запускается нормально, что МК исправен, какие регистры и как нужно установить и т.д., а потом можно разобраться с "летящими подряд прерываниями".
|
|
|
|
|
Jan 10 2018, 08:23
|
Участник

Группа: Участник
Сообщений: 42
Регистрация: 26-10-07
Пользователь №: 31 743

|
Цитата(AndreyVN @ Jan 10 2018, 09:10)  Не отработана пока версия о том, что летящие подряд прерывания блокируют фоновую программу. Возможно вы просто висите в прерывании по низкому уровню т.к. событие непрерывное....
Сообщение отредактировал PeterD - Jan 10 2018, 08:24
|
|
|
|
|
Jan 10 2018, 18:21
|
Знающий
   
Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458

|
Цитата(PeterD @ Jan 10 2018, 11:23)  Возможно вы просто висите в прерывании по низкому уровню т.к. событие непрерывное.... Да, проверил, прерывание по низкому уровню благополучно генерится, "косяк" в обработке. Спасибо за обсуждение!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|