Jump to content

    
Sign in to follow this  
shumerok

Контроллер прерывания Microblze

Recommended Posts

Добрый день. Работаю с прерываниями в microblaze на отладочнике Spartan3e. Прерывания формирую от дип-переключателя на плате. Подтверждение прерывания вывожу через uart на ноут. Проблема в следующем: прерывания происходят и по фронту и по спаду. Я так понимаю, что контроллеру без разницы. Он реагирует только на изменение состояния?

Share this post


Link to post
Share on other sites
Добрый день. Работаю с прерываниями в microblaze на отладочнике Spartan3e. Прерывания формирую от дип-переключателя на плате. Подтверждение прерывания вывожу через uart на ноут. Проблема в следующем: прерывания происходят и по фронту и по спаду. Я так понимаю, что контроллеру без разницы. Он реагирует только на изменение состояния?

"дип-переключателя" имеют славную традицию "звенеть" - как следствие куча сигналов прерываний.

 

Share this post


Link to post
Share on other sites
"дип-переключателя" имеют славную традицию "звенеть" - как следствие куча сигналов прерываний.

Я тестирую в дебаге пошагово. В регистрах контроллера все устанавливается и сбрасывается правильно. Дребезг не прокатывает. Программа крутится в бесконечном цикле. Переключаюсь, допустим, с 0 в 1 - срабатывает прерывание. Далее пошагово иду иду по программе до возврата к бесконечному циклу. Опять программа крутится, пока не переключусь с 1 в 0. И так по кругу. Он точно срабатывает по обоим фронтам. Вот я и не знаю дело в контроллере или это славный софт от Xilinx.

Share this post


Link to post
Share on other sites
Добрый день. Работаю с прерываниями в microblaze на отладочнике Spartan3e. Прерывания формирую от дип-переключателя на плате. Подтверждение прерывания вывожу через uart на ноут. Проблема в следующем: прерывания происходят и по фронту и по спаду. Я так понимаю, что контроллеру без разницы. Он реагирует только на изменение состояния?

Либо сделайте цифровой фильтр после переключателя, либо ловите прерывания от приемника uart. Клацнете на хосте - получите точно одно прерывание... Просто потом все равно приемник на прерывание повесите, так почему бы не сейчас? Ну и сделайте счетчик этих запросов и хоть 3 разряда выведите на светодиоды. для начала поклацаете на хосте, увидите, что счетчик шевелится.

 

Share this post


Link to post
Share on other sites
Либо сделайте цифровой фильтр после переключателя, либо ловите прерывания от приемника uart. Клацнете на хосте - получите точно одно прерывание... Просто потом все равно приемник на прерывание повесите, так почему бы не сейчас? Ну и сделайте счетчик этих запросов и хоть 3 разряда выведите на светодиоды. для начала поклацаете на хосте, увидите, что счетчик шевелится.

Видно так и придется делать. Просто я думал, что контроллер можно настроить на срабатывание по фронту либо по спаду.

Share this post


Link to post
Share on other sites
Видно так и придется делать. Просто я думал, что контроллер можно настроить на срабатывание по фронту либо по спаду.

А причем здесь это?

У переключателя дребезг - милисекунды.

У контроллера прерываний срабатывание за несколько тактов в десятки наносекунд... За этот период в милисекунды он найдет себе на кусочке импульса и "фронт" и "уровень" и вообще что угодно...

Share this post


Link to post
Share on other sites
А причем здесь это?

У переключателя дребезг - милисекунды.

У контроллера прерываний срабатывание за несколько тактов в десятки наносекунд... За этот период в милисекунды он найдет себе на кусочке импульса и "фронт" и "уровень" и вообще что угодно...

Притом, что я работаю в дебаге и после срабатывания прерывания я выставляю его запрет. Причем тут дребезг? К моменту разрешения нового прерывания могут пройти десятки секунд.

Share this post


Link to post
Share on other sites
Притом, что я работаю в дебаге и после срабатывания прерывания я выставляю его запрет. Причем тут дребезг? К моменту разрешения нового прерывания могут пройти десятки секунд.

Дебаг останавливает процессор. Но кто сказал, что при этом в контроллере прерываний блокируются триггера, захватывающие запрос?

Share this post


Link to post
Share on other sites
Дебаг останавливает процессор. Но кто сказал, что при этом в контроллере прерываний блокируются триггера, захватывающие запрос?

 

Вряд ли там в контроллере копится очередь прерываний. Сработало прерывание, попали в обработчик, остановились. Переключатель там дальше "звенит", но этого никто не видит - признак прерывания так и висит. Пошли по шагам, сбросили прерывание, разрешили заново - в это время уже никакого дребезга нет. Не так?

Share this post


Link to post
Share on other sites
Вряд ли там в контроллере копится очередь прерываний. Сработало прерывание, попали в обработчик, остановились. Переключатель там дальше "звенит", но этого никто не видит - признак прерывания так и висит. Пошли по шагам, сбросили прерывание, разрешили заново - в это время уже никакого дребезга нет. Не так?

В понедельник проверю чистым сигналом с внутренней логики

Share this post


Link to post
Share on other sites
Вряд ли там в контроллере копится очередь прерываний. Сработало прерывание, попали в обработчик, остановились. Переключатель там дальше "звенит", но этого никто не видит - признак прерывания так и висит. Пошли по шагам, сбросили прерывание, разрешили заново - в это время уже никакого дребезга нет. Не так?

Я не знаю как именно сделан контроллер прерываний в Микроблэйзе.

Просто в данной ситуации у меня другой подход. Есть сигнал с дребезгом - ставлю фильтр. Десяток триггеров от многих тысяч роли не играет. Убираю дребезг в любом случае. На все медленные водные фронты. И не имею головной боли с "непонятками".

Просто размениваю десять триггеров на десять дней работы над проектом, требуемых для разгадывания "непоняток" ...

 

 

Share this post


Link to post
Share on other sites
Я не знаю как именно сделан контроллер прерываний в Микроблэйзе.

Просто в данной ситуации у меня другой подход. Есть сигнал с дребезгом - ставлю фильтр. Десяток триггеров от многих тысяч роли не играет. Убираю дребезг в любом случае. На все медленные водные фронты. И не имею головной боли с "непонятками".

Просто размениваю десять триггеров на десять дней работы над проектом, требуемых для разгадывания "непоняток" ...

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

 

Share this post


Link to post
Share on other sites

В общем, завел сигнал с выхода проца на вход и подавал инвертирующийся с интервалом 5 сек сигнал. Контроллер прерывания срабатывает по фронту и по спаду. По поводу накопления прерываний в контроллере пока не скажу, надо создавать проект в ISE и там генерировать прерывания.

 

Прерывания действительно ставятся в очередь даже если стоит запрет. После разрешения прерывания происходит обработка следующего в очереди.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this