Сделал устройство FT232BM + ATMega8535.
Работают на скорости 0.5 Mbit (такт МК 4MHz).
Когда связь идет без аппаратного flow control - все идеально. Только на больших объемах данных (порядка 10кб от МК в компза одно обращение) глохнет.
Сделал flow control CTS/RTS:
Код
// прием байта из USART
byte uartBufferGetchar ( void )
{
byte data;
RTS = 1; // МК готов к приему
// ждем прихода символа
// Если UCSRA.RXC == 0 - символа нет
while ( UCSRA.RXC == 0 );
// считать принятый байт из регистра данных USART
data = UDR;
RTS = 0; // МК не готов к приему
return data;
} // uartBufferGetchar
// передача байта в USART
void uartBufferPutchar ( byte c )
{
// ждать опустошения буфера передатчика
while ( UCSRA.UDRE == 0 );
// ждать готовности FT232BM
// CTS == 1 - FT232BM готова к приему, 0 - не готова;
while ( CTS == 0 );
UDR = c;
} // uartBufferPutchar
Реакции - ноль.
FT232 конфигурируется так:
Код
// RTS/CTS flow control
ftStatus = FT_SetFlowControl ( ftHandle, FT_FLOW_RTS_CTS, 0, 0 );
if ( ftStatus != FT_OK )
{
FT_Close ( ftHandle );
printf ( "FT_SetFlowControl failed \n" );
return 1;
} // if
В чем беда? Не пойму.
Смотрел примеры, вроде также...
Еще одна трабла непонятная.
Когда к девайсу не обращаешься минут 20 (примерно, точно не засекал), оно не отвечает.
FT_OpenEx/FT_Open дает ошибку.
Приходится отключать и повторно включать USB разъем.
Это что все USB девайсы такие? у меня есть USB-мыша. Тоже отключается. только не через 20 мин, а когда как.
На FT стоит EEPROM. Питание от шины.
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда