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

 
 
> Внешнее прерывание AT91SAM7S256., Прерывание по нажатию кнопки.
vutang
сообщение May 24 2013, 10:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 10-12-09
Из: Томск
Пользователь №: 54 174



Добрый день всем!
Имеется отладочная плата sam7-mt256 фирмы olimex. На плате имеется джойстик, состоящий из 5 кнопок.
Хочу сделать прерывание по нажатию на одну из этих кнопок, но как-то не выходит. Т.е. по нажатию на кнопку программа уходит в прерывание и крутится в нем, пока не перезагрузишь контроллер. На сколько я понял, за окончание прерывания отвечает запись любого значения в регистр AIC_EOICR, но это тоже не помогает. Может кто делал что-нибудь подобное, подскажите куда копать? Ниже приведена часть кода, в котором производится настройка и описание прерывания.
Используемая среда разработки IAR 5.4.

CODE

#define SW2 BIT27
#define LED1 BIT7
int a = 0;

__irq void int_sw(void){
for(int i=0;i<10000;i++)
{}
a=~a;
if(a!=0)
{
*AT91C_PIOA_CODR |= LED1;
}
else
{
*AT91C_PIOA_SODR |= LED1;
}
AT91C_BASE_AIC->AIC_EOICR = AT91C_BASE_PIOA->PIO_ISR;
}

int main(void)
{
InitPeriphery();
InitFrec();

// Initialize interrupts
*AT91C_PIOA_ASR = (1<<SW2);
*AT91C_PIOA_IER = SW2;
*AT91C_PIOA_IMR = SW2;
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_IRQ1] = 0x00;
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_IRQ1] = (unsigned int) int_sw;
AT91C_BASE_AIC->AIC_IECR = (1 << AT91C_ID_IRQ1);
while (1)
{

}
}


Сообщение отредактировал vutang - May 24 2013, 10:15
Go to the top of the page
 
+Quote Post



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

 


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


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