Разработка аппаратно-программных модулей системной шины ISA

Характеристики системной шины ISA. Проектирование устройств ввода/вывода для нее. Принципы построения и программирование модулей шины. Особенности использования прерываний. Применение прямого доступа. Процедуры инициализации системы ПДП.

Рубрика Программирование, компьютеры и кибернетика
Вид методичка
Язык русский
Дата добавления 14.07.2012
Размер файла 812,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

{

unsigned buf; /* temp variables for various */

unsigned max; /* paragraph addreses */

unsigned seg;

unsigned size; /* buffer size in paragraphs */

char far *cp; // указатель на начало свободной памяти

size = (unsigned)((size_dma >> 4) + 1); /*convert bytes to paragraphs .by dividing by 16 */

seg = FP_SEG (cp = (char far *)farmalloc(size_dma)) + 1;

//определение начала свободной памяти

farfree(cp);

buf = seg; /* initial attempt at buffer segment */

if( ((buf + size - 1) & 0xf000) /* if buffer crosses */

!= (buf & 0xf000) ) /* phys page bdry */

buf = (buf & 0xf000) + 0x1000; //adjust to next phys page

*bufer = (char far *) /* convert buffer segment */

((long) buf << 16); /*... to far pointer for return */

size = buf + size - seg; /* compute actual size needed */

*block = (char far *)farmalloc((long)size << 4);

//printf("\nБуфер ПДП: выделено %04lX hex байт", (long)size << 4);

if(*block == NULL)

return (1);

return (0);

}

//**************************************************************

// Программирование канала ПДП

// chan - номер канала ПДП 0-3, 5-7

// *buf - адрес буфера в памяти (far, huge)

// bytes - размер буфера, байт

// dma_enable - 1/0 разрешить/запретить канал после программирования

//**************************************************************

void StartDma(int chan, char far *buf, long bytes, int mode, int dma_enable)

{

int sel, // dma channel select bits

basereg, // dma controller base address register

cntreg, // dma controller count register

maskreg, // dma controller mask register

modereg, // dma controller mode register

pagereg, // dma page address register

page;

long addr;

sel = chan & 3; // isolate channel select bits

pagereg = page_tbl[chan]; // locate corresponding page reg

addr = // 20-bit address of dma buffer

FP_OFF(buf) + ((long) FP_SEG(buf) << 4);

page = PG(addr); // extract upper bits of address

if(chan < 4) // setup depends on chan number

{ basereg = DMA0_BASE + sel * 2; // standard dma controller

cntreg = basereg + 1; // note that this controller

maskreg = DMA0_BASE + 10;// is addressed on byte

modereg = DMA0_BASE + 11; // boundaries

}

else

{ basereg = DMA1_BASE + sel * 4; // alternate dma ctrlr (AT only)

cntreg = basereg + 2; // note that this controller

maskreg = DMA1_BASE + 20; // is addressed on word

modereg = DMA1_BASE + 22; // boundaries

bytes >>= 1; // convert count to words

addr >>= 1; // convert address to words

page &= 0x7e; // address bit 16 is now in 'addr'

}

bytes--; // compute count-1 (xfr stops at ffff)

disable();

outp(maskreg, sel | 0x04); // set mask bit to disable dma

outp(modereg, sel | mode); // xfr mode

outp(basereg, LSB(addr) ); // output base address lsb

outp(basereg, MSB(addr) ); // output base address msb

outp(pagereg, page ); // output page number to page register

outp(cntreg, LSB(bytes)); // output count lsb

outp(cntreg, MSB(bytes)); // output count msb

enable();

// запомним начальный адрес ПДП

par.start_dma_addr = (unsigned int)(addr & 0xffff);

if(dma_enable)

outp(maskreg, sel); // clear mask bit, enabling dma

}

//**************************************************************

// Запрет работы канала ПДП

//**************************************************************

void DmaFinish(void) // called via atexit() mechanism

{

int sel, // dma channel select bits

maskreg, // dma controller mask register

chan; // номер канала

if(block_dma != NULL)

{

chan = CHAN_DMA1;

sel = chan & 3; // isolate channel select bits

if(chan < 4) // setup depends on chan number

maskreg = DMA0_BASE + 10; // is addressed on byte

else

maskreg = DMA1_BASE + 20;// is addressed on word

disable();

outp(maskreg, sel | 0x04); // set mask bit to disable dma

enable();

farfree(block_dma); // освободить память выделенную под буфер ПДП

}

if(block_dma3 != NULL)

{

chan = CHAN_DMA3;

sel = chan & 3; // isolate channel select bits

if(chan < 4) // setup depends on chan number

maskreg = DMA0_BASE + 10; // is addressed on byte

else

maskreg = DMA1_BASE + 20; // is addressed on word

disable();

outp(maskreg, sel | 0x04); // set mask bit to disable dma

enable();

farfree(block_dma3); // освободить память выделенную под буфер ПДП

}

}

// **********************************

// Инициализация ПДП

// возвращает: 0 - буфер ПДП организован в памяти

// 1 - мало памяти для буфера ПДП

//***********************************

int DmaSetup(void)

{

// Выделяем память с запасом

if (AllocDmaBuf(&buf_dma, &block_dma, SIZE_DMA1+0x10) != NULL)

return (1);

//if (AllocDmaBuf(&buf_dma3, &block_dma3, SIZE_DMA3+0x10) != NULL)

if (AllocDmaBuf(&buf_dma3, &block_dma3, SIZE_DMA3+0x1000) != NULL)

return (1);

StartDma(CHAN_DMA1, buf_dma, SIZE_DMA1, MODE_DMA1, ENABLE);

return (0);

}

Размещено на Allbest.ru


Подобные документы

  • Техническая характеристика популярных типов шин. Архитектура Pentium P5. Частота процессора Pentium II 450. Скорость передачи данных. Шины памяти, расширения, ввода-вывода. Структура и свойства ISA, EISA и PC-104. Общая схема работы шины в обычном РС.

    презентация [408,8 K], добавлен 27.08.2013

  • Высокоскоростные последовательные шины USB (Universal Serial Bus) и IEEE-1394. Использование последовательной архитектуры в высокоскоростных периферийных шинах. Подключение устройств, назначение контактов в разъеме шины, максимальная длина кабеля.

    презентация [148,1 K], добавлен 27.08.2013

  • Характеристика назначения микропроцессора, системной шины, основной и внешней памяти, портов ввода-вывода внешних устройств и адаптеров. Сравнительный анализ элементной базы и математического обеспечения персональных компьютеров разных поколений.

    реферат [34,4 K], добавлен 25.03.2010

  • Магистрально-модульный принцип построения архитектуры современных персональных компьютеров. Рассмотрение основных микросхем чипсета: контроллер-концентратор памяти и ввода-вывода. Рассмотрение пропускной способности и разрядности системной шины памяти.

    презентация [2,3 M], добавлен 13.10.2015

  • Исследование типовой структуры шины персонального компьютера. Подсистема ввода-вывода в ядре операционной системы. Преобразование запросов на ввод-вывод в аппаратные операции. Блочные, символьные и сетевые устройства. Процесс чтения из дискового файла.

    презентация [1,8 M], добавлен 24.01.2014

  • Процессоры Duron на ядре Spitfire (Model 3), Morgan (Model 7), Applebred (Model 8), Mobile Duron Camaro. Схема материнской платы EP-8KHAL+. Микросхема "Северный мост". Звуковой чип ALC201A. Конфигурация системной памяти. Регулятор заглушки шины RT9173.

    курсовая работа [3,6 M], добавлен 26.03.2013

  • История создания процессоров семейства К7, выпущенных на платформе РС. Свойства архитектуры и технические характеристики процессора AMD Athlon (Thunderbird). Строение и назначение системной шины EV6. Изучение расширенных возможностей технологии 3DNow!™.

    реферат [3,7 M], добавлен 03.10.2010

  • Роль системной шины в передаче информации, место ее крепления, история разработки. Элементы, из которых она состоит. Усовершенствования и направления доработки данного компонента материнской платы. Стандартные характеристики, их взаимосвязь с процессором.

    презентация [562,5 K], добавлен 22.02.2015

  • Описание высокоскоростной последовательной шины FireWire: ее составляющие, спецификации, принцип работы, кабели и разъемы, топология. Уровни реализации протокола IEEE 1394: транзакции, связи и физический. Использование внешних дисковых устройств.

    реферат [1,5 M], добавлен 15.07.2012

  • Высокие скорость передачи данных и помехоустойчивость, способностью обнаруживать любые возникающие ошибки как основные характеристики полевой шины CAN (сеть контроллеров). Регламентация международными стандартами интерфейса. Описание стандарта, протокол.

    курсовая работа [878,3 K], добавлен 01.02.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.