#ifdef _H_atmega128hardware_H
#include "avr_stdio.h"
#endif
+#ifdef __M16C62PHARDWARE_H__
+#include "m16c62p_printf.h"
+#endif
#include "message.h"
int printfflush();
%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
%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
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
}
uses interface StopModeControl;
#ifdef ENABLE_STOP_MODE
uses interface RV8564 as RTC;
+ uses interface HplDS2782;
+ uses interface StdControl as DS2782Control;
+ uses interface Boot;
#endif
}
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));
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
}
+/*
+ * 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.
+/*
+ * 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.
* 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 <gtolle@archrock.com>
*/
/**
- * Implementation of the user button for the telosb platform
+ * Implementation of the user button for the Mulle platform
*
- * @author Gilman Tolle <gtolle@archrock.com>
- * @version $Revision$
+ * @author Henrik Makitaavola <henrik.makitaavola@gmail.com>
*/
-// 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;
+/*
+ * 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.
* 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 <gtolle@archrock.com>
*/
/**
- * 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
* enabling or disabling notifications that the button has changed
* state.
*
- * @author Gilman Tolle <gtolle@archrock.com>
- * @version $Revision$
+ * @author Henrik Makitaavola <henrik.makitaavola@gmail.com>
*/
#include <UserButton.h>
+/*
+ * 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 <gtolle@archrock.com>
+ */
+
/**
* Implementation of the user button for the Mulle platform extension board.
*
module UserButtonP {
provides interface Get<button_state_t>;
provides interface Notify<button_state_t>;
- 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() )
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();
}
}
*
* @author Henrik Makitaavola <henrik.makitaavola@gmail.com>
*/
-
module HplAt45dbP
{
provides
}
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;
}
--- /dev/null
+/*
+ * 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 <henrik.makitaavola@gmail.com>
+ */
+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;
+
+}
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;
}
#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__
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();
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();
*
* @author Henrik Makitaavola <henrik.makitaavola@gmail.com>
*/
-configuration BusyWaitMicroC
+module BusyWaitMicroC
{
provides interface BusyWait<TMicro, uint16_t>;
}
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)
+ );
+ }
+ }
}