37#define STRING_COMB(x, y, z) x ## y ## z
39#ifdef LOSCFG_ARCH_SECURE_MONITOR_MODE
40#define TIMER_REG(reg) STRING_COMB(TIMER_REG_, CNTPS, reg)
42#define TIMER_REG(reg) STRING_COMB(TIMER_REG_, CNTP, reg)
44#define TIMER_REG_CTL TIMER_REG(_CTL)
45#define TIMER_REG_TVAL TIMER_REG(_TVAL)
46#define TIMER_REG_CVAL TIMER_REG(_CVAL)
47#define TIMER_REG_CT TIMER_REG(CT)
51#define TIMER_REG_CNTFRQ cntfrq_el0
54#define TIMER_REG_CNTP_CTL cntp_ctl_el0
55#define TIMER_REG_CNTP_TVAL cntp_tval_el0
56#define TIMER_REG_CNTP_CVAL cntp_cval_el0
57#define TIMER_REG_CNTPCT cntpct_el0
60#define TIMER_REG_CNTPS_CTL cntps_ctl_el1
61#define TIMER_REG_CNTPS_TVAL cntps_tval_el1
62#define TIMER_REG_CNTPS_CVAL cntps_cval_el1
63#define TIMER_REG_CNTPSCT cntpct_el0
65#define READ_TIMER_REG32(reg) AARCH64_SYSREG_READ(reg)
66#define READ_TIMER_REG64(reg) AARCH64_SYSREG_READ(reg)
67#define WRITE_TIMER_REG32(reg, val) AARCH64_SYSREG_WRITE(reg, (UINT64)(val))
68#define WRITE_TIMER_REG64(reg, val) AARCH64_SYSREG_WRITE(reg, val)
72#define TIMER_REG_CNTFRQ CP15_REG(c14, 0, c0, 0)
75#define TIMER_REG_CNTP_CTL CP15_REG(c14, 0, c2, 1)
76#define TIMER_REG_CNTP_TVAL CP15_REG(c14, 0, c2, 0)
77#define TIMER_REG_CNTP_CVAL CP15_REG64(c14, 2)
78#define TIMER_REG_CNTPCT CP15_REG64(c14, 0)
83#define READ_TIMER_REG32(reg) ARM_SYSREG_READ(reg)
84#define READ_TIMER_REG64(reg) ARM_SYSREG64_READ(reg)
85#define WRITE_TIMER_REG32(reg, val) ARM_SYSREG_WRITE(reg, val)
86#define WRITE_TIMER_REG64(reg, val) ARM_SYSREG64_WRITE(reg, val)
97 return READ_TIMER_REG32(TIMER_REG_CNTFRQ);
102 WRITE_TIMER_REG32(TIMER_REG_CNTFRQ, freq);
107 WRITE_TIMER_REG32(TIMER_REG_CTL, cntpCtl);
112 return READ_TIMER_REG64(TIMER_REG_CVAL);
117 WRITE_TIMER_REG64(TIMER_REG_CVAL, cval);
122 WRITE_TIMER_REG32(TIMER_REG_TVAL, tval);
129 cntpct = READ_TIMER_REG64(TIMER_REG_CT);
140 PRINT_ERR(
"%s, %d create tick irq failed, ret:0x%x\n", __FUNCTION__, __LINE__, ret);
160 __asm__
volatile (
"nop");
174 return (
UINT32)((cval > cycles) ? (cval - cycles) : 0);
STATIC_INLINE VOID TimerTvalWrite(UINT32 tval)
STATIC_INLINE VOID TimerCtlWrite(UINT32 cntpCtl)
LITE_OS_SEC_TEXT_INIT VOID HalClockStart(VOID)
UINT64 HalClockTickTimerReload(UINT64 cycles)
VOID HalClockFreqWrite(UINT32 freq)
UINT32 HalClockGetTickTimerCycles(VOID)
UINT32 HalClockFreqRead(VOID)
DEPRECATED UINT64 hi_sched_clock(VOID)
STATIC_INLINE VOID TimerCvalWrite(UINT64 cval)
UINT64 HalClockGetCycles(VOID)
LITE_OS_SEC_TEXT_INIT VOID HalClockInit(VOID)
STATIC_INLINE UINT64 TimerCvalRead(VOID)
VOID HalDelayUs(UINT32 usecs)
GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器 http://weharmonyos.com/blog/44....
VOID HalIrqUnmask(UINT32 vector)
撤销中断屏蔽
VOID HalIrqClear(UINT32 vector)
VOID HalIrqMask(UINT32 vector)
屏蔽中断
LITE_OS_SEC_DATA_INIT UINT32 g_sysClock
系统时钟,是绝大部分部件工作的时钟源,也是其他所有外设的时钟的来源
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会调用该中断处理程序
LITE_OS_SEC_TEXT_MINOR UINT64 LOS_CurrNanosec(VOID)
获取自系统启动以来的纳秒数
LITE_OS_SEC_TEXT VOID OsTickHandler(VOID)
Handle the system tick timeout.