目录
前言
up主的联系方式:
微信公众号:嵌入式up
大家好!大家点点关注,大家的关注才是我持续更新的动力!
vx ——> buildupup 公众号 嵌入式up 如果文章对您有帮助,请打赏一元呗,感谢支持,分享不易,码字不易。希望对大家帮助!
一、定时器是什么?
1. 什么是定时器(timer)
定时器实际上就是芯片当中的一个内部设备。
顾名思义,定时器就是个规定时间的,比如说:规定LED灯1亮一次等等。
但是大家要清楚龙芯1B200内部是没有定时器的,这个在以前的文章里面也有讲过,所以再贴一遍。
没有定时器怎么办呢,这时候后我们有两种方法来解决类似需要定时的问题,一种是PWM模拟定时器,还有一种就是RTC计时中断。(本文目前只介绍一下第一种方法,后续讲到RTC再讲解RTC中断)
如下,官方文档也曾说明过PWM的定时器功能。
二、定时器编码示例
1.开发步骤
第1步, 新建工程
第2步, 在 bsp.h 中打开 PWM2 的宏定义, 并在 main.c 下添加 ls1b_gpio.h 和 ls1x_pwm.h文件。
第3步, 定义 pwm_cfg_t 结构体配置 PWM open 的 arg 参数。
第4步, 编写一个中断回调函数
第5步, 调用 ls1x_pwm_timer_start函数启动 PWM2 工作,开始定时。
第6步, 调用 ls1x_pwm_timer_stop函数停止 PWM2 工作,停止定时
2.代码
pwm定时器初始化:
pwm_cfg_t cfg;
cfg.cb = pwmtimer_callback;
cfg.isr = NULL;
cfg.mode = PWM_CONTINUE_TIMER;
cfg.hi_ns = 5000000;//5ms
cfg.lo_ns = 0;
ls1x_pwm_timer_start(devPWM2,&cfg);
定时回调函数:
unsigned int count = 0;
void pwmtimer_callback(void *pwm, int *stopit)
{
count++;
if(count <= 100)
{
gpio_write(3,0);
}
else if(count <= 200)
{
gpio_write(3,1);
}
else if(count > 200)
{
count = 0;
}
}
总结
pwm定时器定时的时间有些值是无法使用的,大家可以自己尝试一下,此处我咨询过相关技术人员,后续会有更新。此处就当留给大家一个尝试代码的彩蛋吧。我已经尝试过很多的时间了。