реклама на сайте
подробности

 
 
> Подскажите по прерываниям, Как происходит ветвление в случае System Controller Interrupt??
Димон Безпарольн...
сообщение Apr 5 2011, 11:44
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



До сих пор в системном контроллере у меня прерывания генерировал только интервальный таймер PIT.

Процедура была простой:

Код
__irq void PIT_int (void) {            //Прерывание от интервального таймера (System, переферийный номер 1, стр 35)
    if (*AIC_ISR1 & (1)) {            //Чья здесь стоит единица??????????? Предположительно это Peripheral Id System Controller
        Strob = 1;                    //Установка строба для Main
//Прерывание обязано читать PIT_PIVR для сброса бита PITS, вызывающего прерывание.
        *AIC_EOICR1 = *PIT_PIVR1;}    //Конец прерывания. В EOICR пишется ЛЮБОЕ значение.
    else {*AIC_EOICR1 = 0;}}        //Если источник прерывания не интервальный таймер: конец прерывания


Теперь потребовался Real-time Timer. Но он тоже в System Controller. Я плохо себе представляю - кажется чтение

Цитата
if (*AIC_ISR1 & (1))


Фильтрует прерывание от System Controller (единица это его Peripheral Id). Но в самом системном контроллере теперь два прерывания. Как произвести дальнейшее ветвление??

Сообщение отредактировал Димон Безпарольный - Apr 5 2011, 11:46
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Apr 5 2011, 11:48
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Димон Безпарольный @ Apr 5 2011, 15:44) *
Как произвести дальнейшее ветвление??

Вручную проверить возможные источники, только так.

Проверять AIC_ISR не нужно, тем более столь экстравагантным способом.

Если хотите использовать RTT, то нужно учесть, что его линия прерывания сбрасывается не сразу, а через 2 цикла SCLK. Т.е. будете терять 60us впустую.
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение Apr 5 2011, 12:53
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Цитата(aaarrr @ Apr 5 2011, 14:48) *
Вручную проверить возможные источники, только так.

Проверять AIC_ISR не нужно, тем более столь экстравагантным способом.

Если хотите использовать RTT, то нужно учесть, что его линия прерывания сбрасывается не сразу, а через 2 цикла SCLK. Т.е. будете терять 60us впустую.

AIC_ISR я проверяю способом из примера. Если не трудно, подскажите что в нем экстравагантного?

Если не проверять AIC_ISR, то каким способом можно осуществить ветвление? Т.е. вопрос - то и был в том, как проверять источники таких прерываний?

Сообщение отредактировал Димон Безпарольный - Apr 5 2011, 12:54
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 5 2011, 12:58
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Димон Безпарольный @ Apr 5 2011, 16:53) *
AIC_ISR я проверяю способом из примера. Если не трудно, подскажите что в нем экстравагантного?

Откуда пример? Вообще-то ISR содержит ID текущего прерывания, а не битовую маску, отсюда и экстравагантность (=неправильность) проверки.

Цитата(Димон Безпарольный @ Apr 5 2011, 16:53) *
Если не проверять AIC_ISR, то каким способом можно осуществить ветвление? Т.е. вопрос - то и был в том, как проверять источники таких прерываний?

Читать статусы задействованной периферии.
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение Apr 5 2011, 13:32
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Цитата(aaarrr @ Apr 5 2011, 15:58) *
Читать статусы задействованной периферии.

Понятно. Применительно к данному случаю это бит PITS из PIT_SR и бит RTTINC из RTT_SR.

Спасибо.

Цитата(aaarrr @ Apr 5 2011, 14:48) *
Если хотите использовать RTT, то нужно учесть, что его линия прерывания сбрасывается не сразу, а через 2 цикла SCLK. Т.е. будете терять 60us впустую.

Странно, почему я должен терять это время, если контроллер прерываний запрограммирован на передний фронт?

Цитата
because the status register is cleared two Slow Clock cycles after read.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Димон Безпарольный   Подскажите по прерываниям   Apr 5 2011, 11:44
||- - aaarrr   Цитата(Димон Безпарольный @ Apr 5 2011, 17...   Apr 5 2011, 13:51
||- - Димон Безпарольный   Цитата(aaarrr @ Apr 5 2011, 16:51) Увы, т...   Apr 5 2011, 13:54
|- - sasamy   Цитата(Димон Безпарольный @ Apr 5 2011, 16...   Apr 5 2011, 17:40
|- - DmitryM   [quote name='sasamy' date='Apr 5 2011,...   Apr 5 2011, 17:56
|- - sasamy   Цитата(DmitryM @ Apr 5 2011, 21:56) З.Ы. ...   Apr 5 2011, 18:04
|- - aaarrr   Цитата(sasamy @ Apr 5 2011, 22:04) Пример...   Apr 5 2011, 18:17
||- - sasamy   Цитата(aaarrr @ Apr 5 2011, 22:17) Ладно,...   Apr 5 2011, 18:20
|- - DmitryM   Цитата(sasamy @ Apr 5 2011, 22:04) Пример...   Apr 5 2011, 20:14
|- - sasamy   Цитата(DmitryM @ Apr 6 2011, 00:14) З.Ы. ...   Apr 6 2011, 00:34
- - aaarrr   Вы рискуете вообще потерять прерывания от System C...   Apr 5 2011, 13:58
- - Димон Безпарольный   Цитата(aaarrr @ Apr 5 2011, 16:58) Вы рис...   Apr 6 2011, 06:41


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 11:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01419 секунд с 7
ELECTRONIX ©2004-2016