Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-dev by
targets/TARGET_NORDIC/TARGET_NRF5x/TARGET_NRF51/lp_ticker.c@186:707f6e361f3e, 2018-06-22 (annotated)
- Committer:
- Anna Bridge
- Date:
- Fri Jun 22 16:45:37 2018 +0100
- Revision:
- 186:707f6e361f3e
mbed-dev library. Release version 162
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Anna Bridge |
186:707f6e361f3e | 1 | /* mbed Microcontroller Library |
Anna Bridge |
186:707f6e361f3e | 2 | * Copyright (c) 2015 ARM Limited |
Anna Bridge |
186:707f6e361f3e | 3 | * |
Anna Bridge |
186:707f6e361f3e | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
Anna Bridge |
186:707f6e361f3e | 5 | * you may not use this file except in compliance with the License. |
Anna Bridge |
186:707f6e361f3e | 6 | * You may obtain a copy of the License at |
Anna Bridge |
186:707f6e361f3e | 7 | * |
Anna Bridge |
186:707f6e361f3e | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
Anna Bridge |
186:707f6e361f3e | 9 | * |
Anna Bridge |
186:707f6e361f3e | 10 | * Unless required by applicable law or agreed to in writing, software |
Anna Bridge |
186:707f6e361f3e | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
Anna Bridge |
186:707f6e361f3e | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
Anna Bridge |
186:707f6e361f3e | 13 | * See the License for the specific language governing permissions and |
Anna Bridge |
186:707f6e361f3e | 14 | * limitations under the License. |
Anna Bridge |
186:707f6e361f3e | 15 | */ |
Anna Bridge |
186:707f6e361f3e | 16 | #include "lp_ticker_api.h" |
Anna Bridge |
186:707f6e361f3e | 17 | #include "common_rtc.h" |
Anna Bridge |
186:707f6e361f3e | 18 | #include "platform/mbed_critical.h" |
Anna Bridge |
186:707f6e361f3e | 19 | |
Anna Bridge |
186:707f6e361f3e | 20 | #if DEVICE_LPTICKER |
Anna Bridge |
186:707f6e361f3e | 21 | |
Anna Bridge |
186:707f6e361f3e | 22 | /* LP ticker is driven by 32kHz clock and counter length is 24 bits. */ |
Anna Bridge |
186:707f6e361f3e | 23 | const ticker_info_t* lp_ticker_get_info() |
Anna Bridge |
186:707f6e361f3e | 24 | { |
Anna Bridge |
186:707f6e361f3e | 25 | static const ticker_info_t info = { |
Anna Bridge |
186:707f6e361f3e | 26 | RTC_FREQ, |
Anna Bridge |
186:707f6e361f3e | 27 | RTC_COUNTER_BITS |
Anna Bridge |
186:707f6e361f3e | 28 | }; |
Anna Bridge |
186:707f6e361f3e | 29 | return &info; |
Anna Bridge |
186:707f6e361f3e | 30 | } |
Anna Bridge |
186:707f6e361f3e | 31 | |
Anna Bridge |
186:707f6e361f3e | 32 | void lp_ticker_init(void) |
Anna Bridge |
186:707f6e361f3e | 33 | { |
Anna Bridge |
186:707f6e361f3e | 34 | common_rtc_init(); |
Anna Bridge |
186:707f6e361f3e | 35 | } |
Anna Bridge |
186:707f6e361f3e | 36 | |
Anna Bridge |
186:707f6e361f3e | 37 | void lp_ticker_free(void) |
Anna Bridge |
186:707f6e361f3e | 38 | { |
Anna Bridge |
186:707f6e361f3e | 39 | // A common counter is used for RTC, lp_ticker and us_ticker, so it can't be |
Anna Bridge |
186:707f6e361f3e | 40 | // disabled here, but this does not cause any extra cost. |
Anna Bridge |
186:707f6e361f3e | 41 | } |
Anna Bridge |
186:707f6e361f3e | 42 | |
Anna Bridge |
186:707f6e361f3e | 43 | uint32_t lp_ticker_read() |
Anna Bridge |
186:707f6e361f3e | 44 | { |
Anna Bridge |
186:707f6e361f3e | 45 | return nrf_rtc_counter_get(COMMON_RTC_INSTANCE); |
Anna Bridge |
186:707f6e361f3e | 46 | } |
Anna Bridge |
186:707f6e361f3e | 47 | |
Anna Bridge |
186:707f6e361f3e | 48 | void lp_ticker_set_interrupt(timestamp_t timestamp) |
Anna Bridge |
186:707f6e361f3e | 49 | { |
Anna Bridge |
186:707f6e361f3e | 50 | common_rtc_set_interrupt(timestamp, |
Anna Bridge |
186:707f6e361f3e | 51 | LP_TICKER_CC_CHANNEL, LP_TICKER_INT_MASK); |
Anna Bridge |
186:707f6e361f3e | 52 | } |
Anna Bridge |
186:707f6e361f3e | 53 | |
Anna Bridge |
186:707f6e361f3e | 54 | void lp_ticker_fire_interrupt(void) |
Anna Bridge |
186:707f6e361f3e | 55 | { |
Anna Bridge |
186:707f6e361f3e | 56 | core_util_critical_section_enter(); |
Anna Bridge |
186:707f6e361f3e | 57 | |
Anna Bridge |
186:707f6e361f3e | 58 | lp_ticker_interrupt_fire = true; |
Anna Bridge |
186:707f6e361f3e | 59 | |
Anna Bridge |
186:707f6e361f3e | 60 | NVIC_SetPendingIRQ(RTC1_IRQn); |
Anna Bridge |
186:707f6e361f3e | 61 | |
Anna Bridge |
186:707f6e361f3e | 62 | core_util_critical_section_exit(); |
Anna Bridge |
186:707f6e361f3e | 63 | } |
Anna Bridge |
186:707f6e361f3e | 64 | |
Anna Bridge |
186:707f6e361f3e | 65 | void lp_ticker_disable_interrupt(void) |
Anna Bridge |
186:707f6e361f3e | 66 | { |
Anna Bridge |
186:707f6e361f3e | 67 | nrf_rtc_int_disable(COMMON_RTC_INSTANCE, LP_TICKER_INT_MASK); |
Anna Bridge |
186:707f6e361f3e | 68 | } |
Anna Bridge |
186:707f6e361f3e | 69 | |
Anna Bridge |
186:707f6e361f3e | 70 | void lp_ticker_clear_interrupt(void) |
Anna Bridge |
186:707f6e361f3e | 71 | { |
Anna Bridge |
186:707f6e361f3e | 72 | nrf_rtc_event_clear(COMMON_RTC_INSTANCE, LP_TICKER_EVENT); |
Anna Bridge |
186:707f6e361f3e | 73 | } |
Anna Bridge |
186:707f6e361f3e | 74 | |
Anna Bridge |
186:707f6e361f3e | 75 | #endif // DEVICE_LPTICKER |