[an error occurred while processing this directive]
Интересный конфликт - есть платка на PCI, ловящая данные на 80-м порту. Если вставить ее в слот, машина мертвая, экран черный. Меняю порт на 200h (джойстик) (+)
(«Телесистемы»: Конференция «Программируемые логические схемы и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Виноградов Алексей 21 января 2003 г. 21:03

- все работает !!! Запускаю прогу, выводящую данные в порт 200h - тоже все отлично ! Так в чем же дело? У меня есть подозрение, что на порту 80h кто-то сидит и отвечает сигналом /Devsel !
На всякий случай вот мой код (при первой записи в порт лампочка загорается, при второй гаснет и так далее):

SUBDESIGN pci_post_card
(
clk, /rst, /frame, /irdy : input;
ad[15..0], /cbe[3..0] : input;

/devsel, /trdy, led : OUTPUT;
)
variable
/devsel_buf : tri;
/trdy_buf : tri;
ss : machine with states(s0,s1);
port80hwrite_latch : dff;

/frame_latch, /irdy_latch : dff;
led_latch : tffe;
led_bufer : opndrn;
pp : node;

BEGIN
defaults
led_latch.ena = gnd;
end defaults;

ss.clk = clk;
ss.reset = !/rst;

/frame_latch.d = /frame;
/frame_latch.clk = clk;
/frame_latch.clrn = /rst;

/irdy_latch.d = /irdy;
/irdy_latch.clk = clk;
/irdy_latch.clrn = /rst;

led_latch.t = vcc;
led_latch.clk = clk;
led_bufer.in = led_latch.q;
led = led_bufer.out;

if ad[15..0] == h"80" & /cbe[3..0] == h"3" then pp = vcc;
else pp = gnd;
end if;

port80hwrite_latch.d = pp;
port80hwrite_latch.clk = clk;
port80hwrite_latch.clrn = /rst;

/devsel = /devsel_buf.out;
/trdy = /trdy_buf.out;

case ss is
when s0 =>
if port80hwrite_latch.q == vcc & /frame_latch.q == gnd
then ss = s1;
/devsel_buf.in = gnd;
/devsel_buf.oe = vcc;
/trdy_buf.in = gnd;
/trdy_buf.oe = vcc;
else ss = s0;
/devsel_buf.in = vcc;
/devsel_buf.oe = gnd;
/trdy_buf.in = vcc;
/trdy_buf.oe = gnd;
end if;

when s1 =>
if /irdy_latch.q == gnd & /frame_latch.q == vcc then ss = s0;
led_latch.ena = vcc;
/devsel_buf.oe = vcc;
/devsel_buf.in = /irdy;
/trdy_buf.oe = vcc;
/trdy_buf.in = /irdy;
else ss = s1;
/devsel_buf.oe = vcc;
/devsel_buf.in = gnd;
/trdy_buf.oe = vcc;
/trdy_buf.in = gnd;
end if;
%
when s2 =>
/devsel_buf.oe = gnd;
/devsel_buf.in = vcc;
/trdy_buf.oe = gnd;
/trdy_buf.in = vcc;
ss = s0;
%
end case;
END;

Большое спасибо за внимание !

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

Ответы


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

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

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

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

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


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

E-mail: info@telesys.ru