#include <linux/fs.h> #include <linux/module.h> #include <linux/errno.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/cdev.h> #include <linux/ioport.h> #include <linux/pci.h> #include <asm/uaccess.h> #include <asm/io.h> static volatile unsigned long * gpfcon; // = (volatile unsigned long *)0x56000050; static volatile unsigned long * gpfdat; // = (volatile unsigned long *)0x56000054; static struct timer_list led_timer; void led_timer_function(unsigned long data) { static int cur_val = 0; if (cur_val) { cur_val = 0; *gpfdat &= ~(1<<4); } else { cur_val = 1; *gpfdat |= (1<<4); } mod_timer(&led_timer, jiffies+50); /* 50* 10ms = 500ms = 0.5s */ } int led_timer_init(void) { gpfcon = ioremap(0x56000050, 8); /* 得到虚拟地址 */ gpfdat = gpfcon + 1; *gpfcon &= ~(0x3 << (4*2)); *gpfcon |= (0x1 << (4*2));; init_timer(&led_timer); led_timer.function = led_timer_function; led_timer.expires = jiffies+50; add_timer(&led_timer); } void led_timer_exit(void) { del_timer(&led_timer); iounmap(gpfcon); } module_init(led_timer_init); module_exit(led_timer_exit); MODULE_LICENSE("GPL"); |