Работа с COM - портом

Тема в разделе "WASM.BEGINNERS", создана пользователем kaligraf, 11 янв 2009.

  1. kaligraf

    kaligraf New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    13
    Pavia
    Как этот механизм задействовать?
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Скорость LPT аппаратно ограничена, не помню сколько точно но вроде порядка 250мс (давно уже с этим игрался, а сейчас у меня и LPT совсем нету). Ограничение это традиционно действует через замораживание тактовой частоты процессора. Грамотное использование FIFO позволяет избежать 100% загрузки процессора ожиданием синхронизации с LPT но не позволяет превысить это ограничение скорости. И это помимо тонкостей с многозадачностью и т.п.
    Про то как задействовать см.
    http://www.radio-portal.ru//modules.php?op=modload&name=EZCMS&file=index&page_id=68
    http://www.pcports.ru/xDRV_sys.php
    и Гугл в помощь, таких наработок в сети изрядное количество.
     
  3. kaligraf

    kaligraf New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    13
    Нашёл интересную ссылку. Реализует ли этот драйвер механизм FIFO?
    Может кто уже сталкивался с ним?
    http://www.beyondlogic.org/porttalk/porttalk.htm
     
  4. kaligraf

    kaligraf New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    13
    Y_Mur
    Спасибо за ссылки - картина понемногу проясняется.
     
  5. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    на писипортс дров кривой прерывание перехватывает и плюёт на системный обработчик, не советовал бы его
     
  6. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    а это гон - по вашему скорость ЛПТ 1000мс/250мс=4 байта в секунду?!... вы забываете что у ЛПТ макс скорость до 2мб/с доходит в одном из режимов - ESP или EPP точно не помню, а в стандартном ECP - 200 кб/с с лишним...
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    kaligraf
    Вот почитай тут немного описанно FIFO http://frolov-lib.ru/books/bsp/v04/ch2_10.htm
     
  8. kaligraf

    kaligraf New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    13
    Pavia
    Вообще - книга как раз в тему, и не только про FIFO. Читаю и уже похоже в своей асм вставке ошибку обнаружил. Регистры порта однобайтные, а я считывал их и записывал как двухбайтные.
    Хотя работало, но неясно почему вообще работало...
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Exp10der
    да с цифрой гоню, поскольку давно с LPT не играл :)) но суть остаётся верной - 2мб/с и 200 кб/с по сравнению с ГГц-ами современных камней оочень мало, поэтому из-за аппаратной синхронизации имеем весьма неэффективную 100% загрузку процесора.
     
  10. kaligraf

    kaligraf New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    13
    Получил положительный результат с помощью вот такой асм вставки:
    ; RTS COM1
    ; сбрасываем в 0 бит 1 по адресу 3FCh
    mov dx,3FCh
    in al,dx
    and al,0FDh
    out dx,al
    Отрабатывает сиё творение за 3,3 микросекунды. Уже лучше, чем было через API.
    Но пока с драйвером неясности - надо что-то получше чем giveio приспособить.
     
  11. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Это особенность процессоров intel.

     
  12. kaligraf

    kaligraf New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    13
    Pavia
    Спасибо за разъяснение. Не могу сказать, что понял всё, но кое-что из этого усвоил. Опыт у меня в асме компьютерном близок к нулю. И давно крутится в голове наверное совсем ламерский вопрос.
    Чем отличаются обозначения
    ax и Eax
    dx и Edx
    cx и Ecx
    Это разные регистры(может альтернативные как в Z80 во времена спектрума) или те-же самые?
     
  13. kaligraf

    kaligraf New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    13
    Exp10der
    Убедился в этом однозначно giveio.sus не годится - надо искать альтернативу.
     
  14. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    kaligraf
    eax это 32 битный регистр он как бы стостоит из двух половинок. Младшии 16 бит это ax, для старшей нету кода.
    А ax делиться al и ah

    Код (Text):
    1. +-----------+
    2. |    EAX    |
    3. +-----+-----+
    4. |     |  AX |
    5. +-----+--+--+
    6. |     |AH|AL|
    7. +-----+--+--+
     
  15. kaligraf

    kaligraf New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    13
    Pavia
    Понял - спасибо большое.
    Вот так и на асм глядишь перейду потихоньку:)