Проблема состоит в следующем: в устройстве планируется использовать прерывания от PIT таймера (каждую 1мс) и от RTT таймера (каждую секунду). Настраиваю таймеры, разрешаю для них прерывания, разрешаю системное прерывание, в обработчике определяю таймер-источник. Так вот в реале прерывание от PIT имеет место, а прерывание от RTT не происходит (или не удается его определить??). Если запретить прерывание от PIT, то прерывания от RTT работают как положено. Вопрос в том, почему вместе они дружить не желают?
Кусок кода прилагаю:
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