当前位置: 首页 > news >正文

基于亚博K210开发板——看门狗实验

开发板

亚博K210开发板
在这里插入图片描述

实验目的

本节课主要学习 K210 的看门狗超时复位的功能

实验准备

实验元件

K210 芯片中的看门狗。

元件特性

WDT 是外围总线(APB)的一种从外设,并且也是“同步化硬件组件设计”的组成部分,具有两个 WDT,分别为 WDT0 和 WDT1 看门狗定时器,主要包含的模块有一个 APB 从接口,一个当前计数器同步的寄存器模块,一个随着计数器递减的中断/系统重置模块和逻辑控制电路,一个同步时钟域来为异步时钟同步做支持。
看门狗定时器支持如下设置:

  • APB 总线宽度可配置为 8、16 和 32 位

  • 时钟计数器从某一个设定的值递减到 0 来指示时间的计时终止

  • 可选择的外部时钟使能信号,用于控制计数器的计数速率

  • 一个时钟超时 WDT 可以执行以下任务:

    – 产生一个系统复位信号
    – 首先产生一个中断,即使该位是否已经被中断服务清除,其次它会产生一

  • 个系统复位信号

  • 占空比可编程调节

  • 可编程和硬件设定计数器起始值

  • 计数器重新计时保护

  • 暂停模式,仅当使能外部暂停信号时

  • WDT 偶然禁用保护

  • 测试模式,用来进行计数器功能测试(递减操作)

  • 外部异步时钟支持。当该项功能启用时,将会产生时钟中断和系统重置信号,即使 APB 总线时钟关闭的情况下

SDK 中对应 API 功能

对应的头文件 wdt.h

WDT 看门狗在开发单片机中作用巨大,可以在程序出现死机的情况自动重启系统,而不需要手动操作。
相关接口:

• wdt_init:配置看门狗参数,启动看门狗,不使用中断的话,将 on_irq 设置为 NULL。返回值为看门狗实际超时时间,一般比设置的时间稍微大一些。
• wdt_start(0.6.0 后不再支持,请使用 wdt_init)
• wdt_stop:关闭看门狗。
• wdt_feed:重置看门狗计时器,俗称喂狗。
• wdt_clear_interrupt:清除中断,如果在中断函数中清除中断,看门狗不会重启。

实验原理

看门狗其实就是一个需要在设定一定时间内被复位的计数器,如果没有按时复位,则会强制系统复位。在看门狗启动前需要配置超时时间,当看门狗启动后,计数器开始自动计数,经过一定时间,如果没有被复位,计数器溢出就会对 CPU产生一个复位信号使系统重启(俗称“被狗咬”)。要保证系统正常运行时,需要在看门狗超时时间内重置看门狗计数器(俗称“喂狗”)。

实验过程

  1. 首先在系统启动的时候答应一次“system start!”提示,可以清楚地知道系统什么时候重启过。times 用于记录喂狗的次数。然后初始化系统中断以及使能全局中断。
/* 打印系统启动信息 */
printf("system start!\n");
/* 记录feed的次数 */
int times = 0;/* 系统中断初始化 */
plic_init();
sysctl_enable_irq();
  1. 配置看门狗的参数,使用的是看门狗 WDT0,设置超时时间为 2 秒,中断函数函数为 wdt0_irq_cb,返回值是看门狗实际超时的时间,一般会比设置的时间稍微大一些。这里注意中断函数不是超时的时候调用的,而是实际超时时间的一半调用的。比如这里设置了 2 秒超时时间,实际超时时间约 2.58 秒,如果在 1.29秒之前没有喂狗,则会调用中断回调函数。
/* 启动看门狗,设置超时时间为2秒后调用中断函数wdt0_irq_cb */
int timeout = wdt_init(WDT_DEVICE_0, 2000, wdt0_irq_cb, NULL);/* 打印看门狗实际超时的时间 */
printf("wdt timeout is %d ms!\n", timeout);
  1. 在 WDT0 的中断回调中打印系统超时的信息,默认 WDT_TIMEOUT_REBOOT 为1,看门狗超时重启,如果把 WDT_TIMEOUT_REBOOT 设置为 0,则重启只会打印提示,不会重启。
#define WDT_TIMEOUT_REBOOT    1
int wdt0_irq_cb(void *ctx)
{#if WDT_TIMEOUT_REBOOTprintf("%s:The system will reboot soon!\n", __func__);while(1);#elseprintf("%s:The system is busy but not reboot!\n", __func__);wdt_clear_interrupt(WDT_DEVICE_0);#endifreturn 0;
}
  1. 前五次每隔 1 秒钟喂狗一次,所以在五秒之后没有喂狗,系统约过 2.6 秒后重启。
 while(1){sleep(1);if(times++ < 5){/* 打印feed的次数 */printf("wdt_feed %d times!\n", times);/* 重置看门狗的计时器,重新开始计时 */wdt_feed(WDT_DEVICE_0);}}
  1. 编译调试,烧录运行
    进入自己项目 build目录,运行以下命令编译。
cmake .. -DPROJ=watchdog -G "MinGW Makefiles"
make

编译完成后,在 build 文件夹下会生成 watchdog.bin 文件。使用type-C 数据线连接电脑与 K210开发板,打开kflash,选择对应的设备,再将程序固件烧录到 K210 开发板上。

实验现象

烧录完成固件后,系统会弹出一个终端界面,如果没有弹出终端界面的可以打开串口助手显示调试内容。
在这里插入图片描述

实验总结

1.看门狗的作用是当没有在设定的时间内喂狗,则系统会发送中断使系统强制重启。
2.看门狗必须在系统正常运行的情况下喂狗,这样系统异常时就能够及时重启系统。
3.看门狗的定时中断是实际超时时间的一半,需要在这个时间内喂狗

相关文章:

  • print用法讲解(Python)
  • js day8
  • JAVA实现将富文本内容插入已有word文档并下载(dock4j+jsoup)
  • rabbitmq-集群部署
  • # 力扣:2、 两数相加:Java四种解法详解
  • spring boot 2升级3 记录
  • 驱动开发硬核特训 │ Day 23(下篇): i.MX8MP LCDIFv3 驱动中的 Regulator 系统全解
  • 2025一些热门的AI大模型课程资料推荐(持续更新中)
  • APIC Bond0/Teaming
  • QgraphicsView异步线程加载地图瓦片
  • 1. Msys2环境安装
  • 1.文档搜索软件Everything 的使用介绍
  • Kubernetes》》k8s》》explain查 yaml 参数
  • 第十二届蓝桥杯 2021 C/C++组 空间
  • windows中无法关闭mysql57服务
  • RSS‘25|CMU提出统一空中操作框架:以末端执行器为中心,无人机实现高精度遥操作
  • 算法设计与分析(期末试卷)
  • 用Python做有趣的AI项目 6:AI音乐生成器(LSTM Melody Generator)
  • 界面控件DevExpress WPF v25.1预览 - AI功能增强(语义搜索)
  • cas面试题
  • 吉林省公安厅出入境管理总队政委明志全已任省安保集团总经理
  • 商超展销延长、专区专柜亮相……上海“外贸拓内销”商品与市民见面
  • 民调显示特朗普执政百日支持率为80年来美历任总统最低
  • 子公司神州信息十年来首次亏损,神州控股遭国有股东广州城投派驻董事问责
  • 合同约定拿850万保底利润?重庆市一中院:约定无效,发回重审
  • 现场|贝聿铭上海大展:回到他建筑梦的初始之地