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

 
 
 
Reply to this topicStart new topic
> Зависание прерывания SAM7S Keil (не сразу), Зависание прерывания SAM7S Keil (не сразу)
nicks80
сообщение Feb 24 2010, 04:53
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 18-10-07
Пользователь №: 31 485



Подскажите голову сломал не могу избавится от редко проявляющейся проблеме. перестает работать прерывания от внешнего воздействия на гожку порта.
Ножка порта подключена к ИК датчику.
при нормальной работе когда жмем на пульт то все ок.
как только на вход подается "короткая" (помеха, наводка от прикосновения руку к ножке) пачка импульсов то прерывание после не отрабатываются.
уже и не знаю что и делать.

Код
RAM_FUNC    
void cpu_io_irq(void) __irq  
{
    unsigned int status = AT91C_BASE_PIOA->PIO_ISR;
    // MY<
//    unsigned int     mask = AT91C_BASE_AIC->AIC_IMR; // MASK iNTERRUPT
//    unsigned short tempFMR = AT91C_BASE_MC->MC_FMR;
    // MY>
    status &= AT91C_BASE_PIOA->PIO_IMR;

    // MY<
//    AT91C_BASE_AIC->AIC_IDCR = 0xFFFFFFFF; /// DISABLE ALL INTERRUPT
    // MY>


    if(status & REM_INPUT_PIN)
    {
        rem_interupt();    
    }


    if(status & PWM_PIN_FUSE)
    {
    //    pwm_interupt();
    }
    // MY<
//    AT91C_BASE_MC->MC_FMR = tempFMR;
//    AT91C_BASE_AIC->AIC_IECR = mask;
    // MY>
    AT91C_BASE_AIC->AIC_EOICR =  status;
}

void init_io(void)
{
    /// PWM
    AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA;

    /// Interupt
    AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA );

    AT91C_BASE_SYS->PIOA_PPUDR    =        REM_INPUT_PIN | PWM_PIN_FUSE;
    AT91C_BASE_PIOA->PIO_IFER     =        REM_INPUT_PIN | PWM_PIN_FUSE;

    AT91F_PIO_CfgInput(AT91C_BASE_PIOA, REM_INPUT_PIN|PWM_PIN_FUSE);
    AT91F_AIC_ConfigureIt (AT91C_BASE_AIC, AT91C_ID_PIOA, AT91C_AIC_PRIOR_HIGHEST,AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE, (void (*)() )cpu_io_irq);
    AT91F_PIO_InterruptEnable(AT91C_BASE_PIOA,REM_INPUT_PIN|PWM_PIN_FUSE);
    AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_PIOA);
}


Сообщение отредактировал rezident - Feb 24 2010, 17:28
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 24 2010, 14:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Внимательнее надо быть. Источник прерывания внутренний, поэтому
SRCTYPE_EXT_NEGATIVE_EDGE = Positive edge triggered
В данном случае использовать прерывание по фронту смысла просто нет.
Go to the top of the page
 
+Quote Post
nicks80
сообщение Feb 24 2010, 21:38
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 18-10-07
Пользователь №: 31 485



Цитата(aaarrr @ Feb 24 2010, 17:39) *
Внимательнее надо быть. Источник прерывания внутренний, поэтому
SRCTYPE_EXT_NEGATIVE_EDGE = Positive edge triggered
В данном случае использовать прерывание по фронту смысла просто нет.

Я просматриваю состояние ноги при заходе в прерывание.
Суть в другом. оно перестает обрабатываться.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 19:22
Рейтинг@Mail.ru


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