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

 
 
 
Reply to this topicStart new topic
> SAM7 прерывания от PIO
vovanse
сообщение Oct 11 2006, 09:48
Сообщение #1


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

Группа: Свой
Сообщений: 185
Регистрация: 14-02-06
Из: Кемерово
Пользователь №: 14 293



Пытаюсь разобраться с AT91SAM7S64 и никак не могу добиться прерывания от PIOA - насколько я понял можно вызвать прерывание по изменению состояния вывода. Сделал так, используя примеры от Atmel

AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
AT91F_PIO_CfgInput(AT91C_BASE_PIOA, (SW1|SW2|SW3|SW4|AT91C_PA8_CTS0));
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_PIOA, 6, T91C_AIC_SRCTYPE_INT_HIGH_LEVEL, IntHandler);
AT91F_PIO_InterruptEnable(AT91C_BASE_PIOA,SW1|SW2|SW3|SW4);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_PIOA);

обработчик прерываия
__ramfunc void IntHandler(void)
{
gtmp=12;
};

меняю состояние портов и ничего... Что то еще не включил? Может у кого есть пример?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 11 2006, 10:13
Сообщение #2


Гуру
******

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



Цитата(vovanse @ Oct 11 2006, 12:48) *
Пытаюсь разобраться с AT91SAM7S64 и никак не могу добиться прерывания от PIOA - насколько я понял можно вызвать прерывание по изменению состояния вывода. Сделал так, используя примеры от Atmel
меняю состояние портов и ничего... Что то еще не включил? Может у кого есть пример?

Код
    AT91C_BASE_PIOA->PIO_IER = (1UL<<19);    // FFSK_CLK
    AT91C_BASE_PIOA->PIO_IFER = (1UL<<19);
    AT91C_BASE_PIOA->PIO_ODR = (1UL<<19);
    AT91C_BASE_PIOA->PIO_PER = (1UL<<19);
    AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_PIOA);

    AT91C_BASE_AIC->AIC_SMR[AT91C_ID_PIOA] = AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE | AT91C_AIC_PRIOR_LOWEST;
    AT91C_BASE_AIC->AIC_SVR[AT91C_ID_PIOA] = (uint32_t)FFSK_Buffer::Int_Handler;

    AT91C_BASE_AIC->AIC_EOICR = 0;                    // Reset AIC logic done in c-spy .mac

    AT91C_BASE_AIC->AIC_IECR = (1<<AT91C_ID_PIOA);    // enable ints

namespace FFSK_Buffer {
__irq __arm void Int_Handler() {
    if((AT91C_BASE_PIOA->PIO_ISR & (1<<19)) && signal (FFSK_CLK))
        RxBit();
    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

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

 


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


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