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

 
 
> SPI at91sam7s, как правильно выйти из прерывания?
SavageForest
сообщение Jul 8 2010, 04:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-12-09
Пользователь №: 54 010



есть проблема. SPI на выдачу работает нормально, но как только создаю прерывание по появлению данных в RDR регистре все зависает по окончанию выполнения функции, вектор которой прописан в регистре AIC_SVR для AT91C_ID_SPI c нулевым приоритетом.
по идее нужно указать точку окончания команды прерывания записав в AIC_EOICR соответствующий бит и сбросить команды прерывания записью бита в AIC_ICCR. вроде все сделал как описано в мануале, но один фиК после выполнения команды прерывания МК зависает и чегото там ждет, вот только чего???

код инициализации прерывания:
Код
AIC_ConfigureIT(AT91C_ID_SPI, 0, ISR_SPI);
*AT91C_SPI_IER  = AT91C_SPI_RDRF;
AIC_EnableIT(AT91C_ID_SPI);


код вызываемой функции:
CODE
void ISR_SPI(void)
{
unsigned int status;
// *AT91C_SPI_IDR = AT91C_SPI_RDRF;
status = dwSPITemp = (*AT91C_SPI_SR & 0xff);

if (((status & AT91C_SPI_RDRF) != 0))
{

dwSPITemp = *AT91C_SPI_RDR; // dwSPITemp (UINT32)

*AT91C_AIC_EOICR = 0xffffffff; // на всякий случай все регистры обнуляю
*AT91C_AIC_ICCR = 0xffffffff;

// AIC_ConfigureIT(AT91C_ID_SPI, 0, ISR_SPI);
// *AT91C_SPI_IER = AT91C_SPI_RDRF;
// AIC_EnableIT(AT91C_ID_SPI);
}
}


как видно, пробовал заново сконфигурировать прерывание и вырубать прерывание на момент выполнения функции. результат один - стопорится и все тут =(.
подскажите пожалуйста где ошибка и куда копать. может как новичок гдето делаю "глобальную" ошибку?
Go to the top of the page
 
+Quote Post



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

 


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


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