AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
13.11.2012, 13:58
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: AT89C5131 прием и передача данных по USB
rihkov а как передаешь на точку OUT, покажи
|
|
|
|
13.11.2012, 23:32
|
|
Прописка
Регистрация: 15.06.2006
Адрес: РФ г.Тюмень
Сообщений: 205
Сказал спасибо: 3
Сказали Спасибо 19 раз(а) в 19 сообщении(ях)
|
Re: AT89C5131 прием и передача данных по USB
Что касается стороны ПК то это функции ReadFile() WriteFile() написал программу на C++ Builder6 все работает нормально устройство открывается получаю всю информацию об устройстве, и могу принимать данные с устройства, устройство открываю в режиме чтение/запись, есть реализация как в асинхронном режиме так и в синхронном, но при обращении к функции записи WriteFile() возвращает ошибку 5 (нет доступа).
Код:
|
void main()/*ОСНОВНАЯ ФУНКЦИЯ ПРОГРАММЫ*/
{
Set_x2_mode();
LEDCON = 0x0F;
P3_2 = 1;/*КНОПКА*/
P3_3 = 1;/*ЛАМПА КРАСНАЯ*/
/*P3_4 = 1;/**/
P3_5 = 1;/*ЛАМПА ЗЕЛЕНАЯ*/
P3_6 = 1;/*ЛАМПА ЖЕЛТАЯ*/
usb_init();/*ИНИЦИАЛИЗАЦИЯ USB*/
while(1)
{
usb_endpoint_all();/**/
Fill_EP1_FIFO();/**/
}
} |
Код:
|
/*================================================= ==*/
void usb_endpoint_all()/**/
{
/*=====================================*/
if(usb_connected == 1)/**/
{
Usb_select_ep(0);
if(Usb_setup_received())/*ФЛАГ ПРЕРЫВАНИЯ ПРИ ПОЛУЧЕНИИ ПАКЕТА SETUP*/
{
P3_5 = ~P3_5;/*ЛАМПА ЗЕЛЕНАЯ*/
usb_read_request();/*НАЧАТЬ ПРОЦЕСС НУМЕРАЦИИ (СБРОС ФЛАГА ПАКЕТА SETUP ВНУТРИ ФУНКЦИИ)*/
}
/*=====================================*/
Usb_select_ep(1);/*КОНЕЧНАЯ ТОЧКА 1 (ПЕРЕДАЧА ДАННЫХ В ПК)*/
if(Usb_tx_complete())/*ФЛАГ ПРЕРЫВАНИЯ ПО ОКАНЧАНИИ ПЕРЕДАЧИ ВХОДЯЩИХ ДАННЫХ*/
{
P3_3 = ~P3_3;/*ЛАМПА КРАСНАЯ*/
Usb_clear_tx_complete();/*СБРОС ФЛАГА*/
end_point1_ready = FALSE;/*ГОТОВНОСТЬ К ПЕРЕДАЧЕ ДАННЫХ*/
}
/*=====================================*/
Usb_select_ep(2);/*КОНЕЧНАЯ ТОЧКА 2 (ПРИЕМ ДАННЫХ ОТ ПК)*/
if(Usb_rx_complete())/*БИТ 00000010 ФЛАГ ПРЕРЫВАНИЯ ПРИ ПРИНЯТИИ ИСХОДЯЩИХ ДАННЫХ*/
{
P3_6 = ~P3_6;/*ЛАМПА ЖЕЛТАЯ*/
read_ep2();/**/
}
/*=====================================*/
}
/*=====================================*/
}
/*================================================= ==*/ |
Код:
|
/*================================================= ==*/
void read_ep2()/*ФУНКЦИЯ ПРИЕМА ДАННЫХ ОТ ПК*/
{
data int i;
data unsigned char usb_read_data[8];
Usb_select_ep(2);/**/
ACC = Usb_read_byte();/*ЧТЕНИЕ ДАННЫХ С КОНЕЧНОЙ ТОЧКИ*/
for(i=0; i‹8; i++)
{
usb_read_data[i] = Usb_read_byte();/*ЧТЕНИЕ ДАННЫХ С КОНЕЧНОЙ ТОЧКИ*/
}
if(usb_read_data[1] == 1)
{
/*P3_5 = 0;/*ЛАМПА ЗЕЛЕНАЯ*/
}
if(usb_read_data[1] == 0)
{
/*P3_5 = 1;/*ЛАМПА ЗЕЛЕНАЯ*/
}
Usb_clear_rx();/*СБРОС (ФЛАГ ПРЕРЫВАНИЯ ПРИ ПРИНЯТИИ ИСХОДЯЩИХ ДАННЫХ)*/
}
/*================================================= ==*/ |
__________________
Николай
|
|
|
|
14.11.2012, 10:27
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: AT89C5131 прием и передача данных по USB
блин. функцию записи в OUT из билдера так и не покажешь?
|
|
|
|
15.11.2012, 01:09
|
|
Прописка
Регистрация: 15.06.2006
Адрес: РФ г.Тюмень
Сообщений: 205
Сказал спасибо: 3
Сказали Спасибо 19 раз(а) в 19 сообщении(ях)
|
Re: AT89C5131 прием и передача данных по USB
Код:
|
//---------------------------------------------------------------------------
//СИНХРОННАЯ ЗАПИСЬ ДАННЫХ
void __fastcall TForm1::Button8Click(TObject *Sender)
{
BufferDataWrite[0] = 0x00;
BufferDataWrite[1] = 0x01;
BufferDataWrite[2] = 0x01;
BufferDataWrite[3] = 0x01;
BufferDataWrite[4] = 0x01;
BufferDataWrite[5] = 0x01;
BufferDataWrite[6] = 0x01;
BufferDataWrite[7] = 0x01;
DWORD BytesLengthWrite = 8;
//---------------------------------
if(WriteFile(HidHandle, BufferDataWrite, BytesLengthWrite, &BytesWrite, 0) != 0)//СИНХРОННАЯ ЗАПИСЬ ДАННЫХ
{
PrintData(BufferDataWrite);
Memo1-›Lines-›Add("ЗАПИСАНО БАЙТ");
Memo1-›Lines-›Add(BytesWrite);
//CloseHandle(HidHandle);//ЗАКРЫТЬ ХЕНДЕЛ УСТРОЙСТВА
}
else
{
Memo1-›Lines-›Add("Ошибка чтения WriteFile");
Memo1-›Lines-›Add(GetLastError());
//GetLastError()
if(HidHandle != 0)
{
CloseHandle(HidHandle);//ЗАКРЫТЬ ХЕНДЕЛ УСТРОЙСТВА
Memo1-›Lines-›Add("ХЕНДЕЛ УСТРОЙСТВА ЗАКРЫТ!");
}
}
//----------------------------------
}
//--------------------------------------------------------------------------- |
Код:
|
//---------------------------------------------------------------------------
void __fastcall MyThread1::StartDataWrite()
{
//-------------------------------------------------------------------------
memset(&WriteOL, 0, sizeof(WriteOL));
WriteOL.hEvent = CreateEvent(NULL, TRUE, TRUE, NULL);
if(WriteOL.hEvent)
{
if(WriteFileEx(HidHandle, BufferDataWrite, BytesLengthWrite, (LPOVERLAPPED) &WriteOL, (LPOVERLAPPED_COMPLETION_ROUTINE) OnCompletionWrite))
{
//---------------------------------
Form1-›PrintData(BufferDataWrite);
Form1-›Memo1-›Lines-›Add("ЗАПИСАНО");
Form1-›Memo1-›Lines-›Add("ЗАПИСАНО");
//---------------------------------
//CloseHandle(HidHandle);
//CloseHandle(WriteOL.hEvent);
// Операция завершена успешно
//---------------------------------
//WriteUSB = 0;
//---------------------------------
}
else
{
Form1-›Memo1-›Lines-›Add("Ошибка асинхронной записи WriteFile");
CloseHandle(HidHandle);
CloseHandle(WriteOL.hEvent);
//---------------------------------
WriteUSB = 0;
//---------------------------------
}
}
else
{
Form1-›Memo1-›Lines-›Add("Ошибка CreateEvent");
CloseHandle(HidHandle);
CloseHandle(WriteOL.hEvent);
}
}
//--------------------------------------------------------------------------- |
|
|
|
|
15.11.2012, 08:16
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: AT89C5131 прием и передача данных по USB
по идее, если у тебя размер репорта = 8 байт (судя по "for(i=0; i‹8; i++)"), при записи в WriteFile ты должен слать 9 байт, где 0 байт содержит индекс точки OUT (обычно 0). при этом слать можно только 1 репорт за вызов. у тебя так? (как у тебя описаны репорты и вообще дескрипторы - не видно)
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:40.
|
|