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? –
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 –