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

 
 
 
Reply to this topicStart new topic
> Внешнее прерывание Atmega64, по низкому уровню
AndreyVN
сообщение Jan 9 2018, 12:55
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 742
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Всем привет!

Не могу запустить внешнее прерывание Atmega64 int0 по низкому уровню.
По фронту- работает, по спаду - работает т.е. аппаратная часть и настройки регистров в порядке.

Что может быть не так при работе от низкого уровня? Еще ниже надо?! :-)
Go to the top of the page
 
+Quote Post
Александр1
сообщение Jan 9 2018, 13:25
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 427
Регистрация: 13-05-15
Из: Запорожье
Пользователь №: 86 663



Какой длительности уровень?
Прерывание по низкому уровню генерируется тогда, когда уровень удерживается достаточно долго, чтобы МК перешел к обработке прерывания. МК может быть занят обработкой другого прерывания. И когда МК освободится, то уровень может уже измениться и прерывание будет пропущено.
Go to the top of the page
 
+Quote Post
AndreyVN
сообщение Jan 9 2018, 13:40
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 742
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Цитата(Александр1 @ Jan 9 2018, 16:25) *
Какой длительности уровень?
Прерывание по низкому уровню генерируется тогда, когда уровень удерживается достаточно долго, чтобы МК перешел к обработке прерывания. МК может быть занят обработкой другого прерывания. И когда МК освободится, то уровень может уже измениться и прерывание будет пропущено.


Да, это я видел в даташите, у меня низкий уровень висит непрерывно.

В моем случае АЦП, которое запрашивает прерывание и МК - разные устройства. АЦП запросил прерывание и повис в нуле, МК мог быть выключен, МК включили,
он увидел внешнее IRQ получасовой давности и приступил к обработке. Если пользоваться перепадами - возникает зависон в момент включения.

В даташите есть что-то невнятное о наличии тактирования для прерывания от постоянного уровня. Какое тактирование? Тактовый генератор самого МК?
У меня он работает непрерывно, МК не спит.
Go to the top of the page
 
+Quote Post
Александр1
сообщение Jan 9 2018, 13:55
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 427
Регистрация: 13-05-15
Из: Запорожье
Пользователь №: 86 663



Цитата(AndreyVN @ Jan 9 2018, 16:40) *
В даташите есть что-то невнятное о наличии тактирования для прерывания от постоянного уровня.

Где написано? Приведите цитату.
Если прерывание не запускается при включении питания, то, может быть, вновь сбросить биты ISC300 ISC301 в регистре EICRA (хотя при включении они и так должны быть сброшены), сбросить флаг и разрешить прерывание?
Go to the top of the page
 
+Quote Post
AndreyVN
сообщение Jan 10 2018, 06:10
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 742
Регистрация: 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").

Не отработана пока версия о том, что летящие подряд прерывания блокируют фоновую программу.
Go to the top of the page
 
+Quote Post
Александр1
сообщение Jan 10 2018, 06:42
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 427
Регистрация: 13-05-15
Из: Запорожье
Пользователь №: 86 663



Цитата(AndreyVN @ Jan 10 2018, 09:10) *
Не отработана пока версия о том, что летящие подряд прерывания блокируют фоновую программу.

Если есть сомнения, то нужно набросать простую программку, обрабатывающую только INT0 (и больше НИКАКОГО кода), и, при обработке прерывания, "мигающая светодиодом". Убедиться в том, что INT0 запускается нормально, что МК исправен, какие регистры и как нужно установить и т.д., а потом можно разобраться с "летящими подряд прерываниями".
Go to the top of the page
 
+Quote Post
PeterD
сообщение Jan 10 2018, 08:23
Сообщение #7


Участник
*

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



Цитата(AndreyVN @ Jan 10 2018, 09:10) *
Не отработана пока версия о том, что летящие подряд прерывания блокируют фоновую программу.

Возможно вы просто висите в прерывании по низкому уровню т.к. событие непрерывное....

Сообщение отредактировал PeterD - Jan 10 2018, 08:24
Go to the top of the page
 
+Quote Post
AndreyVN
сообщение Jan 10 2018, 18:21
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 742
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458



Цитата(PeterD @ Jan 10 2018, 11:23) *
Возможно вы просто висите в прерывании по низкому уровню т.к. событие непрерывное....


Да, проверил, прерывание по низкому уровню благополучно генерится, "косяк" в обработке.

Спасибо за обсуждение!
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Jan 11 2018, 19:10
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 332
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



Делать прерывание все-таки по фронту. Если вы предполагаете ситуацию, когда МК включили при низком уровне на внешнем прерывании, тогда да, обработки не будет, так как нужна смена сигнала. Этот момент тоже легко решается. Проверкой пина внешнего прерывания. Если низкий уровень, считываем данные, после этого АЦП перезапустится и программа будет штатно работать от внешнего прерывания.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd January 2018 - 11:59
Рейтинг@Mail.ru


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