реклама на сайте
подробности

 
 
> использование управления потоком FT232BM, помогите разобраться
showone
сообщение May 11 2007, 06:22
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 15-07-05
Пользователь №: 6 832



устройство на контроллере подключается через FT232BM к USB.
задача периодически пополнять внутренний буфер контроллера.
контроллер управляет медленным устройством.

поэтому если кидать данные без управления потоком, они теряются.
если с управлением потока, то вроде все нормально. но иногда все же теряется 1-4 байта.

использую DSR-DTR

делаю так.
в микроконтроллере.

interrupt [USART_RXC] void usart_rx_isr(void)
{
char status;
DSR=1;
status=UCSRA;
rx_d=UDR;
rx_b=1;
//DSR=0;
}

main()
{
while(1)
{
if (rx_b)
{
rx_b=0;
get_ser();
}
}
}

void get_ser(void)
{
// обрабатываю полученный байт, заполнение буфера
delay_ms(500); // задержка, вроде как устройство занято. если эту задержку убрать, то вроде как работает, но с ней, байты теряются, из 20 посланных 1-2 теряются.
DSR=0;
}


на Delphi


procedure wait_tx;
begin
repeat
Get_USB_Device_ModemStatus;
Application.ProcessMessages;
until (FT_Modem_Status and $00000020) = $00000020;
end;


..........................



if Open_USB_Device<>FT_OK then begin exit; end;
Reset_USB_Device;
FT_Current_Baud:=FT_BAUD_38400;
Set_USB_Device_BaudRate;

FT_Current_FlowControl:=FT_FLOW_DTR_DSR;
FT_XON_Value:=0;
FT_XOFF_Value:=0;
if Set_USB_Device_FlowControl<>FT_OK then showmessage('Set_USB_Device_FlowControl');

Purge_USB_Device_Out;
Purge_USB_Device_IN;


...............

for i:=1 to n do
begin
for j:=0 to 100 do FT_Out_Buffer[j]:=mas[j];
wait_tx; // ждем разрешения DSR
Write_USB_Device_Buffer(100);
end;



т.е. я выдаю в порт по 100 байт.
как мне точно узнать что все 100 байт переданы и можно передавать следующие ?


пробовал передавать по одному байту, тоже теряются байты.


может есть где пример как правильно, или кто что может посоветует.
заранее спасибо.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 06:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01367 секунд с 7
ELECTRONIX ©2004-2016