【龙芯1c库】封装硬件定时器接口和使用示例

龙芯1c库是把龙芯1c的常用外设的常用功能封装为一个库,类似于STM32库。完整源码请移步到https://gitee.com/caogos/OpenLoongsonLib1c

龙芯1c库中硬件定时器接口使用示例

封装的接口函数简介

首先来看看有哪些接口,如下

// 硬件定时器
typedef enum
{
    TIMER_PWM0,                     // PWM0用作硬件定时器
    TIMER_PWM1,                     // PWM1用作硬件定时器
    TIMER_PWM2,                     // PWM2用作硬件定时器
    TIMER_PWM3                      // PWM3用作硬件定时器
}ls1c_timer_t;


// 硬件定时器信息
typedef struct
{
    ls1c_timer_t timer;                  // 硬件定时器
    unsigned long time_ns;          // 定时时间
}timer_info_t;



/*
 * 初始化定时器,并开始定时
 * @timer_info 定时器和定时时间信息
 */
void timer_init(timer_info_t *timer_info);


/*
 * 停止定时器
 * @timer_info 定时器
 */
void timer_stop(timer_info_t *timer_info);


/*
 * 重启定时器
 * @timer_info 定时器
 */
void inline timer_restart(timer_info_t *timer_info);

每个函数都有个参数“timer_info_t *timer_info”,先来说说这个参数。参数类型“timer_info_t”是一个结构体,里面有两个成员,一个是指那个硬件定时器,另外一个是指定时器超时时间。

目前是把龙芯1C上的4个硬件PWM用作硬件定时器,即硬件PWM和硬件定时器的区别是,硬件PWM要输出pwm波形,可以不使用中断,而硬件定时器不输出波形(不占用IO资源),需要使用中断。

除了前面提到的三个函数timer_init(),timer_stop()和timer_restart()之外,还有中断相关的两个函数irq_install(),irq_enable()。有了这几个函数就可以实现硬件定时器了。

伪代码如下

调用timer_init()初始化定时器,调用irq_install()设置中断处理函数,然后调用irq_enable()使能中断即可,这时硬件定时器就已经跑起来了。

如果只需要一次定时,那么需要在中断处理函数中,调用timer_stop(),;如果需要重复定时,那么需要在中断处理函数中,调用timer_restart()。记住在不再需要定时器(产生中断)时,一定要调用timer_stop()来停止定时器,不论是单次定时,还是多次循环定时。

把伪代码转换为真实的代码如下

// 测试硬件定时器的源文件

#include "../lib/ls1c_timer.h"
#include "../lib/ls1c_gpio.h"
#include "../lib/ls1c_delay.h"
#include "../lib/ls1c_irq.h"



timer_info_t timer_info = {0};

// 中断计数器
volatile int test_timer_pwm0_irq_counter = 0;


/*
 * 定时器0的中断处理函数
 * @IRQn 中断号
 * @param 参数
 */
void test_timer_pwm0_irqhandler(int IRQn, void *param)
{
	// 重启定时器
    timer_restart(&timer_info);
	
    // 计数器加一
    test_timer_pwm0_irq_counter++;
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值