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

 
 
> как подружить прерывания в AT91SAM7x
apis007
сообщение Nov 17 2009, 05:57
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 6-10-09
Из: Калуга
Пользователь №: 52 769



Проблема состоит в следующем: в устройстве планируется использовать прерывания от 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 - Nov 17 2009, 06:03
Go to the top of the page
 
+Quote Post



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

 


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


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