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

TMS320F2811. Программа зависает намертво.

Есть проект, написанный на F2811 процессоре. Реализовано на базе DSPBIOS. Программой используется в процессоре: GPIO, CAPTURE, PWM, SPI. Работают прерывания от SPI и от CAPTURE, используется диспетчер DSPBIOS для обработки. Присутствует три таска. Когда работает таск, управляющий ШИМ на основе результатов вычисления в прерывании от CAPTURE, наблюдается хаотическое зависание, т.е. зависание через разные промежутки времени: может через 30 сек, может через 10 мин. После зависания не запускается даже PRD_func, а программный счетчик находится на функции FXN_f_self_loop, ассемблерная инструкция которой прыгает сама на себя бесконечно.

Кто-нибудь сталкивался с проблемой, когда программа прыгает на FXN_f_self_loop? Кто-нибудь знает возможные причины попадания программы на эту функцию?

 

Спасибо заранее

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


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

что-то похожее у меня. задал вопрос в соседнем форуме Процессоры - Processors. если разберетесь что было у вас раскажите.

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


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

что-то похожее у меня. задал вопрос в соседнем форуме Процессоры - Processors. если разберетесь что было у вас раскажите.

 

Причина зависания стала понятна, найден способ прикрыть эту дыру, но не найден способ полного устранения источника проблемы. На FXN_f_selfLoop программа прыгала у меня в случае когда возникало прерывание, для которого не был назначен обработчик в DSPBIOSe, стояло по умолчанию HWI_unused. Возникало прерывание PIE_INT_5_1, согласно документации, это прерывание при периоде таймера GPT4 в Event Manager B. Самое интересное, что я это прерывание никак не разрешаю. Прерывание возникает даже если таймер GPT4 заблокирован и его значение не изменяется. Проблема решилась установкой обработчика прерывания вместо HWI_unused на пустую функцию возврата, содержащую лишь PieCtrlRegs.PIEACK.bit.ACK5 = 1 (работает без диспетчера).

Не ясно, откуда возникает прерывание от таймера, который во-первых стоит, а во-вторых прерывания от него запрещены. Прерывание от GPT4 возникает в среднем раз в 10 минут. Все это происходит при частоте прерываний модуля Capture 52 КГц. Если понизить частоту до 3 КГц, то ни одного ложного прерывания не наблюдалось. Тоже интересный факт.

Не исключено, что время от времени и другие ложные прерывания могут возникать. Поэтому для неиспользуемых прерываний вместо HWI_unused буду ставить FXN_f_nop с использованием диспетчера или что-нибудь подобное.

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


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

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

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

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

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

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

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

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

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

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