Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SAM7S64
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
segment
Народ, помогите пожалуйста. С ШИМ разобрался, а вот как сделать так чтобы по окончанию периода был interrupt я не могу понять, в инете рыл но ничего не нашел, тк мало инфы вообще.
Код
RAMFUNC void pwm_irq_handler ( void )
{
unsigned int dummy = AT91C_BASE_PWMC->PWMC_ISR;

    //* Suppress warning variable "dummy" was set but never used
    dummy = dummy;
    
    //...
}

//...
// А вот этим запускаю прерывание, после настройки ШИМ.

AT91C_BASE_PWMC->PWMC_IER = AT91C_PWMC_CHID0;

volatile AT91S_AIC * pAIC = AT91C_BASE_AIC;
    
pAIC->AIC_SMR[AT91C_ID_PWMC] = AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE | 7;
pAIC->AIC_SVR[AT91C_ID_PWMC] = (unsigned long)pwm_irq_handler;
pAIC->AIC_IECR = (1 << AT91C_ID_PWMC);


//...


После этого программа заходит в обработчик только один раз.. может есть у кого исходник рабочий хороший? Пишу в WinARM. help.gif
KAlex
Цитата(Сега @ Mar 12 2008, 17:36) *
После этого программа заходит в обработчик только один раз..

AIC_EOICR ?
segment
Я не использовал этот регистр, не углядел.. laughing.gif Покажите как нужно
ЗЫ: пожалуйста)
segment
Код
RAMFUNC void pwm_irq_handler ( void )
{
unsigned int dummy = AT91C_BASE_PWMC->PWMC_ISR;

    //* Suppress warning variable "dummy" was set but never used
    dummy = dummy;
    
    //...

    AT91F_AIC_AcknowledgeIt( AT91C_BASE_AIC ); ///> Добавил вот это
}

Добавил окончание прерывания. Но всеравно оно выполняется один раз и все 05.gif

ЗЫ: Из прерывания НЕ выходит. Даже если пустым его оставить вот таким
Код
RAMFUNC void pwm_irq_handler ( void )
{
        unsigned int dummy = AT91C_BASE_PWMC->PWMC_ISR;
        dummy = dummy;
        AT91F_AIC_AcknowledgeIt( AT91C_BASE_AIC );
}


Мне сказали что дело может быть в Startup коде.. он у меня стандартный из примеров
segment
http://electronix.ru/forum/index.php?showtopic=34491 сделал как здесь и все заработало.
KAlex
Обработка прерываний от периферии:
1. В начале читаем interrupt status.
2. В конце устанавливаем EOICR(End of Interrupt Command Register)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.