Перейти к содержанию

настройка ком порта


Рекомендуемые сообщения

меня есть несколько вопросов по работе с ком протами

1. как установить нестандартую скорость (100 бод)?

2. как установить 1.5 стоповых бита?

Проблема в том что константы для скрости 100 бод нет

есть для 110 но мне это не подходит, анологично и для стоповых битов. Флагом можно установить 2 бита или сбросить его тогда будет 1 бит, а как установить 1.5?

Если есть дайте пример.

Ссылка на комментарий
Поделиться на другие сайты

Цитата:

как установить нестандартую скорость (100 бод)?

Нормальным способом - никак. Можно использовать число вместо константы, тогда обычно работает, но многие системы округляют ее до ближайшей стандартной скорости и работают на ней, а некоторые вообще работают на скорости по-умолчанию. Это для Unix. А в Windows можно смело писать число вместо константы.

Цитата:

как установить 1.5 стоповых бита?

Так для какой все-таки ОС? В Windows это отдельный пункт структуры DCB, а в Linux возможно использование только 2-х или 1-го стоп-бита (насколько я знаю).

Я бы копал в сторону прямого доступа к портам. Это можно сделать функцией ioperm(), но для этого у пользователя должны быть права root.

Альтернативный способ - использование /dev/port. Открываем файл, делаем lseek на нужный адрес (это и будет адрес порта), а читаем и пишем с помощью read и write. Но и здесь есть несколько недостатков: во-первых, пользователь должен иметь доступ к /dev/port, во вторых, этот способ несколько медленнее (хотя в случае 100 бод это не важно), а в-третьих, использование /dev/port дает доступ к любым портам системы, так что можно очень легко что-нибудь повредить.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

пытался покопать по поводу ioperm(), inb(), outb()

не могу найти по каким адресам писать данные для установки нужной скорости.

ОС Linux, права у пользователя root

Ссылка на комментарий
Поделиться на другие сайты

Диапазоны адресов портов:

COM1: 3F8h-3FFh COM3: 338h-33Fh

COM2: 2F8h-2FFh COM4: 238h-23Fh

Чтобы установить скорость обмена данными, нужно установить высокий логический уровень (1) бита DLAB порта 3FBh (7-й бит):

1=порты 3F8h и 3F9h для загрузки скорости обмена;

0=порты 3F8h и 3F9h в обычном режиме.

Старший байт скорости обмена пишется в порт 3F9h по принципу 115200/V, где V - скорость в бодах. Например для скорости 19200 результат равен 115200/19200=6, т.е. нужно вывести 06h в порт 3F9h.

В порт 3F8h пишется младший байт скорости обмена.

Не забудте сбросить бит DLAB после установки скорости =)

Ссылка на комментарий
Поделиться на другие сайты

Большое спасибо за помощь все получилось

только у Вас опечатка

>> т.е. нужно вывести 06h в порт 3F9h.

06h нужно вывести в порт 3F8h, а в порт 3F9h вывести 00h

Ссылка на комментарий
Поделиться на другие сайты

В файле /usr/src/linux-2.4.28/include/net/irda/ircomm_param.h есть строки:

#define IRCOMM_1_STOP_BIT 0x00

#define IRCOMM_2_STOP_BIT 0x04 /* 1.5 if char len 5 */

То есть 1.5 можно таки выставить штатно. Я понимаю, что это для irda, но у меня нет времени искать в ядре более точную информацию, я только хочу намекнуть, что всё можно найти. Кроме того (это моё IMHO) лучше использовать ioctl, ведь вызовы есть и они определены, опускаться до ассемблера - смысла нет.

Я не программист Smile

Ссылка на комментарий
Поделиться на другие сайты

Цитата:

Кроме того (это моё IMHO) лучше использовать ioctl, ведь вызовы есть и они определены, опускаться до ассемблера - смысла нет.

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...