информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Вроде как заработало! 23.09.03 12:01  Число просмотров: 1581
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> > Если ты его не проинициализируешь - оно работать
> вообще не
> > будет :-)
>
> А как это ФИФО инициализировать?
> Старые ДОСовские проги спокойно работают на 16550А, и даже
> не "догадываются" про наличие ФИФО. Они-то это ФИФО не
> инициализируют.
> Может же моя програмка поступать так же?
Запросто. Когда я говорил, что фифо не будет работать я имел в виду ИМЕННО фифо. То есть порт будет работать как старый 16450 (или как его так, у которого фифо вообще нет).

> Спасибо большое за подсказку. А то я во всяких МАНах и
> ФАКах ковырялся - ничего об этом не было, видимо старые
> были, еще про 16450. В некоторых ошибки были - не было
В 16450 это точно так же сделано. Вообще большую часть инфы о работе порта я почерпнул из чтения сырцов виндового дривера.

> указано, что нужно OUT2 установить, чтобы прерывания шли.
> Один вопрос остался - как узнать, что это именно 16550А,
Вот как это делается в виндовом дривере:
#define SERIAL_IIR_FIFOS_ENABLED 0xc0

        DISABLE_ALL_INTERRUPTS(Extension->Controller);

	WRITE_MODEM_CONTROL(
		Extension->Controller,
		(UCHAR)SERIAL_MCR_OUT2
		);

        //
        // See if this is a 16550.  We do this by writing to
        // what would be the fifo control register with a bit
        // pattern that tells the device to enable fifo's.
        // We then read the iterrupt Id register to see if the
        // bit pattern is present that identifies the 16550.
        //

        WRITE_FIFO_CONTROL(
            Extension->Controller,
            SERIAL_FCR_ENABLE
            );

        regContents = READ_INTERRUPT_ID_REG(Extension->Controller);

        if (regContents & SERIAL_IIR_FIFOS_ENABLED) {
// ФИФО присутствует, это 16550(А)
        }

---

> как установить длину очереди или запретить очередь, как
Очередь запрещена по умолчанию. Если ее не включать - будет работать только RBR (receive buffer register - можно считать однобайтной очередью). Включается в FCR (FIFO control register). Но кроме того придется выставлять еще highwater (порог срабатывания прерывания) и т.д..

> после закидывания байта в передатчик понять, что туда еще
> один влезет (в очереди еще есть место)?
Если работаешь на прерываниях, то тебе придет прерывание, когда он освободится. Если же предпочитаешь поллить, читай LSR (line status register) там два бита THRE (transmit holding register empty) и TEMPT (transmitter empty). THRE ставится в 1, когда очередной байт из буфера ушел в передатчик (но передатчик может еще работать), а TEMPT - когда передатчик не работает.
<programming> Поиск 






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach