mbed-os v5.9 LPTICKER implementation

pull/7009/head
Jesse Marroquin 2018-05-17 14:46:36 -05:00 committed by Bartek Szatkowski
parent b88329acb8
commit 0ddec48efc
4 changed files with 65 additions and 38 deletions

View File

@ -147,14 +147,23 @@ time_t rtc_read(void)
//******************************************************************************
void lp_ticker_init(void)
{
if (lp_ticker_inited) {
return;
}
RTC_DisableINT(MXC_F_RTC_INTEN_COMP0);
NVIC_SetVector(RTC0_IRQn, (uint32_t)lp_ticker_irq_handler);
NVIC_EnableIRQ(RTC0_IRQn);
init_rtc();
lp_ticker_inited = 1;
}
//******************************************************************************
void lp_ticker_free(void)
{
// Disable interrupt associated with LPTICKER API
RTC_DisableINT(MXC_F_RTC_INTEN_COMP0);
// RTC hardware is shared by LPTICKER and RTC APIs.
// Prior initialization of the RTC API gates disabling the RTC hardware.
if (!(MXC_RTCTMR->inten & MXC_F_RTC_INTEN_OVERFLOW)) {
RTC_Stop();
}
}
//******************************************************************************
@ -167,13 +176,13 @@ uint32_t lp_ticker_read(void)
void lp_ticker_set_interrupt(timestamp_t timestamp)
{
MXC_RTCTMR->comp[0] = timestamp;
MXC_RTCTMR->flags = MXC_F_RTC_FLAGS_ASYNC_CLR_FLAGS;
MXC_RTCTMR->inten |= MXC_F_RTC_INTEN_COMP0;
MXC_RTCTMR->flags = MXC_F_RTC_FLAGS_COMP0;
RTC_EnableINT(MXC_F_RTC_INTEN_COMP0);
// Enable wakeup from RTC compare 0
LP_ConfigRTCWakeUp(1, 0, 0, rtc_inited);
// Enable as LP wakeup source
MXC_PWRSEQ->msk_flags |= MXC_F_PWRSEQ_FLAGS_RTC_CMPR0;
// Wait for pending transactions
// Postponed write pending wait for comp0 and flags
while (MXC_RTCTMR->ctrl & MXC_F_RTC_CTRL_PENDING);
}
@ -186,7 +195,7 @@ void lp_ticker_disable_interrupt(void)
//******************************************************************************
void lp_ticker_clear_interrupt(void)
{
RTC_ClearFlags(MXC_F_RTC_FLAGS_ASYNC_CLR_FLAGS);
RTC_ClearFlags(MXC_F_RTC_FLAGS_COMP0);
}
//******************************************************************************

View File

@ -147,14 +147,23 @@ time_t rtc_read(void)
//******************************************************************************
void lp_ticker_init(void)
{
if (lp_ticker_inited) {
return;
}
RTC_DisableINT(MXC_F_RTC_INTEN_COMP0);
NVIC_SetVector(RTC0_IRQn, (uint32_t)lp_ticker_irq_handler);
NVIC_EnableIRQ(RTC0_IRQn);
init_rtc();
lp_ticker_inited = 1;
}
//******************************************************************************
void lp_ticker_free(void)
{
// Disable interrupt associated with LPTICKER API
RTC_DisableINT(MXC_F_RTC_INTEN_COMP0);
// RTC hardware is shared by LPTICKER and RTC APIs.
// Prior initialization of the RTC API gates disabling the RTC hardware.
if (!(MXC_RTCTMR->inten & MXC_F_RTC_INTEN_OVERFLOW)) {
RTC_Stop();
}
}
//******************************************************************************
@ -167,13 +176,13 @@ uint32_t lp_ticker_read(void)
void lp_ticker_set_interrupt(timestamp_t timestamp)
{
MXC_RTCTMR->comp[0] = timestamp;
MXC_RTCTMR->flags = MXC_F_RTC_FLAGS_ASYNC_CLR_FLAGS;
MXC_RTCTMR->inten |= MXC_F_RTC_INTEN_COMP0;
MXC_RTCTMR->flags = MXC_F_RTC_FLAGS_COMP0;
RTC_EnableINT(MXC_F_RTC_INTEN_COMP0);
// Enable wakeup from RTC compare 0
LP_ConfigRTCWakeUp(1, 0, 0, rtc_inited);
// Enable as LP wakeup source
MXC_PWRSEQ->msk_flags |= MXC_F_PWRSEQ_FLAGS_RTC_CMPR0;
// Wait for pending transactions
// Postponed write pending wait for comp0 and flags
while (MXC_RTCTMR->ctrl & MXC_F_RTC_CTRL_PENDING);
}
@ -186,7 +195,7 @@ void lp_ticker_disable_interrupt(void)
//******************************************************************************
void lp_ticker_clear_interrupt(void)
{
RTC_ClearFlags(MXC_F_RTC_FLAGS_ASYNC_CLR_FLAGS);
RTC_ClearFlags(MXC_F_RTC_FLAGS_COMP0);
}
//******************************************************************************

View File

@ -109,8 +109,8 @@ void rtc_free(void)
if (lp_ticker_inited) {
RTC_DisableINT(MXC_F_RTC_FLAGS_OVERFLOW);
} else {
MXC_RTCTMR->ctrl |= MXC_F_RTC_CTRL_CLEAR;
RTC_Stop();
MXC_RTCTMR->ctrl |= MXC_F_RTC_CTRL_CLEAR;
RTC_Stop();
}
}
}
@ -147,14 +147,23 @@ time_t rtc_read(void)
//******************************************************************************
void lp_ticker_init(void)
{
if (lp_ticker_inited) {
return;
}
RTC_DisableINT(MXC_F_RTC_INTEN_COMP0);
NVIC_SetVector(RTC0_IRQn, (uint32_t)lp_ticker_irq_handler);
NVIC_EnableIRQ(RTC0_IRQn);
init_rtc();
lp_ticker_inited = 1;
}
//******************************************************************************
void lp_ticker_free(void)
{
// Disable interrupt associated with LPTICKER API
RTC_DisableINT(MXC_F_RTC_INTEN_COMP0);
// RTC hardware is shared by LPTICKER and RTC APIs.
// Prior initialization of the RTC API gates disabling the RTC hardware.
if (!(MXC_RTCTMR->inten & MXC_F_RTC_INTEN_OVERFLOW)) {
RTC_Stop();
}
}
//******************************************************************************
@ -167,13 +176,13 @@ uint32_t lp_ticker_read(void)
void lp_ticker_set_interrupt(timestamp_t timestamp)
{
MXC_RTCTMR->comp[0] = timestamp;
MXC_RTCTMR->flags = MXC_F_RTC_FLAGS_ASYNC_CLR_FLAGS;
MXC_RTCTMR->inten |= MXC_F_RTC_INTEN_COMP0;
MXC_RTCTMR->flags = MXC_F_RTC_FLAGS_COMP0;
RTC_EnableINT(MXC_F_RTC_INTEN_COMP0);
// Enable wakeup from RTC compare 0
LP_ConfigRTCWakeUp(1, 0, 0, rtc_inited);
// Enable as LP wakeup source
MXC_PWRSEQ->msk_flags |= MXC_F_PWRSEQ_FLAGS_RTC_CMPR0;
// Wait for pending transactions
// Postponed write pending wait for comp0 and flags
while (MXC_RTCTMR->ctrl & MXC_F_RTC_CTRL_PENDING);
}
@ -186,7 +195,7 @@ void lp_ticker_disable_interrupt(void)
//******************************************************************************
void lp_ticker_clear_interrupt(void)
{
RTC_ClearFlags(MXC_F_RTC_FLAGS_ASYNC_CLR_FLAGS);
RTC_ClearFlags(MXC_F_RTC_FLAGS_COMP0);
}
//******************************************************************************

View File

@ -2858,7 +2858,7 @@
"macros": ["TARGET=MAX32625","TARGET_REV=0x4132", "OPEN_DRAIN_LEDS"],
"extra_labels": ["Maxim", "MAX32625"],
"supported_toolchains": ["GCC_ARM", "IAR", "ARM"],
"device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "STDIO_MESSAGES", "USTICKER"],
"device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "STDIO_MESSAGES", "USTICKER"],
"release_versions": ["2", "5"],
"public": false
},
@ -2893,9 +2893,9 @@
"macros": ["__SYSTEM_HFX=96000000", "TARGET=MAX32630", "TARGET_REV=0x4132", "BLE_HCI_UART", "OPEN_DRAIN_LEDS"],
"extra_labels": ["Maxim", "MAX32630"],
"supported_toolchains": ["GCC_ARM", "IAR", "ARM"],
"device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "STDIO_MESSAGES", "USTICKER"],
"device_has": ["ANALOGIN", "I2C", "INTERRUPTIN", "LPTICKER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "STDIO_MESSAGES", "USTICKER"],
"features": ["BLE"],
"release_versions": []
"release_versions": ["2", "5"]
},
"EFM32": {
"inherits": ["Target"],