|
|
  |
SAM7x256 & USB |
|
|
|
Oct 29 2009, 17:19
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(aaarrr @ Oct 30 2009, 00:12)  Жжоте напалмом!  Спасибо Цитата(aaarrr @ Oct 30 2009, 00:12)  Код w_val = (AT91C_BASE_UDP->UDP_FDR[0] & 0xFF); w_val = (AT91C_BASE_UDP->UDP_FDR[0] << 8); Ну и что будет в w_val? получили младший байт, затем старший...
--------------------
|
|
|
|
|
Oct 29 2009, 17:29
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(aaarrr @ Oct 30 2009, 00:20)  Еще присутствует косяк с передачей дескрипторов: если длина кратна размеру буфера, то в конце нужно передать ZLP, а в вашей реализации этого не делается. Ну, ко всяким прочим "мелочам" придираться не буду, ладно уж  Ну код то отладочный пока, про нулевые пакеты в конце кратной передачи я в курсе. Так какой диагноз то, доктор? Цитата(aaarrr @ Oct 30 2009, 00:22)  ...и старшим перетерли младший. Неужели не видите??? Аааааааааааа.... шайтан... Все, заработало... aaarrr - Я Ваш должник по жизни
--------------------
|
|
|
|
|
Oct 30 2009, 01:22
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 28-03-07
Пользователь №: 26 559

|
Цитата(prottoss @ Oct 30 2009, 01:30)  Курю даташиты и тупо ... Большая просьба к форумчанам, не использовать подобного рода штампы (скрытая пропаганда курения!!!), при описании интеллектуальной работы с документацией.
|
|
|
|
|
Oct 31 2009, 03:23
|
Участник

Группа: Свой
Сообщений: 73
Регистрация: 17-10-07
Из: Киев
Пользователь №: 31 422

|
Цитата(aaarrr @ Oct 30 2009, 00:10)  Использование такого вот макроса при разрешенных прерываниях может вызвать феерический глюкодром: ..... #define UDP_CLEAREPFLAGS(pUsb, bEndpoint, dFlags) { \ ..... А можно по подробнее пожалуйста, где такое чудо встречается? Я в USB Framework не нашел такого макроса..
|
|
|
|
|
Oct 31 2009, 05:51
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(overloaded @ Oct 31 2009, 10:23)  А можно по подробнее пожалуйста, где такое чудо встречается? Я в USB Framework не нашел такого макроса.. Код /* Clear flags of UDP UDP_CSR register and waits for synchronization */ #define UDP_EP_CLR_FLAG(ep, f) { AT91C_BASE_UDP->UDP_CSR[ep] &= ~(f); while(AT91C_BASE_UDP->UDP_CSR[ep] & (f)); }
/* Set flags of UDP UDP_CSR register and waits for synchronization */ #define UDP_EP_SET_FLAG(ep, f) { AT91C_BASE_UDP->UDP_CSR[ep] |= (f); while((AT91C_BASE_UDP->UDP_CSR[ep] & (f)) != (f)); } Выдержка из даташита на SAM7X (В других AT91, имеющих на борту блок UDP) Цитата WARNING: Due to synchronization between MCK and UDPCK, the software application must wait for the end of the write operation before executing another write by polling the bits which must be set/cleared. //! Clear flags of UDP UDP_CSR register and waits for synchronization #define Udp_ep_clr_flag(pInterface, endpoint, flags) { \ pInterface->UDP_CSR[endpoint] &= ~(flags); \ while ( (pInterface->UDP_CSR[endpoint] & (flags)) == (flags) ); \ } //! Set flags of UDP UDP_CSR register and waits for synchronization #define Udp_ep_set_flag(pInterface, endpoint, flags) { \ pInterface->UDP_CSR[endpoint] |= (flags); \ while ( (pInterface->UDP_CSR[endpoint] & (flags)) != (flags) ); \ } Note: In a preemptive environment, set or clear the flag and wait for a time of 1 UDPCK clock cycle and 1peripheral clock cycle. How- ever, RX_DATA_BLK0, TXPKTRDY, RX_DATA_BK1 require wait times of 3 UDPCK clock cycles and 3 peripheral clock cycles before accessing DPR.
--------------------
|
|
|
|
|
Oct 31 2009, 14:59
|
Участник

Группа: Свой
Сообщений: 73
Регистрация: 17-10-07
Из: Киев
Пользователь №: 31 422

|
Это я какраз видел.. И этот насколько я понимаю нормальный в отличии от того что привел aaarrr(там постоянно пишем регистр а не раз записали и ждем его изменения). Вот и интересно где тот вариант встречается).
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|