Реклама:

//"*** Драйверы модуля ОЗУ *****

// Глобальная переменная — базовый адрес порта int Cent_Base;

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

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

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

int lnit_RAM (void);

// Функция записи данных

void Write_RAM (unsigned addr, unsigned char data);

// Функция чтения данных

unsigned char Read_RAM (unsigned addr);

// Маски битов регистров данных, управления и состояния

// Регистр данных

#define Т1_Т2 0x80

#define RE 0x40

// Регистр управления

#define AL_W 0x00

#define AH_W 0x01

#define RAM_W 0x02

#define SLCTIN 0x08

// Регистр состояния

#define BUSY 0x10

#define STATUS_DATA OxOF

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

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

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

int lnit_RAM (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 (0); // Строб записи = 0 return 1; // Модуль подключен

}

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

}

// Функция записи данных в ОЗУ.

// Вход: data — байт данных, addr — адрес

void Write_RAM (unsigned addr, unsigned char data)

{

// Младший байт адреса ОЗУ

outportb (Cent_Base, addr); // Установка младшего

// байта адреса Cent_Control_drv (AL_W); // Адрес регистра младшего

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

// Старший байт адреса ОЗУ

outportb (Cent_Base, (addr»8) | RE );// Установка старшего

// байта адреса // и режима записи

Cent_Control_drv (AH_W); //Адрес регистра

//старшего // байта адреса

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

Cent_Control_drv (0); // Строб записи = 0

// Байт данных

outportb (Cent_Base, data); // Установка байта данных

Cent_Control_drv (RAM_W); // Адрес данных

Cent_Control_drv (RAM_W | SLCTIN); // Строб записи = 1 Cent_Control drv (0); // Строб записи = 0

}

// Функция чтения данных из ОЗУ

// Вход: addr — адрес.

// Возвращает: байт данных

unsigned char Read RAM (unsigned addr) {

unsigned char data;

// Младший байт адреса ОЗУ

outportb (Cent_Base, addr); // Установка младшего

// байта адреса

Cent_Control_drv (AL_W); // Адрес регистра младше

// байта адреса

Cent_Control_drv (AL_W | SLCTIN); // Строб записи = 1

Cent_Control_drv (0); // Строб записи = 0

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

outportb (Cent_Base, (addr»8)); // Установка старшего

// байта адреса и // режима чтения // младшей тетрады данных

Cent_Control_drv (AH_W); // Адрес регистра старшего

// байта адреса

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

Cent_Control_drv (0); // Строб записи = 0


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