RIOT 技术笔记-08 RIOT操作系统中 通用定时器的使用
代码下载地址
https://files.cnblogs.com/files/caobw/RIOT-DEMO%E4%BB%A3%E7%A0%81.rar
cc2538中有4个通用定时器(0-3),每个定时器有两个通道(0-1)。首先看看下面的源码
main.c
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include "periph/timer.h"
uint8_t a = 0;
uint16_t number = 0;
void dumb_delay(uint16_t delay)
{
uint16_t i,j;
for (i = 0; i < delay; i++)
{
for(j = 0; j < 1; j++)
{
__asm__("nop");
}
}
}
static void call_back0(void *arg, int chan)
{
(void)arg;
number ++;
printf("number : %d\n",number);
}
int main(void)
{
puts("\nTest for peripheral TIMERs\n");
printf("Available timers: %i\n", TIMER_NUMOF);
printf("\nTesting TIMER_%u:\n", 0);
timer_init(TIMER_DEV(0), 1000000, call_back0, NULL); // 定时器0(0-3) 设置频率 回调函数
timer_set (TIMER_DEV(0), 0, 1000000); // 定时器0(0-3) 通道0(0-1)
printf("mojiuyu mojiuyu mojiuyu mojiuyu \n\n");
while(1)
{
dumb_delay(1); //如果没有这个语句,那么下面的函数就不执行了,程序会进入空闲模式,因此加个东西,放置进入空闲模式
if(number >= 10)
{
number=0;
printf("aaaaaaaaaaaaaaaaaaaaaaaaa = %d\n\n",number);
}
}
}
makefile
APPLICATION = 4-mjy-1timer
BOARD ?= cc2538dk
RIOTBASE ?= $(CURDIR)/../..
CFLAGS += -DDEVELHELP
QUIET ?= 1
include $(RIOTBASE)/Makefile.include
代码详解:
这个实验中,我们使用的是定时器0,通道0。因此我们在main函数中先把这个定时器中断给初始化。
我们使用了两条语句。
timer_init(TIMER_DEV(0), 1000000, call_back0, NULL); // 定时器0(0-3) 设置频率 回调函数
timer_set (TIMER_DEV(0), 0, 1000000); // 定时器0(0-3) 通道0(0-1)
这两条语句在头文件#include "periph/timer.h"中可以找到,具体的位置在RIOT\drivers\include\periph\timer.h,可以自己去看看。
TIMER_DEV(0)表示定时器0;1000000意思是每秒1MHz的频率。中断执行函数是call_back0。。这个中断执行函数很重要,很多人都不知道中断函数在什么地方,也就是这个call_back0了。
timer_set (TIMER_DEV(0), 0, 1000000); 这个函数表示我设定定时器0,通道0,没秒钟中断一次。。如果要100ms中断一次,那就用100000.以此类推。。。
然后下面的语句就是设定了定时器的通道,以及中断相应时间。。。。
然后其他的就和我们使用的单片机没有什么区别了。。。
代码中存在的问题:
在ubuntu中打开timer.c文件(在cpu/cc2538/periph文件夹中),如下图添加一条语句。gptimer->TAILR = gptimer->TAMATCHR; 。。。因为这个timer.c他写的有点问题的。。。。
然后是这里也要加进去,官方也不知道搞什么的,这个地方他没有搞好。。。。。。为什么要这么写,自己去看数据手册。。。计数寄到了之后要复位重新计数,但是源码中没有一个复位的,我加进去后,定时器就可以了。。。
来看看实验的结果,实验表明,cc2538的定时器非常的准确。。如果没有printf函数 更加的准确,因为printf也是需要时间的,因此,有那么细微的误差。。。。。
————————————————
版权声明:本文为CSDN博主「莫九玉」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mx1252111/article/details/53494950