2627浏览
查看: 2627|回复: 0

[官方教程] K210入门-裸机开发(五)之定时器TIMER定时

[复制链接]

K210入门-裸机开发(五)之定时器TIMER定时

开发板:K210 AIRV R3版 widora

开发环境:kendryte IDE 官方的

必须的参考文档:Standalone SDK编程指南v0.5.0,以及widora的原理图

1.新建文件夹05my_code_timer

K210入门-裸机开发(五)之定时器TIMER定时图1

礼物 + 地球

K210入门-裸机开发(五)之定时器TIMER定时图2

实例 -> 搜索timer 选择开发版本(develop) 然后下载到刚才的文件夹中

K210入门-裸机开发(五)之定时器TIMER定时图3

老规矩 安装依赖

K210入门-裸机开发(五)之定时器TIMER定时图4

清理+ 构建

K210入门-裸机开发(五)之定时器TIMER定时图5

环境搭建完成 下面开始改代码

2.修改代码

定时器在第18章

K210入门-裸机开发(五)之定时器TIMER定时图6

K210入门-裸机开发(五)之定时器TIMER定时图7

文档中有举例 等下就抄

K210入门-裸机开发(五)之定时器TIMER定时图8

要用到LED灯,同样查看开发板原理图

发现LED对应IO17和18

K210入门-裸机开发(五)之定时器TIMER定时图9

下面开始说代码  初始化中断

K210入门-裸机开发(五)之定时器TIMER定时图10

K210入门-裸机开发(五)之定时器TIMER定时图11

初始化定时器

K210入门-裸机开发(五)之定时器TIMER定时图12

K210入门-裸机开发(五)之定时器TIMER定时图13

看下这个参数怎么填 右键函数名称 跳到定义

K210入门-裸机开发(五)之定时器TIMER定时图14

有3个定时器 我用定时器0 复制TIMER_DEVICE_0过去

K210入门-裸机开发(五)之定时器TIMER定时图15

K210入门-裸机开发(五)之定时器TIMER定时图16
设置时间间隔 (配置定时器)

K210入门-裸机开发(五)之定时器TIMER定时图17

参数一,填刚才的定时器0(TIMER_DEVICE_0)

参数二 他这里有4个通道,我萌新 不知道什么意思,填通道0试试

K210入门-裸机开发(五)之定时器TIMER定时图18

参数 3 填定时时间, 单位他写的是ns(纳秒)

我这里定时1ms =1000us = 1000 000ns

K210入门-裸机开发(五)之定时器TIMER定时图19

注册以及配置中断

K210入门-裸机开发(五)之定时器TIMER定时图20

K210入门-裸机开发(五)之定时器TIMER定时图21

使能定时器

K210入门-裸机开发(五)之定时器TIMER定时图22

参数1 填定时器几, 参数2填定时器的通道, 参数3 是否使能

K210入门-裸机开发(五)之定时器TIMER定时图23
都写好之后 把总中断打开

K210入门-裸机开发(五)之定时器TIMER定时图24

然后补充一下LED灯的配置

添加头文件 #include "gpio.h" ,然后安装依赖 -> 清理 + 构建

K210入门-裸机开发(五)之定时器TIMER定时图25

K210入门-裸机开发(五)之定时器TIMER定时图26

然后加上之前学的LED配置代码

K210入门-裸机开发(五)之定时器TIMER定时图27

下面写定时器中断函数

K210入门-裸机开发(五)之定时器TIMER定时图28

200ms翻转LED1

500ms翻转LED2

K210入门-裸机开发(五)之定时器TIMER定时图29

K210入门-裸机开发(五)之定时器TIMER定时图30

两个flag的作用域不同,不会影响

插上开发板 一条龙服务

清理+构建+下载

K210入门-裸机开发(五)之定时器TIMER定时图31

效果

K210入门-裸机开发(五)之定时器TIMER定时图32

就是2个LED闪烁呗(周期不同) 还能有什么效果

定时器中断学习完毕, 下次再见

代码


#include <fpioa.h>
#include <plic.h>
#include <pwm.h>
#include <stdio.h>
#include <sysctl.h>
#include <syslog.h>
#include <timer.h>

#include "gpio.h"

int timer_callback(void)  // 1ms来一次
{
  static uint16_t flag200ms = 0;
  static uint16_t flag500ms = 0;

  if (++flag200ms == 200) {
    static uint8_t flag = 0;
    if (flag)
      gpio_set_pin(0, GPIO_PV_LOW);  // LED0
    else
      gpio_set_pin(0, GPIO_PV_HIGH);

    flag200ms = 0;
    flag = !flag;
  }

  if (++flag500ms == 500) {
    static uint8_t flag = 0;
    if (flag)
      gpio_set_pin(1, GPIO_PV_LOW);  // LED1
    else
      gpio_set_pin(1, GPIO_PV_HIGH);

    flag500ms = 0;
    flag = !flag;
  }
}

int main(void) {
  /* Init Platform-Level Interrupt Controller(PLIC) */
  // 初始化中断模块
  plic_init();

  gpio_init();
  fpioa_set_function(17, FUNC_GPIO0);
  fpioa_set_function(18, FUNC_GPIO1);
  gpio_set_drive_mode(0, GPIO_DM_OUTPUT);
  gpio_set_drive_mode(1, GPIO_DM_OUTPUT);
  gpio_set_pin(0, GPIO_PV_LOW);  // 熄灭LED
  gpio_set_pin(1, GPIO_PV_LOW);

  timer_init(TIMER_DEVICE_0);  //定时器0
  // 参数1 定时器0, 参数2定时器通道,参数3 定时时间(纳秒)
  timer_set_interval(TIMER_DEVICE_0, TIMER_CHANNEL_0, 1000000);
  // 定时器0, 通道0,定时器回调函数,优先级
  timer_set_irq(TIMER_DEVICE_0, TIMER_CHANNEL_0, timer_callback, 1);
  // 定时器0, 通道0, 使能(1)/失效(0)
  timer_set_enable(TIMER_DEVICE_0, TIMER_CHANNEL_0, 1);

  sysctl_enable_irq();

  while (1)  // 等待中断
    ;
}

版权声明:本文为CSDN博主「jwdeng1995」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jwdeng1995/article/details/108032724

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail