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

 
 
> Неверная обработка функции, прерывания от RTTC
Тема
сообщение Feb 4 2008, 09:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 31-01-08
Из: Екатеринбург
Пользователь №: 34 632



Код
void pio_c_irq_handler ( void ) __irq{
int rttsr1,rttsr2;
rttsr1=AT91F_RTTGetStatus(AT91C_BASE_RTTC);
rttsr1=rttsr1;
rttsr2=rttsr1;
if(rttsr1&1)
{      if  (out==0)
{                out=1;    
                AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED);
}      else
{                
                out=0;
                AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED);
                AT91F_RTTSetAlarmValue(AT91C_BASE_RTTC,(AT91F_RTTReadValue(AT91C_BASE_RTTC)+1000*interval));
}
}

if(rttsr2&2)
{      if  (shags==0)
{                shags=1;    
                AT91F_PIO_SetOutput( AT91C_BASE_PIOA, SHAG);
}      else
{                
                shags=0;
                AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, SHAG);
}
}
    


  *AT91C_AIC_EOICR = 0;                     /* End of Interrupt */
}

У меня прерывания от таймера и будильника сделаны в одной функции, если отрабаотывать отдельно

Код
void pio_c_irq_handler ( void ) __irq{
int rttsr1,rttsr2;
rttsr1=AT91F_RTTGetStatus(AT91C_BASE_RTTC);
rttsr1=rttsr1;
rttsr2=rttsr1;
if(rttsr1&1)
{      if  (out==0)
{                out=1;    
                AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED);
}      else
{                
                out=0;
                AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED);
                AT91F_RTTSetAlarmValue(AT91C_BASE_RTTC,(AT91F_RTTReadValue(AT91C_BASE_RTTC)+1000*interval));
}
}



  *AT91C_AIC_EOICR = 0;                     /* End of Interrupt */
}
или
Код
void pio_c_irq_handler ( void ) __irq{
int rttsr1,rttsr2;
rttsr1=AT91F_RTTGetStatus(AT91C_BASE_RTTC);
rttsr1=rttsr1;
rttsr2=rttsr1;

if(rttsr2&2)
{      if  (shags==0)
{                shags=1;    
                AT91F_PIO_SetOutput( AT91C_BASE_PIOA, SHAG);
}      else
{                
                shags=0;
                AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, SHAG);
}
}
    


  *AT91C_AIC_EOICR = 0;                     /* End of Interrupt */
}


Проходит на ура, а совместная же работа не работает, SHAG LED это PA27 PA 15 настроенные на выход.


--------------------
Наша электроника и программы - http://soft-ee.com
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Тема
сообщение Feb 4 2008, 15:46
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 31-01-08
Из: Екатеринбург
Пользователь №: 34 632



Поскольку прерывание от RTCC и Alarm RTCC одно(потому как дескрипторы одинаковые хотя возможно я не прав, но нашел лишь AT91C_ID_SYS) то обработка происходит одной функций, но непонятно почему когда в теле цикла появляться 2 if подряд то просто перестает выполняться!камень SAM7S256, последовательно пытался...по отдельности работают оба случая...


--------------------
Наша электроника и программы - http://soft-ee.com
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 16:42
Рейтинг@Mail.ru


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