You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by we...@apache.org on 2016/11/01 23:12:05 UTC
incubator-mynewt-core git commit: MYNEWT-401: HAL timer init API
modification
Repository: incubator-mynewt-core
Updated Branches:
refs/heads/develop f739293e2 -> ece980672
MYNEWT-401: HAL timer init API modification
The changes are due to a modification of the hal timer API. We
decided that the configuration through the syscfg method was
not desirable and it was not consistent with other hals. Thus,
we modified hal_timer_init() to take a void *cfg and added a
hal_timer_config() to make it operate like the other HALs. There
are examples of configurations in most of the bsps for those who
want to see how to configure the platform specific *cfg that is
passed to hal_timer_init().
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/ece98067
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/ece98067
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/ece98067
Branch: refs/heads/develop
Commit: ece980672d4b7e41c560107c667f6ffcb54d3e9d
Parents: f739293
Author: William San Filippo <wi...@runtime.io>
Authored: Tue Nov 1 15:55:41 2016 -0700
Committer: William San Filippo <wi...@runtime.io>
Committed: Tue Nov 1 16:11:59 2016 -0700
----------------------------------------------------------------------
hw/bsp/arduino_primo_nrf52/src/os_bsp.c | 21 ++++
hw/bsp/arduino_primo_nrf52/syscfg.yml | 15 ---
hw/bsp/bmd300eval/src/os_bsp.c | 21 ++++
hw/bsp/bmd300eval/syscfg.yml | 15 ---
hw/bsp/nrf51-arduino_101/src/os_bsp.c | 13 ++
hw/bsp/nrf51-arduino_101/syscfg.yml | 9 --
hw/bsp/nrf51-blenano/src/os_bsp.c | 13 ++
hw/bsp/nrf51-blenano/syscfg.yml | 9 --
hw/bsp/nrf51dk-16kbram/src/os_bsp.c | 13 ++
hw/bsp/nrf51dk-16kbram/syscfg.yml | 9 --
hw/bsp/nrf51dk/src/os_bsp.c | 13 ++
hw/bsp/nrf51dk/syscfg.yml | 9 --
hw/bsp/nrf52dk/src/os_bsp.c | 21 ++++
hw/bsp/nrf52dk/syscfg.yml | 15 ---
hw/bsp/nucleo-f401re/src/hal_bsp.c | 5 +
hw/bsp/nucleo-f401re/syscfg.yml | 10 +-
hw/bsp/olimex_stm32-e407_devboard/src/os_bsp.c | 5 +
hw/bsp/olimex_stm32-e407_devboard/syscfg.yml | 8 --
hw/bsp/rb-nano2/src/os_bsp.c | 21 ++++
hw/bsp/rb-nano2/syscfg.yml | 15 ---
hw/bsp/stm32f4discovery/src/hal_bsp.c | 5 +-
hw/hal/include/hal/hal_timer.h | 13 +-
hw/mcu/nordic/nrf51xxx/src/hal_timer.c | 115 +++++++++++-------
hw/mcu/nordic/nrf52xxx/src/hal_timer.c | 126 ++++++++++++--------
hw/mcu/stm/stm32f4xx/src/hal_timer.c | 78 +++++++-----
kernel/os/src/os_cputime.c | 2 +-
26 files changed, 362 insertions(+), 237 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/arduino_primo_nrf52/src/os_bsp.c
----------------------------------------------------------------------
diff --git a/hw/bsp/arduino_primo_nrf52/src/os_bsp.c b/hw/bsp/arduino_primo_nrf52/src/os_bsp.c
index 7a47ea7..3bf58e2 100644
--- a/hw/bsp/arduino_primo_nrf52/src/os_bsp.c
+++ b/hw/bsp/arduino_primo_nrf52/src/os_bsp.c
@@ -89,6 +89,27 @@ hal_bsp_init(void)
nrf_drv_spis_config_t spi_cfg = NRF_DRV_SPIS_DEFAULT_CONFIG(0);
#endif
+#if MYNEWT_VAL(TIMER_0)
+ rc = hal_timer_init(0, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_1)
+ rc = hal_timer_init(1, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_2)
+ rc = hal_timer_init(2, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_3)
+ rc = hal_timer_init(3, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_4)
+ rc = hal_timer_init(4, NULL);
+ assert(rc == 0);
+#endif
+
/* Set cputime to count at 1 usec increments */
rc = os_cputime_init(MYNEWT_VAL(CLOCK_FREQ));
assert(rc == 0);
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/arduino_primo_nrf52/syscfg.yml
----------------------------------------------------------------------
diff --git a/hw/bsp/arduino_primo_nrf52/syscfg.yml b/hw/bsp/arduino_primo_nrf52/syscfg.yml
index 178b9a2..3c13258 100644
--- a/hw/bsp/arduino_primo_nrf52/syscfg.yml
+++ b/hw/bsp/arduino_primo_nrf52/syscfg.yml
@@ -87,33 +87,18 @@ syscfg.defs:
TIMER_0:
description: 'NRF52 Timer 0'
value: 0
- TIMER_0_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_1:
description: 'NRF52 Timer 1'
value: 0
- TIMER_1_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_2:
description: 'NRF52 Timer 2'
value: 0
- TIMER_2_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_3:
description: 'NRF52 Timer 3'
value: 0
- TIMER_3_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_4:
description: 'NRF52 Timer 4'
value: 0
- TIMER_4_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
syscfg.vals:
CONFIG_FCB_FLASH_AREA: FLASH_AREA_NFFS
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/bmd300eval/src/os_bsp.c
----------------------------------------------------------------------
diff --git a/hw/bsp/bmd300eval/src/os_bsp.c b/hw/bsp/bmd300eval/src/os_bsp.c
index ec153d0..755f39d 100644
--- a/hw/bsp/bmd300eval/src/os_bsp.c
+++ b/hw/bsp/bmd300eval/src/os_bsp.c
@@ -86,6 +86,27 @@ hal_bsp_init(void)
nrf_drv_spis_config_t spi_cfg = NRF_DRV_SPIS_DEFAULT_CONFIG(0);
#endif
+#if MYNEWT_VAL(TIMER_0)
+ rc = hal_timer_init(0, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_1)
+ rc = hal_timer_init(1, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_2)
+ rc = hal_timer_init(2, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_3)
+ rc = hal_timer_init(3, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_4)
+ rc = hal_timer_init(4, NULL);
+ assert(rc == 0);
+#endif
+
/* Set cputime to count at 1 usec increments */
rc = os_cputime_init(MYNEWT_VAL(CLOCK_FREQ));
assert(rc == 0);
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/bmd300eval/syscfg.yml
----------------------------------------------------------------------
diff --git a/hw/bsp/bmd300eval/syscfg.yml b/hw/bsp/bmd300eval/syscfg.yml
index 68b32ed..a84f75f 100644
--- a/hw/bsp/bmd300eval/syscfg.yml
+++ b/hw/bsp/bmd300eval/syscfg.yml
@@ -75,33 +75,18 @@ syscfg.defs:
TIMER_0:
description: 'NRF52 Timer 0'
value: 1
- TIMER_0_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_1:
description: 'NRF52 Timer 1'
value: 0
- TIMER_1_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_2:
description: 'NRF52 Timer 2'
value: 0
- TIMER_2_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_3:
description: 'NRF52 Timer 3'
value: 0
- TIMER_3_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_4:
description: 'NRF52 Timer 4'
value: 0
- TIMER_4_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
syscfg.vals:
CONFIG_FCB_FLASH_AREA: FLASH_AREA_NFFS
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/nrf51-arduino_101/src/os_bsp.c
----------------------------------------------------------------------
diff --git a/hw/bsp/nrf51-arduino_101/src/os_bsp.c b/hw/bsp/nrf51-arduino_101/src/os_bsp.c
index 9991022..d0bb24d 100644
--- a/hw/bsp/nrf51-arduino_101/src/os_bsp.c
+++ b/hw/bsp/nrf51-arduino_101/src/os_bsp.c
@@ -55,6 +55,19 @@ hal_bsp_init(void)
assert(rc == 0);
#endif
+#if MYNEWT_VAL(TIMER_0)
+ rc = hal_timer_init(0, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_1)
+ rc = hal_timer_init(1, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_2)
+ rc = hal_timer_init(2, NULL);
+ assert(rc == 0);
+#endif
+
/* Set cputime to count at 1 usec increments */
rc = os_cputime_init(MYNEWT_VAL(CLOCK_FREQ));
assert(rc == 0);
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/nrf51-arduino_101/syscfg.yml
----------------------------------------------------------------------
diff --git a/hw/bsp/nrf51-arduino_101/syscfg.yml b/hw/bsp/nrf51-arduino_101/syscfg.yml
index 97b213d..eba942a 100644
--- a/hw/bsp/nrf51-arduino_101/syscfg.yml
+++ b/hw/bsp/nrf51-arduino_101/syscfg.yml
@@ -68,21 +68,12 @@ syscfg.defs:
TIMER_0:
description: 'NRF51 Timer 0'
value: 1
- TIMER_0_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_1:
description: 'NRF51 Timer 1'
value: 0
- TIMER_1_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_2:
description: 'NRF51 Timer 2'
value: 0
- TIMER_2_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
syscfg.vals:
CONFIG_FCB_FLASH_AREA: FLASH_AREA_NFFS
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/nrf51-blenano/src/os_bsp.c
----------------------------------------------------------------------
diff --git a/hw/bsp/nrf51-blenano/src/os_bsp.c b/hw/bsp/nrf51-blenano/src/os_bsp.c
index 371a6ed..f18fb0b 100644
--- a/hw/bsp/nrf51-blenano/src/os_bsp.c
+++ b/hw/bsp/nrf51-blenano/src/os_bsp.c
@@ -68,6 +68,19 @@ hal_bsp_init(void)
nrf_drv_spis_config_t spi_cfg = NRF_DRV_SPIS_DEFAULT_CONFIG(1);
#endif
+#if MYNEWT_VAL(TIMER_0)
+ rc = hal_timer_init(0, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_1)
+ rc = hal_timer_init(1, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_2)
+ rc = hal_timer_init(2, NULL);
+ assert(rc == 0);
+#endif
+
/* Set cputime to count at 1 usec increments */
rc = os_cputime_init(MYNEWT_VAL(CLOCK_FREQ));
assert(rc == 0);
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/nrf51-blenano/syscfg.yml
----------------------------------------------------------------------
diff --git a/hw/bsp/nrf51-blenano/syscfg.yml b/hw/bsp/nrf51-blenano/syscfg.yml
index 048c781..39e8098 100644
--- a/hw/bsp/nrf51-blenano/syscfg.yml
+++ b/hw/bsp/nrf51-blenano/syscfg.yml
@@ -65,21 +65,12 @@ syscfg.defs:
TIMER_0:
description: 'NRF51 Timer 0'
value: 1
- TIMER_0_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_1:
description: 'NRF51 Timer 1'
value: 0
- TIMER_1_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_2:
description: 'NRF51 Timer 2'
value: 0
- TIMER_2_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
syscfg.vals:
CONFIG_FCB_FLASH_AREA: FLASH_AREA_NFFS
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/nrf51dk-16kbram/src/os_bsp.c
----------------------------------------------------------------------
diff --git a/hw/bsp/nrf51dk-16kbram/src/os_bsp.c b/hw/bsp/nrf51dk-16kbram/src/os_bsp.c
index 107cb61..0694129 100644
--- a/hw/bsp/nrf51dk-16kbram/src/os_bsp.c
+++ b/hw/bsp/nrf51dk-16kbram/src/os_bsp.c
@@ -73,6 +73,19 @@ hal_bsp_init(void)
nrf_drv_spis_config_t spi_cfg = NRF_DRV_SPIS_DEFAULT_CONFIG(1);
#endif
+#if MYNEWT_VAL(TIMER_0)
+ rc = hal_timer_init(0, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_1)
+ rc = hal_timer_init(1, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_2)
+ rc = hal_timer_init(2, NULL);
+ assert(rc == 0);
+#endif
+
/* Set cputime to count at 1 usec increments */
rc = os_cputime_init(MYNEWT_VAL(CLOCK_FREQ));
assert(rc == 0);
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/nrf51dk-16kbram/syscfg.yml
----------------------------------------------------------------------
diff --git a/hw/bsp/nrf51dk-16kbram/syscfg.yml b/hw/bsp/nrf51dk-16kbram/syscfg.yml
index 7381af0..627db0f 100644
--- a/hw/bsp/nrf51dk-16kbram/syscfg.yml
+++ b/hw/bsp/nrf51dk-16kbram/syscfg.yml
@@ -65,21 +65,12 @@ syscfg.defs:
TIMER_0:
description: 'NRF51 Timer 0'
value: 1
- TIMER_0_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_1:
description: 'NRF51 Timer 1'
value: 0
- TIMER_1_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_2:
description: 'NRF51 Timer 2'
value: 0
- TIMER_2_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
I2C_0:
description: 'NRF51 I2C (TWI) interface 0'
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/nrf51dk/src/os_bsp.c
----------------------------------------------------------------------
diff --git a/hw/bsp/nrf51dk/src/os_bsp.c b/hw/bsp/nrf51dk/src/os_bsp.c
index afaeb8c..68b9b1a 100644
--- a/hw/bsp/nrf51dk/src/os_bsp.c
+++ b/hw/bsp/nrf51dk/src/os_bsp.c
@@ -74,6 +74,19 @@ hal_bsp_init(void)
nrf_drv_spis_config_t spi_cfg = NRF_DRV_SPIS_DEFAULT_CONFIG(1);
#endif
+#if MYNEWT_VAL(TIMER_0)
+ rc = hal_timer_init(0, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_1)
+ rc = hal_timer_init(1, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_2)
+ rc = hal_timer_init(2, NULL);
+ assert(rc == 0);
+#endif
+
/* Set cputime to count at 1 usec increments */
rc = os_cputime_init(MYNEWT_VAL(CLOCK_FREQ));
assert(rc == 0);
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/nrf51dk/syscfg.yml
----------------------------------------------------------------------
diff --git a/hw/bsp/nrf51dk/syscfg.yml b/hw/bsp/nrf51dk/syscfg.yml
index 17d9213..14ab883 100644
--- a/hw/bsp/nrf51dk/syscfg.yml
+++ b/hw/bsp/nrf51dk/syscfg.yml
@@ -65,21 +65,12 @@ syscfg.defs:
TIMER_0:
description: 'NRF51 Timer 0'
value: 1
- TIMER_0_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_1:
description: 'NRF51 Timer 1'
value: 0
- TIMER_1_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_2:
description: 'NRF51 Timer 2'
value: 0
- TIMER_2_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
I2C_0:
description: 'NRF51 I2C (TWI) interface 0'
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/nrf52dk/src/os_bsp.c
----------------------------------------------------------------------
diff --git a/hw/bsp/nrf52dk/src/os_bsp.c b/hw/bsp/nrf52dk/src/os_bsp.c
index 14ce441..ecbee85 100644
--- a/hw/bsp/nrf52dk/src/os_bsp.c
+++ b/hw/bsp/nrf52dk/src/os_bsp.c
@@ -92,6 +92,27 @@ hal_bsp_init(void)
nrf_drv_spis_config_t spi_cfg = NRF_DRV_SPIS_DEFAULT_CONFIG(0);
#endif
+#if MYNEWT_VAL(TIMER_0)
+ rc = hal_timer_init(0, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_1)
+ rc = hal_timer_init(1, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_2)
+ rc = hal_timer_init(2, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_3)
+ rc = hal_timer_init(3, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_4)
+ rc = hal_timer_init(4, NULL);
+ assert(rc == 0);
+#endif
+
/* Set cputime to count at 1 usec increments */
rc = os_cputime_init(MYNEWT_VAL(CLOCK_FREQ));
assert(rc == 0);
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/nrf52dk/syscfg.yml
----------------------------------------------------------------------
diff --git a/hw/bsp/nrf52dk/syscfg.yml b/hw/bsp/nrf52dk/syscfg.yml
index 3abc759..8f1bb0e 100644
--- a/hw/bsp/nrf52dk/syscfg.yml
+++ b/hw/bsp/nrf52dk/syscfg.yml
@@ -54,33 +54,18 @@ syscfg.defs:
TIMER_0:
description: 'NRF52 Timer 0'
value: 1
- TIMER_0_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_1:
description: 'NRF52 Timer 1'
value: 0
- TIMER_1_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_2:
description: 'NRF52 Timer 2'
value: 0
- TIMER_2_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_3:
description: 'NRF52 Timer 3'
value: 0
- TIMER_3_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_4:
description: 'NRF52 Timer 4'
value: 0
- TIMER_4_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
I2C_0:
description: 'NRF52 I2C (TWI) interface 0'
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/nucleo-f401re/src/hal_bsp.c
----------------------------------------------------------------------
diff --git a/hw/bsp/nucleo-f401re/src/hal_bsp.c b/hw/bsp/nucleo-f401re/src/hal_bsp.c
index e80fb7e..0d2b2eb 100644
--- a/hw/bsp/nucleo-f401re/src/hal_bsp.c
+++ b/hw/bsp/nucleo-f401re/src/hal_bsp.c
@@ -26,6 +26,7 @@
#include <hal/hal_gpio.h>
#include <hal/hal_flash_int.h>
#include <hal/hal_i2c.h>
+#include <hal/hal_timer.h>
#if MYNEWT_VAL(SPI_0_MASTER) || MYNEWT_VAL(SPI_0_SLAVE)
#include <hal/hal_spi.h>
#endif
@@ -129,6 +130,10 @@ hal_bsp_init(void)
rc = hal_i2c_init(0, &i2c_cfg0);
assert(rc == 0);
#endif
+
+#if MYNEWT_VAL(TIMER_0)
+ hal_timer_init(0, TIM9);
+#endif
}
/**
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/nucleo-f401re/syscfg.yml
----------------------------------------------------------------------
diff --git a/hw/bsp/nucleo-f401re/syscfg.yml b/hw/bsp/nucleo-f401re/syscfg.yml
index 021a913..c27ed47 100644
--- a/hw/bsp/nucleo-f401re/syscfg.yml
+++ b/hw/bsp/nucleo-f401re/syscfg.yml
@@ -6,7 +6,7 @@
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
-#
+#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
@@ -50,14 +50,6 @@ syscfg.defs:
description: 'TIMER_0'
value: 0
- TIMER_0_INTERRUPT_PRIORITY:
- description: 'Interrupt priority for HAL timer 0'
- value: 1
-
- TIMER_0_UNIT:
- description: 'MCU timer unit assigned as HAL timer0'
- value: TIM9
-
syscfg.vals:
REBOOT_LOG_FLASH_AREA: FLASH_AREA_REBOOT_LOG
CONFIG_FCB_FLASH_AREA: FLASH_AREA_NFFS
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/olimex_stm32-e407_devboard/src/os_bsp.c
----------------------------------------------------------------------
diff --git a/hw/bsp/olimex_stm32-e407_devboard/src/os_bsp.c b/hw/bsp/olimex_stm32-e407_devboard/src/os_bsp.c
index 446b72b..5ea6b16 100644
--- a/hw/bsp/olimex_stm32-e407_devboard/src/os_bsp.c
+++ b/hw/bsp/olimex_stm32-e407_devboard/src/os_bsp.c
@@ -39,6 +39,7 @@
#include "stm32f4xx_hal_adc.h"
#include <adc_stm32f4/adc_stm32f4.h>
#include <hal/hal_i2c.h>
+#include <hal/hal_timer.h>
#include <mcu/stm32f4xx_mynewt_hal.h>
#if MYNEWT_VAL(SPI_0_MASTER) || MYNEWT_VAL(SPI_0_SLAVE)
#include <hal/hal_spi.h>
@@ -320,5 +321,9 @@ hal_bsp_init(void)
rc = hal_i2c_init(0, &i2c_cfg0);
assert(rc == 0);
#endif
+
+#if MYNEWT_VAL(TIMER_0)
+ hal_timer_init(0, TIM9);
+#endif
}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/olimex_stm32-e407_devboard/syscfg.yml
----------------------------------------------------------------------
diff --git a/hw/bsp/olimex_stm32-e407_devboard/syscfg.yml b/hw/bsp/olimex_stm32-e407_devboard/syscfg.yml
index 5f0cf16..20dd4e1 100644
--- a/hw/bsp/olimex_stm32-e407_devboard/syscfg.yml
+++ b/hw/bsp/olimex_stm32-e407_devboard/syscfg.yml
@@ -45,14 +45,6 @@ syscfg.defs:
description: 'TIMER_0'
value: 0
- TIMER_0_INTERRUPT_PRIORITY:
- description: 'Interrupt priority for HAL timer 0'
- value: 1
-
- TIMER_0_UNIT:
- description: 'MCU timer unit assigned as HAL timer0'
- value: TIM9
-
syscfg.vals:
REBOOT_LOG_FLASH_AREA: FLASH_AREA_REBOOT_LOG
CONFIG_FCB_FLASH_AREA: FLASH_AREA_NFFS
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/rb-nano2/src/os_bsp.c
----------------------------------------------------------------------
diff --git a/hw/bsp/rb-nano2/src/os_bsp.c b/hw/bsp/rb-nano2/src/os_bsp.c
index 7da5d1e..cbf622f 100644
--- a/hw/bsp/rb-nano2/src/os_bsp.c
+++ b/hw/bsp/rb-nano2/src/os_bsp.c
@@ -60,6 +60,27 @@ hal_bsp_init(void)
{
int rc;
+#if MYNEWT_VAL(TIMER_0)
+ rc = hal_timer_init(0, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_1)
+ rc = hal_timer_init(1, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_2)
+ rc = hal_timer_init(2, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_3)
+ rc = hal_timer_init(3, NULL);
+ assert(rc == 0);
+#endif
+#if MYNEWT_VAL(TIMER_4)
+ rc = hal_timer_init(4, NULL);
+ assert(rc == 0);
+#endif
+
/* Set cputime to count at 1 usec increments */
rc = os_cputime_init(MYNEWT_VAL(CLOCK_FREQ));
assert(rc == 0);
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/rb-nano2/syscfg.yml
----------------------------------------------------------------------
diff --git a/hw/bsp/rb-nano2/syscfg.yml b/hw/bsp/rb-nano2/syscfg.yml
index 8f8fa81..f1c2581 100644
--- a/hw/bsp/rb-nano2/syscfg.yml
+++ b/hw/bsp/rb-nano2/syscfg.yml
@@ -70,33 +70,18 @@ syscfg.defs:
TIMER_0:
description: 'NRF52 Timer 0'
value: 1
- TIMER_0_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_1:
description: 'NRF52 Timer 1'
value: 0
- TIMER_1_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_2:
description: 'NRF52 Timer 2'
value: 0
- TIMER_2_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_3:
description: 'NRF52 Timer 3'
value: 0
- TIMER_3_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
TIMER_4:
description: 'NRF52 Timer 4'
value: 0
- TIMER_4_INTERRUPT_PRIORITY:
- description: 'TBD'
- value: '((1 << __NVIC_PRIO_BITS) - 1)'
syscfg.vals:
CONFIG_FCB_FLASH_AREA: FLASH_AREA_NFFS
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/bsp/stm32f4discovery/src/hal_bsp.c
----------------------------------------------------------------------
diff --git a/hw/bsp/stm32f4discovery/src/hal_bsp.c b/hw/bsp/stm32f4discovery/src/hal_bsp.c
index d170b35..696ecb8 100644
--- a/hw/bsp/stm32f4discovery/src/hal_bsp.c
+++ b/hw/bsp/stm32f4discovery/src/hal_bsp.c
@@ -27,6 +27,7 @@
#include <hal/hal_bsp.h>
#include <hal/hal_gpio.h>
#include <hal/hal_flash_int.h>
+#include <hal/hal_timer.h>
#include <stm32f407xx.h>
#include <stm32f4xx_hal_gpio_ex.h>
@@ -92,7 +93,9 @@ hal_bsp_init(void)
OS_DEV_INIT_PRIMARY, 0, uart_hal_init, (void *)&uart_cfg[0]);
assert(rc == 0);
#endif
-
+#if MYNEWT_VAL(TIMER_0)
+ hal_timer_init(0, TIM9);
+#endif
}
/**
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/hal/include/hal/hal_timer.h
----------------------------------------------------------------------
diff --git a/hw/hal/include/hal/hal_timer.h b/hw/hal/include/hal/hal_timer.h
index 95f134b..c0a1cff 100644
--- a/hw/hal/include/hal/hal_timer.h
+++ b/hw/hal/include/hal/hal_timer.h
@@ -47,16 +47,19 @@ struct hal_timer
TAILQ_ENTRY(hal_timer) link; /* Queue linked list structure */
};
-/*
- * Initialize a HW timer at the given frequency and start it. If the exact
- * frequency is not obtainable the closest obtainable frequency is set.
- */
-int hal_timer_init(int timer_num, uint32_t freq_hz);
+/* Initialize a HW timer. */
+int hal_timer_init(int timer_num, void *cfg);
/* Un-initialize a HW timer. */
int hal_timer_deinit(int timer_num);
/*
+ * Config a HW timer at the given frequency and start it. If the exact
+ * frequency is not obtainable the closest obtainable frequency is set.
+ */
+int hal_timer_config(int timer_num, uint32_t freq_hz);
+
+/*
* Returns the resolution of the HW timer. NOTE: the frequency may not be
* obtainable so the caller can use this to determine the resolution.
* Returns resolution in nanoseconds. A return value of 0 indicates an invalid
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/mcu/nordic/nrf51xxx/src/hal_timer.c
----------------------------------------------------------------------
diff --git a/hw/mcu/nordic/nrf51xxx/src/hal_timer.c b/hw/mcu/nordic/nrf51xxx/src/hal_timer.c
index 5a5aa7c..45e4ac5 100644
--- a/hw/mcu/nordic/nrf51xxx/src/hal_timer.c
+++ b/hw/mcu/nordic/nrf51xxx/src/hal_timer.c
@@ -357,65 +357,36 @@ nrf51_timer2_irq_handler(void)
/**
* hal timer init
*
- * Initialize (and start) a timer to run at the desired frequency.
+ * Initialize platform specific timer items
*
- * @param timer_num
- * @param freq_hz
+ * @param timer_num Timer number to initialize
+ * @param cfg Pointer to platform specific configuration
*
- * @return int
+ * @return int 0: success; error code otherwise
*/
int
-hal_timer_init(int timer_num, uint32_t freq_hz)
+hal_timer_init(int timer_num, void *cfg)
{
int rc;
- uint8_t prescaler;
uint8_t irq_num;
- uint32_t ctx;
- uint32_t div;
- uint32_t min_delta;
- uint32_t max_delta;
- uint32_t prio;
struct nrf51_hal_timer *bsptimer;
NRF_TIMER_Type *hwtimer;
hal_timer_irq_handler_t irq_isr;
NRF51_HAL_TIMER_RESOLVE(timer_num, bsptimer);
- /* Set timer to desired frequency */
- div = NRF51_MAX_TIMER_FREQ / freq_hz;
-
- /* Largest prescaler is 2^9 and must make sure frequency not too high */
- if (bsptimer->tmr_enabled || (div == 0) || (div > 512)) {
+ /* If timer is enabled do not allow init */
+ if (bsptimer->tmr_enabled) {
rc = EINVAL;
goto err;
}
- if (div == 1) {
- prescaler = 0;
- } else {
- /* Find closest prescaler */
- for (prescaler = 1; prescaler < 10; ++prescaler) {
- if (div <= (1 << prescaler)) {
- min_delta = div - (1 << (prescaler - 1));
- max_delta = (1 << prescaler) - div;
- if (min_delta < max_delta) {
- prescaler -= 1;
- }
- break;
- }
- }
- }
-
- /* Now set the actual frequency */
- bsptimer->tmr_freq = NRF51_MAX_TIMER_FREQ / (1 << prescaler);
-
switch (timer_num) {
#if MYNEWT_VAL(TIMER_0)
case 0:
irq_num = TIMER0_IRQn;
hwtimer = NRF_TIMER0;
irq_isr = nrf51_timer0_irq_handler;
- prio = MYNEWT_VAL(TIMER_0_INTERRUPT_PRIORITY);
break;
#endif
#if MYNEWT_VAL(TIMER_1)
@@ -424,7 +395,6 @@ hal_timer_init(int timer_num, uint32_t freq_hz)
hwtimer = NRF_TIMER1;
irq_isr = nrf51_timer1_irq_handler;
bsptimer->tmr_16bit = 1;
- prio = MYNEWT_VAL(TIMER_1_INTERRUPT_PRIORITY);
break;
#endif
#if MYNEWT_VAL(TIMER_2)
@@ -433,11 +403,9 @@ hal_timer_init(int timer_num, uint32_t freq_hz)
hwtimer = NRF_TIMER2;
irq_isr = nrf51_timer2_irq_handler;
bsptimer->tmr_16bit = 1;
- prio = MYNEWT_VAL(TIMER_2_INTERRUPT_PRIORITY);
break;
#endif
default:
- prio = 0;
hwtimer = NULL;
break;
}
@@ -449,6 +417,70 @@ hal_timer_init(int timer_num, uint32_t freq_hz)
bsptimer->tmr_reg = hwtimer;
bsptimer->tmr_irq_num = irq_num;
+
+ /* Disable IRQ, set priority and set vector in table */
+ NVIC_DisableIRQ(irq_num);
+ NVIC_SetPriority(irq_num, (1 << __NVIC_PRIO_BITS) - 1);
+ NVIC_SetVector(irq_num, (uint32_t)irq_isr);
+
+ return 0;
+
+err:
+ return rc;
+}
+
+/**
+ * hal timer config
+ *
+ * Configure a timer to run at the desired frequency. This starts the timer.
+ *
+ * @param timer_num
+ * @param freq_hz
+ *
+ * @return int
+ */
+int
+hal_timer_config(int timer_num, uint32_t freq_hz)
+{
+ int rc;
+ uint8_t prescaler;
+ uint32_t ctx;
+ uint32_t div;
+ uint32_t min_delta;
+ uint32_t max_delta;
+ struct nrf51_hal_timer *bsptimer;
+ NRF_TIMER_Type *hwtimer;
+
+ NRF51_HAL_TIMER_RESOLVE(timer_num, bsptimer);
+
+ /* Set timer to desired frequency */
+ div = NRF51_MAX_TIMER_FREQ / freq_hz;
+
+ /* Largest prescaler is 2^9 and must make sure frequency not too high */
+ if (bsptimer->tmr_enabled || (div == 0) || (div > 512) ||
+ (bsptimer->tmr_reg == NULL)) {
+ rc = EINVAL;
+ goto err;
+ }
+
+ if (div == 1) {
+ prescaler = 0;
+ } else {
+ /* Find closest prescaler */
+ for (prescaler = 1; prescaler < 10; ++prescaler) {
+ if (div <= (1 << prescaler)) {
+ min_delta = div - (1 << (prescaler - 1));
+ max_delta = (1 << prescaler) - div;
+ if (min_delta < max_delta) {
+ prescaler -= 1;
+ }
+ break;
+ }
+ }
+ }
+
+ /* Now set the actual frequency */
+ bsptimer->tmr_freq = NRF51_MAX_TIMER_FREQ / (1 << prescaler);
bsptimer->tmr_enabled = 1;
/* disable interrupts */
@@ -465,6 +497,7 @@ hal_timer_init(int timer_num, uint32_t freq_hz)
}
}
}
+ hwtimer = bsptimer->tmr_reg;
/* Stop the timer first */
hwtimer->TASKS_STOP = 1;
@@ -488,9 +521,7 @@ hal_timer_init(int timer_num, uint32_t freq_hz)
hwtimer->TASKS_START = 1;
/* Set isr in vector table and enable interrupt */
- NVIC_SetPriority(irq_num, prio);
- NVIC_SetVector(irq_num, (uint32_t)irq_isr);
- NVIC_EnableIRQ(irq_num);
+ NVIC_EnableIRQ(bsptimer->tmr_irq_num);
__HAL_ENABLE_INTERRUPTS(ctx);
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/mcu/nordic/nrf52xxx/src/hal_timer.c
----------------------------------------------------------------------
diff --git a/hw/mcu/nordic/nrf52xxx/src/hal_timer.c b/hw/mcu/nordic/nrf52xxx/src/hal_timer.c
index 1db2e37..396ba45 100644
--- a/hw/mcu/nordic/nrf52xxx/src/hal_timer.c
+++ b/hw/mcu/nordic/nrf52xxx/src/hal_timer.c
@@ -296,65 +296,36 @@ nrf52_timer4_irq_handler(void)
/**
* hal timer init
*
- * Initialize (and start) a timer to run at the desired frequency.
+ * Initialize platform specific timer items
*
- * @param timer_num
- * @param freq_hz
+ * @param timer_num Timer number to initialize
+ * @param cfg Pointer to platform specific configuration
*
- * @return int
+ * @return int 0: success; error code otherwise
*/
int
-hal_timer_init(int timer_num, uint32_t freq_hz)
+hal_timer_init(int timer_num, void *cfg)
{
int rc;
- uint8_t prescaler;
uint8_t irq_num;
- uint32_t ctx;
- uint32_t div;
- uint32_t min_delta;
- uint32_t max_delta;
- uint32_t prio;
struct nrf52_hal_timer *bsptimer;
NRF_TIMER_Type *hwtimer;
hal_timer_irq_handler_t irq_isr;
NRF52_HAL_TIMER_RESOLVE(timer_num, bsptimer);
- /* Set timer to desired frequency */
- div = NRF52_MAX_TIMER_FREQ / freq_hz;
-
- /* Largest prescaler is 2^9 and must make sure frequency not too high */
- if (bsptimer->tmr_enabled || (div == 0) || (div > 512)) {
+ /* If timer is enabled do not allow init */
+ if (bsptimer->tmr_enabled) {
rc = EINVAL;
goto err;
}
- if (div == 1) {
- prescaler = 0;
- } else {
- /* Find closest prescaler */
- for (prescaler = 1; prescaler < 10; ++prescaler) {
- if (div <= (1 << prescaler)) {
- min_delta = div - (1 << (prescaler - 1));
- max_delta = (1 << prescaler) - div;
- if (min_delta < max_delta) {
- prescaler -= 1;
- }
- break;
- }
- }
- }
-
- /* Now set the actual frequency */
- bsptimer->tmr_freq = NRF52_MAX_TIMER_FREQ / (1 << prescaler);
-
switch (timer_num) {
#if MYNEWT_VAL(TIMER_0)
case 0:
irq_num = TIMER0_IRQn;
hwtimer = NRF_TIMER0;
irq_isr = nrf52_timer0_irq_handler;
- prio = MYNEWT_VAL(TIMER_0_INTERRUPT_PRIORITY);
break;
#endif
#if MYNEWT_VAL(TIMER_1)
@@ -362,7 +333,6 @@ hal_timer_init(int timer_num, uint32_t freq_hz)
irq_num = TIMER1_IRQn;
hwtimer = NRF_TIMER1;
irq_isr = nrf52_timer1_irq_handler;
- prio = MYNEWT_VAL(TIMER_1_INTERRUPT_PRIORITY);
break;
#endif
#if MYNEWT_VAL(TIMER_2)
@@ -370,7 +340,6 @@ hal_timer_init(int timer_num, uint32_t freq_hz)
irq_num = TIMER2_IRQn;
hwtimer = NRF_TIMER2;
irq_isr = nrf52_timer2_irq_handler;
- prio = MYNEWT_VAL(TIMER_2_INTERRUPT_PRIORITY);
break;
#endif
#if MYNEWT_VAL(TIMER_3)
@@ -378,7 +347,6 @@ hal_timer_init(int timer_num, uint32_t freq_hz)
irq_num = TIMER3_IRQn;
hwtimer = NRF_TIMER3;
irq_isr = nrf52_timer3_irq_handler;
- prio = MYNEWT_VAL(TIMER_3_INTERRUPT_PRIORITY);
break;
#endif
#if MYNEWT_VAL(TIMER_4)
@@ -386,12 +354,10 @@ hal_timer_init(int timer_num, uint32_t freq_hz)
irq_num = TIMER4_IRQn;
hwtimer = NRF_TIMER4;
irq_isr = nrf52_timer4_irq_handler;
- prio = MYNEWT_VAL(TIMER_4_INTERRUPT_PRIORITY);
break;
#endif
default:
hwtimer = NULL;
- prio = 0;
break;
}
@@ -402,6 +368,74 @@ hal_timer_init(int timer_num, uint32_t freq_hz)
bsptimer->tmr_reg = hwtimer;
bsptimer->tmr_irq_num = irq_num;
+
+ /* Disable IRQ, set priority and set vector in table */
+ NVIC_DisableIRQ(irq_num);
+ NVIC_SetPriority(irq_num, (1 << __NVIC_PRIO_BITS) - 1);
+ NVIC_SetVector(irq_num, (uint32_t)irq_isr);
+
+ return 0;
+
+err:
+ return rc;
+}
+
+/**
+ * hal timer config
+ *
+ * Configure a timer to run at the desired frequency. This starts the timer.
+ *
+ * @param timer_num
+ * @param freq_hz
+ *
+ * @return int
+ */
+int
+hal_timer_config(int timer_num, uint32_t freq_hz)
+{
+ int rc;
+ uint8_t prescaler;
+ uint32_t ctx;
+ uint32_t div;
+ uint32_t min_delta;
+ uint32_t max_delta;
+ struct nrf52_hal_timer *bsptimer;
+ NRF_TIMER_Type *hwtimer;
+
+ NRF52_HAL_TIMER_RESOLVE(timer_num, bsptimer);
+
+ /* Set timer to desired frequency */
+ div = NRF52_MAX_TIMER_FREQ / freq_hz;
+
+ /*
+ * Largest prescaler is 2^9 and must make sure frequency not too high.
+ * If hwtimer is NULL it means that the timer was not initialized prior
+ * to call.
+ */
+ if (bsptimer->tmr_enabled || (div == 0) || (div > 512) ||
+ (bsptimer->tmr_reg == NULL)) {
+ rc = EINVAL;
+ goto err;
+ }
+
+ if (div == 1) {
+ prescaler = 0;
+ } else {
+ /* Find closest prescaler */
+ for (prescaler = 1; prescaler < 10; ++prescaler) {
+ if (div <= (1 << prescaler)) {
+ min_delta = div - (1 << (prescaler - 1));
+ max_delta = (1 << prescaler) - div;
+ if (min_delta < max_delta) {
+ prescaler -= 1;
+ }
+ break;
+ }
+ }
+ }
+
+ /* Now set the actual frequency */
+ bsptimer->tmr_freq = NRF52_MAX_TIMER_FREQ / (1 << prescaler);
bsptimer->tmr_enabled = 1;
/* disable interrupts */
@@ -417,6 +451,7 @@ hal_timer_init(int timer_num, uint32_t freq_hz)
}
}
}
+ hwtimer = bsptimer->tmr_reg;
/* Stop the timer first */
hwtimer->TASKS_STOP = 1;
@@ -431,10 +466,7 @@ hal_timer_init(int timer_num, uint32_t freq_hz)
/* Start the timer */
hwtimer->TASKS_START = 1;
- /* Set isr in vector table and enable interrupt */
- NVIC_SetPriority(irq_num, prio);
- NVIC_SetVector(irq_num, (uint32_t)irq_isr);
- NVIC_EnableIRQ(irq_num);
+ NVIC_EnableIRQ(bsptimer->tmr_irq_num);
__HAL_ENABLE_INTERRUPTS(ctx);
@@ -467,9 +499,9 @@ hal_timer_deinit(int timer_num)
hwtimer = bsptimer->tmr_reg;
hwtimer->INTENCLR = NRF_TIMER_INT_MASK(NRF_TIMER_CC_INT);
hwtimer->TASKS_STOP = 1;
- __HAL_ENABLE_INTERRUPTS(ctx);
-
bsptimer->tmr_enabled = 0;
+ bsptimer->tmr_reg = NULL;
+ __HAL_ENABLE_INTERRUPTS(ctx);
err:
return rc;
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/hw/mcu/stm/stm32f4xx/src/hal_timer.c
----------------------------------------------------------------------
diff --git a/hw/mcu/stm/stm32f4xx/src/hal_timer.c b/hw/mcu/stm/stm32f4xx/src/hal_timer.c
index 6c912f1..5f9fcac 100644
--- a/hw/mcu/stm/stm32f4xx/src/hal_timer.c
+++ b/hw/mcu/stm/stm32f4xx/src/hal_timer.c
@@ -43,14 +43,10 @@ struct stm32f4_hal_tmr {
};
#if MYNEWT_VAL(TIMER_0)
-struct stm32f4_hal_tmr stm32f4_tmr0 = {
- .sht_regs = MYNEWT_VAL(TIMER_0_UNIT)
-};
+struct stm32f4_hal_tmr stm32f4_tmr0;
#endif
#if MYNEWT_VAL(TIMER_1)
-struct stm32f4_hal_tmr stm32f4_tmr1 = {
- .sht_regs = MYNEWT_VAL(TIMER_1_UNIT)
-};
+struct stm32f4_hal_tmr stm32f4_tmr1;
#endif
static struct stm32f4_hal_tmr *stm32f4_tmr_devs[STM32F4_HAL_TIMER_MAX] = {
@@ -147,9 +143,9 @@ stm32f4_tmr1_irq(void)
#endif
static void
-stm32f4_tmr_reg_irq(IRQn_Type irqn, uint32_t prio, uint32_t func)
+stm32f4_tmr_reg_irq(IRQn_Type irqn, uint32_t func)
{
- NVIC_SetPriority(irqn, prio);
+ NVIC_SetPriority(irqn, (1 << __NVIC_PRIO_BITS) - 1);
NVIC_SetVector(irqn, func);
NVIC_EnableIRQ(irqn);
}
@@ -198,19 +194,16 @@ static void
stm32f4_hw_setup(int num, TIM_TypeDef *regs)
{
uint32_t func;
- uint32_t prio;
switch (num) {
#if MYNEWT_VAL(TIMER_0)
case 0:
func = (uint32_t)stm32f4_tmr0_irq;
- prio = MYNEWT_VAL(TIMER_0_INTERRUPT_PRIORITY);
break;
#endif
#if MYNEWT_VAL(TIMER_1)
case 1:
func = (uint32_t)stm32f4_tmr1_irq;
- prio = MYNEWT_VAL(TIMER_1_INTERRUPT_PRIORITY);
break;
#endif
default:
@@ -220,33 +213,33 @@ stm32f4_hw_setup(int num, TIM_TypeDef *regs)
#ifdef TIM1
if (regs == TIM1) {
- stm32f4_tmr_reg_irq(TIM1_CC_IRQn, prio, func);
- stm32f4_tmr_reg_irq(TIM1_UP_TIM10_IRQn, prio, func);
+ stm32f4_tmr_reg_irq(TIM1_CC_IRQn, func);
+ stm32f4_tmr_reg_irq(TIM1_UP_TIM10_IRQn, func);
__HAL_RCC_TIM1_CLK_ENABLE();
}
#endif
#ifdef TIM8
if (regs == TIM8) {
- stm32f4_tmr_reg_irq(TIM8_CC_IRQn, prio, func);
- stm32f4_tmr_reg_irq(TIM8_UP_TIM13_IRQn, prio, func);
+ stm32f4_tmr_reg_irq(TIM8_CC_IRQn, func);
+ stm32f4_tmr_reg_irq(TIM8_UP_TIM13_IRQn, func);
__HAL_RCC_TIM8_CLK_ENABLE();
}
#endif
#ifdef TIM9
if (regs == TIM9) {
- stm32f4_tmr_reg_irq(TIM1_BRK_TIM9_IRQn, prio, func);
+ stm32f4_tmr_reg_irq(TIM1_BRK_TIM9_IRQn, func);
__HAL_RCC_TIM9_CLK_ENABLE();
}
#endif
#ifdef TIM10
if (regs == TIM10) {
- stm32f4_tmr_reg_irq(TIM1_UP_TIM10_IRQn, prio, func);
+ stm32f4_tmr_reg_irq(TIM1_UP_TIM10_IRQn, func);
__HAL_RCC_TIM10_CLK_ENABLE();
}
#endif
#ifdef TIM11
if (regs == TIM11) {
- stm32f4_tmr_reg_irq(TIM1_TRG_COM_TIM11_IRQn, prio, func);
+ stm32f4_tmr_reg_irq(TIM1_TRG_COM_TIM11_IRQn, func);
__HAL_RCC_TIM11_CLK_ENABLE();
}
#endif
@@ -285,7 +278,44 @@ stm32f4_hw_setdown(TIM_TypeDef *regs)
/**
* hal timer init
*
- * Initialize (and start) a timer to run at the desired frequency.
+ * Initialize platform specific timer items
+ *
+ * @param timer_num Timer number to initialize
+ * @param cfg Pointer to platform specific configuration
+ *
+ * @return int 0: success; error code otherwise
+ */
+int
+hal_timer_init(int num, void *cfg)
+{
+ struct stm32f4_hal_tmr *tmr;
+
+ if (num >= STM32F4_HAL_TIMER_MAX || !(tmr = stm32f4_tmr_devs[num]) ||
+ (cfg == NULL)) {
+ return -1;
+ }
+
+ tmr->sht_regs = (TIM_TypeDef *)cfg;
+
+ if (!IS_TIM_CC1_INSTANCE(tmr->sht_regs)) {
+ return -1;
+ }
+
+ stm32f4_hw_setup(num, tmr->sht_regs);
+
+ /*
+ * Stop the timers at debugger. XXX Which TIM?
+ */
+ DBGMCU->APB1FZ |= 0x1ff; /* TIM2 - TIM7, TIM12-TIM14 */
+ DBGMCU->APB2FZ |= 0x70003; /* TIM1, TIM8-TIM11 */
+
+ return 0;
+}
+
+/**
+ * hal timer config
+ *
+ * Configure a timer to run at the desired frequency. This starts the timer.
*
* @param timer_num
* @param freq_hz
@@ -293,7 +323,7 @@ stm32f4_hw_setdown(TIM_TypeDef *regs)
* @return int
*/
int
-hal_timer_init(int num, uint32_t freq_hz)
+hal_timer_config(int num, uint32_t freq_hz)
{
struct stm32f4_hal_tmr *tmr;
TIM_Base_InitTypeDef init;
@@ -317,14 +347,6 @@ hal_timer_init(int num, uint32_t freq_hz)
init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
init.CounterMode = TIM_COUNTERMODE_UP;
- stm32f4_hw_setup(num, tmr->sht_regs);
-
- /*
- * Stop the timers at debugger. XXX Which TIM?
- */
- DBGMCU->APB1FZ |= 0x1ff; /* TIM2 - TIM7, TIM12-TIM14 */
- DBGMCU->APB2FZ |= 0x70003; /* TIM1, TIM8-TIM11 */
-
/*
* Set up to count overflow interrupts.
*/
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ece98067/kernel/os/src/os_cputime.c
----------------------------------------------------------------------
diff --git a/kernel/os/src/os_cputime.c b/kernel/os/src/os_cputime.c
index e67a2f8..067f1a1 100644
--- a/kernel/os/src/os_cputime.c
+++ b/kernel/os/src/os_cputime.c
@@ -50,7 +50,7 @@ os_cputime_init(uint32_t clock_freq)
/* Set the ticks per microsecond. */
g_os_cputime.ticks_per_usec = clock_freq / 1000000U;
- rc = hal_timer_init(MYNEWT_VAL(OS_CPUTIME_TIMER_NUM), clock_freq);
+ rc = hal_timer_config(MYNEWT_VAL(OS_CPUTIME_TIMER_NUM), clock_freq);
return rc;
}