[Tinyos-2-commits] CVS: tinyos-2.x/tos/platforms/intelmote2/chips/da9030 PMICC.nc, 1.4, 1.5 PMIC.nc, 1.2, 1.3 PMICM.nc, 1.5, 1.6
Razvan Musaloiu-E.
razvanm at users.sourceforge.net
Tue Jun 10 17:42:17 PDT 2008
- Previous message: [Tinyos-2-commits] CVS: tinyos-2.x/tos/chips/pxa27x/i2c HalPXA27xI2CMasterP.nc, 1.4, 1.5 HplPXA27xI2CP.nc, 1.4, 1.5 HplPXA27xPI2CC.nc, 1.4, 1.5 HalPXA27xI2CMasterC.nc, 1.4, 1.5 HplPXA27xI2CC.nc, 1.4, 1.5 HplPXA27xI2C.nc, 1.4, 1.5
- Next message: [Tinyos-2-commits] CVS: tinyos-2.x/tos/platforms/mica VoltageP.nc, 1.2, 1.3 VoltageC.nc, 1.2, 1.3
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/tinyos/tinyos-2.x/tos/platforms/intelmote2/chips/da9030
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv9551/platforms/intelmote2/chips/da9030
Modified Files:
PMICC.nc PMIC.nc PMICM.nc
Log Message:
Convert to Unix-style line terminators.
Index: PMICC.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/platforms/intelmote2/chips/da9030/PMICC.nc,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** PMICC.nc 12 Dec 2006 18:23:42 -0000 1.4
--- PMICC.nc 11 Jun 2008 00:42:14 -0000 1.5
***************
*** 1,95 ****
! /* $Id$ */
! /*
! * Copyright (c) 2005 Arched 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 Arched 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.
! */
! /* tab:4
! * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By
! * downloading, copying, installing or using the software you agree to
! * this license. If you do not agree to this license, do not download,
! * install, copy or use the software.
! *
! * Intel Open Source License
! *
! * Copyright (c) 2002 Intel 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 Intel 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 INTEL 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.
! *
! *
! */
! /*
! *
! * Authors: Lama Nachman, Robert Adler
! */
! configuration PMICC{
! provides{
! interface Init;
! interface PMIC;
! }
! }
!
! implementation{
! components PMICM;
! components new TimerMilliC();
! components HplPXA27xPI2CC, HplPXA27xGPIOC;
! components PlatformP;
!
! Init = PMICM;
! PMIC = PMICM;
!
! PMICM.Init <- PlatformP.InitL2;
!
! PMICM.chargeMonitorTimer -> TimerMilliC;
! PMICM.PMICGPIO -> HplPXA27xGPIOC.HplPXA27xGPIOPin[1];
! PMICM.PI2C -> HplPXA27xPI2CC.I2C;
! PMICM.PlatformReset -> PlatformP.PlatformReset;
!
! }
--- 1,95 ----
! /* $Id$ */
! /*
! * Copyright (c) 2005 Arched 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 Arched 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.
! */
! /* tab:4
! * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By
! * downloading, copying, installing or using the software you agree to
! * this license. If you do not agree to this license, do not download,
! * install, copy or use the software.
! *
! * Intel Open Source License
! *
! * Copyright (c) 2002 Intel 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 Intel 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 INTEL 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.
! *
! *
! */
! /*
! *
! * Authors: Lama Nachman, Robert Adler
! */
! configuration PMICC{
! provides{
! interface Init;
! interface PMIC;
! }
! }
!
! implementation{
! components PMICM;
! components new TimerMilliC();
! components HplPXA27xPI2CC, HplPXA27xGPIOC;
! components PlatformP;
!
! Init = PMICM;
! PMIC = PMICM;
!
! PMICM.Init <- PlatformP.InitL2;
!
! PMICM.chargeMonitorTimer -> TimerMilliC;
! PMICM.PMICGPIO -> HplPXA27xGPIOC.HplPXA27xGPIOPin[1];
! PMICM.PI2C -> HplPXA27xPI2CC.I2C;
! PMICM.PlatformReset -> PlatformP.PlatformReset;
!
! }
Index: PMIC.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/platforms/intelmote2/chips/da9030/PMIC.nc,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** PMIC.nc 12 Jul 2006 17:02:48 -0000 1.2
--- PMIC.nc 11 Jun 2008 00:42:14 -0000 1.3
***************
*** 1,58 ****
! /* tab:4
! * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By
! * downloading, copying, installing or using the software you agree to
! * this license. If you do not agree to this license, do not download,
! * install, copy or use the software.
! *
! * Intel Open Source License
! *
! * Copyright (c) 2002 Intel 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 Intel 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 INTEL 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.
! *
! */
!
! /*
! *
! * Authors: Lama Nachman, Robert Adler
! */
!
! interface PMIC {
! /*
! * Set the voltage of the regulator controling the core
! *
! * @param core voltage specified in one of the supported trim values
! *
! * @return none
! */
! command error_t setCoreVoltage(uint8_t trimValue);
! command error_t shutDownLDOs();
!
! command error_t getBatteryVoltage(uint8_t *val);
! command error_t enableAutoCharging(bool enable);
! command error_t enableManualCharging(bool enable);
! command error_t chargingStatus(uint8_t *vBat, uint8_t *vChg, uint8_t *iChg);
! }
--- 1,58 ----
! /* tab:4
! * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By
! * downloading, copying, installing or using the software you agree to
! * this license. If you do not agree to this license, do not download,
! * install, copy or use the software.
! *
! * Intel Open Source License
! *
! * Copyright (c) 2002 Intel 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 Intel 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 INTEL 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.
! *
! */
!
! /*
! *
! * Authors: Lama Nachman, Robert Adler
! */
!
! interface PMIC {
! /*
! * Set the voltage of the regulator controling the core
! *
! * @param core voltage specified in one of the supported trim values
! *
! * @return none
! */
! command error_t setCoreVoltage(uint8_t trimValue);
! command error_t shutDownLDOs();
!
! command error_t getBatteryVoltage(uint8_t *val);
! command error_t enableAutoCharging(bool enable);
! command error_t enableManualCharging(bool enable);
! command error_t chargingStatus(uint8_t *vBat, uint8_t *vChg, uint8_t *iChg);
! }
Index: PMICM.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tos/platforms/intelmote2/chips/da9030/PMICM.nc,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** PMICM.nc 27 May 2008 17:51:54 -0000 1.5
--- PMICM.nc 11 Jun 2008 00:42:14 -0000 1.6
***************
*** 1,419 ****
! /* $Id$ */
! /*
! * Copyright (c) 2005 Arched 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 Arched 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.
! */
! /* tab:4
! * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By
! * downloading, copying, installing or using the software you agree to
! * this license. If you do not agree to this license, do not download,
! * install, copy or use the software.
! *
! * Intel Open Source License
! *
! * Copyright (c) 2002 Intel 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 Intel 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 INTEL 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.
! *
! *
! */
!
! /*
! *
! * Authors: Lama Nachman, Robert Adler
! */
!
! #define START_RADIO_LDO 1
! #define START_SENSOR_BOARD_LDO 1
! /*
! * VCC_MEM is connected to BUCK2 by default, make sure you have a board
! * that has the right resistor settings before disabling BUCK2
! */
! #define DISABLE_BUCK2 0
!
! //#include "trace.h"
! #include "Timer.h"
! #include "pmic.h"
!
! module PMICM {
! provides{
! interface Init;
! interface PMIC;
! }
!
! uses interface Timer<TMilli> as chargeMonitorTimer;
! uses interface HplPXA27xGPIOPin as PMICGPIO;
! uses interface HplPXA27xI2C as PI2C;
! uses interface PlatformReset;
! }
!
! implementation {
! #include "pmic.h"
!
! bool gotReset;
!
!
! error_t readPMIC(uint8_t address, uint8_t *value, uint8_t numBytes){
! //send the PMIC the address that we want to read
! if(numBytes > 0){
! call PI2C.setIDBR(PMIC_SLAVE_ADDR<<1);
! call PI2C.setICR(call PI2C.getICR() | ICR_START);
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
!
! //actually send the address terminated with a STOP
! call PI2C.setIDBR(address);
! call PI2C.setICR(call PI2C.getICR() & ~ICR_START);
! call PI2C.setICR(call PI2C.getICR() | ICR_STOP);
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
! call PI2C.setICR(call PI2C.getICR() & ~ICR_STOP);
!
! //actually request the read of the data
! call PI2C.setIDBR(PMIC_SLAVE_ADDR<<1 | 1);
! call PI2C.setICR(call PI2C.getICR() | ICR_START);
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
! call PI2C.setICR(call PI2C.getICR() & ~ICR_START);
!
! //using Page Read Mode
! while (numBytes > 1){
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
! *value = call PI2C.getIDBR();
! value++;
! numBytes--;
! }
!
! call PI2C.setICR(call PI2C.getICR() | ICR_STOP);
! call PI2C.setICR(call PI2C.getICR() | ICR_ACKNAK);
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
! *value = call PI2C.getIDBR();
! call PI2C.setICR(call PI2C.getICR() & ~ICR_STOP);
! call PI2C.setICR(call PI2C.getICR() & ~ICR_ACKNAK);
!
! return SUCCESS;
! }
! else{
! return FAIL;
! }
! }
!
! error_t writePMIC(uint8_t address, uint8_t value){
! call PI2C.setIDBR(PMIC_SLAVE_ADDR<<1);
! call PI2C.setICR(call PI2C.getICR() | ICR_START);
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
!
! PIDBR = address;
! call PI2C.setICR(call PI2C.getICR() & ~ICR_START);
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
!
! PIDBR = value;
! call PI2C.setICR(call PI2C.getICR() | ICR_STOP);
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
! call PI2C.setICR(call PI2C.getICR() & ~ICR_STOP); PICR &= ~ICR_STOP;
!
! return SUCCESS;
! }
!
! void startLDOs() {
! //uint8_t temp;
! uint8_t oldVal, newVal;
!
! #if START_SENSOR_BOARD_LDO
! // TODO : Need to move out of here to sensor board functions
! readPMIC(PMIC_A_REG_CONTROL_1, &oldVal, 1);
! newVal = oldVal | ARC1_LDO10_EN | ARC1_LDO11_EN; // sensor board
! writePMIC(PMIC_A_REG_CONTROL_1, newVal);
!
! readPMIC(PMIC_B_REG_CONTROL_2, &oldVal, 1);
! newVal = oldVal | BRC2_LDO10_EN | BRC2_LDO11_EN;
! writePMIC(PMIC_B_REG_CONTROL_2, newVal);
! #endif
!
! #if START_RADIO_LDO
! // TODO : Move to radio start
! readPMIC(PMIC_B_REG_CONTROL_1, &oldVal, 1);
! newVal = oldVal | BRC1_LDO5_EN;
! writePMIC(PMIC_B_REG_CONTROL_1, newVal);
! #endif
!
! #if DISABLE_BUCK2 // Disable BUCK2 if VCC_MEM is not configured to use BUCK2
! readPMIC(PMIC_B_REG_CONTROL_1, &oldVal, 1);
! newVal = oldVal & ~BRC1_BUCK_EN;
! writePMIC(PMIC_B_REG_CONTROL_1, newVal);
! #endif
!
! #if 0
! // Configure above LDOs, Radio and sensor board LDOs to turn off in sleep
! // TODO : Sleep setting doesn't work
! temp = BSC1_LDO1(1) | BSC1_LDO2(1) | BSC1_LDO3(1) | BSC1_LDO4(1);
! writePMIC(PMIC_B_SLEEP_CONTROL_1, temp);
! temp = BSC2_LDO5(1) | BSC2_LDO7(1) | BSC2_LDO8(1) | BSC2_LDO9(1);
! writePMIC(PMIC_B_SLEEP_CONTROL_2, temp);
! temp = BSC3_LDO12(1);
! writePMIC(PMIC_B_SLEEP_CONTROL_3, temp);
! #endif
! }
!
! error_t startPMICstuff() {
! //command result_t StdControl.start(){ XXX-pb
! //init unit
! uint8_t val[3];
! //call PI2CInterrupt.enable(); XXX-pb
!
! }
!
! command error_t Init.init(){
! uint8_t val[3];
! PCFR |= PCFR_PI2C_EN; // Overrides GPIO settings on pins
! call PI2C.setICR(call PI2C.getICR() | (ICR_IUE | ICR_SCLE));
! atomic{
! gotReset=FALSE;
! }
!
! call PMICGPIO.setGAFRpin(0);
! call PMICGPIO.setGPDRbit(FALSE);
! call PMICGPIO.setGFERbit(TRUE);
! /*
! * Reset the watchdog, switch it to an interrupt, so we can disable it
! * Ignore SLEEP_N pin, enable H/W reset via button
! */
! writePMIC(PMIC_SYS_CONTROL_A,
! SCA_RESET_WDOG | SCA_WDOG_ACTION | SCA_HWRES_EN);
!
! // Disable all interrupts from PMIC except for ONKEY button
! writePMIC(PMIC_IRQ_MASK_A, ~IMA_ONKEY_N);
! writePMIC(PMIC_IRQ_MASK_B, 0xFF);
! writePMIC(PMIC_IRQ_MASK_C, 0xFF);
!
! //read out the EVENT registers so that we can receive interrupts
! readPMIC(PMIC_EVENTS, val, 3);
!
! // Set default core voltage to 0.85 V
! #ifdef PXA27X_13M
! //P85 is not reliable, using P95
! call PMIC.setCoreVoltage(B2R1_TRIM_P95_V);
! #else
! call PMIC.setCoreVoltage(B2R1_TRIM_1_25_V);
! #endif
! startLDOs();
! return SUCCESS;
! }
!
! async event void PI2C.interruptI2C() { //PI2CInterrupt.fired(){
! uint32_t status, update=0;
! status = call PI2C.getISR(); //PISR;
! if(status & ISR_ITE){
! update |= ISR_ITE;
! //trace(DBG_USR1,"sent data");
! }
!
! if(status & ISR_BED){
! update |= ISR_BED;
! //trace(DBG_USR1,"bus error");
! }
! call PI2C.setISAR(update); //PISR = update;
! }
!
! async event void PMICGPIO.interruptGPIOPin(){
! uint8_t events[3];
! bool localGotReset;
!
! //call PMICGPIO.call PMICInterrupt.clear(); XXX autocleard by GPIO module
!
! readPMIC(PMIC_EVENTS, events, 3);
!
! if(events[EVENTS_A_OFFSET] & EA_ONKEY_N){
! atomic{
! localGotReset = gotReset;
! }
! if(localGotReset==TRUE){
! call PlatformReset.reset();
! }
! else{
! atomic{
! gotReset=TRUE;
! }
! }
! }
! else{
! //trace(DBG_USR1,"PMIC EVENTs =%#x %#x %#x\r\n",events[0], events[1], events[2]);
! }
! }
!
! /*
! * The Buck2 controls the core voltage, set to appropriate trim value
! */
! command error_t PMIC.setCoreVoltage(uint8_t trimValue) {
! writePMIC(PMIC_BUCK2_REG1, (trimValue & B2R1_TRIM_MASK) | B2R1_GO);
! return SUCCESS;
! }
!
! command error_t PMIC.shutDownLDOs() {
! uint8_t temp;
! uint8_t oldVal, newVal;
! /*
! * Shut down all LDOs that are not controlled by the sleep mode
! * Note, we assume here the LDO10 & LDO11 (sensor board) will be off
! * Should be moved to sensor board control
! */
!
! // LDO1, LDO4, LDO6, LDO7, LDO8, LDO9, LDO10, LDO 11, LDO13, LDO14
!
! readPMIC(PMIC_A_REG_CONTROL_1, &oldVal, 1);
! newVal = oldVal & ~ARC1_LDO13_EN & ~ARC1_LDO14_EN;
! newVal = newVal & ~ARC1_LDO10_EN & ~ARC1_LDO11_EN; // sensor board
! writePMIC(PMIC_A_REG_CONTROL_1, newVal);
!
! readPMIC(PMIC_B_REG_CONTROL_1, &oldVal, 1);
! newVal = oldVal & ~BRC1_LDO1_EN & ~BRC1_LDO4_EN & ~BRC1_LDO5_EN &
! ~BRC1_LDO6_EN & ~BRC1_LDO7_EN;
! writePMIC(PMIC_B_REG_CONTROL_1, newVal);
!
! readPMIC(PMIC_B_REG_CONTROL_2, &oldVal, 1);
! newVal = oldVal & ~BRC2_LDO8_EN & ~BRC2_LDO9_EN & ~BRC2_LDO10_EN &
! ~BRC2_LDO11_EN & ~BRC2_LDO14_EN & ~BRC2_SIMCP_EN;
! writePMIC(PMIC_B_REG_CONTROL_2, newVal);
!
! return SUCCESS;
! }
!
! error_t getPMICADCVal(uint8_t channel, uint8_t *val){
! uint8_t oldval;
! error_t rval;
!
! //read out the old value so that we can reset at the end
! rval = readPMIC(PMIC_ADC_MAN_CONTROL, &oldval,1);
! if (rval == SUCCESS) {
! rval = writePMIC(PMIC_ADC_MAN_CONTROL, PMIC_AMC_ADCMUX(channel) |
! PMIC_AMC_MAN_CONV | PMIC_AMC_LDO_INT_Enable);
! }
! if (rval == SUCCESS) {
! rval = readPMIC(PMIC_MAN_RES,val,1);
! }
! if (rval == SUCCESS) {
! //reset to old state
! rval = writePMIC(PMIC_ADC_MAN_CONTROL, oldval);
! }
!
! return rval;
! }
!
! command error_t PMIC.getBatteryVoltage(uint8_t *val){
! //for now, let's use the manual conversion mode
! return getPMICADCVal(0, val);
! }
!
! command error_t PMIC.chargingStatus(uint8_t *vBat, uint8_t *vChg,
! uint8_t *iChg){
! getPMICADCVal(0, vBat);
! getPMICADCVal(2, vChg);
! getPMICADCVal(1, iChg);
! return SUCCESS;
! }
!
! command error_t PMIC.enableAutoCharging(bool enable){
! return SUCCESS;
! }
!
! command error_t PMIC.enableManualCharging(bool enable){
! //just turn on or off the LED for now!!
! uint8_t val;
!
! if(enable){
! //want to turn on the charger
! getPMICADCVal(2, &val);
! //if charger is present due some stuff...75 should be 4.65V or so
! if(val > 75 ) {
! //trace(DBG_USR1,"Charger Voltage is %.3fV...enabling charger...\r\n", ((val*6) * .01035));
! //write the total timeout to be 8 hours
! writePMIC(PMIC_TCTR_CONTROL,8);
! //enable the charger at 100mA and 4.35V
! writePMIC(PMIC_CHARGE_CONTROL,PMIC_CC_CHARGE_ENABLE | PMIC_CC_ISET(1) | PMIC_CC_VSET(7));
! //turn on the LED
! writePMIC(PMIC_LED1_CONTROL,0x80);
! //start a timer to monitor our progress every 5 minutes!
! call chargeMonitorTimer.startPeriodic(300000);
! }
! else{
! //trace(DBG_USR1,"Charger Voltage is %.3fV...charger not enabled\r\n", ((val*6) * .01035));
! }
! }
! else{
! //turn off the charger and the LED
! call PMIC.getBatteryVoltage(&val);
! //trace(DBG_USR1,"Disabling Charger...Battery Voltage is %.3fV\r\n", (val * .01035) + 2.65);
! //disable everything that we enabled
! writePMIC(PMIC_TCTR_CONTROL,0);
! writePMIC(PMIC_CHARGE_CONTROL,0);
! writePMIC(PMIC_LED1_CONTROL,0x00);
! }
! return SUCCESS;
! }
!
! event void chargeMonitorTimer.fired(){
! uint8_t val;
! call PMIC.getBatteryVoltage(&val);
! //stop when vBat>4V
! if(val>130){
! call PMIC.enableManualCharging(FALSE);
! call chargeMonitorTimer.stop();
! }
! return;
! }
!
!
! }
--- 1,419 ----
! /* $Id$ */
! /*
! * Copyright (c) 2005 Arched 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 Arched 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.
! */
! /* tab:4
! * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By
! * downloading, copying, installing or using the software you agree to
! * this license. If you do not agree to this license, do not download,
! * install, copy or use the software.
! *
! * Intel Open Source License
! *
! * Copyright (c) 2002 Intel 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 Intel 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 INTEL 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.
! *
! *
! */
!
! /*
! *
! * Authors: Lama Nachman, Robert Adler
! */
!
! #define START_RADIO_LDO 1
! #define START_SENSOR_BOARD_LDO 1
! /*
! * VCC_MEM is connected to BUCK2 by default, make sure you have a board
! * that has the right resistor settings before disabling BUCK2
! */
! #define DISABLE_BUCK2 0
!
! //#include "trace.h"
! #include "Timer.h"
! #include "pmic.h"
!
! module PMICM {
! provides{
! interface Init;
! interface PMIC;
! }
!
! uses interface Timer<TMilli> as chargeMonitorTimer;
! uses interface HplPXA27xGPIOPin as PMICGPIO;
! uses interface HplPXA27xI2C as PI2C;
! uses interface PlatformReset;
! }
!
! implementation {
! #include "pmic.h"
!
! bool gotReset;
!
!
! error_t readPMIC(uint8_t address, uint8_t *value, uint8_t numBytes){
! //send the PMIC the address that we want to read
! if(numBytes > 0){
! call PI2C.setIDBR(PMIC_SLAVE_ADDR<<1);
! call PI2C.setICR(call PI2C.getICR() | ICR_START);
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
!
! //actually send the address terminated with a STOP
! call PI2C.setIDBR(address);
! call PI2C.setICR(call PI2C.getICR() & ~ICR_START);
! call PI2C.setICR(call PI2C.getICR() | ICR_STOP);
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
! call PI2C.setICR(call PI2C.getICR() & ~ICR_STOP);
!
! //actually request the read of the data
! call PI2C.setIDBR(PMIC_SLAVE_ADDR<<1 | 1);
! call PI2C.setICR(call PI2C.getICR() | ICR_START);
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
! call PI2C.setICR(call PI2C.getICR() & ~ICR_START);
!
! //using Page Read Mode
! while (numBytes > 1){
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
! *value = call PI2C.getIDBR();
! value++;
! numBytes--;
! }
!
! call PI2C.setICR(call PI2C.getICR() | ICR_STOP);
! call PI2C.setICR(call PI2C.getICR() | ICR_ACKNAK);
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
! *value = call PI2C.getIDBR();
! call PI2C.setICR(call PI2C.getICR() & ~ICR_STOP);
! call PI2C.setICR(call PI2C.getICR() & ~ICR_ACKNAK);
!
! return SUCCESS;
! }
! else{
! return FAIL;
! }
! }
!
! error_t writePMIC(uint8_t address, uint8_t value){
! call PI2C.setIDBR(PMIC_SLAVE_ADDR<<1);
! call PI2C.setICR(call PI2C.getICR() | ICR_START);
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
!
! PIDBR = address;
! call PI2C.setICR(call PI2C.getICR() & ~ICR_START);
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
!
! PIDBR = value;
! call PI2C.setICR(call PI2C.getICR() | ICR_STOP);
! call PI2C.setICR(call PI2C.getICR() | ICR_TB);
! while(call PI2C.getICR() & ICR_TB);
! call PI2C.setICR(call PI2C.getICR() & ~ICR_STOP); PICR &= ~ICR_STOP;
!
! return SUCCESS;
! }
!
! void startLDOs() {
! //uint8_t temp;
! uint8_t oldVal, newVal;
!
! #if START_SENSOR_BOARD_LDO
! // TODO : Need to move out of here to sensor board functions
! readPMIC(PMIC_A_REG_CONTROL_1, &oldVal, 1);
! newVal = oldVal | ARC1_LDO10_EN | ARC1_LDO11_EN; // sensor board
! writePMIC(PMIC_A_REG_CONTROL_1, newVal);
!
! readPMIC(PMIC_B_REG_CONTROL_2, &oldVal, 1);
! newVal = oldVal | BRC2_LDO10_EN | BRC2_LDO11_EN;
! writePMIC(PMIC_B_REG_CONTROL_2, newVal);
! #endif
!
! #if START_RADIO_LDO
! // TODO : Move to radio start
! readPMIC(PMIC_B_REG_CONTROL_1, &oldVal, 1);
! newVal = oldVal | BRC1_LDO5_EN;
! writePMIC(PMIC_B_REG_CONTROL_1, newVal);
! #endif
!
! #if DISABLE_BUCK2 // Disable BUCK2 if VCC_MEM is not configured to use BUCK2
! readPMIC(PMIC_B_REG_CONTROL_1, &oldVal, 1);
! newVal = oldVal & ~BRC1_BUCK_EN;
! writePMIC(PMIC_B_REG_CONTROL_1, newVal);
! #endif
!
! #if 0
! // Configure above LDOs, Radio and sensor board LDOs to turn off in sleep
! // TODO : Sleep setting doesn't work
! temp = BSC1_LDO1(1) | BSC1_LDO2(1) | BSC1_LDO3(1) | BSC1_LDO4(1);
! writePMIC(PMIC_B_SLEEP_CONTROL_1, temp);
! temp = BSC2_LDO5(1) | BSC2_LDO7(1) | BSC2_LDO8(1) | BSC2_LDO9(1);
! writePMIC(PMIC_B_SLEEP_CONTROL_2, temp);
! temp = BSC3_LDO12(1);
! writePMIC(PMIC_B_SLEEP_CONTROL_3, temp);
! #endif
! }
!
! error_t startPMICstuff() {
! //command result_t StdControl.start(){ XXX-pb
! //init unit
! uint8_t val[3];
! //call PI2CInterrupt.enable(); XXX-pb
!
! }
!
! command error_t Init.init(){
! uint8_t val[3];
! PCFR |= PCFR_PI2C_EN; // Overrides GPIO settings on pins
! call PI2C.setICR(call PI2C.getICR() | (ICR_IUE | ICR_SCLE));
! atomic{
! gotReset=FALSE;
! }
!
! call PMICGPIO.setGAFRpin(0);
! call PMICGPIO.setGPDRbit(FALSE);
! call PMICGPIO.setGFERbit(TRUE);
! /*
! * Reset the watchdog, switch it to an interrupt, so we can disable it
! * Ignore SLEEP_N pin, enable H/W reset via button
! */
! writePMIC(PMIC_SYS_CONTROL_A,
! SCA_RESET_WDOG | SCA_WDOG_ACTION | SCA_HWRES_EN);
!
! // Disable all interrupts from PMIC except for ONKEY button
! writePMIC(PMIC_IRQ_MASK_A, ~IMA_ONKEY_N);
! writePMIC(PMIC_IRQ_MASK_B, 0xFF);
! writePMIC(PMIC_IRQ_MASK_C, 0xFF);
!
! //read out the EVENT registers so that we can receive interrupts
! readPMIC(PMIC_EVENTS, val, 3);
!
! // Set default core voltage to 0.85 V
! #ifdef PXA27X_13M
! //P85 is not reliable, using P95
! call PMIC.setCoreVoltage(B2R1_TRIM_P95_V);
! #else
! call PMIC.setCoreVoltage(B2R1_TRIM_1_25_V);
! #endif
! startLDOs();
! return SUCCESS;
! }
!
! async event void PI2C.interruptI2C() { //PI2CInterrupt.fired(){
! uint32_t status, update=0;
! status = call PI2C.getISR(); //PISR;
! if(status & ISR_ITE){
! update |= ISR_ITE;
! //trace(DBG_USR1,"sent data");
! }
!
! if(status & ISR_BED){
! update |= ISR_BED;
! //trace(DBG_USR1,"bus error");
! }
! call PI2C.setISAR(update); //PISR = update;
! }
!
! async event void PMICGPIO.interruptGPIOPin(){
! uint8_t events[3];
! bool localGotReset;
!
! //call PMICGPIO.call PMICInterrupt.clear(); XXX autocleard by GPIO module
!
! readPMIC(PMIC_EVENTS, events, 3);
!
! if(events[EVENTS_A_OFFSET] & EA_ONKEY_N){
! atomic{
! localGotReset = gotReset;
! }
! if(localGotReset==TRUE){
! call PlatformReset.reset();
! }
! else{
! atomic{
! gotReset=TRUE;
! }
! }
! }
! else{
! //trace(DBG_USR1,"PMIC EVENTs =%#x %#x %#x\r\n",events[0], events[1], events[2]);
! }
! }
!
! /*
! * The Buck2 controls the core voltage, set to appropriate trim value
! */
! command error_t PMIC.setCoreVoltage(uint8_t trimValue) {
! writePMIC(PMIC_BUCK2_REG1, (trimValue & B2R1_TRIM_MASK) | B2R1_GO);
! return SUCCESS;
! }
!
! command error_t PMIC.shutDownLDOs() {
! uint8_t temp;
! uint8_t oldVal, newVal;
! /*
! * Shut down all LDOs that are not controlled by the sleep mode
! * Note, we assume here the LDO10 & LDO11 (sensor board) will be off
! * Should be moved to sensor board control
! */
!
! // LDO1, LDO4, LDO6, LDO7, LDO8, LDO9, LDO10, LDO 11, LDO13, LDO14
!
! readPMIC(PMIC_A_REG_CONTROL_1, &oldVal, 1);
! newVal = oldVal & ~ARC1_LDO13_EN & ~ARC1_LDO14_EN;
! newVal = newVal & ~ARC1_LDO10_EN & ~ARC1_LDO11_EN; // sensor board
! writePMIC(PMIC_A_REG_CONTROL_1, newVal);
!
! readPMIC(PMIC_B_REG_CONTROL_1, &oldVal, 1);
! newVal = oldVal & ~BRC1_LDO1_EN & ~BRC1_LDO4_EN & ~BRC1_LDO5_EN &
! ~BRC1_LDO6_EN & ~BRC1_LDO7_EN;
! writePMIC(PMIC_B_REG_CONTROL_1, newVal);
!
! readPMIC(PMIC_B_REG_CONTROL_2, &oldVal, 1);
! newVal = oldVal & ~BRC2_LDO8_EN & ~BRC2_LDO9_EN & ~BRC2_LDO10_EN &
! ~BRC2_LDO11_EN & ~BRC2_LDO14_EN & ~BRC2_SIMCP_EN;
! writePMIC(PMIC_B_REG_CONTROL_2, newVal);
!
! return SUCCESS;
! }
!
! error_t getPMICADCVal(uint8_t channel, uint8_t *val){
! uint8_t oldval;
! error_t rval;
!
! //read out the old value so that we can reset at the end
! rval = readPMIC(PMIC_ADC_MAN_CONTROL, &oldval,1);
! if (rval == SUCCESS) {
! rval = writePMIC(PMIC_ADC_MAN_CONTROL, PMIC_AMC_ADCMUX(channel) |
! PMIC_AMC_MAN_CONV | PMIC_AMC_LDO_INT_Enable);
! }
! if (rval == SUCCESS) {
! rval = readPMIC(PMIC_MAN_RES,val,1);
! }
! if (rval == SUCCESS) {
! //reset to old state
! rval = writePMIC(PMIC_ADC_MAN_CONTROL, oldval);
! }
!
! return rval;
! }
!
! command error_t PMIC.getBatteryVoltage(uint8_t *val){
! //for now, let's use the manual conversion mode
! return getPMICADCVal(0, val);
! }
!
! command error_t PMIC.chargingStatus(uint8_t *vBat, uint8_t *vChg,
! uint8_t *iChg){
! getPMICADCVal(0, vBat);
! getPMICADCVal(2, vChg);
! getPMICADCVal(1, iChg);
! return SUCCESS;
! }
!
! command error_t PMIC.enableAutoCharging(bool enable){
! return SUCCESS;
! }
!
! command error_t PMIC.enableManualCharging(bool enable){
! //just turn on or off the LED for now!!
! uint8_t val;
!
! if(enable){
! //want to turn on the charger
! getPMICADCVal(2, &val);
! //if charger is present due some stuff...75 should be 4.65V or so
! if(val > 75 ) {
! //trace(DBG_USR1,"Charger Voltage is %.3fV...enabling charger...\r\n", ((val*6) * .01035));
! //write the total timeout to be 8 hours
! writePMIC(PMIC_TCTR_CONTROL,8);
! //enable the charger at 100mA and 4.35V
! writePMIC(PMIC_CHARGE_CONTROL,PMIC_CC_CHARGE_ENABLE | PMIC_CC_ISET(1) | PMIC_CC_VSET(7));
! //turn on the LED
! writePMIC(PMIC_LED1_CONTROL,0x80);
! //start a timer to monitor our progress every 5 minutes!
! call chargeMonitorTimer.startPeriodic(300000);
! }
! else{
! //trace(DBG_USR1,"Charger Voltage is %.3fV...charger not enabled\r\n", ((val*6) * .01035));
! }
! }
! else{
! //turn off the charger and the LED
! call PMIC.getBatteryVoltage(&val);
! //trace(DBG_USR1,"Disabling Charger...Battery Voltage is %.3fV\r\n", (val * .01035) + 2.65);
! //disable everything that we enabled
! writePMIC(PMIC_TCTR_CONTROL,0);
! writePMIC(PMIC_CHARGE_CONTROL,0);
! writePMIC(PMIC_LED1_CONTROL,0x00);
! }
! return SUCCESS;
! }
!
! event void chargeMonitorTimer.fired(){
! uint8_t val;
! call PMIC.getBatteryVoltage(&val);
! //stop when vBat>4V
! if(val>130){
! call PMIC.enableManualCharging(FALSE);
! call chargeMonitorTimer.stop();
! }
! return;
! }
!
!
! }
- Previous message: [Tinyos-2-commits] CVS: tinyos-2.x/tos/chips/pxa27x/i2c HalPXA27xI2CMasterP.nc, 1.4, 1.5 HplPXA27xI2CP.nc, 1.4, 1.5 HplPXA27xPI2CC.nc, 1.4, 1.5 HalPXA27xI2CMasterC.nc, 1.4, 1.5 HplPXA27xI2CC.nc, 1.4, 1.5 HplPXA27xI2C.nc, 1.4, 1.5
- Next message: [Tinyos-2-commits] CVS: tinyos-2.x/tos/platforms/mica VoltageP.nc, 1.2, 1.3 VoltageC.nc, 1.2, 1.3
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Tinyos-2-commits
mailing list