Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с портом с конкретным адресом. Запись и чтение [D7]


Страницы:   1 2 3 4

Velimir ©   (2006-04-24 14:18:00) 

Собсно сабж!
Какими в дельфи есть встроенные функции для работы с портом, если у меня есть адрес этого порта...
Хотелось бы найти аналог outport и inport из С.

Сорри если вопрос очень тупой, но я нигде не нашел этих функций... Действительно, как-то тормозом себя чуствую...
Заранее всем спасибо за помощь!


!Fobos   (2006-05-10 08:45:00) [21]


> Сергей М. ©   (10.05.06 08:43) [41]


То есть, я так понимаю, я тратил время зря?


Сергей М.   (2006-05-10 08:43:00) [22]


> !Fobos ©   (10.05.06 08:17) [40]


> На паскалевском варианте программы написана процедура обработки
> прерывания. Как перевести её на Делфи я пока понятия не
> имею, но мне кажется что проблема сейчас именно в этом.


Если дивайс генерирует прерывания, то без драйвера режима ядра тем более не обойтись. И Делфи здесь не помощник - среда эта не предназначена для таких задач.


!Fobos   (2006-05-10 08:17:00) [23]


> Сергей М. ©   (06.05.06 15:53) [37]


Документации на девайс нету, разве что дипломная работа.
Массив, как мне кажется, забивается разными значениями, т.к., синусоиду, к примеру, прога рисует нормально(то есть она синусоида, а не прямая линия).
На данный момент проблема именно в считывании сигнала с порта(кэш-памяти), остальное все уже практически переписал для Делфи. Сейчас програма что-то считывает, но это явно не тот уже хотя бы потому, чьл какой бы я номер порта не ставил, картинка выглядит одинаково. На паскалевском варианте программы написана процедура обработки прерывания. Как перевести её на Делфи я пока понятия не имею, но мне кажется что проблема сейчас именно в этом.


isasa   (2006-05-07 11:46:00) [24]

Умные дадьки и тетки карячились, думали, как заставить это железо одновременно читать порт, слушать музыку, ограть в Blitzkriag ... а ты со своими командами :)
В, общем, выхода два:
1. Послать дядек и теток, загрузить Win98 и ниже, и наслаждаться.
2. "Вписать" работу с железом в требования дядек и теток(т.е. на уровне драйверов), и работать через CreateFile.


krid24   (2006-05-06 18:14:00) [25]


> Ну а причем здесь ISA ?

Да вобщем-то ни причем, просто !Fobosговорил про плату на ISA шине.


> Плюс еще в первоначальной проге используются 2 порта с адресами
> $20 и $21. Что за порты, ума не приложу, возможно они испоьзуются
> для обработки прерываний...

В принципе да, эти порты используются при программировании контроллера прерываний.


Сергей М.   (2006-05-06 15:53:00) [26]

procedure DataIn(PortAddress:word);
var
ByteValue:byte;
Addr: Word;
begin
 Addr := PortAddress; //параметр PortAddress передается через eax, запомним его в лок.переменной
 for i:=0 to 32767 do
    begin
      asm
       push eax
       push edx        
       mov dx, Addr
       in al,dx
       mov ByteValue,al
       pop edx
       pop eax
      end;
      Data[i]:=ByteValue;
    end;
end;

procedure DataOut(ByteValue:byte;PortAddress:word);
asm
//ByteValue передается в eax
//PortAddress - в edx
out dx,al
end;


> массив забивается практически одними и теми же значениями


А где написано, что должен разными ?
Док-ция на дивайс от производителя имеется ?


!Fobos   (2006-05-06 14:48:00) [27]


> Сергей М. ©   (06.05.06 09:06) [35]


Вот две процедурки работы с портом:

procedure DataIn(PortAddress:word);

var
 ByteValue:byte;

begin
  asm
   push dx
   mov dx, PortAddress
  end;
  for i:=0 to 32767 do
     begin
       asm
       in al,dx
       mov ByteValue,al
       end;
       Data[i]:=ByteValue;
     end;
  asm
   pop dx
  end;
end;

procedure DataOut(ByteValue:byte;PortAddress:word);

asm
 push dx
 mov dx,PortAddress
 mov al,ByteValue
 out dx,al
 pop dx

end;

Запуская программу в пошаговом режиме и следя за массивом Data я заметил, что вне зависимости от того, к какому порту я обращаюсь, этот массив забивается практически одними и теми же значениями...
Плюс еще в первоначальной проге используются 2 порта с адресами $20 и $21. Что за порты, ума не приложу, возможно они испоьзуются для обработки прерываний...


Сергей М.   (2006-05-06 09:06:00) [28]


> !Fobos ©   (06.05.06 08:22) [34]


Приводи код.


!Fobos   (2006-05-06 08:22:00) [29]

Мда...думаю, что здесь мне никто ничем конкретным не поможет...((
Процедурку чтения из порта (а также процедурку записи управляющего слова) я написал  на ассемблере, научил винду ХР-шную не ругаться на асм-вставки (не смейтесь надо мной:))). Вроде что-то читается, но почему то кажется, что читается не то, что нужно. Может ли кто объяснить, как, вызывая чтение из кэш-памяти в массив 32000 раз можно забить весь массив значениями, а точнее откуда она (кэш-память ну или что там за это отвечает) знает, что при каждом следующем обращении к ней мне надо считать следующий байт?
Вы уж извините, если я задаю глупые вопросы....программер из меня не ахти...


Сергей М.   (2006-05-05 08:22:00) [30]


> krid24 ©   (04.05.06 20:51) [31]


Ну а причем здесь ISA ?
Все тоже самое настолько же справедливо для любого другого дивайса на любой другой шине ..

И WinAPI здесь тоже ни причем, пока речь не идет о взаимодействии с драйвером дивайса документированным способом (CreateFile, Read/WriteFile, DeviceIOControl).


!Fobos   (2006-05-05 08:04:00) [31]


> krid24 ©   (04.05.06 20:51) [31]

Согласен с тобой. Для "моего" устройства не было написано драйвера (еще раз повторюсь, что не я изначально разрабатывал плату и софт). Есть только программа, обслуживающая плату.
А что тебя конкретно интересует по плате? Это устройство сбора данных. Как уже писал выше, чтение производится из кэш-памяти по адресу $300.


krid24   (2006-05-04 20:51:00) [32]

Да с какой моей колокольни-то?
Если есть ISA плата, которая (упрощенно) в один порт принимает параметры сигнала, в другой код старта и начинает непрерывно этот сигнал генерить до тех пор, пока не получит код останова, то на кой ей драйвер-то нужен? Писать для какого-нибудь простейшего генератора сигналов WDM?? Ну-ну.. Нужно тогда уж еще и в Microsoft драйвер оттестировать и цифровую подпись получить..
А ведь большое колличество самопальных ISA плат, сделаных для внутреннего пользования, являются чем-то подобным. И именно их я и имел ввиду (а не сплошь и рядом все девайсы подряд, о чем, кстати, говорил).
Так что, не соглашусь с уважаемыми оппонентами -  никаких драйверов для такого рода плат не нужно по-определению. В них просто нет необходимости.
Впрочем, автор вопроса не сказал, что у него за плата, так что спор по сути дела безпредметный получается.


Сергей М.   (2006-05-04 15:30:00) [33]


> krid24 ©   (04.05.06 15:14) [28]


Ты несешь несусветицу, видимую тобой лишь с твоей колокольни.


Wal   (2006-05-04 15:30:00) [34]


> Ну по этой логике тот же DOS вообще бы не работал
Дос был однозадачным в доску, в отличие от виндовса.

> Так, что возможный бардак зависит не от возможности обращаться
> к портам, а от кривых рук разработчиков
Вот поэтому разработчики с прямыми руками всегда предоставляют драйвера.

> Я сам работал не с одной ISA платой
Я тоже работал не с одной платой, и не только ISA. В ДОСе без всяких драйверов. В винде тоже можно без драйверов с тем же giveio, но это "костыли", а не нормальная работа.


krid24   (2006-05-04 15:14:00) [35]


> Глупости.
> Столь же "необязателен" драйвер для любого другого периферийного
> дивайса на любой другой шине.

Ничего подобного. Не надо все мешать в одну кучу. Речь идет о конкретных платах. Я сам работал не с одной ISA платой, которые не требовали никаких драйверов и управлялись только через порты. И есть девайсы, которые в обязательном порядке требуют драйверов, садятся на прерывания, etc.


> А потом запускаешь еще косой десяток оных "прог", и все
> они наперегонки начинают выполнять свои IN и OUT к одному
> и тому же порту. Бардак-с) ..

Ну по этой логике тот же DOS вообще бы не работал :) На самом деле никакого бардака не будет. Во-первых, несколько инструкций IN одновременно не выполнишь ). Во-вторых, во многих платах предусмотрены задержки после выполнения операций, связанных с доступом к ним по портам. В-третьих, такие же задержки предусматривают и в программах (в тех же драйверах). Так, что возможный бардак зависит не от возможности обращаться к портам, а от кривых рук разработчиков )
Ну а тот же драйвер giveio может спокойно обслуживать все процессы в системе, будь их десяток или сотня.


Сергей М.   (2006-05-04 13:32:00) [36]


> krid24 ©   (04.05.06 13:26) [26]


> Для ISA платы это не обязательно.


Глупости.
Столь же "необязателен" драйвер для любого другого периферийного дивайса на любой другой шине.


> из проги его динамически загружаешь, обращаешься к портам
> асмовыми in и out


А потом запускаешь еще косой десяток оных "прог", и все они наперегонки начинают выполнять свои IN и OUT к одному и тому же порту. Бардак-с) ..


krid24   (2006-05-04 13:26:00) [37]


> Если дивайс "собран своими руками", то первое что должно
> прийти в голову - написание драйвера этого дивайса под требуемую
> ОС

Для ISA платы это не обязательно.


>  как в Делфи обращаться к портам I/O.

Это от системы зависит, а не от языка. А вообще, во втором посте уже ответили - ищешь в инете драйвер giveio.sys (например), из проги его динамически загружаешь, обращаешься к портам асмовыми in и out, потом драйвер выгружаешь. Все. Ну это для NT, а в Win9x можешь напрямую in/out юзать.


Elen   (2006-05-04 13:19:00) [38]


>!Fobos ©

Поищи компоненты работы с портом. А вообще помоему CreateFile и вариант с ассемблером (см. выше) лучше не придумаеш для Делфи


Сергей М.   (2006-05-04 13:18:00) [39]


> вариант с ассемблером (см. выше)


Где там, "выше", про ассемблер ?


Elen   (2006-05-04 13:15:00) [40]


>!Fobos ©

Поищи компоненты работы с портом. А вообще помоему CreateFile и вариант с ассемблером (см. выше) лучше не придумаеш для Делфи


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо