port (
gpio2: in std_logic; -- SDA
gpio3: in std_logic; -- SCL
- gpio4: out std_logic; -- CLK
+ gpio4: in std_logic; -- CLK
gpio14: in std_logic; -- Tx
gpio15: in std_logic; -- Rx
gpio17: out std_logic; -- RTS
port (A: in std_logic; Y: out std_logic);
end component;
+ signal spiclk_old_lvl: std_logic :='0'; --pro detekci hrany SPI hodin
signal pwm_in, pwm_dir_in: std_logic;
signal spi_clk: std_logic;
+ signal gpio_clk: std_logic;
signal dat_reg : STD_LOGIC_VECTOR (7 downto 0):=(others=>'0'); --registr pro SPI
-- attribute syn_noprune of gpio2 : signal is true;
begin
-- PLL as a reset generator
+
+ --zesileni signalu hodin SPI - bez zesileni nelze syntetizovat
copyclk: CLKINT
port map (
a => gpio11,
y => spi_clk
);
+
+ --zesileni signalu GPIO CLK
+ copyclk2: CLKINT
+ port map (
+ a => gpio4,
+ y => gpio_clk
+ );
+
-- pll: pll50to200
-- port map (
-- powerdown => '1',
-- upon power-on
-- clock <= clkm;
- dummy_unused <= gpio2 and gpio3 and
+ dummy_unused <= gpio2 and gpio3 and gpio4 and
gpio5 and gpio6 and
gpio12 and gpio13 and gpio14 and
gpio15 and gpio16 and gpio19 and
- process (spi_clk) --nufunguje preo piny 11,17,27 funguje pro 4,18,22,ext_sclk,10
+ process (gpio_clk)
begin
--if (gpio11'event and gpio11 = '1') then -- rising edge of SCK
- if (rising_edge(spi_clk)) then
+ if ((spi_clk = '1') and (spiclk_old_lvl = '0') ) then
if (gpio7 = '0') then -- SPI CS must be selected
-- shift serial data into dat_reg on each rising edge
-- of SCK, MSB first
dat_reg(7 downto 0) <= dat_reg(6 downto 0) & gpio10;
-
+ spiclk_old_lvl <= '1';
end if;
- elsif (falling_edge(spi_clk)) then
+ elsif ((spi_clk = '0') and (spiclk_old_lvl = '1')) then
if (gpio7 = '0') then
gpio9 <= dat_reg(7); --zapisujeme nejdriv MSB
+ spiclk_old_lvl <= '0';
end if;
end if;
end process;