[an error occurred while processing this directive] [an error occurred while processing this directive]
по PCI:
(«Телесистемы»: Конференция «Программируемые логические схемы и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено sled 12 марта 2002 г. 18:37
В ответ на: Люди добрые! Помогите, пожалуйста, разобраться с одним вопросом... отправлено Леха 12 марта 2002 г. 16:27

всё дело как я понял в наличии логического и физическоко адресов памяти в интелах. соотв. тебе нужно сопоставить логическому адресу (который используется процессором) физический.

я пробовал 2 пути:
1.builder c + numega driver studio - далает драйвер который в конечном счёте и отдаёт тебе указатель на память.
но винды для меня громоздко (я железом в основном), а посему
2.djgpp gnu c (www.djgpp.org) - на вид как borland c 3.1 но gnuтый +++
(спасибо ИгорьК в своё время)

буквально сегодня ваял - вот пример (под djgpp):

#include "dpmi.h"
#include "go32.h"

const unsigned long total_interface_size_in_bytes = (16l*1024l);//0x00ffffff;
const unsigned long board_base_addr = 0xe7000000;
int selector;
unsigned long data = 0;
unsigned long i;

main()
{
__dpmi_meminfo MABuffer; //Buffer with all your info...
MABuffer.size = total_interface_size_in_bytes;
MABuffer.address = board_base_addr; //That's what you want, right?

//Replace MABuffer.address with an equivalent linear address.
__dpmi_physical_address_mapping(&MABuffer);

//Set up your selector to point to this buffer
/*The physical region 0xF0000000 is now mapped into linear, protected
memory and now you've got a selector to access it*/
selector = __dpmi_allocate_ldt_descriptors(1);
__dpmi_set_segment_base_address(selector, MABuffer.address);
__dpmi_set_segment_limit(selector, MABuffer.size-1);


//Here's your code that uses the selector to access your PCI card (use

data=0xffffffff;
_farpokel (selector, 0, data); // пишем данные в устройство
i=_farpeekl(selector, 0); // читаем данные из устройства

printf("\nTest reg's read %08lX test",i);

__dpmi_free_ldt_descriptor(selector);
//Free the selector at the end.
}


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru