Перейти к содержанию
    

BF561 и NMI0

Я использую VDSP 5.0 update 6 , мне необходимо организовать обработку немаскируемого прерывания NMI0. Я объявляю функцию-обработчика прерывания:

 

EX_INTERRUPT_HANDLER(nmi_int)
{
    int_count++;
}

 

Потом в основной функции я связываю nmi_int с вектором через

 

register_handler(ik_nmi, nmi_int);

 

Достаточно ли этого? Все ли я правильно делаю? Прерывание не обрабатывается... :cranky:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я использую VDSP 5.0 update 6 , мне необходимо организовать обработку немаскируемого прерывания NMI0. Я объявляю функцию-обработчика прерывания:

 

EX_INTERRUPT_HANDLER(nmi_int)
{
    int_count++;
}

 

Потом в основной функции я связываю nmi_int с вектором через

 

register_handler(ik_nmi, nmi_int);

 

Достаточно ли этого? Все ли я правильно делаю? Прерывание не обрабатывается... :cranky:

 

Только так вот EX_NMI_HANDLER(NMI_Routine)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть, я должен объявить

 

EX_NMI_HANDLER(nmi_int)
{
    int_count++;
}

 

а потом в основной функции связать nmi_int с вектором немаскируемого прерывания

 

register_handler(ik_nmi, nmi_int);

 

и должно получиться?

 

Попутный вопрос. Источник прерывания соединен с микропроцессором через ПЛИС. Вход ПЛИС стандарта LVCMOS33. Считается ли напряжение 0.3 вольта логическим нулем?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть, я должен объявить

 

EX_NMI_HANDLER(nmi_int)
{
    int_count++;
}

 

а потом в основной функции связать nmi_int с вектором немаскируемого прерывания

 

register_handler(ik_nmi, nmi_int);

 

и должно получиться?

 

Попутный вопрос. Источник прерывания соединен с микропроцессором через ПЛИС. Вход ПЛИС стандарта LVCMOS33. Считается ли напряжение 0.3 вольта логическим нулем?

 

Да должно получиться, только смотрите это прерывание по уровню, и если не снять запрос на прерывание то проц там и останется.

Посмотрите на длительность этого сигнала.

 

А с уровнем все нормально.

VIH High Level Input Voltage 2.0 ... 3.6V

VIL Low Level Input Voltage –0.3 ... +0.6V

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все равно не работает. Коллеги подсказывают, что еще может быть проблема в VDK, которая является неизбежным злом при использовании стека TCP/IP...

К сожалению, попробовать послушать прерывание без VDK смогу только завтра. Может ли быть дело в VDK? Длительность импульса на входе NMI0 составляет около 100 нс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все равно не работает. Коллеги подсказывают, что еще может быть проблема в VDK, которая является неизбежным злом при использовании стека TCP/IP...

К сожалению, попробовать послушать прерывание без VDK смогу только завтра. Может ли быть дело в VDK? Длительность импульса на входе NMI0 составляет около 100 нс.

 

Да, ВДК это зло :):)

100 нс... Да должен войти. А попробуйте raise 2. Если проблема внутри проца, то ничего не изменится, если извне, то заработает. Хотя может быть и там и там :)

 

А проц не входит туда или не выходит. Ничего не виснет?

Инкрементируемая переменная volatile ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, ВДК это зло :):)

100 нс... Да должен войти. А попробуйте raise 2. Если проблема внутри проца, то ничего не изменится, если извне, то заработает. Хотя может быть и там и там :)

 

А проц не входит туда или не выходит. Ничего не виснет?

Инкрементируемая переменная volatile ?

 

 

Да, инкрементируемая переменная volatile. Хотя я в обработчике прерывания вызывал функцию printf("Srabotalo!"), но безрезультатно...

 

А что такое raise 2 ???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что такое raise 2 ???

Программная генерация nmi. В коде C на использовать так:

asm("raise 2;");

PS. Двойная регистрация на форуме запрещена :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, инкрементируемая переменная volatile. Хотя я в обработчике прерывания вызывал функцию printf("Srabotalo!"), но безрезультатно...

 

А что такое raise 2 ???

 

а printf прерываний более низкого уровня не использует?

Может лучше ножкой подергать, так надежнее :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, инкрементируемая переменная volatile. Хотя я в обработчике прерывания вызывал функцию printf("Srabotalo!"), но безрезультатно...

 

А что такое raise 2 ???

 

А так можно делать в обработчике?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...