mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
Diff: targets/TARGET_NXP/TARGET_LPC176X/us_ticker.c
- Revision:
- 186:707f6e361f3e
- Parent:
- 174:b96e65c34a4d
- Child:
- 188:bcfe06ba3d64
--- a/targets/TARGET_NXP/TARGET_LPC176X/us_ticker.c Thu Apr 19 17:12:19 2018 +0100 +++ b/targets/TARGET_NXP/TARGET_LPC176X/us_ticker.c Fri Jun 22 16:45:37 2018 +0100 @@ -17,34 +17,44 @@ #include "us_ticker_api.h" #include "PeripheralNames.h" +const ticker_info_t* us_ticker_get_info() +{ + static const ticker_info_t info = { + 1000000, // 1 MHz + 32 // 32 bit counter + }; + return &info; +} + +static bool us_ticker_inited = false; + #define US_TICKER_TIMER ((LPC_TIM_TypeDef *)LPC_TIM3_BASE) #define US_TICKER_TIMER_IRQn TIMER3_IRQn -int us_ticker_inited = 0; +void us_ticker_init(void) { + if (us_ticker_inited) { + /* calling init again should cancel current interrupt */ + us_ticker_disable_interrupt(); + return; + } + us_ticker_inited = true; -void us_ticker_init(void) { - if (us_ticker_inited) return; - us_ticker_inited = 1; - LPC_SC->PCONP |= 1 << 23; // Clock TIMER_3 - + US_TICKER_TIMER->CTCR = 0x0; // timer mode uint32_t PCLK = SystemCoreClock / 4; - + US_TICKER_TIMER->TCR = 0x2; // reset - + uint32_t prescale = PCLK / 1000000; // default to 1MHz (1 us ticks) US_TICKER_TIMER->PR = prescale - 1; US_TICKER_TIMER->TCR = 1; // enable = 1, reset = 0 - + NVIC_SetVector(US_TICKER_TIMER_IRQn, (uint32_t)us_ticker_irq_handler); NVIC_EnableIRQ(US_TICKER_TIMER_IRQn); } uint32_t us_ticker_read() { - if (!us_ticker_inited) - us_ticker_init(); - return US_TICKER_TIMER->TC; }