打印
[CC2640]

CC2640之看门狗

[复制链接]
918|33
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
coshi|  楼主 | 2020-2-2 17:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
测试环境


协议栈版本:BLE-STACK V2.1

IAR开发环境版本:IAR for Arm 7.40

硬件设备:Amo-SmartRF v2.0 开发板(对应TI官方的SmartRF06EB 开发板)

示例测试Demo工程:simpleBLEPeripheral工程



使用特权

评论回复

相关帖子

沙发
coshi|  楼主 | 2020-2-2 17:19 | 只看该作者
系统驱动层RTOS配置


1.打开“C:\ti\tirtos_simplelink_2_13_00_06\packages\ti\boards\SRF06EB\CC2650EM_7ID”目录下的“Board.c”文件,在文件的最后添加如下代码:


/*
*  ============================= WatchDog Begin===========================
*/
#include <ti/drivers/Watchdog.h>
#include <ti/drivers/watchdog/WatchdogCC26XX.h>

/* Watchdog objects */
WatchdogCC26XX_Object watchdogCC26XXObjects[SENSORTAG_CC2650_WATCHDOGCOUNT];

/* Watchdog configuration structure */
const WatchdogCC26XX_HWAttrs watchdogCC26XXHWAttrs[SENSORTAG_CC2650_WATCHDOGCOUNT] = {
    /* SENSORTAG_CC2650_WATCHDOG0 with 1 sec period at default CPU clock freq */
    {WDT_BASE, INT_WATCHDOG},
};

const Watchdog_Config Watchdog_config[] = {
    {&WatchdogCC26XX_fxnTable, &watchdogCC26XXObjects[0], &watchdogCC26XXHWAttrs[0]},
    {NULL, NULL, NULL},
};

/*
*  ============================= WatchDog End============================
*/

2.打开“C:\ti\tirtos_simplelink_2_13_00_06\packages\ti\boards\SRF06EB\CC2650EM_7ID”目录下的“Board.h”文件,在文件的最后添加如下代码:


/*!
*  @DEF    CC2650_WatchdogName
*  @brief  Enum of Watchdogs on the CC2650 dev board
*/
typedef enum CC2650_WatchdogName {
        CC2650_WATCHDOG0 = 0,
        CC2650_WATCHDOGCOUNT
} CC2650_WatchdogName;

/*!
*  @def    SENSORTAG_CC2650_WatchdogName
*  @brief  Enum of Watchdogs on the SENSORTAG_CC2650 dev board
*/
typedef enum SENSORTAG_CC2650_WatchdogName {
        SENSORTAG_CC2650_WATCHDOG0 = 0,
        SENSORTAG_CC2650_WATCHDOGCOUNT
} SENSORTAG_CC2650_WatchdogName;

这样,RTOS中看门狗部分就配置好了,下面我们来看看应用层是如何配置的。


使用特权

评论回复
板凳
coshi|  楼主 | 2020-2-2 17:20 | 只看该作者
应用层配置


1.将驱动中看门狗相关的文件添加到编译选项中,选择“CC2640App”--->右键点击“Drivers”--->“Add”--->“Add Files...”,操作截图如下:


使用特权

评论回复
地板
coshi|  楼主 | 2020-2-2 17:20 | 只看该作者

2.上述操作之后,会弹出文件添加的对话框,找到“C:\ti\tirtos_simplelink_2_13_00_06\packages\ti\drivers”目录下的“Watchdog.c”和“Watchdog.h”文件,选中之后,点击“打开”添加到工程中。操作显示如下:


使用特权

评论回复
5
coshi|  楼主 | 2020-2-2 17:20 | 只看该作者

3.选择“CC2640App”--->右键点击“Drivers”--->“Add”--->“Add Group...”,操作截图如下:


在弹出的对话框中输入“WATCHDOG”,操作显示如下:




点击“OK”之后,结果如下:




在“Drivers”文件夹下生成“WATCHDOG”文件夹。


使用特权

评论回复
6
coshi|  楼主 | 2020-2-2 17:21 | 只看该作者
4.在刚生成的“WATCHDOG”文件夹下添加“WatchdogCC26XX.c”和“WatchdogCC26XX.h”,这两个文件所在的路径为“C:\ti\tirtos_simplelink_2_13_00_06\packages\ti\drivers\watchdog”,操作显示如下:








选中文件,点击“打开”,即可成功添加文件。


使用特权

评论回复
7
coshi|  楼主 | 2020-2-2 17:22 | 只看该作者
5.应用层初始化中调用看门狗的接口,打开“C:\ti\simplelink\ble_cc26xx_2_01_00_44423\Projects\ble\SimpleBLEPeripheral\CC26xx\Source\Application”目录下的“simpleBLEPeripheral.c”文件,在该文件中添加头文件引用:

#include <ti/drivers/Watchdog.h>
并添加我们封装的两个函数,源码如下:

void wdtCallback(UArg handle)
{
        Watchdog_clear((Watchdog_Handle)handle);
}

void wdtInitFxn()
{
        Watchdog_Params wp;
        Watchdog_Handle watchdog;
        Watchdog_Params_init(&wp);
        wp.callbackFxn    = wdtCallback;
        wp.debugStallMode = Watchdog_DEBUG_STALL_ON;
        wp.resetMode      = Watchdog_RESET_ON;

        watchdog = Watchdog_open(Board_WATCHDOG, &wp);
        Watchdog_setReload(watchdog, 1500000); // 1sec (WDT runs always at 48MHz/32)
}

然后,在“simpleBLEPeripheral.c”文件的开头部分声明“wdtInitFxn”函数,截图如下:




最后,在“simpleBLEPeripheral.c”文件的初始化函数“SimpleBLEPeripheral_init”中调用看门狗“wdtInitFxn”函数。截图如下:



使用特权

评论回复
8
coshi|  楼主 | 2020-2-2 17:23 | 只看该作者
下面,我们来说明一下上述封装的两个函数,首先,我们可以看到“wdtInitFxn”函数中“wp.callbackFxn”的配置,该回调函数的配置是用来清除看门狗计时的,其实也就相当于我们常说的喂狗操作。在没有软件错误、程序正常允许的情况下,会定时触发该回调来喂狗,如果程序运行出现问题,该回调无法触发,看门狗达到设定的超时时间就会触发重启。



至于看门狗超时时间设置的问题,有的人会问为什么设置1500000就是1s呢?我们知道CC2640运行在48MHZ的频率,通过查阅资料,如下:






我们可以看到,计算看门狗超时时间的时候,需要除以32,也就是48MHZ除以32等于1.5MHZ,看门狗运行在1.5MHZ的频率上,也就是每计数一次等于1/1500000秒的时间,所以要实现1s超时时间,需要计数1500000次。这就是上面设置计数1500000即为1s的由来。





通过上述配置,我们的看门狗功能就添加完成了,通过实测,该看门狗配置方式可以起作用。







使用特权

评论回复
9
usysm| | 2020-2-7 20:04 | 只看该作者
在外面接看门狗芯片  

使用特权

评论回复
10
typeof| | 2020-2-7 20:05 | 只看该作者
如何用555芯片设计看门狗电路

使用特权

评论回复
11
yujielun| | 2020-2-7 20:06 | 只看该作者
内部看门狗应该怎么使用,最好 例程

使用特权

评论回复
12
htmlme| | 2020-2-7 20:06 | 只看该作者
看门狗定时器吧!  

使用特权

评论回复
13
pklong| | 2020-2-7 20:06 | 只看该作者
看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。

使用特权

评论回复
14
touser| | 2020-2-7 20:06 | 只看该作者
哪个芯片是看门狗?  

使用特权

评论回复
15
myiclife| | 2020-2-7 20:07 | 只看该作者
看门狗的功能是定期的查看芯片内部的情况

使用特权

评论回复
16
uytyu| | 2020-2-7 20:07 | 只看该作者
在程序跑飞的情况下看门狗电路会自动复位的

使用特权

评论回复
17
iyoum| | 2020-2-7 20:07 | 只看该作者
看门狗超过时间没有收到“喂狗”信号?  

使用特权

评论回复
18
jkl21| | 2020-2-7 20:08 | 只看该作者
看门狗 可以直接接芯片复位引脚吗

使用特权

评论回复
19
uytyu| | 2020-2-7 20:08 | 只看该作者
相当于电脑死机后重启。  

使用特权

评论回复
20
usysm| | 2020-2-7 20:08 | 只看该作者
外部看门狗是怎么实现的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

96

主题

3309

帖子

4

粉丝