Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Работа с банками UDP at91sam7s
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Bulat
Размер конечной точки OUT(ep1) 64. Первая посылка приходит в банк 0, я считываю данные и сбрасываю флаг в регистре CSR. Но вторая посылка приходит в банк 1, хотя данные с хоста посылаются не друг за дружкой. Хост посылает 50 байт девайсу, а потом ждет, пока девайс пришлет ему пакет в ответ, я имею в виду не идентификатор пакета NAK или ACK PID, высылаемый UDP автоматически, а пакет с данными, кот девайс высылает в ответ через ep2. Как отключить использование 2-х банков?
Заранее благодарен!
Bulat
Код обработки прерывания от EP1(out). Этот коди спользует прерключающиеся банки.
Код
if((AT91C_BASE_UDP->UDP_ISR) & AT91C_UDP_EPINT1)                // EP1 Interrupt
           {
    unsigned int packetSize, nbBytesRcv = 0;
    if(pCDC.currentConfiguration)
        {
                if(AT91C_BASE_UDP->UDP_CSR[AT91C_EP_OUT] & pCDC.currentRcvBank)
                       {
            packetSize = AT91C_BASE_UDP->UDP_CSR[AT91C_EP_OUT]>>16;    // EP1
            while(packetSize--) EP1_buf[nbBytesRcv++] = AT91C_BASE_UDP->UDP_FDR[AT91C_EP_OUT];
                        Udp_ep_clr_flag(pUDP,AT91C_EP_OUT, pCDC.currentRcvBank);
            if(pCDC.currentRcvBank == AT91C_UDP_RX_DATA_BK0)pCDC.currentRcvBank = AT91C_UDP_RX_DATA_BK1;
            else                        pCDC.currentRcvBank = AT91C_UDP_RX_DATA_BK0;
            }
        Udp_ep_clr_flag(pUDP, 1, AT91C_UDP_RX_DATA_BK0);
        Udp_ep_clr_flag(pUDP, 1, AT91C_UDP_RX_DATA_BK1);
        }
    length = nbBytesRcv;
    }

Мне нужно использовать только банк 0, т.е. я убираю из кода, приведенного выше
Код
if(pCDC.currentRcvBank == AT91C_UDP_RX_DATA_BK0)pCDC.currentRcvBank = AT91C_UDP_RX_DATA_BK1;
else                                                                              pCDC.currentRcvBank = AT91C_UDP_RX_DATA_BK0;

и pCDC.currentRcvBank у меня всегда равен AT91C_UDP_RX_DATA_BK0. Но в этом случае посылки по 50 байт от хоста у меня принмаются через раз, т.е. одну посылку считываю нормально(приходит то, что нужно), а вместо следающей посылки считываю нули. Т.е. надо переключать банки? А как, тогда с одним банком работать?
aaarrr
Двойная буферизация никак не отключается. Зачем это вообще может понадобиться, не понимаю?
Bulat
Цитата(aaarrr @ Feb 5 2009, 16:19) *
Двойная буферизация никак не отключается. Зачем это вообще может понадобиться, не понимаю?

Просто у меня проблема еще не решена, которую я тут описывал. Я проверил с другим работающим драйвером, аналогичные проблемы. Вот я и подумал, что может из-за двойной буферизации так происходит. Поэтому решил с одним банком попробовать поработать, тем более, что мне его достаточно.
Во втором посте этой темы я написал, что у меня происходит, если я не переключаю банки.
Цитата
Код
Код
if(pCDC.currentRcvBank == AT91C_UDP_RX_DATA_BK0)pCDC.currentRcvBank = AT91C_UDP_RX_DATA_BK1;
else  pCDC.currentRcvBank = AT91C_UDP_RX_DATA_BK0;

и pCDC.currentRcvBank у меня всегда равен AT91C_UDP_RX_DATA_BK0. Но в этом случае посылки по 50 байт от хоста у меня принмаются через раз, т.е. одну посылку считываю нормально(приходит то, что нужно), а вместо следающей посылки считываю нули. Т.е. надо переключать банки? А как, тогда с одним банком работать?

Может где-то еще двойная буферизация отключается?
aaarrr
Цитата(Bulat @ Feb 5 2009, 15:17) *
Может где-то еще двойная буферизация отключается?

Не отключается. Можете воспользоваться для проверки EP3, у которой только один банк.
Bulat
Цитата(aaarrr @ Feb 5 2009, 17:25) *
Не отключается. Можете воспользоваться для проверки EP3, у которой только один банк.

Да, но у меня же драйвер для EP1 и EP2. Мне придется драйвер переделовать. Я в доках на at91sam7s видел пример с использованием одного банка (35.5.2.6 Data OUT Transaction Without Ping-pong Attributes), только там про отключение второго банка ничего не сказано.
aaarrr
Цитата(Bulat @ Feb 6 2009, 06:45) *
Я в доках на at91sam7s видел пример с использованием одного банка (35.5.2.6 Data OUT Transaction Without Ping-pong Attributes), только там про отключение второго банка ничего не сказано.

Потому что он не отключается. И проблем не создает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.