Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Опять о критических секциях
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
xelax
На досуге ещё раз покурил даташит, особенно раздел о контроллере прерываний AIC. И нашёл парочку интересных регистров, которым раньше не придавал особого значения.

1. Debug Control register.
2. Core Interrupt status register.

Получается, что с помощью них можно реализовать критические секции. Примерно так:
Код
AT91C_BASE_AIC->AIC_DCR |= AT91C_AIC_DCR_GMSK;
while(AT91C_BASE_AIC->AIC_CISR & (AT91C_AIC_NFIQ | AT91C_AIC_NIRQ));

................  /* critical time code */


AT91C_BASE_AIC->AIC_DCR &= ~AT91C_AIC_DCR_GMSK;


Если это верно, то получается ненадо писать ассемблерные вставки, где идёт обращение к cspr и т.д.

Что скажут знатоки армов? Можно ли организовать критические секции посредством контроллера прерываний? Или где то здесь засада, которую я пока не осознал? 05.gif
_dem
Стоп, а после выхода из критической секции кто будет обрабатывать произошедшие во время ее выполнения прерывания ?
xelax
Цитата(_dem @ Mar 28 2008, 11:32) *
Стоп, а после выхода из критической секции кто будет обрабатывать произошедшие во время ее выполнения прерывания ?


Ну так я понимаю, AIC только отключает свои линии IRQ и FIQ от аналогичных линий ядра. Прерывания накапливаются в AIC. А когда AICу обратно устанавливаешь флаг GMSK, то в ядро пойдут все накопившиеся запросы на обработку прерываний согласно приоритету.

Если я неправ поправте.
_dem
Учитывая

Код
This function facilitates synchronizing the processor on a next event
and, as soon as the event occurs, performs subsequent operations without having to handle an
interrupt. It is strongly recommended to use this mask with caution.


я так понимаю, что "without having to handle" означает, что AIC самостоятельно сбрасывает линии, не дожидаясь реакции проца. Хм, вообще интересно, вечером проверю.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.