一、

CC2650芯片内部的结构框图如图,内部包含:

一个Cortex-M3主控制器,用来做整个芯片的功能与任务实现

一个Cortex-M0射频控制器,用来驱动RF相关电路

一个Sensor Controller,可以用来在主控制器睡眠时实现传感器数据的采集,以降低系统整体功耗。

由图中我们可以看到,Sensor Controller可以直接控制的模块包括:

1.模拟量采集,2.比较器,3.SPI和I2C接口,4.恒流源,5.定时器,6.2KB SRAM

不仅如此,Sensor Controller还能够访问主控制器的一些外设:

1.UART串口,2.GPIO,

总的来说,CC2650STK中使用到的CC2650RGZ芯片,可以通过Sensor Controller去控制整个芯片当中的16个引脚,其中有8个引脚可以用作模拟量采集。

二、

虽说这个Sensor Controller看起来很厉害,但是用它开发起来还是有一些麻烦的。

1.需要使用专用的开发软件Sensor Controller Studio去进行程序开发;

2.功能调试完毕后需要将软件生成的驱动接口加入CC2650的CCS工程当中;

3.需要协调两者如何去进行数据交互,让主控制器去轮询或者传感器控制器去触发中断。

不管这些了,先看一看Sensor Controller Studio这个软件吧。软件的界面如下。

把右边的Start Page成为导航窗口吧,其中包括了四个项目,

1.工程:建立新工程,打开现有工程,最近的工程目录

2.例程:主要包括了SmartRF06EB和我用到的SensorTag两个板子的例子

3.工具的相关文档目录4.在线文档和资源

因为有现成的例子,咱们直接打开SensorTag的I2C Light Sensor这个例子来介绍这个软件的使用。

双击I2C Light Sensor这个例程,会弹出下面一个窗口

凡是后面带有...按钮的都是可以修改的选项,

第一个是选择一个目录保存该工程,

再下来有一个TI-RTOS releas的选项,因为我之后在CCS中要用2.13进行开发,这里也就选了2.13,

对应的,下面在Overrides中有很多选项,都选择tirtos_simplelink_2_13_00_06版本和xdctools_3_31_01_33_core,至于选别的会不会影响最后的程序调用,我也不清楚,第一次还是不要乱搞了的好

点击OK,直接跳转到了这个工程的配置目录,下图。所有的保持默认即可。

在最下边有一栏叫做Sensor Controller Tasks,可以用来在这个工程中创建新的任务。毕竟这个还是个带操作系统的协处理器,就是高端,还能配置任务。

在左边点击“-”号旁边的目录(这个就是咱们这个工程的第一个Task),可以看到下面的界面。在这个界面当中可以配置该工程使用到的模块,需要哪个,点勾就可以了。其中一些模块还能进行参数配置,这个需要自己慢慢琢磨研究了。当选了一个模块后,这个模块对应的一些宏定义,驱动函数接口,就会自动加入到工程中去了。

在左侧窗口中再往下看,可以看到这个任务重包含了四部分的代码,软件直接定义好了。有初始化代码,执行代码,事件处理代码,结束代码。故名思意,它们的名称就是它们要做的事情。这里就不详细的说了。

直接看Execution Code 和 Event Handler Code的代码。

Execution Code:

 // Configure and start the next measurement
i2cStart();
i2cTx(I2C_OP_WRITE | ALS_I2C_ADDR);
i2cTx(ALS_REG_CFG);
i2cTx(ALS_CFG_ONE_SHOT >> );
i2cTx(ALS_CFG_ONE_SHOT >> );
i2cStop(); // Read the result after 100 milliseconds + a 20% margin
evhSetupTimerTrigger(, , ); // Schedule the next execution
fwScheduleTask();

Event Handler Code:

 // If a measurement was successfully started during the last execution ...
if (state.i2cStatus == 0x0000) { // Select the result register
i2cStart();
i2cTx(I2C_OP_WRITE | ALS_I2C_ADDR);
i2cTx(ALS_REG_RESULT); // If successful ...
if (state.i2cStatus == 0x0000) {
U16 resultRegH;
U16 resultRegL; // Read the result
i2cRepeatedStart();
i2cTx(I2C_OP_READ | ALS_I2C_ADDR);
i2cRxAck(resultRegH);
i2cRxNack(resultRegL);
i2cStop(); // Convert the result (4-bit exponent + 12-bit mantissa) into 16-bit fixed-point
U16 exp = resultRegH >> ;
U16 mant = (resultRegH << ) | (resultRegL << );
// The exponent is in range 0 to 11
U16 value = mant >> ( - exp);
output.value = value; // Notify the application with the result is below the low threshold or above the high threshold
if (value < cfg.lowThreshold) {
fwGenAlertInterrupt();
}
if (value > cfg.highThreshold) {
fwGenAlertInterrupt();
} } else {
i2cStop();
}
}

仔细琢磨一下吧,也不复杂。主要功能就是读取SensorTag上面的光照传感器的数据,并进行上下阈值比较,超出范围后会触发一个中断信号到主控制器(这个之后再讨论)。

在这个代码当中,像i2c的驱动函数,任务、事件处理函数,中断触发函数都是在前面说到的选择功能模块后自动增加进来的。在程序中直接进行调用,不用进行声明、包含之类的操作。

再往下点到I/O Mapping,可以进行功能引脚的配置。在这个工程中我们只使用到了I2C模块,所以直接配置SDA和SCL两个引脚即可。通过鼠标点击对应的引脚框就能够完成I/O管脚配置。

下面接着是Code Generator,就当他是用来编译的吧。它实际将机器代码最后放到了C文件内的一个数组当中,在主控制器程序中,会将该部分代码编译到特定的地址空间,实现Sensor Controller的程序运行。(具体还不太明白,有错误的话再来修改这里)

点击右边下边的Generate driver source code,没有错误的话就能够封装这个工程的代码,并生成CCS中相关的驱动程序。在中间我们还能看到这个工程使用资源的情况。

最后就是仿真先关的了,Task Testing。

除了上图中的调试流程(simplified workflow)外,还有一种(low-level workflow),如下图。根据实际需要选择即可。

最后,我们连接板子,并按运行按钮,即可看到Sensor Controller采集到的光照强度信号,并能够用曲线显示。

这样,我们有关于Sensor Controller的基本功能都已经了解了。一些具体的功能,需要在实际使用中去体会了。现在我所知道的一些情况有,它的类C语言语法功能不全,变量类只有16位有符号、16位无符号、1位比特类型,多个任务不能调用同一个外设模块。

后面,我的预想是把所有的传感器模块在Sensor Controller中实现读写,并封装驱动。不知道空间会不会占满不够用。

【蓝牙数据采集模块】-01-Sensor Controller 功能介绍的更多相关文章

  1. 【蓝牙数据采集模块】-02-Sensor Controller 编写CC2650STK外设驱动

    上次说到把所有的传感器模块在Sensor Controller中实现读写,并封装驱动. 先来看一下CC2650STK的原理图 用红色方框标记的DIO_0~DIO_7, DIO_23~DIO_30是可以 ...

  2. 性能测试-9.Controller功能介绍

    Controller功能介绍 设计场景 配置场景 场景监控 一.设计场景 二.配置场景 规划场景(场景名.调度方式.运行方式.Initialize方式.Start Vusers方式.Duration方 ...

  3. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-1.数据信息安全--微信授权一键登录功能介绍

    笔记 1.数据信息安全--微信授权一键登录功能介绍 简介:讲解登录方式优缺点和微信授权一键登录功能介绍         1.手机号或者邮箱注册             优点:              ...

  4. 带你走近AngularJS - 基本功能介绍

    带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自定义指令 ------------- ...

  5. fedora21发布与新功能介绍(附fedora21安装教程与fedora21下载地址)

    fedora21发布与新功能介绍(附fedora21安装教程与fedora21下载地址) 最新的Fedora 21终于正式发布了,Fedora Server 是一款强大可定制化的操作系统,包括了最好最 ...

  6. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

  7. CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系

    CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...

  8. iOS Simulator功能介绍关于Xamarin IOS开发

    iOS Simulator功能介绍关于Xamarin IOS开发 iOS Simulator功能介绍 在图1.38所示的运行效果中,所见到的类似于手机的模型就是iOS Simulator.在没有iPh ...

  9. HBase的Snapshots功能介绍

    HBase的Snapshots功能介绍 hbase的snapshot功能还是挺有用的,本文翻译自cloudera的一篇博客,希望对想了解snapshot 的朋友有点作用,如果翻译得不好的地方,请查看原 ...

随机推荐

  1. PHP无限极分类的几种方法

    导读:项目开发,经常栏目要做到无限极分类,几种方法PHP无限极分类的几种方法 复制代码 代码如下:namespace Util;class Category{static public functio ...

  2. Angularjs循环二维数组

    <div ng-app> <div ng-controller="test"> <div ng-repeat="links in slide ...

  3. 创建 AngularJS 自定义过滤器,带自定义参数

    Angularjs过滤器是 angularjs非常棒的特性之一.有朝一日,你可能需要使用自定义过滤器,幸运的是,你找到了这篇博文. 下面显示的是自定义过滤器长什么样子(请注意myfilter): &l ...

  4. php获取文件名

    php获取文件名$phpself =$_SERVER['PHP_SELF']; //获取当前文件名$str = end(explode("/",$phpself)); //去掉'/ ...

  5. tcp 重组原理

    原文: http://blog.chinaunix.net/uid-21768364-id-4823449.html 1 .引言TCP/IP 协议现在已经广泛的被应用.数据在网络上应用 TCP/IP ...

  6. 挂载了Cinder Volume的实例无法动态迁移排错

    现象:挂载了Cinder Volume的实例无法动态迁移 [root@node-5 nova]# tail -f compute.log 2016-01-13 16:36:12.870 18762 E ...

  7. c# toolstrip控件怎么把左边的几个小点去掉??

    选中你的toolstrip 然后属性属性中有个 GripStyle 设置Hidden

  8. 嵌入式linux插入内核模块Error: could not insert module xxx.ko: Device or resource busy处理

    设备号冲突导致 处理方法: 1.输入$cat /proc/devices 查看驱动的设备号 2.选择一个不冲突的设备号进行编译 参考文献: 1.http://blog.csdn.net/zzc_19/ ...

  9. 项目发布到Tomcat8中报错 “Resource is out of sync..."

    在eclipse中搜索时,搜索完之后有时候会弹出错误对话框,错误摘录如下:Resource is out of sync with the file system...... 分析:有时候因为时间紧迫 ...

  10. python之路:进阶篇 内置函数

     li = [11, 22, 33] news = map(  li = [100, 2200, 3300] news = map(  [13, 24, 35] [11, 11, 11] [22, 4 ...