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

 
 
 
Reply to this topicStart new topic
> Работа USB через прерывания, Возникает Spurious Interrupt
Shuuura
сообщение Dec 21 2005, 12:37
Сообщение #1


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

Группа: Свой
Сообщений: 80
Регистрация: 23-08-05
Пользователь №: 7 902



Пытаюсь переделать образец с AT91.com для работы через прерывания. В половине случаев при старте возникает Spurious Interrupt. Есть предположение что как-то неправильно включаю превывание от endpoint0. Посмотрите, может кто сталкивался

void UDP_interrupt()
{
AT91_REG isr = pUDP->UDP_ISR;
isr &= pUDP->UDP_IMR;

if (isr & AT91C_UDP_ENDBUSRES) {
pUDP->UDP_ICR = AT91C_UDP_ENDBUSRES;

// reset all endpoints
AT91C_BASE_UDP->UDP_RSTEP = (unsigned int)-1;
AT91C_BASE_UDP->UDP_RSTEP = 0;
// Enable the function
pUDP->UDP_FADDR = AT91C_UDP_FEN;

//__disable_interrupt();
AT91C_BASE_UDP->UDP_CSR[0] = (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_CTRL);
AT91C_BASE_UDP->UDP_IER = (AT91C_UDP_EPINT0);
// __enable_interrupt();
}

if (isr & AT91C_UDP_EPINT0) {
pUDP->UDP_ICR = AT91C_UDP_EPINT0;
AT91F_CDC_Enumerate();
}
};
Go to the top of the page
 
+Quote Post
VslavX
сообщение Dec 21 2005, 17:07
Сообщение #2


embarrassed systems engineer
*****

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



Цитата(Shuuura @ Dec 21 2005, 14:37) *
Пытаюсь переделать образец с AT91.com для работы через прерывания. В половине случаев при старте возникает Spurious Interrupt. Есть предположение что как-то неправильно включаю превывание от endpoint0. Посмотрите, может кто сталкивался

void UDP_interrupt()
{
AT91_REG isr = pUDP->UDP_ISR;
isr &= pUDP->UDP_IMR;
if (isr & AT91C_UDP_ENDBUSRES) {

Помнится в UDP_IMR нету битика AT91C_UDP_ENDBUSRES - сброс шины событие немаскируемое. Соответственно, Ваш обработчик после 'isr & pUDP->UDP_IMR' событие сброса не видит -> ложное прерывание.
Go to the top of the page
 
+Quote Post
Shuuura
сообщение Dec 22 2005, 06:12
Сообщение #3


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

Группа: Свой
Сообщений: 80
Регистрация: 23-08-05
Пользователь №: 7 902



Разобрался, может кому интересно:
В образеце не сбрасывался флаг AT91C_UDP_RX_DATA_BK0, поэтому прерывание генерилось постоянно.
Go to the top of the page
 
+Quote Post

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

 


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


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