]> rtime.felk.cvut.cz Git - fpga/virtex2/uart.git/blobdiff - openMSP430_uart.vhd
Peripheral connected to the quadcount module and an incremental encoder. Interrupt...
[fpga/virtex2/uart.git] / openMSP430_uart.vhd
index b6e3eceae7e709a5640399e47d2976b297d2245e..eafcbc8df48ce99494f4d7a028e70aa8e44b44ef 100644 (file)
@@ -9,7 +9,12 @@ entity openMSP430_uart is
     RESET: in std_logic;
 
     RXD : out std_logic;
-    TXD : in std_logic
+    TXD : in std_logic;
+    
+    ROT_FEED : out std_logic;
+    ROT_A : in std_logic;
+    ROT_B : in std_logic;
+    ROT_PRESS : in std_logic
   );
 end openMSP430_uart;
 
@@ -152,6 +157,33 @@ architecture rtl of openMSP430_uart is
     );
   end component;
 
+  component omsp_quadcount is
+    port (
+      mclk        : in  std_logic;
+      per_addr    : in  std_logic_vector (7  downto 0);
+      per_din     : in  std_logic_vector (15 downto 0);  -- unused
+      per_en      : in  std_logic;
+      per_wen     : in  std_logic_vector (1  downto 0);  -- unused
+      puc         : in  std_logic;                       -- unused
+      per_irq_acc : in  std_logic;                       -- unused
+      per_irq     : out std_logic;                       -- unused
+      per_dout    : out std_logic_vector (15 downto 0);
+      
+      qcount      : in  std_logic_vector (31 downto 0)
+    );
+  end component;
+
+  component qcounter is
+    port (
+      clock    : in std_logic;
+      reset    : in std_logic;
+      a0, b0   : in std_logic;
+      qcount   : out std_logic_vector (31 downto 0);
+      a_rise, a_fall, b_rise, b_fall, ab_event : out std_logic;
+      ab_error : out std_logic
+    );
+  end component;
+
 
   signal mclk : std_logic;
   signal puc : std_logic;
@@ -180,9 +212,13 @@ architecture rtl of openMSP430_uart is
 
   signal gpio_per_dout : std_logic_vector (15 downto 0);
   signal timerA_per_dout : std_logic_vector (15 downto 0);
+  signal omsp_quadcount_dout : std_logic_vector (15 downto 0);
 
   signal irq_ta0 : std_logic;
   signal irq_ta1 : std_logic;
+  signal omsp_quadcount_irq : std_logic;
+
+  signal qcount : std_logic_vector (31 downto 0);
 
 --------------------------------------------------------------------------------
 
@@ -334,13 +370,44 @@ begin
     taclk       => '0'
   );
 
+  omsp_quadcount_0 : omsp_quadcount port map (
+    mclk        => mclk,
+    per_addr    => per_addr,
+    per_din     => (others => '0'),
+    per_en      => per_en,
+    per_wen     => "00",
+    puc         => '0',
+    per_irq_acc => '0',
+    per_irq     => omsp_quadcount_irq,
+    per_dout    => omsp_quadcount_dout,
+    
+    qcount      => qcount
+  );
+
+  qcounter_0 : qcounter port map (
+    clock     => mclk,
+    reset     => ROT_PRESS,
+    a0        => ROT_A,
+    b0        => ROT_B,
+    qcount    => qcount,
+    a_rise    => open,
+    a_fall    => open,
+    b_rise    => open,
+    b_fall    => open,
+    ab_event  => open,
+    ab_error  => open
+  );
+
 --------------------------------------------------------------------------------
 
-  per_dout <=  gpio_per_dout or timerA_per_dout;
+  per_dout <=  gpio_per_dout or timerA_per_dout or omsp_quadcount_dout;
   
   irq <= (9 => irq_ta0,
           8 => irq_ta1,
+          7 => omsp_quadcount_irq,
           others => '0');
   
+  ROT_FEED <= '1';
+  
 end rtl;