Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
11.01.2011, 20:19
|
|
Частый гость
Регистрация: 09.12.2006
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Вопрос по FT245R
Для подключения к компьютеру некоторого устройства использую микросхему FT245R. С компьютера передаю 5 байт группами по 1 байту.
Нога RXF микросхемы FT245R подключена к одному из входов порта микроконтроллера. Соответственно "0" на этой ноге запускает прерывание в микроконтроллере.
Вопрос в следующем. "0" на RSX появляется только один раз при поступлении в буфер FT245R первого байта и далее уровень на этой ноге не изменяется пока буфер не прочитан? Или как-то иначе? Вообще может кто детально описать алгоритм чтения данных из буфера FT245R? Даташит читал (как смог по английски) - не помогло. Пытаюсь эти 5 байт сложить в одно число и не получается.
|
|
|
|
12.01.2011, 02:01
|
|
Прописка
Регистрация: 02.01.2011
Сообщений: 159
Сказал спасибо: 8
Сказали Спасибо 32 раз(а) в 28 сообщении(ях)
|
Re: Вопрос по FT245R
Из этого как-то не совсем понятно
Цитата:
|
When high, do not read data from the FIFO. When low, there is data available in the FIFO which can be read by strobing RD# low, then high again.
|
можно подумать, что на RXF# будет 0, пока есть данные в буфере.
Но судя по "FT245R FIFO READ Timing Diagrams" из даташита получается, что RXF# должно переходить в 1 после 0-›1 на RD# минимум на 80нс.
Т.е. получается, что ловим прерывание, ставим 0 на RD#, читаем данные, ставим 1 на RD#, выходим. Сразу получаем следующее прерывание и т.д. Ну это, как вариант.
Может быть лучше читать все 5 байт сразу. Но тут еще надо сделать, чтоб не ловить лишнее прерывание при выходе и т.п. Это уже зависит от конкретного уст-ва, как там правильно этот обрабочик написать.
|
|
|
|
12.01.2011, 03:58
|
|
Прописка
Регистрация: 05.03.2010
Сообщений: 173
Сказал спасибо: 28
Сказали Спасибо 70 раз(а) в 49 сообщении(ях)
|
Re: Вопрос по FT245R
вандерфул... такого я на казусе еще не видел...Возможно капча была не зря...
|
|
|
|
12.01.2011, 04:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: Вопрос по FT245R
видать- не помогает и капча... Двойную может сделать?
|
|
|
|
12.01.2011, 05:03
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Вопрос по FT245R
Сообщение от akimych
|
Но судя по "FT245R FIFO READ Timing Diagrams" из даташита получается, что RXF# должно переходить в 1 после 0-›1 на RD# минимум на 80нс.
Т.е. получается, что ловим прерывание, ставим 0 на RD#, читаем данные, ставим 1 на RD#, выходим. Сразу получаем следующее прерывание и т.д
|
Я тоже так думаю, что если есть в FIFO непрочитанные данные, RXF# переходит в ноль и остаётся в нуле. Как только очередной байт прочитан, RXF# прыгает в 1, и если есть ещё данные, то через время не более 80нс снова прыгает в ноль. Видимо, это время 80нс необходимо FT245R для внутреннего сдвига данных в FIFO и принятия решения, все ли данные прочитаны.
То есть читаем байты из FIFO пока RXF#=0, надо только делать паузу не меньше 80нс после чтения и последующей проверкой RXF# на ноль. Старт чтения можно делать по прерыванию, в процедуре обработчика прерывания читаем все данные, проверяя RXF# и сбрасывая флаг установки прерывания перед чтением.
Последний раз редактировалось Yurkin2007; 12.01.2011 в 05:25.
|
|
|
|
12.01.2011, 06:00
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Вопрос по FT245R
Сообщение от ua3gdw
|
С компьютера передаю 5 байт группами по 1 байту.
|
Как пишет производитель микросхем FTDI, по USB данные передаются пакетами, размер пакета 64 байта, из них 2 байта - служебные, 62 байта - собственно данные. Если в USB порт на компьютере записан только 1 байт, то система ждёт время тайм-аут 1мс, и по истечении этого времени передаёт практически пустой пакет с одним байтом данных. На приёмной стороне по приходу пакета нога RXF# прыгает в ноль, после чтения одного байта RXF# перейдёт в единичку и там и останется.
Если Вы успеваете записать 5 байтов в USB порт на компе за время меньшее, чем тайм-аут между записями байтов, то все Ваши байты улетят в одном пакете. По приходу данные сохранятся в FIFO, нога RXF# будет прыгать в ноль соотвественно 5 раз: первый раз по приходу пакета, потом ещё 4 раза после чтения байтов.
Последний раз редактировалось Yurkin2007; 12.01.2011 в 06:07.
|
|
|
|
12.01.2011, 13:56
|
|
Частый гость
Регистрация: 09.12.2006
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Вопрос по FT245R
Сообщение от Yurkin2007
|
На приёмной стороне по приходу пакета нога RXF# прыгает в ноль, после чтения одного байта RXF# перейдёт в единичку и там и останется.
|
С одним байтом так и работает. Сегодня проверил.
Сообщение от Yurkin2007
|
По приходу данные сохранятся в FIFO, нога RXF# будет прыгать в ноль соотвественно 5 раз: первый раз по приходу пакета, потом ещё 4 раза после чтения байтов.
|
Т.е каждый байт как бы стробируется нулём на RXF#?
|
|
|
|
12.01.2011, 15:55
|
|
Заблокирован
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
|
Re: Вопрос по FT245R
Стробируется - неудачное слово. Предположим, Вы послали 5 байтов на устройство, но ни одного байта в Вашем устройстве пока не прочитали. Ждёте, там, чего-то, типа, заняты ... Потом глянули: Ба !, а RXF# нога-то в нуле ! Данные какие-то пришли .. Хорошо, прочитали байт из FT245R. Снова проверили ногу. А она опять в нуле ! Прочитали второй байт .. И так далее, пока нога RXF# не успокоится в единичке ...
|
|
|
|
12.01.2011, 19:10
|
|
Частый гость
Регистрация: 09.12.2006
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Вопрос по FT245R
Ага, спасибо! Пока в буфере есть данные RXF# в нуле. Сегодня поэксперементировал. Послал в МК 5 байт. Далее по "0" на RXF# в цикле пока RXF# = 0 все их прочитал.
Ещё вопрос. Как мне четыре байта из пяти принятых поместить в одну переменную размером в 32Бит? Не часто пишу на С и не силён в сдвигах и логических операциях.
В программе на компьютере переменную на байты раскладываю так:
Код:
|
procedure TafMainForm.RsButton1Click(Sender: TObject);
var
dwData: DWORD;
begin
{ Код команды. }
FT_Out_Buffer[0] := 1;
dwData := StrToIntDef(Edit1.Text, 0);
FT_Out_Buffer[0] := dwData;
{ Четыре байта данных. }
FT_Out_Buffer[1] := dwData;
FT_Out_Buffer[2] := dwData shr 8;
FT_Out_Buffer[3] := dwData shr 16;
FT_Out_Buffer[4] := dwData shr 24;
{ Размер буфера 5 байт. }
Write_USB_Device_Buffer(5);
end; |
|
|
|
|
12.01.2011, 20:52
|
|
Частый гость
Регистрация: 09.12.2006
Сообщений: 12
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Вопрос по FT245R
Делаю вот так:
unsigned long data;
...
data = (usb_data[3] ‹‹ 24) | (usb_data[2] ‹‹ 16) | (usb_data[1] ‹‹ 8 ) | usb_data[0];
Компилятор HI-TECH выдаёт предупреждение о смещении в лишнии 16 Бит.
Микроконтроллер PIC16F72.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:10.
|
|