X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Fser_dsp56k.c;h=55e4ddc23b84a18976a46b85ccade18e49b92b7d;hb=b25aabb82dd47404b0697e1394fd3a14963e1224;hp=901362d8b7394bd0a4e94e86fc9975f9fa9e76d5;hpb=acc5c0c27b6946a710af309d400a9748c98c6ecc;p=bertos.git diff --git a/drv/ser_dsp56k.c b/drv/ser_dsp56k.c index 901362d8..55e4ddc2 100755 --- a/drv/ser_dsp56k.c +++ b/drv/ser_dsp56k.c @@ -2,7 +2,7 @@ * \file * * * \version $Id$ @@ -15,6 +15,18 @@ /*#* *#* $Log$ + *#* Revision 1.13 2005/11/04 16:20:02 bernie + *#* Fix reference to README.devlib in header. + *#* + *#* Revision 1.12 2005/04/11 19:10:27 bernie + *#* Include top-level headers from cfg/ subdir. + *#* + *#* Revision 1.11 2005/01/25 07:42:04 bernie + *#* Simplify. + *#* + *#* Revision 1.10 2005/01/14 00:48:33 aleph + *#* Rename callbacks; SerialHardwareVT.txSending: New callback. + *#* *#* Revision 1.9 2004/12/08 09:42:55 bernie *#* Add support for multiplexed serial ports. *#* @@ -40,7 +52,7 @@ #include "ser.h" #include "ser_p.h" #include -#include +#include #include #include @@ -109,33 +121,36 @@ static inline void disable_rx_irq_bare(volatile struct REG_SCI_STRUCT* regs) static inline void disable_tx_irq(struct SerialHardware* _hw) { struct SCI* hw = (struct SCI*)_hw; - volatile struct REG_SCI_STRUCT* regs = hw->regs; - disable_tx_irq_bare(regs); + disable_tx_irq_bare(hw->regs); } static inline void disable_rx_irq(struct SerialHardware* _hw) { struct SCI* hw = (struct SCI*)_hw; - volatile struct REG_SCI_STRUCT* regs = hw->regs; - disable_rx_irq_bare(regs); + disable_rx_irq_bare(hw->regs); } static inline void enable_tx_irq(struct SerialHardware* _hw) { struct SCI* hw = (struct SCI*)_hw; - volatile struct REG_SCI_STRUCT* regs = hw->regs; - enable_tx_irq_bare(regs); + enable_tx_irq_bare(hw->regs); } static inline void enable_rx_irq(struct SerialHardware* _hw) { struct SCI* hw = (struct SCI*)_hw; - volatile struct REG_SCI_STRUCT* regs = hw->regs; - enable_rx_irq_bare(regs); + enable_rx_irq_bare(hw->regs); +} + +static inline bool tx_irq_enabled(struct SerialHardware* _hw) +{ + struct SCI* hw = (struct SCI*)_hw; + + return (hw->regs->CR & REG_SCI_CR_TEIE); } static void tx_isr(const struct SCI *hw) @@ -218,16 +233,12 @@ static void cleanup(struct SerialHardware* _hw) { struct SCI* hw = (struct SCI*)_hw; - // Wait until we finish sending everything - ser_drain(hw->serial); - ser_purge(hw->serial); - // Uninstall the ISRs disable_rx_irq(_hw); disable_tx_irq(_hw); irq_uninstall(hw->irq_tx); irq_uninstall(hw->irq_rx); -} +} static void setbaudrate(struct SerialHardware* _hw, unsigned long rate) { @@ -295,9 +306,10 @@ static const struct SerialHardwareVT SCI_VT = { .init = init, .cleanup = cleanup, - .setbaudrate = setbaudrate, - .setparity = setparity, - .enabletxirq = enable_tx_irq, + .setBaudrate = setbaudrate, + .setParity = setparity, + .txStart = enable_tx_irq, + .txSending = tx_irq_enabled, }; #if CONFIG_SER_MULTI @@ -305,9 +317,10 @@ static const struct SerialHardwareVT SCI_MULTI_VT = { .init = init_lock, .cleanup = cleanup_unlock, - .setbaudrate = setbaudrate, - .setparity = setparity, - .enabletxirq = enable_tx_irq, + .setBaudrate = setbaudrate, + .setParity = setparity, + .txStart = enable_tx_irq, + .txSending = tx_irq_enabled, }; #endif /* CONFIG_SER_MULTI */