fix sytick drift after tickless wakeup from sleep or stop

1. make port_systick_reload the same as port_systick_config
This commit is contained in:
daishengdong
2020-04-28 16:23:57 +08:00
parent efaa24a5c8
commit b13634de77
23 changed files with 22 additions and 262 deletions

View File

@@ -59,17 +59,7 @@ __PORT__ void port_systick_suspend(void)
__PORT__ void port_systick_reload(uint32_t cycle_per_tick)
{
uint32_t max_cycle;
max_cycle = SysTick_LOAD_RELOAD_Msk; // 24 bit
if (max_cycle - SysTick->VAL > cycle_per_tick - 1u) {
SysTick->LOAD = max_cycle;
} else {
SysTick->LOAD = (cycle_per_tick - 1u) + SysTick->VAL;
}
SysTick->VAL = 0;
port_systick_config(cycle_per_tick);
}
__PORT__ void port_systick_pending_reset(void)

View File

@@ -59,17 +59,7 @@ __PORT__ void port_systick_suspend(void)
__PORT__ void port_systick_reload(uint32_t cycle_per_tick)
{
uint32_t max_cycle;
max_cycle = SysTick_LOAD_RELOAD_Msk; // 24 bit
if (max_cycle - SysTick->VAL > cycle_per_tick - 1u) {
SysTick->LOAD = max_cycle;
} else {
SysTick->LOAD = (cycle_per_tick - 1u) + SysTick->VAL;
}
SysTick->VAL = 0;
port_systick_config(cycle_per_tick);
}
__PORT__ void port_systick_pending_reset(void)

View File

@@ -59,17 +59,7 @@ __PORT__ void port_systick_suspend(void)
__PORT__ void port_systick_reload(uint32_t cycle_per_tick)
{
uint32_t max_cycle;
max_cycle = SysTick_LOAD_RELOAD_Msk; // 24 bit
if (max_cycle - SysTick->VAL > cycle_per_tick - 1u) {
SysTick->LOAD = max_cycle;
} else {
SysTick->LOAD = (cycle_per_tick - 1u) + SysTick->VAL;
}
SysTick->VAL = 0;
port_systick_config(cycle_per_tick);
}
__PORT__ void port_systick_pending_reset(void)

View File

@@ -84,17 +84,7 @@ __PORT__ void port_systick_suspend(void)
__PORT__ void port_systick_reload(uint32_t cycle_per_tick)
{
uint32_t max_cycle;
max_cycle = SysTick_LOAD_RELOAD_Msk; // 24 bit
if (max_cycle - SysTick->VAL > cycle_per_tick - 1u) {
SysTick->LOAD = max_cycle;
} else {
SysTick->LOAD = (cycle_per_tick - 1u) + SysTick->VAL;
}
SysTick->VAL = 0;
port_systick_config(cycle_per_tick);
}
__PORT__ void port_systick_pending_reset(void)

View File

@@ -59,17 +59,7 @@ __PORT__ void port_systick_suspend(void)
__PORT__ void port_systick_reload(uint32_t cycle_per_tick)
{
uint32_t max_cycle;
max_cycle = SysTick_LOAD_RELOAD_Msk; // 24 bit
if (max_cycle - SysTick->VAL > cycle_per_tick - 1u) {
SysTick->LOAD = max_cycle;
} else {
SysTick->LOAD = (cycle_per_tick - 1u) + SysTick->VAL;
}
SysTick->VAL = 0;
port_systick_config(cycle_per_tick);
}
__PORT__ void port_systick_pending_reset(void)

View File

@@ -89,17 +89,7 @@ __PORT__ k_cycle_t port_systick_max_reload_cycle(void)
__PORT__ void port_systick_reload(uint32_t cycle_per_tick)
{
uint32_t max_cycle;
max_cycle = SysTick_LOAD_RELOAD_Msk; // 24 bit
if (max_cycle - SysTick->VAL > cycle_per_tick - 1u) {
SysTick->LOAD = max_cycle;
} else {
SysTick->LOAD = (cycle_per_tick - 1u) + SysTick->VAL;
}
SysTick->VAL = 0;
port_systick_config(cycle_per_tick);
}
__PORT__ void port_systick_pending_reset(void)

View File

@@ -84,17 +84,7 @@ __PORT__ void port_systick_suspend(void)
__PORT__ void port_systick_reload(uint32_t cycle_per_tick)
{
uint32_t max_cycle;
max_cycle = SysTick_LOAD_RELOAD_Msk; // 24 bit
if (max_cycle - SysTick->VAL > cycle_per_tick - 1u) {
SysTick->LOAD = max_cycle;
} else {
SysTick->LOAD = (cycle_per_tick - 1u) + SysTick->VAL;
}
SysTick->VAL = 0;
port_systick_config(cycle_per_tick);
}
__PORT__ void port_systick_pending_reset(void)

View File

@@ -89,17 +89,7 @@ __PORT__ k_cycle_t port_systick_max_reload_cycle(void)
__PORT__ void port_systick_reload(uint32_t cycle_per_tick)
{
uint32_t max_cycle;
max_cycle = SysTick_LOAD_RELOAD_Msk; // 24 bit
if (max_cycle - SysTick->VAL > cycle_per_tick - 1u) {
SysTick->LOAD = max_cycle;
} else {
SysTick->LOAD = (cycle_per_tick - 1u) + SysTick->VAL;
}
SysTick->VAL = 0;
port_systick_config(cycle_per_tick);
}
__PORT__ void port_systick_pending_reset(void)

View File

@@ -89,17 +89,7 @@ __PORT__ k_cycle_t port_systick_max_reload_cycle(void)
__PORT__ void port_systick_reload(uint32_t cycle_per_tick)
{
uint32_t max_cycle;
max_cycle = SysTick_LOAD_RELOAD_Msk; // 24 bit
if (max_cycle - SysTick->VAL > cycle_per_tick - 1u) {
SysTick->LOAD = max_cycle;
} else {
SysTick->LOAD = (cycle_per_tick - 1u) + SysTick->VAL;
}
SysTick->VAL = 0;
port_systick_config(cycle_per_tick);
}
__PORT__ void port_systick_pending_reset(void)

View File

@@ -67,17 +67,7 @@ __PORT__ void port_systick_suspend(void)
__PORT__ void port_systick_reload(uint32_t cycle_per_tick)
{
uint32_t max_cycle;
max_cycle = SysTick_LOAD_RELOAD_Msk; // 24 bit
if (max_cycle - SysTick->VAL > cycle_per_tick - 1u) {
SysTick->LOAD = max_cycle;
} else {
SysTick->LOAD = (cycle_per_tick - 1u) + SysTick->VAL;
}
SysTick->VAL = 0;
port_systick_config(cycle_per_tick);
}
__PORT__ void port_systick_pending_reset(void)

View File

@@ -72,17 +72,7 @@ __PORT__ k_cycle_t port_systick_max_reload_cycle(void)
__PORT__ void port_systick_reload(uint32_t cycle_per_tick)
{
uint32_t max_cycle;
max_cycle = SysTick_LOAD_RELOAD_Msk; // 24 bit
if (max_cycle - SysTick->VAL > cycle_per_tick - 1u) {
SysTick->LOAD = max_cycle;
} else {
SysTick->LOAD = (cycle_per_tick - 1u) + SysTick->VAL;
}
SysTick->VAL = 0;
port_systick_config(cycle_per_tick);
}
__PORT__ void port_systick_pending_reset(void)