]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/chips/msp430/usci/HplMsp430UsciReg.nc
Commit interim usci work. Not even close to complete yet, but don't want to lose it.
[tinyos-2.x.git] / tos / chips / msp430 / usci / HplMsp430UsciReg.nc
diff --git a/tos/chips/msp430/usci/HplMsp430UsciReg.nc b/tos/chips/msp430/usci/HplMsp430UsciReg.nc
new file mode 100644 (file)
index 0000000..6b848c7
--- /dev/null
@@ -0,0 +1,257 @@
+/*
+ * Copyright (c) 2008, Titanium Mirror, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - Neither the name of the Technische Universität Berlin nor the names
+ *   of its contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/**
+ * HPL interface to a USCI peripheral device in UART mode.
+ *
+ * @author R. Steve McKown <smckown@gmail.com>
+ */
+#include "Msp430Usci.h"
+
+interface HplMsp430UsciReg {
+  /**
+   * Return the current mode.
+   */
+  command msp430usci_mode_t getMode();
+
+  /**
+   * Prepare to set the mode.  If the device supports the requested mode, its
+   * UCxxCTL1.UCSWRST bit is set and true is returned.  If the device does not
+   * support the requested mode, no operations are performed and false is
+   * returned.
+   *
+   * @param msp430usci_mode_t The desired USCI mode.
+   * @return bool true if the device supports the requested mode, else false.
+   */
+  command bool setMode(msp430_usci_mode_t mode);
+
+  /**
+   * Get pointer to the UCxxCTL0 register associated with the USCI device.
+   *
+   * @return The pointer to the device's UCxxCTL0 register.
+   */
+  command uint8_t* ptrCtl0();
+
+  /**
+   * Get bits from the UCxxCTL0 register associated with the USCI device.
+   *
+   * @parm mask The bits upon which the operation is to be performed must be
+   * set in <t>mask</t>.
+   * @return The value of the device's UCxxCTL0 register ANDed with
+   * <t>mask</t>.
+   */
+  command uint8_t getCtl0(uint8_t mask);
+
+  /**
+   * Set bits in the UCxxCTL0 register associated with the USCI device.
+   * The operation is equivalent to: <t>UCxxCTL0 |= mask</t>.
+   *
+   * @parm mask The bits in set in <t>mask</t> to set in UCxxCTL0.
+   */
+  command void setCtl0(uint8_t mask);
+
+  /**
+   * Clear bits in the UCxxCTL0 register associated with the USCI device.
+   * The operation is equivalent to: <t>UCxxCTL0 &= ~mask</t>.
+   *
+   * @parm mask The bits in set in <t>mask</t> to clear in UCxxCTL0.
+   */
+  command void clrCtl0(uint8_t mask);
+
+  /**
+   * Assign the values of the bits in <t>value</t>, whose corresponding bits in
+   * <t>mask</t> are set, in the UCxxCTL0 register.  The operation is
+   * equivalent to: <t>UCxxCTL0 = (UCxxCTL0 & ~mask) | (value & mask)</t>.
+   */
+  command void assignCtl0(uint8_t mask, uint8_t value);
+
+  /**
+   * Manipulate bits in the UCxxCTL1 register.  See the methods that manipulate
+   * UCxxCTL0 for more information.
+   */
+  command uint8_t* ptrCtl1(uint8_t mask);
+  command uint8_t getCtl1(uint8_t mask);
+  command void setCtl1(uint8_t mask);
+  command void clrCtl1(uint8_t mask);
+  command void assignCtl1(uint8_t mask, uint8_t value);
+
+  /**
+   * Manipulate bits in the UCxxBR0 register.  See the methods that manipulate
+   * UCxxCTL0 for more information.
+   */
+  command uint8_t* ptrBr0(uint8_t mask);
+  command uint8_t getBr0(uint8_t mask);
+  command void setBr0(uint8_t mask);
+  command void clrBr0(uint8_t mask);
+  command void assignBr0(uint8_t mask, uint8_t value);
+
+  /**
+   * Manipulate bits in the UCxxBR1 register.  See the methods that manipulate
+   * UCxxCTL0 for more information.
+   */
+  command uint8_t* ptrBr1(uint8_t mask);
+  command uint8_t getBr1(uint8_t mask);
+  command void setBr1(uint8_t mask);
+  command void clrBr1(uint8_t mask);
+  command void assignBr1(uint8_t mask, uint8_t value);
+
+  /**
+   * Manipulate bits in the UCxxMCTL register.  See the methods that manipulate
+   * UCxxCTL0 for more information.  These methods perform no operation on
+   * providers implementing a USCI_Bx device.
+   */
+  command uint8_t* ptrMctl(uint8_t mask);
+  command uint8_t getMctl(uint8_t mask);
+  command void setMctl(uint8_t mask);
+  command void clrMctl(uint8_t mask);
+  command void assignMctl(uint8_t mask, uint8_t value);
+
+  /**
+   * Manipulate bits in the UCxxI2CIE register.  See the methods that
+   * manipulate UCxxCTL0 for more information.  These methods perform no
+   * operation on providers implementing a USCI_Ax device.
+   */
+  command uint8_t* ptrI2Cie(uint8_t mask);
+  command uint8_t getI2Cie(uint8_t mask);
+  command void setI2Cie(uint8_t mask);
+  command void clrI2Cie(uint8_t mask);
+  command void assignI2Cie(uint8_t mask, uint8_t value);
+
+  /**
+   * Manipulate bits in the UCxxSTAT register.  See the methods that manipulate
+   * UCxxCTL0 for more information.
+   */
+  command uint8_t* ptrStat(uint8_t mask);
+  command uint8_t getStat(uint8_t mask);
+  command void setStat(uint8_t mask);
+  command void clrStat(uint8_t mask);
+  command void assignStat(uint8_t mask, uint8_t value);
+
+  /**
+   * Return pointer to the UCAxxRXBUF register used by the USCI device.
+   */
+  command uint8_t* ptrRxbuf();
+
+  /**
+   * Read the contents of the UCAxxRXBUF register.  This register cannot be
+   * written.
+   */
+  command uint8_t getRxbuf();
+
+  /**
+   * Return pointer to the UCAxxTXBUF register used by the USCI device.
+   */
+  command uint8_t* ptrTxbuf();
+
+  /**
+   * Read the contents of the UCAxxTXBUF register.
+   */
+  command uint8_t getTxbuf();
+
+  /**
+   * Write a byte to the UCAxxTXBUF register.
+   */
+  command void setTxbuf(uint8_t byte);
+
+  /**
+   * Manipulate bits in the UCxxABCTL register.  See the methods that
+   * manipulate UCxxCTL0 for more information.  These methods perform no
+   * operation on providers implementing a USCI_Bx device.
+   */
+  command uint8_t* ptrAbctl(uint8_t mask);
+  command uint8_t getAbctl(uint8_t mask);
+  command void setAbctl(uint8_t mask);
+  command void clrAbctl(uint8_t mask);
+  command void assignAbctl(uint8_t mask, uint8_t value);
+
+  /**
+   * Manipulate bits in the UCxxIRTCTL register.  See the methods that
+   * manipulate UCxxCTL0 for more information.  These methods perform no
+   * operation on providers implementing a USCI_Bx device.
+   */
+  command uint8_t* ptrIrtctl(uint8_t mask);
+  command uint8_t getIrtctl(uint8_t mask);
+  command void setIrtctl(uint8_t mask);
+  command void clrIrtctl(uint8_t mask);
+  command void assignIrtctl(uint8_t mask, uint8_t value);
+
+  /**
+   * Manipulate bits in the UCxxIRRCTL register.  See the methods that
+   * manipulate UCxxCTL0 for more information.  These methods perform no
+   * operation on providers implementing a USCI_Bx device.
+   */
+  command uint8_t* ptrIrrctl(uint8_t mask);
+  command uint8_t getIrrctl(uint8_t mask);
+  command void setIrrctl(uint8_t mask);
+  command void clrIrrctl(uint8_t mask);
+  command void assignIrrctl(uint8_t mask, uint8_t value);
+
+  /**
+   * Manipulate bits in the UCxxI2COA register.  See the methods that
+   * manipulate UCxxCTL0 for more information.  These methods perform no
+   * operation on providers implementing a USCI_Ax device.
+   */
+  command uint8_t* ptrI2Coa(uint8_t mask);
+  command uint8_t getI2Coa(uint8_t mask);
+  command void setI2Coa(uint8_t mask);
+  command void clrI2Coa(uint8_t mask);
+  command void assignI2Coa(uint8_t mask, uint8_t value);
+
+  /**
+   * Manipulate bits in the UCxxI2COA register.  See the methods that
+   * manipulate UCxxCTL0 for more information.  These methods perform no
+   * operation on providers implementing a USCI_Ax device.
+   */
+  command uint8_t* ptrI2Csa(uint8_t mask);
+  command uint8_t getI2Csa(uint8_t mask);
+  command void setI2Csa(uint8_t mask);
+  command void clrI2Csa(uint8_t mask);
+  command void assignI2Csa(uint8_t mask, uint8_t value);
+
+  /**
+   * Manipulate bits in the UCxxIE register.  See the methods that manipulate
+   * UCxxCTL0 for more information.
+   */
+  command uint8_t* ptrIe(uint8_t mask);
+  command uint8_t getIe(uint8_t mask);
+  command void setIe(uint8_t mask);
+  command void clrIe(uint8_t mask);
+  command void assignIe(uint8_t mask, uint8_t value);
+
+  /**
+   * Manipulate bits in the UCxxIFG register.  See the methods that manipulate
+   * UCxxCTL0 for more information.
+   */
+  command uint8_t* ptrIfg(uint8_t mask);
+  command uint8_t getIfg(uint8_t mask);
+  command void setIfg(uint8_t mask);
+  command void clrIfg(uint8_t mask);
+  command void assignIfg(uint8_t mask, uint8_t value);
+}