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

 
 
 
Reply to this topicStart new topic
> Отключение прерываний в режиме пользователя
igorenja
сообщение Dec 6 2009, 13:53
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 8-08-08
Из: Новосибирск
Пользователь №: 39 488



Доброе время суток, господа форумчане!
Вчера возникла необходимость запустить на железке сторожевой таймер. Контроллер LPC2146. Так вот чтобы установить в счетный регистр сторожевого таймера заданное значение необходимо в определенный регистр записать подряд две константы. В моей железке подряд записать получается редко, т.к. с частотой 44кГц срабатывает прерывание. После того как прерывание срабатывает в момент когда первая константа была записана в геристр управления сторожевого таймера, железка сбрасывается. Следовательно на время записи констант нуно отключить прерывания. Посмотрел как отключить прерывания и обнаружил что функции __disable_irq() и __enable_irq() в user mode не работают.... На форуме у Keil`a нашёл тему про то как используют software interrupt для того чтобы отключать прерывания.... Ну что то мне это не очень нравится. Потому как железка моя воспроизводит звук и не хотелось бы создать фазовый шум частоты дискретизации из-за того что появилась необходимость юзать сторожевой таймер....
Короче говоря проблему эту я решил, но вот просто интересно нет ли другого способа отключить прерывания в user mode.
Go to the top of the page
 
+Quote Post
KRS
сообщение Dec 6 2009, 14:17
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Так используйте SYSTEM mode.
В LPC21xx ARM7 - там вообще нет преимуществ user mode, раз нужно запрещать прерывания лучше его не использовать.
Go to the top of the page
 
+Quote Post
Student Pupkin
сообщение Dec 6 2009, 15:09
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 23-05-08
Пользователь №: 37 760



Цитата(igorenja @ Dec 6 2009, 16:53) *
нет ли другого способа отключить прерывания в user mode.

Ну вроде как и не должно быть - User непривелегированный режим и доступ в "управляющим полям" (I,F,T, Mode[4:0]) региcтра статуса запрещен.
Цитата(igorenja @ Dec 6 2009, 16:53) *
Короче говоря проблему эту я решил

А не могли поделиться как? smile.gif
Go to the top of the page
 
+Quote Post
igorenja
сообщение Dec 6 2009, 15:15
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 8-08-08
Из: Новосибирск
Пользователь №: 39 488



Цитата(Student Pupkin @ Dec 6 2009, 21:09) *
А не могли поделиться как? smile.gif


В основном цикле с определённой периодичностью поднимаю флаг, а в обработчике fiq проверяю если флаг поднят, сбрасываю таймер.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Dec 7 2009, 07:11
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(igorenja @ Dec 6 2009, 19:15) *
В основном цикле с определённой периодичностью поднимаю флаг, а в обработчике fiq проверяю если флаг поднят, сбрасываю таймер.


Ну и что хорошего в таком подходе? На самом деле прерывания как были разрешены, так и остаются разрешены, т.е. время на их обработку все равно теряется, да еще и глобальный флаг его (время) "отъедает". И в чем идея сидения в "user mode"? Если, конечно, процессор без толку крутится в каком-нибудь while(1), то может и так сойдет.
Go to the top of the page
 
+Quote Post
igorenja
сообщение Dec 7 2009, 12:00
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 8-08-08
Из: Новосибирск
Пользователь №: 39 488



Цитата(sergeeff @ Dec 7 2009, 13:11) *
Ну и что хорошего в таком подходе? На самом деле прерывания как были разрешены, так и остаются разрешены, т.е. время на их обработку все равно теряется, да еще и глобальный флаг его (время) "отъедает". И в чем идея сидения в "user mode"? Если, конечно, процессор без толку крутится в каком-нибудь while(1), то может и так сойдет.

Для данной конкретной железки хорошего в данном подходе то, что фазовых шумов частоты дискретизации не добавляется. Если первый пост прочитаете, задача изначально была сбрасывать сторожевой таймер, а не прерывания отключать. Вопрос как отключить прерывания возник в последствие.
Go to the top of the page
 
+Quote Post

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

 


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


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