|
#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"); |