From 3aed39b6730a55e41c9ae5a8a1e690bca5746147 Mon Sep 17 00:00:00 2001 From: "R. Steve McKown" Date: Fri, 26 Oct 2012 21:55:30 -0600 Subject: [PATCH] tmimsp: clean up open drain for sht1x DATA Rename Msp430OpenDrainC to Msp430ODPUC and fix it up. This is an open-drain component that also provides an internal pull-up so an external one is not required. It only works on MSP430 pins offering internal pull up/down feature. The OpenDrainC component provides an open-drain emulation, does not provide an internal pull-up, and should work for any microcontroller having a GeneralIO implementation for its GPIO pins. --- .../tmirws/chips/sht11/HplSensirionSht11C.nc | 2 +- .../{Msp430OpenDrainC.nc => Msp430ODPUC.nc} | 22 +++-- .../tmimsp/tmirws/chips/sht11/Msp430ODPUP.nc | 84 +++++++++++++++++++ .../tmirws/chips/sht11/Msp430OpenDrainP.nc | 75 ----------------- .../tmimsp/tmirws/chips/sht11/OpenDrainC.nc | 10 ++- .../tmimsp/tmirws/chips/sht11/OpenDrainP.nc | 26 ++---- 6 files changed, 114 insertions(+), 105 deletions(-) rename tos/platforms/tmimsp/tmirws/chips/sht11/{Msp430OpenDrainC.nc => Msp430ODPUC.nc} (74%) create mode 100644 tos/platforms/tmimsp/tmirws/chips/sht11/Msp430ODPUP.nc delete mode 100644 tos/platforms/tmimsp/tmirws/chips/sht11/Msp430OpenDrainP.nc diff --git a/tos/platforms/tmimsp/tmirws/chips/sht11/HplSensirionSht11C.nc b/tos/platforms/tmimsp/tmirws/chips/sht11/HplSensirionSht11C.nc index cb715145..00fcb5fa 100644 --- a/tos/platforms/tmimsp/tmirws/chips/sht11/HplSensirionSht11C.nc +++ b/tos/platforms/tmimsp/tmirws/chips/sht11/HplSensirionSht11C.nc @@ -47,7 +47,7 @@ configuration HplSensirionSht11C { provides interface GpioInterrupt as InterruptDATA; } implementation { - components new Msp430OpenDrainC() as DATAM; + components new Msp430ODPUC() as DATAM; DATA = DATAM; components new Msp430GpioC() as SCKM; diff --git a/tos/platforms/tmimsp/tmirws/chips/sht11/Msp430OpenDrainC.nc b/tos/platforms/tmimsp/tmirws/chips/sht11/Msp430ODPUC.nc similarity index 74% rename from tos/platforms/tmimsp/tmirws/chips/sht11/Msp430OpenDrainC.nc rename to tos/platforms/tmimsp/tmirws/chips/sht11/Msp430ODPUC.nc index 177a0406..3e36dbad 100644 --- a/tos/platforms/tmimsp/tmirws/chips/sht11/Msp430OpenDrainC.nc +++ b/tos/platforms/tmimsp/tmirws/chips/sht11/Msp430ODPUC.nc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Titanium Mirror, Inc. + * Copyright (c) 2012, Titanium Mirror, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -28,25 +28,29 @@ */ /** - * Implement an open drain output using an HplMsp430GeneralIO, represented as - * a GeneralIO. This component uses the Msp430's internal pull up/down - * capability, present on only some devices. + * Provide an open drain output with internal pull-up. + * + * Works only for MSP430 processor ports having internal pull up/down resistors. + * Since a low value is asserted by using the pull-down resistor instead of the + * pull-up resistor, the slew rate of the net might in some cases be too slow. + * + * This pin can only be an open drain output and cannot be reconfigured. * * @author R. Steve McKown */ -generic configuration Msp430OpenDrainC() +generic configuration Msp430ODPUC() { provides interface GeneralIO; uses interface HplMsp430GeneralIO as HplGeneralIO; } implementation { - components new Msp430OpenDrainP(); - GeneralIO = Msp430OpenDrainP; - HplGeneralIO = Msp430OpenDrainP; + components new Msp430ODPUP(); + GeneralIO = Msp430ODPUP; + HplGeneralIO = Msp430ODPUP; components MainC; - MainC.SoftwareInit -> Msp430OpenDrainP; + MainC.SoftwareInit -> Msp430ODPUP; } diff --git a/tos/platforms/tmimsp/tmirws/chips/sht11/Msp430ODPUP.nc b/tos/platforms/tmimsp/tmirws/chips/sht11/Msp430ODPUP.nc new file mode 100644 index 00000000..6ec99d07 --- /dev/null +++ b/tos/platforms/tmimsp/tmirws/chips/sht11/Msp430ODPUP.nc @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2012, 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. + */ + +/** + * Provide an open drain output with internal pull-up. + * + * Works only for MSP430 processor ports having internal pull up/down resistors. + * Since a low value is asserted by using the pull-down resistor instead of the + * pull-up resistor, the slew rate of the net might in some cases be too slow. + * + * This pin can only be an open drain output and cannot be reconfigured. + * + * @author R. Steve McKown + */ + +generic module Msp430ODPUP() +{ + provides { + interface Init; + interface GeneralIO; + } + uses interface HplMsp430GeneralIO as HplGeneralIO; +} +implementation +{ + command error_t Init.init() + { + call HplGeneralIO.makeInput(); + call HplGeneralIO.enableRen(); + call HplGeneralIO.set(); + return SUCCESS; + } + + async command void GeneralIO.set() + { + call HplGeneralIO.set(); + } + + async command void GeneralIO.clr() + { + call HplGeneralIO.clr(); + } + + async command void GeneralIO.toggle() + { + call HplGeneralIO.toggle(); + } + + async command bool GeneralIO.get() + { + return call HplGeneralIO.get(); + } + + async command void GeneralIO.makeInput() {} + async command void GeneralIO.makeOutput() {} + async command bool GeneralIO.isInput() { return FALSE; } + async command bool GeneralIO.isOutput() { return TRUE; } +} diff --git a/tos/platforms/tmimsp/tmirws/chips/sht11/Msp430OpenDrainP.nc b/tos/platforms/tmimsp/tmirws/chips/sht11/Msp430OpenDrainP.nc deleted file mode 100644 index d34be3d9..00000000 --- a/tos/platforms/tmimsp/tmirws/chips/sht11/Msp430OpenDrainP.nc +++ /dev/null @@ -1,75 +0,0 @@ -/* - * 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. - */ - -/** - * Implement an open drain output using an HplMsp430GeneralIO, represented as - * a GeneralIO. Uses the pull-up resistor built into the msp430 for each io - * pin to deliver the pull-up necessary. set() is pin in input with pull-up, - * clr() is in output with no pull-up. - * - * @author R. Steve McKown - */ - -generic module Msp430OpenDrainP() -{ - provides { - interface Init; - interface GeneralIO; - } - uses interface HplMsp430GeneralIO as HplGeneralIO; -} -implementation -{ - command error_t Init.init() - { - call HplGeneralIO.makeInput(); - call HplGeneralIO.set(); - call HplGeneralIO.enableRen(); /* this is the important bit */ - return SUCCESS; - } - - async command void GeneralIO.set() { call HplGeneralIO.set(); } - async command void GeneralIO.clr() { call HplGeneralIO.clr(); } - async command void GeneralIO.toggle() { call HplGeneralIO.toggle(); } - //async command uint8_t GeneralIO.getOutRaw() { call HplGeneralIO.getOutRaw(); } - //async command bool GeneralIO.getOut() { return call HplGeneralIO.getOut(); } - //async command uint8_t GeneralIO.getRaw() { call HplGeneralIO.getRaw(); } - async command bool GeneralIO.get() { return call HplGeneralIO.get(); } - async command void GeneralIO.makeInput() {} // call HplGeneralIO.makeInput(); } - async command bool GeneralIO.isInput() { return TRUE; } //call HplGeneralIO.isInput(); } - async command void GeneralIO.makeOutput() {} // call HplGeneralIO.makeOutput(); } - async command bool GeneralIO.isOutput() { return TRUE; } //call HplGeneralIO.isOutput(); } - //async command void GeneralIO.selectModuleFunc() { call HplGeneralIO.selectModuleFunc(); } - //async command bool GeneralIO.isModuleFunc() { return call HplGeneralIO.isModuleFunc(); } - //async command void GeneralIO.selectIOFunc() { call HplGeneralIO.selectIOFunc(); } - //async command bool GeneralIO.isIOFunc() { return call HplGeneralIO.isIOFunc(); } - //async command void GeneralIO.enableRen() { call HplGeneralIO.enableRen(); } - //async command void GeneralIO.disableRen() { call HplGeneralIO.disableRen(); } - //async command bool GeneralIO.isRen() { return call HplGeneralIO.isRen(); } -} diff --git a/tos/platforms/tmimsp/tmirws/chips/sht11/OpenDrainC.nc b/tos/platforms/tmimsp/tmirws/chips/sht11/OpenDrainC.nc index e89e26f3..f8de2aa3 100644 --- a/tos/platforms/tmimsp/tmirws/chips/sht11/OpenDrainC.nc +++ b/tos/platforms/tmimsp/tmirws/chips/sht11/OpenDrainC.nc @@ -28,8 +28,14 @@ */ /** - * Implement an open drain output using a GeneralIO, represented as a - * GeneralIO. Requires an external pull-up for proper operation. + * Provide an open drain output as a GeneralIO using a GeneralIO. + * + * set() puts the pin in high impedance state by selecting the pin input mode. + * clr() sets the pin to sink current to ground by selecting the pin output + * mode, logic zero. Generally, an external pull-up resistor will be used with + * an open drain output. + * + * This pin can only be an open drain output and cannot be reconfigured. * * @author R. Steve McKown */ diff --git a/tos/platforms/tmimsp/tmirws/chips/sht11/OpenDrainP.nc b/tos/platforms/tmimsp/tmirws/chips/sht11/OpenDrainP.nc index 9cc22462..4a8fa075 100644 --- a/tos/platforms/tmimsp/tmirws/chips/sht11/OpenDrainP.nc +++ b/tos/platforms/tmimsp/tmirws/chips/sht11/OpenDrainP.nc @@ -28,14 +28,13 @@ */ /** - * Implement an open drain output using a GeneralIO, represented as a - * GeneralIO. clr() puts the pin in input mode, simulating open drain and - * therefore requiring a pull-up on the net. set() puts the pin in output - * mode and sinks current by outputting a logic zero. By definition, the - * pin wrapped by this component can only be used as an output. + * Provide an open drain output as a GeneralIO using a GeneralIO. set() puts + * the pin in high impedance state by selecting the pin input mode. clr() sets + * the pin to sink current to ground by selecting the pin output mode, logic + * zero. Generally, an external pull-up resistor will be used with an open + * drain output. * - * TODO: there could be a version of this component that uses the msp430's - * built-in pull-up resistor... + * This pin can only be an open drain output and cannot be reconfigured. * * @author R. Steve McKown */ @@ -81,17 +80,8 @@ implementation } async command void GeneralIO.makeInput() {} - async command void GeneralIO.makeOutput() {} - - async command bool GeneralIO.isInput() - { - return FALSE; - } - - async command bool GeneralIO.isOutput() - { - return TRUE; - } + async command bool GeneralIO.isInput() { return FALSE; } + async command bool GeneralIO.isOutput() { return TRUE; } } -- 2.39.2