全志D1开发(三)添加定时器驱动

gewenbin
gewenbin
gewenbin
188
文章
15
评论
2022年5月1日19:48:05 评论 605

1. 选择系统tick定时器

在riscv架构中已经定义了定时器,但是如果要使用这个定时器就必须配合OpenSBI提供的接口来设置定时器的新值,在这里为了和之前的BSP教程统一,我们选择使用全志提供的厂商定时器来作为系统tick定时器。由于和全志R16使用的是相同的定时器,所以同样直接将定时器代码复制到driver目录下,并修改定时器模块的基址,如下所示。

全志D1开发(三)添加定时器驱动

2. 修改 bspLibc

首先在bspTickInit中添加定时器的启动代码,如下所示:

全志D1开发(三)添加定时器驱动

这里我们先不关心中断号设置,同样放到中断控制器设置好之后再回头来修改。在定时器中断处理函数中添加清除中断的代码,如下所示。

全志D1开发(三)添加定时器驱动

最后为定时器添加高精度修正接口,如下所示。

全志D1开发(三)添加定时器驱动

3. 功能验证

由于中断控制器我们还未初始化好,所以我们只能通过轮询定时器的中断状态寄存器来确定中断是否产生,在bspTickInit最后添加如下代码:

全志D1开发(三)添加定时器驱动

最后别忘了在bspMap.h中添加定时器寄存器的映射地址:

全志D1开发(三)添加定时器驱动

最后的最后我们将bspInit.c中内核启动参数中的kdlog改为no,不然会有一堆的输出打印干扰我们分析:

全志D1开发(三)添加定时器驱动

重新编译内核引导,如果在串口上看到我们添加的定时器验证打印,就说明定时器初始化没问题了:

全志D1开发(三)添加定时器驱动

gewenbin
  • 本文由 发表于 2022年5月1日19:48:05
  • 转载请务必保留本文链接:http://www.databusworld.cn/10655.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: