Добрый день. После небольшой паузы возвращаюсь к этой задаче.
Используя WinDriver собрал драйвер для устройства и сейчас пытаюсь отправить что-то с микроконтроллера в windows.
написал следующую функцию:
Код
unsigned char Send64BytePacket(unsigned char EndpointNum, const void *pData)
{
unsigned int Length;
//Подготовка данных
if((AT91C_BASE_UDP->UDP_CSR[EndpointNum] & AT91C_UDP_TXPKTRDY)==0)
{
Length = sizeof(pData);
if (Length%Endpoint[EndpointNum].size == 0)
{
Endpoint[EndpointNum].options = SEND_ZERO_LENGTH_PKT;
}
Endpoint[EndpointNum].remaining = Length;
Endpoint[EndpointNum].pData = (void *)pData;
//Процесс передачи
while(Endpoint[EndpointNum].remaining!=0)
{
unsigned int status = AT91C_BASE_UDP->UDP_CSR[EndpointNum];
if ((status & AT91C_UDP_TXPKTRDY) == 0)
{
if (Endpoint[EndpointNum].remaining != 0) //Не все данные переданы
{
USB_WriteFIFO(EndpointNum);
CLEAR_CSR(EndpointNum,AT91C_UDP_TXCOMP);
}
else
{
if (Endpoint[EndpointNum].options == SEND_ZERO_LENGTH_PKT)
{
LED_Toggle(0);
USB_PrepareTransfer(EndpointNum,0,0);
Endpoint[EndpointNum].options =0;
}
CLEAR_CSR(EndpointNum,AT91C_UDP_TXCOMP);
}
}
}
}
return 1;
}
В сниффере WinDriver`a ничего не вижу, в связи с этим пара вопросов:
а) В результате начальных действий устройство стоит в сконфигурированном состоянии.
Чтобы мне начать пересылку, мне нужно записать данные в FIFO и выставить флаг TXPKTRDY? Т.е. микроконтроллер начинает пересылку с момента появление флага TXPKTRDY в соответствующем UDP_CSR?
б) Посмотрите пожалуйста на дескриптор конечной точки на передачу к хосту:
Код
{
sizeof(USBEndpointDescriptor),
USBGenericDescriptor_ENDPOINT,
(((0 & 0x01) << 7) | (2 & 0xF)),
2,
0x40,
0x00 // Does not apply to Bulk endpoints
}
и на инициализацию этой конечной точки:
Код
static void ConfigureEndpoint1(void)
{
const int EndpointNum = 1;
AT91C_BASE_UDP->UDP_RSTEP = AT91C_UDP_EP1;
AT91C_BASE_UDP->UDP_RSTEP = 0;
Endpoint[EndpointNum].size=64;
SET_CSR(1,(unsigned int)AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_OUT);
AT91C_BASE_UDP->UDP_FADDR = AT91C_UDP_FEN;
}
Не напортачил ли я где?
Заранее спасибо