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

 
 
 
Reply to this topicStart new topic
> Как отработать прерывание по перепаду на ножке в SAM7S256, Не срабатывает пррывание по перепаду.
Тема
сообщение Feb 2 2008, 12:49
Сообщение #1


Участник
*

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



Код
#define PIO_INTERRUPT_LEVEL    6
int count_interrupt;
__ramfunc void pio_c_irq_handler ( void )
{
int dummy;
count_interrupt++;
    dummy =AT91C_BASE_PIOA->PIO_ISR;
    //* suppress the compilation warning
    dummy =dummy;

}


int main( void )
//* Begin
{
    unsigned int   loop_count;
    AT91PS_AIC     pAic;
    //* Load System pAic Base address
        pAic = AT91C_BASE_AIC;

    //* Enable User Reset and set its minimal assertion to 960 us
    AT91C_BASE_RSTC->RSTC_RMR = AT91C_RSTC_URSTEN | (0x4<<8) | (unsigned int)(0xA5<<24);

        // First, enable the clock of the PIOB
        AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA );
        AT91F_PIOA_CfgPMC();
    //* open external PIO interrupt
        //* define switch SW3 at PIO input for interrupt IRQ loop
    AT91F_PIO_CfgInput(AT91C_BASE_PIOA, SW3_MASK | SW4_MASK);

    AT91F_AIC_ConfigureIt ( pAic, AT91C_ID_PIOA, PIO_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE, pio_c_irq_handler);
    AT91F_PIO_InterruptEnable(AT91C_BASE_PIOA,SW4_MASK);
    //* set the interrupt by software
    AT91F_AIC_EnableIt (pAic, AT91C_ID_PIOA);

for (;;)
    {

    }

//* End
}


Все перепробовал а прерывания от перепада нету! SW4 это PA26 что не так


--------------------
Наша электроника и программы - http://soft-ee.com
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 2 2008, 12:57
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Тема @ Feb 2 2008, 14:49) *
Все перепробовал а прерывания от перепада нету! SW4 это PA26 что не так
Забыл глобально разрешить прерывания ( __enable_interrupts() )? И не описал собственно переход по вектору из AIC:
Код
#pragma vector = 0x18
__irq __arm void IRQ_Switch()
{
    void (*Handler)() = (void(*)())AT91C_BASE_AIC->AIC_IVR;
    Handler();
    AT91C_BASE_AIC->AIC_EOICR = 0;                    // Reset AIC logic
}


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Тема
сообщение Feb 2 2008, 13:07
Сообщение #3


Участник
*

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



Цитата(Сергей Борщ @ Feb 2 2008, 17:57) *
Забыл глобально разрешить прерывания ( __enable_interrupts() )? И не описал собственно переход по вектору из AIC:
Код
#pragma vector = 0x18
__irq __arm void IRQ_Switch()
{
    void (*Handler)() = (void(*)())AT91C_BASE_AIC->AIC_IVR;
    Handler();
    AT91C_BASE_AIC->AIC_EOICR = 0;                    // Reset AIC logic
}

Прерывания от таймеров проходят, а вот от ножки не хотят sad.gif

3 дня голову ломаю, ничего не помогает.подтяжку отключил, вывод цепляю на + потом на общий, и ничего не происходит...Все остальные прерывания работают


--------------------
Наша электроника и программы - http://soft-ee.com
Go to the top of the page
 
+Quote Post
_dem
сообщение Feb 4 2008, 07:51
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



Вообще хорошо бы не пользоватся библиотечными функциями, особенно при освоении контроллера, а работать с регистрами. Тогда сразу видны явные ошибки.

А лезть за описанием кода каждой функции (макроса), чтобы посмотреть, что Вы сделали, а что забыли - мне лично (думаю, не только мне) надоело на третьем макросе.

А перепад сам чем делается ? Может, нужно пулл-ап включить-выключить ?
Go to the top of the page
 
+Quote Post

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

 


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


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