From: r-studio Date: Thu, 5 Nov 2009 12:25:51 +0000 (+0000) Subject: mulle platfor modification, flsh storage, more lowpower, softi2c improvements X-Git-Tag: rc_6_tinyos_2_1_1~150 X-Git-Url: https://oss.titaniummirror.com/gitweb/?p=tinyos-2.x.git;a=commitdiff_plain;h=2d74d98ec380d6cf237814287406c993977a60e3 mulle platfor modification, flsh storage, more lowpower, softi2c improvements --- diff --git a/tos/lib/printf/printf.h b/tos/lib/printf/printf.h index 605162c9..c70a791f 100644 --- a/tos/lib/printf/printf.h +++ b/tos/lib/printf/printf.h @@ -48,6 +48,9 @@ #ifdef _H_atmega128hardware_H #include "avr_stdio.h" #endif +#ifdef __M16C62PHARDWARE_H__ +#include "m16c62p_printf.h" +#endif #include "message.h" int printfflush(); diff --git a/tos/platforms/mulle/.platform b/tos/platforms/mulle/.platform index 0ecae8e1..f8aba77e 100755 --- a/tos/platforms/mulle/.platform +++ b/tos/platforms/mulle/.platform @@ -12,7 +12,7 @@ push( @includes, qw( %T/platforms/mulle/chips/at45db %T/platforms/mulle/chips/m16c62p %T/platforms/mulle/chips/mma7261qt - %T/platforms/mulle/chips/ds2745 + %T/platforms/mulle/chips/ds2782 %T/platforms/mulle/system %T/platforms/mulle/timers %T/platforms/mulle/timers/stop @@ -26,7 +26,7 @@ push( @includes, qw( %T/chips/m16c62p/uart %T/chips/m16c62p/printf %T/chips/mma7261qt - %T/chips/ds2745 + %T/chips/ds2782 %T/lib/power %T/lib/timer %T/lib/serial diff --git a/tos/platforms/mulle/PlatformC.nc b/tos/platforms/mulle/PlatformC.nc index 7811316f..c236b9ad 100755 --- a/tos/platforms/mulle/PlatformC.nc +++ b/tos/platforms/mulle/PlatformC.nc @@ -62,9 +62,13 @@ implementation PlatformP.M16c62pControl -> M16c62pControlC; PlatformP.StopModeControl -> StopModeControlC; + #ifdef ENABLE_STOP_MODE - components RV8564C; + components RV8564C, DS2782InternalC, MainC; + PlatformP.Boot -> MainC; PlatformP.RTC -> RV8564C; + PlatformP.HplDS2782 -> DS2782InternalC; + PlatformP.DS2782Control -> DS2782InternalC; #endif } diff --git a/tos/platforms/mulle/PlatformP.nc b/tos/platforms/mulle/PlatformP.nc index 733d112f..47221400 100755 --- a/tos/platforms/mulle/PlatformP.nc +++ b/tos/platforms/mulle/PlatformP.nc @@ -51,6 +51,9 @@ module PlatformP uses interface StopModeControl; #ifdef ENABLE_STOP_MODE uses interface RV8564 as RTC; + uses interface HplDS2782; + uses interface StdControl as DS2782Control; + uses interface Boot; #endif } @@ -59,17 +62,11 @@ implementation command error_t Init.init() { error_t ok = SUCCESS; - + ok = call M16c62pControl.init(); -#ifdef ENABLE_STOP_MODE - call StopModeControl.allowStopMode(true); - // Activate the RTC and set it to output 1024 tics on the CLKOUT pin. - call RTC.on(); - call RTC.enableCLKOUT(); - call RTC.writeRegister(RV8564_CLKF, 0x81); -#else + call StopModeControl.allowStopMode(false); -#endif + // Init the M16c/62p to run at 10MHz. ok = ecombine (ok, call M16c62pControl.defaultSystemClock(MCU_SPEED_10MHz)); @@ -78,9 +75,37 @@ implementation return SUCCESS; } + + #ifdef ENABLE_STOP_MODE + task void stopDS2782() + { + call DS2782Control.stop(); + } + // The Boot event is needed so we can be sure that all underlying components + // have been initialized, for example the I2C resource. + event void Boot.booted() + { + call StopModeControl.allowStopMode(true); + // Activate the RTC and set it to output 1024 tics on the CLKOUT pin + call DS2782Control.start(); + call HplDS2782.allowSleep(true); + call RTC.on(); + call RTC.enableCLKOUT(); + call RTC.writeRegister(RV8564_CLKF, 0x81); + } + async event void RTC.fired() {} async event void RTC.readRegisterDone(uint8_t val, uint8_t reg) {} async event void RTC.writeRegisterDone(uint8_t reg) {} + + async event void HplDS2782.setConfigDone(error_t error) {return; } + async event void HplDS2782.allowSleepDone( error_t error ) { post stopDS2782(); } + async event void HplDS2782.measureTemperatureDone( error_t error, uint16_t val ){ return; } + async event void HplDS2782.measureVoltageDone( error_t error, uint16_t val ){ return; } + async event void HplDS2782.measureCurrentDone( error_t error, uint16_t val ){ return; } + async event void HplDS2782.measureAccCurrentDone( error_t error, uint16_t val ){ return; } + async event void HplDS2782.setOffsetBiasDone( error_t error ){ return; } + async event void HplDS2782.setAccOffsetBiasDone(error_t error){ return; } #endif } diff --git a/tos/platforms/mulle/button/HplUserButtonC.nc b/tos/platforms/mulle/button/HplUserButtonC.nc index af9d84ef..568cd636 100644 --- a/tos/platforms/mulle/button/HplUserButtonC.nc +++ b/tos/platforms/mulle/button/HplUserButtonC.nc @@ -1,3 +1,39 @@ +/* + * Copyright (c) 2009 Communication Group and Eislab at + * Lulea University of Technology + * + * Contact: Laurynas Riliskis, LTU + * Mail: laurynas.riliskis@ltu.se + * 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 Communication Group at Lulea University of Technology + * 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 STANFORD + * UNIVERSITY OR ITS 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. + */ + /** * Copyright (c) 2007 Arch Rock Corporation * All rights reserved. diff --git a/tos/platforms/mulle/button/UserButton.h b/tos/platforms/mulle/button/UserButton.h index 636e25ee..aef5eccb 100644 --- a/tos/platforms/mulle/button/UserButton.h +++ b/tos/platforms/mulle/button/UserButton.h @@ -1,3 +1,39 @@ +/* + * Copyright (c) 2009 Communication Group and Eislab at + * Lulea University of Technology + * + * Contact: Laurynas Riliskis, LTU + * Mail: laurynas.riliskis@ltu.se + * 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 Communication Group at Lulea University of Technology + * 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 STANFORD + * UNIVERSITY OR ITS 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. + */ + /** * Copyright (c) 2007 Arch Rock Corporation * All rights reserved. @@ -27,19 +63,18 @@ * 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 + * + * @author Gilman Tolle */ /** - * Implementation of the user button for the telosb platform + * Implementation of the user button for the Mulle platform * - * @author Gilman Tolle - * @version $Revision$ + * @author Henrik Makitaavola */ -// TODO(henrik) Test and fix this code! - -#ifndef USERBUTTON_H -#define USERBUTTON_H +#ifndef __USERBUTTON_H__ +#define __USERBUTTON_H__ typedef enum { BUTTON_RELEASED = 0, BUTTON_PRESSED = 1 } button_state_t; diff --git a/tos/platforms/mulle/button/UserButtonC.nc b/tos/platforms/mulle/button/UserButtonC.nc index 961d4aa8..8a06909a 100644 --- a/tos/platforms/mulle/button/UserButtonC.nc +++ b/tos/platforms/mulle/button/UserButtonC.nc @@ -1,3 +1,39 @@ +/* + * Copyright (c) 2009 Communication Group and Eislab at + * Lulea University of Technology + * + * Contact: Laurynas Riliskis, LTU + * Mail: laurynas.riliskis@ltu.se + * 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 Communication Group at Lulea University of Technology + * 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 STANFORD + * UNIVERSITY OR ITS 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. + */ + /** * Copyright (c) 2007 Arch Rock Corporation * All rights reserved. @@ -27,10 +63,12 @@ * 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 + * + * @author Gilman Tolle */ /** - * Implementation of the user button for the telosb platform. Get + * Implementation of the user button for the Mulle platform. Get * returns the current state of the button by reading the pin, * regardless of whether enable() or disable() has been called on the * Interface. Notify.enable() and Notify.disable() modify the @@ -38,8 +76,7 @@ * enabling or disabling notifications that the button has changed * state. * - * @author Gilman Tolle - * @version $Revision$ + * @author Henrik Makitaavola */ #include diff --git a/tos/platforms/mulle/button/UserButtonP.nc b/tos/platforms/mulle/button/UserButtonP.nc index 4c3c5e13..042f3bec 100644 --- a/tos/platforms/mulle/button/UserButtonP.nc +++ b/tos/platforms/mulle/button/UserButtonP.nc @@ -1,3 +1,72 @@ +/* + * Copyright (c) 2009 Communication Group and Eislab at + * Lulea University of Technology + * + * Contact: Laurynas Riliskis, LTU + * Mail: laurynas.riliskis@ltu.se + * 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 Communication Group at Lulea University of Technology + * 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 STANFORD + * UNIVERSITY OR ITS 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. + */ + +/** + * Copyright (c) 2007 Arch Rock Corporation + * 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 Arch Rock Corporation 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 + * ARCHED ROCK OR ITS 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 + * + * @author Gilman Tolle + */ + /** * Implementation of the user button for the Mulle platform extension board. * @@ -9,19 +78,17 @@ module UserButtonP { provides interface Get; provides interface Notify; - provides interface Init; uses interface GeneralIO; uses interface GpioInterrupt; } implementation { - - command error_t Init.init() + + task void notify() { - call GeneralIO.makeInput(); - call GeneralIO.clr(); + signal Notify.notify(BUTTON_PRESSED); } - + command button_state_t Get.get() { if ( call GeneralIO.get() ) @@ -36,16 +103,21 @@ implementation { command error_t Notify.enable() { + call GeneralIO.clr(); + call GeneralIO.makeInput(); return call GpioInterrupt.enableRisingEdge(); } command error_t Notify.disable() { - return call GpioInterrupt.disable(); + call GpioInterrupt.disable(); + call GeneralIO.makeOutput(); + call GeneralIO.clr(); + return SUCCESS; } - async event void GIRQ.fired() + async event void GpioInterrupt.fired() { - signal Notify.notify( BUTTON_PRESSED ); + post notify(); } } diff --git a/tos/platforms/mulle/chips/at45db/HplAt45dbP.nc b/tos/platforms/mulle/chips/at45db/HplAt45dbP.nc index 021e1667..fa206370 100644 --- a/tos/platforms/mulle/chips/at45db/HplAt45dbP.nc +++ b/tos/platforms/mulle/chips/at45db/HplAt45dbP.nc @@ -69,7 +69,6 @@ * * @author Henrik Makitaavola */ - module HplAt45dbP { provides @@ -89,11 +88,15 @@ module HplAt45dbP } implementation { + // TODO(Henrik) Move init code to a SplitControl interface and + // change the busy wait into a TimerMilli.startOneShot. command error_t Init.init() { call Select.makeOutput(); call Select.set(); call VCC.makeOutput(); call VCC.clr(); + // The device needs 20ms before is accepts a write. + call BusyWait.wait(20000); return SUCCESS; } diff --git a/tos/platforms/mulle/chips/ds2782/DS2782InternalC.nc b/tos/platforms/mulle/chips/ds2782/DS2782InternalC.nc new file mode 100644 index 00000000..d957cf8d --- /dev/null +++ b/tos/platforms/mulle/chips/ds2782/DS2782InternalC.nc @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2009 Communication Group and Eislab at + * Lulea University of Technology + * + * Contact: Laurynas Riliskis, LTU + * Mail: laurynas.riliskis@ltu.se + * 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 Communication Group at Lulea University of Technology + * 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 STANFORD + * UNIVERSITY OR ITS 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. + */ + +/** + * The DS2782 wiring on the Mulle. + * + * @author Henrik Makitaavola + */ +configuration DS2782InternalC { + provides interface StdControl; + provides interface HplDS2782; +} + +implementation { + components new SoftI2CBatteryMonitorRTCC() as I2C; + components new HplDS2782LogicP(0x68) as Logic; + + Logic.I2CPacket -> I2C; + Logic.I2CResource -> I2C; + HplDS2782 = Logic; + + StdControl = Logic; + +} diff --git a/tos/platforms/mulle/chips/rv8564/RV8564P.nc b/tos/platforms/mulle/chips/rv8564/RV8564P.nc index 9dcf0c2b..84dab98e 100755 --- a/tos/platforms/mulle/chips/rv8564/RV8564P.nc +++ b/tos/platforms/mulle/chips/rv8564/RV8564P.nc @@ -136,8 +136,8 @@ implementation return FAIL; } state = WRITING; - write_buffer[0] = reg; - write_buffer[1] = value; + atomic write_buffer[0] = reg; + atomic write_buffer[1] = value; call I2CResource.request(); return SUCCESS; } diff --git a/tos/platforms/mulle/hardware.h b/tos/platforms/mulle/hardware.h index d478bdac..ff2ed9ef 100755 --- a/tos/platforms/mulle/hardware.h +++ b/tos/platforms/mulle/hardware.h @@ -44,6 +44,10 @@ #define MAIN_CRYSTAL_SPEED 10 /*MHz*/ #define PLL_MULTIPLIER M16C62P_PLL_2 +#ifndef PLL_ON +#define RF230_SLOW_SPI +#endif + #include "m16c62phardware.h" // Header file for the MCU #endif // __HARDWARE_H__ diff --git a/tos/platforms/mulle/softwarei2c/SoftI2CBusP.nc b/tos/platforms/mulle/softwarei2c/SoftI2CBusP.nc index db5543b3..ad333bcf 100755 --- a/tos/platforms/mulle/softwarei2c/SoftI2CBusP.nc +++ b/tos/platforms/mulle/softwarei2c/SoftI2CBusP.nc @@ -98,9 +98,9 @@ implementation async command void I2C.off() { // TODO(henrik): Exactly what should be set if I2C bus should be turned off? - call I2CData.makeInput(); - call I2CClk.makeInput(); - call I2CCtrl.makeInput(); + call I2CData.makeOutput(); + call I2CClk.makeOutput(); + call I2CCtrl.makeOutput(); call I2CCtrl.clr(); call I2CClk.clr(); call I2CData.clr(); diff --git a/tos/platforms/mulle/softwarespi/SoftSpiBusP.nc b/tos/platforms/mulle/softwarespi/SoftSpiBusP.nc index 0c61ed84..016fb978 100755 --- a/tos/platforms/mulle/softwarespi/SoftSpiBusP.nc +++ b/tos/platforms/mulle/softwarespi/SoftSpiBusP.nc @@ -59,9 +59,9 @@ implementation async command void Spi.off() { - call SCLK.makeInput(); - call MISO.makeInput(); - call MOSI.makeInput(); + call SCLK.makeOutput(); + call MISO.makeOutput(); + call MOSI.makeOutput(); call SCLK.clr(); call MISO.clr(); call MOSI.clr(); diff --git a/tos/platforms/mulle/timers/BusyWaitMicroC.nc b/tos/platforms/mulle/timers/BusyWaitMicroC.nc index 8dedf6c2..82aae0a8 100755 --- a/tos/platforms/mulle/timers/BusyWaitMicroC.nc +++ b/tos/platforms/mulle/timers/BusyWaitMicroC.nc @@ -40,15 +40,31 @@ * * @author Henrik Makitaavola */ -configuration BusyWaitMicroC +module BusyWaitMicroC { provides interface BusyWait; } implementation { - components CounterMicro16C, - new BusyWaitCounterC(TMicro, uint16_t); - - BusyWait = BusyWaitCounterC; - BusyWaitCounterC.Counter -> CounterMicro16C; + // TODO(henrik) This will now only work on 10Mhz speed, easy to + // add a signal from the control module of the mcu + // to signal the change of speed and the wait function + // can adjust to it. + inline async command void BusyWait.wait(uint16_t dt) + { + atomic { + asm volatile ( + // The call and return of the Busywait takes about 1us + "sub.w #1,%[t]\n\t" + "1:\n\t" + "nop\n\t" + "add.w #1,%[t]\n\t" + "sub.w #1,%[t]\n\t" + "sub.w #1,%[t]\n\t" + "jgtu 1b" + : + : [t] "r" (dt) + ); + } + } }