diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/us_ticker.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/us_ticker.c index f7469a9c50..ee0090336c 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/us_ticker.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC/us_ticker.c @@ -18,6 +18,14 @@ #include "fsl_ctimer.h" #include "PeripheralNames.h" +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define CTIMER CTIMER0 +#define CTIMER_IRQn CTIMER0_IRQn +#else +#define CTIMER CTIMER1 +#define CTIMER_IRQn CTIMER1_IRQn +#endif + const ticker_info_t* us_ticker_get_info() { static const ticker_info_t info = { @@ -47,13 +55,13 @@ void us_ticker_init(void) { CTIMER_GetDefaultConfig(&config); config.prescale = prescale - 1; - CTIMER_Init(CTIMER1, &config); - CTIMER_Reset(CTIMER1); - CTIMER_StartTimer(CTIMER1); + CTIMER_Init(CTIMER, &config); + CTIMER_Reset(CTIMER); + CTIMER_StartTimer(CTIMER); } - NVIC_SetVector(CTIMER1_IRQn, (uint32_t)us_ticker_irq_handler); - NVIC_EnableIRQ(CTIMER1_IRQn); - CTIMER1->MCR &= ~1; + NVIC_SetVector(CTIMER_IRQn, (uint32_t)us_ticker_irq_handler); + NVIC_EnableIRQ(CTIMER_IRQn); + CTIMER->MCR &= ~1; us_ticker_inited = true; } @@ -63,7 +71,7 @@ void us_ticker_init(void) { * @return The current timer's counter value in ticks */ uint32_t us_ticker_read(void) { - return CTIMER1->TC; + return CTIMER->TC; } /** Set interrupt for specified timestamp @@ -80,32 +88,32 @@ void us_ticker_set_interrupt(timestamp_t timestamp) { matchConfig.outPinInitState = true; matchConfig.enableInterrupt = true; - CTIMER_SetupMatch(CTIMER1, kCTIMER_Match_0, &matchConfig); + CTIMER_SetupMatch(CTIMER, kCTIMER_Match_0, &matchConfig); } /** Disable us ticker interrupt * */ void us_ticker_disable_interrupt(void) { - CTIMER1->MCR &= ~1; + CTIMER->MCR &= ~1; } /** Clear us ticker interrupt * */ void us_ticker_clear_interrupt(void) { - CTIMER1->IR = 1; + CTIMER->IR = 1; } void us_ticker_fire_interrupt(void) { - NVIC_SetPendingIRQ(CTIMER1_IRQn); + NVIC_SetPendingIRQ(CTIMER_IRQn); } void us_ticker_free(void) { - CTIMER_StopTimer(CTIMER1); - CTIMER1->MCR &= ~1; - NVIC_DisableIRQ(CTIMER1_IRQn); + CTIMER_StopTimer(CTIMER); + CTIMER->MCR &= ~1; + NVIC_DisableIRQ(CTIMER_IRQn); us_ticker_inited = false; } diff --git a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/mbed_overrides.c b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/mbed_overrides.c index e02a69de20..44d28887fa 100644 --- a/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/mbed_overrides.c +++ b/targets/TARGET_NXP/TARGET_MCUXpresso_MCUS/TARGET_LPC55S69/TARGET_LPCXpresso/mbed_overrides.c @@ -35,9 +35,15 @@ void rtc_setup_oscillator(void) uint32_t us_ticker_get_clock() { +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + /* Use 12 MHz clock us ticker timer */ + CLOCK_AttachClk(kFRO_HF_to_CTIMER0); + return CLOCK_GetFreq(kCLOCK_CTmier0);; +#else /* Use 12 MHz clock us ticker timer */ CLOCK_AttachClk(kFRO_HF_to_CTIMER1); return CLOCK_GetFreq(kCLOCK_CTmier1);; +#endif } void sdio_clock_setup(void)