Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Ком порт - особенность железки или линухи? / 7 сообщений из 7, страница 1 из 1
19.12.2011, 14:46
    #37583116
Vint_x
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ком порт - особенность железки или линухи?
Всем привет.

Не так давно возникла необходимость пересесть на линукс и написать программку для работы в дисплеем (GU140x32F-7806A) через 232ой интерфейс.

В процессе изучения заметил странную особенность, в железке 4физ. порта. Дисплей висит на 4ом (ttyS3), остальные порты пока не задействованы. Если подавать команды дисплею на ttyS3 он будет молчать, а программа, повиснет. Но стоит только после отправки команды дисплею кинуть хоть что нибудь на второй порт (ttyS1), то дисплей примет команду и программа будет работать как надо.
С другими портами такой способ не проходит.

Вот пример программки с использованием библиотеки RS232 serial port library :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
#include <stdlib.h>
#include <stdio.h>

#include <unistd.h>
#include "rs232.h"

int main(int argc, char *argv[]) {

	int bdrate=38400;
	int serialNum = 3;
	int serialAlt = 1;

	if(argc < 2) return -1;

	char buffer[256];

	//Команда на очистку дисплея 		0x0f 0x01
	//Команда на перевод каретки в начало 	0x0f 0x80

	sprintf(buffer, "\x0f\x01\x0f\x80%s", argv[1]);

	OpenComport(serialNum, bdrate);

	SendBuf(serialNum, buffer, strlen(buffer));
	//Без этого  программа будет виснуть и дисплей работать не будет
	OpenComport(serialAlt, bdrate);
	SendBuf(serialAlt, "\x0", 1);
	CloseComport(serialAlt);
	//
	CloseComport(serialNum);

   printf("END\n");
   return 0;
}


Причём, если не посылать что нибудь на второй порт, при выполнении в консоле выведется "END" , то программа не остановится.
...
Рейтинг: 0 / 0
20.12.2011, 00:50
    #37584150
miwaonline
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ком порт - особенность железки или линухи?
Vint_x,

Что за железка?

По сабжу. Работаю с RS-232 под линуксами - софт для сопряжения торгового оборудование (сканеры штрих-кодов, весы, чекопринтеры) с учетной системой. Подобных нюансов не встречал. Используются и "родные" порты компьютера, и выведенные из колодок на мат.плате, и PCI-RS232 переходники. Правда, больше трех портов нигде не использовал.
...
Рейтинг: 0 / 0
20.12.2011, 03:30
    #37584229
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ком порт - особенность железки или линухи?
Насколько помнится, в PC-архитектуре COM1 и COM3 разделяют IRQ4, а COM2 и COM4 -- IRQ3
Определяться надо опросом соответствующих портов
Всякие DigiBoard вообще держат десяток COM-портов на одном прерывании
Посмотреть можно, наверное, cat /proc/interrupts
...
Рейтинг: 0 / 0
20.12.2011, 08:36
    #37584307
Vint_x
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ком порт - особенность железки или линухи?
miwaonline, Железка Helios PC/104 SBC

Вячеслав Любомудров, посмотрел, пусто в файле /proc/interrupts
...
Рейтинг: 0 / 0
20.12.2011, 11:31
    #37584542
miwaonline
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ком порт - особенность железки или линухи?
Vint_x,

Здесь пишут не о четырех портах, а о 2 RS-232 + 2 RS-232/422/485. Может, здесь собака порылась? На другой железке есть возможность попробовать? Или под другой системой хотя бы (LiveUSB)?
...
Рейтинг: 0 / 0
23.12.2011, 14:57
    #37590879
Vint_x
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ком порт - особенность железки или линухи?
miwaonline, подрубил дисплей напряму к компу, где стоит линуха, всё работает без задействования левого порта.
Похоже всё дело в прерываниях, т.к. на 2ом и на 4ом порту одно прерывание на двоих.
Описываемая проблема стандартна при работе нескольких последовательных портов на
одном прерывании. В данном случае не принципиально, на какой аппаратной
платформе это происходит.

Только специализированные мультипортовые платы (со своим арбитром и
дополнительными окнами в адресном пространстве ввода-вывода) стабильно работают
с 4 и даже 8 последовательными портами на одном прерывании.

Рекомендуется присваивать каждому порту свою линию прерывания, не объединённую
больше ни с одним устройством.
Сейчас буду читать матчасть =)
...
Рейтинг: 0 / 0
26.12.2011, 16:42
    #37593812
Vint_x
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ком порт - особенность железки или линухи?
Методом тыка удалось выяснить, что оказываться каждый порт висел на своём прерывании
ttyS0 - IRQ3
ttyS1 - IRQ4
ttyS2 - IRQ10
ttyS3 - IRQ11
Порт 1 зависит от 3 и 2 зависит от 4.
Причём, если задать 3 и 4 ые прерывания для портов 3 и 4, то они буду работать как надо, но тогда порты 1 и 2 будут работать криво (что бы кинуть на порт 1, надо потом что нибудь кинуть в порт 3 и что бы кинуть в порт 2, надо кинуть что нибудь в порт 4)
Проблема была решена установкой для зависимых портов одно прерывание:
ttyS0 - ttyS2 - IRQ3
ttyS1 - ttyS3 - IRQ4

Всё конечно работает, здорово, но вот хотелось бы знать, а почему? =)
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Ком порт - особенность железки или линухи? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]