Include hw.h explicitly.
[bertos.git] / drv / ser_dsp56k.c
index 6c75f8a348457a78f58b7cf4e99bbba7e53540d7..a5a96fb7fb404bd106d1f5fdfbde32e34e9cec77 100755 (executable)
  * \brief DSP5680x CPU specific serial I/O driver
  */
 
-/*
- * $Log$
- * Revision 1.3  2004/06/03 11:27:09  bernie
- * Add dual-license information.
- *
- * Revision 1.2  2004/05/23 18:21:53  bernie
- * Trim CVS logs and cleanup header info.
- *
- */
+/*#*
+ *#* $Log$
+ *#* Revision 1.5  2004/08/25 14:12:08  rasky
+ *#* Aggiornato il comment block dei log RCS
+ *#*
+ *#* 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.
+ *#*
+ *#* Revision 1.2  2004/05/23 18:21:53  bernie
+ *#* Trim CVS logs and cleanup header info.
+ *#*
+ *#*/
 
 #include "ser.h"
 #include "ser_p.h"
 #include <drv/kdebug.h>
+#include <drv/irq.h>
 #include <hw.h>
 #include <DSP56F807.H>
 
@@ -47,11 +54,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 +102,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 +117,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 +149,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 +215,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);