On 2/16/2015 12:37 PM, Bit Pusher wrote:
> I am having difficulty understanding a short snippet of code from 
> the PRU_memAcc_DDR_sharedRAM.p example. The code is:
> 
>     // Configure the programmable pointer register for PRU0 by setting 
> c31_pointer[15:0]
>     // field to 0x0010.  This will make C31 point to 0x80001000 (DDR 
> memory).
>     MOV     r0, 0x00100000
>     MOV       r1, CTPPR_1
>     ST32      r0, r1
> 
> The comment states the field is being set to 0x0010 yet the immediate value 
> being programmed into
> r0 is 0x00100000 not 0x0010. I can not understand why this sets the pointer 
> to  0x80001000 rather than
> 0x8010000. Are there any pruss programmers that could shed some light on my 
> misunderstanding here?
> The example does work and does give an offset 0x1000 bytes in the DDR 
> memory, so there is something I'm
> missing. Thanks in advance.

Just follow through the PRU reference guide.

Section 5.4.9 CTPPR1 Register
The value is being written to CTPPR1, which controls the pointers for
entries 30 and 31 in the constant table.  The 0x00100000 value written
breaks down as:

Bits 31-16 = 0x0010 = C31 Pointer value
Bits 15-00 = 0x0000 = C30 Pointer value


Section 5.2.1 Constant Table
The 0x0010 C31 pointer value gets combined with the constant table value
to form the actual address:

0x80nn_nn00, nnnn = c31_pointer[15:0]

So since the C31 pointer from CTPPR1 is 0x0010, the resulting address is:

0x80nn_nn00 with nnnn=0x0010 or 0x8000_1000

Easy-peasy!

-- 
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].
For more options, visit https://groups.google.com/d/optout.

Reply via email to