* \file
* <!--
* Copyright 2003, 2004 Develer S.r.l. (http://www.develer.com/)
- * This file is part of DevLib - See devlib/README for information.
+ * This file is part of DevLib - See README.devlib for information.
* -->
*
* \version $Id$
/*#*
*#* $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.
*#*
#include "ser.h"
#include "ser_p.h"
#include <drv/irq.h>
-#include <debug.h>
+#include <cfg/debug.h>
#include <hw.h>
#include <DSP56F807.h>
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)
{
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)
{
{
.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
{
.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 */