!523 fix: tick timer时钟频率赋值修改为运行时赋值
Merge pull request !523 from zhushengle/tick_timer
This commit is contained in:
commit
f3fbeb87db
|
@ -58,7 +58,7 @@ STATIC VOID SysTickLock(VOID);
|
||||||
STATIC VOID SysTickUnlock(VOID);
|
STATIC VOID SysTickUnlock(VOID);
|
||||||
|
|
||||||
STATIC ArchTickTimer g_archTickTimer = {
|
STATIC ArchTickTimer g_archTickTimer = {
|
||||||
.freq = OS_SYS_CLOCK,
|
.freq = 0,
|
||||||
.irqNum = OS_TIMER_IRQ_NUM,
|
.irqNum = OS_TIMER_IRQ_NUM,
|
||||||
.init = SysTickStart,
|
.init = SysTickStart,
|
||||||
.getCycle = SysTickCycleGet,
|
.getCycle = SysTickCycleGet,
|
||||||
|
@ -73,6 +73,9 @@ STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
||||||
UINT32 intSave = LOS_IntLock();
|
UINT32 intSave = LOS_IntLock();
|
||||||
UINT32 value;
|
UINT32 value;
|
||||||
|
|
||||||
|
ArchTickTimer *tick = &g_archTickTimer;
|
||||||
|
tick->freq = OS_SYS_CLOCK;
|
||||||
|
|
||||||
READ_UINT32(value, OS_TIMER_CLK_PWD_ADDR);
|
READ_UINT32(value, OS_TIMER_CLK_PWD_ADDR);
|
||||||
value &= ~(OS_TIMER_32K_CLK_BIT);
|
value &= ~(OS_TIMER_32K_CLK_BIT);
|
||||||
WRITE_UINT32(value, OS_TIMER_CLK_PWD_ADDR);
|
WRITE_UINT32(value, OS_TIMER_CLK_PWD_ADDR);
|
||||||
|
|
|
@ -43,7 +43,7 @@ STATIC VOID SysTickLock(VOID);
|
||||||
STATIC VOID SysTickUnlock(VOID);
|
STATIC VOID SysTickUnlock(VOID);
|
||||||
|
|
||||||
STATIC ArchTickTimer g_archTickTimer = {
|
STATIC ArchTickTimer g_archTickTimer = {
|
||||||
.freq = OS_SYS_CLOCK,
|
.freq = 0,
|
||||||
.irqNum = SysTick_IRQn,
|
.irqNum = SysTick_IRQn,
|
||||||
.init = SysTickStart,
|
.init = SysTickStart,
|
||||||
.getCycle = SysTickCycleGet,
|
.getCycle = SysTickCycleGet,
|
||||||
|
@ -58,6 +58,8 @@ STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
||||||
UINT32 ret;
|
UINT32 ret;
|
||||||
ArchTickTimer *tick = &g_archTickTimer;
|
ArchTickTimer *tick = &g_archTickTimer;
|
||||||
|
|
||||||
|
tick->freq = OS_SYS_CLOCK;
|
||||||
|
|
||||||
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
||||||
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
||||||
OsSetVector(tick->irqNum, handler, NULL);
|
OsSetVector(tick->irqNum, handler, NULL);
|
||||||
|
|
|
@ -42,7 +42,7 @@ STATIC VOID SysTickLock(VOID);
|
||||||
STATIC VOID SysTickUnlock(VOID);
|
STATIC VOID SysTickUnlock(VOID);
|
||||||
|
|
||||||
STATIC ArchTickTimer g_archTickTimer = {
|
STATIC ArchTickTimer g_archTickTimer = {
|
||||||
.freq = OS_SYS_CLOCK,
|
.freq = 0,
|
||||||
.irqNum = SysTick_IRQn,
|
.irqNum = SysTick_IRQn,
|
||||||
.init = SysTickStart,
|
.init = SysTickStart,
|
||||||
.getCycle = SysTickCycleGet,
|
.getCycle = SysTickCycleGet,
|
||||||
|
@ -57,6 +57,8 @@ STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
||||||
UINT32 ret;
|
UINT32 ret;
|
||||||
ArchTickTimer *tick = &g_archTickTimer;
|
ArchTickTimer *tick = &g_archTickTimer;
|
||||||
|
|
||||||
|
tick->freq = OS_SYS_CLOCK;
|
||||||
|
|
||||||
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
||||||
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
||||||
OsSetVector(tick->irqNum, handler, NULL);
|
OsSetVector(tick->irqNum, handler, NULL);
|
||||||
|
|
|
@ -41,7 +41,7 @@ STATIC VOID SysTickLock(VOID);
|
||||||
STATIC VOID SysTickUnlock(VOID);
|
STATIC VOID SysTickUnlock(VOID);
|
||||||
|
|
||||||
STATIC ArchTickTimer g_archTickTimer = {
|
STATIC ArchTickTimer g_archTickTimer = {
|
||||||
.freq = OS_SYS_CLOCK,
|
.freq = 0,
|
||||||
.irqNum = SysTick_IRQn,
|
.irqNum = SysTick_IRQn,
|
||||||
.init = SysTickStart,
|
.init = SysTickStart,
|
||||||
.getCycle = SysTickCycleGet,
|
.getCycle = SysTickCycleGet,
|
||||||
|
@ -56,6 +56,8 @@ STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
||||||
UINT32 ret;
|
UINT32 ret;
|
||||||
ArchTickTimer *tick = &g_archTickTimer;
|
ArchTickTimer *tick = &g_archTickTimer;
|
||||||
|
|
||||||
|
tick->freq = OS_SYS_CLOCK;
|
||||||
|
|
||||||
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
||||||
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
||||||
OsSetVector(tick->irqNum, handler, NULL);
|
OsSetVector(tick->irqNum, handler, NULL);
|
||||||
|
|
|
@ -42,7 +42,7 @@ STATIC VOID SysTickLock(VOID);
|
||||||
STATIC VOID SysTickUnlock(VOID);
|
STATIC VOID SysTickUnlock(VOID);
|
||||||
|
|
||||||
STATIC ArchTickTimer g_archTickTimer = {
|
STATIC ArchTickTimer g_archTickTimer = {
|
||||||
.freq = OS_SYS_CLOCK,
|
.freq = 0,
|
||||||
.irqNum = SysTick_IRQn,
|
.irqNum = SysTick_IRQn,
|
||||||
.init = SysTickStart,
|
.init = SysTickStart,
|
||||||
.getCycle = SysTickCycleGet,
|
.getCycle = SysTickCycleGet,
|
||||||
|
@ -57,6 +57,8 @@ STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
||||||
UINT32 ret;
|
UINT32 ret;
|
||||||
ArchTickTimer *tick = &g_archTickTimer;
|
ArchTickTimer *tick = &g_archTickTimer;
|
||||||
|
|
||||||
|
tick->freq = OS_SYS_CLOCK;
|
||||||
|
|
||||||
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
||||||
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
||||||
OsSetVector(tick->irqNum, handler, NULL);
|
OsSetVector(tick->irqNum, handler, NULL);
|
||||||
|
|
|
@ -42,7 +42,7 @@ STATIC VOID SysTickLock(VOID);
|
||||||
STATIC VOID SysTickUnlock(VOID);
|
STATIC VOID SysTickUnlock(VOID);
|
||||||
|
|
||||||
STATIC ArchTickTimer g_archTickTimer = {
|
STATIC ArchTickTimer g_archTickTimer = {
|
||||||
.freq = OS_SYS_CLOCK,
|
.freq = 0,
|
||||||
.irqNum = SysTick_IRQn,
|
.irqNum = SysTick_IRQn,
|
||||||
.init = SysTickStart,
|
.init = SysTickStart,
|
||||||
.getCycle = SysTickCycleGet,
|
.getCycle = SysTickCycleGet,
|
||||||
|
@ -57,6 +57,8 @@ STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
||||||
UINT32 ret;
|
UINT32 ret;
|
||||||
ArchTickTimer *tick = &g_archTickTimer;
|
ArchTickTimer *tick = &g_archTickTimer;
|
||||||
|
|
||||||
|
tick->freq = OS_SYS_CLOCK;
|
||||||
|
|
||||||
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
||||||
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
||||||
OsSetVector(tick->irqNum, handler, NULL);
|
OsSetVector(tick->irqNum, handler, NULL);
|
||||||
|
|
|
@ -42,7 +42,7 @@ STATIC VOID SysTickLock(VOID);
|
||||||
STATIC VOID SysTickUnlock(VOID);
|
STATIC VOID SysTickUnlock(VOID);
|
||||||
|
|
||||||
STATIC ArchTickTimer g_archTickTimer = {
|
STATIC ArchTickTimer g_archTickTimer = {
|
||||||
.freq = OS_SYS_CLOCK,
|
.freq = 0,
|
||||||
.irqNum = SysTick_IRQn,
|
.irqNum = SysTick_IRQn,
|
||||||
.init = SysTickStart,
|
.init = SysTickStart,
|
||||||
.getCycle = SysTickCycleGet,
|
.getCycle = SysTickCycleGet,
|
||||||
|
@ -57,6 +57,8 @@ STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
||||||
UINT32 ret;
|
UINT32 ret;
|
||||||
ArchTickTimer *tick = &g_archTickTimer;
|
ArchTickTimer *tick = &g_archTickTimer;
|
||||||
|
|
||||||
|
tick->freq = OS_SYS_CLOCK;
|
||||||
|
|
||||||
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
||||||
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
||||||
OsSetVector(tick->irqNum, handler, NULL);
|
OsSetVector(tick->irqNum, handler, NULL);
|
||||||
|
|
|
@ -42,7 +42,7 @@ STATIC VOID SysTickLock(VOID);
|
||||||
STATIC VOID SysTickUnlock(VOID);
|
STATIC VOID SysTickUnlock(VOID);
|
||||||
|
|
||||||
STATIC ArchTickTimer g_archTickTimer = {
|
STATIC ArchTickTimer g_archTickTimer = {
|
||||||
.freq = OS_SYS_CLOCK,
|
.freq = 0,
|
||||||
.irqNum = SysTick_IRQn,
|
.irqNum = SysTick_IRQn,
|
||||||
.init = SysTickStart,
|
.init = SysTickStart,
|
||||||
.getCycle = SysTickCycleGet,
|
.getCycle = SysTickCycleGet,
|
||||||
|
@ -57,6 +57,8 @@ STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
||||||
UINT32 ret;
|
UINT32 ret;
|
||||||
ArchTickTimer *tick = &g_archTickTimer;
|
ArchTickTimer *tick = &g_archTickTimer;
|
||||||
|
|
||||||
|
tick->freq = OS_SYS_CLOCK;
|
||||||
|
|
||||||
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
||||||
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
||||||
OsSetVector(tick->irqNum, handler, NULL);
|
OsSetVector(tick->irqNum, handler, NULL);
|
||||||
|
|
|
@ -42,7 +42,7 @@ STATIC VOID SysTickLock(VOID);
|
||||||
STATIC VOID SysTickUnlock(VOID);
|
STATIC VOID SysTickUnlock(VOID);
|
||||||
|
|
||||||
STATIC ArchTickTimer g_archTickTimer = {
|
STATIC ArchTickTimer g_archTickTimer = {
|
||||||
.freq = OS_SYS_CLOCK,
|
.freq = 0,
|
||||||
.irqNum = SysTick_IRQn,
|
.irqNum = SysTick_IRQn,
|
||||||
.init = SysTickStart,
|
.init = SysTickStart,
|
||||||
.getCycle = SysTickCycleGet,
|
.getCycle = SysTickCycleGet,
|
||||||
|
@ -57,6 +57,8 @@ STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
||||||
UINT32 ret;
|
UINT32 ret;
|
||||||
ArchTickTimer *tick = &g_archTickTimer;
|
ArchTickTimer *tick = &g_archTickTimer;
|
||||||
|
|
||||||
|
tick->freq = OS_SYS_CLOCK;
|
||||||
|
|
||||||
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
||||||
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
||||||
OsSetVector(tick->irqNum, handler, NULL);
|
OsSetVector(tick->irqNum, handler, NULL);
|
||||||
|
|
|
@ -42,7 +42,7 @@ STATIC VOID SysTickLock(VOID);
|
||||||
STATIC VOID SysTickUnlock(VOID);
|
STATIC VOID SysTickUnlock(VOID);
|
||||||
|
|
||||||
STATIC ArchTickTimer g_archTickTimer = {
|
STATIC ArchTickTimer g_archTickTimer = {
|
||||||
.freq = OS_SYS_CLOCK,
|
.freq = 0,
|
||||||
.irqNum = SysTick_IRQn,
|
.irqNum = SysTick_IRQn,
|
||||||
.init = SysTickStart,
|
.init = SysTickStart,
|
||||||
.getCycle = SysTickCycleGet,
|
.getCycle = SysTickCycleGet,
|
||||||
|
@ -57,6 +57,8 @@ STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
||||||
UINT32 ret;
|
UINT32 ret;
|
||||||
ArchTickTimer *tick = &g_archTickTimer;
|
ArchTickTimer *tick = &g_archTickTimer;
|
||||||
|
|
||||||
|
tick->freq = OS_SYS_CLOCK;
|
||||||
|
|
||||||
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
||||||
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
||||||
OsSetVector(tick->irqNum, handler, NULL);
|
OsSetVector(tick->irqNum, handler, NULL);
|
||||||
|
|
|
@ -61,7 +61,7 @@ STATIC VOID SysTickLock(VOID);
|
||||||
STATIC VOID SysTickUnlock(VOID);
|
STATIC VOID SysTickUnlock(VOID);
|
||||||
|
|
||||||
STATIC ArchTickTimer g_archTickTimer = {
|
STATIC ArchTickTimer g_archTickTimer = {
|
||||||
.freq = OS_SYS_CLOCK,
|
.freq = 0,
|
||||||
.irqNum = TIM_INT_NUM,
|
.irqNum = TIM_INT_NUM,
|
||||||
.init = SysTickStart,
|
.init = SysTickStart,
|
||||||
.getCycle = SysTickCycleGet,
|
.getCycle = SysTickCycleGet,
|
||||||
|
@ -82,6 +82,8 @@ STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
||||||
{
|
{
|
||||||
ArchTickTimer *tick = &g_archTickTimer;
|
ArchTickTimer *tick = &g_archTickTimer;
|
||||||
|
|
||||||
|
tick->freq = OS_SYS_CLOCK;
|
||||||
|
|
||||||
SysTick->LOAD = (OS_CYCLE_PER_TICK - 1);
|
SysTick->LOAD = (OS_CYCLE_PER_TICK - 1);
|
||||||
SysTick->VAL = 0;
|
SysTick->VAL = 0;
|
||||||
SysTick->CTRL |= (CORETIM_SOURCE | CORETIM_ENABLE | CORETIM_INTMASK);
|
SysTick->CTRL |= (CORETIM_SOURCE | CORETIM_ENABLE | CORETIM_INTMASK);
|
||||||
|
|
|
@ -53,7 +53,7 @@ STATIC VOID SysTickLock(VOID);
|
||||||
STATIC VOID SysTickUnlock(VOID);
|
STATIC VOID SysTickUnlock(VOID);
|
||||||
|
|
||||||
STATIC ArchTickTimer g_archTickTimer = {
|
STATIC ArchTickTimer g_archTickTimer = {
|
||||||
.freq = OS_SYS_CLOCK,
|
.freq = 0,
|
||||||
.irqNum = SysTimer_IRQn,
|
.irqNum = SysTimer_IRQn,
|
||||||
.init = SysTickStart,
|
.init = SysTickStart,
|
||||||
.getCycle = SysTickCycleGet,
|
.getCycle = SysTickCycleGet,
|
||||||
|
@ -65,6 +65,9 @@ STATIC ArchTickTimer g_archTickTimer = {
|
||||||
|
|
||||||
STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
||||||
{
|
{
|
||||||
|
ArchTickTimer *tick = &g_archTickTimer;
|
||||||
|
tick->freq = OS_SYS_CLOCK;
|
||||||
|
|
||||||
SysTick_Config(SYSTICK_TICK_CONST);
|
SysTick_Config(SYSTICK_TICK_CONST);
|
||||||
ECLIC_DisableIRQ(SysTimer_IRQn);
|
ECLIC_DisableIRQ(SysTimer_IRQn);
|
||||||
ECLIC_SetLevelIRQ(SysTimer_IRQn, configKERNEL_INTERRUPT_PRIORITY);
|
ECLIC_SetLevelIRQ(SysTimer_IRQn, configKERNEL_INTERRUPT_PRIORITY);
|
||||||
|
|
|
@ -45,7 +45,7 @@ STATIC VOID SysTickLock(VOID);
|
||||||
STATIC VOID SysTickUnlock(VOID);
|
STATIC VOID SysTickUnlock(VOID);
|
||||||
|
|
||||||
STATIC ArchTickTimer g_archTickTimer = {
|
STATIC ArchTickTimer g_archTickTimer = {
|
||||||
.freq = OS_SYS_CLOCK,
|
.freq = 0,
|
||||||
.irqNum = RISCV_MACH_TIMER_IRQ,
|
.irqNum = RISCV_MACH_TIMER_IRQ,
|
||||||
.init = SysTickStart,
|
.init = SysTickStart,
|
||||||
.getCycle = SysTickCycleGet,
|
.getCycle = SysTickCycleGet,
|
||||||
|
@ -57,12 +57,16 @@ STATIC ArchTickTimer g_archTickTimer = {
|
||||||
|
|
||||||
STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
||||||
{
|
{
|
||||||
|
ArchTickTimer *tick = &g_archTickTimer;
|
||||||
|
|
||||||
UINT32 period = (UINT32)LOSCFG_BASE_CORE_TICK_RESPONSE_MAX;
|
UINT32 period = (UINT32)LOSCFG_BASE_CORE_TICK_RESPONSE_MAX;
|
||||||
UINT32 ret = LOS_HwiCreate(RISCV_MACH_TIMER_IRQ, 0x1, 0, handler, period);
|
UINT32 ret = LOS_HwiCreate(RISCV_MACH_TIMER_IRQ, 0x1, 0, handler, period);
|
||||||
if (ret != LOS_OK) {
|
if (ret != LOS_OK) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tick->freq = OS_SYS_CLOCK;
|
||||||
|
|
||||||
WRITE_UINT32(0xffffffff, MTIMERCMP + 4); /* The high 4 bits of mtimer */
|
WRITE_UINT32(0xffffffff, MTIMERCMP + 4); /* The high 4 bits of mtimer */
|
||||||
WRITE_UINT32(period, MTIMERCMP);
|
WRITE_UINT32(period, MTIMERCMP);
|
||||||
WRITE_UINT32(0x0, MTIMERCMP + 4); /* The high 4 bits of mtimer */
|
WRITE_UINT32(0x0, MTIMERCMP + 4); /* The high 4 bits of mtimer */
|
||||||
|
|
|
@ -43,7 +43,7 @@ STATIC VOID SysTickLock(VOID);
|
||||||
STATIC VOID SysTickUnlock(VOID);
|
STATIC VOID SysTickUnlock(VOID);
|
||||||
|
|
||||||
STATIC ArchTickTimer g_archTickTimer = {
|
STATIC ArchTickTimer g_archTickTimer = {
|
||||||
.freq = OS_SYS_CLOCK,
|
.freq = 0,
|
||||||
.irqNum = OS_TICK_INT_NUM,
|
.irqNum = OS_TICK_INT_NUM,
|
||||||
.init = SysTickStart,
|
.init = SysTickStart,
|
||||||
.getCycle = SysTickCycleGet,
|
.getCycle = SysTickCycleGet,
|
||||||
|
@ -57,6 +57,8 @@ STATIC UINT32 SysTickStart(HWI_PROC_FUNC handler)
|
||||||
{
|
{
|
||||||
ArchTickTimer *tick = &g_archTickTimer;
|
ArchTickTimer *tick = &g_archTickTimer;
|
||||||
|
|
||||||
|
tick->freq = OS_SYS_CLOCK;
|
||||||
|
|
||||||
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
#if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1)
|
||||||
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
||||||
OsSetVector(tick->irqNum, handler, NULL);
|
OsSetVector(tick->irqNum, handler, NULL);
|
||||||
|
|
|
@ -104,7 +104,7 @@ LITE_OS_SEC_TEXT UINT64 LOS_SysCycleGet(VOID)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
LITE_OS_SEC_TEXT STATIC UINT32 TickTimerCheck(const ArchTickTimer *tick)
|
STATIC UINT32 TickTimerCheck(const ArchTickTimer *tick)
|
||||||
{
|
{
|
||||||
if (tick == NULL) {
|
if (tick == NULL) {
|
||||||
return LOS_ERRNO_SYS_PTR_NULL;
|
return LOS_ERRNO_SYS_PTR_NULL;
|
||||||
|
@ -120,9 +120,9 @@ LITE_OS_SEC_TEXT STATIC UINT32 TickTimerCheck(const ArchTickTimer *tick)
|
||||||
return LOS_ERRNO_TICK_CFG_INVALID;
|
return LOS_ERRNO_TICK_CFG_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tick->init == NULL || tick->reload == NULL ||
|
if ((tick->init == NULL) || (tick->reload == NULL) ||
|
||||||
tick->lock == NULL || tick->unlock == NULL ||
|
(tick->lock == NULL) || (tick->unlock == NULL) ||
|
||||||
tick->getCycle == NULL) {
|
(tick->getCycle == NULL)) {
|
||||||
return LOS_ERRNO_SYS_HOOK_IS_NULL;
|
return LOS_ERRNO_SYS_HOOK_IS_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,26 +136,43 @@ LITE_OS_SEC_TEXT STATIC UINT32 TickTimerCheck(const ArchTickTimer *tick)
|
||||||
LITE_OS_SEC_TEXT_INIT UINT32 OsTickTimerInit(VOID)
|
LITE_OS_SEC_TEXT_INIT UINT32 OsTickTimerInit(VOID)
|
||||||
{
|
{
|
||||||
UINT32 ret;
|
UINT32 ret;
|
||||||
|
UINT32 intSave;
|
||||||
HWI_PROC_FUNC tickHandler = (HWI_PROC_FUNC)OsTickHandler;
|
HWI_PROC_FUNC tickHandler = (HWI_PROC_FUNC)OsTickHandler;
|
||||||
|
|
||||||
g_sysTickTimer = LOS_SysTickTimerGet();
|
g_sysTickTimer = LOS_SysTickTimerGet();
|
||||||
|
if ((g_sysTickTimer->init == NULL) || (g_sysTickTimer->reload == NULL) ||
|
||||||
ret = TickTimerCheck(g_sysTickTimer);
|
(g_sysTickTimer->lock == NULL) || (g_sysTickTimer->unlock == NULL) ||
|
||||||
if (ret != LOS_OK) {
|
(g_sysTickTimer->getCycle == NULL)) {
|
||||||
PRINT_ERR("Tick timer param check failed, Error 0x%x\n", ret);
|
return LOS_ERRNO_SYS_HOOK_IS_NULL;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_sysClock = g_sysTickTimer->freq;
|
|
||||||
g_cyclesPerTick = g_sysTickTimer->freq / LOSCFG_BASE_CORE_TICK_PER_SECOND;
|
|
||||||
|
|
||||||
if (g_sysTickTimer->tickHandler != NULL) {
|
if (g_sysTickTimer->tickHandler != NULL) {
|
||||||
tickHandler = g_sysTickTimer->tickHandler;
|
tickHandler = g_sysTickTimer->tickHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
intSave = LOS_IntLock();
|
||||||
ret = g_sysTickTimer->init(tickHandler);
|
ret = g_sysTickTimer->init(tickHandler);
|
||||||
if (ret == LOS_OK) {
|
if (ret != LOS_OK) {
|
||||||
g_sysTimerIsInit = TRUE;
|
LOS_IntRestore(intSave);
|
||||||
}
|
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((g_sysTickTimer->freq == 0) || (g_sysTickTimer->freq < LOSCFG_BASE_CORE_TICK_PER_SECOND)) {
|
||||||
|
LOS_IntRestore(intSave);
|
||||||
|
return LOS_ERRNO_SYS_CLOCK_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_sysTickTimer->irqNum > (INT32)LOSCFG_PLATFORM_HWI_LIMIT) {
|
||||||
|
LOS_IntRestore(intSave);
|
||||||
|
return LOS_ERRNO_TICK_CFG_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_sysClock = g_sysTickTimer->freq;
|
||||||
|
g_cyclesPerTick = g_sysTickTimer->freq / LOSCFG_BASE_CORE_TICK_PER_SECOND;
|
||||||
|
g_sysTimerIsInit = TRUE;
|
||||||
|
|
||||||
|
LOS_IntRestore(intSave);
|
||||||
|
return LOS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
LITE_OS_SEC_TEXT UINT32 LOS_TickTimerRegister(const ArchTickTimer *timer, const HWI_PROC_FUNC tickHandler)
|
LITE_OS_SEC_TEXT UINT32 LOS_TickTimerRegister(const ArchTickTimer *timer, const HWI_PROC_FUNC tickHandler)
|
||||||
|
|
Loading…
Reference in New Issue