Maison php教程 PHP开发 Implémentation d'un driver de clavier pour un système Linux embarqué (1) (2)

Implémentation d'un driver de clavier pour un système Linux embarqué (1) (2)

Dec 23, 2016 pm 02:03 PM

Partie initialisation. Cette partie comprend l'initialisation sur la couche matérielle et la couche logicielle. Dans cet exemple, vous devez d'abord configurer le circuit matriciel et les ports GPIO utilisés par la puce SN74hc164 afin que le CPU puisse les contrôler et y accéder. Afin de configurer un port GPIO comme source d'entrée, de sortie ou d'interruption, vous devez définir la valeur correcte dans le registre de contrôle GPIO correspondant. La valeur spécifique peut être obtenue en consultant le manuel de la carte de développement S3C2410. Par exemple, afin de définir GPB1 comme borne d'entrée du SN74hc164, deux bits 2 et 3 dans le mot de contrôle GPBCON doivent être définis sur 01 binaire. Afin de définir GPG6 comme source d'interruption de saut basse tension, deux bits 12 et 13 dans GPGCON doit être défini sur le bit binaire 10. Après avoir terminé l'opération d'initialisation matérielle, c'est l'initialisation sur la couche logicielle. Tout d'abord, enregistrez la fonction de traitement des interruptions du clavier sur le système, puis configurez une structure de minuterie de sorte que lorsque l'interruption se produit, elle soit suspendue dans la file d'attente des minuteries du noyau. La minuterie déclenchera l'opération d'analyse du clavier. Enfin, les 16 colonnes du circuit matriciel sont mises à zéro via SN74hc164.

Partie traitement des interruptions. Comme mentionné précédemment, cette partie du logiciel doit scanner le clavier spécial, déterminer quelle touche est enfoncée, obtenir un code d'analyse stable, puis appeler la fonction d'exportation du noyau handle_scancode. Dans cette application, la disposition du clavier spécial est similaire à la disposition du clavier standard du PC, nous utilisons donc directement le code de numérisation système de la touche correspondante du clavier du PC comme code de numérisation de chaque touche de notre clavier spécial, et en même temps, nous utilisons le pilote du clavier du PC. La fonction de conversion pckbd_translate du code scan en code clé est utilisée comme notre fonction kbd_translate.

L'algorithme permettant de déterminer quelle touche est enfoncée est le suivant. Lorsque l'interruption survient, nous pouvons déjà déterminer à quelle ligne se trouve la touche enfoncée en fonction du numéro d'interruption, et nous devons également déterminer à quelle colonne se trouve la touche enfoncée. À cette fin, nous envoyons d'abord un signal CLR aux deux puces SN74hc164 connectées en série, l'effaçons, puis envoyons 16 1, de sorte que les colonnes du clavier spécial soient toutes hautes à ce moment-là, ce que nous lisons sur la ligne. les ports du clavier sont tous à fort potentiel. Sous 16 impulsions d'horloge, 1 0 et 15 1 sont envoyés à la puce SN74hc164, de sorte que 0 n'apparaisse qu'une seule fois dans chaque colonne, et en même temps, le port de la rangée du clavier est scanné. Lorsque la colonne de la touche enfoncée est mise à 0, la ligne où elle se trouve indiquera un niveau bas. En utilisant cette « méthode walk 0 », nous pouvons déterminer quelle touche du clavier a été enfoncée. Mais ce simple algorithme de balayage ne suffit pas, car dans ce type de clavier à balayage matriciel, chaque fois qu'une touche est enfoncée et levée, il y aura une gigue de bavure de 10 à 20 ms (la durée de cette période est déterminée par les caractéristiques matérielles). , comme le montre la figure 2, donc afin d'obtenir des informations de touche stables, il est nécessaire de trouver un moyen de supprimer cette instabilité pour éviter de confondre la pression d'une touche de l'utilisateur avec plusieurs pressions de touche. Une méthode courante d'ébavurage consiste à ne pas scanner le clavier immédiatement lorsqu'une interruption du clavier arrive, mais à attendre un certain temps, puis à scanner le clavier après avoir ignoré la gigue de bavure. Le pseudo-code est le suivant :

. Attendez un moment et évitez le gigue ;

Scannez le clavier ;

si aucune touche n'est enfoncée sur le clavier

Fin et revenez

si un ; la touche du clavier est enfoncée

attendez un moment puis vérifiez si la même touche est toujours enfoncée

si la même touche est toujours enfoncée

Renvoyer le scan de lecture ; code;

else

Retourner directement;

Cette solution est certainement réalisable, mais elle utilise la méthode d'attente occupée pour supprimer les bavures pendant la période d'attente chargée. faire tout travail utile. Il s'agit d'un gaspillage luxueux pour les systèmes Linux embarqués dotés de ressources informatiques limitées. Dans cette application, nous avons conçu une solution d'ébavurage adaptée aux systèmes embarqués avec de bons résultats.

Étant donné que le noyau Linux fournit une file d'attente de minuterie, nous pouvons utiliser ce mécanisme pour éviter les attentes occupées et améliorer les performances du système. Lorsqu'une touche du clavier est enfoncée, le gestionnaire d'interruption du clavier ferme d'abord la source d'interruption, passe en mode d'interrogation et se termine après avoir suspendu un objet timerlist dans la file d'attente du minuteur. La minuterie connectée au noyau est déclenchée à temps et la fonction qu'elle déclenche effectue les tâches suivantes : analyse d'abord toutes les touches de l'ensemble du clavier et enregistre les résultats de l'analyse dans une variable de tableau statique à 2 dimensions snap_shot_matrix[16 ][4 ]. Cette variable décrit l'état d'appui de toutes les touches du clavier à ce moment de ce balayage du clavier. Si une touche n'est pas enfoncée, c'est-à-dire qu'elle est dans un état relâché, alors la valeur correspondante dans snap_shot_matrix est définie sur 0. Si une touche est enfoncée, alors la valeur correspondante dans snap_shot_matrix est incrémentée de 1. Si Si la valeur est supérieure à un nombre prédéfini après avoir augmenté de 1, nous pouvons la considérer comme une valeur stable et définir la valeur dans les coordonnées correspondantes d'une autre variable de tableau à 2 dimensions current_matrix d'une taille de 16*4. à 1, sinon réglez-le à 0 . Cette variable décrit la valeur stable des frappes actuelles sur le clavier. C'est-à-dire que nous traitons d'abord les données échantillonnées obtenues lors de cette analyse et les enregistrons dans snap_shot_matrix, puis les filtrons pour obtenir la current_matrix en fonction de la valeur de cette variable. Grâce à ce processus, nous effectuons un traitement d'ébavurage. Après avoir obtenu la valeur stable current_matrix de cette analyse, nous la comparons avec la valeur stable previous_matrix obtenue la dernière fois pour déterminer si les conditions des touches du clavier ont changé à ce moment par rapport à la dernière analyse, et si les conditions du clavier à ce moment ont changé. modifié si une touche est enfoncée. S'il s'avère qu'aucune touche du clavier n'est enfoncée, activez l'interruption du clavier et revenez en mode interruption. Si une touche est enfoncée sur le clavier et qu'elle est différente de la dernière touche enfoncée numérisée, nous appelons immédiatement la fonction de traitement des touches process_key, qui appellera la fonction de niveau supérieur handle_scancode dans le pilote du clavier. Si la touche enfoncée sur le clavier est la touche enfoncée la dernière fois, nous incrémenterons un compteur. Lorsque le compteur atteint une certaine valeur spécifiée, nous démarrons la fonction dite de répétition automatique, c'est-à-dire que l'utilisateur continue d'appuyer sur une certaine touche. Le pilote génère automatiquement une saisie au clavier à plusieurs reprises. Ce compteur est mis à 0 lorsque la touche enfoncée change. Mais tant qu'il y a encore des touches sur le clavier qui sont enfoncées, nous copions la valeur stable du clavier actuellement lue current_matrix dans la previous_matrix et suspendons à nouveau l'objet timer décrit précédemment dans la file d'attente du minuteur du noyau. Après un certain temps, puis analysons l'intégralité. appuyez à nouveau sur le clavier jusqu'à ce qu'aucune touche du clavier ne soit enfoncée.

4 Conclusion

Avec les progrès de la société de l'information et de la technologie informatique et matérielle, la conception et l'application des produits d'information embarqués se sont développées rapidement, et il est nécessaire d'ajouter des fonctionnalités spéciales à vos produits intégrés. Système Linux. Le besoin de pilotes de clavier devient également de plus en plus courant. Après avoir présenté le cadre général du pilote de clavier sous Linux, cet article prend comme exemple un clavier spécial sur la carte de développement S3C2410 pour se concentrer sur la description du travail qui doit être effectué lors de l'écriture d'un pilote pour un clavier spécial dans un environnement Linux embarqué. , fournissant une base pour un développement similaire. fournit une idée et une référence.


(T114)

Ce qui précède est le contenu de l'implémentation du pilote de clavier (1) (2) d'un système Linux embarqué. Veuillez prêter attention à plus. contenu associé. Site Web chinois PHP (www.php.cn) !


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Utiliser le Gestionnaire des tâches sous Linux Utiliser le Gestionnaire des tâches sous Linux Aug 15, 2024 am 07:30 AM

Il existe de nombreuses questions que les débutants sous Linux posent souvent : « Linux a-t-il un gestionnaire de tâches ? », « Comment ouvrir le gestionnaire de tâches sous Linux ? » Les utilisateurs de Windows savent que le gestionnaire de tâches est très utile. Vous pouvez ouvrir le Gestionnaire des tâches en appuyant sur Ctrl+Alt+Suppr sous Windows. Ce gestionnaire de tâches vous montre tous les processus en cours d'exécution et la mémoire qu'ils consomment, et vous pouvez sélectionner et tuer un processus à partir du programme gestionnaire de tâches. Lorsque vous utiliserez Linux pour la première fois, vous rechercherez également quelque chose qui équivaut à un gestionnaire de tâches sous Linux. Un expert Linux préfère utiliser la ligne de commande pour rechercher les processus, la consommation de mémoire, etc., mais ce n'est pas obligatoire

Résoudre le problème de l'affichage tronqué des graphiques et des diagrammes sur le serveur de surveillance chinois Zabbix Résoudre le problème de l'affichage tronqué des graphiques et des diagrammes sur le serveur de surveillance chinois Zabbix Jul 31, 2024 pm 02:10 PM

La prise en charge du chinois par Zabbix n'est pas très bonne, mais parfois nous choisissons toujours le chinois à des fins de gestion. Dans l'interface Web surveillée par Zabbix, le chinois sous l'icône graphique affichera des petits carrés. Ceci est incorrect et nécessite le téléchargement de polices. Par exemple, "Microsoft Yahei", "Microsoft Yahei.ttf" est nommé "msyh.ttf", téléchargez la police téléchargée dans /zabbix/fonts/fonts et modifiez les deux caractères dans /zabbix/include/defines.inc.php. fichier dans definition('ZBX_GRAPH_FONT_NAME','DejaVuSans');define('ZBX_FONT_NAME'

7 façons de vous aider à vérifier la date d'enregistrement des utilisateurs Linux 7 façons de vous aider à vérifier la date d'enregistrement des utilisateurs Linux Aug 24, 2024 am 07:31 AM

Saviez-vous comment vérifier la date de création d'un compte sur un système Linux ? Si vous le savez, que pouvez-vous faire ? Avez-vous réussi ? Si oui, comment faire ? Fondamentalement, les systèmes Linux ne suivent pas ces informations, alors quelles sont les autres manières d'obtenir ces informations ? Vous vous demandez peut-être pourquoi je vérifie cela ? Oui, il existe des situations dans lesquelles vous devrez peut-être consulter ces informations et elles vous seront utiles à ce moment-là. Vous pouvez utiliser les 7 méthodes suivantes pour vérifier. Utilisez /var/log/secure Utilisez l'outil aureport Utilisez .bash_logout Utilisez la commande chage Utilisez la commande useradd Utilisez la commande passwd Utilisez la dernière commande Méthode 1 : Utilisez /var/l

Apprenez à ajouter des polices à Fedora en 5 minutes Apprenez à ajouter des polices à Fedora en 5 minutes Jul 23, 2024 am 09:45 AM

Installation à l'échelle du système Si vous installez une police à l'échelle du système, elle sera disponible pour tous les utilisateurs. La meilleure façon de procéder est d'utiliser les packages RPM des référentiels de logiciels officiels. Avant de commencer, ouvrez l'outil "Logiciel" dans Fedora Workstation, ou d'autres outils utilisant le référentiel officiel. Sélectionnez la catégorie « Modules complémentaires » dans la barre de sélection. Sélectionnez ensuite « Polices » dans la catégorie. Vous verrez les polices disponibles similaires à celle de la capture d'écran ci-dessous : Lorsque vous sélectionnez une police, certains détails apparaîtront. Selon plusieurs scénarios, vous pourrez peut-être prévisualiser un exemple de texte pour la police. Cliquez sur le bouton "Installer" pour l'ajouter à votre système. En fonction de la vitesse du système et de la bande passante du réseau, ce processus peut prendre un certain temps.

Que dois-je faire si les polices WPS manquantes sous le système Linux entraînent une déformation du fichier ? Que dois-je faire si les polices WPS manquantes sous le système Linux entraînent une déformation du fichier ? Jul 31, 2024 am 12:41 AM

1. Recherchez les polices wingdings, wingdings2, wingdings3, Webdings et MTExtra sur Internet 2. Entrez dans le dossier principal, appuyez sur Ctrl+h (afficher les fichiers cachés) et vérifiez s'il existe un dossier .fonts. Sinon, créez. 3. Copiez les polices téléchargées telles que wingdings, wingdings2, wingdings3, Webdings et MTExtra dans le dossier .fonts du dossier principal. Ensuite, démarrez wps pour voir s'il existe toujours une boîte de dialogue de rappel « Police manquante dans le système ». sinon, juste du succès Notes : wingdings, wingdin

Installation et configuration de Centos 7 Serveur de synchronisation de l'heure réseau NTP Installation et configuration de Centos 7 Serveur de synchronisation de l'heure réseau NTP Aug 05, 2024 pm 10:35 PM

Environnement expérimental : OS : LinuxCentos7.4x86_641. Affichez le fuseau horaire actuel du serveur, répertoriez le fuseau horaire et définissez le fuseau horaire (s'il s'agit déjà du fuseau horaire correct, veuillez l'ignorer) : #timedatectl#timedatectllist-timezones#timedatectlset-timezoneAsia. /Shanghai2. Compréhension des concepts de fuseau horaire : GMT, UTC, CST, DSTUTC : La terre entière est divisée en vingt-quatre fuseaux horaires. Dans les situations de communication radio internationale, dans un souci d'unification, une heure unifiée est utilisée, appelée Temps coordonné universel (UTC : UniversalTim).

Comment connecter deux hôtes Ubuntu à Internet à l'aide d'un seul câble réseau Comment connecter deux hôtes Ubuntu à Internet à l'aide d'un seul câble réseau Aug 07, 2024 pm 01:39 PM

Comment utiliser un câble réseau pour connecter deux hôtes Ubuntu à Internet 1. Préparez l'hôte A : ubuntu16.04 et l'hôte B : ubuntu16.042. L'hôte A possède deux cartes réseau, l'une est connectée au réseau externe et l'autre est connectée. pour accueillir B. Utilisez la commande iwconfig pour afficher toutes les cartes réseau sur l'hôte. Comme indiqué ci-dessus, les cartes réseau sur l'hôte A (ordinateur portable) de l'auteur sont : wlp2s0 : Il s'agit d'une carte réseau sans fil. enp1s0 : carte réseau filaire, la carte réseau connectée à l'hôte B. Le reste n’a rien à voir avec nous, inutile de s’en soucier. 3. Configurez l'adresse IP statique de A. Modifiez le fichier #vim/etc/network/interfaces pour configurer une adresse IP statique pour l'interface enp1s0, comme indiqué ci-dessous (où #==========

lancer! Exécuter DOS sur Raspberry Pi lancer! Exécuter DOS sur Raspberry Pi Jul 19, 2024 pm 05:23 PM

Différentes architectures de processeur signifient qu'exécuter DOS sur le Raspberry Pi n'est pas facile, mais ce n'est pas très compliqué. FreeDOS est peut-être familier à tout le monde. Il s'agit d'un système d'exploitation complet, gratuit et bien compatible pour DOS. Il peut exécuter certains anciens jeux DOS ou logiciels commerciaux, et peut également développer des applications embarquées. Tant que le programme peut fonctionner sur MS-DOS, il peut fonctionner sur FreeDOS. En tant qu'initiateur et coordinateur du projet FreeDOS, de nombreux utilisateurs me poseront des questions en tant qu'initié. La question qu'on me pose le plus souvent est : « FreeDOS peut-il fonctionner sur un Raspberry Pi ? » Cette question n'est pas surprenante. Après tout, Linux fonctionne très bien sur le Raspberry Pi

See all articles