Hi Karl,

These constants allow the C compiler to produce more efficient code. Of 
course you can also use them in assembly programs by explicitly using 
lbco/sbco instructions.

Let me give you an example how pru-gcc uses the constant table. Consider 
this C code snippet:
# define MYREG   ( * (volatile uint32_t *)(0x4802A000 + 0x24))
MYREG = 42;


Normally pru-gcc would output the following:
        ldi     r14, %lo(1208131620)
        ldi     r14.w2, %hi_rlz(1208131620)
        ldi     r15, 42
        sbbo    r15, r14, 0, 4

But you can tell the compiler that this address base is special (btw, 
already defined for you in <pru/io.h>):
#pragma ctable_entry 2 0x4802a000
Then the compiler can produce a much shorter instruction sequence:
        ldi     r14, 42
        sbco    r14, 2, 36, 4

TI's compiler uses a different syntax for the constants declarations, but 
essentially does the same optimization.

Regards,
Dimitar

On Friday, July 15, 2016 at 11:41:06 AM UTC+3, Karl Karpfen wrote:
>
> Hi,
>
> the AM335x TRM specifies a constants table for PRU which can be used for 
> easier access of memory addresses. As an example: for I2C1 registers which 
> originally use base-address 0x4802A000 a constant 2 is defined.
>
> What I do not understand: how can one use these constants? How does the 
> mapping from a constant to a base-address work where I have to add an 
> offset in order to access desired registers?
>
> Or is this an assembler-thingy only which can't be used out of 
> PRU-C-Software?
>
> Thanks!
>
>

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/720f7e7d-d6ee-4498-851f-8cb5a2fa5087%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to