ІМ’Я
hal_parport — компонент HAL реального часу для зв’язку з одним або кількома паралельними портами ПК.
СИНТАКСИС
loadrt hal_parport cfg="port_addr [type] [ [port_addr [type] .. .]"
ОПИС
Компонент hal_parport є компонентом реального часу, який забезпечує з’єднання від HAL через halpins до фізичних контактів одного або декількох паралельних портів. Він надає функції читання та запису для надсилання та отримання даних до підключених паралельних портів.
Компонент hal_parport підтримує до 8 фізичних паралельних портів.
ВАРІАНТИ
- cfg="port_addr [type] [[port_addr [type] …]"
-
Рядок cfg повідомляє hal_parport адресу(и) паралельного(их) порту(ів) та чи використовується(ються) порт(и) як вхідний(і) чи вихідний(і) порт(и). Компонент підтримує до восьми паралельних портів.
Параметр port_addr конфігураційного рядка може бути або фізичною базовою адресою паралельного порту, або вказаним як виявлений паралельний порт через драйвер Linux parport_pc. У цьому випадку port_addr з значенням 0 є першим паралельним портом, виявленим у системі, 1 є наступним і так далі.
Параметр type рядка конфігурації визначає, як використовуються біти вводу/виводу порту. Існує чотири можливі варіанти, і якщо жоден не вказано, буде встановлено значення out.
- in
-
Встановлює 8 бітів порту даних на вхід. У цьому режимі паралельний порт має загалом 13 вхідних контактів та 4 вихідні контакти.
- out
-
Встановлює 8 бітів порту даних для виведення. У цьому режимі паралельний порт має загалом 5 вхідних контактів та 12 вихідних контактів.
- epp
-
Ця опція така ж, як і встановлення значення «вихід», але може призвести до зміни електричних характеристик порту комп’ютером, див. розділ ВИКОРИСТАННЯ нижче.
- x
-
Ця опція дозволяє налаштувати порти з відкритими колекторами на контактах групи керування як входи, що призводить до 8 вихідних контактів та 9 вхідних контактів, див. ВИКОРИСТАННЯ нижче.
ПІНИ
Піни, створені компонентом hal_parport, залежать від того, як він налаштований у переданому йому рядку cfg="" , див. ОПЦІЇ.
- parport.p.pin-n-out (bit)
-
Керує фізичним вихідним контактом.
- parport.p.pin-n-in (bit)
-
Відстежує фізичний вхідний контакт.
- parport.p.pin-n-in-not (bit)
-
Відстежує фізичний вхідний контакт, але інвертований.
Для кожного створеного контакту p – це номер порту, а n – це фізичний номер контакту в 25-контактному D-подібному роз’ємі.
Для кожного фізичного вихідного контакту драйвер створює один контакт HAL, наприклад: parport.0.pin-14-out.
Для кожного фізичного вхідного контакту драйвер створює два контакти HAL, наприклад: parport.0.pin-12-in та parport.0.pin-12-in-not.
Значення -in HAL має значення TRUE (ІСТИНА), якщо фізичний контакт має високий рівень, і FALSE (ХИБНІСТЬ), якщо фізичний контакт має низький рівень. Значення -in-not HAL інвертовано та має значення FALSE, якщо фізичний контакт має високий рівень.
Нижче наведено список вхідних та вихідних контактів за типом, що використовується в рядку cfg="".
in: Pins 2,3,4,5,6,7,8,9,10,11,12,13,15 are input pins and pins 1,14,16 and 17 are output pins.
out/epp: Pins 10,11,12,13 and 15 are input pins and pins 1,2,3,4,5,6,7,8,9,14,16 and 17 are output pins.
x: Pins 1,10,11,12,13,14,15,16 and 17 are input pins and pins 2,3,4,5,6,7,8,9 are output pins. (See USAGE section.)
ПАРАМЕТРИ
- parport.p.pin-<n>-out-invert (bit)
-
Інвертує вихідний контакт.
- parport.p.pin-<n>-out-reset (bit)
-
(лише для вихідних контактів) TRUE, якщо цей контакт має бути скинутий під час виконання функції .reset.
- parport.p.reset-time (u32)
-
Час (у наносекундах) між виводом встановлюється записом та скидається функцією скидання, якщо вона ввімкнена.
ФУНКЦІЇ
- parport.p.read (funct)
-
Зчитує фізичні вхідні контакти порту <portnum> та оновлює контакти HAL -in та -in-not.
- parport.read-all (funct)
-
Зчитує фізичні вхідні контакти всіх портів та оновлює контакти HAL -in та -in-not.
- parport.p.write (funct)
-
Зчитує HAL-вихідні контакти порту p та оновлює фізичні вихідні контакти цього порту.
- parport.write-all (funct)
-
Зчитує HAL-вихідні контакти всіх портів та оновлює всі фізичні вихідні контакти.
- parport.p.reset (funct)
-
Чекає, поки не мине час reset-time з моменту відповідного запису, а потім скидає виводи до значень, вказаних у налаштуваннях -out-reset та -out-invert. Скидання повинно відбуватися пізніше в тому ж потоці, що і запис. Якщо -out-reset має значення TRUE, то функція скидання встановить вивід на значення _ -out-invert_ . Це можна використовувати разом з doublefreq stepgen для створення одного кроку на період. Простір кроків stepgen для цього виводу повинен бути встановлений на 0, щоб увімкнути doublefreq.
ВИКОРИСТАННЯ
Компонент hal_parport є драйвером для традиційного паралельного порту ПК. Порт має загалом 25 фізичних контактів, з яких 17 використовуються для сигналів. Оригінальний паралельний порт поділяв ці контакти на три групи: дані, керування та стан. Група даних складається з 8 вихідних контактів, група керування — з 4 вихідних контактів, а група стану — з 5 вхідних контактів.
На початку 1990-х років був представлений двонаправлений паралельний порт, який дозволяє використовувати групу даних для виводу або вводу. Драйвер HAL підтримує двонаправлений порт і дозволяє користувачеві налаштувати групу даних як для введення, так і для виведення. Якщо порт налаштований як «вихід», він забезпечує загалом 12 виходів і 5 входів. Якщо порт налаштований як «вхід», він забезпечує 4 виходи і 13 входів.
У деяких паралельних портах контакти групи управління є відкритими колекторами, які також можуть бути переведені в низький стан зовнішнім затвором. На платі з відкритими колекторними контактами управління, якщо вона налаштована як «x», вона забезпечує 8 виходів і 9 входів.
У деяких паралельних портах група керування має двотактні драйвери та не може використовуватися як вхід.
- Примітка: HAL та відкриті колектори
-
HAL не може автоматично визначити, чи є двонаправлені контакти режиму x фактично відкритими колекторами (OC). Якщо це не так, їх не можна використовувати як входи, а спроба перевести їх у стан LOW із зовнішнього джерела може пошкодити апаратне забезпечення.
Щоб визначити, чи має ваш порт відкриті колекторні контакти, завантажте hal_parport у режимі x. Якщо пристрій не підключено, HAL повинен зчитати контакт як TRUE. Далі вставте резистор 470 Ом від одного з контактів керування до GND. Якщо отримана напруга на контакті керування близька до 0 В, а HAL тепер зчитує контакт як FALSE, то у вас є порт OC. Якщо отримана напруга далека від 0 В або HAL не зчитує контакт як FALSE, то ваш порт не може використовуватися в режимі x.
Зовнішнє обладнання, яке керує керуючими контактами, також повинно використовувати логічні елементи з відкритим колектором (наприклад, 74LS05).
На деяких комп’ютерах налаштування BIOS можуть впливати на можливість використання режиму x. Найімовірніше, режим SPP працюватиме.
Жодні інші комбінації не підтримуються, і порт не можна змінити з вхідного на вихідний після встановлення драйвера.
Драйвер parport може керувати до 8 портів (визначено параметром MAX_PORTS у hal_parport.c). Порти нумеруються, починаючи з нуля.
- Завантаження компонента hal_parport
-
Драйвер hal_parport є компонентом реального часу, тому його необхідно завантажити в потік реального часу за допомогою loadrt. Конфігураційний рядок описує паралельні порти, які будуть використовуватися, та (опціонально) їх типи. Якщо конфігураційний рядок не описує хоча б один порт, це є помилкою.
loadrt hal_parport cfg="port [type] [port [type] …]" - Вказівка порту
-
Числа нижче 16 відносяться до паралельних портів, виявлених системою. Це найпростіший спосіб налаштування драйвера hal_parport, який співпрацює з драйвером Linux parport_pc, якщо він завантажений. Порт 0 — це перший паралельний порт, виявлений в системі, 1 — наступний і так далі.
- Базова конфігурація
-
Це використовуватиме перший паралельний порт, який виявить Linux:
loadrt hal_parport cfg="0" - Використання адреси порту
-
Натомість, адресу порту можна вказати, використовуючи шістнадцяткове позначення 0x, а потім адресу.+ loadrt hal_parport cfg="0x378"
- Визначення типу порту
-
Для кожного паралельного порту, що обробляється драйвером hal_parport, можна додатково вказати тип. Тип може бути одним з in, out, epp або x.
Якщо тип не вказано, значення за замовчуванням – out.
Тип epp є таким самим, як out, але драйвер hal_parport вимагає, щоб порт переключився в режим EPP. Драйвер hal_parport не використовує протокол шини EPP, але в деяких системах режим EPP змінює електричні характеристики порту таким чином, що деяке периферійне обладнання може працювати краще. Відомо, що зарядний насос Gecko G540 вимагає цього на деяких паралельних портах.
Див. примітку вище щодо режиму x.
- Приклад з двома паралельними портами
-
Це ввімкне два паралельні порти, виявлені системою, перший у режимі виводу, а другий у режимі вводу:
loadrt hal_parport cfg="0 out 1 in" - Функції одного порту
-
Ви також повинні направити LinuxCNC на виконання функцій читання та запису.
addf parport.read-all base-thread
addf parport.write-all base-thread - Функції кількох портів
-
Ви можете наказати LinuxCNC запускати функції читання та запису для всіх підключених портів.
addf parport.0.read base-thread
addf parport.0.write base-thread
Окремі функції передбачені для ситуацій, коли один порт потрібно оновлювати в дуже швидкому потоці, а інші порти можна оновлювати в повільнішому потоці, щоб заощадити час процесора. Ймовірно, не варто одночасно використовувати функцію -all та окрему функцію.
ДИВІТЬСЯ ТАКОЖ
Драйвер паралельного порту (розділ «Драйвери обладнання» документації LinuxCNC), приклад паралельного порту PCI (розділ «Приклади обладнання» документації LinuxCNC)
АВТОР
Ця сторінка довідки була написана Джо Хілдрессом в рамках проекту LinuxCNC. Більшість інформації була взята з документації про паралельний порт, що знаходиться в розділі «Драйвери обладнання» документації. Наскільки нам відомо, ця документація була написана Себастьяном Кузьмінським та Крісом Радеком.