linux驱动学习(十二)之看门狗

一、看门狗定时器功能

1、产生复位信号:当系统受到由于噪声或者干扰而造成系统死机,看门狗产生一个复位信号。

2、普通定时器:16bits定时器,产生周期性的中断信号

二、看门狗系统框图

设置计数值以每隔10S就会产生一个复位信号:

第一分频值:PCLK/256 ---> 255+1 ---->781250
第二次分频值:128 ----> 781250/128 -->6103
计数值:6103 * 10 ---> 61030 不能大于 65536(0-65535) 16bits

三、看门狗定时器相关的寄存器

1、WTCON(控制寄存器)

2、WTDAT(数据寄存器)

3、WTCNT(计数寄存器)

4、WTCLRINT(清中断寄存器)

四、编程

#define WDT_START  _IO('W',0)
#define WDT_KEEPALIVE  _IO('W',1)
#define WDT_STOP  _IO('W',2)static struct resource *gec6818_wdt_res = NULL;
static void __iomem *wdt_va_base = NULL; 
static void __iomem *wdt_va_con = NULL;//WDTCON  0XC0019000
static void __iomem *wdt_va_dat = NULL; //WDTDAT 0XC0019004
static void __iomem *wdt_va_cnt = NULL; //WDTCNT 0XC0019008
static void __iomem *wdt_va_clrint = NULL; //WTCLRINT 0XC001900C
static struct clk	*wdt_clock;
static unsigned long wdt_freq;long gec6818_wdt_ioctl(struct file *file, unsigned int cmd, unsigned long args)
{printk("gec6818_wdt_ioctl\n");switch(cmd){case WDT_START:printk("WDT_START\n");*(unsigned int*)wdt_va_con = (255<<8) | (3<<3) | (1<<2) | (1<<0);  //[15:8] [4:3] [2] [0]*(unsigned int*)wdt_va_con |= (1<<5); //开启看门狗功能break;case WDT_KEEPALIVE:*(unsigned int*)wdt_va_cnt = 0XEE66;break;case WDT_STOP:*(unsigned int*)wdt_va_cnt = 0;break;	default:return -ENOIOCTLCMD;/* No ioctl command */break;}return 0;
}//[2]
static struct file_operations gec6818_wdt_ops = {.owner = THIS_MODULE,.open = gec6818_wdt_open,.unlocked_ioctl = gec6818_wdt_ioctl,.release = gec6818_wdt_release,//当应用程序调用close时,执行驱动程序中的接口函数
};//[1] 定义混杂设备
static struct miscdevice wdt_misc = {.name = "wdt_drv",  //设备文件的名字.fops = &gec6818_wdt_ops,.minor = MISC_DYNAMIC_MINOR, //设置次设备号,MISC_DYNAMIC_MINOR --- 表示由系统动态分配一个次设备号
};
static int __init gec6818wdt_init(void) //执行insmod执行一次
{int ret;// char temp;printk("gec6818wdt_init\n");//[3] 注册混杂设备ret = misc_register(&wdt_misc);if(ret < 0){printk("misc_register error\n");ret = -EBUSY;goto misc_register_error;}//申请物理内存区gec6818_wdt_res = request_mem_region(0XC0019000,0x1000,"WDTC_MEM");if(gec6818_wdt_res == NULL){printk("request_mem_region error\n");ret = -EBUSY;goto request_mem_region_error;}//动态映射wdt_va_base = ioremap(0XC0019000,0x1000);if(wdt_va_base == NULL){printk("ioremap error\n");ret = -EFAULT;goto ioremap_error;}wdt_va_con = wdt_va_base + 0x00;wdt_va_dat = wdt_va_base + 0x04;wdt_va_cnt = wdt_va_base + 0x08;wdt_va_clrint = wdt_va_base + 0x0C;/***************给程序设置时钟源*********************/wdt_clock = clk_get(NULL, "pclk");if (IS_ERR(wdt_clock)) {ret = PTR_ERR(wdt_clock);goto err_map;}clk_enable(wdt_clock);wdt_freq = clk_get_rate(wdt_clock);printk("wdt_freq = %luHz\n",wdt_freq);nxp_soc_peri_reset_set(RESET_ID_WDT);nxp_soc_peri_reset_set(RESET_ID_WDT_POR);/**********************************************///给对应寄存器进行初始化*(unsigned int*)wdt_va_con = 0; //默认看门狗关闭*(unsigned int*)wdt_va_dat = 0XEE66;//61030 ---> *(unsigned int*)wdt_va_cnt = 0XEE66;*(unsigned int*)wdt_va_clrint = 0;return 0;err_map:ioremap_error:release_mem_region(0XC0019000,0x1000);gec6818_wdt_res = NULL;request_mem_region_error:misc_deregister(&wdt_misc);misc_register_error:return ret;	
}

觉得有帮助的话,打赏一下呗。。

           

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/350301.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】机器学习中的人工神经元模型有哪些?

线性神经元 线性神经元&#xff08;Linear Neuron&#xff09;是一种基本的人工神经元模型&#xff0c;特点是其输出是输入的线性组合。线性神经元是神经网络中最简单的一种形式&#xff0c;适用于处理线性关系的问题。数学模型如下&#xff0c; y w ⋅ x b ∑ i 1 n w i x…

MySQL数据库初体验

SQL Server&#xff08;微软公司产品&#xff09;1、数据库基本概念 &#xff08;1&#xff09;数据Data 数据就是描述事物的符号记录。主要包括数字&#xff0c;文字、图形、图像、声音、档案记录等。一般以“记录”形式按统一的格式进行存储。 &#xff08;2&#xff09;表…

自动控制理论---离散傅里叶变换(DFT)进行信号谱分析

1、实验设备 PC计算机1台&#xff0c;MATLAB软件1套。 2、实验目的&#xff1a; 学习使用离散傅里叶变换&#xff08;DFT&#xff09;进行信号谱分析的方法。选择合适的变换区间长度N&#xff0c;对给定信号进行谱分析&#xff0c;并绘制幅频特性和相频曲线。 3、实验原理说…

DHCP部署与安全

DHCP作用 DHCP&#xff08;Dynamic Host Configure Protocol &#xff09;&#xff0c;作用是自动分配IP地址 DHCP相关概念 地址池/作用域&#xff1a;&#xff08;这里面放有IP、子网掩码、网关、DNS、租期&#xff09; DHCP协议端口是UDP 67/68 DHCP优点 减少工作量、避…

微服务之远程调用

常见的远程调用方式 RPC&#xff1a;Remote Produce Call远程过程调用&#xff0c;类似的还有 。自定义数据格式&#xff0c;基于原生TCP通信&#xff0c;速度快&#xff0c;效率高。早期的webservice&#xff0c;现在热门的dubbo &#xff08;12不再维护、17年维护权交给apac…

Python学习打卡:day06

day6 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 目录 day648、函数综合案例49、数据容器入门50、列表的定义语法51、列表的下标索引1、列表的下标&#xff08;索引&#xff09;2、列表的下标&#xff08…

【python-AI篇】人工智能技能树思维导图

大致总结一下得出如下思维导图&#xff0c;如不完善日后迭代更新 1. python基础三方库 1.1 科学计算库 ---- numpy库 1.2 科学计算库 ---- Scipy库 1.3 数据分析处理库 ---- pandas库 1.4 可视化库 ---- matplotlib库 1.5 可视化库 ---- seaborn库 1.6 机器学习和数据挖掘库 …

Java—装饰器模式

介绍 装饰器模式 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你动态地将行为添加到现有的对象中&#xff0c;而无需修改其代码。装饰器模式提供了比继承更灵活的功能扩展方式。 主要角色 Component&#xff1a;定义一个对…

思科配置路由器,四台主机互相ping通

一、如图配置 PC4和PC5用来配置路由器&#xff0c;各ip、接口如图所示。 二、配置各主机ip、子网掩码SNM、默认网关DGW (一)、PC0 (二)、PC1 (三)、PC2 (四)、PC3 三、 配置路由器Router0 (期间报错是打错了字母) Router>en Router#configure terminal Enter configurat…

解读ROS功能包模块的步骤

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言解读ROS功能包模块的步骤前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 推荐开发经验及方法博客专栏: [https:/…

H5漂流瓶交友源码|社交漂流瓶H5源码 附安装教程

H5漂流瓶交友源码|社交漂流瓶H5源码 附安装教程 搭建教程 环境&#xff1a;Nginx 1.20.1-MySQL 5.6.50-PHP-7.3 上传源码至网站根目录&#xff0c;创建并导入数据库 数据库信息修改&#xff1a;/config/database.php 网站运行目录/public 配置文件加入&#xff08;从24行…

Zookeeper高频面试题整理(入门到精通)

文章目录 1、什么是Zookeeper&#xff1f;2、ZooKeeper的基本数据结构是什么&#xff1f;3、Zookeeper的节点类型有哪些&#xff1f;4、Zookeeper的特点5、ZooKeeper如何保证数据一致性&#xff1f;6、什么是ZAB协议&#xff1f;7、Zookeeper的ACL机制是什么&#xff1f;8、Zoo…

MySQL性能分析

一、查看执行频率 sql执行频率,执行下述指令可以看到select&#xff0c;update,delete等操作的次数 show global status like Com_______; 具体我们在终端登录mysql看下&#xff0c;使用下述命令登录mysql&#xff0c;并输入命令 mysql -u 用户名 -p 上述查询&#xff0c;删…

设计模式-享元模式Flyweight(结构型)

享元模式(Flyweight) 享元模式是一种结构型模式&#xff0c;它主要用于减少创建对象的数量&#xff0c;减少内存占用。通过重用现有对象的方式&#xff0c;如果未找到匹配对象则新建对象。线程池、数据库连接池、常量池等池化的思想就是享元模式的一种应用。 图解 角色 享元工…

warning LNK4017: DESCRIPTION 语句不支持目标平台;已忽略

文章目录 warning LNK4017: DESCRIPTION 语句不支持目标平台&#xff1b;已忽略概述笔记备注END warning LNK4017: DESCRIPTION 语句不支持目标平台&#xff1b;已忽略 概述 基于ATL的COM DLL导出函数&#xff0c;无法用__declspec(dllexport)直接在函数上标记为导出函数。 只…

vue3医疗项目

配置src别名 打开viteconfig.js文件进行配置 import { defineConfig } from "vite"; import vue from "vitejs/plugin-vue"; // 引入node提供内置模块path&#xff1a;可以获取绝对路径 import path from "path";// https://vitejs.dev/config…

【C语言习题】30.使用指针打印数组内容

文章目录 作业标题作业内容2.解题思路3.具体代码 作业标题 使用指针打印数组内容 作业内容 写一个函数打印arr数组的内容&#xff0c;不使用数组下标&#xff0c;使用指针。 arr是一个整形一维数组。 2.解题思路 先定义一个数组&#xff0c;使用指针打印数组内容那就是说我们…

观察者模式-委托(大话设计模式)C/C++版本

观察者模式-委托 先看该常规的没有委托概念的代码&#xff0c;如下&#xff1a; 非委托 #include <iostream> #include <string> #include <list> using namespace std;class Subject; // 前向声明// 抽象观察者 class Observer { protected:string name;…

二手物品交易系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;商家管理&#xff0c;用户管理&#xff0c;商品管理&#xff0c;用户咨询管理 商家账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;商品管理&#xff0c;用…

荣耀笔记本IP地址查看方法详解:轻松掌握网络配置技巧

在数字化时代的浪潮中&#xff0c;笔记本电脑已经成为我们生活和工作中不可或缺的重要工具。对于荣耀笔记本用户而言&#xff0c;掌握基本的网络配置技巧显得尤为重要。其中&#xff0c;查看IP地址是连接网络、配置设备、排除故障等场景下的关键步骤。本文将详细介绍荣耀笔记本…