1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| #include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/gpio.h>
#include <linux/mutex.h>
#include <linux/spinlock.h>
#define MXC_INT_EPIT1 88
#define TAILLE 10000
// Sortie sur GPIO_0
#define GPIO_OUT 32
//Handler
static irqreturn_t gpio_handler(int irq, void * ident)
{
int i;
static int tab[TAILLE];
i=0;
gpio_set_value(GPIO_OUT, 1);
tab[0] = 1;
for(i=1;i<TAILLE;i++)
{
tab[i] = tab[i-1] * i;
}
gpio_set_value(GPIO_OUT, 0);
return IRQ_HANDLED;
}
//Module Init
static int __init gpio_init (void)
{
int err;
//allocation memoire pour le GPIO_OUT
if ((err = gpio_request(GPIO_OUT, THIS_MODULE->name)) != 0)
return err;
//direction GPIO_OUT : Output
if ((err = gpio_direction_output(GPIO_OUT,1)) != 0)
{
gpio_free(GPIO_OUT);
return err;
}
if ((err = request_irq(MXC_INT_EPIT1, gpio_handler, IRQF_SHARED, THIS_MODULE->name, THIS_MODULE->name)) != 0)
{
gpio_free(GPIO_OUT);
return err;
}
return 0;
}
//Module Exit
static void __exit gpio_exit (void)
{
free_irq(MXC_INT_EPIT1, THIS_MODULE->name);
gpio_free(GPIO_OUT); //On libere la GPIO_OUT
}
module_init(gpio_init);
module_exit(gpio_exit);
MODULE_LICENSE("GPL"); |