From f0a16dbb348186658bb99117f374790997afd955 Mon Sep 17 00:00:00 2001 From: Vladimir Burian Date: Sun, 17 Apr 2011 15:14:35 +0200 Subject: [PATCH] Motor feedback IRQ generator --- msp_motion.vhd | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/msp_motion.vhd b/msp_motion.vhd index 4edb457..1542c0d 100644 --- a/msp_motion.vhd +++ b/msp_motion.vhd @@ -59,6 +59,9 @@ architecture rtl of msp_motion is signal per_wen16 : std_logic; signal per_en : std_logic; signal per_addr : std_logic_vector (7 downto 0); + -- Interrupt + signal irq : std_logic_vector (13 downto 0); + signal irq_acc : std_logic_vector (13 downto 0); ------------------------------------------------------------------------------ -- MCU peripherals @@ -71,6 +74,8 @@ architecture rtl of msp_motion is -- Qcounter MCU interface signal QCNT_DAT_O : std_logic_vector (15 downto 0); signal QCNT_SEL : std_logic; + -- Motor feedback IRQ generator + signal MOTOR_IRQ : std_logic; ------------------------------------------------------------------------------ -- Dual-port shared memory @@ -146,8 +151,8 @@ begin per_wen => per_wen, per_en => per_en, nmi => '0', - irq => (others => '0'), - irq_acc => open, + irq => irq, + irq_acc => irq_acc, aclk_en => open, smclk_en => open, mclk => mclk, @@ -177,7 +182,22 @@ begin GPIO_SEL <= '1' when per_addr(7 downto 2) = 16#0140#/2/4 else '0'; QCNT_SEL <= '1' when per_addr(7 downto 1) = 16#0148#/2/2 else '0'; + -- Interrupt signals + ------------------------------------------------------------------------------ + irq (13 downto 1) <= (others => '0'); + + motor_irq_ff : process (mclk, puc) is + begin + if rising_edge (mclk) then + if puc = '1' or irq_acc (0) = '1' then + irq (0) <= '0'; + elsif MOTOR_IRQ = '1' then + irq (0) <= '1'; + end if; + end if; + end process; + ------------------------------------------------------------------------------ -- MCU peripherals ------------------------------------------------------------------------------ @@ -212,6 +232,19 @@ begin STB_I => per_en, QCOUNT => QCNT); + -- Motor feedback IRQ generator + -- f_motor_irq approx. 1 kHz + mcc_irq_counter_1 : entity work.counter + generic map ( + WIDTH => 5, + MAX => 22) + port map ( + clk => mclk, + clk_en => PWM_OW, + reset => puc, + count => open, + event_ow => MOTOR_IRQ); + ------------------------------------------------------------------------------ -- Dual-port shared memory -- 2.39.2