LINUX.ORG.RU

RS-232


0

0

Пишу программу на си для работы через RS-232 с одним устройством. Как можно контролировать состояние TxD выхода? Необходимо в определенный момент изменять его с high на low и наоборот

anonymous

Я думаю дебе надо почитать мат часть на твой контроллер чип итд итп, и тогда ты поймёш что такое TxD RxD CTS RTS. И что его состояние в определённый момент меняет автомат сам исходя из того что в его буфер вывода записанно. Ну это если ты софтово ручной RS не делаеш.

bizon_art
()
Ответ на: комментарий от binr

Доку прочел, но ответа не нашел Другая формулировка. RS-232 должен использоваться нестандартно, т.е. от всех пинов требуются только переходы high-low. С RTS и DTR никаких проблем, а с TXD никак

anonymous
()

Контроллер паял сам. Так что его мат часть знаю. TXD передается на регистр сдвига, который получает такт от DTR. После получения 8 битов одним импульсом RTS выходы регистра сдвига принимают соответствующие значения

anonymous
()
Ответ на: комментарий от anonymous

С какой стороны твой контроллер?

Твой самопальный контроллер стоит на шине ISA или PCI? Тогда тебе надо писать ал-я драйвер к нему.

Если твой контроллер висит на противоположном конце провода 232, то надо определиться какого формата пакеты долен генерить твой 16550 который стоит на Линуксе. 8N1?

Допустим Tx, Rx, GND подключены стандартно. Модемные сигналы RTS, DTR используются стандартно? Если тебе надо, то ты можешь управлять стандартыми модемными сигналами RTS, DTR на своём uart16550 через ioctl()

binr ★★
()
Ответ на: комментарий от anonymous

Если ты знаешь схемотехнику и uart16550 то как ты себе представляешь возможность настройки этой микросхемы, чтобы она выдавала данные в таком вормате. По моему минимальный размер поля данных 7 бит что ли... но не как ни один бит.

binr ★★
()
Ответ на: комментарий от anonymous

Понятно что он на 232, дык он на ISA стоит в машине где линукс или с другого конца провода 232?

На Линуксовой машине у тебя стандартный uart16550?

binr ★★
()
Ответ на: комментарий от binr

Он с другого конца провода
На машине uart16550
А нсчет возможности..... Схему саму нашел в одном журнале. Там еще програмка под винду была. Так вот она спокойно с ним работает

anonymous
()

Может есть возможность послать только стоп-бит?

anonymous
()

А тебе сильно нужна дальнобойность? Если нет, то параллельный порт удобнее. Во-первых, не нужно преобразовывать 2-полярные сигналы. Во-вторых, можно легко управлять любыми сигналами прямо из юзер-спэйс записью нужного числа в /dev/parport безо всяких ioctl.

nobody ★★
()

Вот что я накопал:

UART можно перевести в break-состояние. При этом на TXD будет напряжение +3..15V. Для этого необходимо LineControlRegister уарта (RegisterOffset: 3) 6 бит поставить на 1. break-состояние будет сново покинуто, когда этот бит будет 0

как это все сотворить на с++?

anonymous
()

проблема решена

#include <asm/io.h> #define PORT 0x3F8 int main(int argc, char* argv[]) { ioperm(PORT+3,1,1); outb(0x40, PORT+3); sleep(200); ioperm( PORT+3,1,0); return 0; }

моя первая програма на си написанна!!!!!!!!!!!!!!!!!!!!!!!!

anonymous
()
Ответ на: комментарий от anonymous

> Доку прочел, но ответа не нашел Другая формулировка. RS-232 должен использоваться нестандартно, т.е. от всех пинов требуются только переходы high-low. С RTS и DTR никаких проблем, а с TXD никак

в таком случае - никак. стандартные UARTы не поддерживают таких извратов.

// wbr

klalafuda ★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.