FR80xH芯片内有2个16位定时计数器,支持单周期或者周期模式。定时器框图如下: 可以通过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还是建议不要使用这个硬件层的定时器操作函数。希望官方开发系统的相关代码以便分析使用。