armv8 system timer的控制

armv8的系统定时器时钟源是在SOC上,且每个pe上有一个timer。pe可以通过访问寄存器的方式来读和控制timer。

timer有关的寄存器主要有三类:控制寄存器,倒计时寄存器和比较寄存器。

我们只关心virtual timer。最下面的是控制寄存器,中间是倒计时寄存器,最上面是比较寄存器。使用timer时先设置倒计时寄存器或比较寄存器,然后将控制寄存器bit0置1.这样等到条件满足,时钟中断就来了(前提是中断控制器已经ok)。

问题是如何处理timer中断。时钟发起中断的条件是控制寄存器的bit1为0,bit2为1,其中bit0为掩码位,bit1为状态位,中断处理程序一定要将状态位恢复才行,但是这一位是只读的,写0是不行的。

通常的做法是先将mask位置1,再更改倒计时寄存器或比较寄存器,且比较寄存器必须比当前的counter值大,最后unmask。这样就可以完成时钟中断的响应了,当然实际操作可以根据具体的需求分开操作。如果不按上述操作就会产生IRQ storm,也就是时钟中断没有被处理,不断发起中断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值