summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-08-20 13:23:34 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-08-20 13:23:34 +0000
commit7acd0fe5cf0c8d2e913219b27bc95049d50cf2c6 (patch)
tree8340824d2330d94b8f8761b85977f6d1f701cb1d
parentb9a5d949c91f2732e72b393b4a261091804c7da7 (diff)
downloadnuttx-7acd0fe5cf0c8d2e913219b27bc95049d50cf2c6.tar.gz
nuttx-7acd0fe5cf0c8d2e913219b27bc95049d50cf2c6.tar.bz2
nuttx-7acd0fe5cf0c8d2e913219b27bc95049d50cf2c6.zip
Add Uros' RCC actitivity counter to STM32 idle loop
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3900 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/Make.defs3
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/chip.h0
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/chip/stm32_flash.h0
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/stm32_adc.h0
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/stm32_dma.c0
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/stm32_flash.h0
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/stm32_gpio.c0
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/stm32_i2c.h0
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/stm32_idle.c15
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/stm32_internal.h0
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/stm32_rcc.c56
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/stm32_rcc.h0
-rw-r--r--nuttx/arch/arm/src/stm32/stm32_rcclock.c111
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/stm32_sdio.h0
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/stm32_spi.c0
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/stm32_spi.h0
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/stm32_uart.h0
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/stm32_waste.c0
-rw-r--r--[-rwxr-xr-x]nuttx/arch/arm/src/stm32/stm32_waste.h0
19 files changed, 131 insertions, 54 deletions
diff --git a/nuttx/arch/arm/src/stm32/Make.defs b/nuttx/arch/arm/src/stm32/Make.defs
index 1a9693472..47820afcc 100755..100644
--- a/nuttx/arch/arm/src/stm32/Make.defs
+++ b/nuttx/arch/arm/src/stm32/Make.defs
@@ -51,3 +51,6 @@ CHIP_CSRCS = stm32_start.c stm32_rcc.c stm32_gpio.c stm32_flash.c \
stm32_tim.c stm32_i2c.c stm32_pwr.c stm32_rtc.c \
stm32_idle.c stm32_waste.c
+ifeq ($(CONFIG_STM32_RCCLOCK),y)
+CHIP_CSRCS += stm32_rcclock.c
+endif
diff --git a/nuttx/arch/arm/src/stm32/chip.h b/nuttx/arch/arm/src/stm32/chip.h
index 23670cf10..23670cf10 100755..100644
--- a/nuttx/arch/arm/src/stm32/chip.h
+++ b/nuttx/arch/arm/src/stm32/chip.h
diff --git a/nuttx/arch/arm/src/stm32/chip/stm32_flash.h b/nuttx/arch/arm/src/stm32/chip/stm32_flash.h
index 018d3e8ab..018d3e8ab 100755..100644
--- a/nuttx/arch/arm/src/stm32/chip/stm32_flash.h
+++ b/nuttx/arch/arm/src/stm32/chip/stm32_flash.h
diff --git a/nuttx/arch/arm/src/stm32/stm32_adc.h b/nuttx/arch/arm/src/stm32/stm32_adc.h
index 9b80cb1b2..9b80cb1b2 100755..100644
--- a/nuttx/arch/arm/src/stm32/stm32_adc.h
+++ b/nuttx/arch/arm/src/stm32/stm32_adc.h
diff --git a/nuttx/arch/arm/src/stm32/stm32_dma.c b/nuttx/arch/arm/src/stm32/stm32_dma.c
index 77d626127..77d626127 100755..100644
--- a/nuttx/arch/arm/src/stm32/stm32_dma.c
+++ b/nuttx/arch/arm/src/stm32/stm32_dma.c
diff --git a/nuttx/arch/arm/src/stm32/stm32_flash.h b/nuttx/arch/arm/src/stm32/stm32_flash.h
index 6f286bf2c..6f286bf2c 100755..100644
--- a/nuttx/arch/arm/src/stm32/stm32_flash.h
+++ b/nuttx/arch/arm/src/stm32/stm32_flash.h
diff --git a/nuttx/arch/arm/src/stm32/stm32_gpio.c b/nuttx/arch/arm/src/stm32/stm32_gpio.c
index 80a24b12e..80a24b12e 100755..100644
--- a/nuttx/arch/arm/src/stm32/stm32_gpio.c
+++ b/nuttx/arch/arm/src/stm32/stm32_gpio.c
diff --git a/nuttx/arch/arm/src/stm32/stm32_i2c.h b/nuttx/arch/arm/src/stm32/stm32_i2c.h
index 23a06bc05..23a06bc05 100755..100644
--- a/nuttx/arch/arm/src/stm32/stm32_i2c.h
+++ b/nuttx/arch/arm/src/stm32/stm32_i2c.h
diff --git a/nuttx/arch/arm/src/stm32/stm32_idle.c b/nuttx/arch/arm/src/stm32/stm32_idle.c
index 3d999bcff..0919265ff 100755..100644
--- a/nuttx/arch/arm/src/stm32/stm32_idle.c
+++ b/nuttx/arch/arm/src/stm32/stm32_idle.c
@@ -42,6 +42,7 @@
#include <nuttx/arch.h>
#include "up_internal.h"
+#include "stm32_rcc.h"
/****************************************************************************
* Pre-processor Definitions
@@ -94,6 +95,20 @@ void up_idle(void)
sched_process_timer();
#else
+#ifdef CONFIG_STM32_RCCLOCK
+
+ /* Decide, which power saving level can be obtained */
+
+ if (stm32_getrccactivity())
+ {
+ /* Sleep mode */
+ }
+ else
+ {
+ /* Stop mode */
+ }
+#endif
+
/* Sleep until an interrupt occurs to save power */
BEGIN_IDLE();
diff --git a/nuttx/arch/arm/src/stm32/stm32_internal.h b/nuttx/arch/arm/src/stm32/stm32_internal.h
index 0c1792230..0c1792230 100755..100644
--- a/nuttx/arch/arm/src/stm32/stm32_internal.h
+++ b/nuttx/arch/arm/src/stm32/stm32_internal.h
diff --git a/nuttx/arch/arm/src/stm32/stm32_rcc.c b/nuttx/arch/arm/src/stm32/stm32_rcc.c
index a9155f1a2..e0db104cc 100755..100644
--- a/nuttx/arch/arm/src/stm32/stm32_rcc.c
+++ b/nuttx/arch/arm/src/stm32/stm32_rcc.c
@@ -63,18 +63,6 @@
* Private Data
****************************************************************************/
-/* Activity reference count, showing inactivity after start-up.
- * Device drivers increment this count using rcclock() and rccunlock()
- *
- * If this value goes beyond the range [0, MAX_RCCs] indicates
- * reference count leakage (asymetric number of locks vs. unlocks) and
- * system enters permanent active state.
- */
-
-#ifdef CONFIG_STM32_RCCLOCK
-static int stm32_rcclock_count = 0;
-#endif
-
/****************************************************************************
* Private Functions
****************************************************************************/
@@ -491,7 +479,7 @@ void stm32_clockconfig(void)
/* Make sure that we are starting in the reset state */
rcc_reset();
-
+
#if defined(CONFIG_ARCH_BOARD_STM32_CUSTOM_CLOCKCONFIG)
/* Invoke Board Custom Clock Configuration */
@@ -507,7 +495,7 @@ void stm32_clockconfig(void)
#endif
/* Enable peripheral clocking */
-
+
rcc_enableahb();
rcc_enableapb2();
rcc_enableapb1();
@@ -536,43 +524,3 @@ void stm32_rcc_enablelse(void)
modifyreg16(STM32_RCC_BDCR, 0, RCC_BDCR_RTCEN);
}
-
-#ifdef CONFIG_STM32_RCCLOCK
-uint32_t stm32_rcclock(uint8_t domain_id)
-{
- // THINK:
- // maybe just shift domain_id into 32-bit or 64-bit register
- // and if there value of this var != 0, we are active...
- // increment some variable, so it is possible to test leakage
- // multiple locks or multiple unlocks
-
- if (stm32_rcclock_count >= 0)
- {
- stm32_rcclock_count++;
- if (stm32_rcclock_count > 64)
- {
- stm32_rcclock_count = -1; /* capture error */
- }
- }
-
- return 0;
-}
-
-uint32_t stm32_rccunlock(uint8_t domain_id)
-{
- if (stm32_rcclock_count > -1)
- {
- stm32_rcclock_count--;
- }
- return 0;
-}
-
-uint32_t stm32_setrccoptions(uint8_t domain_id, uint32_t options)
-{
-}
-
-int stm32_getrccactivity(void)
-{
- return stm32_rcclock_count;
-}
-#endif
diff --git a/nuttx/arch/arm/src/stm32/stm32_rcc.h b/nuttx/arch/arm/src/stm32/stm32_rcc.h
index a224447a1..a224447a1 100755..100644
--- a/nuttx/arch/arm/src/stm32/stm32_rcc.h
+++ b/nuttx/arch/arm/src/stm32/stm32_rcc.h
diff --git a/nuttx/arch/arm/src/stm32/stm32_rcclock.c b/nuttx/arch/arm/src/stm32/stm32_rcclock.c
new file mode 100644
index 000000000..928e34b20
--- /dev/null
+++ b/nuttx/arch/arm/src/stm32/stm32_rcclock.c
@@ -0,0 +1,111 @@
+/****************************************************************************
+ * arch/arm/src/stm32/stm32_rcc.c
+ *
+ * Copyright (C) 2011 Uros Platise. All rights reserved.
+ * Author: Author: Uros Platise <uros.platise@isotel.eu>
+ *
+ * This file is part of NuttX:
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. 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.
+ * 3. Neither the name NuttX 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.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdint.h>
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/* Activity reference count, showing inactivity after start-up.
+ * Device drivers increment this count using rcclock() and rccunlock()
+ *
+ * If this value goes beyond the range [0, MAX_RCCs] indicates
+ * reference count leakage (asymetric number of locks vs. unlocks) and
+ * system enters permanent active state.
+ */
+
+static int stm32_rcclock_count = 0;
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+uint32_t stm32_rcclock(uint8_t domain_id)
+{
+ // THINK:
+ // maybe just shift domain_id into 32-bit or 64-bit register
+ // and if there value of this var != 0, we are active...
+ // increment some variable, so it is possible to test leakage
+ // multiple locks or multiple unlocks
+
+ if (stm32_rcclock_count >= 0)
+ {
+ stm32_rcclock_count++;
+ if (stm32_rcclock_count > 64)
+ {
+ stm32_rcclock_count = -1; /* capture error */
+ }
+ }
+
+ return 0;
+}
+
+uint32_t stm32_rccunlock(uint8_t domain_id)
+{
+ if (stm32_rcclock_count > -1)
+ {
+ stm32_rcclock_count--;
+ }
+ return 0;
+}
+
+uint32_t stm32_setrccoptions(uint8_t domain_id, uint32_t options)
+{
+ return 0;
+}
+
+int stm32_getrccactivity(void)
+{
+ return stm32_rcclock_count;
+}
diff --git a/nuttx/arch/arm/src/stm32/stm32_sdio.h b/nuttx/arch/arm/src/stm32/stm32_sdio.h
index 46fbe8a95..46fbe8a95 100755..100644
--- a/nuttx/arch/arm/src/stm32/stm32_sdio.h
+++ b/nuttx/arch/arm/src/stm32/stm32_sdio.h
diff --git a/nuttx/arch/arm/src/stm32/stm32_spi.c b/nuttx/arch/arm/src/stm32/stm32_spi.c
index b4ba555af..b4ba555af 100755..100644
--- a/nuttx/arch/arm/src/stm32/stm32_spi.c
+++ b/nuttx/arch/arm/src/stm32/stm32_spi.c
diff --git a/nuttx/arch/arm/src/stm32/stm32_spi.h b/nuttx/arch/arm/src/stm32/stm32_spi.h
index 268589bf3..268589bf3 100755..100644
--- a/nuttx/arch/arm/src/stm32/stm32_spi.h
+++ b/nuttx/arch/arm/src/stm32/stm32_spi.h
diff --git a/nuttx/arch/arm/src/stm32/stm32_uart.h b/nuttx/arch/arm/src/stm32/stm32_uart.h
index 9b478c821..9b478c821 100755..100644
--- a/nuttx/arch/arm/src/stm32/stm32_uart.h
+++ b/nuttx/arch/arm/src/stm32/stm32_uart.h
diff --git a/nuttx/arch/arm/src/stm32/stm32_waste.c b/nuttx/arch/arm/src/stm32/stm32_waste.c
index a680b8b0f..a680b8b0f 100755..100644
--- a/nuttx/arch/arm/src/stm32/stm32_waste.c
+++ b/nuttx/arch/arm/src/stm32/stm32_waste.c
diff --git a/nuttx/arch/arm/src/stm32/stm32_waste.h b/nuttx/arch/arm/src/stm32/stm32_waste.h
index 11703d5a6..11703d5a6 100755..100644
--- a/nuttx/arch/arm/src/stm32/stm32_waste.h
+++ b/nuttx/arch/arm/src/stm32/stm32_waste.h