Commit Graph

53 Commits (73b7e450e782a8a2c1981b345c1f0d950d14bad2)

Author SHA1 Message Date
Maciej Bocianski 8db3b40a7b STM: change rtc irq handler name
Fix for the error caused by lto on armc6 compiler:

L6137E: Symbol RTC_IRQHandler was not preserved by the LTO codegen but is needed by the image.

lto optimization cause that local symbol RTC_IRQHandler(from rtc_api.c)
somehow interferes with global symbol RTC_IRQHandler (from startup_stm32f070xb.S)

Changing local RTC_IRQHandler to _RTC_IRQHandler fixes problem
2020-02-04 12:29:52 +01:00
jeromecoutant c1386cf52d STM32L5 : update generic STM files for L5 2020-01-23 17:54:55 +01:00
Alexandre Bourdiol affe7113ef TARGET_STM: Remove timeout on HSEM.
With tickless mechanism hsem can be used for quite a long time
(time to set up PLL clock).
Also, if hsem is held to long, then this is not the current core which is faulty,
but probably the other (the one which hold the HSEM)
2019-11-27 14:25:43 +01:00
Alexandre Bourdiol adcf0e2fa5 DISCO_H747I Dualcore support
Add 2 targets for DISCO_H747I dualcore:
* DISCO_H747I      -> for CM7 core
* DISCO_H747I_CM4  -> for CM4 core

Current restrictions:
* TICKLESS deactivated
* DeepSleep not supported (DeepSleep wrapped to sleep)

Warning: use of the same IP (example I2C1) by both core at the same time is not prevented,
but is strongly not recommended.
Some Hardware Semaphore are use for common IP, to manage concurrent access by both cores: Flash, GPIO, RCC.

Warning: Drag and drop of binary to DISCO_H747I will flash CM7.
         In order to flash CM4, one can use STM32 CubeProgrammer tool.
2019-10-14 18:02:57 +02:00
jeromecoutant 8c1f94f7cb STM32WB : LSI clock selection when LSE is not available 2019-09-19 13:07:54 +02:00
Kevin Bracey 535b439362 Revert "STM32 RTC : skip rtc_write if possible"
`rtc_write` must start the RTC. `time()` uses `rtc_write(0)` to start
the RTC if it is not already enabled, but this check made that not
work.

There's no point trying to optimise this case in a HAL - if we wanted
`set_time()` to protect against users making pointless adjustments, the
implementation should be there. But even then, you might want different
levels of hysteresis depending on application, so it's probably best
left to applications.

This reverts commit 9da5e48941.
2018-12-21 13:12:34 +02:00
Martin Kojtal 99778bd6a5
Merge pull request #8777 from jeromecoutant/PR_LP_RTC
STM32 LPTICKER with RTC : better sleep time
2018-12-20 10:26:44 +00:00
jeromecoutant 6b226ffcef STM32 RTC update for easy maintenance 2018-12-04 11:08:30 +01:00
jeromecoutant 25e69171d8 STM32 LPTICKER with RTC : optimise sleep duration 2018-11-30 14:04:03 +01:00
jeromecoutant 9da5e48941 STM32 RTC : skip rtc_write if possible 2018-11-30 10:08:27 +01:00
Cruz Monrreal ebff1e553b
Merge pull request #8213 from jeromecoutant/PR_RTC_F1
STM32F1 RTC : save values in register
2018-10-10 15:46:26 -05:00
Martin Kojtal 18d613111f
Merge pull request #8286 from jeromecoutant/PR_RTCWRITE
STM32 RTC : write RTC time while LPTICKER is enabled
2018-10-09 10:33:37 -05:00
Martin Kojtal baada0e783
Merge pull request #8242 from jeromecoutant/PR_STM32_LPTICKER
STM32 LPTICKER : Fix tickless and LPTICKER_DELAY_TICKS
2018-10-05 22:23:09 +02:00
jeromecoutant 83caa049ca STM32 RTC : write RTC time while LPTICKER is enabled
This fix avoid a long waiting loop in rtc_write function,
  which was not acceptable in TICKLESS context.

Implementation comments added.

Global variable name has been updated for easier maintenance:
- LPTICKER_counter is the U32 continuous tick counter
- LPTICKER_RTC_time is the RTC time used to get the time difference
   between rtc_read_lp() calls
2018-10-04 15:30:49 +02:00
jeromecoutant 9bc2e5a5ad STM32 LPTICKER with RTC : Fix tickless and lp wrapper
When both tickless and LPTICKER_DELAY_TICKS are enabled some ST
devices randomly get stuck sleeping forever. This is because the
wake up time passed to the rtc is ignored if the previous match is
about to occur. This causes the device to get stuck in sleep.

This patch prevents matches from getting dropped by the rtc by
deactivating the rtc wake up timer before setting a new value.

Events leading up to this failure for the RTC:

-1st call to lp_ticker_set_interrupt
-delay until ticker interrupt is about to fire
-2nd call to lp_ticker_set_interrupt
-interrupt for 1st call fires and match time for 2nd call is dropped
-LowPowerTickerWrapper gets ticker interrupt but treats it as a
 spurious interrupt and drops it since it comes in too early
-device enters sleep without a wakeup source and locks up
2018-09-27 14:31:36 +02:00
jeromecoutant e8d32ca0f9 STM32F1 RTC : save values in register
Date is managed only by SW
  within CUBE functions HAL_RTC_GetDate and HAL_RTC_SetDate.
They are then replaced by functions that saved counters in HW registers.
RTC_ReadTimeCounter and RTC_WriteTimeCounter are then added to the ST API.
2018-09-25 13:45:59 +02:00
jeromecoutant 827c8bd486 STM32 RTC : remove not necessary macro
__HAL_RCC_RTC_CLKPRESCALER is called in __HAL_RCC_RTC_CONFIG
2018-09-11 14:14:19 +02:00
jeromecoutant 5c46bec4d4 STM32 RTC with LSI : stop reset registers during init 2018-09-11 14:13:43 +02:00
Martin Kojtal d28d13cc9b
Merge pull request #7790 from jeromecoutant/PR_LPTICKER_RTC
STM32 LPTICKER : RTC wake up timer is reset before setting a new one
2018-08-22 14:04:58 +02:00
jeromecoutant a0fa0b6a5a STM32 RTC : remove compilation warning with unused variable 2018-08-14 14:00:25 +02:00
jeromecoutant e455d74f3d STM32 : Sunday value is different for STM32F1 2018-08-13 17:04:56 +02:00
jeromecoutant 1052993236 STM32 RTC : bypass shadow registers
- RTC_SSR for the subseconds
- RTC_TR for the time
- RTC_DR for the date

These registers were accessed through shadow registers which are synchronized with PCLK1 (APB1 clock).
They are now accessed directly in order to avoid waiting for the synchronization duration.
2018-07-11 10:08:02 +02:00
jeromecoutant 433ba46132 TARGET_STM astyle 2018-06-27 14:21:07 +02:00
jeromecoutant e3deaecc27 STM32 LPTICKER update for targets supporting RTC 2018-05-25 12:29:54 -05:00
jeromecoutant 39a9801675 STM32 LPTICKER : clean include file 2018-05-25 12:29:54 -05:00
jeromecoutant 1c4174d3eb STM32 RTC Init minor update 2018-05-25 12:26:05 -05:00
Bartek Szatkowski 6e9f04bf2f Rename DEVICE_LOWPOWERTIMER to DEVICE_LPTICKER
That's to match DEVICE_USTICKER.
2018-05-25 12:20:09 -05:00
jeromecoutant 7b5a79f56e STM32 RTC Init minor update 2018-04-24 13:50:57 +02:00
Cruz Monrreal d7dfab5c7e
Merge pull request #6370 from jeromecoutant/PR_LPT_RTC_OPTIM
STM32 LPTICKER : optimize RTC wake up timer init
2018-03-20 14:19:07 -05:00
jeromecoutant 882f3312c3 STM32 LPTICKER : optimize RTC wake up timer init
Division in a while loop is removed
2018-03-15 14:23:57 +01:00
jeromecoutant 2f86b3a7bb STM32 RTC init
When LSE is configured for RTC, LSI is not affected
2018-03-14 11:12:29 +01:00
jeromecoutant 961c8da51c STM32F1 RTC : Date read after reset
F1 is the only STM32 family where RTC date is not saved into registers
2018-02-27 11:02:49 +01:00
jeromecoutant 45cbdc889f STM32 RTC : update free function
- LSI specific implementation is removed

- Remove RTC clock disable
2018-02-27 10:45:43 +01:00
jeromecoutant 9fb865ae57 STM32 LPT optimisation 2018-01-16 15:16:13 +01:00
jeromecoutant a816e93e9a STM32 LOWPOWERTIMER : introduce LPTIM feature
STM32L0, L4, F7 and few F4 chip are supporting LPTIM feature.
We propose to allow user to use LPTIM for MBED LowPowerTimer API instead of using RTC wakeup timers.

By default, all targets that are supporting this feature have been configured.
2018-01-09 14:10:14 +01:00
jeromecoutant 8c662132f4 STM32 : issue to exit deepsleep when RTC has not been initialized 2017-12-21 10:50:47 +01:00
Martin Kojtal be52ba2156
Merge pull request #5363 from mprse/extended_rtc
Add support and tests for extended RTC
2017-12-12 17:36:44 +00:00
jeromecoutant 17a54840c7 STM32 RTC : update and comment prescaler values 2017-12-05 12:52:52 +01:00
Przemyslaw Stekiel 106561669f Update RTC drivers for extended RTC. 2017-12-05 07:54:02 +01:00
jeromecoutant 01b2b1baf3 STM32: RTC_LSI macro is replaced by lse_available config 2017-12-04 17:35:31 +01:00
jeromecoutant 354ed44a65 STM32 LOW_POWER_TIMER update : use error 2017-12-04 17:35:30 +01:00
jeromecoutant 85c337d0b9 STM32 LOW_POWER_TIMER update : rtc_init procedure 2017-12-04 17:35:29 +01:00
jeromecoutant 0bf364ea55 STM32 LOW_POWER_TIMER update : rtc_api.c
Add RSF synchro during init
Set a better WakeUp clock for long wake up period in order to stay in sleep mode
Use rtc_isenabled function before init as rtc_init is called at each set_time call
2017-12-04 17:35:28 +01:00
Jimmy Brisson 410ef0cc6c Merge pull request #5289 from LMESTM/test_api_ticker
STM32: RTC: Call irq_handler whenever interrupt fires
2017-10-13 09:28:18 -05:00
Laurent MEUNIER e15ebd3c53 STM32: RTC: Call irq_handler whenever interrupt fires
lp_ticker driver is the known registered user of RTC handler API.

In case, a lp_ticker is set in the past, the lp_ticker_fire_interrupt
will be called which itself sets the RTC interrupt as pending by calling
NVIC_SetPendingIRQ(RTC_WKUP_IRQn). This all happens without actual
programing of the RTC wake-up.

As a result the RTC HW and corresponding HAL layer doesn't expect an
interrupt to happen and will not call HAL_RTCEx_WakeUpTimerEventCallback.

To sove this situation, we will not use HAL_RTCEx_WakeUpTimerEventCallback
weak definition but rather call handler whenever an RTC interrupt fires.
2017-10-10 17:05:45 +02:00
bcostm 992722df2a Initialize State variable 2017-10-10 16:47:05 +02:00
bcostm c571d8d6f8 STM32 RTC: initializes structures 2017-10-10 16:23:35 +02:00
Sam Grove 547320e99c Rename function st_rtc_localtime with _rtc_localtime 2017-06-07 23:24:48 -05:00
Vincent Coubard f880e44145 remove usage of mktime/localtime in favor of dedicated functions.
The use of mktime was causing a fault when called in interrupt handler because on GCC it lock the mutex protecting the environment, To overcome this issue, this patch add dedicated routine to convert a time_t into a tm and vice versa.
In the process mktime has been optimized and is now an order of magnitude faster than the routines present in the C library.
2017-06-07 22:06:22 -05:00
Laurent MEUNIER 675d78d180 STM32 remove usage of deprecated MACROs 2017-05-09 16:48:34 +02:00