Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как подружить прерывания в AT91SAM7x
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
apis007
Проблема состоит в следующем: в устройстве планируется использовать прерывания от PIT таймера (каждую 1мс) и от RTT таймера (каждую секунду). Настраиваю таймеры, разрешаю для них прерывания, разрешаю системное прерывание, в обработчике определяю таймер-источник. Так вот в реале прерывание от PIT имеет место, а прерывание от RTT не происходит (или не удается его определить??). Если запретить прерывание от PIT, то прерывания от RTT работают как положено. Вопрос в том, почему вместе они дружить не желают? 07.gif
Кусок кода прилагаю:

CODE

// обработчик системных прерываний
void ISR_Sys(void)
{
unsigned int status;


status = RTT_GetStatus(AT91C_BASE_RTTC);

// прерывания от RTT
if (statusRTT !=0)
{
printf("rtt ");

TX_En=~TX_En;

}

status = PIT_GetStatus() & AT91C_PITC_PITS;
// прерывания от PIT
if (status != 0)
{
timestamp ++;

switch(var)
{
.
.
.
}
}
}

// разрешение системных прерываний
void ConfigureSYS_IRQ (void)
{
IRQ_DisableIT(AT91C_ID_SYS);
IRQ_ConfigureIT(AT91C_ID_SYS, 0, ISR_Sys);
IRQ_EnableIT(AT91C_ID_SYS);
}

void ConfigurePit(void)
{
// Initialize the PIT to the desired frequency
PIT_Init(PIT_PERIOD, BOARD_MCK / 1000000);

// Configure interrupt on PIT
PIT_EnableIT();

// Enable the pit
PIT_Enable();
}

void ConfigureRTT (void)
{
RTT_SetPrescaler(AT91C_BASE_RTTC, 32768); // настройка таймера
RTT_EnableIT(AT91C_BASE_RTTC, AT91C_RTTC_RTTINCIEN); // разрешение прерывания
}

apis007
Всем спасибо за внимание. Разобрался с прерыванием. Прошу модераторов удалить эту тему за ненадобностью.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.