CC2650DK见识(四)
Loading the player...
将在30s后自动为您播放下一课程
我们现在来调试一下 我们刚才的这个 光强度传感器的这样一个应用 我们之前呢已经生成了它的代码 所以说我们现在就直接用他的 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 这样的一些 双方面通讯双方面交互 可以使用的这样一种情况呢 我们设置相应的一些 在这个回调函数里面 我们对这个整个流程 或者整个逻辑进行一些处理 大概的一个这个框架呢是
我们现在来调试一下
我们刚才的这个
光强度传感器的这样一个应用
我们之前呢已经生成了它的代码
所以说我们现在就直接用他的 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 这样的一些 双方面通讯双方面交互 可以使用的这样一种情况呢 我们设置相应的一些 在这个回调函数里面 我们对这个整个流程 或者整个逻辑进行一些处理 大概的一个这个框架呢是
我们现在来调试一下
我们刚才的这个
光强度传感器的这样一个应用
我们之前呢已经生成了它的代码
所以说我们现在就直接用他的 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系列无线设计。
//=$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'])?>