- 本课程为精品课,您可以登录eeworld继续观看:
- CC2650 - 事件和传感协控制器(下)
- 登录
- 课程目录
- 相关资源
- 课程笔记
我们现在来调试一下
我们刚才的这个
光强度传感器的这样一个应用
我们之前呢已经生成了它的代码
所以说我们现在就直接用他的 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
这样的一些
双方面通讯双方面交互
可以使用的这样一种情况呢
我们设置相应的一些
在这个回调函数里面
我们对这个整个流程
或者整个逻辑进行一些处理
大概的一个这个框架呢是
课程介绍
共计11课时,3小时7分49秒
猜你喜欢
换一换
推荐帖子
- 单片机晶振的作用以及原理解析
- 每个单片机系统里都有晶振,全程是叫晶体震荡器,在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。 晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。在通常工作条件下,普通的晶振频率...
- Aguilera 微控制器 MCU
- 请帮忙推荐网络hub芯片?
- 现在在系统里面需要实现7个或者8个MCU的网络互通,再外加一个和外面的web相连; (不考虑现成的hub,应为体积的问题,还有接口的问题) 可以支持10/100/1000M的自适应; 大家有芯片推荐吗? 谢谢! ...
- 37°男人 模拟与混合信号
- SysConfig如何助推嵌入式系统开发
- 嵌入式系统开发人员面临的重大挑战之一是如何高效而精确地配置系统。当今先进的微控制器(MCU)包括各类处理器内核、硬件加速器、先进的无线电、精密的外围器件和接口,并带有复杂的管脚多路复用方案的封装。 许多半导体供应商提供的软件示例可为嵌入式设计提供起点,但是开发人员通常必须修改各种参数、事件和变量,以针对特定应用优化软件。这些修改通常需要查阅许多技术文档,以识别和更新特定的寄存器或源代码行。考...
- alan000345 TI技术论坛
- 功放的6种保护功能以及常见的故障维修方法
- 功放的六种保护功能: 1、软启动保护 在大电流吸取量的音响设备,接通电源的瞬间其流过的电流值可以达到其平均电流值的4-10 倍时,对电网和设备本身都是一个冲击,严重的时候会损坏设备。 此时软启动电路能在设备开关的瞬间抑制电流的涌入量,让它平稳的达到正常起到保护设备和不引起电网波动的作用。通常用热敏电阻(NTC)的负温度特性来实现这个功能。 2、直流保护 当功放输出级发...
- Aguilera 模拟与混合信号