diff --git a/arch/arm/arm9/gcc/los_arch_timer.h b/arch/arm/arm9/gcc/los_arch_timer.h index 4bf043fb..2b2c41f9 100644 --- a/arch/arm/arm9/gcc/los_arch_timer.h +++ b/arch/arm/arm9/gcc/los_arch_timer.h @@ -42,8 +42,6 @@ extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ -UINT32 HalTickStart(OS_TICK_HANDLER handler); - #ifdef __cplusplus #if __cplusplus } diff --git a/arch/arm/arm9/gcc/los_context.c b/arch/arm/arm9/gcc/los_context.c index 2417c95e..00437f08 100644 --- a/arch/arm/arm9/gcc/los_context.c +++ b/arch/arm/arm9/gcc/los_context.c @@ -47,13 +47,7 @@ **************************************************************************** */ LITE_OS_SEC_TEXT_INIT VOID ArchInit(VOID) { - UINT32 ret; HalHwiInit(); - - ret = HalTickStart(OsTickHandler); - if (ret != LOS_OK) { - PRINT_ERR("Tick start failed!\n"); - } } /* **************************************************************************** diff --git a/arch/arm/arm9/gcc/los_timer.c b/arch/arm/arm9/gcc/los_timer.c index 932d6e76..b56ea692 100644 --- a/arch/arm/arm9/gcc/los_timer.c +++ b/arch/arm/arm9/gcc/los_timer.c @@ -29,8 +29,8 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "los_timer.h" #include "los_config.h" -#include "los_sched.h" #include "los_arch_context.h" #include "los_arch_interrupt.h" #include "los_reg.h" @@ -51,14 +51,24 @@ #define OS_TIMER_READ_CTL_ADDR (OS_TIMER_REG_BASE + 16) #define OS_TIMER_READ_VAL_ADDR (OS_TIMER_REG_BASE + 20) -/* **************************************************************************** -Function : HalTickStart -Description : Configure Tick Interrupt Start -Input : none -output : none -return : LOS_OK - Success , or LOS_ERRNO_TICK_CFG_INVALID - failed -**************************************************************************** */ -WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler); +STATIC VOID SysTickReload(UINT64 nextResponseTime); +STATIC UINT64 SysTickCycleGet(UINT32 *period); +STATIC VOID SysTickLock(VOID); +STATIC VOID SysTickUnlock(VOID); + +STATIC ArchTickTimer g_archTickTimer = { + .freq = OS_SYS_CLOCK, + .irqNum = OS_TIMER_IRQ_NUM, + .init = SysTickStart, + .getCycle = SysTickCycleGet, + .reload = SysTickReload, + .lock = SysTickLock, + .unlock = SysTickUnlock, + .tickHandler = NULL, +}; + +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler) { UINT32 intSave = LOS_IntLock(); UINT32 value; @@ -83,7 +93,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) return LOS_OK; } -STATIC VOID HalClockIrqClear(VOID) +STATIC VOID SysTickClockIrqClear(VOID) { UINT32 mask = OS_TIMER_INT_MASK << OS_TIMER_INT_POS; UINT32 status; @@ -94,15 +104,15 @@ STATIC VOID HalClockIrqClear(VOID) } while (status & mask); } -WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) +STATIC VOID SysTickReload(UINT64 nextResponseTime) { - ArchTickLock(); + SysTickLock(); WRITE_UINT32(nextResponseTime, OS_TIMER_PERIOD_REG_ADDR); - HalClockIrqClear(); - ArchTickUnlock(); + SysTickClockIrqClear(); + SysTickUnlock(); } -WEAK UINT64 ArchGetTickCycle(UINT32 *period) +STATIC UINT64 SysTickCycleGet(UINT32 *period) { UINT32 val; @@ -118,7 +128,7 @@ WEAK UINT64 ArchGetTickCycle(UINT32 *period) return (UINT64)val; } -WEAK VOID ArchTickLock(VOID) +STATIC VOID SysTickLock(VOID) { UINT32 value; @@ -129,7 +139,7 @@ WEAK VOID ArchTickLock(VOID) WRITE_UINT32(value, OS_TIMER_CTL_REG_ADDR); } -WEAK VOID ArchTickUnlock(VOID) +STATIC VOID SysTickUnlock(VOID) { UINT32 value; @@ -140,6 +150,11 @@ WEAK VOID ArchTickUnlock(VOID) WRITE_UINT32(value, OS_TIMER_CTL_REG_ADDR); } +ArchTickTimer *ArchSysTickTimerGet(VOID) +{ + return &g_archTickTimer; +} + UINT32 ArchEnterSleep(VOID) { dsb(); diff --git a/arch/arm/cortex-m3/keil/los_arch_timer.h b/arch/arm/cortex-m3/keil/los_arch_timer.h index 4bf043fb..2b2c41f9 100644 --- a/arch/arm/cortex-m3/keil/los_arch_timer.h +++ b/arch/arm/cortex-m3/keil/los_arch_timer.h @@ -42,8 +42,6 @@ extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ -UINT32 HalTickStart(OS_TICK_HANDLER handler); - #ifdef __cplusplus #if __cplusplus } diff --git a/arch/arm/cortex-m3/keil/los_context.c b/arch/arm/cortex-m3/keil/los_context.c index 59bd4272..bcbeb96e 100644 --- a/arch/arm/cortex-m3/keil/los_context.c +++ b/arch/arm/cortex-m3/keil/los_context.c @@ -48,13 +48,7 @@ **************************************************************************** */ LITE_OS_SEC_TEXT_INIT VOID ArchInit(VOID) { - UINT32 ret; HalHwiInit(); - - ret = HalTickStart(OsTickHandler); - if (ret != LOS_OK) { - PRINT_ERR("Tick start failed!\n"); - } } /* **************************************************************************** diff --git a/arch/arm/cortex-m3/keil/los_timer.c b/arch/arm/cortex-m3/keil/los_timer.c index eb979a6d..4dcb1285 100644 --- a/arch/arm/cortex-m3/keil/los_timer.c +++ b/arch/arm/cortex-m3/keil/los_timer.c @@ -34,38 +34,38 @@ #include "ARMCM3.h" #include "los_tick.h" #include "los_arch_interrupt.h" -#include "los_context.h" -#include "los_sched.h" #include "los_debug.h" -/* **************************************************************************** -Function : HalTickStart -Description : Configure Tick Interrupt Start -Input : none -output : none -return : LOS_OK - Success , or LOS_ERRNO_TICK_CFG_INVALID - failed -**************************************************************************** */ -WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler); +STATIC VOID SysTickReload(UINT64 nextResponseTime); +STATIC UINT64 SysTickCycleGet(UINT32 *period); +STATIC VOID SysTickLock(VOID); +STATIC VOID SysTickUnlock(VOID); + +STATIC ArchTickTimer g_archTickTimer = { + .freq = OS_SYS_CLOCK, + .irqNum = SysTick_IRQn, + .init = SysTickStart, + .getCycle = SysTickCycleGet, + .reload = SysTickReload, + .lock = SysTickLock, + .unlock = SysTickUnlock, + .tickHandler = NULL, +}; + +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler) { UINT32 ret; - - if ((OS_SYS_CLOCK == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND > OS_SYS_CLOCK)) { - return LOS_ERRNO_TICK_CFG_INVALID; - } + ArchTickTimer *tick = &g_archTickTimer; #if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1) #if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1) - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler, NULL); + OsSetVector(tick->irqNum, handler, NULL); #else - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler); + OsSetVector(tick->irqNum, handler); #endif #endif - g_sysClock = OS_SYS_CLOCK; - g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; @@ -74,7 +74,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) return LOS_OK; } -WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) +STATIC VOID SysTickReload(UINT64 nextResponseTime) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */ @@ -83,7 +83,7 @@ WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } -WEAK UINT64 ArchGetTickCycle(UINT32 *period) +STATIC UINT64 SysTickCycleGet(UINT32 *period) { UINT32 hwCycle = 0; UINT32 intSave = LOS_IntLock(); @@ -96,16 +96,21 @@ WEAK UINT64 ArchGetTickCycle(UINT32 *period) return (UINT64)hwCycle; } -WEAK VOID ArchTickLock(VOID) +STATIC VOID SysTickLock(VOID) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; } -WEAK VOID ArchTickUnlock(VOID) +STATIC VOID SysTickUnlock(VOID) { SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } +ArchTickTimer *ArchSysTickTimerGet(VOID) +{ + return &g_archTickTimer; +} + UINT32 ArchEnterSleep(VOID) { __DSB(); diff --git a/arch/arm/cortex-m33/gcc/NTZ/los_arch_timer.h b/arch/arm/cortex-m33/gcc/NTZ/los_arch_timer.h index 4bf043fb..2b2c41f9 100644 --- a/arch/arm/cortex-m33/gcc/NTZ/los_arch_timer.h +++ b/arch/arm/cortex-m33/gcc/NTZ/los_arch_timer.h @@ -42,8 +42,6 @@ extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ -UINT32 HalTickStart(OS_TICK_HANDLER handler); - #ifdef __cplusplus #if __cplusplus } diff --git a/arch/arm/cortex-m33/gcc/NTZ/los_context.c b/arch/arm/cortex-m33/gcc/NTZ/los_context.c index f4de61f7..b705af47 100755 --- a/arch/arm/cortex-m33/gcc/NTZ/los_context.c +++ b/arch/arm/cortex-m33/gcc/NTZ/los_context.c @@ -47,13 +47,7 @@ **************************************************************************** */ LITE_OS_SEC_TEXT_INIT VOID ArchInit(VOID) { - UINT32 ret; HalHwiInit(); - - ret = HalTickStart(OsTickHandler); - if (ret != LOS_OK) { - PRINT_ERR("Tick start failed!\n"); - } } /* **************************************************************************** diff --git a/arch/arm/cortex-m33/gcc/NTZ/los_timer.c b/arch/arm/cortex-m33/gcc/NTZ/los_timer.c index a5dd7865..c238c6a1 100755 --- a/arch/arm/cortex-m33/gcc/NTZ/los_timer.c +++ b/arch/arm/cortex-m33/gcc/NTZ/los_timer.c @@ -33,38 +33,38 @@ #include "los_config.h" #include "los_tick.h" #include "los_arch_interrupt.h" -#include "los_context.h" -#include "los_sched.h" #include "los_debug.h" -/* **************************************************************************** -Function : HalTickStart -Description : Configure Tick Interrupt Start -Input : none -output : none -return : LOS_OK - Success , or LOS_ERRNO_TICK_CFG_INVALID - failed -**************************************************************************** */ -WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler); +STATIC VOID SysTickReload(UINT64 nextResponseTime); +STATIC UINT64 SysTickCycleGet(UINT32 *period); +STATIC VOID SysTickLock(VOID); +STATIC VOID SysTickUnlock(VOID); + +STATIC ArchTickTimer g_archTickTimer = { + .freq = OS_SYS_CLOCK, + .irqNum = SysTick_IRQn, + .init = SysTickStart, + .getCycle = SysTickCycleGet, + .reload = SysTickReload, + .lock = SysTickLock, + .unlock = SysTickUnlock, + .tickHandler = NULL, +}; + +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler) { UINT32 ret; - - if ((OS_SYS_CLOCK == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND > OS_SYS_CLOCK)) { - return LOS_ERRNO_TICK_CFG_INVALID; - } + ArchTickTimer *tick = &g_archTickTimer; #if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1) #if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1) - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler, NULL); + OsSetVector(tick->irqNum, handler, NULL); #else - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler); + OsSetVector(tick->irqNum, handler); #endif #endif - g_sysClock = OS_SYS_CLOCK; - g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; @@ -73,7 +73,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) return LOS_OK; } -WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) +STATIC VOID SysTickReload(UINT64 nextResponseTime) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */ @@ -82,7 +82,7 @@ WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } -WEAK UINT64 ArchGetTickCycle(UINT32 *period) +STATIC UINT64 SysTickCycleGet(UINT32 *period) { UINT32 hwCycle = 0; UINT32 intSave = LOS_IntLock(); @@ -95,16 +95,21 @@ WEAK UINT64 ArchGetTickCycle(UINT32 *period) return (UINT64)hwCycle; } -WEAK VOID ArchTickLock(VOID) +STATIC VOID SysTickLock(VOID) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; } -WEAK VOID ArchTickUnlock(VOID) +STATIC VOID SysTickUnlock(VOID) { SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } +ArchTickTimer *ArchSysTickTimerGet(VOID) +{ + return &g_archTickTimer; +} + UINT32 ArchEnterSleep(VOID) { __DSB(); diff --git a/arch/arm/cortex-m33/gcc/TZ/non_secure/los_arch_timer.h b/arch/arm/cortex-m33/gcc/TZ/non_secure/los_arch_timer.h index 4bf043fb..2b2c41f9 100644 --- a/arch/arm/cortex-m33/gcc/TZ/non_secure/los_arch_timer.h +++ b/arch/arm/cortex-m33/gcc/TZ/non_secure/los_arch_timer.h @@ -42,8 +42,6 @@ extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ -UINT32 HalTickStart(OS_TICK_HANDLER handler); - #ifdef __cplusplus #if __cplusplus } diff --git a/arch/arm/cortex-m33/gcc/TZ/non_secure/los_context.c b/arch/arm/cortex-m33/gcc/TZ/non_secure/los_context.c index 372391d0..cef24560 100755 --- a/arch/arm/cortex-m33/gcc/TZ/non_secure/los_context.c +++ b/arch/arm/cortex-m33/gcc/TZ/non_secure/los_context.c @@ -47,13 +47,7 @@ **************************************************************************** */ LITE_OS_SEC_TEXT_INIT VOID ArchInit(VOID) { - UINT32 ret; HalHwiInit(); - - ret = HalTickStart(OsTickHandler); - if (ret != LOS_OK) { - PRINT_ERR("Tick start failed!\n"); - } } /* **************************************************************************** diff --git a/arch/arm/cortex-m33/gcc/TZ/non_secure/los_timer.c b/arch/arm/cortex-m33/gcc/TZ/non_secure/los_timer.c index 52a8e0f0..32436355 100755 --- a/arch/arm/cortex-m33/gcc/TZ/non_secure/los_timer.c +++ b/arch/arm/cortex-m33/gcc/TZ/non_secure/los_timer.c @@ -33,38 +33,37 @@ #include "los_config.h" #include "los_tick.h" #include "los_arch_interrupt.h" -#include "los_context.h" -#include "los_sched.h" -#include "los_debug.h" -/* **************************************************************************** -Function : HalTickStart -Description : Configure Tick Interrupt Start -Input : none -output : none -return : LOS_OK - Success , or LOS_ERRNO_TICK_CFG_INVALID - failed -**************************************************************************** */ -WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler); +STATIC VOID SysTickReload(UINT64 nextResponseTime); +STATIC UINT64 SysTickCycleGet(UINT32 *period); +STATIC VOID SysTickLock(VOID); +STATIC VOID SysTickUnlock(VOID); + +STATIC ArchTickTimer g_archTickTimer = { + .freq = OS_SYS_CLOCK, + .irqNum = SysTick_IRQn, + .init = SysTickStart, + .getCycle = SysTickCycleGet, + .reload = SysTickReload, + .lock = SysTickLock, + .unlock = SysTickUnlock, + .tickHandler = NULL, +}; + +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler) { UINT32 ret; - - if ((OS_SYS_CLOCK == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND > OS_SYS_CLOCK)) { - return LOS_ERRNO_TICK_CFG_INVALID; - } + ArchTickTimer *tick = &g_archTickTimer; #if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1) #if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1) - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler, NULL); + OsSetVector(tick->irqNum, handler, NULL); #else - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler); + OsSetVector(tick->irqNum, handler); #endif #endif - g_sysClock = OS_SYS_CLOCK; - g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(g_cyclesPerTick); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; @@ -73,7 +72,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) return LOS_OK; } -WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) +STATIC VOID SysTickReload(UINT64 nextResponseTime) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */ @@ -82,7 +81,7 @@ WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } -WEAK UINT64 ArchGetTickCycle(UINT32 *period) +STATIC UINT64 SysTickCycleGet(UINT32 *period) { UINT32 hwCycle = 0; UINT32 intSave = LOS_IntLock(); @@ -95,16 +94,21 @@ WEAK UINT64 ArchGetTickCycle(UINT32 *period) return (UINT64)hwCycle; } -WEAK VOID ArchTickLock(VOID) +STATIC VOID SysTickLock(VOID) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; } -WEAK VOID ArchTickUnlock(VOID) +STATIC VOID SysTickUnlock(VOID) { SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } +ArchTickTimer *ArchSysTickTimerGet(VOID) +{ + return &g_archTickTimer; +} + UINT32 ArchEnterSleep(VOID) { __DSB(); diff --git a/arch/arm/cortex-m33/iar/NTZ/los_arch_timer.h b/arch/arm/cortex-m33/iar/NTZ/los_arch_timer.h index c4f9abb2..df32fdad 100644 --- a/arch/arm/cortex-m33/iar/NTZ/los_arch_timer.h +++ b/arch/arm/cortex-m33/iar/NTZ/los_arch_timer.h @@ -42,8 +42,6 @@ extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ -UINT32 HalTickStart(OS_TICK_HANDLER handler); - #ifdef __cplusplus #if __cplusplus } diff --git a/arch/arm/cortex-m33/iar/NTZ/los_context.c b/arch/arm/cortex-m33/iar/NTZ/los_context.c index 93ee7630..bea396b9 100644 --- a/arch/arm/cortex-m33/iar/NTZ/los_context.c +++ b/arch/arm/cortex-m33/iar/NTZ/los_context.c @@ -47,13 +47,7 @@ **************************************************************************** */ LITE_OS_SEC_TEXT_INIT VOID ArchInit(VOID) { - UINT32 ret; HalHwiInit(); - - ret = HalTickStart(OsTickHandler); - if (ret != LOS_OK) { - PRINT_ERR("Tick start failed!\n"); - } } /* **************************************************************************** diff --git a/arch/arm/cortex-m33/iar/NTZ/los_timer.c b/arch/arm/cortex-m33/iar/NTZ/los_timer.c index 26d5c5f6..e2f3e742 100644 --- a/arch/arm/cortex-m33/iar/NTZ/los_timer.c +++ b/arch/arm/cortex-m33/iar/NTZ/los_timer.c @@ -33,38 +33,38 @@ #include "los_config.h" #include "los_tick.h" #include "los_arch_interrupt.h" -#include "los_context.h" -#include "los_sched.h" #include "los_debug.h" -/* **************************************************************************** -Function : HalTickStart -Description : Configure Tick Interrupt Start -Input : none -output : none -return : LOS_OK - Success , or LOS_ERRNO_TICK_CFG_INVALID - failed -**************************************************************************** */ -WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler); +STATIC VOID SysTickReload(UINT64 nextResponseTime); +STATIC UINT64 SysTickCycleGet(UINT32 *period); +STATIC VOID SysTickLock(VOID); +STATIC VOID SysTickUnlock(VOID); + +STATIC ArchTickTimer g_archTickTimer = { + .freq = OS_SYS_CLOCK, + .irqNum = SysTick_IRQn, + .init = SysTickStart, + .getCycle = SysTickCycleGet, + .reload = SysTickReload, + .lock = SysTickLock, + .unlock = SysTickUnlock, + .tickHandler = NULL, +}; + +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler) { UINT32 ret; - - if ((OS_SYS_CLOCK == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND > OS_SYS_CLOCK)) { - return LOS_ERRNO_TICK_CFG_INVALID; - } + ArchTickTimer *tick = &g_archTickTimer; #if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1) #if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1) - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler, NULL); + OsSetVector(tick->irqNum, handler, NULL); #else - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler); + OsSetVector(tick->irqNum, handler); #endif #endif - g_sysClock = OS_SYS_CLOCK; - g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; @@ -73,7 +73,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) return LOS_OK; } -WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) +STATIC VOID SysTickReload(UINT64 nextResponseTime) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */ @@ -82,7 +82,7 @@ WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } -WEAK UINT64 ArchGetTickCycle(UINT32 *period) +STATIC UINT64 SysTickCycleGet(UINT32 *period) { UINT32 hwCycle = 0; UINTPTR intSave = LOS_IntLock(); @@ -95,16 +95,21 @@ WEAK UINT64 ArchGetTickCycle(UINT32 *period) return (UINT64)hwCycle; } -WEAK VOID ArchTickLock(VOID) +STATIC VOID SysTickLock(VOID) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; } -WEAK VOID ArchTickUnlock(VOID) +STATIC VOID SysTickUnlock(VOID) { SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } +ArchTickTimer *ArchSysTickTimerGet(VOID) +{ + return &g_archTickTimer; +} + UINT32 ArchEnterSleep(VOID) { __DSB(); diff --git a/arch/arm/cortex-m33/iar/TZ/non_secure/los_arch_timer.h b/arch/arm/cortex-m33/iar/TZ/non_secure/los_arch_timer.h index c4f9abb2..df32fdad 100644 --- a/arch/arm/cortex-m33/iar/TZ/non_secure/los_arch_timer.h +++ b/arch/arm/cortex-m33/iar/TZ/non_secure/los_arch_timer.h @@ -42,8 +42,6 @@ extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ -UINT32 HalTickStart(OS_TICK_HANDLER handler); - #ifdef __cplusplus #if __cplusplus } diff --git a/arch/arm/cortex-m33/iar/TZ/non_secure/los_context.c b/arch/arm/cortex-m33/iar/TZ/non_secure/los_context.c index 50ce4ea0..3672ac32 100644 --- a/arch/arm/cortex-m33/iar/TZ/non_secure/los_context.c +++ b/arch/arm/cortex-m33/iar/TZ/non_secure/los_context.c @@ -47,13 +47,7 @@ **************************************************************************** */ LITE_OS_SEC_TEXT_INIT VOID ArchInit(VOID) { - UINT32 ret; HalHwiInit(); - - ret = HalTickStart(OsTickHandler); - if (ret != LOS_OK) { - PRINT_ERR("Tick start failed!\n"); - } } /* **************************************************************************** diff --git a/arch/arm/cortex-m33/iar/TZ/non_secure/los_timer.c b/arch/arm/cortex-m33/iar/TZ/non_secure/los_timer.c index 12176bb3..c15a6033 100644 --- a/arch/arm/cortex-m33/iar/TZ/non_secure/los_timer.c +++ b/arch/arm/cortex-m33/iar/TZ/non_secure/los_timer.c @@ -33,38 +33,38 @@ #include "los_config.h" #include "los_tick.h" #include "los_arch_interrupt.h" -#include "los_context.h" -#include "los_sched.h" #include "los_debug.h" -/* **************************************************************************** -Function : HalTickStart -Description : Configure Tick Interrupt Start -Input : none -output : none -return : LOS_OK - Success , or LOS_ERRNO_TICK_CFG_INVALID - failed -**************************************************************************** */ -WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler); +STATIC VOID SysTickReload(UINT64 nextResponseTime); +STATIC UINT64 SysTickCycleGet(UINT32 *period); +STATIC VOID SysTickLock(VOID); +STATIC VOID SysTickUnlock(VOID); + +STATIC ArchTickTimer g_archTickTimer = { + .freq = OS_SYS_CLOCK, + .irqNum = SysTick_IRQn, + .init = SysTickStart, + .getCycle = SysTickCycleGet, + .reload = SysTickReload, + .lock = SysTickLock, + .unlock = SysTickUnlock, + .tickHandler = NULL, +}; + +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler) { UINT32 ret; - - if ((OS_SYS_CLOCK == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND > OS_SYS_CLOCK)) { - return LOS_ERRNO_TICK_CFG_INVALID; - } + ArchTickTimer *tick = &g_archTickTimer; #if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1) #if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1) - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler, NULL); + OsSetVector(tick->irqNum, handler, NULL); #else - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler); + OsSetVector(tick->irqNum, handler); #endif #endif - g_sysClock = OS_SYS_CLOCK; - g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; @@ -73,7 +73,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) return LOS_OK; } -WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) +STATIC VOID SysTickReload(UINT64 nextResponseTime) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */ @@ -82,7 +82,7 @@ WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } -WEAK UINT64 ArchGetTickCycle(UINT32 *period) +STATIC UINT64 SysTickCycleGet(UINT32 *period) { UINT32 hwCycle = 0; UINTPTR intSave = LOS_IntLock(); @@ -95,16 +95,21 @@ WEAK UINT64 ArchGetTickCycle(UINT32 *period) return (UINT64)hwCycle; } -WEAK VOID ArchTickLock(VOID) +STATIC VOID SysTickLock(VOID) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; } -WEAK VOID ArchTickUnlock(VOID) +STATIC VOID SysTickUnlock(VOID) { SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } +ArchTickTimer *ArchSysTickTimerGet(VOID) +{ + return &g_archTickTimer; +} + UINT32 ArchEnterSleep(VOID) { __DSB(); diff --git a/arch/arm/cortex-m4/gcc/los_arch_timer.h b/arch/arm/cortex-m4/gcc/los_arch_timer.h index 4bf043fb..2b2c41f9 100644 --- a/arch/arm/cortex-m4/gcc/los_arch_timer.h +++ b/arch/arm/cortex-m4/gcc/los_arch_timer.h @@ -42,8 +42,6 @@ extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ -UINT32 HalTickStart(OS_TICK_HANDLER handler); - #ifdef __cplusplus #if __cplusplus } diff --git a/arch/arm/cortex-m4/gcc/los_context.c b/arch/arm/cortex-m4/gcc/los_context.c index 3d0a2551..b5ce64e8 100644 --- a/arch/arm/cortex-m4/gcc/los_context.c +++ b/arch/arm/cortex-m4/gcc/los_context.c @@ -36,8 +36,6 @@ #include "los_task.h" #include "los_sched.h" #include "los_interrupt.h" -#include "los_timer.h" -#include "los_debug.h" /* **************************************************************************** Function : ArchInit @@ -48,14 +46,7 @@ **************************************************************************** */ LITE_OS_SEC_TEXT_INIT VOID ArchInit(VOID) { - UINT32 ret; - HalHwiInit(); - - ret = HalTickStart(OsTickHandler); - if (ret != LOS_OK) { - PRINT_ERR("Tick start failed!\n"); - } } /* **************************************************************************** diff --git a/arch/arm/cortex-m4/gcc/los_timer.c b/arch/arm/cortex-m4/gcc/los_timer.c index 21046e8d..f27713d0 100644 --- a/arch/arm/cortex-m4/gcc/los_timer.c +++ b/arch/arm/cortex-m4/gcc/los_timer.c @@ -33,39 +33,38 @@ #include "los_config.h" #include "los_tick.h" #include "los_arch_interrupt.h" -#include "los_context.h" -#include "los_sched.h" #include "los_debug.h" +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler); +STATIC VOID SysTickReload(UINT64 nextResponseTime); +STATIC UINT64 SysTickCycleGet(UINT32 *period); +STATIC VOID SysTickLock(VOID); +STATIC VOID SysTickUnlock(VOID); -/* **************************************************************************** -Function : HalTickStart -Description : Configure Tick Interrupt Start -Input : none -output : none -return : LOS_OK - Success , or LOS_ERRNO_TICK_CFG_INVALID - failed -**************************************************************************** */ -WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) +STATIC ArchTickTimer g_archTickTimer = { + .freq = OS_SYS_CLOCK, + .irqNum = SysTick_IRQn, + .init = SysTickStart, + .getCycle = SysTickCycleGet, + .reload = SysTickReload, + .lock = SysTickLock, + .unlock = SysTickUnlock, + .tickHandler = NULL, +}; + +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler) { UINT32 ret; - - if ((OS_SYS_CLOCK == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND > OS_SYS_CLOCK)) { - return LOS_ERRNO_TICK_CFG_INVALID; - } + ArchTickTimer *tick = &g_archTickTimer; #if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1) #if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1) - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler, NULL); + OsSetVector(tick->irqNum, handler, NULL); #else - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler); + OsSetVector(tick->irqNum, handler); #endif #endif - g_sysClock = OS_SYS_CLOCK; - g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; @@ -74,7 +73,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) return LOS_OK; } -WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) +STATIC VOID SysTickReload(UINT64 nextResponseTime) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */ @@ -83,7 +82,7 @@ WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } -WEAK UINT64 ArchGetTickCycle(UINT32 *period) +STATIC UINT64 SysTickCycleGet(UINT32 *period) { UINT32 hwCycle = 0; UINT32 intSave = LOS_IntLock(); @@ -96,16 +95,21 @@ WEAK UINT64 ArchGetTickCycle(UINT32 *period) return (UINT64)hwCycle; } -WEAK VOID ArchTickLock(VOID) +STATIC VOID SysTickLock(VOID) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; } -WEAK VOID ArchTickUnlock(VOID) +STATIC VOID SysTickUnlock(VOID) { SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } +ArchTickTimer *ArchSysTickTimerGet(VOID) +{ + return &g_archTickTimer; +} + UINT32 ArchEnterSleep(VOID) { __DSB(); diff --git a/arch/arm/cortex-m4/iar/los_arch_timer.h b/arch/arm/cortex-m4/iar/los_arch_timer.h index 4bf043fb..2b2c41f9 100644 --- a/arch/arm/cortex-m4/iar/los_arch_timer.h +++ b/arch/arm/cortex-m4/iar/los_arch_timer.h @@ -42,8 +42,6 @@ extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ -UINT32 HalTickStart(OS_TICK_HANDLER handler); - #ifdef __cplusplus #if __cplusplus } diff --git a/arch/arm/cortex-m4/iar/los_context.c b/arch/arm/cortex-m4/iar/los_context.c index 722bb6bc..8712baab 100644 --- a/arch/arm/cortex-m4/iar/los_context.c +++ b/arch/arm/cortex-m4/iar/los_context.c @@ -49,14 +49,7 @@ **************************************************************************** */ LITE_OS_SEC_TEXT_INIT VOID ArchInit(VOID) { - UINT32 ret; HalHwiInit(); - - ret = HalTickStart(OsTickHandler); - if (ret != LOS_OK) { - PRINT_ERR("Tick start failed!\n"); - return; - } } /* **************************************************************************** diff --git a/arch/arm/cortex-m4/iar/los_timer.c b/arch/arm/cortex-m4/iar/los_timer.c index 8862d6ae..c238c6a1 100644 --- a/arch/arm/cortex-m4/iar/los_timer.c +++ b/arch/arm/cortex-m4/iar/los_timer.c @@ -33,39 +33,38 @@ #include "los_config.h" #include "los_tick.h" #include "los_arch_interrupt.h" -#include "los_context.h" -#include "los_sched.h" #include "los_debug.h" +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler); +STATIC VOID SysTickReload(UINT64 nextResponseTime); +STATIC UINT64 SysTickCycleGet(UINT32 *period); +STATIC VOID SysTickLock(VOID); +STATIC VOID SysTickUnlock(VOID); -/* **************************************************************************** -Function : HalTickStart -Description : Configure Tick Interrupt Start -Input : none -output : none -return : LOS_OK - Success , or LOS_ERRNO_TICK_CFG_INVALID - failed -**************************************************************************** */ -WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) +STATIC ArchTickTimer g_archTickTimer = { + .freq = OS_SYS_CLOCK, + .irqNum = SysTick_IRQn, + .init = SysTickStart, + .getCycle = SysTickCycleGet, + .reload = SysTickReload, + .lock = SysTickLock, + .unlock = SysTickUnlock, + .tickHandler = NULL, +}; + +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler) { UINT32 ret; - - if ((OS_SYS_CLOCK == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND > OS_SYS_CLOCK)) { - return LOS_ERRNO_TICK_CFG_INVALID; - } + ArchTickTimer *tick = &g_archTickTimer; #if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1) #if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1) - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler, NULL); + OsSetVector(tick->irqNum, handler, NULL); #else - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler); + OsSetVector(tick->irqNum, handler); #endif #endif - g_sysClock = OS_SYS_CLOCK; - g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; @@ -74,7 +73,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) return LOS_OK; } -WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) +STATIC VOID SysTickReload(UINT64 nextResponseTime) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */ @@ -83,7 +82,7 @@ WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } -WEAK UINT64 ArchGetTickCycle(UINT32 *period) +STATIC UINT64 SysTickCycleGet(UINT32 *period) { UINT32 hwCycle = 0; UINT32 intSave = LOS_IntLock(); @@ -96,16 +95,21 @@ WEAK UINT64 ArchGetTickCycle(UINT32 *period) return (UINT64)hwCycle; } -WEAK VOID ArchTickLock(VOID) +STATIC VOID SysTickLock(VOID) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; } -WEAK VOID ArchTickUnlock(VOID) +STATIC VOID SysTickUnlock(VOID) { SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } +ArchTickTimer *ArchSysTickTimerGet(VOID) +{ + return &g_archTickTimer; +} + UINT32 ArchEnterSleep(VOID) { __DSB(); diff --git a/arch/arm/cortex-m7/gcc/los_arch_timer.h b/arch/arm/cortex-m7/gcc/los_arch_timer.h index 4bf043fb..2b2c41f9 100644 --- a/arch/arm/cortex-m7/gcc/los_arch_timer.h +++ b/arch/arm/cortex-m7/gcc/los_arch_timer.h @@ -42,8 +42,6 @@ extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ -UINT32 HalTickStart(OS_TICK_HANDLER handler); - #ifdef __cplusplus #if __cplusplus } diff --git a/arch/arm/cortex-m7/gcc/los_context.c b/arch/arm/cortex-m7/gcc/los_context.c index f4de61f7..b705af47 100644 --- a/arch/arm/cortex-m7/gcc/los_context.c +++ b/arch/arm/cortex-m7/gcc/los_context.c @@ -47,13 +47,7 @@ **************************************************************************** */ LITE_OS_SEC_TEXT_INIT VOID ArchInit(VOID) { - UINT32 ret; HalHwiInit(); - - ret = HalTickStart(OsTickHandler); - if (ret != LOS_OK) { - PRINT_ERR("Tick start failed!\n"); - } } /* **************************************************************************** diff --git a/arch/arm/cortex-m7/gcc/los_timer.c b/arch/arm/cortex-m7/gcc/los_timer.c index a5dd7865..c238c6a1 100644 --- a/arch/arm/cortex-m7/gcc/los_timer.c +++ b/arch/arm/cortex-m7/gcc/los_timer.c @@ -33,38 +33,38 @@ #include "los_config.h" #include "los_tick.h" #include "los_arch_interrupt.h" -#include "los_context.h" -#include "los_sched.h" #include "los_debug.h" -/* **************************************************************************** -Function : HalTickStart -Description : Configure Tick Interrupt Start -Input : none -output : none -return : LOS_OK - Success , or LOS_ERRNO_TICK_CFG_INVALID - failed -**************************************************************************** */ -WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler); +STATIC VOID SysTickReload(UINT64 nextResponseTime); +STATIC UINT64 SysTickCycleGet(UINT32 *period); +STATIC VOID SysTickLock(VOID); +STATIC VOID SysTickUnlock(VOID); + +STATIC ArchTickTimer g_archTickTimer = { + .freq = OS_SYS_CLOCK, + .irqNum = SysTick_IRQn, + .init = SysTickStart, + .getCycle = SysTickCycleGet, + .reload = SysTickReload, + .lock = SysTickLock, + .unlock = SysTickUnlock, + .tickHandler = NULL, +}; + +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler) { UINT32 ret; - - if ((OS_SYS_CLOCK == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND > OS_SYS_CLOCK)) { - return LOS_ERRNO_TICK_CFG_INVALID; - } + ArchTickTimer *tick = &g_archTickTimer; #if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1) #if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1) - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler, NULL); + OsSetVector(tick->irqNum, handler, NULL); #else - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler); + OsSetVector(tick->irqNum, handler); #endif #endif - g_sysClock = OS_SYS_CLOCK; - g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; @@ -73,7 +73,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) return LOS_OK; } -WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) +STATIC VOID SysTickReload(UINT64 nextResponseTime) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */ @@ -82,7 +82,7 @@ WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } -WEAK UINT64 ArchGetTickCycle(UINT32 *period) +STATIC UINT64 SysTickCycleGet(UINT32 *period) { UINT32 hwCycle = 0; UINT32 intSave = LOS_IntLock(); @@ -95,16 +95,21 @@ WEAK UINT64 ArchGetTickCycle(UINT32 *period) return (UINT64)hwCycle; } -WEAK VOID ArchTickLock(VOID) +STATIC VOID SysTickLock(VOID) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; } -WEAK VOID ArchTickUnlock(VOID) +STATIC VOID SysTickUnlock(VOID) { SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } +ArchTickTimer *ArchSysTickTimerGet(VOID) +{ + return &g_archTickTimer; +} + UINT32 ArchEnterSleep(VOID) { __DSB(); diff --git a/arch/arm/cortex-m7/iar/los_arch_timer.h b/arch/arm/cortex-m7/iar/los_arch_timer.h index 4bf043fb..2b2c41f9 100644 --- a/arch/arm/cortex-m7/iar/los_arch_timer.h +++ b/arch/arm/cortex-m7/iar/los_arch_timer.h @@ -42,8 +42,6 @@ extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ -UINT32 HalTickStart(OS_TICK_HANDLER handler); - #ifdef __cplusplus #if __cplusplus } diff --git a/arch/arm/cortex-m7/iar/los_context.c b/arch/arm/cortex-m7/iar/los_context.c index f4de61f7..b705af47 100644 --- a/arch/arm/cortex-m7/iar/los_context.c +++ b/arch/arm/cortex-m7/iar/los_context.c @@ -47,13 +47,7 @@ **************************************************************************** */ LITE_OS_SEC_TEXT_INIT VOID ArchInit(VOID) { - UINT32 ret; HalHwiInit(); - - ret = HalTickStart(OsTickHandler); - if (ret != LOS_OK) { - PRINT_ERR("Tick start failed!\n"); - } } /* **************************************************************************** diff --git a/arch/arm/cortex-m7/iar/los_timer.c b/arch/arm/cortex-m7/iar/los_timer.c index a5dd7865..c238c6a1 100644 --- a/arch/arm/cortex-m7/iar/los_timer.c +++ b/arch/arm/cortex-m7/iar/los_timer.c @@ -33,38 +33,38 @@ #include "los_config.h" #include "los_tick.h" #include "los_arch_interrupt.h" -#include "los_context.h" -#include "los_sched.h" #include "los_debug.h" -/* **************************************************************************** -Function : HalTickStart -Description : Configure Tick Interrupt Start -Input : none -output : none -return : LOS_OK - Success , or LOS_ERRNO_TICK_CFG_INVALID - failed -**************************************************************************** */ -WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler); +STATIC VOID SysTickReload(UINT64 nextResponseTime); +STATIC UINT64 SysTickCycleGet(UINT32 *period); +STATIC VOID SysTickLock(VOID); +STATIC VOID SysTickUnlock(VOID); + +STATIC ArchTickTimer g_archTickTimer = { + .freq = OS_SYS_CLOCK, + .irqNum = SysTick_IRQn, + .init = SysTickStart, + .getCycle = SysTickCycleGet, + .reload = SysTickReload, + .lock = SysTickLock, + .unlock = SysTickUnlock, + .tickHandler = NULL, +}; + +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler) { UINT32 ret; - - if ((OS_SYS_CLOCK == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND > OS_SYS_CLOCK)) { - return LOS_ERRNO_TICK_CFG_INVALID; - } + ArchTickTimer *tick = &g_archTickTimer; #if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1) #if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1) - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler, NULL); + OsSetVector(tick->irqNum, handler, NULL); #else - OsSetVector(SysTick_IRQn, (HWI_PROC_FUNC)handler); + OsSetVector(tick->irqNum, handler); #endif #endif - g_sysClock = OS_SYS_CLOCK; - g_cyclesPerTick = OS_SYS_CLOCK / LOSCFG_BASE_CORE_TICK_PER_SECOND; - ret = SysTick_Config(LOSCFG_BASE_CORE_TICK_RESPONSE_MAX); if (ret == 1) { return LOS_ERRNO_TICK_PER_SEC_TOO_SMALL; @@ -73,7 +73,7 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) return LOS_OK; } -WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) +STATIC VOID SysTickReload(UINT64 nextResponseTime) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */ @@ -82,7 +82,7 @@ WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } -WEAK UINT64 ArchGetTickCycle(UINT32 *period) +STATIC UINT64 SysTickCycleGet(UINT32 *period) { UINT32 hwCycle = 0; UINT32 intSave = LOS_IntLock(); @@ -95,16 +95,21 @@ WEAK UINT64 ArchGetTickCycle(UINT32 *period) return (UINT64)hwCycle; } -WEAK VOID ArchTickLock(VOID) +STATIC VOID SysTickLock(VOID) { SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; } -WEAK VOID ArchTickUnlock(VOID) +STATIC VOID SysTickUnlock(VOID) { SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; } +ArchTickTimer *ArchSysTickTimerGet(VOID) +{ + return &g_archTickTimer; +} + UINT32 ArchEnterSleep(VOID) { __DSB(); diff --git a/arch/csky/v2/gcc/los_arch_timer.h b/arch/csky/v2/gcc/los_arch_timer.h index 4bf043fb..2b2c41f9 100644 --- a/arch/csky/v2/gcc/los_arch_timer.h +++ b/arch/csky/v2/gcc/los_arch_timer.h @@ -42,8 +42,6 @@ extern "C" { #endif /* __cplusplus */ #endif /* __cplusplus */ -UINT32 HalTickStart(OS_TICK_HANDLER handler); - #ifdef __cplusplus #if __cplusplus } diff --git a/arch/csky/v2/gcc/los_context.c b/arch/csky/v2/gcc/los_context.c index f2171e22..afca82f5 100644 --- a/arch/csky/v2/gcc/los_context.c +++ b/arch/csky/v2/gcc/los_context.c @@ -49,13 +49,7 @@ STATIC UINT32 g_sysNeedSched = FALSE; **************************************************************************** */ LITE_OS_SEC_TEXT_INIT VOID ArchInit(VOID) { - UINT32 ret; HalHwiInit(); - - ret = HalTickStart(OsTickHandler); - if (ret != LOS_OK) { - PRINT_ERR("Tick start failed!\n"); - } } /* **************************************************************************** diff --git a/arch/csky/v2/gcc/los_timer.c b/arch/csky/v2/gcc/los_timer.c index c7f26c37..0ecf4648 100644 --- a/arch/csky/v2/gcc/los_timer.c +++ b/arch/csky/v2/gcc/los_timer.c @@ -33,8 +33,6 @@ #include "los_config.h" #include "los_tick.h" #include "los_arch_interrupt.h" -#include "los_context.h" -#include "los_sched.h" #include "los_debug.h" typedef struct { @@ -56,6 +54,23 @@ typedef struct { #define TIM_INT_NUM 1 +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler); +STATIC VOID SysTickReload(UINT64 nextResponseTime); +STATIC UINT64 SysTickCycleGet(UINT32 *period); +STATIC VOID SysTickLock(VOID); +STATIC VOID SysTickUnlock(VOID); + +STATIC ArchTickTimer g_archTickTimer = { + .freq = OS_SYS_CLOCK, + .irqNum = TIM_INT_NUM, + .init = SysTickStart, + .getCycle = SysTickCycleGet, + .reload = SysTickReload, + .lock = SysTickLock, + .unlock = SysTickUnlock, + .tickHandler = NULL, +}; + /* **************************************************************************** Function : HalTickStart Description : Configure Tick Interrupt Start @@ -63,15 +78,10 @@ Input : none output : none return : LOS_OK - Success , or LOS_ERRNO_TICK_CFG_INVALID - failed **************************************************************************** */ -WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) +STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler) { - if ((OS_SYS_CLOCK == 0) || (LOSCFG_BASE_CORE_TICK_PER_SECOND == 0) || - (LOSCFG_BASE_CORE_TICK_PER_SECOND > OS_SYS_CLOCK)) { - return LOS_ERRNO_TICK_CFG_INVALID; - } + ArchTickTimer *tick = &g_archTickTimer; - g_sysClock = OS_SYS_CLOCK; - g_cyclesPerTick = OS_CYCLE_PER_TICK; SysTick->LOAD = (OS_CYCLE_PER_TICK - 1); SysTick->VAL = 0; SysTick->CTRL |= (CORETIM_SOURCE | CORETIM_ENABLE | CORETIM_INTMASK); @@ -80,15 +90,15 @@ WEAK UINT32 HalTickStart(OS_TICK_HANDLER handler) #if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1) #if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1) - OsSetVector(TIM_INT_NUM, (HWI_PROC_FUNC)handler, NULL); + OsSetVector(tick->irqNum, handler, NULL); #else - OsSetVector(TIM_INT_NUM, (HWI_PROC_FUNC)handler); + OsSetVector(tick->irqNum, handler); #endif #endif return LOS_OK; } -WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) +STATIC VOID SysTickReload(UINT64 nextResponseTime) { SysTick->CTRL &= ~CORETIM_ENABLE; SysTick->LOAD = (UINT32)(nextResponseTime - 1UL); /* set reload register */ @@ -96,7 +106,7 @@ WEAK VOID ArchSysTickReload(UINT64 nextResponseTime) SysTick->CTRL |= CORETIM_ENABLE; } -WEAK UINT64 ArchGetTickCycle(UINT32 *period) +STATIC UINT64 SysTickCycleGet(UINT32 *period) { UINT32 hwCycle; UINT32 intSave = LOS_IntLock(); @@ -106,16 +116,21 @@ WEAK UINT64 ArchGetTickCycle(UINT32 *period) return (UINT64)hwCycle; } -WEAK VOID ArchTickLock(VOID) +STATIC VOID SysTickLock(VOID) { SysTick->CTRL &= ~CORETIM_ENABLE; } -WEAK VOID ArchTickUnlock(VOID) +STATIC VOID SysTickUnlock(VOID) { SysTick->CTRL |= CORETIM_ENABLE; } +ArchTickTimer *ArchSysTickTimerGet(VOID) +{ + return &g_archTickTimer; +} + VOID Wfi(VOID) { __asm__ volatile("wait"); diff --git a/arch/include/los_timer.h b/arch/include/los_timer.h index 1650cf83..ef9af2fb 100644 --- a/arch/include/los_timer.h +++ b/arch/include/los_timer.h @@ -33,6 +33,7 @@ #define _LOS_TIMER_H #include "los_compiler.h" +#include "los_interrupt.h" #ifdef __cplusplus #if __cplusplus @@ -52,57 +53,36 @@ extern "C" { #define RTC_CALIBRATE_SLEEP_TIME 8 #define MACHINE_CYCLE_DEALAY_TIMES (LOSCFG_BASE_CORE_TICK_PER_SECOND << 2) -typedef VOID (*OS_TICK_HANDLER)(VOID); - -VOID ArchTickLock(VOID); - -VOID ArchTickUnlock(VOID); +typedef struct { + UINT32 freq; + INT32 irqNum; + UINT32 (*init)(HWI_PROC_FUNC tickHandler); + UINT64 (*getCycle)(UINT32 *period); + VOID (*reload)(UINT64 time); + VOID (*lock)(VOID); + VOID (*unlock)(VOID); + HWI_PROC_FUNC tickHandler; +} ArchTickTimer; UINT32 ArchEnterSleep(VOID); /** * @ingroup los_timer - * @brief Get systick cycle. + * @brief Get tick timer control block. * * @par Description: - * This API is used to get systick cycle and return current tick period. + * This API is used to get tick timer control block. * - * @attention - *