Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Com порт с нестандартной скоростью, не получается задать нестандартную 
:(
    Опции темы
takedo
Дата 9.9.2005, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



Кто знает, как проинициализировать com порт на работу с нестандартной частотой? Не CBR_115200 а, например, 100000.
Делал через DCB dcb; dcb.BaudRate = 100000, но функция SetCommState(m_hComm, &dcb); возвращает 0, что говорит о том, что на такой скорости порт не проинициализирован. smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Snowy
Дата 9.9.2005, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Нестандартную скорость задать нельзя, т.к. она определяется целочисленным делителем.
нельзя разделить 115200 на целое число так, чтобы получилось 100000.
PM MAIL   Вверх
takedo
Дата 9.9.2005, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



очень это плохо. Это особенности WIndows?


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Snowy
Дата 9.9.2005, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Насколько мне известно, это технологическая особенность COM порта.
То есть от операционной системы не зависит.
PM MAIL   Вверх
takedo
Дата 9.9.2005, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



а вот рядом со мной программируют самодельную плату в которую я буду посылать запросы, так вот там нет никакой разницы с какой скоростью вести передачу, так что это не оособенности порта, а что то другое... А ведь очень бы хотелось попробовать поработать с нестандартной скоростью smile
Добавлено @ 12:04
самодельную - неправильно выразился, собственной разработки.


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
maxim1000
Дата 9.9.2005, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



Цитата
а вот рядом со мной программируют самодельную плату в которую я буду посылать запросы, так вот там нет никакой разницы с какой скоростью вести передачу, так что это не оособенности порта, а что то другое... А ведь очень бы хотелось попробовать поработать с нестандартной скоростью

я работал с несколькими процессорами, в том числе и нестандартными
ни разу не встретил COM-порта, скорость которого не задавалась бы делителем какой-то внешней smile
на самом деле, весь вопрос в том, какая частота подается COM-порт и используется для деления
в стандартном варианте - 115200, насколько я члышал, только для совместимости
в некоторых и до мегабитов бывает (кстати, был у нас переходничок один - USB-COM - полволял работать на мегабите)
так вот...
когда заказывается скорость для COM-порта, выбирается ближайший делитель
чаще всего получается, что скорость отличается от той, которая нужна
все зависит от этого отклонения
если основная частота значительно больше, то скорость может быть задана довольно точно
если нужная частота приближается к основной - начинаются проблемы
например: заказано 100000, а основная - 115200
ближайший делитель 1, погрешность 15% - плохо
а вот если заказать 10000 (в 10 раз меньше), ближайший делитель 12, погрешность 4% - уже лучше
с другой стороны на основной частоте 1М оба варианта давали бы хороший результат

небольшие отклонения частоты допустимы, но когда они првышают некоторый порог, просто нет смысла настраивать COM-порт на эту частоту - ничего работать не будет, поэтому, наверное, Windows и говорит, что нельзя...


--------------------
qqq
PM WWW   Вверх
Snowy
Дата 9.9.2005, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Ей-то конечно все равно, не все равно ком-порту.
Его возможности ограничены делителем.
Можно конечно попробовать применять какие-нить хитрые делители, но конечный набор все равно фиксирован. И это именно набор, а не произвольное число.
Если предельная скорость для ком порта установлена в 921600, то конечный набор значительно больше.

Цитата(takedo @ 9.9.2005, 11:10)
SetCommState(m_hComm, &dcb); возвращает 0

Она всегда проверяет указанный бадрейт. Если никакой делитель не подходит, то ошибка.
PM MAIL   Вверх
maxim1000
Дата 9.9.2005, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



о... кстати, нашел похожую темку...
http://forum.vingrad.ru/index.php?showtopic=35134&hl=com
Добавлено @ 12:26
Цитата
И это именно набор, а не произвольное число

насколько мне известно, это - именно произволное число smile


--------------------
qqq
PM WWW   Вверх
Snowy
Дата 9.9.2005, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Цитата(maxim1000 @ 9.9.2005, 12:25)
насколько мне известно, это - именно произволное число

Вобщем-то да. Просто число должно быть целым.
Если в качестве предела считать 300 бод (хотя, насколько я помню, это даже не если), то в итоге получаем конечный набор допустимых делителей. Я это имел ввиду.
Кроме того, набор все равно ограничен количеством бит в делителе smile
PM MAIL   Вверх
Guest
Дата 9.9.2005, 14:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











maxim1000 У меня со стопами не возникло проблем. Проблема в том, что порт не ХОЧЕТ инициализироваться на нестандартной частоте. SetCommState возвращает 0.
Snowy Очевидно, что у ком порта нет ограничения. Ограничен WINAPI!?
Так и чего делать? сухари что-ли посушить?
  Вверх
takedo
Дата 9.9.2005, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



maxim1000 У меня со стопами не возникло проблем. Проблема в том, что порт не ХОЧЕТ инициализироваться на нестандартной частоте. SetCommState возвращает 0.
Snowy Очевидно, что у ком порта нет ограничения. Ограничен WINAPI!?
Так и чего делать? сухари что-ли посушить?
Добавлено @ 14:19
Кто то знает где и как задать вопрос в микрософт? smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Snowy
Дата 9.9.2005, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Цитата(takedo @ 9.9.2005, 14:16)
Проблема в том, что порт не ХОЧЕТ инициализироваться на нестандартной частоте. SetCommState возвращает 0.

Опять 25...
Цитата(takedo @ 9.9.2005, 14:16)
Snowy Очевидно, что у ком порта нет ограничения. Ограничен WINAPI!?

Ну-ну. Я съем свою шляпу, если ты выставишь ком порту 100000 не изобретая свою UART.

В DOS тоже нельзя. А там это делается напрямую обращаясь к порту.
По линуксам я не спец, но уверен, что и там та же картина.
Добавлено @ 14:25
Цитата(takedo @ 9.9.2005, 14:16)
Кто то знает где и как задать вопрос в микрософт?

А ты денежки за винду заплатил?
Или ты подписчик MSDN?
Или оффициальный партнер M$?
PM MAIL   Вверх
maxim1000
Дата 9.9.2005, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



Цитата
maxim1000 У меня со стопами не возникло проблем. Проблема в том, что порт не ХОЧЕТ инициализироваться на нестандартной частоте. SetCommState возвращает 0.

там дальше в теме тоже обсуждается процесс задания частоты для COM-порта и допустимые погрешности...
Цитата
Очевидно, что у ком порта нет ограничения

очевидные вещи - опасная штука smile
а откуда это очевидно?

Это сообщение отредактировал(а) maxim1000 - 9.9.2005, 14:30


--------------------
qqq
PM WWW   Вверх
Dreamer_0x01
Дата 9.9.2005, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 12



Не знаю как в винде, тут я использую стандартные скорости.
Но большей частью я как раз программирую микроконтроллеры, где скорость порта я задаю сам с помощью одного из таймеров. А число задаваемое в таймер, я считаю, исходя из частоты кварца.
И получается как раз что мне надо в моем устройстве подстаиваться под стандартную скорость порта, ну никак не в винде под нестндартную.
Почему бы вашим программистам вашей платы не сделать все так, как это принято, а не извращаться подобным образом? Для чего вам нестандартные скорости? Стоит ли это того?


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
takedo
Дата 12.9.2005, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



Dreamer_0x01
А для того, чтобы защитить данные. Вообще - то разговор у нас такой: "А не ху..о было бы сделать на нестрадартной частоте", - "Да, было бы хорошо, если в Винде можно." smile
Snowy
Цитата
А ты денежки за винду заплатил?
Или ты подписчик MSDN?

Да, а если было бы и нет, это поменяет адрес по которому нужно обратиться??? smile
Добавлено @ 06:48
Snowy

Цитата
Ну-ну. Я съем свою шляпу, если ты выставишь ком порту 100000 не изобретая свою UART.

В DOS тоже нельзя. А там это делается напрямую обращаясь к порту.


А вот в дос то как-раз можно! Но скорее всего, что шляпу тебе есть не придется. Вот все-таки узнать бы куда же послать вопрос в микрософт... smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Romikgy
Дата 12.9.2005, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Цитата(takedo @ 12.9.2005, 06:40)
А вот в дос то как-раз можно! Но скорее всего, что шляпу тебе есть не придется. Вот все-таки узнать бы куда же послать вопрос в микрософт...

А я думаю что в ДОС и нельзя, в ком порту стоят стандартные микросхемы , у которых тактовые частоты приема и передачи вычисляются через делитель с программным коэф. деления, максимальная частота (для стандартной микрухи) приема/передачи 115200 с коэф. деления равным 1 (единице !) , а все остальные частоты получается изменением этого коэф-нта. Т.е. поставь 2 и получишь частоту 57600, ( 56к) и т.д.
И отношение к операционке это не имеет ни малейшего отношения!
В последнее время стали ставить усовершенствованые микросхемы ком-порта, только для увеличения скорости передачи/приема , но и там существует этот делитель, только с другой базовой частотой. А базовая частота зафиксирована, вот если ты сам сделаешь железяку, с управляемой базовой частотой и коэф. деления, тогда сможешь ставить любые скорости обмена по ком-порту.


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
takedo
Дата 12.9.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



А вот думать здесь не надо. Рядом со мной сидит человек, который делал это в DOS, но там ведь как и в "микрухе" по таймеру можно вызвать прерывание и читать порт, так что в досе можно - не вопрос! А вот как в виндовсе добраться до таймеров, задающих частоту???


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Romikgy
Дата 12.9.2005, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



По какому таймеру в досе? И причем здесь прерывания?
Ну даже если он делал такое в досе (хотя есть сомнения) пусть тогда те объяснит как, и ты или его попросишь реализовать этоже только в драйвере для виндов, и все будет работать (почему в драйвере, потому что там разрешенно и к портам иметь доступ и к прерываниям почти как в дос)


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Snowy
Дата 12.9.2005, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Цитата(takedo @ 12.9.2005, 12:52)
по таймеру можно вызвать прерывание и читать порт, так что в досе можно - не вопрос!

Можно читать с определенным интервалом. Это да.
То есть для микросхемы UART установлена частота 11520, но читаем мы данные со скоростью 100000. Читать с нужным интервалом можно и в винде. Установить нестандартную скорость порта нельзя.

Цитата(takedo @ 12.9.2005, 12:52)
А вот как в виндовсе добраться до таймеров, задающих частоту???

Начиная еще с 95-х виндов такую вольность отключили. Перепрограммирование системного таймера было доступно только в DOS.
В 9x виндах просто было предупреждение, что это не работает, перезагрузить в DOS режим.
В NT такой возможности вообще нет.
PM MAIL   Вверх
takedo
Дата 12.9.2005, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



Snowy
А тогда как читать с нужным интервалом, по своему таймеру что-ли? Но система-то не реального времени, гарантии никто не дает, хотя в CE можно. Объясни как? Пожалуйста smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Romikgy
Дата 12.9.2005, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Наверное по событиям


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
takedo
Дата 12.9.2005, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



Если иметь доступ до регистра RX и TX порта, то можно работать с нестандартной частотой. Кто знает как до них добраться?
Добавлено @ 13:49
Это моё осмысленное предположение smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
maxim1000
Дата 12.9.2005, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110



чтобы не возникало непонятностей, предлагаю решить, о какой частоте идет речь:
1. частота чтения/передачи посылок
2. частота, с которой меняются биты на линии UART


--------------------
qqq
PM WWW   Вверх
Mad
Дата 12.9.2005, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 2
Всего: 19



Цитата(takedo @ 12.9.2005, 12:48)
Если иметь доступ до регистра RX и TX порта, то можно работать с нестандартной частотой

Вопервых таких регистров давно уже в UART нет, вместо них достаточно обьемные буферы. smile

вовторых - настроить UART на нестандартную скорость невозможно, формирователь импульсов без челочисленного делителя относительно тактовой частоты просто корректно работать не бедет (в Юникс системах API вообще ограниченно константами, и передать ф-ции настройки порта произвольное значение невозможно). Причина в том, что самому UART передаеться не нужная скорость передачи, а делитель тактовой частоты для формирования импульсов.

втретьих - разными там ухишрениями можно работать на "нестандартной" скорости, но именно работать с портом на нестандартной скорости, самиже UARTы между собой будут общяться на какойто стандартной.


--------------------
user posted image
PM MAIL   Вверх
takedo
Дата 12.9.2005, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



так вот и хочется узнать хотя бы одно ухищрение, а то никаких мыслей, млин...!


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
takedo
Дата 12.9.2005, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



Пожалуй последний вопрос:
Если перед вызовом SetCommState(...) дам приоритет RealTime, то выполнится ли у меня функция за время меньшее 100 микросекунд (или лучше сколько примерно тактов процессора)? и за какое время (лучше тактов процессора) выполняется "взведение" объекта ядра Event?


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Snowy
Дата 12.9.2005, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Цитата(takedo @ 12.9.2005, 13:12)
А тогда как читать с нужным интервалом, по своему таймеру что-ли? Но система-то не реального времени, гарантии никто не дает, хотя в CE можно. Объясни как?

На уровне драйвера. Пишешь свой драйвер и читай как хочешь.
Иначе используем стандартный драйвер со стандартным кэшированием, которого достаточно для считывания в системе "нереального" smile времени.
Но он читает так, как должен читать нормальный драйвер.
Цитата(takedo @ 12.9.2005, 13:48)
Если иметь доступ до регистра RX и TX порта, то можно работать с нестандартной частотой. Кто знает как до них добраться?

На DOSе примеры есть. Книжка и ее куски в инете раскиданы во множестве. Спроси у Яндекса "программирование UART".
Но под винды я не видел ни кода, ни умельцев, которым бы он понадобился.
И опять же вопрос реального времени. Хочешь писать драйвер?
ИМХО, железяка, работающая на нестандартной скорости - нехорошая железяка.
Добавлено @ 14:30
Цитата(takedo @ 12.9.2005, 14:26)
то выполнится ли у меня функция за время меньшее 100 микросекунд

Зависит и даже очень от количества активных процессов системе.
Точно отмерить невозможно.

Цитата(takedo @ 12.9.2005, 14:26)
и за какое время (лучше тактов процессора) выполняется "взведение" объекта ядра Event?

Насколько я помню, около 1000 тактов процессорного времени.
Соответственно зависит от скорости процессора.
PM MAIL   Вверх
Dreamer_0x01
Дата 12.9.2005, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 12



takedo

Цитата

Dreamer_0x01
А для того, чтобы защитить данные. Вообще - то разговор у нас такой: "А не ху..о было бы сделать на нестрадартной частоте", - "Да, было бы хорошо, если в Винде можно."


Ээээ. Собственно защищать что? И от кого? Неужели вы считаете, что к вам кто-то вклинится на линию связи? Или захочет перепрограммировать ваше устройство?
Тогда, если это того стоит, что бы я сделал первым:
1. Подключил к вашей железяке цифровой осциллограф.
2. В явном виде по осциллограме бы увидел все нюансы, включая "нестандартную" скорость.Которую тут же вычислил бы.
3. Буквально за день собрал бы свою железяку, умеющую работать на нестандартной скорости. Которая просто будет ловить ваши "нестандартные" пакеты, запихивать в свой достаточно большой буфер и уже по вполне стандартным протоколам гнать их куда душе угодно (в тот же ком-порт, но уже на стандартной скорости).

подумайте об этом, я серьезно - сделать такую железку схемотехнически - вообще раз, дваи готово, программирование этой железки - буквально час-два максимум.
Это не лучший выход для защиты информации. Лучше придумайте свой шифр протокола, это будет необходимо и достаточно.


Romikgy
Цитата

По какому таймеру в досе? И причем здесь прерывания?


Поясняю ;) Тут видимо имелось в виду, то, как программируются подобные фичи в железяках. Не исключено, что в ДОСе это точно так же.

Например, берем классический контрллер на 51 ядре.
В нем в сециальных регистрах указываем то, что один из таймеров будет формировать бодрейт для UART-а. (В подробности думаю не надо вдаваться, так? smile )
В регистрах, конфигурирующих этот таймер, есть такой параметр, как количество тиков на период счета таймера. Это количество, помноженное на период кварца (в зависимости от проца может быть еще деленное на 12 либо другое число), равняется одному полупериоду частоты бодрейта UART-а. То есть боррейт определяется именно числом, записываемом в этот таймер. И это число совершенно произвольно. Конечно, дискретность в скоростях возникать будет, но уверяю - 100 кбпс получить можно абсолютно реально.
Ну а про прерывание smile Просто скорее всего имелось в виду, что одно из прерываний заинмает последовательный порт. Которое выскакивает при получении/отправки символа. В обработчике прерывания как правило занимаются тем, что распихивают эти символы в соответствующие буферы.

Вот. Как схемотехнически сделан UART на "персоналке" - не знаю. Но если аналогичным образом - то грамотно написанные драйвера вполне решат эту проблему.

Но, опять же...Прочитайте внимательно то, что я писал в начале этого сообщения- если это только для защиты, то сделать свою "антижелезяку" на эту защиту - даже для инженеров такого класса как я вполне посильная задача smile


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
takedo
Дата 13.9.2005, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



Dreamer_0x01
Цитата
сделать свою "антижелезяку" на эту защиту - даже для инженеров такого класса как я вполне посильная задача

Да на цифровом асцилографе за 8тыс уе мы все это видим, однако, как подобрать частоту, если она плавает от байта к байту? А еще у нас конечно есть протокол свой, который типа уже зашифрован слегка. Я вообще не гольфист, я - хоккеист. Но уж коли пришлось работать за хлеб гольфистом, то хотелось бы получить от этой работы максимум знаний, поэтому и хочется блин на любой частоте поработать. Но у кого чего спросить? Вот ты например знаешь как работает железяка, но есть мудрецы, закончившие "Автоматику телемеханику", говорящие, что 16550 не умеет работать на нестандартной частоте, и даже в досе это невозможно. Чего с такого взять - кроме анализов(я говорю про конкретного человека, который как раз и закончил АТ и ходит рядом со мной произнося свой несусветный бред smile ). Есть ещё вопрос такой стоит ли овца выделки (в том смысле, что стоит ли на железяке реализовывать плавающую частоту), так вот во-первых, раз уж я не гольфист, то для меня стоит, а во вторых любая работа, даже самая плевая может быть рассмотрена как основа для более масштабной - в таком случае, тем более стоит!!!

Вот ещё хотя бы простецкий вопросик:
могу ли я открыть порт COM1 через hcom0 = CreateFile("COM1"...,FILE_FLAG_OVERLAPPED,...); проинициализировав его на частоте A0 и hcom1 = CreateFile("COM1"...,FILE_FLAG_OVERLAPPED,...); и проинициализировать на частоте A1. А далее через hcom0 читать, через hcom1 - писать. Вот чего то не могу до глубины души разобраться что- куда и как. Кто - то может пояснить?


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Romikgy
Дата 13.9.2005, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Цитата(takedo @ 13.9.2005, 07:30)
огу ли я открыть порт COM1 через hcom0 = CreateFile("COM1"...,FILE_FLAG_OVERLAPPED,...); проинициализировав его на частоте A0 и hcom1 = CreateFile("COM1"...,FILE_FLAG_OVERLAPPED,...); и проинициализировать на частоте A1.

Думаю , что нет!!! В УАРТе один делитель что для передачи, что для приема, да и система скорее всего не даст 2 раз открыть тотже СОМ1.


Цитата(Dreamer_0x01 @ 12.9.2005, 16:22)
Например, берем классический контрллер на 51 ядре.
В нем в сециальных регистрах указываем то, что один из таймеров будет формировать бодрейт для UART-а. (В подробности думаю не надо вдаваться, так? smile )
В регистрах, конфигурирующих этот таймер, есть такой параметр, как количество тиков на период счета таймера. Это количество, помноженное на период кварца (в зависимости от проца может быть еще деленное на 12 либо другое число), равняется одному полупериоду частоты бодрейта UART-а. То есть боррейт определяется именно числом, записываемом в этот таймер. И это число совершенно произвольно. Конечно, дискретность в скоростях возникать будет, но уверяю - 100 кбпс получить можно абсолютно реально.
Ну а про прерывание smile Просто скорее всего имелось в виду, что одно из прерываний заинмает последовательный порт. Которое выскакивает при получении/отправки символа. В обработчике прерывания как правило занимаются тем, что распихивают эти символы в соответствующие буферы.

Вот. Как схемотехнически сделан UART на "персоналке" - не знаю. Но если аналогичным образом - то грамотно написанные драйвера вполне решат эту проблему.

Как работает 51 я знаю, и как у него работает УАРТ тоже знаю, только не надо путать 51 с писи , 51 - микроконтроллер широкого применения, а у компа используется микруха типа 16550 , в ней о таймер ни разу не слышал!
А про прерывания я имел ввиду, что они никакого отношения к скорости УАРТа не имеют, и служат сугубо для асинхроности приемопередачи


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
takedo
Дата 13.9.2005, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: -1
Всего: 3



Romikgy
Вот все смотрю я и думаю, а что в 16550 стоит частотомер? И строго определяет, если частота не из набора:
CBR_110
CBR_19200
CBR_300
CBR_38400
CBR_600
CBR_56000
CBR_1200
CBR_57600
CBR_2400
CBR_115200
CBR_4800
CBR_128000
CBR_9600
CBR_256000
CBR_14400
, то не работаю!!!!!!!!!!!!!!!!!! А если из набора - то пожалуйста.
Ну ведь это бред полный!!! Я уже понял, что в виндовсе надо писать свой драйвер, но в досе то можно было на любой скорости работать - однозначно!!! Это делалось не раз и не одним человеком!!! и все с тем же 16550. И хватит уже по моему, кто-то знает как работает 51 вый, а кто-то создает аля MutherBoard для поцессоров на 650 ножек. Кому верить? Думаю тем, кто ...
Добавлено @ 13:31
Всем спасибо, узнал на сей раз достаточно много smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Romikgy
Дата 13.9.2005, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Цитата(takedo @ 13.9.2005, 13:30)
Romikgy
Вот все смотрю я и думаю, а что в 16550 стоит частотомер? И строго определяет, если частота не из набора:
CBR_110
CBR_19200
CBR_300
CBR_38400
CBR_600
CBR_56000
CBR_1200
CBR_57600
CBR_2400
CBR_115200
CBR_4800
CBR_128000
CBR_9600
CBR_256000
CBR_14400
, то не работаю!!!!!!!!!!!!!!!!!! А если из набора - то пожалуйста.
Ну ведь это бред полный!!! Я уже понял, что в виндовсе надо писать свой драйвер, но в досе то можно было на любой скорости работать - однозначно!!! Это делалось не раз и не одним человеком!!! и все с тем же 16550. И хватит уже по моему, кто-то знает как работает 51 вый, а кто-то создает аля MutherBoard для поцессоров на 650 ножек. Кому верить? Думаю тем, кто ...
Добавлено @ 13:31
Всем спасибо, узнал на сей раз достаточно много smile

Для микрухи 16550 передаются не частоты 115200,57600, .... ,
а коэф-енты 1,2, .. НЕТ там частотомера , но есть делитель. Выше тебе отвечал не только я , но и другие, читать/записывать из регистров порта (в ДОС) ты можешь с какой тебе угодно скоростью , а посылатся/приниматся из/в линию они будут на фиксированых частотах, и зависит это от коэф. деления в микрухе 16550.


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Dreamer_0x01
Дата 13.9.2005, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 12



Romikgy

В компе я как раз про то и говорил, что не знаю.
А даташитом можешь кинуться на эту микруху?
Может, в ней тоже можно как-то режимы менять? ;)

Хотя, в обед пойду поковыряю какую-нибудь старую мать,из которых мы выпаиваем нужные себе элементы, посмотрю че там за микруха и Яндексом поищу... ;)

Это сообщение отредактировал(а) Dreamer_0x01 - 13.9.2005, 14:46


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Romikgy
Дата 13.9.2005, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Цитата(Dreamer_0x01 @ 13.9.2005, 14:43)
Romikgy

В компе я как раз про то и говорил, что не знаю.
А даташитом можешь кинуться на эту микруху?
Может, в ней тоже можно как-то режимы менять? ;)

Хотя, в обед пойду поковыряю какую-нибудь старую мать,из которых мы выпаиваем нужные себе элементы, посмотрю че там за микруха и Яндексом поищу... ;)

Вот те даташит одной из семейства 16550.
rgy.pisem.net\files\PC16550DV_NSC.pdf


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
smalcom
Дата 15.9.2005, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 494
Регистрация: 16.10.2004
Где: Dnepr

Репутация: нет
Всего: 7



Ветка здаровая и вверху мало чегочисал? а сразу перейду к объяснениям. Не ОСи и програмисты их писавшие бараны smile Вверху был упомянут некий девайс с которым нужно связаца на нестандартной частоте, сразу скажу что комп этого не умеет, ибо во всех микроконтролерах USART берет тактовую частоту с пределителя, а пределитель с тактового генератора, отсюда получаем что если тактовый генератор работает на нестандартной частоте, то выход отсюда только software emulation, потому что у РС сия тактовая частота фиксирована раз и навсегда. Попробуйте убедить электронщиков которые делают сей девайс использовать частоты из ряда 11.0592MHz or 14.7456MHz и иже с ними и тогда проблема решица. Если они думают что применением нестандартной частоты они какбы защитят линию от считывания данных, то они ошибаюца(сам работаю электронщиком-програмистом).

Это сообщение отредактировал(а) smalcom - 15.9.2005, 08:10


--------------------
What DA F...???
PM MAIL WWW Skype Jabber   Вверх
Dreamer_0x01
Дата 16.9.2005, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 12



Цитата
Попробуйте убедить электронщиков которые делают сей девайс использовать частоты из ряда 11.0592MHz or 14.7456MHz


Ну вообще-то когда речь заходит об использовании UART, то именно такие кварцы и используют, иначе синхронизироваться на стандартные скорости весьма сложно.

Цитата

Если они думают что применением нестандартной частоты они какбы защитят линию от считывания данных, то они ошибаюца


Да, я уже говорил на эту тему. Но они вроде как хотят кроме того, что нестндартную частоту сделать, так кроме этого ее еще и переменной сделать. По-моему, это уже повлечет за собой массу сложностей...



Цитата

ибо во всех микроконтролерах USART берет тактовую частоту с пределителя, а пределитель с тактового генератора


В общем-то так, но "дискретность" "стандартных" частот получается гораздо ниже, чем общепринятая.
Например, имеем контроллер на 51м ядре с кварцом 11059 кГц.
Допустим, будем генерировать бодрейт таймером в режиме передачи 3, при бите SMOD равном 0. (См. Даташит)
Тогда бодрейт порта определяется выражением
F=(1/32)*(11059/12)/(256-TH1),
где TH1 - число, загружаемое в старший байт таймера 1.
Тогдя для ряда чисел ТН1=240..255 имеем следующий ряд частот:

F(240)=1.8 kHz;
F(241)=1.92 kHz;
F(242)=2.057 kHz;
F(243)=2.215 kHz;
F(244)=2.4 kHz;
F(245)=2.618 kHz;
F(246)=2.880 kHz;
F(247)=3.200 kHz;
F(248)=3.600 kHz;
F(249)=4.114 kHz;
F(250)=4.800 kHz;
F(251)=5.760 kHz;
F(252)=7.200 kHz;
F(253)=9.600 kHz;
F(254)=14.400 kHz;
F(255)=28.799 kHz;

Как видим, кроме "стандартных" значений скоростей мы получили и несколько "нестандартных":
2.618,4.114,2.057,2.215.
Естественно, при бите SMOD равном 1 эти значения умножаются на два. Ну и меняя кварцы, можно менять эти частотные ряды (скажем, в 100 раз больше...)

Таким образом, можно сделать следующий вывод: Получить на данном кристалле произвольную скорость нельзя, но можно получить "нестандартные" значения скоростей.




--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0878 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.