可以通过4个寄存器去操作定时器。分别是加载寄存器,计数寄存器,控制寄存器和中断清除寄存器。
FR80xH芯片内存映射如下图
我们可以看到定时器的地址是0x50002000,所以我们看到代码中有关定时器的一些定义如下:
定时器寄存器相关定义和定时器定义如下:
这里定义了定时器类型,定时器类型里面包含了4个定时器寄存器的相关定义,然后我们就可以通过这个定时器类型struct timer操作定时器了。
官方driver_timer.h中提供了7个函数来操作定时器,分别如下:
void timer_run(uint32_t timer_addr);/*启动定时器,timer_addr只能是上面定义的TIMER0或TIMER1*/
void timer_stop(uint32_t timer_addr);/*停止定时器*/
void timer_reload(uint32_t timer_addr);/*重新加载计数器*/
uint32_t timer_get_load_value(uint32_t timer_addr);/*获取计数器重载值*/
uint32_t timer_get_current_value(uint32_t timer_addr);/*获取计数器计数值*/
void timer_clear_interrupt(uint32_t timer_addr);/*定时器清中断*/
uint8_t timer_init(uint32_t timer_addr, uint32_t count_us, uint8_t run_mode);/*初始化定时器,count_us指明周期时间,run_mode指明定时器运行单周期模式还上周期模式*/
值得说明的是,官方Demo对定时器的操作是通过系统层的定时器API函数去操作的,官方demo好像也没有开放有关这个系统层定时器操作的相关代码,然后就算是有了这个驱动文件,对于官方的Demo还是建议不要使用这个硬件层的定时器操作函数。希望官方开发系统的相关代码以便分析使用。
作者: axushilong, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-295363.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
nufuvcgx 2020-4-13 15:27