Comment obtenir la valeur du port du microcontrôleur ARM dans une variable 32 bits. J'utilise le microcontrôleur LPC2378.Comment lire la valeur du port GPIO d'un microcontrôleur ARM?
Répondre
Vous devez accéder aux registres GPIO comme vous le feriez pour tout autre registre de fonction spécial de la puce. Les LPC2378 docs montrent ces détails:
#define GPIO_BASE 0xE0028000
#define IOPIN0 (GPIO_BASE + 0x00) // Port 0 value
#define IOSET0 (GPIO_BASE + 0x04) // Port 0 set
#define IODIR0 (GPIO_BASE + 0x08) // Port 0 direction
#define IOCLR0 (GPIO_BASE + 0x0C) // Port 0 clear
#define IOPIN1 (GPIO_BASE + 0x10) // Port 1 value
#define IOSET1 (GPIO_BASE + 0x14) // Port 1 set
#define IODIR1 (GPIO_BASE + 0x18) // Port 1 direction
#define IOCLR1 (GPIO_BASE + 0x1C) // Port 1 clear
J'aime utiliser cette macro pour accéder aux registres de configuration de mémoire:
#define mmioReg(a) (*(volatile unsigned long *)(a))
Ensuite, le code pour lire le port ressemble à ceci:
unsigned long port0 = mmioReg(IOPIN0); // Read port 0
unsigned long port1 = mmioReg(IOPIN1); // Read port 1
La même macro fonctionne pour accéder aux registres set/clear/direction. Exemples:
mmioReg(IOSET1) = (1UL << 3); // set bit 3 of port 1
mmioReg(IOCLR0) = (1UL << 2); // clear bit 2 of port 0
mmioReg(IODIR0) |= (1UL << 4); // make bit 4 of port 0 an output
mmioReg(IODIR1) &= ~(1UL << 7); // make bit 7 of port 1 an input
Dans un système réel, je serais normalement écrire des macros ou fonctions pour ces opérations, de réduire les nombres magiques.
Il y a probablement un fichier d'en-tête disponible pour le LPC2378 (fourni par le fabricant de puces, NXP, ou peut-être par la compilatrice) cela fournit tout cela pour vous. –
Je ne comprends pas cette partie: (* (volatile unsigned long *) (a)). Sil te plait aide moi. –
@AkhilPOommen, qu'est-ce que vous ne comprenez pas? –
- 1. Étapes à suivre pour lire les données du port du microcontrôleur ARM
- 2. Comment tirer profit de la 15ème broche du port 32bit dans ARM?
- 3. Utilisation de Printf pour afficher sur le port série d'un microcontrôleur ARM
- 4. Obtention de la valeur du PC dans l'assemblage ARM
- 5. Comment lire du texte à partir d'un port série?
- 6. Comment lire et écrire à partir du port série
- 7. Comment lire le port COM d'un périphérique?
- 8. comment lire dynamiquement la valeur du nœud xml?
- 9. Comment lire le port Http dans C#?
- 10. Comment démarrer la programmation d'un microcontrôleur?
- 11. Comment lire la valeur de XmlNode
- 12. Recommandation du kit de microcontrôleur 8051?
- 13. Goupilles GPIO Gestion des interruptions dans linux (bras)
- 14. ARM assemblage registre valeur d'impression en décimal
- 15. Meilleur microcontrôleur pour .net?
- 16. Lire le fichier à partir du port série en Java
- 17. Comment lire la clé de Registre Valeur
- 18. Comment écrire sur la broche GPIO de la puce CM108 sous Linux?
- 19. Sockets - Port IPEndpoint (valeur maximale)
- 20. Ant regexp. Lire la valeur de l'expression correspondante
- 21. jquery table lire la valeur du champ de saisie
- 22. Thermomètre utilisant un microcontrôleur IC1616 et un bras
- 23. Valeur maximum du backlog pour le port Windows
- 24. GetQueuedCompletionStatus arrête de lire un port série
- 25. ARM Cortex-A8: Comment mesurer l'utilisation du cache?
- 26. Comment tracer du code en utilisant ARM ELF?
- 27. comment lire la valeur zéro en utilisant la fonction parseInt
- 28. PIC 16F684 Microcontrôleur Interupt Handling
- 29. lire la valeur de l'horloge système?
- 30. Lire la valeur d'un attribut d'une méthode
Quel périphérique utilisez-vous? Les GPIO ne font pas partie du noyau ARM, ils sont accessibles via un autre périphérique système sur puce. –
Les fichiers d'en-tête fournis avec votre compilateur contiendront des déclarations pour tous les registres du microcontrôleur et les bits de ces registres. Reportez-vous au manuel de référence pour savoir ce que font tous les registres et les bits, et regardez quelques exemples. Les deux peuvent être trouvés ici: http://www.keil.com/dd/chip/4153.htm –