реклама на сайте
подробности

 
 
> Почему зависает компьютер?, При отладке PCI-платы в ДОСе
Гвоздик
сообщение Jun 20 2006, 15:10
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 153
Регистрация: 2-12-04
Из: Чебоксары
Пользователь №: 1 289



Здраствуйте. Пытаюсь отладить ведомое устройство (target) на PCI-шине (33 МГц), после прочтения форума по этой теме нарочно приобрел старую материнскую плату на Пентиуме 100, чтобы не отключались клоки на шине для устройства без конфигурации (клоки действительно идут - проверяю через ЖКИ), однако при посылке данных в порт 0х200 (адрес моей платы) компьютер зависает намертво после первой же передачи данных в порт. Гружусь с дисковода с дискеты в ДОС. Отладочная плата Max2 Development kit, исходные тексты прилагаю (для ПЛИС и отсылочную программу для ДОСа). В чем может быть дело? Почитал на www.fpga4fun.com, что можно и без конфигурации по-простому гонять данные через PCI. Почему не выходит, эх кабы знать...
Код
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity pci_target is
  generic(AD_PCI_BUS_WIDTH : natural := 31;
    C_BE_WIDTH : natural := 3;
    VALID_CARD_DATA_WIDTH : natural := 7;
    CARD_ADDRESS : natural := 512; -- 0x200
    C_BE_WRITE_COMMAND : natural := 3);
  port(RSTn : in std_logic;
    CLK : in std_logic;
    AD : in std_logic_vector(AD_PCI_BUS_WIDTH downto 0);
    FRAMEn : in std_logic;
    C_BEn : in std_logic_vector(C_BE_WIDTH downto 0);
    IRDYn : in std_logic;
    TRDYn : out std_logic;
    DEVSELn : out std_logic;
    valid_card_data : out std_logic_vector(VALID_CARD_DATA_WIDTH downto 0);
    BUS_ENABLEn : out std_logic;
    test_led : out std_logic);
end entity pci_target;

architecture behavioural of pci_target is
signal devsel_sig_n : std_logic := 'Z';
signal trdy_sig_n : std_logic := 'Z';
signal card_address_found : std_logic := '0';
signal valid_card_data_sig : std_logic_vector(VALID_CARD_DATA_WIDTH downto 0) := X"00";
signal test_led_sig : std_logic := '1';
begin
  process(RSTn, CLK, FRAMEn, AD(AD_PCI_BUS_WIDTH downto 0))
  begin
    if (RSTn = '0') then
      devsel_sig_n <= 'Z';
      trdy_sig_n <= 'Z';
      card_address_found <= '0';
      valid_card_data_sig <= X"00";
      test_led_sig <= '1';
    else
      if (CLK'event and CLK = '1') then
        test_led_sig <= '0';
        if (FRAMEn = '0') then
          if (IRDYn = '1') then
            trdy_sig_n <= 'Z';
            if ((AD(AD_PCI_BUS_WIDTH downto 0) = CARD_ADDRESS) and (C_BEn(C_BE_WIDTH downto 0) = C_BE_WRITE_COMMAND)) then
              card_address_found <= '1';
              devsel_sig_n <= '0';
            else
              card_address_found <= '0';
              devsel_sig_n <= 'Z';
            end if;
          else
            if ((card_address_found = '1') and (C_BEn(0) = '0')) then
              valid_card_data_sig(VALID_CARD_DATA_WIDTH downto 0) <= AD(VALID_CARD_DATA_WIDTH downto 0);
              trdy_sig_n <= '0';
              devsel_sig_n <= '0';
            else
              trdy_sig_n <= 'Z';
              devsel_sig_n <= 'Z';
            end if;
          end if;
        else
          devsel_sig_n <= 'Z';
          trdy_sig_n <= 'Z';
          card_address_found <= '0';
        end if;
      end if;
    end if;
  end process;

  valid_card_data(VALID_CARD_DATA_WIDTH downto 0) <= valid_card_data_sig(VALID_CARD_DATA_WIDTH downto 0);
  DEVSELn <= devsel_sig_n;
  TRDYn <= trdy_sig_n;
  BUS_ENABLEn <= '0'; -- enable bus formers for 5V pci
  test_led <= test_led_sig;

end architecture behavioural;

и досовский исходник еще:
Код
#include <stdio.h>
#include <dos.h>
int main(void)
{
  int port = 0x200;
  unsigned char lcd_text[16] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
    0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};
  unsigned char i = 0;
  clrscr();
  printf("Output scan codes to the port: %d in endless cycle...\n",port);
  for (i = 0; i < 16; i++)
  {
    outportb(port, lcd_text[i]);
    printf("To the port %d was sent data %d\n",port, lcd_text[i]);
  }
  printf("\n");
  for (i = 0; i < 16; i++)
  {
    outp(port, (int)lcd_text[i]);
    printf("Second output to the port %d and data = %d", port, lcd_text[i]);
  }
  return 0;
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 08:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01348 секунд с 7
ELECTRONIX ©2004-2016