- •Оглавление
- •Организация системы ввода-вывода вычислительной системы ...... 10
- •Способы обмена информацией между устройствами
- •Аппаратные интерфейсы вычислительных систем ..................................... 68
- •Интерфейс rs-485 ........................................................................................... 175
- •Введение
- •Организация системы ввода-вывода вычислительной системы
- •Основы архитектурной организации вычислительной системы
- •1.1.2 Достоинства и недостатки Принстонской архитектуры
- •1.1.1 Принципы Фон-Неймановской архитектуры
- •1.1.3 Достоинства и недостатки Гарвардской архитектуры
- •Организация вычислительной системы. Элементы вычислительного ядра и системы ввода-вывода
- •1.2.1 Процессор и память
- •1.2.2 Контроллер ввода-вывода
- •1.2.3 Процессор ввода-вывода
- •1.2.4 Интерфейс и протокол
- •1.2.5 Порт ввода-вывода
- •1.2.5.1 Адресное пространство портов ввода-вывода: единое с оперативной памятью и раздельное
- •1.2.5.2 Организация конфигурируемых параллельных портов вводавывода
- •Принципы организации систем ввода-вывода
- •1.3.1 Организация свв универсальных эвм
- •1.3.2.1 Порты ввода-вывода
- •1.3.2.2 Дискретные порты ввода-вывода
- •1.3.2.3 Однонаправленные порты
- •1.3.2.4 Двунаправленные порты и порты с альтернативной функцией
- •1.3.2.7 Устройства сопряжения с объектом (усо) управляющих эвм
- •Способы обмена информацией между устройствами вычислительной системы
- •Программно управляемые:
- •В режиме прямого доступа (без участия центральных процессоров).
- •Синхронный обмен данными
- •Асинхронный обмен данными с программной проверкой готовности
- •Асинхронный обмен данными с аппаратной проверкой готовности
- •2.3.1 Система прерываний
- •2.3.4 Аппаратный полинг
- •2.3.5 Характеристики систем прерываний
- •2.3.6 Контроллер прерываний 8259a
- •Организация обмена в режиме прямого доступа
- •2.4.1 Общие принципы организации пдп
- •Аппаратные интерфейсы вычислительных систем
- •Характеристики аппаратных интерфейсов
- •Функции аппаратных интерфейсов
- •Классификация аппаратных интерфейсов
- •Системные интерфейсы.
- •Стандартные периферийные интерфейсы.
- •Малые периферийные интерфейсы.
- •Понятие интерфейсных систем
- •Реализация аппаратных интерфейсов: проблемы и технические решения
- •3.5.1 Электромагнитные помехи
- •3.5.2 Характеристики линии связи
- •3.5.3.1 Коаксиальный кабель
- •3.5.3.2 Витая пара
- •3.5.3.3 Плоский кабель
- •3.5.3.4 Полосковые линии связи
- •3.5.5 Симметричная и несимметричная схема передачи сигналов
- •3.5.5.1 Дифференциальный сигнал
- •3.5.5.3 Симметричная передача сигнала
- •3.5.6.1 Потенциальный код без возвращения к нулю
- •3.5.6.2 Метод биполярного кодирования с альтернативной инверсией
- •3.5.6.3 Потенциальный код с инверсией при единице
- •3.5.6.4 Биполярный импульсный код
- •3.5.6.5 Манчестерский код
- •3.5.6.6 Потенциальный код 2b1q
- •3.5.7 Приемопередатчик последовательного интерфейса
- •3.5.8 Особенности параллельных интерфейсов
- •3.5.9 Мультиплексирование, конвейеризация, блочная передача
- •3.5.10.2 Реализация гальванической изоляции дискретного выхода модуля ввода-вывода sdx-09
- •3.5.10.3 Реализация гальванической изоляции дискретного входа модуля ввода-вывода sdx-09
- •3.5.10.4 Реализация гальванической изоляции rs-232 в контроллере sdk-1.1
- •3.5.10.5 Технология iCoupler фирмы Analog Devices
- •3.5.11 Горячее подключение и автоконфигурирование
- •3.5.11.1 Горячее подключение
- •3.6 Внутрисистемный интерфейс amba
- •3.6.3 Периферийный интерфейс amba apb
- •Idle – устройство не готово, шина находится в исходном состоянии.
- •3.7 Системные интерфейсы
- •3.7.1 Интерфейс pci
- •3.7.2 Интерфейс pci Express
- •3.8 Стандартные периферийные интерфейсы
- •3.8.1 Интерфейс scsi
- •3.8.1.8 Команды scsi
- •3.8.3 Сравнение sas и параллельного scsi
- •3.8.4 Сравнение sas и sata
- •3.9 Малые периферийные интерфейсы
- •3.9.1 Интерфейс rs-232
- •3.9.1.1 Сигнальные линии последовательного интерфейса
- •3.9.1.2 Управление потоком
- •3.9.1.3 Разъемы и кабели
- •3.9.1.4 Формат последовательной передачи данных
- •3.9.1.5 Работа с последовательным каналом
- •3.9.2.1 Типы подключения к шине spi
- •3.9.2.2 Режимы работы шины spi
- •3.9.2.3 Достоинства шины spi
- •3.9.2.4 Недостатки шины spi 1. Больше линий, чем в i2c.
- •3.9.3 Интерфейс Centronics
- •3.9.4.1 Физический интерфейс Serial ata
- •3.10 Контроллерные сети
- •3.10.1 Интерфейс rs-485
- •3.10.1.1 Согласование и конфигурация линии связи
- •3.10.1.2 Защитное смещение
- •(Верхняя диаграмма), передача данных (средняя диаграмма), приѐм данных от устройства (нижняя диаграмма).
- •3.10.3 Интерфейс i2c
- •3.10.3.1 Концепция шины i2c
- •3.10.3.2 Реализация монтажного и и монтажного или
- •3.10.3.3 Принцип работы шины i2c
- •3.10.3.5 Подтверждение
- •3.10.3.6 Синхронизация
- •3.10.3.7 Форматы обмена данными по шине i2c (7-битный адрес)
- •3.10.3.8 Арбитраж
- •3.10.3.9 Достоинства шины i2c
- •3.10.4.1 Модель передачи данных
- •3.10.4.2 Протокол
- •3.11 Сети передачи данных систем обработки данных. Беспроводные сенсорные сети
- •3.11.1 Сети передачи данных
- •3.11.2 Беспроводные сенсорные сети
- •Приложение а. Система ввода-вывода учебного лабораторного стенда sdk-1.1
- •А.2 Состав стенда
- •А.3 Вычислительное ядро и система ввода-вывода
- •А.3.5.1 Матричная клавиатура
- •А.3.5.2 Жидкокристаллический индикатор
- •А .3.5.3 Светодиодные индикаторы
- •А.3.5.4 Звукоизлучатель
- •А.3.5.5 Дискретные входы-выходы
- •Приложение б. Комплекс лабораторных работ для учебного лабораторного стенда sdk-1.1 б.1 Лабораторная работа № 1 «Дискретные порты ввода-вывода»
- •Б.2 Лабораторная работа № 2 «Таймеры. Система прерываний»
- •Б.2.3.2 Пояснения для вариантов заданий с использованием звукового излучателя
- •(Слева) на принципиальной электрической схеме контроллера sdk-1.1
- •Б.3 Лабораторная работа № 3 «Последовательный интерфейс rs-232. Uart»
- •Б.4 Лабораторная работа № 4 «Клавиатура»
- •Б.5 Лабораторная работа № 5 «Жидкокристаллический индикатор»
- •Б.6 Лабораторная работа № 6 «Последовательный интерфейс i2c»
- •Приложение в. Проектирование и разработка программы
- •Приложение г. Требования к оформлению программ на языке Си г.1 Соглашения по идентификаторам
- •Г.2 Соглашения по самодокументируемости программ
- •Г.3 Соглашения по читаемости программ
- •Литература
Б.2.3.2 Пояснения для вариантов заданий с использованием звукового излучателя
Требуется написать драйвер звукового излучателя, позволяющий задавать частоту (в герцах) и длительность звука (в миллисекундах).
Для управления звуковым излучателем используется регистр ПЛИС ENA (адрес 080004h). 2-4 биты регистра ENA управляют величиной напряжения на динамике, т.е. позволяют задавать громкость звука2: чем больше «единиц» выставлено в этих битах, тем громче звук. Частота звука задается частотой смены нулей и единиц в управляющих битах регистра ENA. Ниже, в табл. 15, приведены частоты нот первой октавы.
Таблица 15. Частоты музыкальных нот
Нота |
Частота, Гц |
До |
261,63 |
Ре |
293,67 |
Ми |
329,63 |
Фа |
349,22 |
Соль |
391,99 |
Ля |
440,00 |
Си |
493,88 |
Частоты нот каждой соседней октавы отличаются в 2 раза. Например, частота ноты «ля» второй октавы 880 Гц.
Б.2.4 Особенности обработки прерываний в стенде SDK-1.1
В микроконтроллере ADuC812 девять источников прерываний с двумя уровнями приоритетов (см. табл. 16). Когда происходит прерывание, значение программного счетчика помещается в стек, а в сам счетчик загружается адрес соответствующего вектора прерывания.
Таблица 16. Адреса векторов прерывания микроконтроллера ADuC812
Прерывание |
Наименование |
Адрес вектора |
PSMI |
Монитор источника питания ADuC812 |
43H |
IE0 |
Внешнее прерывание INT0 |
03H |
ADCI |
Конец преобразования АЦП |
33H |
TF0 |
Переполнение таймера/счетчика 0 |
0BH |
IE1 |
Внешнее прерывание INT1 |
13H |
TF1 |
Переполнение таймера/счетчика 1 |
1BH |
I2CI/ISPI |
Прерывание от I2C/SPI |
3BH |
RI/TI |
Прерывание от UART |
23H |
TF2/EXF2 |
Переполнение таймера/счетчика 2 |
2BH |
Для каждого источника прерывания программист может задать один из двух уровней приоритета: высокий и низкий. Прерывание с высоким уровнем приоритета может прерывать обслуживание прерывания с низким уровнем приоритета, а если прерывания с разными уровнями происходят одновременно, то прерывание с высоким приоритетом будет обслужено первым. Обслуживание прерывания не может быть прервано прерыванием с таким же уровнем приоритета. Если два прерывания с одинаковым уровнем приоритета происходят одновременно, то порядок их обработки определяется с помощью следующей табл. 17:
Таблица 17. Порядок обработки прерываний с одинаковым уровнем приоритета
Источник |
Очередность |
Описание |
PSMI |
1 (Наивысшая) |
Монитор источника питания ADuC812 |
IE0 |
2 |
Внешнее прерывание INT0 |
ADCI |
3 |
Конец преобразования АЦП |
TF0 |
4 |
Переполнение таймера/счетчика 0 |
IE1 |
5 |
Внешнее прерывание INT1 |
TF1 |
6 |
Переполнение таймера/счетчика 1 |
I2CI+ISPI |
7 |
Прерывание от I2C/SPI |
RI+TI |
8 |
Прерывание от UART |
TF2+EXF2 |
9 (Низшая) |
Переполнение таймера/счетчика 2 |
Прерывания ADuC812 имеют вектора в диапазоне 0003h-0043h, которые попадают в область младших адресов памяти программ. Это пространство соответствует 8Кб (0000h-2000h) FLASH-памяти.
В стенде SDK-1.1 пользователь не имеет возможности записи во FLASHпамять (запись программ осуществляется во внешнюю память программ и данных), следовательно, не может подставить свои процедуры обработки прерываний (точнее, команды перехода к процедурам) по адресам, соответствующим векторам прерываний.
Проблема использования прерываний в пользовательских программах решается следующим образом (см. рис. 128):
По адресам (0003h-0043h) векторов прерываний во FLASH-памяти SDK-1.1 располагаются команды переходов на вектора пользовательской таблицы, размещенной в адресах 2003h-2043h.
По адресам векторов пользовательской таблицы пользователем указываются команды переходов на процедуры обработки прерываний.
Приведем пример помещения собственного вектора в пользовательскую таблицу. Программа использует прерывание от таймера 0 (прерывание 0Bh) для зажигания линейки светодиодов. Данный пример адаптирован для компилятора SDCC. По сравнению с компилятором Keil C51 изменения коснулись функции SetVector (в связи с тем, что компилятор SDCC и микроконтроллер ADuC812 используют различные способы записи многобайтовых чисел в памяти; SDCC – little-endian, ADuC812 – big-endian) и заголовка функции обработчика прерывания (T0_ISR).
#include "aduc812.h"
#define MAXBASE 8
///////////////////////// WriteMax /////////////////////////// // Запись байта в регистр ПЛИС
// Вход:
// regnum – адрес регистра ПЛИС, // val – записываемое значение.
// Выход: нет.
// Результат: нет.
////////////////////////////////////////////////////////////// void WriteMax (unsigned char xdata *regnum, unsigned char val)
{
// Сохранение текущего значения регистра страниц unsigned char oldDPP = DPP;
-
DPP = MAXBASE;
// Установка адреса страницы ПЛИС
*regnum = val;
// Запись значения в регистр ПЛИС
DPP = oldDPP;
// Восстановление сохраненного значения
// регистра страниц
}
//////////////////////// WriteLED ///////////////////////////
// Функция установки состояния линейки светодиодов.
// Вход:
// value – состояния светодиодов.
// Выход: нет.
// Результат: нет.
////////////////////////////////////////////////////////////// void WriteLED(unsigned char value)
{
// Запись состояния светодиодов в регистр 7-й регистр ПЛИС
WriteMax( 7, value );
}
//////////////////////// T0_ISR //////////////////////////////
// Обработчик прерывания от таймера 0.
// Вход: нет.
// Выход: нет.
// Результат: нет.
////////////////////////////////////////////////////////////// void T0_ISR( void ) __interrupt ( 1 )
{
WriteLED( 0x55 ); // Зажигание светодиодов (через один) }
//////////////////////// SetVector ////////////////////////// // Функция, устанавливающая вектор прерывания в
// пользовательской таблице прерываний.
// Вход:
// Vector – адрес обработчика прерывания,
// Address – вектор пользовательской таблицы прерываний.
// Выход: нет.
// Результат: нет.
////////////////////////////////////////////////////////////// void SetVector(unsigned char xdata * Address, void * Vector)
{ unsigned char xdata * TmpVector; // Временная переменная
// Первым байтом по указанному адресу записывается
// код команды передачи управления ljmp, равный 02h
*Address = 0x02;
// Далее записывается адрес перехода Vector
TmpVector = (unsigned char xdata *) (Address + 1);
*TmpVector = (unsigned char) ((unsigned short)Vector >> 8);
++TmpVector;
*TmpVector = (unsigned char) Vector;
// Таким образом, по адресу Address теперь
// располагается инструкция ljmp Vector
}
//////////////////////// Main ////////////////////////////////
// Главная функция
////////////////////////////////////////////////////////////// void main( void )
{
-
TH0 = 0xFF;
// Инициализация таймера 0
TL0 = 0xF0;
//
TMOD = 0x01;
//
TCON = 0x10;
//
// Установка вектора в пользовательской таблице
SetVector( 0x200B, (void *)T0_ISR );
// Разрешение прерываний от таймера 0
ET0 = 1; EA = 1;
while( 1 );
}
В ходе выполнения лабораторной работы производится ознакомление с организацией и принципом работы не только таймеров/счетчиков по прерываниям, но и внешних прерываний INT0/INT1. Необходимо отметить, что в случае последних возможны следующие настройки: по перепаду (фронт или спад напряжения) или по уровню напряжения на внешнем входе. В контроллере SDK-1.1 линии счетного входа таймера/счетчика 0/1 (T0/1) и внешних прерываний INT0/INT1 выведены на DIP-переключатели SW3-1 (см. рис. 129).
Рис. 129. Расположение линий T0/1 и INT0/1 МК ADuC812 (справа) и их вывод на DIP-переключатели
