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 <[email protected]>
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
<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
<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
[email protected]
--
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
<https://groups.google.com/d/topic/beagleboard/PzuzGgfGvBU/unsubscribe>.
To unsubscribe from this group and all its topics, send an
email to [email protected].
For more options, visit https://groups.google.com/d/optout
<https://groups.google.com/d/optout>.
--
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
[email protected]
<mailto:[email protected]>.
For more options, visit https://groups.google.com/d/optout.