Реклама:

data = Cent_Status_drv() & STATUS_DATA;

// Чтение младшей // тетрады

// Старший байт адреса ОЗУ и чтение старшей тетрады данных

outportb (Cent_Base, (addr»8) | Т1_Т2); // Установка

// старшего байта . // адреса и // режима чтения // старшей тетрады данных Cent_Control_drv (AH_W); // Адрес регистра старшего

// байта адреса Cent_Control_drv (AH_W | SLCTIN); // Строб записи = 1 Cent_Control_drv (0); // Строб записи = 0

data += (Cent_Status_drv() & STATUS_DATA) « 4;

// Чтение старшей // тетрады

Cent_Control_drv (0); // Исходное состояние

return data;

\

II Конец драйверов

Ниже приведен текст программы, реализующей функциональный тест "Поле нулей" модуля ОЗУ.

#define RAM_SIZE 16384

include <STDIO.H>

// Программа выводит на экран сообщение

// о результатах теста — ОК или количество ошибок

void main (void)

{

unsigned i;

unsigned char data = 0; // Поле нулей

unsigned err; // Счетчик ошибок

if (lnit_RAM() == 0) // Инициализация

exit (1); // He подключено '

// Запись поля нулей for (i=0;KRAM_SIZE:i++) Write_RAM (i, data); // Чтение и сравнение с полем нулей for (i=0,err=0;i<RAM_SIZE:i++) if ( Read_RAM (i) != data ) err++;

// Вывод на экран результатов теста if (err = 0)

printf ("Нет ошибок."); elseprintf ("Ошибок — %u", err); }

3.3.3. Драйверы универсального параллельного адаптера

Драйверы УПА реализуют функции инициализации, записи управляющего слова, записи данных в порт и чтения данных из порта.

//***** Драйверы УПА *****

// Глобальные переменные int Cent_Base; // Базовый адрес порта unsigned char CW; // Управляющее слово

// Прототипы функций нижнего уровня (см. п.3.2.1) // Запись в регистр управления Centronics extern void Cent_Control_drv (unsigned char control); // Чтение из регистра управления Centronics

extern unsigned char Cent_Status_drv (void);

// Прототипы функций

// Функция инициализации.

int InitJJPA (void);

// Функция записи управляющего слова

void WriteCW_UPA (void);

// Функция записи данных в порт

void WritePJJPA (unsigned port, unsigned char data);

// Функция чтения данных из порта

unsigned char ReadPJJPA (unsigned port);

// Маски битов регистров данных, управления и состояния // Регистр данных — бит переключения тетрад при чтении #define Т1_Т2 0x80 // Регистр управления #define SLCTIN 0x08 // Регистр состояния #define BUSY 0x10 #define STATUS_DATA OxOF

// Функция инициализации.

// Определяет адрес порта, к которому подключен модуль // (по сигналу BUSY).

// Возвращает: 1 — модуль подключен, 0 — не подключен

int InitJJPA (void)

{

int *b;

b = (int *) MK_FP (0, 0x408);// Указатель на ячейку 0:408 while ( *b != 0 ) // Если порт установлен

{

Cent_Base = *b; // Считываем

// его базовый адрес if (Cent_Status_drv() & BUSY != 0) continue; // Модуль не подключен

// к этому порту Cent_Control_drv (OxF); // Строб записи = 1 -

// исходное состояние return 1; // Модуль подключен

)

return 0; // Модуль не подключен

}

// Функция записи управляющего слова УПА

void WriteCW_UPA (void)


⇐ Предыдущая страница| |Следующая страница ⇒