定时器 在TI-RTOS中属于内核的一部分,因此想了解它的使用还是要阅读Bios_User_Guide.pdf.

主要用到这么几个API, 加粗字体 更多的定义可以在 ..\packages\ti\sysbios\knl\Clock中查看。

#define Clock_construct ti_sysbios_knl_Clock_construct
#define Clock_create ti_sysbios_knl_Clock_create
#define Clock_handle ti_sysbios_knl_Clock_handle
#define Clock_struct ti_sysbios_knl_Clock_struct
#define Clock_Handle_label ti_sysbios_knl_Clock_Handle_label
#define Clock_Handle_name ti_sysbios_knl_Clock_Handle_name
#define Clock_Instance_init ti_sysbios_knl_Clock_Instance_init
#define Clock_Object_count ti_sysbios_knl_Clock_Object_count
#define Clock_Object_get ti_sysbios_knl_Clock_Object_get
#define Clock_Object_first ti_sysbios_knl_Clock_Object_first
#define Clock_Object_next ti_sysbios_knl_Clock_Object_next
#define Clock_Object_sizeof ti_sysbios_knl_Clock_Object_sizeof
#define Clock_Params_copy ti_sysbios_knl_Clock_Params_copy
#define Clock_Params_init ti_sysbios_knl_Clock_Params_init

工作模式可是单次溢出,也可以是反复溢出。Clock_create()第二个参数用来指定首次溢出的时间,单位应该还是10us, 如果想要反复的事件,则要在第三个参数中指明周期,赋值.period为0,表示单次,非0的值就会产生周期事件了。一旦溢出产生,则会执行一次溢出功能函数, 这个函数是Clock_create的第一个参数所指向的函数。它的工作原理示意图如下:

好了,我们老规矩,来演示一下它的应用。这里用定时器来控制灯,500ms状态改变一次。全部的代码如下:

/**************************************************************************************************
Filename:       timerDemoTask.c
Editor:         Tome @ newbit
Revised:        $Date: 2016-8-10 11:20:02 +0800  $
Revision:       $Revision: 00001 $

Description:    了解 TI-RTOS的使用之,Timer
History:       
Notes:          要了解到这部分的接口,可阅读TI文档
                1. TI-RTOS 2.20  User's Guide.pdf
                2. Bios User Guide.pdf

硬件平台  CC1130_LAUNCHPAD Rev1.3

**************************************************************************************************/

/**************************************************************************************************
// INCLUDES
**************************************************************************************************/
/* XDCtools Header files */
#include <xdc/std.h>
#include <xdc/runtime/System.h>
#include <xdc/runtime/Error.h> //新加

/* BIOS Header files */
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Task.h>
#include <ti/sysbios/knl/Clock.h>       // 新加

/* TI-RTOS Header files */
#include <ti/drivers/PIN.h>

#include "board.h"

/**************************************************************************************************
// TYPEDEF
**************************************************************************************************/

/**************************************************************************************************
// CONSTANTS
**************************************************************************************************/
#define TASKSTACKSIZE     768

/**************************************************************************************************
// LOCAL VERIABLE
**************************************************************************************************/
Task_Struct timerDemoTaskStruct;
Char timerDemoTaskStack[TASKSTACKSIZE];               // 本任务的栈空间,静态分配

PIN_Handle ledPinHandle;                                // 将LED操作句柄作为全局变量

/* Global memory storage for a PIN_Config table */
static PIN_State ledPinState;

/*
 * Application timerDemo pin configuration table:
 *   - All timerDemos board timerDemos are off.
 */
PIN_Config ledPinTable[] = {
    Board_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    Board_LED2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    PIN_TERMINATE
};

/**************************************************************************************************
// FUNCTIONS DECLERATION
**************************************************************************************************/
Void timerDemoFxn(UArg arg0, UArg arg1);
void myHandler(xdc_UArg arg0);

/**************************************************************************************************
// FUNCTIONS
**************************************************************************************************/

/**************************************************************************************************
 * @fn      timerDemoTaskAdd
 *
 * @brief  
 *
 * @param   void
 *
 * @return  void
 **************************************************************************************************/
void timerDemoTaskAdd(void)
{
  Task_Params taskParams;
 
  /* Construct BIOS objects */
    Task_Params_init(&taskParams); // 创建任务所要的参数,都设置为默认值
    taskParams.stackSize = TASKSTACKSIZE; // 栈空间
    taskParams.stack = &timerDemoTaskStack;     // 栈地址
    // 向bios 传递参数,建立控制灯的任务
    Task_construct(&timerDemoTaskStruct, (Task_FuncPtr)timerDemoFxn, &taskParams, NULL);
}

// 演示定时器的任务
Void timerDemoFxn(UArg arg0, UArg arg1)
{
 
  // 这里不是为了初始化,而是为了拿到操作的句柄 (handle)
  // 函数说明:Allocate one or more pins for a driver or an application.
  ledPinHandle = PIN_open(&ledPinState, ledPinTable);
  if(!ledPinHandle) {
    System_abort("Error initializing board LED pins\n");
  }   
 
  // 点亮第一个LED灯
  PIN_setOutputValue(ledPinHandle, Board_LED1, 1); 
 
 
  // 开始初始化一个 Timer
  Clock_Params clockParams;
  Clock_Handle myClock;
  Error_Block  eb;
 
  Error_init(&eb);
 
  Clock_Params_init(&clockParams);
  clockParams.period = 100 * 500;       // 500ms, 闪灯的频率为1hz
  clockParams.startFlag = TRUE;
  clockParams.arg  = (UArg)0x5555;
  myClock = Clock_create(myHandler, 5, &clockParams, &eb);
  if ( myClock == NULL )
  {
    System_abort("Clock create failed\n");
  }
  // Timer 配置结束
 
 
  // 该任务的主体只有休眠
  while(1)
  {
    // 任务休眠 1 秒,  1000000us, 下面函数的单位是10us
    Task_sleep(100000);
  }
 
}

/**************************************************************************************************
 * @fn      myHanlder
 *
 * @brief   定时器溢出时的执行函数
 *
 * @param   xdc_UArg arg0
 *
 * @return  void
 **************************************************************************************************/
void myHandler(xdc_UArg arg0)
{
 
  uint_t ledState;
    // 读LED 灯的状态,再设置为相反的状态
    ledState = PIN_getOutputValue(Board_LED2);
    ledState = !ledState;
    // 设置的操作需要 handle
    PIN_setOutputValue(ledPinHandle, Board_LED2, ledState);
   
}

/**************************************************************************************************
Copyright 2016 Newbit Studio. All rights reserved.
**************************************************************************************************/

TI-RTOS 定时器的使用的更多相关文章

  1. Cortex-M0系统滴答定时器Systick详解

    上图是LPC1114系统滴答定时器(SysTick)的结构图.系统滴答定时器位于Cortex-M0内核中,也就是说,不论是LPC1114,还是其他的Cortex-M0内核单片机,都有这个系统定时器.其 ...

  2. skynet newservice API参考

    local skynet = require("skynet") skynet.start(start_func) c服务snlua启动后执行的第一个lua文件里面的主逻辑必定是s ...

  3. Microsoft Azure IoTHub Serials 1 - 使用Android设备与Azure IoTHub进行交互

    Azure IoTHub的目标是为物联网的应用场景提供方便的设备接入,完成消息的发送和接收(C2D和D2C).经过持续不断的努力,目前Azure IoTHub已经支持多种操作系统设备的接入,包括And ...

  4. LPC43xx双核笔记

    简介本页提供了一些使用LPC43xx器件双核特性的基本信息.此页面上的信息和专题使用Keil uVision4工具,以双核工程的使用来演示.该工程初始化两个内核以运行FreeRTOS,并采用三色LED ...

  5. 单片机远程控制步进电机、LED灯和蜂鸣器

    通过採用C#语言实现的上位机控制单片机的步进电机模块.LED灯和蜂鸣器模块,使步进电机进行正.反转和停止并控制转速:LED灯模块进行有选择的呼吸式表达:蜂鸣器模块的開始和终止. 上位机通过串口和自己定 ...

  6. Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用

    OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...

  7. ios基础篇(二十三)—— 定时器NSTimer与图片的自动切换

    一.NSTimer NSTimer是一个能在从现在开始到后面的某一个时刻或者周期性的执行我们指定的方法的对象.可以按照一定的时间间隔,将制定的信息发送给目标对象.并更新某个对象的行为.你可以选择在未来 ...

  8. NSTimer “定时器”

    •NSTimer叫做“定时器”,它的作用如下 Ø在指定的时间执行指定的任务 Ø每隔一段时间执行指定的任务 Ø •调用下面的方法就会开启一个定时任务 + (NSTimer *)scheduledTime ...

  9. solr安装笔记与定时器任务

    一:solr启动 目前solr最高版本为5.5.0版本,很多solr安装都是说将server文件copy到tomcat中,但是solr版本自带有jetty的启动方式 首先下载solr-5.5.0版本, ...

  10. 1、CC2541蓝牙4.0芯片中级教程——基于OSAL操作系统的运行流程了解+定时器和串口例程了解

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

随机推荐

  1. 使用JavaScript将图片保存至本地

    在最近的开发当中,我们需要为img标签以及canvas动态绘制的图像提供下载功能,下面是经过探索后我们得出的结果. 一.Canvas 版本 // 下载Canvas元素的图片 function down ...

  2. 在Ubuntu 12.04系统中安装配置OpenCV 2.4.3的方法

    在Ubuntu 12.04系统中安装配置OpenCV 2.4.3的方法   对于,在Linux系统下做图像识别,不像在windows下面我们可以利用Matlab中的图像工具箱来实现,我们必须借助Ope ...

  3. python科学计算_numpy_ufunc

    ufunc简介 ufunc指universal function,是一种能够对数组中的所有元素进行操作的函数,ufunc是针对数组进行操作的函数,对一个数组进行重复的运算时,使用ufunc比math库 ...

  4. springmvc注入类 NoUniqueBeanDefinitionException: No qualifying bean of type [] is defined: expected single错误

    在springmvc中注入服务时用@Service 当有两个实现类时都标明@Service后则会出现异常: nested exception is org.springframework.beans. ...

  5. Sublime Text3注册码,亲测可用

    将以下复制在输入框即可 ,亲测可用 . 不过还是希望大家多多支持正版 . -– BEGIN LICENSE -– TwitterInc 200 User License EA7E-890007 1D7 ...

  6. SQL Server 审计操作概念

    概述 对于一般的数据库系统审计可能不太会被重视,但是对于金融系统就不一样的.金融系统对审计要求会很高,除了了记录数据库各种操作记录还可能会需要开发报表来呈现这些行为数据.使用SQL Server Au ...

  7. C#Winform使用mysql作为本地数据库

    MYSQL是老牌关系型数据库,在受够了sqlite,mslocaldb,sqlce等本地数据库之后,发现了mysql5.6的一些版本也可以绿色安装,编程实现从资源文件里面解压到目标机器上,并配置好成为 ...

  8. c语言贪吃蛇详解5.GameOver功能与显示成绩

    c语言贪吃蛇详解5.GameOver功能与显示成绩 以前我们已经做出来了一个能吃东西变长的蛇.不过它好像不会死... 现在就来实现一下game over的功能吧. 写个函数判断蛇是否撞到自己或者撞到墙 ...

  9. 【转】NO.1、 appium之ios环境搭建

    首先感谢iOS开发同学无私的帮助.   一.环境及版本: xcode:7.1,我是百度下的dmg文件,直接装的,这个太大了,请自行百度,或升级自己的xcode,一般都不需要这一步. appium:1. ...

  10. sqlite ef6

    参考文章: http://www.cnblogs.com/adswads/p/3808549.html 用NUGET 引用 System.Data.SQLite.EF6  app.config 会有默 ...