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.
