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

Systick STM32 не вызывается прерывание

STM32F215, FreeRtos

На одной из плат перестает вызываться прерывание SysTick. При этом на большинстве плат все ок.

Если смотреть регистры, то SysTickSR:

Enable = 1

TickInt = 1

CLKSOURCE = 1

COUNTFLAG = 1

программа идет по самой приоритетной задаче постоянно, прерывание не вызывается, хотя регистр счетчика постоянно меняется и перескакивает через ноль.

Перестают прерывания сыпаться каждый раз на разном значении обработанных прерывания ( тиков операц. системы ) сейчас например отладчик показывает xTickCount = 4050, перед этим было 413.

Изменено пользователем Vladimir Prokofiev

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


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

А какой таймер использует ОС чтобы переключать задачи? Часом SysTick не зарезервирован как системный ресурс?

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


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

Может где то глобальное прерывание запрещается. Есть реакция на другие прерывания ?

 

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


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

STM32F215, FreeRtos

а ОС часом не отключает где-нибудь глобальные прерывания?

сталкивался на TNKernel

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


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

Так и не решилась проблема:)

Да, Systick переключает задачи. Не вызывется => Задачи не переключаются, что и видно.. Сейчас попробую поймать и посмотреть на другие прерывания..

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


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

Проверьте значения в регистрах PRIMASK, FAULTMASK, BASEPRI.

 

PRIMASK=0

FAULTMASK=0

BASEPRI=0xB0

 

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

 

Ну да вот и ответ :) Спасибо всем. Вобщем, при сбое по i2c, я забыл разрешить прерывания. А весь блок от выставления старта до стопа убран был в критическую секцию. Если происходил сбой то я выходил из функции забыв покнуть критическую секцию

Изменено пользователем Vladimir Prokofiev

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


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

Есть понятие "инверсия приоритетов". Возможно, у вас оно случилось.

А до SysTick есть еще с 8 разных прерываний, которые могут перекрыть SysTick.

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


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

Есть понятие "инверсия приоритетов".

Понятие из другой оперы вроде...

А до SysTick есть еще с 8 разных прерываний, которые могут перекрыть SysTick.

Почему только 8? Периферийные прерывания тоже могут перекрыть SysTick_Handler.

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


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

Понятие из другой оперы вроде...

Из области RTOS. Думаю, проблема в ней.

Почему только 8? Периферийные прерывания тоже могут перекрыть SysTick_Handler.

Если приоритеты прерываний изменить, то можно. А если не трогать, то как я написал. :rolleyes:

 

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


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

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

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

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

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

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

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

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

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

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