summary: high-speed HAL I/O without extra hardware & idle main cpu on TI 
ARM335x omap processors

--

ok, we have something working in HAL : 
http://git.mah.priv.at/gitweb/emc2-dev.git/shortlog/refs/heads/arm335x-hal-pru-module

this adds hal_pru if --with-platform=beaglebone is passed to configure

hal_pru demonstrates:

- initialisation and loading of code into a PRU
- start execution
- communicate with PRU through shared memory
- wiggling GPIO / led pins
- stop execution on module exit

hal_pru can load code either into PRU 0 or 1. By default compiled-in
PRU code is used; an alternate .bin file can by passed with prucode=<filename>.

The PRU code examples do not demonstrate anything sensible (yet), this so far 
has been
configuration plumbing and build support, plus integrating support code. I have 
looked
through the stepgen, encoder and freqgen thread functions; it seems they could 
be transliterated 
into PRU assembly without much hassle; no multiply/divide used. The PRU code 
isnt anywhere 
elegant yet, the examples are based on stuff which I fished from the net.

the PRU can accces 14 out GPIO pins and 17 GPIO in pins directly; 
the rest can be accessed by the main CPU only, but overall that looks very 
plush even for complex stepper configs.

The TI pasm assembler and prussdriv UIO support is integrated into 
configuration and build.

for a look & feel of PRU assembly language, see: 
http://git.mah.priv.at/gitweb/emc2-dev.git/blob/f94ce417fcff5cfc2223b9936d695a36b21a5c65:/src/hal/components/blinkleds.p
It's pretty straightforward, 40 or so instructions - 32 bit integer, 5ns/cycle, 
no multiply/divide.

To add some PRU assembly, add hal/components/foo.p  - this will be compiled 
into 
rtlib/foo.bin (for loading with prucode=foo.bin) as well as 
hal/components/foo_bin.h which
contains the code array - this can be included as default PRU code into a HAL 
component,
see hal/components/hal_pru.c. It is a userspace module.

External dependencies: the prussdrv UIO support expects a matching uio_pruss 
kernel module, which
is loaded as needed by hal_pru as needed. This module is included in the 
beaglebone kernel modules.

as for the highest rate of pin wiggling, see this code example: 
http://git.mah.priv.at/gitweb/emc2-dev.git/blob/f94ce417fcff5cfc2223b9936d695a36b21a5c65:/src/hal/components/maxrate.p
this needs some more extra setup in hal_pru - it will load and run but them 
pins dont move, just FYI at this point.

I've scoped 50Mhz pin toggle rate by similar code; a qualified rumor in the TI 
ARM forum says 'this code shows a 200Mhz signal on the scope' - generated by 
assembly code in the PRU, the main CPU doing nothing at all.


- Michael


------------------------------------------------------------------------------
Keep yourself connected to Go Parallel: 
INSIGHTS What's next for parallel hardware, programming and related areas?
Interviews and blogs by thought leaders keep you ahead of the curve.
http://goparallel.sourceforge.net
_______________________________________________
Emc-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-developers

Reply via email to