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

Ошибаетесь.

 

потому-то и поставил вопрос!(Может я ошибаюсь?)

Я его (FIQ) пользую к таймеру.(Нужны относительно стабильные по времени выборки).

Правда пока не наткнулся ни на какие казусы(кроме времени реакции на FIQ).

IRQ использую еще с 3 таймерами (там точности большой ненадо)

SWI использую из основного цикла.

Будьте добры поясните, а то может быть мне жизнь раем показалась и надо переделать проект.

Спасибо!

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


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

потому-то и поставил вопрос!(Может я ошибаюсь?)

Я его (FIQ) пользую к таймеру.(Нужны относительно стабильные по времени выборки).

Правда пока не наткнулся ни на какие казусы(кроме времени реакции на FIQ).

IRQ использую еще с 3 таймерами (там точности большой ненадо)

SWI использую из основного цикла.

Будьте добры поясните, а то может быть мне жизнь раем показалась и надо переделать проект.

Спасибо!

Проверьте сами, я не классик, чтобы себя цитировать.

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


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

Создатель scmRTOS жаловался, что пришлось использовать прерывание от компаратора при портировании в AVR для получения программного прерывания.
Пользуюсь scmRTOS для AVR... Мне нужно написать программу для платы у которой все выводы компаратора заняты. Я использовал прерывание по сравнению третьего ненужного мне таймера в качестве программного прерывания. Насколько это безопасно и надежно? Пока ещё есть возможность исправить... Но вроде работает стабильно и достаточно быстро...

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


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

Я использовал прерывание по сравнению третьего ненужного мне таймера в качестве программного прерывания. Насколько это безопасно и надежно? Пока ещё есть возможность исправить... Но вроде работает стабильно и достаточно быстро...
Никаких препятствий для использования любого свободного прерывания нет. Проблема только в том, что не всякое прерывание можно вызвать программно. Я подумывал об использовании прерывания SPM - оно уж точно никогда не нужно и если я правильно понял описание флаг его всегда взведен, когда SPMEN = 0. А SPMEN = 1 только при перепрограммировании, когда переключать контексты не нужно. Если вам эта идея покажется стоящей и вы ее реализуете - отпишите сюда, пожалуйста.

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


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

Здесь есть ответы на многие вопросы :)

 

Там на филипсе когда-то скачал книжку по LPC2300ю Называется lpc2300_book_v2_srn. Там есть много ответов на ваши вопросы. :) Кто не найдет могу выложить на форуме, она около 10 Мб

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


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

Подниму тему.

Вопрос "если у меня идет выполнение IRQ и в процессе выполнения приходит SWI" остался.

Что будет, если из IRQ вызвать SWI?

По приоритетам у SWI низший, то есть как бы не должен вытеснять IRQ. Но если вызов SWI блокирующий, то как тогда дальше быть?

Нашел похожую по проблеме тему, но там тоже суть не раскрыта.

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


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

Подниму тему.

Вопрос "если у меня идет выполнение IRQ и в процессе выполнения приходит SWI" остался.

Что будет, если из IRQ вызвать SWI?

на cortex M3 как зададите приоритет прерываний так и будет происходить, приоритет так же можно задавать для программного прерывания ( я имею ввиду обработчик SVC_Handler или PendSV_Handler ) . только на мой взгляд если вы не пишете планировщик их лучше от греха подальше не использовать. заюзайте какой-нить свободное от переферии прерывание и запускайте по pending bit его.

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


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

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

Выше много писали о том, что во время IRQ происходит SWI. На AVR я реализовал многозадачность, с использованием псевдо-SWI (аппаратное прерывание, как программное - INT0). Моя идея заключалась в том, чтобы при выполнении IRQ, в обработчике надо быть, как можно меньше времени. Только сохранение данных и инициация работы кода, который занимает нечто промежуточное по важности, между фоновой задачей (которая может длиться до единиц миллисекунд) и обработчиками прерываний. То есть, обработать данные надо, как можно скорее, но не в ущерб аппаратным прерываниям. Для этого обработчик IRQ инициирует SWI. После завершения IRQ вызывается SWI, который является диспетчером обработчиков, вызывающим наиболее важный обработчик. SWI, перед вызовом обработчика, разрешает прерывания, что позволит без ущерба отрабатывать обработчикам аппаратных прерываний. А как это работает на ARM? Правильно ли я понял, что если в обработчике IRQ вызвать SWI, то его код будет отработан после того, как отработают все IRQ? Если во время работы SWI произойдёт IRQ, управление сразу же будет передано IRQ, а по его завершению вернётся обратно в SWI?

Спасибо!

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


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

Правильно ли я понял, что если в обработчике IRQ вызвать SWI, то его код будет отработан после того, как отработают все IRQ? Если во время работы SWI произойдёт IRQ, управление сразу же будет передано IRQ, а по его завершению вернётся обратно в SWI?

Неправильно. SWI - синхронное исключение, а не обычное асинхронное внешнее прерывание типа IRQ или FIQ. Т.е. - собственно для Вас это как простой вызов функции (с переключением CPU в привилегированный режим).

Если процессор перед вызовом SWI находился в режиме IRQ, то произойдёт переключение в режим SWI (с запретом FIQ и IRQ). При выходе из режима SWI произойдёт возврат в режим IRQ.

SWI например может использоваться для вызова функций OS из непривилегированного режима (режима пользователя).

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


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

FIQ не запрещается икакими прерываниями, кроме самого FIQ. И, кстати говоря, SWI уже давным-давно переименована в SVC.

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


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

FIQ не запрещается икакими прерываниями, кроме самого FIQ.

Да, наверное. Писал по памяти.

И, кстати говоря, SWI уже давным-давно переименована в SVC.

Переименована в Cortex-M. А у ТС вроде как Classical ARM, а там не переименована.

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


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

Переименована в Cortex-M. А у ТС вроде как Classical ARM, а там не переименована

 

Переименована для всех, когда был введён унифицированный синтаксис языка ассемблера для систем команд ARM и Thumb -- а он распространяется не только на новые процессоры, но и на старые тоже, хотя в старой документации, естественно, остаётся мнемоника SWI. Однако ассемблер и компилятор используют SVC для любых процессоров (SWI можно применять в ассемблере, если включить использование старого синтаксиса, насчёт компилятора не знаю -- может, только SVC позволяет).

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


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

Неправильно. SWI - синхронное исключение, а не обычное асинхронное внешнее прерывание типа IRQ или FIQ. Т.е. - собственно для Вас это как простой вызов функции (с переключением CPU в привилегированный режим).

Если процессор перед вызовом SWI находился в режиме IRQ, то произойдёт переключение в режим SWI (с запретом FIQ и IRQ). При выходе из режима SWI произойдёт возврат в режим IRQ.

SWI например может использоваться для вызова функций OS из непривилегированного режима (режима пользователя).

 

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

Спасибо!

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


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

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

Использовать RTOS.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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