首页 > 产品 > 无线连接 > CC2650开发套件详解 >

蓝牙产品

最新课程

热门课程

CC2650DK见识(四)

我们现在来调试一下 我们刚才的这个 光强度传感器的这样一个应用 我们之前呢已经生成了它的代码 所以说我们现在就直接用他的 task testing 这样一个框架来对它进行调试 我们先连接上这个板子 这上面呢有一排按钮 连接上之后 这个地方就有一把叉 点了之后呢就断开了 这上面有一排按钮的话 他告诉我们这个是运行初始化代码运行一次 这个是在调试窗口 debugging panel 里面去运行的 那我们在 debugging panel 里面去搞 可以看到呢这个就是我们的 在 initialization code 里面这两句看得到 但是这里面也只能按照去单步的 而且每一个汇编指令的单步运行 是没有办法按照我们比较习惯的 那种表达事迹得单步去运行 那么这比如说刚才的 JS2 跳转指令 我们就把它跳进来 跑到哪里就算哪里把它运行完毕 运行完毕之后 这块他告诉我们 可以终结我们的初始化代码的调试 然后返回到我们的测试框架 这个时候呢它上面的就变了 变成运行结束代码 运行一次 这个是在调试窗口里面运行 这个呢是运行我们的可执行代码 一直运行这个是运行一次 这个是可执行代码 我们在调试窗口里面去运行 那么我们在调试窗口 这有个不好呢 就说我们好像没办法在里面打断点 断点是没法打 同时呢我们也没有办法 在这边变量的这个窗口里面 来查看我们自己的比如说 ADC value 这一些临时状态 这种变化我们没有办法看 下面呢是一些二进制的东西 这个东西可能也没有什么人看得懂 这些一些状态 你只有这样跑 还是比较单调的 结束它 然后回来 总体来说 这个调试器是一个最基本的 这样一个基于汇编指令状态的这样一个调试器 我们也没有办法看到 它里面的实际的一些变量值 也没有办法打断点 就是说如果是我们用这个东西 来做实际开发的话 还是比较讨厌的一个事情 希望 TI 后面的话能够把这个情况有所改变 我们现在来看一看 我们的 analog light sensor 这个工程 这个工程产生的一些代码 我们这里可以产生它 那我们可以看到它有一些 framework 有它本身接口的一些粗糙的东西 同时呢我们也看到一些统计数据 包括它的框架的占有量 一些引用的库的占有量 一些最后的统计数量 这些代码呢我们可以在 IAR 里面打开 它这里面已经打开了 可以在 OUTPUT 这个地方有一些工程 打开它就行 打开之后呢我们可以看到 framework.c 这几个东西 它里面主要包含了一个 AUXRAMimage 也就是说我们通过 sensor controller studio 编译出来的这些二进制的东西 我们是以这样一个数组的形式 而且是 16 位数组的形式存放在 RAM 里面的 RAM 呢我们后面需要把它拷贝到AUX 它自己的2K的那样一个RAM里面去执行 也可以看到这里面一些 IO 的初始化的东西 这些 IO 初始化的东西呢 确实没有在一些相关的资料上 找到他的一些说明 所以说这个具体的数值是为什么是这个样子 我们也没有办法去揣摩它 可以看到这里面 它主要是启动 Rtcticks stopRtcticks 这些对时钟的一些控制 还有对资源的一些控制 这个资源呢我们可以看到它 初始化了一个我们需要的 analog input 就是 ADC 采样的那个 IO 端口 还有一个呢就是 output 这样一个数字端口 它主要是用来控制我们的 light sensor的一个 power 的这样一个东西 然后我们可以看 framework framework 里面的话 它主要是对 比如说 interface init 对它自己的一个初始化 启动 task 结束 task 还有一些对 task 操作控制啊 等等这样一些东西 这些东西它都是它自己生成的 这两个代码的话呢 由于它是生成代码 由于它是生成代码 所以说如果我们在里面做了一些临时性的修改 它可能在我们下一次生成的时候就会被覆盖掉 那么我们现在编译它 编译了之后呢 因为我自己是用的是 JLink 因为 JLink 可能比 XDS 确实要快得很多 这里面简单设置一下之后 我们就可以把它烧进去 烧进去我们可以看到 前面是一些对芯片的一些操作 这个包括一些 DOMAIN 控制的一些操作 包括 GPIO 的一些操作 这个毕竟不是重点 还可看到一些比如说 1234 4个灯 嗯这个四个灯 主要就是 smartRF06 这个基板上面有的四个灯 我们等会的任务呢就是说 要根据不同的光照强度 来把这四个灯依次点亮 一直要到我们很关注的一个地方 这个地方呢就是说 注册一个 callback 回调函数这样一个东西 ctrlready 和 taskalert 这两个东西 taskalert 呢 我们可能有印象的话 应该在这个地方 可以看得到 这里面 fwgenalertinterrupt 这个地方确实是产生了一个中断 那么我们在这里面 需要有一个对这个中断处理的 这样一个回调函数 那么它设置到这个地方 就是简单的把它设置到一个全局变量里面去 先不管它 对接口本身进行初始化 我们可以看到它是使用的 这样一个 driver setup 这样一个 driver setup 呢也是在 SCIF.C 里面去 生成的 生成的话 它里面有几个地址 这几个地址呢 400E0000 这个地址是 AUX 的 SRAM 映射在 MCU 地址空间里面的一个地址 具体为什么他要有一个 E2 或者是一个 D0 这个东西我们也没有在相应的资料里面看到 包括你 E2 这个地方为什么是这个数据结构 我们也没有相应的资料去看这个东西 所以说也没有办法理解它 就简单去过 那这个里面 对 SCIF 就是说我们的 AUX 进行一些初始化 因为这里面这样一些 寄存器的具体的域 在我们的手册里面讲的还是比较清楚的 包括你像 AUX Controller setup 这里面很多东西乱七八糟的 都还讲得比较清楚 所以这里面也就不一条一条的去解释 我们可以看到这里面呢 它有一句拷贝 把我们的 AUX RAM Image 拷贝到我们的 AUX RAM BASE AUX RAM BASE 我们可以看到就是它的 400E000 就相当于是把我们刚才直接这样一个东西 拷贝到我们的 FRAM 里面去了 我们在这里 就简单的初始化了我们的一个模拟输入 还有一个数字输出 初始化这两个引脚 这后面就是 这后面是对一些外设的操作 这个操作呢 就像刚才说的在手册里面 还是讲的比较详细的 AUX event controller 这样一个事件的这样一个设置 我们可以看到 它里面有 software ADC 的第二个通道 因为第一在手册上面有具体的解释 所以说这里就不再重复的去解释它 我们可以看到在这个地方 我们有 寄存器控制 初始化 这个东西呢就是我们之前在手册上面 和内部里面发现的不一致的地方 就是说它这个中断号呢 22 号手册上面是 UART1 这个地方他确实用的 software event 0 这还是比较麻烦的一个东西 但是我们这里把他设置成我们刚才 拷贝的这样一个东西 ready 好 这个里面把 把这个中断的数组放到 RAM 里面去 使能这个中断 同样的我们 task 这个也是按照这样的方式 task 呢 它是用的是另一个 event software event 1 这个东西 29 这个东西在手册上面也没有描述 也就相当于是把我们 刚才注册的这样一个函数域名 把它放到内存的 interrupt vector 里面去 然后清除中断 然后使能它 这个就相当于是我们就完成了初始化 RTC 的初始化 RTC 呢主要是用在 我们 sensor 里面的这个地方 比如说 firmware schedule task 这个地方 这地方就是说 我们在这里初始化的 tick 的值它是当成一个 tick 来使用 我们打开中断 使能这个 RTC 这里面呢 我们也可以看到我们刚才 config 这个地方大家可能比较熟悉了 configPbinthresholds 这里面就刚才说的 我们可以通过这样一个数组数据结构 在AUX和MCU之间进行一些基本的信息交互 比如说这里面的一些Pbinthreshold 我们需要设置它的一些阈值 比如说这个 pbin 这个里面 我们需要设置它的一些阈值 这就是我们 ADC 采样出来之后 需要比较的这样一个值 我们设置它然后这里我们启动 我们第一个 task 这个 task 就是在这里 我们的一个 task resource 这就是我们第一个 task 我们启动它 启动之后我们就整体进入了一个死循环 那么我们怎么看它的一些效果呢 可以在这个地方 就是说 task alert 它毕竟是要整个中断过来 所以说我们在这里打个断点 因为这个地方 我们是用的是光照强度 所以说我们就借用 笔记本电脑的这个屏幕的强度 我们来看一看它的一些效果 这里呢我们可以看到这个灯都没有亮 这四个灯 那我们通过这个电脑给它一个亮度 好 看到现在第一个灯亮了 因为这个亮度只有这么高 所以说这个第二个他可能也亮不了 好 我们回来看 回来看 这个地方呢 因为他毕竟他需要给一个中断过来 所以说我们在这个地方打个断点 我们可以再一次看一看 断点来了 来了之后呢 我们先告诉 MCU 我们已经知道你过来了 初始化把这个 GPIO 的 LED 这几个东西设置一下 根据我们光照强度的值 现在需要点亮第一个灯 就是刚才那个红色的灯 所以说我们现在就把它点亮 点亮之后呢告诉 AUX 我已经知道你的一些状态 然后我们就继续进入等待的一个过程 大概的流程也就是这个样子 总结一下呢 就是说我们 有几个比较重要的地方 第一个是设置它的回调函数 这个回调函数是用在 fwgeninterrupt 的时候 我们可以得到一些事件 在这个里面去处理我们的事件 设置 RTC 的一个 Tick 时长 根据 config 还有一些 output.bin 这样的一些 双方面通讯双方面交互 可以使用的这样一种情况呢 我们设置相应的一些 在这个回调函数里面 我们对这个整个流程 或者整个逻辑进行一些处理 大概的一个这个框架呢是

我们现在来调试一下

我们刚才的这个

光强度传感器的这样一个应用

我们之前呢已经生成了它的代码

所以说我们现在就直接用他的 task testing

这样一个框架来对它进行调试

我们先连接上这个板子

这上面呢有一排按钮

连接上之后

这个地方就有一把叉

点了之后呢就断开了

这上面有一排按钮的话

他告诉我们这个是运行初始化代码运行一次

这个是在调试窗口

debugging panel 里面去运行的

那我们在 debugging panel 里面去搞

可以看到呢这个就是我们的

在 initialization code 里面这两句看得到

但是这里面也只能按照去单步的

而且每一个汇编指令的单步运行

是没有办法按照我们比较习惯的

那种表达事迹得单步去运行

那么这比如说刚才的 JS2 跳转指令

我们就把它跳进来

跑到哪里就算哪里把它运行完毕

运行完毕之后

这块他告诉我们

可以终结我们的初始化代码的调试

然后返回到我们的测试框架

这个时候呢它上面的就变了

变成运行结束代码 运行一次

这个是在调试窗口里面运行

这个呢是运行我们的可执行代码

一直运行这个是运行一次

这个是可执行代码

我们在调试窗口里面去运行

那么我们在调试窗口

这有个不好呢

就说我们好像没办法在里面打断点

断点是没法打

同时呢我们也没有办法

在这边变量的这个窗口里面

来查看我们自己的比如说 ADC value

这一些临时状态

这种变化我们没有办法看

下面呢是一些二进制的东西

这个东西可能也没有什么人看得懂

这些一些状态

你只有这样跑

还是比较单调的

结束它 然后回来

总体来说

这个调试器是一个最基本的

这样一个基于汇编指令状态的这样一个调试器

我们也没有办法看到

它里面的实际的一些变量值

也没有办法打断点

就是说如果是我们用这个东西

来做实际开发的话

还是比较讨厌的一个事情

希望 TI 后面的话能够把这个情况有所改变

我们现在来看一看

我们的 analog light sensor 这个工程

这个工程产生的一些代码

我们这里可以产生它

那我们可以看到它有一些 framework

有它本身接口的一些粗糙的东西

同时呢我们也看到一些统计数据

包括它的框架的占有量

一些引用的库的占有量

一些最后的统计数量

这些代码呢我们可以在 IAR 里面打开

它这里面已经打开了

可以在 OUTPUT 这个地方有一些工程

打开它就行

打开之后呢我们可以看到

framework.c 这几个东西

它里面主要包含了一个 AUXRAMimage

也就是说我们通过 sensor controller studio

编译出来的这些二进制的东西

我们是以这样一个数组的形式

而且是 16 位数组的形式存放在 RAM 里面的

RAM 呢我们后面需要把它拷贝到AUX

它自己的2K的那样一个RAM里面去执行

也可以看到这里面一些 IO 的初始化的东西

这些 IO 初始化的东西呢

确实没有在一些相关的资料上

找到他的一些说明

所以说这个具体的数值是为什么是这个样子

我们也没有办法去揣摩它

可以看到这里面

它主要是启动 Rtcticks stopRtcticks

这些对时钟的一些控制

还有对资源的一些控制

这个资源呢我们可以看到它

初始化了一个我们需要的 analog input

就是 ADC 采样的那个 IO 端口

还有一个呢就是 output 这样一个数字端口

它主要是用来控制我们的

light sensor的一个 power 的这样一个东西

然后我们可以看 framework

framework 里面的话

它主要是对 比如说 interface init

对它自己的一个初始化

启动 task 结束 task

还有一些对 task 操作控制啊

等等这样一些东西

这些东西它都是它自己生成的

这两个代码的话呢

由于它是生成代码

由于它是生成代码

所以说如果我们在里面做了一些临时性的修改

它可能在我们下一次生成的时候就会被覆盖掉

那么我们现在编译它

编译了之后呢

因为我自己是用的是 JLink

因为 JLink 可能比 XDS 确实要快得很多

这里面简单设置一下之后

我们就可以把它烧进去

烧进去我们可以看到

前面是一些对芯片的一些操作

这个包括一些 DOMAIN 控制的一些操作

包括 GPIO 的一些操作

这个毕竟不是重点

还可看到一些比如说 1234 4个灯

嗯这个四个灯

主要就是 smartRF06

这个基板上面有的四个灯

我们等会的任务呢就是说

要根据不同的光照强度

来把这四个灯依次点亮

一直要到我们很关注的一个地方

这个地方呢就是说

注册一个 callback

回调函数这样一个东西

ctrlready 和 taskalert 这两个东西

taskalert 呢

我们可能有印象的话

应该在这个地方

可以看得到

这里面 fwgenalertinterrupt

这个地方确实是产生了一个中断

那么我们在这里面

需要有一个对这个中断处理的

这样一个回调函数

那么它设置到这个地方

就是简单的把它设置到一个全局变量里面去

先不管它 对接口本身进行初始化

我们可以看到它是使用的

这样一个 driver setup 这样一个

driver setup 呢也是在 SCIF.C 里面去

生成的 生成的话

它里面有几个地址

这几个地址呢

400E0000 这个地址是 AUX 的 SRAM

映射在 MCU 地址空间里面的一个地址

具体为什么他要有一个 E2

或者是一个 D0

这个东西我们也没有在相应的资料里面看到

包括你 E2 这个地方为什么是这个数据结构

我们也没有相应的资料去看这个东西

所以说也没有办法理解它

就简单去过

那这个里面

对 SCIF 就是说我们的 AUX 进行一些初始化

因为这里面这样一些

寄存器的具体的域

在我们的手册里面讲的还是比较清楚的

包括你像 AUX Controller

setup 这里面很多东西乱七八糟的

都还讲得比较清楚

所以这里面也就不一条一条的去解释

我们可以看到这里面呢

它有一句拷贝

把我们的 AUX RAM Image

拷贝到我们的 AUX RAM BASE

AUX RAM BASE

我们可以看到就是它的 400E000

就相当于是把我们刚才直接这样一个东西

拷贝到我们的 FRAM 里面去了

我们在这里

就简单的初始化了我们的一个模拟输入

还有一个数字输出

初始化这两个引脚

这后面就是

这后面是对一些外设的操作

这个操作呢

就像刚才说的在手册里面

还是讲的比较详细的

AUX event controller

这样一个事件的这样一个设置

我们可以看到

它里面有 software

ADC 的第二个通道

因为第一在手册上面有具体的解释

所以说这里就不再重复的去解释它

我们可以看到在这个地方

我们有 寄存器控制 初始化

这个东西呢就是我们之前在手册上面

和内部里面发现的不一致的地方

就是说它这个中断号呢

22 号手册上面是 UART1

这个地方他确实用的 software event 0

这还是比较麻烦的一个东西

但是我们这里把他设置成我们刚才

拷贝的这样一个东西

ready 好

这个里面把

把这个中断的数组放到 RAM 里面去

使能这个中断

同样的我们 task 这个也是按照这样的方式

task 呢 它是用的是另一个 event

software event 1

这个东西 29 这个东西在手册上面也没有描述

也就相当于是把我们

刚才注册的这样一个函数域名

把它放到内存的

interrupt vector 里面去

然后清除中断

然后使能它

这个就相当于是我们就完成了初始化

RTC 的初始化

RTC 呢主要是用在

我们 sensor 里面的这个地方

比如说 firmware schedule task 这个地方

这地方就是说

我们在这里初始化的

tick 的值它是当成一个 tick 来使用

我们打开中断

使能这个 RTC

这里面呢

我们也可以看到我们刚才

config 这个地方大家可能比较熟悉了

configPbinthresholds

这里面就刚才说的

我们可以通过这样一个数组数据结构

在AUX和MCU之间进行一些基本的信息交互

比如说这里面的一些Pbinthreshold

我们需要设置它的一些阈值

比如说这个 pbin 这个里面

我们需要设置它的一些阈值

这就是我们 ADC 采样出来之后

需要比较的这样一个值

我们设置它然后这里我们启动

我们第一个 task

这个 task 就是在这里

我们的一个 task resource

这就是我们第一个 task 我们启动它

启动之后我们就整体进入了一个死循环

那么我们怎么看它的一些效果呢

可以在这个地方

就是说 task alert

它毕竟是要整个中断过来

所以说我们在这里打个断点

因为这个地方

我们是用的是光照强度

所以说我们就借用

笔记本电脑的这个屏幕的强度

我们来看一看它的一些效果

这里呢我们可以看到这个灯都没有亮

这四个灯

那我们通过这个电脑给它一个亮度

好 看到现在第一个灯亮了

因为这个亮度只有这么高

所以说这个第二个他可能也亮不了

好 我们回来看

回来看 这个地方呢

因为他毕竟他需要给一个中断过来

所以说我们在这个地方打个断点

我们可以再一次看一看

断点来了

来了之后呢

我们先告诉 MCU

我们已经知道你过来了

初始化把这个 GPIO 的 LED

这几个东西设置一下

根据我们光照强度的值

现在需要点亮第一个灯

就是刚才那个红色的灯

所以说我们现在就把它点亮

点亮之后呢告诉 AUX

我已经知道你的一些状态

然后我们就继续进入等待的一个过程

大概的流程也就是这个样子

总结一下呢

就是说我们

有几个比较重要的地方

第一个是设置它的回调函数

这个回调函数是用在

fwgeninterrupt 的时候

我们可以得到一些事件

在这个里面去处理我们的事件

设置 RTC 的一个 Tick 时长

根据 config 还有一些 output.bin

这样的一些

双方面通讯双方面交互

可以使用的这样一种情况呢

我们设置相应的一些

在这个回调函数里面

我们对这个整个流程

或者整个逻辑进行一些处理

大概的一个这个框架呢是

视频报错
手机看
扫码用手机观看
收藏本课程

视频简介

CC2650DK见识(四)

所属课程:CC2650开发套件详解 发布时间:2015.10.08 视频集数:11 本节视频时长:00:15:45

该视频结合802.15无线器件,组网,应用等使用经验,讲述CC26xx芯片分析介绍、CC2650DK出厂演示程序使用和用途分析,射频相关基础闲聊等。旨在帮助新进工程师快速开启最新最潮的cc26xx系列无线设计。

TI培训小程序