On Monday, August 24, 2015 at 7:27:35 AM UTC-7, Charles Steinkuehler wrote: > > > Optimal would be a sequence of successive stores to the set and clear > register, with the addresses pre-calculated and sitting in registers > (or with a base address and use the str instruction with an immediate > offset).
Good point. I can beat the compiler into submission if I want to, but it's probably not worth the effort as I need to do other logic anyway. > You might also need to > move the volatile on the variable definitions. I'm not a "C" guru, > but I think: > > uint32_t volatile * gpio_setdataout_addr > > ...is different from: > > volatile uint32_t * gpio_setdataout_addr > > ...you want the uint32_t to be volatile, not the pointer to it. This is one of those C quirks. It's actually a habit from "const" but it applies to "volatile" as well. Oddly, the qualifiers generally apply to the *left* except under certain circumstances where they can apply right. This gets people into trouble when they specify: volatile uint32_t volatile * blah; Which is actually a *redundant* specifier as opposed to what they wanted: volatile uint32_t * volatile blah; Not every compiler (*especially* embedded ones) will eject a warning on the duplicate declaration specifier. So, I personally always put them on the right to avoid the issue. ...but I write C code like a hardware guy who programs in VHDL. :) > Not a damn thing wrong with that, thank you very much. Software-only people tend to be amazed that you can write a state machine that is *readable* in code. A very experienced programmer once told me: "Your code is the most straightforward code I have ever read." Of course, I have to condemn you as a dirty apostate for not using Verilog. :) (Seriously, though, when is somebody going to produce an open-source VHDL simulator/compiler so that I can actually use it on projects?) > Regardless, note that the maximum toggle rate of a GPIO pin using the > PRU is about 12.5 MHz, dictated by the ~40 nS required to execute a > write by the on-chip communication fabric (which means 80 nS period > for a high/low toggle of the pin). This assumes the CPU and the PRU > have similar bandwidth to the L4 fabric, which may or may not be the > case (but I suspect is true). > Do you have a pointer to the reference manual for this (if not, don't waste a lot of time, I'll dig it out)? Given that this seems to be *very* fundamental about understanding the architecture, I really probably need to chase this down exactly. Thanks for the advice. I appreciate your taking the time on this. -- 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 beagleboard+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.