Difference between revisions of "Nrf52-timer-config"
m |
|||
Line 23: | Line 23: | ||
nRF5SDK153059ac345/nRF5_SDK_15.3.0_59ac345/modules/nrfx/drivers/src | nRF5SDK153059ac345/nRF5_SDK_15.3.0_59ac345/modules/nrfx/drivers/src | ||
nRF5SDK153059ac345/nRF5_SDK_15.3.0_59ac345/integration/nrfx/legacy | nRF5SDK153059ac345/nRF5_SDK_15.3.0_59ac345/integration/nrfx/legacy | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | Something interesting in file nrfx_timer.c, looks like a compile time evaluation may determine the size of an array of <code>time_control_block_t</code> types: | ||
+ | |||
+ | 64 static timer_control_block_t m_cb[NRFX_TIMER_ENABLED_COUNT]; | ||
+ | |||
+ | . . . sure enough, in <code>../include/nrfx_timer.h</code> there is an enum whose members are conditionally compiled. Clever!: | ||
+ | |||
+ | <pre> | ||
+ | enum { | ||
+ | #if NRFX_CHECK(NRFX_TIMER0_ENABLED) | ||
+ | NRFX_TIMER0_INST_IDX, | ||
+ | #endif | ||
+ | #if NRFX_CHECK(NRFX_TIMER1_ENABLED) | ||
+ | NRFX_TIMER1_INST_IDX, | ||
+ | #endif | ||
+ | #if NRFX_CHECK(NRFX_TIMER2_ENABLED) | ||
+ | NRFX_TIMER2_INST_IDX, | ||
+ | #endif | ||
+ | #if NRFX_CHECK(NRFX_TIMER3_ENABLED) | ||
+ | NRFX_TIMER3_INST_IDX, | ||
+ | #endif | ||
+ | #if NRFX_CHECK(NRFX_TIMER4_ENABLED) | ||
+ | NRFX_TIMER4_INST_IDX, | ||
+ | #endif | ||
+ | NRFX_TIMER_ENABLED_COUNT | ||
+ | }; | ||
</pre> | </pre> |
Revision as of 14:45, 25 April 2021
2021-04-25
Looking at some example code in nRF5SDK153059ac345/nRF5_SDK_15.3.0_59ac345/components/app_simple_timer.c
, there are routines to init, start, stop (pause) and to uninitialize. Given a task to assure that a Nordic chip goes into lower or lowest possible power mode, we'll first examine the 'stop' and 'uninit' routines in this Nordic demo code.
The routine uint32_t app_simple_timer_stop(void)
is a wrapper to nrf_drv_timer_pause(nrfx_timer_t const * const p_instance)
. Going through reverse engineering steps this routine is first defined via a macro:
./integration/nrfx/legacy/nrf_drv_timer.h:82:#define nrf_drv_timer_pause nrfx_timer_pause
The definition of nrfx_timer_pause()
is in the following .c file,
./modules/nrfx/drivers/include/nrfx_timer.h:186:void nrfx_timer_pause(nrfx_timer_t const * const p_instance); ./modules/nrfx/drivers/src/nrfx_timer.c:170:void nrfx_timer_pause(nrfx_timer_t const * const p_instance)
First Nordic demo code directories in which we're reviewing files:
nRF5SDK153059ac345/nRF5_SDK_15.3.0_59ac345/components/libraries/simple_timer nRF5SDK153059ac345/nRF5_SDK_15.3.0_59ac345/modules nRF5SDK153059ac345/nRF5_SDK_15.3.0_59ac345/modules/nrfx/drivers/include nRF5SDK153059ac345/nRF5_SDK_15.3.0_59ac345/modules/nrfx/drivers/src nRF5SDK153059ac345/nRF5_SDK_15.3.0_59ac345/integration/nrfx/legacy
Something interesting in file nrfx_timer.c, looks like a compile time evaluation may determine the size of an array of time_control_block_t
types:
64 static timer_control_block_t m_cb[NRFX_TIMER_ENABLED_COUNT];
. . . sure enough, in ../include/nrfx_timer.h
there is an enum whose members are conditionally compiled. Clever!:
enum { #if NRFX_CHECK(NRFX_TIMER0_ENABLED) NRFX_TIMER0_INST_IDX, #endif #if NRFX_CHECK(NRFX_TIMER1_ENABLED) NRFX_TIMER1_INST_IDX, #endif #if NRFX_CHECK(NRFX_TIMER2_ENABLED) NRFX_TIMER2_INST_IDX, #endif #if NRFX_CHECK(NRFX_TIMER3_ENABLED) NRFX_TIMER3_INST_IDX, #endif #if NRFX_CHECK(NRFX_TIMER4_ENABLED) NRFX_TIMER4_INST_IDX, #endif NRFX_TIMER_ENABLED_COUNT };