1.    
  2.    
  3.     Взаємодія програмних та апаратних засобів

Взаємодія програмних та апаратних засобів

 

Введення

Розуміння, яким чином програмна змінна приймає значення фізичної сигналу і як значення програмної величини перетворюється на конкретний сигнал може допомогти розробникам програмного забезпечення систем управління при розрахунку затримок, вирішенні задач оптимізації, забезпечення стійкості, розробки інтерфейсів і підключенні до процесорів і контролерам периферії: датчиків, виконавчих механізмів, та ін. В цій роботі розглядаються питання, пов’язані з перетворенням “програмна змінна – сигнал”: особливості побудови каналів передачі даних, підключення периферії до шин процесора, питання адресної прийому-передачі даних і робота гіпотетичного процесора при обміні даними з зовнішнім пристроєм.

Формування каналу передачі даних

Розглянемо канал передачі даних, який має всього два стани, наприклад, наявність або відсутність напруги. Передавач повинен встановлювати напрузі в лінії згідно з переданими даними, а приймач за вимірюваного напруги виділяти дані лінії. Найпростіший передавач включає джерело напруги і ідеальний ключ, який зміною власного опору (нуль або нескінченність) замикає або розмикає дроти. В якості ідеального приймача використовується вимірювач напруги (мультиметр) з нескінченним вхідним опором.

Рис. 1. Схема з невизначеним напругою в лінії передачі. В реальній схемі функцію ключа може виконувати транзистор.

У схемі Рис. 1 при замиканні ключа приймача передається 5В джерела, однак, коли ключ розімкнений на вході приймача знаходиться невизначений напруга. Цієї невизначеності немає в схемі Рис. 2, яка має два стійких стани 5В або 0В. Опір R додано в схему передавача для обмеження струму через замкнутий ключ. Перехідний процес в лінії пропорційна добутку ємності лінії на вихідний опір передавача, яке відрізняється при встановленні і скидання напруги в лінії. При установці напруги в лінії відбувається заряд ємності через опір R. Під час скидання напруги ємність розряджається через опір замкнутого ключа.

Рис. 2. Передача двох станів 5В і 0В. Тотожні схеми. Постійна часу (R*C) переходу з 0В в 5В (заряду ємності) більше постійної розряду лінії через ідеальний ключ з нульовим опором. Для зменшення часу встановлення напруги резистор R замінений ключем K1 (Рис. 3), в схему додано інвертор І-НЕ, який забезпечує роботу ключів К1 і К2 в протифазі (один замкнутий, інший – розімкнений).

Рис. 3. Ключі К1 і К2 мінімізують час перехідних процесів. Інвертор І-Не забезпечує роботу ключів в протифазі.

Проблеми передачі даних

Потік послідовних даних складається з нулів та одиниць. Нехай, станів 0В і 5В відповідають логічний нуль і одиниця відповідно (Рис. 4). Необхідно, щоб усі дані передавача були прийняті приймачем без втрат. Для цього

1. Передавач і приймач мають працювати з однаковим періодом (на однаковій частоті).

Рис. 4. Тактируемая послідовна передача даних
Припустимо, лінія тривалий час не міняє стан і знаходиться під напругою 5В. Як визначити – “передавач Передає дані 1111111111… чи ні?” Для вирішення цього питання протокол передачі даних необхідно доповнити наступними положеннями.

2. При відсутності передачі лінія знаходиться під напругою (в стані “1”).
3. Передача починається переходом з 1 в нуль.
4. Перший такт після переходу не містить даних.

Рис. 5. Введення стартового біта.

Чим довше послідовність даних (довжина пакета), тим вище продуктивність лінії. Але, з іншого боку, збільшення довжини пакета посилює вимоги до синхронізації роботи передавача і приймача і збільшує чутливість до перешкод в лінії, які можуть змінити передається послідовність. Для виявлення неправдивих даних вводять у послідовність контрольну суму або інші засоби, що захищають дані від втрат. У загальному випадку, довжина пакету повинна встановлюватися з урахуванням якості мережевого обладнання. Приклад передачі даних байтами показаний на Рис. 6. Продуктивність цієї лінії становить 66% (як 100% * 8 біт даних / 12 біт період).

Рис. 6. Побайтова передача даних по протоколу RS-232.

Для успішної передачі даних передавач і приймач повинні мати однакові параметри: частоту тактирования, наявність (відсутність) контрольного біта, однакову кількість стопових біт та ін.

Збільшення кількості приймачів і передавачів

Підключення до лінії додаткових приймачів (Рис. 7) не призводить до збою передачі даних якщо сумарна навантаження на передавач не перевищує граничну.

Рис. 7. Підключення до лінії передачі декількох приймачів.

Об’єднання виходів передавачів може викликати наскрізний струм, як показано на Рис. 8. Такий струм виникає коли передавачі одночасно видають в лінію інверсні рівні (низький та високий).

Рис. 8. Конфлікт передавачів з виходами +5В/0В. Червоними стрілками показаний струм короткого замикання.

Таблиця 1. Стан лінії передачі з двома передавачами і приймачем.

Вых_1Вых_2Вх_1Комментарий 000 01н.про.Коротке замикання джерела передавача 2 на землю передавача 1 10н.оКороткое замикання джерела передавача 1 на землю передавача 2 111

Передавачі з відкритим колектором (з єдиним нижнім ключем K2) можуть підключатися до лінії передачі групами. При використанні передавачів з відкритим колектором лінія повинна “підтягуватися” до джерела живлення через резистор, як показано на Рис. 9.

Рис. 9. Підключення декількох передавачів з відкритим колектором до загальної лінії.

Буфер і Регістр

Розглянемо принцип дії буфера і регістри, що використовуються для підключення приймачів і передавачів до шини даних процесора. Буфер – електронний пристрій з паралельними сигнальними входами і виходами. Виходи підключаються до відповідних входами тільки на час дії керуючого сигналу (Рис. 10). Решту часу відкриті колектори буфера утримують його у відключеному стані від вихідних ліній.

Рис. 10. Тимчасові діаграми роботи буфера.

Регістр – пристрій з пам’яттю (Рис. 11). У момент появи керуючого сигналу регістр встановлює на виходах значення вхідних сигналів і утримує вихідні сигнали без зміни до моменту появи наступного керуючого сигналу, який знову встановлює на виходах значення вхідних сигналів.

Рис. 11. Залежність виходу від входу регістра.

Дешифратор адреси

Тільки два пристрої (приймач і передавач) можуть брати участь в обміні даними, навіть якщо до лінії підключено декілька передавачів та/або приймачів. Для звернення до пристроїв, що беруть участь в обміні даними, кожному пристрою присвоюється унікальна адреса (ім’я пристрою). В системах паралельної передачі даних для звернення до пристроїв використовується адресна шина даних. У склад пристроїв повинен входити дешифратор адреси, який стежить за станом адресної шини і формує сигнал на виході при появі необхідної адреси.

Логіка роботи дешифратора адреси для четырехразрядной шини і одного пристрою з адресою 1011 показана на Рис. 12.

Рис. 12. Приклади логіки дешифратора адреси для одного пристрою з адресою 1011. Дешифратор адреси з декількома виходами (Рис. 13) активує тільки один вихід адреса якого знаходиться на вході дешифратора.

Рис. 13. Дешифратор адреси для 16 пристроїв.

Цикли запису, читання і підключення портів

Читання і запис даних розглядаються щодо пристрою, керуючого процесом обміну даними. Якщо це процесор, то “Запис” означає передачу від процесора, а “Читання” – прийом процесором. Для отримання даних від пристрою процесор виставляє адресу пристрою на шину адреси, потім – керуючий сигнал Читання RD і, через деякий час, зчитує стан шини даних (Рис. 14). Зовнішнє пристрій за допомогою дешифратора адреси має визначити звернення до нього і запиту даних RD процесором, підключити власні дані через буфер до шини даних і утримувати їх на шині не довше, ніж процесор почне новий цикл.

Рис. 14. Цикл читання.

Цикл запису процесор також починає з виставлення адреси пристрою на шину адреси, потім виставляє дані і повідомляє про це керуючим сигналом “Запис” WR (Рис. 15).

Зовнішнє пристрій, виявивши власну адресу на адресній шині і отримавши від процесора сигнал запису даних WR, записує стан шини даних в регістр.

Рис. 15. Цикл запису.

Зовнішня пам’ять

Якщо вихід регістра зовнішнього пристрою підключити до входу буфера, то вийде комірка пам’яті, яка може приймати дані, зберігати і виставляти дані на шину в циклі читання. Буфер і регістр можуть підключатися до загального або роздільним виходів дешифратора адреси. У першому варіанті (показаний на Рис. 16) запис і читання даних будуть відбуватися за однією адресою, у другому варіанті запис виконується за однією адресою – а читання записаних даних – з іншого.

Рис. 16. Осередок зовнішньої пам’яті.

Структура гіпотетичного процесора

Гіпотетичний процесор (Рис. 17) включає наступні основні частини.

  • Арифметико-Логічний Пристрій (АЛП). Виконує арифметичні і логічні перетворення.
  • Акумулятор. Регістр, зберігає результати АЛУ, обмінюється даними з пристроями, підключеними до шини даних.
  • Дешифратор команд. Аналізує інструкції.Керує лічильником команд і запускає роботу схеми керування.
  • Схема управління. Виробляє необхідну послідовність керуючих сигналів, що забезпечують виконання операцій.
  • Регістри процесора. Зберігають адреси і дані.
  • Сигнали управління Читання RD, “Запис” WR та ін. Служать для управління передачею даних.

Для роботи процесора потрібна пам’ять програм і даних, яка підключається до процесора через адресну шину, шину даних і сигнали шини управління: “Читання пам’яті” і “Запис в пам’ять”. Програма, яку виконує процесор, знаходиться в пам’яті програм.

Процесор має сигнали “Читання пристрої введення/виведення” і “Запис в пристрій вводу/виводу”, які використовуються при зверненні до зовнішніх пристроїв – портів.

Адресні простори програмної пам’яті і портів можуть перекриватися.

Рис. 17. Структура гіпотетичного процесора [1].

Принцип організації управління виконанням програм гіпотетичним процесором містить наступні положення.

  • У коді команди міститься повна інформація про те, що необхідно виконати процесору і де розташовується наступна команда.
  • На початку роботи лічильнику команд процесора присвоюється значення адреси першої команди програми.
  • Виконання команди включає цикл вибірки команди і цикл(и) виконання.
  • У циклі вибірки вміст лічильника команд завантажується в регістр адреси пам’яті, потім команда із зовнішньої пам’яті передається через шину даних в регістр команд процесора.
  • В циклі виконання дешифратор команд визначає розмір команди (займану командою область пам’яті в байтах), схема управління встановлює значення адреси наступної команди в лічильнику команд шляхом збільшення лічильника на розмір виконуваної команди.
  • У многобайтной команді, крім коду команди містяться адреси операндів і/або значення операндів. При виконанні многобайтной команди регістр адреси пам’яті послідовно збільшується на одиницю, вказуючи на адресу використовуваного байта команди, а схема управління підключає відповідні комірки пам’яті до регістрів процесора.
  • Передача команд і даних по шині даних здійснюється від буфера передавача до регістра-приймача, як було розглянуто на Рис. 14, Рис. 15, Рис. 16.

Команди введення/виводу (звернення до портів).

Список команд процесора входять команди звернення до портів, наприклад, для процесора х86 це команди OUT IN. При обміні даними з зовнішнім портом беруть участь регістри загального призначення DX і AX. В DX записується адреса порту, регістр AX використовується для прийому-передачі даних.

Приклад запису в порт за адресою PORT_NUMBER даних DATA:

MOV DX, PORT_NUMBER; // Запис адреси порту в регістр DX
MOV AL, DATA; // Запис байта даних в молодший байт акумулятора
OUT DX, AL; // Запис в порт. На адресну шину видається вміст регістра DX, на шину даних – вміст регістра AL. Посилка даних синхронізується сигналом управління “Запис в пристрій вводу/виводу”.

Приклад читання даних з порту з адресою PORT_NUMBER із збереженням їх в регістрі AL.

MOV DX, PORT_NUMBER; // Запис адреси порту в регістр DX
IN AL, DX; // Читання порту. На адресну шину видається вміст регістра DX, потім виставляється сигнал управління “Читання пристрою вводу/виводу”.

Стан шини даних записується в регістр AL в момент закінчення сигналу управління.

Примітка. 1. При відсутності пристрою або даних пристрою в момент закінчення сигналу “Читання пристрої введення/виведення” процесор записує в AL стан шини даних. Існують різні схеми та алгоритми для підвищення надійності прийому/передачі, які тут не розглядаються.

2. На мовах високого рівня для обміну даними з портами існують власні команди або використовуються вставки асемблерного коду. Приклад покрокового обміну даними між процесором і портами зовнішнього пристрою Взаємодія програмних та апаратних засобів показано на прикладі виконання програми гіпотетичним процесором, який обмінюється даними з зовнішнім пристроєм (Рис. 18).

Рис. 18. Процесор з зовнішньою пам’яттю і портами.

Програмна змінна повинна знаходиться в акумуляторі процесора. Зовнішнього пристрою присвоєно адресу 378h, який використовується як при читанні, так і при запису. Сигнал молодшого розряду на буфері зовнішнього пристрою залежить від стану кнопки. До молодшого розряду виходу регістра підключений світлодіод. Світлодіод повинен відслідковувати стан кнопки: включатися при віджатою кнопці і вимикатися при замкнутих контактах кнопки, а програмна змінна відстежувати стан світлодіода. Для цього процесора в циклі необхідно зчитувати акумулятор сигнали зовнішнього пристрою зі входу буфера, а потім дані акумулятора записувати в реєстр зовнішнього пристрою.

Програма, розташована з нульового адреси в підключеної до процесора зовнішньої пам’яті, містить наступні команди.

  • ЗАВАНТАЖЕННЯ РЕГІСТРОВОЇ ПАРИ ПРЯМА (LRP dx). Записує в регістр DX процесора дані команди.
  • ЗЧИТУВАННЯ ПОРТУ (IN al,dx). Передає дані зовнішнього пристрою в молодший регістр акумулятора. Адреса зовнішнього пристрою береться з регістра DX процесора.
  • ЗАПИС В ПОРТ (OUT dx,al) передає дані молодшого байта зовнішнього акумулятора пристрою. Адреса зовнішнього пристрою знаходиться в регістрі DX процесора.
  • ПЕРЕХІД (JMP). Перехід до наступної команди за вказаною адресою.

На початку роботи лічильнику команд присвоюється значення початкової адреси (точки входу) програми 0000.

Трехбайтная команда ЗАВАНТАЖЕННЯ РЕГІСТРОВОЇ ПАРИ ПРЯМА (LRP dx) включає один цикл вибірки команди і два циклу виконання. У циклі вибірки вміст лічильника команд завантажується в регістр адреси пам’яті значення якого з’являється на адресній шині і декодується дешифратором адреси пам’яті, який вказує на нульову комірку пам’яті. При отриманні сигналу “Читання пам’яті” пристрій зовнішньої пам’яті виставляє на шину даних нульовий вміст комірки – першу команду, яка записується схемою управління в регістр команд процесора. В циклі виконання, при декодуванні команди, пристрій керування збільшує вміст лічильника команд на три – величину займаної командою області пам’яті в байтах. Тепер лічильник вказує на адресу наступної команди 0003. Для звернення до другого байту команди схема керування процесора збільшує регістр адреси пам’яті на одиницю. Адреса 0001 подається на адресну шину. Отримавши адресу і керуючий сигнал процесора пристрій зовнішньої пам’яті підмикають вміст комірки 0001 (число 03h) до шини даних. Схема управління записує число 03h в старший байт DH регістрової пари загального призначення DX. Друга половина фази виконання починається з збільшення регістр адреси пам’яті на одиницю до 0002, у цій комірці пам’яті міститься третій байт команди (число 78h), який як і два попередніх потрапляє на шину даних, значення байта записується молодший байт DL пари DX процесора. На цьому закінчується виконання команди LRP dx, в результаті адреса порту зовнішнього пристрою знаходиться в регістрі DX процесора.

При виконанні наступної команди IN al,dx в циклі вибірки схема управління процесора завантажує вміст лічильника команд в регістр адреси пам’яті і виставляє сигнал “Читання пам’яті”, команда з третьої комірки пам’яті записується в регістр команд. В циклі виконання команди схема управління збільшує вміст лічильника команд на один байт – величину розміру команди, лічильник вказує на адресу наступної команди 0004. Потім байти регістрової пари DX послідовно записуються в регістри адреси пам’яті, таким чином адреса порту зовнішнього пристрою з’являється на адресній шині. Дешифратори і зовнішньої пам’яті та зовнішнього пристрою вказують на клітинку 378h, але, оскільки схема керування процесора у відповідності з кодом команди видає сигнал “Читання вуст. в/вив” а не “Читання пам’яті”, то тільки буфер зовнішнього пристрою з адресою 378h підключається до шини даних і сигнали пристрою, включаючи стан кнопки, через буфер надходять на шину даних. Схема керування процесором записує вміст шини даних в молодшому регістрі акумулятора.

Після зчитування з пам’яті команди OUT dx,al вміст лічильника команд збільшується на 1. Його вміст тепер 0005 – адресу наступної команди JMP. Вміст регістрової пари DX (0378h) пересилається в регістр адреси пам’яті процесора. Вміст молодшого байта акумулятора AL поміщається на шину даних. При надходженні сигналу “Запис вуст. в/вив” ці дані з шини записуються в регістр зовнішнього пристрою, до якого підключений світлодіод. По команді ПЕРЕХІД (JMP) в лічильник команд з другого і третього байта команди JMP завантажується нове значення 0003 – адресу першої команди наступного циклу. Далі виконується команда IN al,dx і інші команди. Описаний процес повторюється до тих пір, поки не відбудеться зупинка процесора.

Висновок

Фізичний сигнал приймає значення програмної змінної в результаті виконання процесором команди “Запис в порт”, яка супроводжується передачею даних по адресній шині, прийому-передачі даних по шині даних і формуванням відповідного сигналу шини управління. “Читання порту” дозволяє присвоїти програмної змінній значення фізичного сигналу. Тут також бере участь передача даних по адресній шині і шині даних з формуванням сигналу управління – читання пристрою вводу/виводу.

Аналогічним чином відбуваються перетворення змінної в контролерах або в міні-комп’ютерах, в яких зовнішня пам’ять та/або порти об’єднані з процесором на одному кристалі або на загальній платі.

Література

1. Введення в мікропроцесорну техніку Автор: Ч. Гілмор Видавництво: Мир Рік: 1984 Сторінок: 314. Мова: російська.

2. Dr. Bob Davidov.

 

06.01.2017

Написати коментар