En LPC2378 (comme l'autre famille de microcontrôleurs LPC2xxxx), ports E/S sont dans la mémoire système, vous devez donc déclarer certaines variables comme ceci:
#define DALLAS_PIN (*(volatile unsigned long int *)(0xE0028000)) /* Port 0 data register */
#define DALLAS_DDR (*(volatile unsigned long int *)(0xE0028008)) /* Port 0 data direction reg */
#define DALLAS_PIN (1<<15)
S'il vous plaît noter que 0xE0028000 est l'adresse le registre de données de port0 et 0xE0028008 est l'adresse de registre de direction de données pour port0. Vous devez modifier cela en fonction du port et du bit utilisé dans votre application. Après cela, dans votre fonction de code, le code ou des macros pour écrire 1, écrire 0 et lire doit être quelque chose comme ceci:
#define set_dqout() (DALLAS_DDR&=~DALLAS_PIN) /* Let the pull-up force one, putting I/O pin in input mode */
#define reset_dqout() (DALLAS_DDR|=DALLAS_PIN,DALLAS_PORT&=~DALLAS_PIN) /* force zero putting the I/O in output mode and writing zero on it */
#define read_dqin() (DALLAS_DDR&=~DALLAS_PIN,((DALLAS_PORT & DALLAS_PIN)!= 0)) /* put i/o in input mode and test the state of the i/o pin */
J'espère que cela peut aider.
Cordialement!
Une autre question - Comment obtenir microcontrôleur ARM valeur du port dans une variable de 32 bits dans la première place? –
bien c'est quelque chose qui est spécifique au processeur. Un x86 utiliserait un assemblage ou un compilateur intrinsèque pour exécuter une instruction 'in' ou' out' pour lire et écrire des ports d'E/S. –
Sur un ARM, le port d'E/S est probablement juste mappé à un emplacement de mémoire particulier - "registres mappés en mémoire". Bonne lecture des manuels du LPC2378. Il existe probablement un fichier d'en-tête C qui fournit des noms pour tous ces registres. –