Aggiornati alcuni file DSP56k per la nuova libreria di IRQ management
authorrasky <rasky@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 30 Jul 2004 14:27:49 +0000 (14:27 +0000)
committerrasky <rasky@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 30 Jul 2004 14:27:49 +0000 (14:27 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@92 38d2e660-2303-0410-9eaa-f027e97ec537

drv/ser_dsp56k.c
drv/timer_dsp56k.h

index 6c75f8a348457a78f58b7cf4e99bbba7e53540d7..cb892c7265b41feaed07e581eff53ee10a96a2da 100755 (executable)
@@ -15,6 +15,9 @@
 
 /*
  * $Log$
+ * Revision 1.4  2004/07/30 14:27:49  rasky
+ * Aggiornati alcuni file DSP56k per la nuova libreria di IRQ management
+ *
  * Revision 1.3  2004/06/03 11:27:09  bernie
  * Add dual-license information.
  *
@@ -26,6 +29,7 @@
 #include "ser.h"
 #include "ser_p.h"
 #include <drv/kdebug.h>
+#include <drv/irq.h>
 #include <hw.h>
 #include <DSP56F807.H>
 
@@ -47,11 +51,10 @@ struct SCI
        struct SerialHardware hw;
        struct Serial* serial;
        volatile struct REG_SCI_STRUCT* regs;
-       uint16_t irq_tx;
-       uint16_t irq_rx;
+       IRQ_VECTOR irq_tx;
+       IRQ_VECTOR irq_rx;
 };
 
-
 static inline void enable_tx_irq_bare(volatile struct REG_SCI_STRUCT* regs)
 {
        regs->CR |= REG_SCI_CR_TEIE | REG_SCI_CR_TIIE;
@@ -96,8 +99,9 @@ static inline void enable_rx_irq(struct SerialHardware* _hw)
        enable_rx_irq_bare(regs);
 }
 
-INLINE void tx_isr(struct SCI *hw)
+static void tx_isr(const struct SCI *hw)
 {
+#pragma interrupt warn
        volatile struct REG_SCI_STRUCT* regs = hw->regs;
 
        if (fifo_isempty(&hw->serial->txfifo))
@@ -110,8 +114,9 @@ INLINE void tx_isr(struct SCI *hw)
        }
 }
 
-INLINE void rx_isr(struct SCI *hw)
+static void rx_isr(const struct SCI *hw)
 {
+#pragma interrupt warn
        volatile struct REG_SCI_STRUCT* regs = hw->regs;
 
        hw->serial->status |= regs->SR & (SERRF_PARITYERROR |
@@ -141,7 +146,9 @@ static void init(struct SerialHardware* _hw, struct Serial* ser)
        // Clear data register
        (void)regs->DR;
 
-       // Set priorities for both IRQs
+       // Install the handlers and set priorities for both IRQs
+       irq_install(hw->irq_tx, (isr_t)tx_isr, hw);
+       irq_install(hw->irq_rx, (isr_t)rx_isr, hw);
        irq_setpriority(hw->irq_tx, IRQ_PRIORITY_SCI_TX);
        irq_setpriority(hw->irq_rx, IRQ_PRIORITY_SCI_RX);
 
@@ -205,35 +212,6 @@ static struct SCI SCIDescs[2] =
 };
 
 
-
-void ser_hw_tx_isr_0(void);
-void ser_hw_tx_isr_0(void)
-{
-#pragma interrupt warn
-       tx_isr(&SCIDescs[0]);
-}
-
-void ser_hw_rx_isr_0(void);
-void ser_hw_rx_isr_0(void)
-{
-#pragma interrupt warn
-       rx_isr(&SCIDescs[0]);
-}
-
-void ser_hw_tx_isr_1(void);
-void ser_hw_tx_isr_1(void)
-{
-#pragma interrupt warn
-       tx_isr(&SCIDescs[1]);
-}
-
-void ser_hw_rx_isr_1(void);
-void ser_hw_rx_isr_1(void)
-{
-#pragma interrupt warn
-       rx_isr(&SCIDescs[1]);
-}
-
 struct SerialHardware* ser_hw_getdesc(int unit)
 {
        ASSERT(unit < 2);
index 025b5a8e6b1ad002c47d54aa66b7efec3e5ffe18..b7f325836077a90de8acbec3b4dfef7743b45894 100755 (executable)
@@ -15,6 +15,9 @@
 
 /*
  * $Log$
+ * Revision 1.4  2004/07/30 14:27:49  rasky
+ * Aggiornati alcuni file DSP56k per la nuova libreria di IRQ management
+ *
  * Revision 1.3  2004/06/06 18:30:34  bernie
  * Import DSP56800 changes from SC.
  *
 #ifndef DRV_TIMER_DSP56K_H
 #define DRV_TIMER_DSP56K_H
 
+#include "timer.h"
 #include <DSP56F807.h>
 #include <compiler.h>
 #include <hw.h>
+#include <drv/irq.h>
 
 // Calculate register pointer and irq vector from hw.h setting
 #define REG_SYSTEM_TIMER          PP_CAT(REG_TIMER_, SYSTEM_TIMER)
@@ -46,6 +51,8 @@
 //! Type of time expressed in ticks of the hardware high precision timer
 typedef uint16_t hptime_t;
 
+static void system_timer_isr(UNUSED(IPTR, arg));
+
 static void timer_hw_init(void)
 {
        uint16_t compare;
@@ -65,7 +72,8 @@ static void timer_hw_init(void)
        // The value for reload (at initializationa and after compare is met) is zero
        REG_SYSTEM_TIMER->LOAD = 0;
 
-       // Set the interrupt priority
+       // Set the interrupt handler and priority
+       irq_install(SYSTEM_TIMER_IRQ_VECTOR, &system_timer_isr, NULL);
        irq_setpriority(SYSTEM_TIMER_IRQ_VECTOR, IRQ_PRIORITY_SYSTEM_TIMER);
 
        // Small preprocessor trick to generate the REG_TIMER_CTRL_PRIMARY_IPBYNN macro
@@ -90,9 +98,7 @@ INLINE hptime_t timer_hw_hpread(void)
        return REG_SYSTEM_TIMER->CNTR;
 }
 
-void system_timer_isr(void);
-
 #define DEFINE_TIMER_ISR \
-       void system_timer_isr(void)
+       static void system_timer_isr(UNUSED(IPTR, arg))
 
 #endif /* DRV_TIMER_DSP56_H */