深圳市航顺芯片技术研发有限公司
登录
直播中
生龙活虎3
9年用户
802经验值
擅长:光电显示
私信
关注
[问答]
如何对看门狗的中断响应时间进行分析
开启该帖子的消息推送
响应时间
什么是看门狗?看门狗有哪些相关参数?
怎么去设计一种看门狗
威廉希尔官方网站
?
如何对看门狗的中断响应时间进行分析?
回帖
(1)
刁文洁
2021-8-6 15:10:37
前言
随开发板带的教程并没有给出看门狗的解释和例程。
通过TI给出的源码结合调试开发板,正式看懂看门狗。
特此记录,加深印象〜
1、看门狗(监控芯片)
在由导致故障的单个计算机系统中,由于驱动程序的工作可能会受到诱导场的干扰,导致各种诱因和内存的数据混乱,会导致程序路径错误,不在区,找出错误的程序指令等,留出可能会坠落循环,程序的运行被打断,由正常的系统控制无法继续工作,导致整个系统的坠落状态,预计未来的
正常看门狗,又叫看门狗,从本质上说。一个定时器威廉希尔官方网站 ,一般有一个输入和一个输出,有输入喂狗,一般是补充一个部分的复位端,一般是到连接功能。一旦发生错误就向芯片发出重启信号看门狗命令在程序的中断中拥有最高的优先级。
2、相关寄存器
2.1 WDCR看门狗控制寄存器
WDPS:决定看门狗计数时钟频率
WDDIS:决定看门狗的使能
CHK:应为11
2.2 WDCNTR看门狗门狗投票
WDCNTR:看门狗门狗投票WDCNTR:看门狗狗
自主实时值2.3WDKEY看门狗狗固定
WDKEY:写0x55+0xAA会清除WDCNTR,归属即决定
2.4 SCSR系统和控制寄存器
WDENNIT:。看门狗中断使能为0时为看门狗复位,为1时为看门狗中断
3、看门狗威廉希尔官方网站
OSCCLK 经分频和WDCR 分频后,若WDDIS 为0,则看门狗启动工作。当没有正确的安全秘诀狗,关键启动计满后可产生输出512 个OSCCLK 时钟作为信号的信号。复位信号WDRST还是中断信号WDINT由SCSR的WDENNIT决定。
当复位RST或者正确的秘诀WDKEY会看门狗关键按钮。
4、看门狗示例程
TI官网的例子如下:
//############################################# ##########################//// 文件:Example_2833xWatchdog.c//// TITLE:DSP2833x 看门狗中断测试程序。// // ASSUMPTIONS://// 该程序需要 DSP2833x 头文件。/// 说明://// 该程序执行看门狗。//// 首先看门狗连接到// PIE 块的WAKEINT 中断。然后代码进入无限循环。////用户可以选择是否馈送看门狗密钥寄存器//通过在无限循环中注释一行代码。////如果馈送看门狗关键寄存器通过 ServiceDog 函数 // 则不接受 WAKEINT 中断。如果密钥寄存器 // 不是由 ServiceDog 函数提供的,则将采用 WAKEINT。/// 观察变量:InitSysCtrl(); // 步骤 2. 初始化 GPIO: // 此示例函数位于 DSP2833x_Gpio.c 文件中,// 说明了如何将 GPIO 设置为其默认状态。// InitGpio(); // 本例跳过 // 步骤 3. 清除所有中断并初始化 PIE 向量表:// Disable CPU interrupts DINT;// 将 PIE 控制寄存器初始化为其默认状态。// 默认状态为所有 PIE 中断禁用和标志// 被清除。// 此函数位于 DSP2833x_PieCtrl.c 文件中。InitPieCtrl();//禁用CPU中断并清除所有CPU中断标志:IER = 0x0000; IFR = 0x0000;//用指向shell中断//服务程序(ISR)的指针初始化PIE向量表。// 这将填充整个表,即使此示例中未使用中断 //。这对于调试目的很有用。// shell ISR 例程位于 DSP2833x_DefaultIsr.c 中。// 该函数位于 DSP2833x_PieVect.c 中。InitPieVectTable();// 在这个例子中使用的中断被重新映射到// 在这个文件中找到的 ISR 函数。允许; // 这需要写入 EALLOW 保护寄存器 PieVectTable.WAKEINT = &wakeint_isr; EDIS; // 这是禁止写入 EALLOW 保护寄存器所必需的 // 步骤 4. 初始化所有器件外设:// 该函数位于 DSP2833x_InitPeripherals.c// InitPeripherals(); // 此示例不需要 // 步骤 5. 用户特定代码,启用中断:// 清除计数器 WakeCount = 0; // 计数中断 LoopCount = 0; // 通过空闲循环计数时间 // 将看门狗连接到 PIE 的 WAKEINT 中断 // 写入整个 SCSR 寄存器以避免清除 WDOVERRIDE 位 EALLOW; SysCtrlRegs.SCSR = BIT1; EDIS;// 使能 PIE 中的 WAKEINT:Group 1 中断 8// 使能与 WAKEINT 相连的 INT1:// PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // 启用 PIE 块 PieCtrlRegs.PIEIER1.bit.INTx8 = 1; // 启用 PIE Gropu 1 INT8 IER |= M_INT1; // 启用 CPU int1 EINT; // 启用全局中断// 重置看门狗计数器 ServiceDog(); // 启用看门狗 EALLOW; SysCtrlRegs.WDCR = 0x0028; EDIS; // 步骤 6. IDLE 循环。永远坐着循环(可选): for(;;) { LoopCount++; // 取消注释 ServiceDog 以在此处循环 // 注释 ServiceDog 以代替 WAKEINT // ServiceDog(); } } // 步骤 7. 在此处插入所有本地中断服务程序 (ISR) 和函数: // 如果使用本地 ISR,则重新分配向量表中的向量地址,如步骤 5 中所示 // 中断 void wakeint_isr(void){ WakeCount++; // 确认该中断以从第 1 组 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;}//============================ ================================================// 否更多。//============================================== ============================== // 如果使用本地 ISR,则在向量表中重新分配向量地址,如步骤 5 中所示 // 中断 void wakeint_isr(void){ WakeCount++; // 确认该中断以从第 1 组 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;}//============================ ================================================// 否更多。//============================================== ============================== // 如果使用本地 ISR,则在向量表中重新分配向量地址,如步骤 5 中所示 // 中断 void wakeint_isr(void){ WakeCount++; // 确认该中断以从第 1 组 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;}//============================ ================================================// 否更多。//============================================== ==============================例程功能描述
LoopCount 计数循环次数
WakeCount 计数WAKEINT 触发的次数
如果不屏蔽即ServiceDog();,看输入正确的秘诀,则门狗不会触发,WakeCount 并不会增加
for(;;){LoopCount++ ; // 取消注释 ServiceDog 以在此处循环 // 注释 ServiceDog 以采用 WAKEINT 而不是 ServiceDog(); 示例程总体思路同中断处理,此处只介绍和WatchDog相关的步骤,注释如下:
将中断中断表的WAKEINT框架ISR:wakeint_isr
EALLOW; // 这需要写入 EALLOW 保护寄存器 PieVectTable.WAKEINT = &wakeint_isr; EDIS; // 这需要禁用对 EALLOW 保护寄存器的写入,使能看门狗中断
EALLOW; SysCtrlRegs.SCSR = BIT1; EDIS;输入安全秘钥,看门狗命令
void ServiceDog(void){ EALLOW; SysCtrlRegs.WDKEY = 0x0055; SysCtrlRegs.WDKEY = 0x00AA; EDIS;}使能看门狗(未分频)
EALLOW; SysCtrlRegs.WDCR = 0x0028; EDIS;
5 看门狗中断响应时间分析
WDCR的WDPS可以配置看门狗计数频率频率。OSCCLK
为晶振频率30MHz,通过PLL 5倍频得到系统频率150MHz。
5.1 计数看门狗时钟不分频
当WDPS为000或001时,不分频。
EALLOW; SysCtrlRegs.WDCR = 0x0028; EDIS; 此看门狗中断响应时间,为
1/(30M/512)*2^8S=/(30/512)*0.256mS=4.37ms 理论系统时钟周期为
5*512*256=655360 通过CCS 6测得系统时钟周期为655381,符合。
5.2 看门狗计数时钟64分频
当WDPS为111时,64分频。
EALLOW; SysCtrlRegs.WDCR = 0x002f; EDIS; 看门狗故障响应时间,为
1/(30M/512/64)*2^8S=1/(30/512/64)*0.256mS=279.62ms 理论系统时钟周期为
5*512* 64 * 256 = 41943040通过CCS 6测得系统时钟周期为41943060,符合。
前言
随开发板带的教程并没有给出看门狗的解释和例程。
通过TI给出的源码结合调试开发板,正式看懂看门狗。
特此记录,加深印象〜
1、看门狗(监控芯片)
在由导致故障的单个计算机系统中,由于驱动程序的工作可能会受到诱导场的干扰,导致各种诱因和内存的数据混乱,会导致程序路径错误,不在区,找出错误的程序指令等,留出可能会坠落循环,程序的运行被打断,由正常的系统控制无法继续工作,导致整个系统的坠落状态,预计未来的
正常看门狗,又叫看门狗,从本质上说。一个定时器威廉希尔官方网站 ,一般有一个输入和一个输出,有输入喂狗,一般是补充一个部分的复位端,一般是到连接功能。一旦发生错误就向芯片发出重启信号看门狗命令在程序的中断中拥有最高的优先级。
2、相关寄存器
2.1 WDCR看门狗控制寄存器
WDPS:决定看门狗计数时钟频率
WDDIS:决定看门狗的使能
CHK:应为11
2.2 WDCNTR看门狗门狗投票
WDCNTR:看门狗门狗投票WDCNTR:看门狗狗
自主实时值2.3WDKEY看门狗狗固定
WDKEY:写0x55+0xAA会清除WDCNTR,归属即决定
2.4 SCSR系统和控制寄存器
WDENNIT:。看门狗中断使能为0时为看门狗复位,为1时为看门狗中断
3、看门狗威廉希尔官方网站
OSCCLK 经分频和WDCR 分频后,若WDDIS 为0,则看门狗启动工作。当没有正确的安全秘诀狗,关键启动计满后可产生输出512 个OSCCLK 时钟作为信号的信号。复位信号WDRST还是中断信号WDINT由SCSR的WDENNIT决定。
当复位RST或者正确的秘诀WDKEY会看门狗关键按钮。
4、看门狗示例程
TI官网的例子如下:
//############################################# ##########################//// 文件:Example_2833xWatchdog.c//// TITLE:DSP2833x 看门狗中断测试程序。// // ASSUMPTIONS://// 该程序需要 DSP2833x 头文件。/// 说明://// 该程序执行看门狗。//// 首先看门狗连接到// PIE 块的WAKEINT 中断。然后代码进入无限循环。////用户可以选择是否馈送看门狗密钥寄存器//通过在无限循环中注释一行代码。////如果馈送看门狗关键寄存器通过 ServiceDog 函数 // 则不接受 WAKEINT 中断。如果密钥寄存器 // 不是由 ServiceDog 函数提供的,则将采用 WAKEINT。/// 观察变量:InitSysCtrl(); // 步骤 2. 初始化 GPIO: // 此示例函数位于 DSP2833x_Gpio.c 文件中,// 说明了如何将 GPIO 设置为其默认状态。// InitGpio(); // 本例跳过 // 步骤 3. 清除所有中断并初始化 PIE 向量表:// Disable CPU interrupts DINT;// 将 PIE 控制寄存器初始化为其默认状态。// 默认状态为所有 PIE 中断禁用和标志// 被清除。// 此函数位于 DSP2833x_PieCtrl.c 文件中。InitPieCtrl();//禁用CPU中断并清除所有CPU中断标志:IER = 0x0000; IFR = 0x0000;//用指向shell中断//服务程序(ISR)的指针初始化PIE向量表。// 这将填充整个表,即使此示例中未使用中断 //。这对于调试目的很有用。// shell ISR 例程位于 DSP2833x_DefaultIsr.c 中。// 该函数位于 DSP2833x_PieVect.c 中。InitPieVectTable();// 在这个例子中使用的中断被重新映射到// 在这个文件中找到的 ISR 函数。允许; // 这需要写入 EALLOW 保护寄存器 PieVectTable.WAKEINT = &wakeint_isr; EDIS; // 这是禁止写入 EALLOW 保护寄存器所必需的 // 步骤 4. 初始化所有器件外设:// 该函数位于 DSP2833x_InitPeripherals.c// InitPeripherals(); // 此示例不需要 // 步骤 5. 用户特定代码,启用中断:// 清除计数器 WakeCount = 0; // 计数中断 LoopCount = 0; // 通过空闲循环计数时间 // 将看门狗连接到 PIE 的 WAKEINT 中断 // 写入整个 SCSR 寄存器以避免清除 WDOVERRIDE 位 EALLOW; SysCtrlRegs.SCSR = BIT1; EDIS;// 使能 PIE 中的 WAKEINT:Group 1 中断 8// 使能与 WAKEINT 相连的 INT1:// PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // 启用 PIE 块 PieCtrlRegs.PIEIER1.bit.INTx8 = 1; // 启用 PIE Gropu 1 INT8 IER |= M_INT1; // 启用 CPU int1 EINT; // 启用全局中断// 重置看门狗计数器 ServiceDog(); // 启用看门狗 EALLOW; SysCtrlRegs.WDCR = 0x0028; EDIS; // 步骤 6. IDLE 循环。永远坐着循环(可选): for(;;) { LoopCount++; // 取消注释 ServiceDog 以在此处循环 // 注释 ServiceDog 以代替 WAKEINT // ServiceDog(); } } // 步骤 7. 在此处插入所有本地中断服务程序 (ISR) 和函数: // 如果使用本地 ISR,则重新分配向量表中的向量地址,如步骤 5 中所示 // 中断 void wakeint_isr(void){ WakeCount++; // 确认该中断以从第 1 组 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;}//============================ ================================================// 否更多。//============================================== ============================== // 如果使用本地 ISR,则在向量表中重新分配向量地址,如步骤 5 中所示 // 中断 void wakeint_isr(void){ WakeCount++; // 确认该中断以从第 1 组 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;}//============================ ================================================// 否更多。//============================================== ============================== // 如果使用本地 ISR,则在向量表中重新分配向量地址,如步骤 5 中所示 // 中断 void wakeint_isr(void){ WakeCount++; // 确认该中断以从第 1 组 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;}//============================ ================================================// 否更多。//============================================== ==============================例程功能描述
LoopCount 计数循环次数
WakeCount 计数WAKEINT 触发的次数
如果不屏蔽即ServiceDog();,看输入正确的秘诀,则门狗不会触发,WakeCount 并不会增加
for(;;){LoopCount++ ; // 取消注释 ServiceDog 以在此处循环 // 注释 ServiceDog 以采用 WAKEINT 而不是 ServiceDog(); 示例程总体思路同中断处理,此处只介绍和WatchDog相关的步骤,注释如下:
将中断中断表的WAKEINT框架ISR:wakeint_isr
EALLOW; // 这需要写入 EALLOW 保护寄存器 PieVectTable.WAKEINT = &wakeint_isr; EDIS; // 这需要禁用对 EALLOW 保护寄存器的写入,使能看门狗中断
EALLOW; SysCtrlRegs.SCSR = BIT1; EDIS;输入安全秘钥,看门狗命令
void ServiceDog(void){ EALLOW; SysCtrlRegs.WDKEY = 0x0055; SysCtrlRegs.WDKEY = 0x00AA; EDIS;}使能看门狗(未分频)
EALLOW; SysCtrlRegs.WDCR = 0x0028; EDIS;
5 看门狗中断响应时间分析
WDCR的WDPS可以配置看门狗计数频率频率。OSCCLK
为晶振频率30MHz,通过PLL 5倍频得到系统频率150MHz。
5.1 计数看门狗时钟不分频
当WDPS为000或001时,不分频。
EALLOW; SysCtrlRegs.WDCR = 0x0028; EDIS; 此看门狗中断响应时间,为
1/(30M/512)*2^8S=/(30/512)*0.256mS=4.37ms 理论系统时钟周期为
5*512*256=655360 通过CCS 6测得系统时钟周期为655381,符合。
5.2 看门狗计数时钟64分频
当WDPS为111时,64分频。
EALLOW; SysCtrlRegs.WDCR = 0x002f; EDIS; 看门狗故障响应时间,为
1/(30M/512/64)*2^8S=1/(30/512/64)*0.256mS=279.62ms 理论系统时钟周期为
5*512* 64 * 256 = 41943040通过CCS 6测得系统时钟周期为41943060,符合。
举报
更多回帖
rotate(-90deg);
回复
相关问答
响应时间
如何
对看门狗
进行
测试
2021-08-02
1616
如何
对看门狗
进行
调试?
2021-07-28
1418
如何
对看门狗
进行
STM32CubeMX配置
2021-07-30
948
stm32窗口
看门狗
清
中断
问题如何解决
2020-06-09
3246
如何
对看门狗
定时器WDT
进行
配置呢
2022-01-17
1163
STC单片机不加载复位威廉希尔官方网站
对看门狗
有影响吗?
2023-04-13
1269
一文看懂
看门狗
概述以及
看门狗
模式
2021-08-10
5611
确保
看门狗
在等待UART
响应时
不会重置系统的最佳方法是什么?
2023-01-06
199
如何对独立
看门狗
和窗口
看门狗
进行
配置
2021-09-22
1610
独立
看门狗
和窗口
看门狗
对比
分析
哪个好?
2021-11-05
2008
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分