更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
arm_generic_timer.c 文件参考

浏览源代码.

函数

UINT32 HalClockFreqRead (VOID)
 
VOID HalClockFreqWrite (UINT32 freq)
 
STATIC_INLINE VOID TimerCtlWrite (UINT32 cntpCtl)
 
STATIC_INLINE UINT64 TimerCvalRead (VOID)
 
STATIC_INLINE VOID TimerCvalWrite (UINT64 cval)
 
STATIC_INLINE VOID TimerTvalWrite (UINT32 tval)
 
UINT64 HalClockGetCycles (VOID)
 
LITE_OS_SEC_TEXT_INIT VOID HalClockInit (VOID)
 
LITE_OS_SEC_TEXT_INIT VOID HalClockStart (VOID)
 
VOID HalDelayUs (UINT32 usecs)
 
DEPRECATED UINT64 hi_sched_clock (VOID)
 
UINT32 HalClockGetTickTimerCycles (VOID)
 
UINT64 HalClockTickTimerReload (UINT64 cycles)
 

函数说明

◆ HalClockFreqRead()

UINT32 HalClockFreqRead ( VOID  )

在文件 arm_generic_timer.c95 行定义.

96{
97 return READ_TIMER_REG32(TIMER_REG_CNTFRQ);
98}
这是这个函数的调用关系图:

◆ HalClockFreqWrite()

VOID HalClockFreqWrite ( UINT32  freq)

在文件 arm_generic_timer.c100 行定义.

101{
102 WRITE_TIMER_REG32(TIMER_REG_CNTFRQ, freq);
103}
这是这个函数的调用关系图:

◆ HalClockGetCycles()

UINT64 HalClockGetCycles ( VOID  )

在文件 arm_generic_timer.c125 行定义.

126{
127 UINT64 cntpct;
128
129 cntpct = READ_TIMER_REG64(TIMER_REG_CT);
130 return cntpct;
131}
long unsigned int UINT64
Definition: los_typedef.h:66
这是这个函数的调用关系图:

◆ HalClockGetTickTimerCycles()

UINT32 HalClockGetTickTimerCycles ( VOID  )

在文件 arm_generic_timer.c169 行定义.

170{
171 UINT64 cval = TimerCvalRead();
172 UINT64 cycles = HalClockGetCycles();
173
174 return (UINT32)((cval > cycles) ? (cval - cycles) : 0);
175}
UINT64 HalClockGetCycles(VOID)
STATIC_INLINE UINT64 TimerCvalRead(VOID)
unsigned int UINT32
Definition: los_typedef.h:57
函数调用图:

◆ HalClockInit()

LITE_OS_SEC_TEXT_INIT VOID HalClockInit ( VOID  )

在文件 arm_generic_timer.c133 行定义.

134{
135 UINT32 ret;
136
137 g_sysClock = HalClockFreqRead();//读取CPU的时钟频率
138 ret = LOS_HwiCreate(OS_TICK_INT_NUM, MIN_INTERRUPT_PRIORITY, 0, OsTickHandler, 0);//创建硬中断定时器
139 if (ret != LOS_OK) {
140 PRINT_ERR("%s, %d create tick irq failed, ret:0x%x\n", __FUNCTION__, __LINE__, ret);
141 }
142}
UINT32 HalClockFreqRead(VOID)
LITE_OS_SEC_DATA_INIT UINT32 g_sysClock
系统时钟,是绝大部分部件工作的时钟源,也是其他所有外设的时钟的来源
Definition: los_tick.c:40
LITE_OS_SEC_TEXT_INIT UINT32 LOS_HwiCreate(HWI_HANDLE_T hwiNum, HWI_PRIOR_T hwiPrio, HWI_MODE_T hwiMode, HWI_PROC_FUNC hwiHandler, HwiIrqParam *irqParam)
创建一个硬中断 中断创建,注册中断号、中断触发模式、中断优先级、中断处理程序。中断被触发时, handleIrq会调用该中断处理程序
Definition: los_hwi.c:429
LITE_OS_SEC_TEXT VOID OsTickHandler(VOID)
Handle the system tick timeout.
Definition: los_tick.c:50
函数调用图:
这是这个函数的调用关系图:

◆ HalClockStart()

LITE_OS_SEC_TEXT_INIT VOID HalClockStart ( VOID  )

在文件 arm_generic_timer.c144 行定义.

145{
146 HalIrqUnmask(OS_TICK_INT_NUM);
147
148 /* triggle the first tick */
149 TimerCtlWrite(0);
150 TimerTvalWrite(OS_CYCLE_PER_TICK);
151 TimerCtlWrite(1);
152}
STATIC_INLINE VOID TimerTvalWrite(UINT32 tval)
STATIC_INLINE VOID TimerCtlWrite(UINT32 cntpCtl)
VOID HalIrqUnmask(UINT32 vector)
撤销中断屏蔽
Definition: gic_v2.c:86
函数调用图:
这是这个函数的调用关系图:

◆ HalClockTickTimerReload()

UINT64 HalClockTickTimerReload ( UINT64  cycles)

在文件 arm_generic_timer.c177 行定义.

178{
179 HalIrqMask(OS_TICK_INT_NUM);
180 HalIrqClear(OS_TICK_INT_NUM);
181
182 TimerCtlWrite(0);
184 TimerCtlWrite(1);
185
186 HalIrqUnmask(OS_TICK_INT_NUM);
187 return cycles;
188}
STATIC_INLINE VOID TimerCvalWrite(UINT64 cval)
VOID HalIrqClear(UINT32 vector)
Definition: gic_v2.c:104
VOID HalIrqMask(UINT32 vector)
屏蔽中断
Definition: gic_v2.c:77
函数调用图:
这是这个函数的调用关系图:

◆ HalDelayUs()

VOID HalDelayUs ( UINT32  usecs)

在文件 arm_generic_timer.c154 行定义.

155{
156 UINT64 cycles = (UINT64)usecs * g_sysClock / OS_SYS_US_PER_SECOND;
157 UINT64 deadline = HalClockGetCycles() + cycles;
158
159 while (HalClockGetCycles() < deadline) {
160 __asm__ volatile ("nop");
161 }
162}
函数调用图:
这是这个函数的调用关系图:

◆ hi_sched_clock()

DEPRECATED UINT64 hi_sched_clock ( VOID  )

在文件 arm_generic_timer.c164 行定义.

165{
166 return LOS_CurrNanosec();
167}
LITE_OS_SEC_TEXT_MINOR UINT64 LOS_CurrNanosec(VOID)
获取自系统启动以来的纳秒数
Definition: los_hw_tick.c:62
函数调用图:

◆ TimerCtlWrite()

STATIC_INLINE VOID TimerCtlWrite ( UINT32  cntpCtl)

在文件 arm_generic_timer.c105 行定义.

106{
107 WRITE_TIMER_REG32(TIMER_REG_CTL, cntpCtl);
108}
这是这个函数的调用关系图:

◆ TimerCvalRead()

STATIC_INLINE UINT64 TimerCvalRead ( VOID  )

在文件 arm_generic_timer.c110 行定义.

111{
112 return READ_TIMER_REG64(TIMER_REG_CVAL);
113}
这是这个函数的调用关系图:

◆ TimerCvalWrite()

STATIC_INLINE VOID TimerCvalWrite ( UINT64  cval)

在文件 arm_generic_timer.c115 行定义.

116{
117 WRITE_TIMER_REG64(TIMER_REG_CVAL, cval);
118}
这是这个函数的调用关系图:

◆ TimerTvalWrite()

STATIC_INLINE VOID TimerTvalWrite ( UINT32  tval)

在文件 arm_generic_timer.c120 行定义.

121{
122 WRITE_TIMER_REG32(TIMER_REG_TVAL, tval);
123}
这是这个函数的调用关系图: