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

 
 
> Код получения прерывания от RXSETUP на SAM7S
Shaienn
сообщение Nov 20 2009, 08:02
Сообщение #1


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

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



Добрый день. Посмотрите пожалуйста код. Ожидается, что при получении Control пакета возникнет бит RXSETUP и будет вызвано прерывание isrUDP, но в прерывание не заходит.

CODE
#include <AT91SAM7S256.H> /* AT91SAMT7S64 definitions */
#include <lib_AT91SAM7S256.h>
/*
* Main Program
*/
int i;
__irq void isrUDP(void)
{
unsigned int status = AT91C_BASE_UDP->UDP_ISR;
AT91PS_UDP pUDP = AT91C_BASE_UDP;
AT91_REG isr = pUDP->UDP_ISR;
AT91_REG csr = pUDP->UDP_CSR[0]; //rejestr csr endpointu 0
if (isr&AT91C_UDP_EPINT0)
{
if (i)
{
AT91C_BASE_PIOA->PIO_SODR = 1;
i = 0;
}
else
{
AT91C_BASE_PIOA->PIO_CODR = 1;
i = 1;
}
}
AT91C_BASE_UDP->UDP_CSR[0] = (0<<AT91C_UDP_RXSETUP);
AT91C_BASE_AIC->AIC_EOICR = status;
}

int main (void) {
AT91C_BASE_PIOA->PIO_PER = (1 << AT91C_PIO_PA0);
AT91C_BASE_PIOA->PIO_OER = 0x00000001;
AT91C_BASE_PMC->PMC_PCER = (1UL << AT91C_ID_PIOA);

// Set the PLL USB Divider
AT91C_BASE_CKGR->CKGR_PLLR |= AT91C_CKGR_USBDIV_1;
AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_UDP; //Разрешили частоту на UDP
AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_UDP);

AT91C_BASE_UDP->UDP_RSTEP = (1 << 0);
AT91C_BASE_UDP->UDP_RSTEP = 0;
AT91C_BASE_UDP->UDP_CSR[0] = AT91C_UDP_EPTYPE_CTRL;
AT91C_BASE_UDP->UDP_CSR[0] = AT91C_UDP_EPEDS;

// Enable UDP PullUp (USB_DP_PUP) : enable & Clear of the corresponding PIO
// Set in PIO mode and Configure in Output
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,AT91C_PIO_PA16);
// Clear for set the Pul up resistor
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA16);

AT91C_BASE_UDP->UDP_IMR = AT91C_UDP_ENDBUSRES|AT91C_UDP_EPINT0;
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_UDP] = (unsigned int)isrUDP;
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_UDP] = 6;
AT91C_BASE_AIC->AIC_IECR = (1UL << AT91C_ID_UDP);

// Loop forever
for (;;)
{
}
}


При чтении состояния регистра UDP_ISR в главном цикле без прерывания при данных настройках возвращает 0x00000100 (хотя должен 0x00000001). смотрю через дебаггер ulink. При замене AT91C_UDP_EPINT0 на AT91C_UDP_EPINT2 все равно не работает.

Вроде бы все указал... Затык.


Спасибо.
Причина редактирования: Уменьшение видимого объема цитаты исходника.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Shaienn
сообщение Nov 25 2009, 04:16
Сообщение #2


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

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



2vmp
Спасибо за ссылку. Куча откровений smile.gif

Цитата(aaarrr @ Nov 23 2009, 10:04) *
Вообще-то задолго до RXSETUP случится ENDBUSRES, который этот самый RXSETUP успешно запретит.

Это уже стало понятно smile.gif


В процессе разбирания USB, понял следующее.

1) Подключаем подтяжку к D+, с этого момента хост считает, что устройство присоединено.
2) Хост производит процедуру сброса, после которой возникает флаг ENDBUSRES.

В связи с этим следующие вопросы:
1) Я так понимаю, что прерывание ENDBUSRES нигде в регистрах разрешения прерываний не объявляется и прерывание разрешено изначально?
2) Почему-то в моем Keil нет возможности при отладке заглянуть в регистры UDP и в AIC нет регистра прерывания UDP. Это лечится?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 25 2009, 10:40
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Shaienn @ Nov 25 2009, 07:16) *
1) Я так понимаю, что прерывание ENDBUSRES нигде в регистрах разрешения прерываний не объявляется и прерывание разрешено изначально?

Да.

Цитата(Shaienn @ Nov 25 2009, 07:16) *
2) Почему-то в моем Keil нет возможности при отладке заглянуть в регистры UDP и в AIC нет регистра прерывания UDP. Это лечится?

Регистр прерывания UDP никакого отношения к AIC'у не имеет.
Go to the top of the page
 
+Quote Post
Shaienn
сообщение Nov 25 2009, 12:33
Сообщение #4


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

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



Цитата(aaarrr @ Nov 25 2009, 14:40) *
Регистр прерывания UDP никакого отношения к AIC'у не имеет.


Хм, а вот в этой штуке
Цитата
AT91SAM7S-EK Software Package for IAR 5.2, Keil and GNU (37 MB, updated 12/08)
This package provides software drivers and libraries to build any application for AT91SAM7S devices.

прерывание UDP делается через AIC:
Код
    AIC_ConfigureIT(AT91C_ID_UDP, 0, USBD_InterruptHandler);
    AIC_EnableIT(AT91C_ID_UDP);


А сами функции:
Код
void AIC_ConfigureIT(
    unsigned int source,
    unsigned int mode,
    void (*handler)(void))
{
    // Disable the interrupt first
    AT91C_BASE_AIC->AIC_IDCR = 1 << source;

    // Configure mode and handler
    AT91C_BASE_AIC->AIC_SMR[source] = mode;
    AT91C_BASE_AIC->AIC_SVR[source] = (unsigned int) handler;

    // Clear interrupt
    AT91C_BASE_AIC->AIC_ICCR = 1 << source;
}


Может я чего-то не понимаю?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Nov 25 2009, 14:12
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Shaienn @ Nov 25 2009, 15:33) *
Может я чего-то не понимаю?

В AIC заводится только сигнал прерывания UDP, точно так же, как и сигналы другой периферии. Какой "регистр прерывания UDP" вы хотите там увидеть?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Shaienn   Код получения прерывания от RXSETUP на SAM7S   Nov 20 2009, 08:02
- - vmp   Почему бы не взять за основу какой-нибудь атмеловс...   Nov 20 2009, 08:46
- - sergeeff   Глобальная переменная i первоначально не инициализ...   Nov 20 2009, 10:50
- - Shaienn   ЦитатаПочему бы не взять за основу какой-нибудь ат...   Nov 20 2009, 11:00
|- - vmp   Цитата(Shaienn @ Nov 20 2009, 14:00) Я бы...   Nov 20 2009, 11:04
- - aaarrr   Цитата(Shaienn @ Nov 20 2009, 11:02) Ожид...   Nov 23 2009, 07:04
|- - Shaienn   Цитата(aaarrr @ Nov 25 2009, 18:12) В AIC...   Nov 25 2009, 14:18
- - Shaienn   Здравствуйте. Поправьте меня в процессе отправки ...   Nov 29 2009, 15:51
|- - aaarrr   Цитата(Shaienn @ Nov 29 2009, 18:51) Поче...   Nov 29 2009, 17:51
- - Shaienn   RE: Код получения прерывания от RXSETUP на SAM7S   Nov 30 2009, 11:12
- - aaarrr   Код, я бы сказал, малость раздутый. Поле size дейс...   Nov 30 2009, 11:56
- - Shaienn   Вот функция конфигурирования конечной точки. Для н...   Nov 30 2009, 12:10
|- - aaarrr   Цитата(Shaienn @ Nov 30 2009, 15:10) Для ...   Nov 30 2009, 12:37
- - Shaienn   Уважаемый aaarrr, изучил тему с Вашим участием. По...   Dec 1 2009, 12:37
|- - aaarrr   Цитата(Shaienn @ Dec 1 2009, 15:37) Но та...   Dec 1 2009, 12:48
- - Shaienn   Ага спасибо. Процесс дошел до получения дескриптор...   Dec 1 2009, 14:14
|- - aaarrr   Цитата(Shaienn @ Dec 1 2009, 17:14) Или н...   Dec 1 2009, 14:21
- - Shaienn   2aaarrr Ок. Устройство распознается windows как не...   Dec 2 2009, 15:11
- - aaarrr   На запрос конфигурации Вы должны отправить все сра...   Dec 2 2009, 15:46
- - Shaienn   А SET_CONFIGURATION приходит после того, как я уст...   Dec 4 2009, 12:05
- - aaarrr   После.   Dec 4 2009, 12:37
- - Shaienn   Добрый день. Продолжаю свою эпопею. Собрал в Driv...   Dec 9 2009, 15:59
- - Shaienn   Добрый день. После небольшой паузы возвращаюсь к э...   Jan 9 2010, 15:37
|- - aaarrr   Цитата(Shaienn @ Jan 9 2010, 18:37) а) В ...   Jan 9 2010, 15:54
- - Shaienn   Добрый день. Написал такой тестовый код: Кодunsig...   Jan 11 2010, 04:23
- - aaarrr   Цитата(Shaienn @ Jan 11 2010, 07:23) Поче...   Jan 11 2010, 11:22


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

 


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


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