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

 
 
> AT91SAM7S64, Обработчик FIQ на asm (WinARM)
_4afc_
сообщение May 19 2006, 12:15
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Не удаётся заставить правильно работать обработчик FIQ, если он написан на ассемблере.
Такое впечатление, что прерывание после работы не сбрасывается.

Тестировал так - на ногу FIQ подал меандр, с PA0 жду результата.
Если подключить сишный обработчик:
Код
void FIQ_handlerC( void )
{
AT91PS_PIO pPio;
int dummy;

pPio=AT91C_BASE_PIOA;
dummy =AT91C_BASE_PIOA->PIO_ISR;
dummy=dummy;

pPio->PIO_SODR = LED1;
pPio->PIO_CODR = LED1;
}

то всё работает (через 1мкС после спада меандра появляется короткий пик на PA0).

Если же я в файле Cstartup.S переписываю функцию fiqvec на свою(адрес 0x1C):
Код
fiqvec:                                           
ldr    r8, =0xFFFFF400    //AT91C_BASE_PIOA=0xFFFFF400
ldr    r9, [r8, #0x4C]    //PIO_ISR=0x4c
mov    r9, #1        
str    r9, [r8, #0x30]    //PIO_SODR=0x30    
str    r9, [r8, #0x34]    //PIO_CODR=0x34
subs    pc, lr, #4


то пики на PA0 появляются через каждые 0.7мкС.

Не пойму - то-ли я некорректно выхожу из обработчика, то-ли плохо сбрасываю прерывание?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:52
Рейтинг@Mail.ru


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