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

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

Re: [avr-gcc-list] simple macro to dig w/ ports


From: Colin Wall
Subject: Re: [avr-gcc-list] simple macro to dig w/ ports
Date: Tue, 28 Mar 2006 11:38:58 +1200

> ----- Message from Jerome Kerdreux <address@hidden> on Sat, 25 Mar
> 2006 21:06:50 +0100 -----
> 
> To:
> 
> address@hidden
> 
> Subject:
> 
> Re: [avr-gcc-list] simple macro to dig w/ ports
> 
> 
> 
> Dave Hansen give me a better solution I think, 
> here a cut / paste of his anwser
> 
> --- begin included file ---
> #define BIT(p,b)                (b)
> 
> #define PORT(p,b)               (PORT ## p)
> #define PIN(p,b)                (PIN ## p)
> #define DDR(p,b)                (DDR ## p)
> 
> #define MASK(b)                 (1 << (b))
> 
> #define Set_Port_Bit(p,b)       ((p) |= MASK(b))
> #define Clr_Port_Bit(p,b)       ((p) &= ~MASK(b))
> #define Tgl_Port_Bit(p,b)       ((p) ^= MASK(b))
> 
> #define Get_Port_Bit(p,b)       (((p) & MASK(b)) != 0)
> 
> #define Set_Output(io)          Set_Port_Bit(PORT(io),BIT(io))
> #define Reset_Output(io)        Clr_Port_Bit(PORT(io),BIT(io))
> #define Toggle_Output(io)       Tgl_Port_Bit(PORT(io),BIT(io))
> #define Get_Output(io)          Get_Port_Bit(PORT(io),BIT(io))
> 
> #define Get_Input(io)           Get_Port_Bit(PIN(io),BIT(io))
> 
> #define Tristate(io)            Clr_Port_Bit(DDR(io),BIT(io))
> #define Drive(io)               Set_Port_Bit(DDR(io),BIT(io))
> 
> --- end included file ---
> 
> 
> A little example:
> 
> #define LED  B,6
> 
> Set_Ouput(LED);
> 
> I tweaked this a bit, to rename some stuff, but it's work fine,
> and it's easy to use. 
> 
> I guess Dave win the contest ;) 

Absolutely!
I guess I was about half way there with my attempt, but I was struggling 
with how to combine the port and pin data into one symbol. Thanks to Dave 
Hansen, and thank you for putting it on the list.

Colin

###########################################################################
This e-mail is confidential and may contain information subject to legal 
privilege.  If you are not the intended recipient please advise us of our
error by return e-mail then delete this e-mail and any attached files.  
You may not copy, disclose or use the contents in any way.  

The views expressed in this e-mail may not be those of Gallagher Group 
Ltd or subsidiary companies thereof.
###########################################################################




reply via email to

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