Override HAL_Delay and HAL_GetTick
This commit is contained in:
parent
a0977cac7b
commit
ad0971fb25
|
@ -37,7 +37,7 @@
|
|||
#ifndef CPY_CLK_PLLN
|
||||
#define CPY_CLK_PLLN (336)
|
||||
#endif
|
||||
#ifndef (CPY_CLK_PLLP
|
||||
#ifndef CPY_CLK_PLLP
|
||||
#define CPY_CLK_PLLP (RCC_PLLP_DIV4)
|
||||
#endif
|
||||
#ifndef CPY_CLK_PLLQ
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
// Note - the actual maximum frequency is 100MHz, but this requires divisors
|
||||
// which are incompatible with USB, and there is no additional PLL such as on
|
||||
// the F412.
|
||||
// the F412.
|
||||
|
||||
// Defaults:
|
||||
#ifndef CPY_CLK_VSCALE
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
// Line Type: Access Line
|
||||
// Speed: 200MHz (MAX)
|
||||
|
||||
// Note - uses the I2S PLL for SUSB to enable full 100MHz operation, since USB
|
||||
// Note - uses the I2S PLL for SUSB to enable full 100MHz operation, since USB
|
||||
// can't get the right divisors from 100MHz PLL settings.
|
||||
|
||||
// Defaults:
|
||||
|
|
|
@ -120,4 +120,4 @@ void stm32_peripherals_clocks_init(void) {
|
|||
if (lse_failure) {
|
||||
reset_into_safe_mode(HARD_CRASH); //TODO: make safe mode category CLOCK_FAULT?
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -147,9 +147,10 @@ __attribute__((used, naked)) void Reset_Handler(void) {
|
|||
__enable_irq();
|
||||
main();
|
||||
}
|
||||
|
||||
#endif //end H7 specific code
|
||||
|
||||
// Low power clock variables
|
||||
static volatile uint32_t systick_ms;
|
||||
static RTC_HandleTypeDef _hrtc;
|
||||
|
||||
#if BOARD_HAS_LOW_SPEED_CRYSTAL
|
||||
|
@ -159,7 +160,7 @@ static uint32_t rtc_clock_frequency = LSI_VALUE;
|
|||
#endif
|
||||
|
||||
safe_mode_t port_init(void) {
|
||||
HAL_Init();
|
||||
HAL_Init(); // Turns on SysTick
|
||||
__HAL_RCC_SYSCFG_CLK_ENABLE();
|
||||
|
||||
#if (CPY_STM32F4)
|
||||
|
@ -182,13 +183,38 @@ safe_mode_t port_init(void) {
|
|||
HAL_RTC_Init(&_hrtc);
|
||||
HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn);
|
||||
|
||||
// Turn off SysTick
|
||||
SysTick->CTRL = 0;
|
||||
|
||||
return NO_SAFE_MODE;
|
||||
}
|
||||
|
||||
void HAL_Delay(uint32_t delay_ms) {
|
||||
if (SysTick->CTRL != 0) {
|
||||
// SysTick is on, so use it
|
||||
uint32_t tickstart = systick_ms;
|
||||
while (systick_ms - tickstart < delay_ms) {
|
||||
}
|
||||
} else {
|
||||
mp_hal_delay_ms(delay_ms);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t HAL_GetTick() {
|
||||
if (SysTick->CTRL != 0) {
|
||||
return systick_ms;
|
||||
} else {
|
||||
uint8_t subticks;
|
||||
uint32_t result = (uint32_t)port_get_raw_ticks(&subticks);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SysTick_Handler(void) {
|
||||
systick_ms += 1;
|
||||
// Read the CTRL register to clear the SysTick interrupt.
|
||||
SysTick->CTRL;
|
||||
HAL_IncTick();
|
||||
}
|
||||
|
||||
void reset_port(void) {
|
||||
|
|
Loading…
Reference in New Issue