Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/08/2013, à 14:34

Cartman_94

Aide comment récupérer une Interruption sur un Linux embarqué

Bonjour a tous,

Je développe sur une carte (emtrion dimm mx6q) qui utilise un Linux embarqué. J'ai installé une virtual machine avec ubuntu pour simuler l'environnement de développement de la carte.
Sur la carte j'ai activé une interruption (EPIT : Enhanced Periodic Interrupt Timer) qui se déclenche toute les 500µs.

je lance dans un terminal cat /proc/interrupts  pour voir si l'interruption est activée :

           CPU0     CPU1   CPU2   CPU3
 88:     11081995       0       0       0       GIC  epit

De ce côté, pas de problème tous est initialisé correctement.

Je souhaite par la suite exécuter un bout de code a chaque front montant de mon interruption.
Pour cela je crée un module qui sur chaque front de l'interruption exécutera une tache (dans mon cas il passe une IO  a 1 puis à 0)

#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/gpio.h>

#define MXC_INT_EPIT1 88  //Interruption EPIT

#define TAILLE 25000

// Sortie sur GPIO_0 
#define GPIO_OUT 32


	//Handler 
static irqreturn_t gpio_handler(int irq, void * ident)
{	
	
	gpio_set_value(GPIO_OUT, 1);
	
        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");

Pour info GPIO_OUT est une sortie de ma carte que j'observe a l'oscilloscope.

Lorsque je lance le module sur ma carte, sa me dit :

Error: could not insert module irq_epit.ko: Device or resource busy

Comment puis je me servir de cette interruption avec mon module ?

Merci d'avance

Hors ligne

#2 Le 21/08/2013, à 09:46

compte supprimé

Re : Aide comment récupérer une Interruption sur un Linux embarqué

Que renvoit dmesg juste après que tu ai lancé le module ?