[En-Nut-Discussion] NutGpio Api and Multidrive for AVR

Uwe Bonnes bon at elektron.ikp.physik.tu-darmstadt.de
Fri Sep 28 13:45:06 CEST 2012

>>>>> "Ole" == Ole Reinhardt <ole.reinhardt at embedded-it.de> writes:

    Ole> Hi Uwe, unfortunately I did not really understand the functionality
    Ole> of your enhanced GPIO API functions "NutGpioPinDrive()" and
    Ole> "NutGpioPinRelease()"

    Ole> Could you explaint them a little more in detail?

    >> The last NutGpioPinSetHig makes sure the AVR pullup turns on the
    >> internal pullup. For non-AVR architectures, NutGpioPinSetLow(...)
    >> and NutGpioPinDrive(...) are empty function in most cases

    Ole> Is this just a typo or do you really mean that NutGpioPinSetLow()
    Ole> is an empty function in most cases? If so, why?

    Ole> I just have concerns that we might have different understanding of
    Ole> what the function shall do on different architectures and will just
    Ole> prevent to get some incompatibilities there.

As explained, for AVR GPIO port setup and usage are not seperated in the
registers. So there is no (easy(*)) way on AVR to make the sequence

GpioPinSetLow(PORT, PIN)
GpioPinSetHigh(PORT, PIN)

do sbi(DDR(PORT), PIN), cbi(PORT, PIN), sbi(PORT, PIN)


GpioPinSetLow(PORT, PIN)
GpioPinSetHigh(PORT, PIN)

do sbi(DDR(PORT), PIN), cbi(PORT, PIN), cbi(DDR(PORT), PIN) and eventual 
additional sbi( PORT, PIN) to activate the PULLUP again.

So I require now to write the sequence like
GpioPinSetLow(PORT, PIN)
GpioPinSetDrive(PORT, PIN)
GpioPinSetRelease(PORT, PIN)
GpioPinSetHigh(PORT, PIN)
if the code should be portable to AVR too, like in the bitbanging one-wire
bus driver dev/owibus_bbif.c

For any sensible architecture the new commands are defined in the header as
#define GpioPinSetDrive(PORT, PIN)
#define GpioPinSetRelease(PORT, PIN)
so they evaluate empty.

(*) We could carry shadow register to hold the configuration we set up, but
I think that is incredible overhead and memory hog. So the two new commands
are a fair price we pay for compatibility on AVR


Uwe Bonnes                bon at elektron.ikp.physik.tu-darmstadt.de

Institut fuer Kernphysik  Schlossgartenstrasse 9  64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------

More information about the En-Nut-Discussion mailing list