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

Cortex MO-постоянно сваливается в прерывание NMI

Здравствуйте.

Разбираюсь с отладкой на визнетовском контроллере W7500p.

Внутри у него Cortex MO плюс железный ip-движок.

Сейчас имею ситуацию, когда контроллер сначала попадает в обработчик HardFault.

Там программа висит в вечном цикле, пока не сработает собака.

После этого начинается процесс инициализации камня, в середине которой

я попадаю уже в обработчик NMI, где опять вишу до срабатывания собаки и далее снова инит

и снова попадание в обработчик NMI. Железный ресет при этом не помогает - так-же сваливаюсь в NMI.Помогает

только передерг питания.

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

Но что надо сделать, чтобы избежать зацикливания?

 

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


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

Периферия дергает NMI? Подозреваю что нужно разобраться почему хард фолт появляется.

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


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

почему нашел. Писал за границы массива.

Может при хардфаулте руками память обнулять?

А почему NMI возникает?

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


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

3 часа назад, KRTPC сказал:

А почему NMI возникает?

Видимо потому, что Вы его разрешили.

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


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

1 час назад, jcxz сказал:

Видимо потому, что Вы его разрешили.

Разрешили? NMI? Non-maskable interrupt? Но как???

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


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

53 минуты назад, Сергей Борщ сказал:

Разрешили? NMI? Non-maskable interrupt? Но как???

А что вызывает удивление? "Как" - объяснит юзермануал на МК. Не знаю как в W7500, но обычно в МК имеется некий периферийный регистр, позволяющий разрешать/запрещать NMI.

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


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

1 час назад, KRTPC сказал:

Эээ, мамой клянусь, не разрешал !

Скачиваем мануал на W7500P, смотрим:

На векторе NMI сидит прерывание от WDT. Находим регистр Watchdog timer Control Register(WDTControl). Находим в нём поле:

IEN – Interrupt Enable. 
0 : Disable the counter and the interrupt.   
1 : Enable the counter and the interrupt. Reloads the counter from the value in WDTLoad, after previously being disabled.

Видим, что значение регистра после reset == 0x0000_0000.

Видимо единичку в младший бит папа записал....  ;)

 

PS: На всю процедуру скачивания мануала и поиска в нём потребовалось около 5 минут. Много меньше чем для написания в форум....

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


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

3 часа назад, jcxz сказал:

но обычно в МК имеется некий периферийный регистр, позволяющий разрешать/запрещать NMI

То есть "non-maskable", т.е. "незапрещаемое" у него в названии просто для красного словца?

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


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

23 минуты назад, Сергей Борщ сказал:

То есть "non-maskable", т.е. "незапрещаемое" у него в названии просто для красного словца?

NMI - немаскируемо средствами NVIC. Сам источник NMI никто не мешает конфигурить (разрешать, запрещать, назначать источник(-и) и т.п.). Посмотрите периферию любого МК на Cortex-M где есть NMI.

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


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

38 минут назад, jcxz сказал:

Сам источник NMI никто не мешает конфигурить

Про источник речи не было. Вы писали про разрешение самого NMI.

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


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

10 часов назад, jcxz сказал:

Скачиваем мануал на W7500P, смотрим:

На векторе NMI сидит прерывание от WDT. Находим регистр Watchdog timer Control Register(WDTControl). Находим в нём поле:

IEN – Interrupt Enable. 
0 : Disable the counter and the interrupt.   
1 : Enable the counter and the interrupt. Reloads the counter from the value in WDTLoad, after previously being disabled.

Видим, что значение регистра после reset == 0x0000_0000.

Видимо единичку в младший бит папа записал....  ;)

 

PS: На всю процедуру скачивания мануала и поиска в нём потребовалось около 5 минут. Много меньше чем для написания в форум....

Да, посыпаю голову пеплом...(тут должен быть смайлик).

На NMI висит собака и при ресете она остается разрешенной.

Решение- в начале инициализации запретить watchdog.

Спасибо.

 

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


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

7 часов назад, Сергей Борщ сказал:

Про источник речи не было. Вы писали про разрешение самого NMI.

Это оно самое и есть.

 

1 час назад, KRTPC сказал:

Решение- в начале инициализации запретить watchdog.

Скорее - "не разрешать". Потому что он по дефолту - запрещён.

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


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

5 минут назад, jcxz сказал:

Это оно самое и есть.

 

Скорее - "не разрешать". Потому что он по дефолту - запрещён.

Ну как не разрешать...Вы работаете без собаки? А вдруг тяжелая космическая частица сотрет бит в важном регистре (тут опять должен быть смайлик).

Немного пояснения.

У меня крутится scmrtos. Собаку я включаю перед запуском бесконечного цикла в задаче  с наименьшим приоритетоми в этой-же задаче в самом конце сбрасываю ее. Как выяснилось, при ресете собака остается включенной, а инициализация у меня длинная...

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


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

24 минуты назад, KRTPC сказал:

Ну как не разрешать...Вы работаете без собаки? А вдруг тяжелая космическая частица сотрет бит в важном регистре (тут опять должен быть смайлик).

Я работаю с WDT. Именно с WDT (т.е. - внешним). А вот Вы - без WDT. Так как внутренний WDT как раз бессилен против космических частиц и пр. случайных внешних явлений. Он пригоден разве что для оживления девайса после программных багов. Надеюсь не нужно объяснять - почему.

 

24 минуты назад, KRTPC сказал:

У меня крутится scmrtos. Собаку я включаю перед запуском бесконечного цикла в задаче  с наименьшим приоритетоми в этой-же задаче в самом конце сбрасываю ее. Как выяснилось, при ресете собака остается включенной, а инициализация у меня длинная...

Так замените здесь WDT на обычный таймер. Или контролируйте время в уже тикающем ISR Systick.

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


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

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

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

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

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

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

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

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

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

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