CC2650 - 事件和传感协控制器(上)

+荐课 提问/讨论 评论 收藏 分享
大家好 我们继续来看看 TI 的 CC2650 这颗无线 SOC 芯片 一些概况呢在前面的视频中已经有所讲述 所以说我们今天这里呢 只了解一下这个芯片的事件 和传感协控制器的一些简单情况 我们分四个部分来了解 第一个部分是事件路由 它是协控制器与MCU 外设与外设之间事件通知的一种机制 第二部分是传感协控制器的一些大概情况 第三部分是关于 sensor controller studio 的一些简介 最后呢我们用一个例子来结束今天的视频 收到消息会自然就涉及到三个实体 第一个是消息的发送者 第二个消息的接收者 最后就是消息的通路 这个地方呢我们对 消息和事件本身是不做区别的 可以认为事件是一种特殊形式的消息 我们来看看 2650 的路由架构 这个是一个很典型的生产者 消费者 还有中间通路的这样一种路由形式 中间的消息总线 他是把生产者产生的消息 发送给消费者的通路 路由形式是最基本的直接通路 也就是说这个中间 不对通道内的消息做任何的处理 路由可以是 消息可以是硬件的中断 可以是软件的可编程中断 也可以是 DMA 触发等等东西 但是并不是说所有的消息 都可以通过动态路由的形式传输 只有很小一部分消息 能够有这种路由的能力 而大部分消息呢 都是通过静态的连接形式存在 路由之间是一种多对多的这样一种关系 也就是说一个生产者的消息 可以被多个消费者接受 同时呢一个消费者 也可以接收多个生产者产生的消息 如果是同时产生的话 通过或逻辑也就是 or 给出最后的逻辑 消息本身它是被认为是 电平触发的高电平作为它的一种识别条件 通过这个图我们还可以看到 消息全部都是送到消息总线上面 在接收端 我们还需要进行消息的一些选择 来设定哪些消息进行响应 2650 呢是一个十分复杂的 SOC 这个里面可以看到它有两条消息路由总线 这两条总线它至少是在逻辑上面是分开的 一条总线呢在 AON 域 也就是 Always ON 这个域里面 一条总线呢是在 MCU 域里面 这两条总线呢以 Always ON AON 这个外设作为桥接 也就是这个框红色的框 通过这个桥接手段呢 AON 域 和 MCU 域 也可以进行消息的路由 把 AON 域里面的消息路由出来 给 MCU 域里面的消费者 这里面这个图里面黄色的这一框 就是所谓的一些消费者或者说是订阅者 他就是能从这些消息总线上面 接收消息来源的这样一些外设 然后进行响应 我们在使用过程中 也发现一个手册中的描述问题 在手册中对中断号二十二和二十九 它的描述跟我们在 我驱动内部里面发现的是不一样的 驱动内部里面它是把它赋给了 software event 0 和 event1 但是在手册里面似乎好像有点不是很对应 这个手册呢参考的是刚刚发布的第三版 也就是 C 后缀是 C 这个版本 寄存器呢我们一般用寄存器操作的话 只需要对相应的寄存器进行设定 我们要的值 这里我们可以看一看 它的一些相关寄存器 包括 MCU wakeup 唤醒 MCU 的一些事件源 在这里面包括我们的 pad 包括我们的 RTC JTAG 包括 AUX 就是协处理器自身的一些事件 Comparator ADC等等 我们从构架上面看 CC2650 内部有三个处理器 一个是大家比较熟悉的 Cortex-M3 一个是传感控制处理器这里面 一个是 Cortex-M0 的设备内核 确实是一个比较复杂的 SOC Cortex-M3 呢大家可能都比较熟悉 我们看协处理器里面 包含了有 GPIO 啊这个地方没有显示出来 GPIO ADC 采样的 比较器有两个 SPI 和 I2C 这个是通过 beagbone 怎么说呢 就是用 GPIO 来模拟的这样一个 就是用 GPIO 来模拟的这样一个 SPI 和 I2C 时序 计时器 time to DG converter 还有内部的 SRAM 它主要用来接入一些传感器的应用 这个也是 CC2650 这颗芯片的主要的一些应用场景 比如说呢 ADC 可以用在连续的信号监测 温湿度传感器等等的一些地方 比较器呢 comparator 呢 可以用于监控目标电压的阈值 SPI 和 I2C 呢可以操作一些常见的传感器 比如说加速度 陀螺仪等等 这里有个电流源 和定时器 time to digital converter 他们和比较器一起呢可以做电容触摸的一些应用 这些应用的一个典型应用场景是主 MCU 休眠 然后当有事件触发的时候 再唤醒这个主 MCU 所以说 2650 呢搞了一个事件路由 搞了一个多电源管理的这样一个域 搞了一个协处理 可能也是希望在最大程度的 降低运行期的功耗 其他一些面向低功耗的处理器 也会有一些相关的设施 虽然说实验上面各有千秋 但是本质上呢也可以看作是 同一种的一种设计模型 包括协处理器 SRAM 在内的所有设施 他们都可以在主 MCU 休眠的时候继续工作 也就是说保持他的时钟 AUX 也就是我们的协控制器 它是挂在 MCU 的访问空间里面的 也就是说我们可以通过 MCU 的操作 来对 AUX 协控制器进行访问 但是呢反过来是就不可以 它只能通过消息的形式 也就是说 AUX 协处理器 只能通过消息的形式 把请求传递给 MCU 从这个框图里面呢 我们也可以看出 这个协处理器里面有外设总线 有消息总线 有各种外设 乱七八糟的 有仲裁 有 SRAM 还有处理器等等这样一种设施 系统总线呢是协处理器与 MCU 通讯的总线 这里面仲裁器认为 协处理器的优先级高于主 MCU 又也就是说这里面的一些外设 被 MCU 和协处理器同时使用的话 那么使用权是被总裁给协处理器的 我们可以看到这里面有这个 Controller 它有自己的一套指令 它是一颗简化的 MCU 但相关的指令我们可以在手册里面找到 这里我就 sensor controller 这个地方 我们可以看到它的 instruction sheet 这个还是比较复杂的 有点类似我们的 cortex 但是它又有很多不一样的地方 有一些特殊的指令 他手册上面也没有说 这颗 U 一个什么芯 反正我们大概看一看就行 那 GPIO IO control 它可以设置输入输出 设置 开漏 open source 等等这样一种设置 但是这些设置呢一般是通过 sensor controller studio 进行设置 Timer to digital converter 它的最高 这块它最高可以 以 96 兆赫兹的时钟速度测量 它主要是用来测量起始事件 和结束事件之间的一些时间 一般呢在一般我们会使用 高速 RC 震荡器或者是二十四兆 外部振荡器作为它的时钟 如果是要测量内部振荡器的频率 就是芯片内部的振荡器的频率的话 那么就需要使用它的低速时钟 作为它的时钟源 因为具体的一些时钟源 在我们的手册里面都可以看到 这个地方都可以看到 内部信号量 semaphore 它是一个邻域信号量 也就是说它不是我们一般认为的那种 技术信号量 它主要是用来同步 AUX 和 MCU 之间的一些访问 还有一些数字控制用于配置 器件的内部震荡体 ADC 呢它是一个转换器 最高每秒是200K 它有八个通路 基本概念上和我们的一般常用的 ADC 是非常类似的 对于这个 AUX 呢 TI 基本上也只给出了使用 sensor controller studio 进行操作的一些手段 在我们的手册里面 对 AUX 的描述 对它的指令集有一些描述 然后对他的一些状态 对他的一些内部的一些使用 有一些简单描述 但是整体上来说的话 光凭着我们的手册 和一些简单的事例 可能在这个使用上面 还会存在一些很大的一些问题 这个也希望 TI 后面的话 能够加强一些资料的建设 最后呢我们看一看这个 sensor controller studio 这个呢是一个编译环境 同时它又有一些调试的功能 在 SCS 就是这个 sensor controller studio 的帮助里面 我们可以看到一些基本的 函数的一些使用情况 这个可以认为是 TI 不面向用户的一个 TI 的专用库 也就是说这些函数呢 我们也只能看到他的名字 比如说 SPIbegin 这里面的调试器它也有 这个东西就是一个最基本的一个调试器 连断点都没办法打 这个可用性还是非常的差 我们现在来看看 sensor controller studio 它的一些基本的一些应用 这个 studio 里面包含了一些示例 就是用作协传感器跟 MCU 之间 怎么互相工作的一些事例 我们先打开这个 studio 可以看到这个基本欢迎界面 有我们的项目 有我们的示例 还有一些帮助 先看帮助 帮助的话呢这里面有他 IDE 的帮助 这个确实描述的是非常简单的 还有一些我们资源的一些介绍 包括我们的 GPIO 一些介绍 怎么配置啊 怎么使用啊 怎么调用它的一些资源 包括一些外设 比如说 ADC TDC 的一些常量 它的一些描述 还有我们怎么去用它这样一种外设 这里面比较重要的呢 是这个类 C 语言的 similar to C 类 C 语言的这样一种简单的介绍 确实讲得很简单 这个也就几页的地方 主要就是有比如说我们的注释 变量的一些声明 基本语法等等这些东西 一些访问呐反正跟 C 很像 所以说我们看一看也基本上可以了解到 有一些不一样的地方呢 他反正这个也比较简单 这里面比较重要呢 就是 data structure 这个数据结构 这个数据结构包括包括了四个 Task configuration task 配置 任务的输入输出和他的一些状态结构 这个等会我们在示例当中都可以看到一些体现 还有他的汇编语言的描述 汇编语言呢也是比较麻烦的 这还有那么多 我们现在打开我们的工程 analog light sensor 这个工程 它主要是用 smartRF06 这个基板上面的 light sensor 做的这样一个应用 也主要就是用 ADC 来采样它的输出值的大小 来作为一个光强度的这样一种判断 我们这里呢有系统选择 芯片选择 看起来是蛮多 有封装还有我们最基本的一个我们的项目 这就是我们项目 项目里面的话呢 我们可以在 task resource 里面 选择我们需要用到的一些资源 这个 task resource 呢 可以在这里面寻找到一些帮助 包括 UART analog 这些东西 我们的一些帮助 这个例子当中 他用了ADC的一个采样 用了一个模拟信号量的输入 用了一个数字信号量的输出 用来比如说关闭 或者打开这个 light sensor 用了一些延迟和一个基于 RTC 的 这样一个任务的简单调度 这些前面的外设 我们都可以在不同的项目当中去选择它 比如说我们选择一个 UART 你先看看这里的效果 这里面呢我们可以看到 它写的是告诉我们可以用的一些资源 前面都是跟 ADC 相关的 这里面应该是 firmware 固件相关的 这个是 GPIO 的 那么我们觉得跟我选一个 UART 的进来 我们可以看到 这两个缓冲区呢都是有个64个字节 在这里面噢 我们可以看到 UART emulator 这个东西我们是可以在程序里面使用的 同时呢在 constant 这个应该是一个常量的里面 我们看到有缓冲区的设置 然后我们把它先搞掉 毕竟没有用它 这个整个程序分成了三个段 第一个段呢就是初始化段 第二段呢是执行代码段 第三个段呢是它的一些 最后终结的时候需要运行的一些段 在这个 IDE 里面 也是做了一个比较好的一个结构化的划分 在初始化段里面呢 主要就是用在我们这个程序 第一次运行的时候 只运行一次的这样一种情况 那么这个地方呢 它就是简单的把 analog 这个应该是一个 analog 的一个东西 把它设置然后我们就触发 我们的第一次的任务调度 我们可以看到 然后一旦触发任务调度之后 我们就进入到可执行段 这个执行段 他在每一次任务调度的时候 我们可以看到 最后它都有一个任务的调度 来不断地重复执行这里面的所有的东西 这里面是不断的重复执行 我可以看到对 output 打开 light sensor 这样一种操作 停一会儿然后我们对 DK 的操作打开它 然后读取它的值 然后读取它的值 然后最后把它关掉 然后把 light sensor 关掉 然后我们把读取它的值呢 跟我们存储在 我们数据结构当中的数据进行一些对比 那么我们可以看到刚才所有的 比较重要的几个结构 它里面有 config output state 这样几种结构呢 主要就是用在跟 MCU 之间的一些通讯 也不叫通讯吧 就是跟他们之间的 数据交互当中 使用的这样一种数据结构 在 MCU 的代码里面 我们可以直接对他们进行引用 等会我们在产生出来的代码里面 可以看到他们的存在 根据我们 ADC 的值 读取不同的一些 检测我们现在不同的状态 因为上一次这个代码执行的时候 我们是需要判断这个 bin 这个呢就是一个index的意思 就是说我们在这个数组里面 0 到 5 一共六个数的数组里面 我们现在是处于哪种光照强度 根据这个光照强度呢 我们再来调整我们自己的一些 这个阶段里面的一些输出 我们可以看到一些 最大最小值的一个简单的一个 去抖动的一个东西吧输出 然后证明比较重要的呢是在这个地方 bin 我们升级的 output.bin output.bin 的话 就是说我们下一次 再回到这个地方来执行的时候 它还是可以通过这个地方把它读出来 对一定要记住 这个是不断执行的这样一个过程 我们这块呢有一个 firmware generate 这样一个 alert interrupt 这个东西呢 主要是用在跟 MCU 通讯 唤醒 MCU 这样一种工作上面 我们待会可以在这里面看到 最后呢我们再一次调度我们的这个任务 这个任务 next education 呢 这个地方呢我们可以看到 它进行下一次的调度 下一次调度呢就是一个 RTC 的这样一个时间段 这个 RTC 呢这个时间段 我们是在 MCU 端进行一些设置 等会我们也可以看到 这个没有一些最后清理的工作 我们这里面用了两个 GPIO 一个是那个数字 GPIO 有一个模拟 GPIO 数字的 GPIO 呢 主要是用打开和关断 light sensor 的 power 模拟 GPIO 呢 主要就是用在我们的 ADC 的一个输入端 这里面呢我们很方便地用鼠标就可以 对它们进行一些配置 但是在手册里面好像说的不是很详细 我们也没有找到哪里地方有这样一种资料说明 所以说我们就还是用它吧要简单一些 而根据之前的我们一些代码呢 我们最后来生成 AUX 协处理器的这样一个代码 我们生成了 生成之后呢 我们可以对它进行调试 调试的话 我们可以用一个他的 testing driver code 就是他自己的一个调试框架的代码 产生之后呢我们也可以用它进行编译 编译之后 然后一些调试 我们可以打开看看 这个地方 task testing 这个这里面有一些我们可以打开
课程介绍 共计11课时,3小时7分49秒

EEworld原创:大话TI CC2650

TI 无线 Wi-Fi CC2650 Wi-Fi产品

     本系列视频由电子工程世界(EEworld)联合TI重磅推出。
     该视频由EEworld社区资深工程师主讲,结合802.15无线器件,组网,应用等使用经验,讲述CC26xx芯片分析介绍、CC2650DK出厂演示程序使用和用途分析,射频相关基础闲聊等。旨在帮助新进工程师快速开启最新最潮的cc26xx系列无线设计。

推荐帖子

【问TI】以太网传输速度问题
我用uip 协议栈写LM3S8962以太网时,在前面已经初始化了,在while里面写udp_send(UdpPcb,p);,让它连续发送,可是我打开调试软件,要等几十秒钟才会有数据,并且数据传输速度只有一千多b/s,这是为什么呢,应该发送数据能达到多少兆啊,请问专家这是为什么呢?...
飞龙飞龙 微控制器 MCU
MSP430单片机控制IO口操作-LED灯闪烁
一、学习要点:作为MSP430单片机的第一个入门程序,主要掌握MSP430单片机I/O的操作,I/O口初始化。并且通过实践进一步掌握对IAR MSP430软件的操作,以及 MSP430FET全系列JTAG仿真器 与 MSP430F135核心实验板 的了解与使用。 二、程序执行效果: MSP430F135核心实验板上的LED灯不断闪烁 三、原理图讲解:    查看MSP430F135核心实验...
wpdy 微控制器 MCU
提问+MSP430复位选择
想做一个复位功能,想到用看门狗,发现有两种情况实现PUC :满足定时要求和写错密码。请问哪一种更好一点。 另有没有别的软件复位的方法?...
zmsxhy 微控制器 MCU
请教关于sdram的问题
我的扳子上有一块sdram, 我发现,不能把段定位到sdram中去,只要把段定位到sdram中, 在load的时候,就会提示\"data verification failed at address 0x80000000. 请问一般是什么原因呢?是不是在EMIF 中sdram相关寄存设置的不对? 而且,我在ti的ccs安装目录中找了一个blink的例子程序,就是让c6713的dsk...
冬天的梦 模拟与混合信号

大明58

讲述CC26xx芯片分析介绍

2020年05月11日 09:07:55

hawkier

好好学习,不断长进

2019年11月05日 13:05:45

熊猫仙

老师讲的很详细,挺好的

2019年06月24日 11:53:52

zwei9

学习一下

2019年04月06日 00:29:37

dingxilindy

好好学习天天向上学习学习。

2019年04月04日 13:11:04

hellokt43

好好学习天天向上

2019年02月13日 10:50:05

cyrus1992

学习下

2018年12月15日 00:15:58

dl265361

学习

2018年12月12日 22:32:57

天马行空0

学习学习

2018年12月10日 17:02:31

nick_liu1129

学习

2018年12月06日 22:14:36

xiaozhuang

学习一下

2018年12月06日 08:26:24

song430

看看

2018年11月23日 09:20:30

分享到X
微博
QQ
QQ空间
微信

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新文章 手机版

站点相关: EEWORLD首页 EE大学堂 论坛 下载中心 Datasheet 活动专区 博客

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved