⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 watchdog.c

📁 基于s3c44b0的rtc,watchdog,adc,ads的驱动程序
💻 C
字号:
#include <linux/config.h>#include <linux/utsname.h>#include <linux/kernel.h>#include <linux/major.h>#include <linux/string.h>#include <linux/fcntl.h>#include <linux/timer.h>#include <linux/sched.h>#include <linux/tty.h>#include <linux/module.h>#include <linux/init.h>#include <linux/miscdevice.h>#include <linux/delay.h>#include <linux/spinlock.h>#include <asm/mach/irq.h>#include <asm/hardware.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/system.h>#include <linux/poll.h>#include <asm/arch/io.h>#include "44b.h"#define DEVICE_NAME	"watchdog"#define MCLK 64000000void Test_WDTimer(void);void Feed_WDTimer(void);void Stop_WDTimer(void);void Stop_WDTimer(void)
{
    rWTCON = ((MCLK/1000000-1)<<8) | (3<<3) | (0);}void Feed_WDTimer(void)
{
    rWTCNT = 8448*2;}static void Watchdog_ISR(int irq,void* dev_id,struct pt_regs * regs){ 
    rI_ISPC = BIT_WDT;
}void Test_WDTimer(void)
{
    //rINTMSK = ~(BIT_GLOBAL | BIT_WDT);

    //rWTCON = ((MCLK/1000000-1)<<8) | (3<<3) | (1<<2);      rWTCON = ((MCLK/1000000-1)<<8) | (3<<3) | (1);
    rWTDAT = 8448*3;
    rWTCNT = 8448*3;
    rWTCON = rWTCON | (1<<5);  
}static int s3c44b0_wdg_open(struct inode *inode, struct file *filp){	//printk("Open successful\n");	return 0;}static int s3c44b0_wdg_release(struct inode *inode, struct file *filp){	//printk("Close successful\n");  	return 0;}static int s3c44b0_wdg_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg){	switch(cmd) 	{		case 0:			Test_WDTimer();				return 0;			case 1:			Feed_WDTimer();				return 0;			case 2:			Stop_WDTimer();				return 0;		        	default:                        printk("ERROR\n");    	}    	return 0;}static struct file_operations s3c44b0_fops = {  	open:	s3c44b0_wdg_open,	ioctl:	s3c44b0_wdg_ioctl,  	release:	s3c44b0_wdg_release,};int s3c44b0_wdg_init(void){	int ret;	ret = register_chrdev(251, DEVICE_NAME, &s3c44b0_fops);	if (ret < 0) {		printk(DEVICE_NAME " can't get major number\n");		return ret;	}	else 		printk("OK\n");		if (request_irq(15,Watchdog_ISR,0,"watchdog",NULL))
	{
   		printk(KERN_INFO"[FALLED: Cannot register Watchdog_Interrupt!]\n");
		return -EBUSY;
	}
	else
		printk("[OK]\n");	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -