Разработка аппаратно-программных модулей системной шины 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