• TI-RTOS 控制LED灯


    TI将FreeRtos放在自家芯片上,于是得到了TI-RTOS,两者的区别我还不太清楚,近日因为项目需要,开始试用TI-RTOS,先来一个点灯的实验吧,算是 hello world.

    这次手上的板子是 CC1310 LaunchPad Rev 1.3, 上面有两个灯,两个按键,照常理先调灯的驱动会更简单些。打算做成一个灯亮,一个灯1秒闪一次。

    这样的功能一般是和定时器,IO打交道,不过在os上,定时可以暂时用task_sleep来代替,好在TI-RTOS默认启用这个模块的,用起来相当方便。

    IO的驱动是写好的,找到API名称就能用了。代码如下:

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

    Description:    了解 TI-RTOS的使用之,GPIO控制, 任务休眠
    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>

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

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


    #include "Board.h"


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

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


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


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


    /*
     * Application LED pin configuration table:
     *   - All LEDs board LEDs 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 ledFxn(UArg arg0, UArg arg1);

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

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


    /*
     *  ======== ledFxn ========
     *  Task for this function is created statically. See ledTaskADD().
     */
    Void ledFxn(UArg arg0, UArg arg1)
    {
      PIN_Handle ledPinHandle;
      uint_t ledState;
     
     
      // 这里不是为了初始化,而是为了拿到操作的句柄 (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 ");
      }   
     
      // 点亮第一个LED灯
      PIN_setOutputValue(ledPinHandle, Board_LED1, 1); 
     
     
      while(1)
      {
        // 读LED 灯的状态,再设置为相反的状态
        ledState = PIN_getOutputValue(Board_LED2);
        ledState = !ledState;
        // 设置的操作需要 handle
        PIN_setOutputValue(ledPinHandle, Board_LED2, ledState);
       
        // 任务休眠 1 秒,  1000000us, 下面函数的单位是10us
        Task_sleep(100000);
      }
     
    }

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

  • 相关阅读:
    190822——喜欢
    190821——彼岸无岸
    190820——随笔
    BLE——协议层次结构
    190817——肖申克的救赎
    190818——人
    190819——皖北部分村落的变迁史
    【转】vfork 和 fork的区别
    C语言文件操作
    【makefile】symbol <函数> : can't resolve symbol 问题分析
  • 原文地址:https://www.cnblogs.com/newbit/p/ti_rtos_led.html
Copyright © 2020-2023  润新知