>
> Oh...while we're on the subject, there's one more significant reason
> the set/clear registers are helpful even if you're not worried about
> multi-threaded operation:  They're *FAST*
>

I did notice that it seemed to be that way from your description. But the
way I read the TRM. TO me it seems that the SETDATA(direction) registers
actually write to DATAOUT. did I read that wrong ?

On Thu, Sep 8, 2016 at 1:51 PM, Charles Steinkuehler <
[email protected]> wrote:

> On 9/8/2016 3:35 PM, Charles Steinkuehler wrote:
> > On 9/8/2016 12:41 PM, William Hermans wrote:
> >>
> >> It has long been programing technique to use DATAOUT |= BITx to set a
> register
> >> bit DATAOUT &= (~BITx) to clear a register bit, or something like
> if(DATAOUT &
> >> BITx){} or if((DATAOUT &BITx) == 0 or 1) to read a bit from a register.
> >
> > Yes, it has.  But those short-hand snippits of C code are hiding an
> > implicit read-modify-write cycle:
> >
> > DATAOUT |= BITx
> >
> > ...turns into:
> >
> > Read  : <temp> = DATAOUT
> > Modify: <temp> = <temp> | BITx
> > Write : DATAOUT = <temp>
> >
> > ...where <temp> is probably a CPU register (unless your C compiler is
> > _really_ bad!).  But if you use the set/clear registers it's just:
> >
> > Write : SETDATAOUT = BITx
>
> Oh...while we're on the subject, there's one more significant reason
> the set/clear registers are helpful even if you're not worried about
> multi-threaded operation:  They're *FAST*
>
> The ARM core on the BBB is running at 1 GHz, but the I/O is only
> running at about 100 MHz.  So that simple DATAOUT |= BITx stalls the
> CPU until the system can provide the current value of DATAOUT to the
> processor core, which likely takes a couple hundred nanoseconds (based
> on the time it takes for the PRU to read a GPIO register).
>
> The write, however, is very fast (for both the set/clear case and for
> writing directly to DATAOUT).  Writes are posted and the ARM has weak
> memory ordering, so as long as you're not saturating the on-chip
> interconnect fabric, the write will appear to complete instantly, the
> ARM core will carry on executing instructions, and about 100 nS later
> the GPIO register will update with the new value once the write
> transaction has worked it's way through the on-chip interconnect fabric.
>
> --
> Charles Steinkuehler
> [email protected]
>
> --
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to the Google Groups
> "BeagleBoard" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/beagleboard/66e45786-85b9-2302-bef4-3213f6848a8d%40steinkuehler.net.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/CALHSORqzEj8dmkmxmpftnCY5RTGVg5f9HKzoAeZhR%3DdE_xH2TA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to