TI中文支持网
TI专业的中文技术问题搜集分享网站

[FAQ] CC2640R2F: 如何将传感器控制器示例与 simple_peripheral 合并?(分步指南)

Part Number:CC2640R2F

器件型号:CC2640R2F

以下是将传感器控制器 (SC) 示例合并到 simple_peripheral 示例 (CC2640R2F/BLE) 的步骤:
这些步骤可重复用于所有具有传感器控制器的器件。

开始之前:

  • 确保查看传感器控制器的文档。
  • 务必遵循我们有关传感器控制器的 SimpleLink Academy 实验。
  • 如果尚未完成,请安装 Sensor Controller Studio:https://www.ti.com.cn/tool/cn/SENSOR-CONTROLLER-STUDIO

以下是分步指南:

  1. 打开 Sensor Controller Studio (SCS),打开 CC2640R2F 的示例 LED 闪烁灯
  2. 生成代码 – 查看生成的文件并找到工程的路径
  3. 打开 CCS。导入 SCS 为 TIRTOS 生成的工程。
  4. 构建和测试(使用按钮打开和关闭blinking)
  5. 导入 simple_peripheral 示例
  6. 构建 simple_peripheral(如果需要,请进行测试)
  7. 将 SC 示例合并到 simple_peripheral 示例
    注意:我们不会使用此处的按钮 – LED 将始终闪烁。
    • 将文件c、scif.h、scif_framework.c、scif_framework.h、scif_osal_tirtos.h 复制并粘贴到工程中。我保留了指向这些文件的链接(但可以采用不同的方式)。
      注意:如果您使用指向这些文件的链接,CCS 将询问您是否要添加包含路径,回答是(或手动添加路径)。
    • 复制并粘贴 SimplePeripheral_taskFxn 中用于初始化 SC 的代码。
      复制并粘贴 SimplePeripheral_taskFxn 中用于启用绿色 LED 的代码。
      static void SimplePeripheral_taskFxn(UArg a0, UArg a1)
      {// 初始化应用程序SimplePeripheral_init();//**************************************////  此代码用于 SC 初始化 ////**************************************//// 初始化并启动传感器控制器scifOsalInit();scifOsalRegisterCtrlReadyCallback(scCtrlReadyCallback);scifOsalRegisterTaskAlertCallback(scTaskAlertCallback);scifInit(&scifDriverSetup);scifStartRtcTicksNow(0x00010000 / 10);scifStartTasksNbl(BV(SCIF_LED_BLINKER_TASK_ID));//*************************************////  此代码用于 GLED 初始化 ////************************************//// 启用 LED 引脚hLedPins = PIN_open(&ledPinState, pLedPinTable);// 应用程序主环路for (;;){uint32_t events;// 等待与调用线程相关联的事件发布。// 请注意,当消息排队到线程的消息接收队列时,// 会发布与线程相关联的事件events = Event_pend(syncEvent, Event_Id_NONE, SBP_ALL_EVENTS,ICALL_TIMEOUT_FOREVER);
      
  • 复制粘贴所需的 include。
    复制粘贴所需的symbols。
    复制粘贴回调函数(回调的内容将在之后修改)。
  • #include "scif.h"
    
    PIN_Config pLedPinTable[] = {Board_GLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,PIN_TERMINATE
    };
    PIN_State ledPinState;
    PIN_Handle hLedPins;
    
    void scCtrlReadyCallback(void) {
    
    } // scCtrlReadyCallback
    
    void scTaskAlertCallback(void) {SimplePeripheral_enqueueMsg(SBP_SC_ALERT, NULL, NULL);
    
    } // scTaskAlertCallback
    
  • 修改 SC 回调函数的内容。simple_peripheral 示例使用消息(而非信标)将事件传递到主循环。我们将使用函数 SimplePeripheral_enqueueMsg() 对消息进行排队。将定义一个额外的应用程序事件 (SBP_SC_ALERT)。将从传感器控制器示例中复制发出此事件时要执行的代码。
    声明的应用程序事件如下:

 

// 应用程序事件
#define SBP_STATE_CHANGE_EVT0x0001
#define SBP_CHAR_CHANGE_EVT0x0002
#define SBP_PAIRING_STATE_EVT0x0004
#define SBP_PASSCODE_NEEDED_EVT0x0008
#define SBP_CONN_EVT0x0010
#define SBP_SC_ALERT0x0099  // 添加这一个

以下是处理 SBP_SC_ALERT 事件的代码(添加在 SimplePeripheral_processAppMsg 中):

static void SimplePeripheral_processAppMsg(sbpEvt_t *pMsg)
{switch (pMsg->hdr.event){// ...case SBP_CONN_EVT:{SimplePeripheral_processConnEvt((Gap_ConnEventRpt_t *)(pMsg->pData));ICall_free(pMsg->pData);break;}//*********************//// 添加此代码 ////*********************//case SBP_SC_ALERT:{//清除警报中断源scifClearAlertIntSource();// 如果 LED 闪烁器任务尚未停止 ...if (scifGetActiveTaskIds() & BV(SCIF_LED_BLINKER_TASK_ID)) {// 表示绿色 LED 上输出计数器变量的值PIN_setOutputValue(hLedPins, Board_GLED, (scifTaskData.ledBlinker.output.counter & 0x0001) != 0);}// 确认警报事件scifAckAlertEvents();break;}//*********************//// 添加的代码到此结束 ////*********************//default:// 不采取任何行动。break;}
}

  • 下面提供了我的c 文件的 diff 文件(是的,只修改了一个文件)供您参考:/cfs-file/__key/communityserver-discussions-components-files/538/simple_5F00_peripheral_5F00_c.diff
  1. 构建并测试。该示例应保持 LED 闪烁,并具有 simple_peripheral 示例的所有功能。
Annie Liu:

我们建议您在发布新问题之前先搜索 E2E支持论坛,E2E支持论坛已经拥有数十万个已得到解答的话题。  这通常是解决问题的最快方法。

赞(0)
未经允许不得转载:TI中文支持网 » [FAQ] CC2640R2F: 如何将传感器控制器示例与 simple_peripheral 合并?(分步指南)
分享到: 更多 (0)