X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Fser_dsp56k.c;h=a5a96fb7fb404bd106d1f5fdfbde32e34e9cec77;hb=be670d92a85770cfa7edcbaca9a94032ddf1b114;hp=6c75f8a348457a78f58b7cf4e99bbba7e53540d7;hpb=96f0ef786b54356c56cc3d4e4f0838df2505cfcc;p=bertos.git diff --git a/drv/ser_dsp56k.c b/drv/ser_dsp56k.c index 6c75f8a3..a5a96fb7 100755 --- a/drv/ser_dsp56k.c +++ b/drv/ser_dsp56k.c @@ -13,19 +13,26 @@ * \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 +#include #include #include @@ -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);