完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
前言
随开发板带的教程并没有给出看门狗的解释和例程。 通过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,符合。 |
|
|
|
只有小组成员才能发言,加入小组>>
4521个成员聚集在这个小组
加入小组3338 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4267 浏览 1 评论
4292 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 23:28 , Processed in 0.655965 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号