

Организация ввода-вывода
1
I/O
в/в |
GP IO |
|
|
Устройства |
IC |
|
DMA
Timers
CPU
RAM
Flash
EEPROM
•CPU (Central Processing Unit):
AMD80188-40MHz, ARM-11 – 300MHz
•RAM (Random Access
Memory): 64Kb – 10Mb
•Flash: 64Kb – 10Mb
•EEPROM (Electrical Erasable Programmable Read-Only Memory):
2 – 10Kb
•Timers –
•Interval Timer
•Watchdog Timer
•Real-Time Clock
•GP I/O (General Purpose I/O)
•IC (Interrupt Controller)
•DMA (Direct Memory Access)

Ввод/вывод по готовности
2
GP I/O
1 |
|
|
Чтение Pi |
2 |
|
|
|
P |
CPU |
|
|
|
|
|
|
n |
|
|
Pi = 0 |
|
|
|
|
R |
RAM |
«Что-то» |
Ввод (R) |
GP I/O – General Purpose I/O

Ввод/вывод по прерыванию
3
IR |
IC |
CPU |
RAM
R
An Ak
An
ISR
ISR– Interrupt Service Routine
1.Сигнал на входе IRk
2.Процессор оканчивает текущую команду и запоминает контекст
3.Interrupt Controller (IC) передает адрес вектора прерывания Ak
4.Управление передается программе P, адрес точки входа которой (An) хранится в векторе
5.Программа Р читает (записывает) содержимое регистра R
6.Восстановление контекста
Прерывание «Что-то»
ISR
«Что-то»
Возврат

Реализация процедуры прерывания
4
Программа
Событие
Адрес возврата
x:
|
|
Вектор |
|
Системный стек |
|
Регистр |
|||
|
|
|
|
|
|||||
|
прерывания i-го |
|
|
|
указателя |
||||
|
|
x |
|
||||||
|
|
|
стека (SP) |
||||||
|
|
события |
|
|
|
|
|||
|
|
|
|
||||||
|
|
Адрес p |
|
|
Контекст |
|
|
||
|
|
||||||||
|
|
|
|
|
|
|
«фоновой |
|
|
|
|
|
|
|
|
|
|
||
|
|
Запоминание |
|
программы» |
|
|
|||
контекста, передача |
|
в точке x |
|
|
|||||
управления по адресу |
|
|
|
|
|||||
|
|
р |
|
|
|
Процедура |
|||
|
|
|
|
p: |
|
|
|
||
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
обработки |
|
|
|
|
|
|
|
|
|
прерывания: |
|
|
|
|
|
|
|
return |
||
|
|
|
|
|
|
|
|
примитив ОС |
|
|
|
|
|
|
|
|
|
|
|
|
|
Восстановление |
|
|
|
||||
|
|
|
|
|
|
||||
контекста, возврат из |
return - инструкция возврата |
||||||||
|
|
прерывания |
из процедуры обработки прерывания, автоматически восстанавливает контекст

Прямой доступ в память
5Идея DMA – временное разделение внутренней магистрали процессора между потоком команд и вводом/выводом данных в память
Цикл процессора – действие, которое необходимо выполнить
для передачи одного слова
t
Пример: Команда MOV AL, TOTAL – два цикла:
•Считывание КОП
•Считывание TOTAL в младшую часть регистра A
Команда процессора требует от 1 до 10 циклов

Процедура прямого доступа
6Предлагается – при использовании DMA каждый n-й цикл отдавать под ввод/вывод по прямому доступу
Циклы процессора |
t |
|
|
Цикл DMA |
Циклы процессора |
t |
|
Программа работает без DMA
Запуск DMA
Работа с DMA
Без DMA
Прерывание
Окончание
работы DMA
Возврат

Организация канала прямого доступа
7
Данные
7
I/O
7
2 1
|
DMA |
4 |
|
3 |
5 |
||
Controller |
|||
|
6 |
||
|
|
8 IC
CPU
RAM
D
1.Инициирование DMA – установка начального адреса, количества передаваемых слов
2.Запрос ввода/вывода (*)
3.Разрешение ввода/вывода (*)
4.Запрос цикла
5.Разрешение цикла
6.Адрес ввода/вывода
7.Ввод слова
8.Запрос на прерывание по окончанию ввода/вывода
(*)Установлены постоянно, пока идет обмен; снимаются по (8)

|
4. Таймеры |
8 |
Интервальный таймер |
а
Значение интервала, режим работы
Регистр управления
От генератора Импульсов
(1.1931816 МГц)
Счетчик
Регистр-защелка
б
в
Запрос на РП прерывание
Запрос текущего значения

Интервальный таймер, пример: i8254
9
Периодические запросы на прерывание
Однократные запросы на Прерывание
Генератор сигналов заданной длительности, скважности
Измерение временных интервалов между событиями
Счетчик событий, запрос на прерывание по заданному количеству событий

Watchdog
10
# define interval 100
clock |
|
CPU |
main () |
|
|
|
|||
|
|
|
{ |
|
|
restart |
|
while(true) |
|
Watchdog |
RAM |
{ |
||
|
||||
|
|
restartWD(interval); |
||
|
reset |
|
||
|
|
measure(); |
||
|
|
Flash |
makeControlDecision(); |
|
|
|
output(); |
||
|
|
|
||
|
|
|
sleep(10); -- (Кстати, это нехорошо!) |
|
|
|
|
} |
|
|
|
|
} |
|
http://www.netrino.com/Publications/Glossary/WatchdogTimer.html |