avr-gcc-list
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [avr-gcc-list] Question about gcc preprocessing and port/pin assignm


From: Dave Hansen
Subject: Re: [avr-gcc-list] Question about gcc preprocessing and port/pin assignments
Date: Mon, 06 Dec 2004 16:55:49 -0500

From: James Washer <address@hidden>
[...]
Bingo... with Dave (and others help).. I know have the following, which allows me to work with PORTx, PINx, and DDRx. This allows me to change the assignment of a pin in one place in the code, and have the DDRx change along with it.. Cool

 - jim


#include <avr/io.h>

#define DATA1         D, 7
#define DATA2         C, 3
#define DATA3         B, 3

#define PINDEF_PORT(a,b)        (PORT##a)
#define DDR(a,b)        (DDR##a)
#define PINDEF_PIN(a,b) (b)

You might simplify some of your macros if you change this one to

  #define PINDEF_PIN(a,b)  (1<<(b))


//Set a pin
#define SETPIN(pindef)  PINDEF_PORT(pindef) |= (1 << PINDEF_PIN(pindef))

Then this one becomes

  #define SETPIN(pindef)    PINDEF_PORT(pindef) |= PINDEF_PIN(pindef)


//Clear a pin
#define CLRPIN(pindef)  PINDEF_PORT(pindef) &= ~(1 << PINDEF_PIN(pindef))

And this one

  #define CLRPIN(pindef)    PINDEF_PORT(pindef) &= ~PINDEF_PIN(pindef)

and so forth...

[...]
//Read the value of a pin
#define GETPIN(pindef)  PINDEF_PORT(pindef) & (1 << PINDEF_PIN(pindef))

You'll probably be disappointed with this one.  Try

  #define PINDEF_PINPORT(pindef)   (PIN ## a)
#define GETPIN(pindef) PINDEF_PINPORT(pindef) & (1 << PINDEF_PIN(pindef))

Regards,
  -=Dave




reply via email to

[Prev in Thread] Current Thread [Next in Thread]