--- /dev/null
+/*
+ * 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);
+}