CC2650DK见识(三)
Loading the player...
将在30s后自动为您播放下一课程
大家好 我们继续来看看 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 这个这里面有一些我们可以打开
大家好 我们继续来看看 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 这个这里面有一些我们可以打开
大家好
我们继续来看看 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
这个这里面有一些我们可以打开
大家好 我们继续来看看 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 这个这里面有一些我们可以打开
大家好
我们继续来看看 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
这个这里面有一些我们可以打开
视频报错
手机看
扫码用手机观看
收藏本课程
视频简介
CC2650DK见识(三)
所属课程:CC2650开发套件详解
发布时间:2015.10.08
视频集数:11
本节视频时长:00:24:00
该视频结合802.15无线器件,组网,应用等使用经验,讲述CC26xx芯片分析介绍、CC2650DK出厂演示程序使用和用途分析,射频相关基础闲聊等。旨在帮助新进工程师快速开启最新最潮的cc26xx系列无线设计。
//=$v1;?>
//=$v['id']?>//=$v['down_category']?>//=$v['link']?>//=$v['is_dl']?>//=$v['link']?>//=$v['name']?>//=$v['name']?>
//=$v['id']?>//=$v['down_category']?>//=$v['path']?>//=$v['is_dl']?>//=$v['path']?>//=$v['name']?>//=$v['name']?>
////=count($lesson['bbsinfo'])?>
//=$elink?>//=$elink?>//=$tags[0]?>//=$tags[0]?>//=$elink?>//= $elink?>//=$tags[1]?>//=$tags[1]?>
//=$lesson['bbs'];?>
//=count($lesson['bbsinfo'])?>