I think I see the problem. You have the pin muxed for pru gpio in the 
device tree overlay, but you're trying to read the arm gpio block. PRU gpio 
is accessed directly with register r30 for output and r31 for input 
(section 5.2.2.3 in the somewhat terrible pru reference 
guide<https://github.com/beagleboard/am335x_pru_package/blob/master/am335xPruReferenceGuide.pdf>
).

On Tuesday, March 11, 2014 7:49:47 AM UTC-7, Manu wrote:
>
> I read your last email with attention by still I can't understad why my 
> code is not working. I a few words: 
> The code works when properly when I comment the line " WBS r31.t15 //Wait 
> til GPIO-15-in is high... P9_24"
>
> *PINMUX DTS:*
>
> /dts-v1/;  
> /plugin/;  
>   
> / {  
>   compatible = "ti,beaglebone", "ti,beaglebone-black";  
>   
>   /* identification */  
>   part-number = "BB-BONE-W";  
>   version = "00A0";  
>   exclusive-use =  "P9.24";  
>  
>   
>   fragment@0 {  
>     target = <&am33xx_pinmux>;  
>     __overlay__ {  
>       mygpio: pinmux_mygpio{  
>         pinctrl-single,pins = <   
>  0x184 0x36         /* P9 24 pr1_pru0_pru_r31_16.GPIO0_15: | PULLUP | 
> MODE6 | INPUT */
>           >;  
>       };  
>     };  
>   };  
>   
>   fragment@1 {  
>     target = <&ocp>;  
>     __overlay__ {  
>       test_helper: helper {  
>         compatible = "bone-pinmux-helper";  
>         pinctrl-names = "default";  
>         pinctrl-0 = <&mygpio>;  
>         status = "okay";  
>       };  
>     };  
>   };  
>   
>   fragment@2{  
>   target = <&pruss>;  
>     __overlay__ {  
>       status = "okay";  
>     };  
>   };  
> };  
>
> *PIN MUX STATUS:*
> # cat /sys/kernel/debug/pinctrl/44e10800.pinmux/pins | grep "pin 97"
>    pin 97 (44e10984) 00000036 pinctrl-single 
>
> *UNAME +DIST:*
> # uname -a
> Linux don-t001 3.8.13-bone30 #1 SMP Thu Nov 14 11:19:20 UTC 2013 armv7l 
> armv7l armv7l GNU/Linux
> # cat /etc/issue
>     Ubuntu 12.04.3 LTS \n \l
>
> *ASM CODE:*
>
> .origin 0
> .entrypoint START
>
> #define PRU0_ARM_INTERRUPT 19
> #define AM33XX
>
> #define GPIO1 0x4804c000
> #define GPIO_CLEARDATAOUT 0x190
> #define GPIO_SETDATAOUT 0x194
>
> START:
>     //Enable OCP master port
>     LBCO r0, C4, 4, 4
>     CLR r0, r0, 4 // Clear SYSCFG[STANDBY_INIT] to enable OCP master port
>     SBCO r0, C4, 4, 4
>     
>     MOV r1, 1000 //# cycles
>
> INPUTTEST:
>  
>  WBS r31.t15 //Wait til GPIO-15-in is high... P9_24
>  SUB r1, r1, 1 //Subtract from counter
> QBNE INPUTTEST, r1, 0 //Loop if counter not at zero
>
> // Send notification to Host for program completion
> MOV R31.b0, PRU0_ARM_INTERRUPT+16
>
> MOV r1, 0
> HALT
>
>
> *INIT PROGRAM USING PyPRUSS:*
>
> #!/usr/bin/python
>
> ''' ddr_write.py - Finds the DDR address and size, passes that info to the 
> PRU0 
> data memory, executes a program and reads back data from the first and 
> last banks'''
>
>
> import pypruss
> import mmap
> import struct 
>
> pypruss.modprobe()
> ddr_addr = pypruss.ddr_addr()
> ddr_size = pypruss.ddr_size()
>
> print "DDR memory address is 0x%x and the size is 0x%x"%(ddr_addr, 
> ddr_size)
>
> ddr_offset  = ddr_addr-0x10000000
> ddr_filelen = ddr_size+0x10000000
> ddr_start = 0x10000000
> ddr_end = 0x10000000+ddr_size
>
> pypruss.init() # Init the PRU
> pypruss.open(0) # Open PRU event 0 which is PRU0_ARM_INTERRUPT
> pypruss.pruintc_init() # Init the interrupt controller
> pypruss.pru_write_memory(0, 0, [ddr_addr, ddr_addr+ddr_size-4]) # Put the 
> ddr address in the first region 
> pypruss.exec_program(0, "./ddr_write.bin") # Load firmware 
> "ddr_write.bin" on PRU 0
> pypruss.wait_for_event(0) # Wait for event 0 which is connected to 
> PRU0_ARM_INTERRUPT
> pypruss.clear_event(0) # Clear the event
> pypruss.exit() # Exit PRU
>
> with open("/dev/mem", "r+b") as f: # Open the physical memory device
> ddr_mem = mmap.mmap(f.fileno(), ddr_filelen, offset=ddr_offset) # mmap the 
> right area
>
> read_back = struct.unpack("L", ddr_mem[ddr_start:ddr_start+4])[0] # Parse 
> the data
>
>
> print "The first 4 bytes of DDR memory reads "+hex(read_back)
>
>
> ddr_mem.close() # Close the memory 
> f.close() # Close the file
>
>
> No way to read the P9_24 PIN From BBB using PRUSS
>
> May be the *WBS *does no work as I think ..... a week working on that and 
> still nothing.
>
>
>
>
>
>
> El martes, 11 de marzo de 2014 00:40:04 UTC-3, Brandon I escribió:
>>
>> >When I do an interruput up or down the ASM keeps waiting and nothing....
>>
>> Read my previous email. Your code will not work as is.
>>
>>
>> On Mon, Mar 10, 2014 at 8:11 PM, Manu <manuelbe...@gmail.com> wrote:
>>
>>> My DTS is:
>>>
>>> /dts-v1/;  
>>> /plugin/;  
>>>   
>>> / {  
>>>   compatible = "ti,beaglebone", "ti,beaglebone-black";  
>>>   
>>>   /* identification */  
>>>   part-number = "BB-BONE-W";  
>>>   version = "00A0";  
>>>   exclusive-use =  "P9.24";  
>>>  
>>>   
>>>   fragment@0 {  
>>>     target = <&am33xx_pinmux>;  
>>>     __overlay__ {  
>>>       mygpio: pinmux_mygpio{  
>>>         pinctrl-single,pins = <  
>>>  
>>>  0x184 0x16         /* P9 24 pr1_pru0_pru_r31_16.GPIO0_15: | PULLUP | 
>>> MODE6 | INPUT */
>>>            >;  
>>>       };  
>>>     };  
>>>   };  
>>>   
>>>   fragment@1 {  
>>>     target = <&ocp>;  
>>>     __overlay__ {  
>>>       test_helper: helper {  
>>>         compatible = "bone-pinmux-helper";  
>>>         pinctrl-names = "default";  
>>>         pinctrl-0 = <&mygpio>;  
>>>         status = "okay";  
>>>       };  
>>>     };  
>>>   };  
>>>
>>>   fragment@2{  
>>>   target = <&pruss>;  
>>>     __overlay__ {  
>>>       status = "okay";  
>>>       pinctrl-names = "default";
>>>       pinctrl-0 = <&mygpio>;
>>>     };  
>>>   };  
>>>
>>> };  
>>>
>>>
>>> and the 
>>> cat /sys/devices/bone_capemgr.*/slots
>>>  0: 54:PF--- 
>>>  1: 55:PF--- 
>>>  2: 56:PF--- 
>>>  3: 57:PF--- 
>>>  4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
>>>  5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
>>>  6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN
>>>  8: ff:P-O-L Override Board Name,00A0,Override Manuf,BB-BONE-W
>>>
>>> cat /sys/kernel/debug/pinctrl/44e10800.pinmux/pins | grep "pin 97"
>>> pin 97 (44e10984) 00000037 pinctrl-single  BEFORE
>>>
>>> root@donkeytom-t001:/texka/pinmux# echo BB-BONE-W > 
>>> /sys/devices/bone_capemgr.9/slots
>>> root@donkeytom-t001:/texka/pinmux# cat 
>>> /sys/kernel/debug/pinctrl/44e10800.pinmux/pins | grep "pin 97"
>>> pin 97 (44e10984) 00000016 pinctrl-single  AFTER
>>>
>>>
>>> When I do an interruput up or down the ASM keeps waiting and nothing....
>>>
>>>
>>> Thank you!
>>>
>>> Manuel
>>>
>>> El lunes, 10 de marzo de 2014 23:36:42 UTC-3, Charles Steinkuehler 
>>> escribió:
>>>>
>>>> Provide the *.dts source for the overlay you are trying to load, and 
>>>> the 
>>>> contents of /sys/devices/bone_capemgr.*/slots, and maybe we can figure 
>>>> out what's going wrong.  It looks like something has already grabbed 
>>>> the 
>>>> pin you want to use. 
>>>>
>>>> Note the "pruss: failed to hardreset" always shows up and doesn't 
>>>> indicate a problem (or at least not the problem you're having).  Your 
>>>> issue is presumably the pin overlay that fails to load. 
>>>>
>>>> On 3/10/2014 9:20 PM, Manu wrote: 
>>>> > I was finding what is wrong and finally I got it. The thing is that I 
>>>> don't 
>>>> > know how to fix it. 
>>>> > My BBB is Ubuntu last 12.04 version with 3.8 kernel by nelson. 
>>>> > The error is here: 
>>>> > *706.650640] omap_hwmod: pruss: failed to hardreset* 
>>>> > [  706.682785] pinctrl-single 44e10800.pinmux: pin 44e10984 already 
>>>> > requested by helper.12; cannot claim for 4a300000.pruss 
>>>> > [  706.694442] pinctrl-single 44e10800.pinmux: pin-97 
>>>> (4a300000.pruss) 
>>>> > status -22 
>>>> > [  706.702096] pinctrl-single 44e10800.pinmux: could not request pin 
>>>> 97 on 
>>>> > device pinctrl-single 
>>>> > [  706.738323] pruss_uio 4a300000.pruss: pins are not configured from 
>>>> the 
>>>> > driver 
>>>> > [  706.765286] bone-capemgr bone_capemgr.9: slot #7: Applied #3 
>>>> overlays. 
>>>> > 
>>>> > 
>>>> > 
>>>> > 
>>>> > El lunes, 10 de marzo de 2014 20:10:55 UTC-3, Brandon I escribió: 
>>>> >> 
>>>> >> Along with what the others have described, since you're the arm 
>>>> processor 
>>>> >> gpio rather than a pru gpio, meaning you're going all the way out to 
>>>> system 
>>>> >> memory, you have to connect the pru to system memory. Here's an 
>>>> example of 
>>>> >> accessing system memory with the pru: 
>>>> >> 
>>>> >> 
>>>> >> http://nomel.tumblr.com/post/30006622413/beaglebone-
>>>> tutorial-accessing-main-memory-from-the-pru 
>>>> >> 
>>>> >> To set the pin mux for arm gpio, you can use one of these gpio 
>>>> overlays. 
>>>> >> Just follow the instructions: 
>>>> >> 
>>>> >> https://github.com/nomel/beaglebone/tree/master/gpio-header 
>>>> >> 
>>>> >> Also, there are a few pru debuggers out there now so you can 
>>>> view/step pru 
>>>> >> execution. 
>>>> >> 
>>>> >> -Brandon 
>>>> >> 
>>>> >> 
>>>> >> On Sunday, March 9, 2014 6:37:09 PM UTC-7, Manu wrote: 
>>>> >>> 
>>>> >>> I was trying a few days to enable PRU (BBB Ubuntu 12.04)  and run a 
>>>> input 
>>>> >>> testing code using the pin P9_24. 
>>>> >>> 
>>>> >>> MUX = pin 97 (44e10984) 00000006 pinctrl-single  (SET to MODE 6) 
>>>> >>> 
>>>> >>> P9 24 pr1_pru0_pru_r31_16.GPIO0_15: | MODE6 | INPUT 
>>>> >>> 
>>>> >>> Nothing happens when I put the pin to 1.8 or GND 
>>>> >>> 
>>>> >>> The ASM code is: 
>>>> >>> 
>>>> >>> .origin 0 
>>>> >>> .entrypoint START 
>>>> >>> 
>>>> >>> #define PRU0_ARM_INTERRUPT 19 
>>>> >>> #define AM33XX 
>>>> >>> 
>>>> >>> #define GPIO1 0x4804c000 
>>>> >>> #define GPIO_CLEARDATAOUT 0x190 
>>>> >>> #define GPIO_SETDATAOUT 0x194 
>>>> >>> 
>>>> >>> START: 
>>>> >>> // clear that bit 
>>>> >>>     LBCO r0, C4, 4, 4 
>>>> >>>     CLR r0, r0, 4 
>>>> >>>     SBCO r0, C4, 4, 4 
>>>> >>> 
>>>> >>>     MOV r0, 1000000000 //# cycles 
>>>> >>> 
>>>> >>> INPUTTEST: 
>>>> >>>   
>>>> >>>  WBS r31.t15 //Wait til GPIO-15-in is high... P9_24 
>>>> >>> SUB r0, r0, 1 //Subtract from counter 
>>>> >>> QBNE INPUTTEST, r0, 0 //Loop if counter not at zero 
>>>> >>>  // Send notification to Host for program completion 
>>>> >>> MOV R31.b0, PRU0_ARM_INTERRUPT+16 
>>>> >>> 
>>>> >>> MOV r0, 0 
>>>> >>> HALT 
>>>> >>> 
>>>> >>> I don't know what I am doing wrong and in Internet are not examples 
>>>> for 
>>>> >>> INPUT tests. 
>>>> >>> 
>>>> >>> 
>>>> >>> 
>>>> >>> 
>>>> >>> 
>>>> > 
>>>>
>>>>
>>>> -- 
>>>> Charles Steinkuehler 
>>>> cha...@steinkuehler.net 
>>>>
>>>  -- 
>>> For more options, visit http://beagleboard.org/discuss
>>> --- 
>>> You received this message because you are subscribed to a topic in the 
>>> Google Groups "BeagleBoard" group.
>>> To unsubscribe from this topic, visit 
>>> https://groups.google.com/d/topic/beagleboard/PzuzGgfGvBU/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to 
>>> beagleboard...@googlegroups.com.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>

-- 
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.

Reply via email to