NOUP: stm32f3: rcc: provide async osc checks
replace bulky hardcoded wait for set and wait for clear with a single asynch routine. Leave the blocking routines in for compatibility at this point. NOUP: should be added to other rcc.c files too.
This commit is contained in:
@@ -587,6 +587,7 @@ void rcc_osc_ready_int_disable(enum rcc_osc osc);
|
|||||||
int rcc_osc_ready_int_flag(enum rcc_osc osc);
|
int rcc_osc_ready_int_flag(enum rcc_osc osc);
|
||||||
void rcc_css_int_clear(void);
|
void rcc_css_int_clear(void);
|
||||||
int rcc_css_int_flag(void);
|
int rcc_css_int_flag(void);
|
||||||
|
bool rcc_is_osc_ready(enum rcc_osc osc);
|
||||||
void rcc_wait_for_osc_ready(enum rcc_osc osc);
|
void rcc_wait_for_osc_ready(enum rcc_osc osc);
|
||||||
void rcc_wait_for_osc_not_ready(enum rcc_osc osc);
|
void rcc_wait_for_osc_not_ready(enum rcc_osc osc);
|
||||||
void rcc_wait_for_sysclk_status(enum rcc_osc osc);
|
void rcc_wait_for_sysclk_status(enum rcc_osc osc);
|
||||||
|
|||||||
@@ -176,47 +176,30 @@ int rcc_css_int_flag(void)
|
|||||||
return ((RCC_CIR & RCC_CIR_CSSF) != 0);
|
return ((RCC_CIR & RCC_CIR_CSSF) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rcc_wait_for_osc_ready(enum rcc_osc osc)
|
bool rcc_is_osc_ready(enum rcc_osc osc) {
|
||||||
{
|
|
||||||
switch (osc) {
|
switch (osc) {
|
||||||
case RCC_PLL:
|
case RCC_PLL:
|
||||||
while ((RCC_CR & RCC_CR_PLLRDY) == 0);
|
return (RCC_CR & RCC_CR_PLLRDY);
|
||||||
break;
|
|
||||||
case RCC_HSE:
|
case RCC_HSE:
|
||||||
while ((RCC_CR & RCC_CR_HSERDY) == 0);
|
return (RCC_CR & RCC_CR_HSERDY);
|
||||||
break;
|
|
||||||
case RCC_HSI:
|
case RCC_HSI:
|
||||||
while ((RCC_CR & RCC_CR_HSIRDY) == 0);
|
return (RCC_CR & RCC_CR_HSIRDY);
|
||||||
break;
|
|
||||||
case RCC_LSE:
|
case RCC_LSE:
|
||||||
while ((RCC_BDCR & RCC_BDCR_LSERDY) == 0);
|
return (RCC_BDCR & RCC_BDCR_LSERDY);
|
||||||
break;
|
|
||||||
case RCC_LSI:
|
case RCC_LSI:
|
||||||
while ((RCC_CSR & RCC_CSR_LSIRDY) == 0);
|
return (RCC_CSR & RCC_CSR_LSIRDY);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rcc_wait_for_osc_ready(enum rcc_osc osc)
|
||||||
|
{
|
||||||
|
while (!rcc_is_osc_ready(osc));
|
||||||
|
}
|
||||||
|
|
||||||
void rcc_wait_for_osc_not_ready(enum rcc_osc osc)
|
void rcc_wait_for_osc_not_ready(enum rcc_osc osc)
|
||||||
{
|
{
|
||||||
switch (osc) {
|
while (rcc_is_osc_ready(osc));
|
||||||
case RCC_PLL:
|
|
||||||
while ((RCC_CR & RCC_CR_PLLRDY) != 0);
|
|
||||||
break;
|
|
||||||
case RCC_HSE:
|
|
||||||
while ((RCC_CR & RCC_CR_HSERDY) != 0);
|
|
||||||
break;
|
|
||||||
case RCC_HSI:
|
|
||||||
while ((RCC_CR & RCC_CR_HSIRDY) != 0);
|
|
||||||
break;
|
|
||||||
case RCC_LSE:
|
|
||||||
while ((RCC_BDCR & RCC_BDCR_LSERDY) != 0);
|
|
||||||
break;
|
|
||||||
case RCC_LSI:
|
|
||||||
while ((RCC_CSR & RCC_CSR_LSIRDY) != 0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void rcc_wait_for_sysclk_status(enum rcc_osc osc)
|
void rcc_wait_for_sysclk_status(enum rcc_osc osc)
|
||||||
|
|||||||
Reference in New Issue
Block a user