X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Fser_dsp56k.c;h=cb892c7265b41feaed07e581eff53ee10a96a2da;hb=4afd09ec0c80aa1611fc3b5a3517e9c0d1755cfd;hp=970a5c3db523097a1efe3c70dd1fb018526d9707;hpb=7ee3b3c3da60b181d18336e892d8d0920166f5ae;p=bertos.git diff --git a/drv/ser_dsp56k.c b/drv/ser_dsp56k.c index 970a5c3d..cb892c72 100755 --- a/drv/ser_dsp56k.c +++ b/drv/ser_dsp56k.c @@ -2,7 +2,7 @@ * \file * * * \version $Id$ @@ -15,6 +15,12 @@ /* * $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. + * * Revision 1.2 2004/05/23 18:21:53 bernie * Trim CVS logs and cleanup header info. * @@ -23,6 +29,7 @@ #include "ser.h" #include "ser_p.h" #include +#include #include #include @@ -44,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; @@ -93,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)) @@ -107,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 | @@ -138,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); @@ -202,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);