|
Код получения прерывания от RXSETUP на SAM7S |
|
|
|
Nov 20 2009, 08:02
|
Частый гость
 
Группа: Участник
Сообщений: 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 все равно не работает. Вроде бы все указал... Затык. Спасибо.
Причина редактирования: Уменьшение видимого объема цитаты исходника.
|
|
|
|
|
 |
Ответов
|
Nov 25 2009, 04:16
|
Частый гость
 
Группа: Участник
Сообщений: 103
Регистрация: 21-06-09
Пользователь №: 50 494

|
2vmp Спасибо за ссылку. Куча откровений  Цитата(aaarrr @ Nov 23 2009, 10:04)  Вообще-то задолго до RXSETUP случится ENDBUSRES, который этот самый RXSETUP успешно запретит. Это уже стало понятно  В процессе разбирания USB, понял следующее. 1) Подключаем подтяжку к D+, с этого момента хост считает, что устройство присоединено. 2) Хост производит процедуру сброса, после которой возникает флаг ENDBUSRES. В связи с этим следующие вопросы: 1) Я так понимаю, что прерывание ENDBUSRES нигде в регистрах разрешения прерываний не объявляется и прерывание разрешено изначально? 2) Почему-то в моем Keil нет возможности при отладке заглянуть в регистры UDP и в AIC нет регистра прерывания UDP. Это лечится?
|
|
|
|
|
Nov 25 2009, 10:40
|
Гуру
     
Группа: Свой
Сообщений: 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'у не имеет.
|
|
|
|
|
Nov 25 2009, 12:33
|
Частый гость
 
Группа: Участник
Сообщений: 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; } Может я чего-то не понимаю?
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|