Настройка светодиодных выводов в качестве входа на плате MACHxo2

Я пытаюсь настроить контакты, подключенные к встроенным светодиодам, в качестве входных контактов. Документация утверждает, что они являются свободными ввода-вывода, но когда я проверяю их с помощью области видимости, он говорит, что они выводят "высокий" сигнал. Это на MACHXO2 7000he cpld, но я предполагаю, что ответ будет одинаковым для любой из плат MACH. Заранее благодарю за любую помощь.

2 ответа

Эй, ребята, извините, что так долго отвечал. Я бы прикрепил изображение схемы, но у меня сейчас слишком низкая репутация, чтобы сделать это.

Светодиоды подключены к VCC 3,3 В. Я обнаружил, что, отделяя светодиоды от платы, я мог свободно использовать контакты, к которым они были подключены, как свободный ввод / вывод, потому что это создало бы разомкнутую цепь между выводами и 3,3В.

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

Во всяком случае, есть мой ответ, и я надеюсь, что он имеет смысл и поможет одному из вас на днях.

Спасибо за ответы.

Вы могли бы попробовать led blinking пример, например, такой:

LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY lattice;
USE lattice.components.all;

ENTITY blinking_led IS
   PORT(
      led  : BUFFER  STD_LOGIC);
END blinking_led;

ARCHITECTURE behavior OF blinking_led IS
   SIGNAL  clk  : STD_LOGIC;
   --internal oscillator
   COMPONENT OSCH
      GENERIC(
            NOM_FREQ: string := "53.20");
      PORT( 
            STDBY    : IN  STD_LOGIC;
            OSC      : OUT STD_LOGIC;
            SEDSTDBY : OUT STD_LOGIC);
   END COMPONENT;
BEGIN
   --internal oscillator
   OSCInst0: OSCH
      GENERIC MAP (NOM_FREQ  => "53.20")
      PORT MAP (STDBY => '0', OSC => clk, SEDSTDBY => OPEN);
   PROCESS(clk)
      VARIABLE count :   INTEGER RANGE 0 TO 25_000_000;
   BEGIN
      IF(clk'EVENT AND clk = '1') THEN
         IF(count < 25_000_000) THEN
            count := count + 1;
         ELSE
            count := 0;
            led <= NOT led;
         END IF;
      END IF;
   END PROCESS;
END behavior;

Для более подробной информации смотрите Учебное пособие по Lattice Diamond и MachXO2 Breakout Board.

Другие вопросы по тегам