nouveau driver touchscreen pour la mini2440

46 views
Skip to first unread message

AleaJactaEst

unread,
Oct 11, 2012, 5:55:46 PM10/11/12
to concours-li...@googlegroups.com
Bonjour,

Je fais des tentatives pour refaire le driver touchscreen sur la mini2440.
Mais pour l'instant, je n'arrive pas à avoir les valeurs X & Y dans les interruption INT_TC ou INT_ADC.

Pour l'initialisation du driver :
writel( S3C2410_ADCCON_PRSCEN | S3C2410_ADCCON_PRSCVL(0xFF), ptr_memory_adc + S3C2410_ADCCON );
writel( 0xffff, ptr_memory_adc + S3C2410_ADCDLY );
writel( S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | S3C2410_ADCTSC_XY_PST(3) , ptr_memory_adc + S3C2410_ADCTSC );
request_irq( 80, handler_s3c2440_adc,  IRQF_SAMPLE_RANDOM,  THIS_MODULE->name,  THIS_MODULE->name);
request_irq( 79, handler_s3c2440_ts,  IRQF_SAMPLE_RANDOM,  THIS_MODULE->name,  THIS_MODULE->name);

Faut-il faire une commande spécifique quand on réception l'interruption 79 ?

@+
AleaJactaEst

AleaJactaEst

unread,
Oct 11, 2012, 6:27:45 PM10/11/12
to concours-li...@googlegroups.com
Bonjour,

Je viens enfin de résoudre mon problème.
Maintenant, je n'arrive plus a arrêter les interruption (il faut que je fasse une gestion suivant si on appuie ou pas sur l'écran)

@+
AleaJactaEst

Cyprien Laplace

unread,
Oct 12, 2012, 12:58:31 AM10/12/12
to concours-li...@googlegroups.com
Le 12/10/12 00:27, AleaJactaEst a écrit :
Bonjour,

De quelle interruption parles-tu ? TC ou ADC ?
Est-ce que tu déclenches une acquisition sur lecture ou manuellement ?

Et finalement, comment as-tu résolu ton problème ?
Après une interruption TC, Linux demande explicitement une conversion
avec le bit AUTO_PST et avec 0 dans XY_PST (+ PullUp disabled).

Cyprien

AleaJactaEst

unread,
Oct 12, 2012, 3:46:59 PM10/12/12
to concours-li...@googlegroups.com
Bonjour,
 
Le problème était dans la gestion des interruptions.
Quand je réceptionné une interruption, je relancé mal la gestion celle-ci.
 (les actions sont différentes suivant que l'on appuie ou pas sur l'écran)
 
Dans le cas de l'interruption INT_TC (79) [détection du changement d'état quand on appuie (ou pas) sur l'écran]
 si on appuie sur l’écran
    writel( readl( ptr_memory_adc + S3C2410_ADCCON )  | S3C2410_ADCCON_ENABLE_START ,  ptr_memory_adc + S3C2410_ADCCON ) ;
    writel( S3C2410_ADCTSC_AUTO_PST | S3C2410_ADCTSC_XY_PST (0) , ptr_memory_adc + S3C2410_ADCTSC );
  et sinon
    writel(WAIT4INT(0), ptr_memory_adc+S3C2410_ADCTSC);
 
Dans le cas de l'interruption INT_ADC (80) [se déclenche quand la conversion est terminée]
 si on appuie sur l’écran
    writel( readl( ptr_memory_adc + S3C2410_ADCCON )  | S3C2410_ADCCON_ENABLE_START ,  ptr_memory_adc + S3C2410_ADCCON ) ;
    writel( S3C2410_ADCTSC_AUTO_PST | S3C2410_ADCTSC_XY_PST (0) , ptr_memory_adc + S3C2410_ADCTSC );
 et sinon
    writel( WAIT4INT(0) , ptr_memory_adc + S3C2410_ADCTSC );
    
Remarque :
  #define WAIT4INT(x)  (((x)<<8) | \
             S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | \
             S3C2410_ADCTSC_XY_PST(3))
 
concernant l’initialisation des interruptions, les commandes envoyées précédemment sont correct.
(j'ai même essayé d'initialisation avec "writel(WAIT4INT(3), ptr_memory_adc+S3C2410_ADCTSC);", ... , ça marche aussi)

Pour l'instant, je n'ai pas encore affiché graphiquement le résultat (uniquement des messages de débogage), mais cela semble correct.

@+
AleaJactaEst

Cyprien Laplace

unread,
Oct 12, 2012, 4:09:23 PM10/12/12
to concours-li...@googlegroups.com
Le 12/10/12 21:46, AleaJactaEst a écrit :
Bien, tu as donc résolu tes problèmes d'interruptions :-)
Ne faudrait-il pas inverser les écritures dans ADCCON et ADCTSC ? Plutôt
écrire la configuration dans ADSTSC avant de déclencher l'acquisition
avec ADCCON ?
(je ne suis pas sur de la réponse, mais ça me semble plus logique)
Bonne continuation +

AleaJactaEst

unread,
Oct 12, 2012, 4:58:00 PM10/12/12
to concours-li...@googlegroups.com
Très bonne remarque, je n'avais pas fais attention à l'ordre d'exécution.
@+

AleaJactaEst

unread,
Oct 13, 2012, 6:32:39 AM10/13/12
to concours-li...@googlegroups.com
Bonjour,

Je viens de faire des tests en mode "manuel". (à savoir demander la conversion - attendre - puis lire le résultat dans le registre)
Premier constat, on n'arrive pas à détecter quand on appuie ou pas sur l'écran (sur les registres ADCDAT0 & ADCDAT1 - champ UPDOWN)

@+
AleaJactaEst

Cyprien Laplace

unread,
Oct 13, 2012, 7:19:00 AM10/13/12
to concours-li...@googlegroups.com
Le 13/10/12 12:32, AleaJactaEst a écrit :
de ce que j'ai compris de la doc, les champs UPDOWN ne sont mis à jour
que après un WAIT4INT...
donc entre chaque lecture, il faudrait refaire un wait4int :/

(pareil, je ne suis pas certain à 100% la doc n'est vraiment pas claire
la dessus)

XIE Enming

unread,
Nov 5, 2012, 6:15:34 PM11/5/12
to concours-li...@googlegroups.com
Bonjour
             Ou se trouve ces codes sources ?
             Merci

XIE Enming

unread,
Nov 5, 2012, 6:16:22 PM11/5/12
to concours-li...@googlegroups.com
Bonjour
            Quelle doc parlez vous?
            Merci

Cyprien LAPLACE

unread,
Nov 6, 2012, 12:05:21 AM11/6/12
to concours-li...@googlegroups.com

La doc officielle du processeur s3c2440. Elle est disponible sur le site du constructeur de la carte mini2440.

XIE Enming

unread,
Nov 6, 2012, 5:11:25 AM11/6/12
to concours-li...@googlegroups.com
merci  ca j'avais deja telecharge auparavant.
Reply all
Reply to author
Forward
0 new messages