From c4a51c2282f7795d1ab7362b321270686651a7e7 Mon Sep 17 00:00:00 2001 From: Jason Kridner <jkridner@beagleboard.org> Date: Mon, 24 Oct 2022 12:18:03 -0400 Subject: [PATCH] books/pru-cookbook: move code to submodule --- .gitmodules | 3 + books/pru-cookbook/01case/code/blink.sim | 7 - books/pru-cookbook/01case/code/circle.py | 43 - books/pru-cookbook/01case/code/e1.31-test.py | 70 - .../pru-cookbook/01case/code/encoder_setup.sh | 49 - books/pru-cookbook/01case/code/fire.fseq | Bin 614428 -> 0 bytes .../pru-cookbook/01case/code/logic_install.sh | 34 - books/pru-cookbook/01case/code/main_pru1.c | 53 - books/pru-cookbook/01case/code/my-config.json | 19 - books/pru-cookbook/01case/code/opc.py | 177 - books/pru-cookbook/01case/code/pru1-servo.asm | 162 - books/pru-cookbook/01case/code/servo-test.c | 84 - .../pru-cookbook/01case/code/servos_setup.sh | 24 - books/pru-cookbook/02start/code/Makefile | 1 - books/pru-cookbook/02start/code/ai.notes | 59 - books/pru-cookbook/02start/code/hello.pru0.c | 35 - .../pru-cookbook/02start/code/hello.pru1_1.c | 35 - books/pru-cookbook/02start/code/hello2.pru0.c | 42 - books/pru-cookbook/02start/code/hello2.pru1.c | 43 - .../pru-cookbook/02start/code/hello2.pru1_0.c | 63 - .../pru-cookbook/02start/code/hello2.pru1_1.c | 63 - .../pru-cookbook/02start/code/hello2.pru2_0.c | 63 - .../pru-cookbook/02start/code/hello2.pru2_1.c | 63 - books/pru-cookbook/02start/code/setup.sh | 5 - books/pru-cookbook/02start/code/setup2.sh | 5 - books/pru-cookbook/02start/start.rst | 44 +- books/pru-cookbook/03details/code/Makefile | 1 - .../03details/code/am335x_pru.cmd | 87 - .../03details/code/encoder_setup.sh | 49 - .../pru-cookbook/03details/code/gpio_setup.sh | 28 - .../03details/code/servos_setup.sh | 24 - .../pru-cookbook/04debug/code/AM335x_PRU.cmd | 86 - books/pru-cookbook/04debug/code/Makefile | 1 - books/pru-cookbook/04debug/code/copyright.c | 32 - .../04debug/code/resource_table_empty.h | 72 - books/pru-cookbook/04debug/code/uart1.pru0.c | 88 - .../pru-cookbook/04debug/code/uart1.pru1_0.c | 90 - books/pru-cookbook/04debug/code/uart2.pru0.c | 126 - .../pru-cookbook/04debug/code/uart2.pru1_0.c | 126 - books/pru-cookbook/04debug/code/uart_setup.sh | 28 - books/pru-cookbook/05blocks/code/Makefile | 1 - books/pru-cookbook/05blocks/code/copyright.c | 32 - books/pru-cookbook/05blocks/code/input.pru0.c | 26 - .../pru-cookbook/05blocks/code/input_setup.sh | 27 - .../05blocks/code/module/.gitignore | 1 - .../05blocks/code/module/Makefile | 25 - .../05blocks/code/module/install.sh | 6 - .../code/module/rpmsg_client_sample.c | 102 - .../05blocks/code/module/rpmsg_pru.c | 359 -- .../05blocks/code/module/setup.sh | 1 - .../pru-cookbook/05blocks/code/neo-colors.py | 41 - .../pru-cookbook/05blocks/code/neo-rainbow.py | 27 - books/pru-cookbook/05blocks/code/neo1.pru0.c | 44 - .../pru-cookbook/05blocks/code/neo1.pru1_1.c | 44 - books/pru-cookbook/05blocks/code/neo2.pru0.c | 46 - .../pru-cookbook/05blocks/code/neo2.pru1_1.c | 46 - books/pru-cookbook/05blocks/code/neo3.pru0.c | 67 - .../pru-cookbook/05blocks/code/neo3.pru1_1.c | 67 - books/pru-cookbook/05blocks/code/neo4.pru0.c | 145 - .../pru-cookbook/05blocks/code/neo4.pru1_1.c | 145 - books/pru-cookbook/05blocks/code/neo_setup.sh | 28 - books/pru-cookbook/05blocks/code/pwm-test.c | 74 - books/pru-cookbook/05blocks/code/pwm1.pru0.c | 22 - .../pru-cookbook/05blocks/code/pwm1.pru1_1.c | 22 - books/pru-cookbook/05blocks/code/pwm2.pru0.c | 22 - books/pru-cookbook/05blocks/code/pwm3.pru0.c | 43 - books/pru-cookbook/05blocks/code/pwm4.pru0.c | 50 - books/pru-cookbook/05blocks/code/pwm5.pru0.c | 53 - books/pru-cookbook/05blocks/code/pwm6.pru0.c | 56 - books/pru-cookbook/05blocks/code/pwm7-test.c | 83 - books/pru-cookbook/05blocks/code/pwm7.pru0.c | 57 - books/pru-cookbook/05blocks/code/pwm7.pru1.c | 57 - .../pru-cookbook/05blocks/code/pwm7_setup.sh | 28 - books/pru-cookbook/05blocks/code/pwm8.pru0.c | 78 - books/pru-cookbook/05blocks/code/pwm8.pru1.c | 66 - books/pru-cookbook/05blocks/code/pwm_setup.sh | 28 - .../05blocks/code/resource_table_empty.h | 39 - books/pru-cookbook/05blocks/code/rgb1.pru0.c | 80 - books/pru-cookbook/05blocks/code/rgb2.pru0.c | 81 - books/pru-cookbook/05blocks/code/rgb3.pru0.c | 114 - books/pru-cookbook/05blocks/code/rgb4.pru0.c | 84 - books/pru-cookbook/05blocks/code/rgb_black.h | 31 - books/pru-cookbook/05blocks/code/rgb_pocket.h | 45 - .../pru-cookbook/05blocks/code/rgb_python.py | 78 - .../05blocks/code/rgb_python_setup.sh | 41 - books/pru-cookbook/05blocks/code/rgb_setup.sh | 41 - .../05blocks/code/rgb_white.pru0.c | 64 - .../pru-cookbook/05blocks/code/shared.pru0.c | 63 - .../05blocks/code/shared_setup.sh | 28 - books/pru-cookbook/05blocks/code/sine.map | 338 -- books/pru-cookbook/05blocks/code/sine.pru0.c | 58 - .../05blocks/code/write_init_pins.sh | 9 - books/pru-cookbook/06io/code/Makefile | 1 - books/pru-cookbook/06io/code/gpio.pru0.c | 23 - books/pru-cookbook/06io/code/setup.sh | 28 - books/pru-cookbook/07more/code/Makefile | 1 - books/pru-cookbook/07more/code/copyright.c | 33 - books/pru-cookbook/07more/code/cycle.pru0.c | 32 - books/pru-cookbook/07more/code/cycle.pru0.lst | 3082 ----------------- .../07more/code/delay-test.pru0.c | 28 - .../07more/code/delay-test2.pru0.c | 32 - books/pru-cookbook/07more/code/delay.pru0.asm | 9 - .../pru-cookbook/07more/code/delay2.pru0.asm | 15 - books/pru-cookbook/07more/code/logic.c | 34 - books/pru-cookbook/07more/code/logic_setup.sh | 30 - .../07more/code/resource_table_pru0.h | 105 - books/pru-cookbook/07more/code/setup.sh | 30 - books/pru-cookbook/07more/code/xin.pru1.c | 34 - .../07more/code/xout-cycle.pru0.c | 62 - books/pru-cookbook/07more/code/xout.pru0.c | 52 - books/pru-cookbook/07more/code/xout_run.sh | 3 - books/pru-cookbook/08ai/code/Makefile | 1 - books/pru-cookbook/08ai/code/pwm1.pru2_1.c | 24 - books/pru-cookbook/code | 1 + 114 files changed, 26 insertions(+), 8931 deletions(-) delete mode 100644 books/pru-cookbook/01case/code/blink.sim delete mode 100755 books/pru-cookbook/01case/code/circle.py delete mode 100755 books/pru-cookbook/01case/code/e1.31-test.py delete mode 100755 books/pru-cookbook/01case/code/encoder_setup.sh delete mode 100644 books/pru-cookbook/01case/code/fire.fseq delete mode 100644 books/pru-cookbook/01case/code/logic_install.sh delete mode 100644 books/pru-cookbook/01case/code/main_pru1.c delete mode 100644 books/pru-cookbook/01case/code/my-config.json delete mode 100755 books/pru-cookbook/01case/code/opc.py delete mode 100644 books/pru-cookbook/01case/code/pru1-servo.asm delete mode 100644 books/pru-cookbook/01case/code/servo-test.c delete mode 100755 books/pru-cookbook/01case/code/servos_setup.sh delete mode 100644 books/pru-cookbook/02start/code/Makefile delete mode 100644 books/pru-cookbook/02start/code/ai.notes delete mode 100644 books/pru-cookbook/02start/code/hello.pru0.c delete mode 100644 books/pru-cookbook/02start/code/hello.pru1_1.c delete mode 100644 books/pru-cookbook/02start/code/hello2.pru0.c delete mode 100644 books/pru-cookbook/02start/code/hello2.pru1.c delete mode 100644 books/pru-cookbook/02start/code/hello2.pru1_0.c delete mode 100644 books/pru-cookbook/02start/code/hello2.pru1_1.c delete mode 100644 books/pru-cookbook/02start/code/hello2.pru2_0.c delete mode 100644 books/pru-cookbook/02start/code/hello2.pru2_1.c delete mode 100755 books/pru-cookbook/02start/code/setup.sh delete mode 100755 books/pru-cookbook/02start/code/setup2.sh delete mode 100644 books/pru-cookbook/03details/code/Makefile delete mode 100644 books/pru-cookbook/03details/code/am335x_pru.cmd delete mode 100755 books/pru-cookbook/03details/code/encoder_setup.sh delete mode 100755 books/pru-cookbook/03details/code/gpio_setup.sh delete mode 100755 books/pru-cookbook/03details/code/servos_setup.sh delete mode 100644 books/pru-cookbook/04debug/code/AM335x_PRU.cmd delete mode 100644 books/pru-cookbook/04debug/code/Makefile delete mode 100644 books/pru-cookbook/04debug/code/copyright.c delete mode 100644 books/pru-cookbook/04debug/code/resource_table_empty.h delete mode 100644 books/pru-cookbook/04debug/code/uart1.pru0.c delete mode 100644 books/pru-cookbook/04debug/code/uart1.pru1_0.c delete mode 100644 books/pru-cookbook/04debug/code/uart2.pru0.c delete mode 100644 books/pru-cookbook/04debug/code/uart2.pru1_0.c delete mode 100644 books/pru-cookbook/04debug/code/uart_setup.sh delete mode 100644 books/pru-cookbook/05blocks/code/Makefile delete mode 100644 books/pru-cookbook/05blocks/code/copyright.c delete mode 100644 books/pru-cookbook/05blocks/code/input.pru0.c delete mode 100755 books/pru-cookbook/05blocks/code/input_setup.sh delete mode 100644 books/pru-cookbook/05blocks/code/module/.gitignore delete mode 100644 books/pru-cookbook/05blocks/code/module/Makefile delete mode 100755 books/pru-cookbook/05blocks/code/module/install.sh delete mode 100644 books/pru-cookbook/05blocks/code/module/rpmsg_client_sample.c delete mode 100644 books/pru-cookbook/05blocks/code/module/rpmsg_pru.c delete mode 100755 books/pru-cookbook/05blocks/code/module/setup.sh delete mode 100755 books/pru-cookbook/05blocks/code/neo-colors.py delete mode 100755 books/pru-cookbook/05blocks/code/neo-rainbow.py delete mode 100644 books/pru-cookbook/05blocks/code/neo1.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/neo1.pru1_1.c delete mode 100644 books/pru-cookbook/05blocks/code/neo2.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/neo2.pru1_1.c delete mode 100644 books/pru-cookbook/05blocks/code/neo3.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/neo3.pru1_1.c delete mode 100644 books/pru-cookbook/05blocks/code/neo4.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/neo4.pru1_1.c delete mode 100755 books/pru-cookbook/05blocks/code/neo_setup.sh delete mode 100644 books/pru-cookbook/05blocks/code/pwm-test.c delete mode 100644 books/pru-cookbook/05blocks/code/pwm1.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/pwm1.pru1_1.c delete mode 100644 books/pru-cookbook/05blocks/code/pwm2.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/pwm3.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/pwm4.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/pwm5.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/pwm6.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/pwm7-test.c delete mode 100644 books/pru-cookbook/05blocks/code/pwm7.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/pwm7.pru1.c delete mode 100755 books/pru-cookbook/05blocks/code/pwm7_setup.sh delete mode 100644 books/pru-cookbook/05blocks/code/pwm8.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/pwm8.pru1.c delete mode 100755 books/pru-cookbook/05blocks/code/pwm_setup.sh delete mode 100644 books/pru-cookbook/05blocks/code/resource_table_empty.h delete mode 100644 books/pru-cookbook/05blocks/code/rgb1.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/rgb2.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/rgb3.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/rgb4.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/rgb_black.h delete mode 100644 books/pru-cookbook/05blocks/code/rgb_pocket.h delete mode 100755 books/pru-cookbook/05blocks/code/rgb_python.py delete mode 100755 books/pru-cookbook/05blocks/code/rgb_python_setup.sh delete mode 100755 books/pru-cookbook/05blocks/code/rgb_setup.sh delete mode 100644 books/pru-cookbook/05blocks/code/rgb_white.pru0.c delete mode 100644 books/pru-cookbook/05blocks/code/shared.pru0.c delete mode 100755 books/pru-cookbook/05blocks/code/shared_setup.sh delete mode 100644 books/pru-cookbook/05blocks/code/sine.map delete mode 100644 books/pru-cookbook/05blocks/code/sine.pru0.c delete mode 100755 books/pru-cookbook/05blocks/code/write_init_pins.sh delete mode 100644 books/pru-cookbook/06io/code/Makefile delete mode 100644 books/pru-cookbook/06io/code/gpio.pru0.c delete mode 100755 books/pru-cookbook/06io/code/setup.sh delete mode 100644 books/pru-cookbook/07more/code/Makefile delete mode 100644 books/pru-cookbook/07more/code/copyright.c delete mode 100644 books/pru-cookbook/07more/code/cycle.pru0.c delete mode 100644 books/pru-cookbook/07more/code/cycle.pru0.lst delete mode 100644 books/pru-cookbook/07more/code/delay-test.pru0.c delete mode 100644 books/pru-cookbook/07more/code/delay-test2.pru0.c delete mode 100644 books/pru-cookbook/07more/code/delay.pru0.asm delete mode 100644 books/pru-cookbook/07more/code/delay2.pru0.asm delete mode 100644 books/pru-cookbook/07more/code/logic.c delete mode 100644 books/pru-cookbook/07more/code/logic_setup.sh delete mode 100644 books/pru-cookbook/07more/code/resource_table_pru0.h delete mode 100644 books/pru-cookbook/07more/code/setup.sh delete mode 100644 books/pru-cookbook/07more/code/xin.pru1.c delete mode 100644 books/pru-cookbook/07more/code/xout-cycle.pru0.c delete mode 100644 books/pru-cookbook/07more/code/xout.pru0.c delete mode 100755 books/pru-cookbook/07more/code/xout_run.sh delete mode 100644 books/pru-cookbook/08ai/code/Makefile delete mode 100644 books/pru-cookbook/08ai/code/pwm1.pru2_1.c create mode 160000 books/pru-cookbook/code diff --git a/.gitmodules b/.gitmodules index 0c170ef1..4d6dbcd6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "books/beaglebone-cookbook/code"] path = books/beaglebone-cookbook/code url = https://git.beagleboard.org/beagleboard/beaglebone-cookbook-code.git +[submodule "books/pru-cookbook/code"] + path = books/pru-cookbook/code + url = https://git.beagleboard.org/beagleboard/pru-cookbook-code diff --git a/books/pru-cookbook/01case/code/blink.sim b/books/pru-cookbook/01case/code/blink.sim deleted file mode 100644 index 212a2168..00000000 --- a/books/pru-cookbook/01case/code/blink.sim +++ /dev/null @@ -1,7 +0,0 @@ -/* From: https://simppru.readthedocs.io/en/latest/examples/led_blink/ */ -while : 1 == 1 { - digital_write(P1_31, true); - delay(250); /* Delay 250 ms */ - digital_write(P1_31, false); - delay(250); -} diff --git a/books/pru-cookbook/01case/code/circle.py b/books/pru-cookbook/01case/code/circle.py deleted file mode 100755 index 1feb41cc..00000000 --- a/books/pru-cookbook/01case/code/circle.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 - -"""A demo client for Open Pixel Control -http://github.com/zestyping/openpixelcontrol - -Runs an LED around in a circle - -""" - -import time -import opc - -ADDRESS = 'localhost:7890' - -# Create a client object -client = opc.Client(ADDRESS) - -# Test if it can connect -if client.can_connect(): - print('connected to %s' % ADDRESS) -else: - # We could exit here, but instead let's just print a warning - # and then keep trying to send pixels in case the server - # appears later - print('WARNING: could not connect to %s' % ADDRESS) - -# Send pixels forever -STR_LEN=16 -for i in range(STR_LEN): - leds = [(0, 0, 0)] * STR_LEN -leds[0] = (0, 127, 0) - -while True: - tmp = leds[0] - for i in range(STR_LEN-1): - leds[i] = leds[i+1] - leds[-1] = tmp - if client.put_pixels(leds, channel=0): - print('sent') - else: - print('not connected') - time.sleep(0.1) - diff --git a/books/pru-cookbook/01case/code/e1.31-test.py b/books/pru-cookbook/01case/code/e1.31-test.py deleted file mode 100755 index 6016c9eb..00000000 --- a/books/pru-cookbook/01case/code/e1.31-test.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env python3 -# Controls a NeoPixel (WS2812) string via E1.31 and FPP -# https://pypi.org/project/sacn/ -# https://github.com/FalconChristmas/fpp/releases -import sacn -import time - -# provide an IP-Address to bind to if you are using Windows and want to use multicast -sender = sacn.sACNsender("192.168.7.1") -sender.start() # start the sending thread -sender.activate_output(1) # start sending out data in the 1st universe -sender[1].multicast = False # set multicast to True -sender[1].destination = "192.168.7.2" # or provide unicast information. -sender.manual_flush = True # turning off the automatic sending of packets -# Keep in mind that if multicast is on, unicast is not used -LEDcount = 24 -# Have green fade is as it goes -data = [] -for i in range(LEDcount): - data.append(0) # Red - data.append(i) # Green - data.append(0) # Blue -sender[1].dmx_data = data -sender.flush() -time.sleep(0.5) - -# Turn off all LEDs -data=[] -for i in range(3*LEDcount): - data.append(0) -sender.flush() -sender[1].dmx_data = data -time.sleep(0.5) - -# Have red fade in -data = [] -for i in range(LEDcount): - data.append(i) - data.append(0) - data.append(0) -sender[1].dmx_data = data -sender.flush() -time.sleep(0.25) - -# Make LED circle 5 times -for j in range(15): - for i in range(LEDcount-1): - data[3*i+0] = 0 - data[3*i+1] = 0 - data[3*i+2] = 0 - data[3*i+3] = 0 - data[3*i+4] = 64 - data[3*i+5] = 0 - sender[1].dmx_data = data - sender.flush() - time.sleep(0.02) -# Wrap around - i = LEDcount-1 - data[0] = 0 - data[1] = 64 - data[2] = 0 - data[3*i+0] = 0 - data[3*i+1] = 0 - data[3*i+2] = 0 - sender[1].dmx_data = data - sender.flush() - time.sleep(0.02) - -time.sleep(2) # send the data for 10 seconds -sender.stop() # do not forget to stop the sender diff --git a/books/pru-cookbook/01case/code/encoder_setup.sh b/books/pru-cookbook/01case/code/encoder_setup.sh deleted file mode 100755 index ffc4ad68..00000000 --- a/books/pru-cookbook/01case/code/encoder_setup.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash -# Configure the pins based on which Beagle is running -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine - -# Configure eQEP pins -if [ $machine = "Black" ]; then - echo " Found" - pins="P9_92 P9_27 P8_35 P8_33 P8_12 P8_11 P8_41 P8_42" -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - pins="P1_31 P2_34 P2_10 P2_24 P2_33" -else - echo " Not Found" - pins="" -fi - -for pin in $pins -do - echo $pin - config-pin $pin qep - config-pin -q $pin -done - -########################################## -# Configure PRU pins -if [ $machine = "Black" ]; then - echo " Found" - pins="P8_16 P8_15" -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - pins="P2_09 P2_18" -else - echo " Not Found" - pins="" -fi - -for pin in $pins -do - echo $pin - config-pin $pin pruin - config-pin -q $pin -done diff --git a/books/pru-cookbook/01case/code/fire.fseq b/books/pru-cookbook/01case/code/fire.fseq deleted file mode 100644 index 4bad5ae76476a87bb7bb71e853e3412b1fc63f29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614428 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%0Dx5r6{zeP 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 Lc7CuLTlW6|<qhqc diff --git a/books/pru-cookbook/01case/code/logic_install.sh b/books/pru-cookbook/01case/code/logic_install.sh deleted file mode 100644 index 7fb76122..00000000 --- a/books/pru-cookbook/01case/code/logic_install.sh +++ /dev/null @@ -1,34 +0,0 @@ -# Instructions for installing BeagleLogic -# https://beaglelogic.readthedocs.io/en/latest/index.html -# From: https://github.com/abhishek-kakkar/BeagleLogic/wiki - -# beaglelogic is installed on the 4.9 kernel, but not the 4.14, so -# if you are running 4.14, switch to 4.9 -sudo /opt/scripts/tools/update_kernel.sh --lts-4_9 -sudo reboot - -git clone https://github.com/abhishek-kakkar/BeagleLogic -cd BeagleLogic -sudo ./install.sh -sudo reboot - -# Now the kernel driver headers -sudo apt install linux-headers-`uname -r` - -modinfo beaglelogic -modprobe beaglelogic - -# From: https://beaglelogic.readthedocs.io/en/latest - -# Here's what works from abhishek -git clone https://github.com/abhishek-kakkar/BeagleLogic -cd BeagleLogic -# 1. Get the dts file from this gist (https://gist.github.com/abhishek-kakkar/0761ef7b10822cff4b3efd194837f49c) - -# 2. cd to 'BeagleLogic/kernel' directory. Put the dts file there. (edited) -# 3. Run 'make overlay' -# 4. Run 'sudo cp -v beaglelogic-00A0.dtbo /lib/firmware/' (edited) -# 5. Run 'sudo update-initramfs -u -k ``uname -r``' (edited) -# (single backticks only, apparently Slack treats single backtick as code) (edited) -# 6. Reboot -# 7. Browse to bone:4000 diff --git a/books/pru-cookbook/01case/code/main_pru1.c b/books/pru-cookbook/01case/code/main_pru1.c deleted file mode 100644 index 8d751b3e..00000000 --- a/books/pru-cookbook/01case/code/main_pru1.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Source Modified by Zubeen Tolani < ZeekHuge - zeekhuge@gmail.com > - * Based on the examples distributed by TI - * - * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * * Neither the name of Texas Instruments Incorporated nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_pru1.h" - -// The function is defined in pru1_asm_blinky.asm in same dir -// We just need to add a declaration here, the defination can be -// seperately linked -extern void start(void); - -void main(void) -{ - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - start(); -} - diff --git a/books/pru-cookbook/01case/code/my-config.json b/books/pru-cookbook/01case/code/my-config.json deleted file mode 100644 index d1534cff..00000000 --- a/books/pru-cookbook/01case/code/my-config.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "outputMode": "ws281x", - "outputMapping": "original-ledscape", - "demoMode": "fade", - "ledsPerStrip": 16, - "usedStripCount": 1, - "colorChannelOrder": "BRG", - "opcTcpPort": 7890, - "opcUdpPort": 7890, - "enableInterpolation": false, - "enableDithering": false, - "enableLookupTable": true, - "lumCurvePower": 2.0000, - "whitePoint": { - "red": 0.9000, - "green": 1.0000, - "blue": 1.0000 - } -} diff --git a/books/pru-cookbook/01case/code/opc.py b/books/pru-cookbook/01case/code/opc.py deleted file mode 100755 index 36a3bbd6..00000000 --- a/books/pru-cookbook/01case/code/opc.py +++ /dev/null @@ -1,177 +0,0 @@ -#!/usr/bin/env python - -"""Python Client library for Open Pixel Control -http://github.com/zestyping/openpixelcontrol - -Sends pixel values to an Open Pixel Control server to be displayed. -http://openpixelcontrol.org/ - -Recommended use: - - import opc - - # Create a client object - client = opc.Client('localhost:7890') - - # Test if it can connect (optional) - if client.can_connect(): - print('connected to %s' % ADDRESS) - else: - # We could exit here, but instead let's just print a warning - # and then keep trying to send pixels in case the server - # appears later - print('WARNING: could not connect to %s' % ADDRESS) - - # Send pixels forever at 30 frames per second - while True: - my_pixels = [(255, 0, 0), (0, 255, 0), (0, 0, 255)] - if client.put_pixels(my_pixels, channel=0): - print('...') - else: - print('not connected') - time.sleep(1/30.0) - -""" - -import socket -import struct -import sys - -SET_PIXEL_COLOURS = 0 # "Set pixel colours" command (see openpixelcontrol.org) - - -class Client(object): - def __init__(self, server_ip_port, long_connection=True, verbose=False): - """Create an OPC client object which sends pixels to an OPC server. - - server_ip_port should be an ip:port or hostname:port as a single string. - For example: '127.0.0.1:7890' or 'localhost:7890' - - There are two connection modes: - * In long connection mode, we try to maintain a single long-lived - connection to the server. If that connection is lost we will try to - create a new one whenever put_pixels is called. This mode is best - when there's high latency or very high framerates. - * In short connection mode, we open a connection when it's needed and - close it immediately after. This means creating a connection for each - call to put_pixels. Keeping the connection usually closed makes it - possible for others to also connect to the server. - - A connection is not established during __init__. To check if a - connection will succeed, use can_connect(). - - If verbose is True, the client will print debugging info to the console. - - """ - self.verbose = verbose - - self._long_connection = long_connection - - self._ip, self._port = server_ip_port.split(':') - self._port = int(self._port) - - self._socket = None # will be None when we're not connected - - def _debug(self, m): - if self.verbose: - print(' %s' % str(m)) - - def _ensure_connected(self): - """Set up a connection if one doesn't already exist. - - Return True on success or False on failure. - - """ - if self._socket: - self._debug('_ensure_connected: already connected, doing nothing') - return True - - try: - self._debug('_ensure_connected: trying to connect...') - self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self._socket.settimeout(1) - self._socket.connect((self._ip, self._port)) - self._debug('_ensure_connected: ...success') - return True - except socket.error: - self._debug('_ensure_connected: ...failure') - self._socket = None - return False - - def disconnect(self): - """Drop the connection to the server, if there is one.""" - self._debug('disconnecting') - if self._socket: - self._socket.close() - self._socket = None - - def can_connect(self): - """Try to connect to the server. - - Return True on success or False on failure. - - If in long connection mode, this connection will be kept and re-used for - subsequent put_pixels calls. - - """ - success = self._ensure_connected() - if not self._long_connection: - self.disconnect() - return success - - def put_pixels(self, pixels, channel=0): - """Send the list of pixel colors to the OPC server on the given channel. - - channel: Which strand of lights to send the pixel colors to. - Must be an int in the range 0-255 inclusive. - 0 is a special value which means "all channels". - - pixels: A list of 3-tuples representing rgb colors. - Each value in the tuple should be in the range 0-255 inclusive. - For example: [(255, 255, 255), (0, 0, 0), (127, 0, 0)] - Floats will be rounded down to integers. - Values outside the legal range will be clamped. - - Will establish a connection to the server as needed. - - On successful transmission of pixels, return True. - On failure (bad connection), return False. - - The list of pixel colors will be applied to the LED string starting - with the first LED. It's not possible to send a color just to one - LED at a time (unless it's the first one). - - """ - self._debug('put_pixels: connecting') - is_connected = self._ensure_connected() - if not is_connected: - self._debug('put_pixels: not connected. ignoring these pixels.') - return False - - # build OPC message - command = SET_PIXEL_COLOURS - header = struct.pack('>BBH', channel, SET_PIXEL_COLOURS, len(pixels)*3) - pieces = [struct.pack( - 'BBB', - min(255, max(0, int(r))), - min(255, max(0, int(g))), - min(255, max(0, int(b))) - ) for r, g, b in pixels] - if bytes is str: - message = header + ''.join(pieces) - else: - message = header + b''.join(pieces) - - self._debug('put_pixels: sending pixels to server') - try: - self._socket.send(message) - except socket.error: - self._debug('put_pixels: connection lost. could not send pixels.') - self._socket = None - return False - - if not self._long_connection: - self._debug('put_pixels: disconnecting') - self.disconnect() - - return True diff --git a/books/pru-cookbook/01case/code/pru1-servo.asm b/books/pru-cookbook/01case/code/pru1-servo.asm deleted file mode 100644 index c8e66e52..00000000 --- a/books/pru-cookbook/01case/code/pru1-servo.asm +++ /dev/null @@ -1,162 +0,0 @@ -;* -;* Copyright (C) 2016 Zubeen Tolani <ZeekHuge - zeekhuge@gmail.com> -;* -;* This file is as an example to show how to develope -;* and compile inline assembly code for PRUs -;* -;* This program is free software; you can redistribute it and/or modify -;* it under the terms of the GNU General Public License version 2 as -;* published by the Free Software Foundation. - - - .cdecls "main_pru1.c" - -DELAY .macro time, reg - LDI32 reg, time - QBEQ $E?, reg, 0 -$M?: SUB reg, reg, 1 - QBNE $M?, reg, 0 -$E?: - .endm - - - .clink - .global start -start: - LDI R30, 0xFFFF - DELAY 10000000, r11 - LDI R30, 0x0000 - DELAY 10000000, r11 -; JMP start - -; HALT - - -; these pin definitions are specific to SD-101C Robotics Cape - .asg r30.t8, CH1BIT ; P8_27 - .asg r30.t10, CH2BIT ; P8_28 - .asg r30.t9, CH3BIT ; P8_29 - .asg r30.t11, CH4BIT ; P8_30 - .asg r30.t6, CH5BIT ; P8_39 - .asg r30.t7, CH6BIT ; P8_40 - .asg r30.t4, CH7BIT ; P8_41 - .asg r30.t5, CH8BIT ; P8_42 - - .asg C4, CONST_SYSCFG - .asg C28, CONST_PRUSHAREDRAM - - .asg 0x22000, PRU0_CTRL - .asg 0x24000, PRU1_CTRL ; page 19 - .asg 0x28, CTPPR0 ; page 75 - - .asg 0x000, OWN_RAM - .asg 0x020, OTHER_RAM - .asg 0x100, SHARED_RAM ; This is so prudebug can find it. - - LBCO &r0, CONST_SYSCFG, 4, 4 ; Enable OCP master port - CLR r0, r0, 4 ; Clear SYSCFG[STANDBY_INIT] to enable OCP master port - SBCO &r0, CONST_SYSCFG, 4, 4 - -; Configure the programmable pointer register for PRU0 by setting c28_pointer[15:0] - LDI r0, SHARED_RAM ; Set C28 to point to shared RAM - LDI32 r1, PRU1_CTRL + CTPPR0 ; Note we use beginning of shared ram unlike example which - SBBO &r0, r1, 0, 4 ; page 25 - - LDI r9, 0x0 ; erase r9 to use to use later - - LDI r0, 0x0 ; clear internal counters - LDI r1, 0x0 - LDI r2, 0x0 - LDI r3, 0x0 - LDI r4, 0x0 - LDI r5, 0x0 - LDI r6, 0x0 - LDI32 r7, 0x0 - LDI r30, 0x0 ; turn off GPIO outputs - - -; Beginning of loop, should always take 48 instructions to complete -CH1: - QBEQ CLR1, r0, 0 ; If timer is 0, jump to clear channel - SET r30, CH1BIT ; If non-zero turn on the corresponding channel - SUB r0, r0, 1 ; Subtract one from timer - CLR r9, r9.t1 ; waste a cycle for timing - SBCO &r9, CONST_PRUSHAREDRAM, 0, 4 ; write 0 to shared memory -CH2: - QBEQ CLR2, r1, 0 - SET r30, CH2BIT - SUB r1, r1, 1 - CLR r9, r9.t1 - SBCO &r9, CONST_PRUSHAREDRAM, 4, 4 -CH3: - QBEQ CLR3, r2, 0 - SET r30, CH3BIT - SUB r2, r2, 1 - CLR r9, r9.t1 - SBCO &r9, CONST_PRUSHAREDRAM, 8, 4 -CH4: - QBEQ CLR4, r3, 0 - SET r30, CH4BIT - SUB r3, r3, 1 - CLR r9, r9.t1 - SBCO &r9, CONST_PRUSHAREDRAM, 12, 4 -CH5: - QBEQ CLR5, r4, 0 - SET r30, CH5BIT - SUB r4, r4, 1 - CLR r9, r9.t1 - SBCO &r9, CONST_PRUSHAREDRAM, 16, 4 -CH6: - QBEQ CLR6, r5, 0 - SET r30, CH6BIT - SUB r5, r5, 1 - CLR r9, r9.t1 - SBCO &r9, CONST_PRUSHAREDRAM, 20, 4 -CH7: - QBEQ CLR7, r6, 0 - SET r30, CH7BIT - SUB r6, r6, 1 - CLR r9, r9.t1 - SBCO &r9, CONST_PRUSHAREDRAM, 24, 4 -CH8: - QBEQ CLR8, r7, 0 - SET r30, CH8BIT - SUB r7, r7, 1 - SBCO &r9, CONST_PRUSHAREDRAM, 28, 4 - - QBA CH1 ; return to beginning of loop - ; no need to waste a cycle for timing here because of the QBA above - - -CLR1: - CLR r30, CH1BIT ; turn off the corresponding channel - LBCO &r0, CONST_PRUSHAREDRAM, 0, 4 ; Load new timer register - QBA CH2 -CLR2: - CLR r30, CH2BIT - LBCO &r1, CONST_PRUSHAREDRAM, 4, 4 - QBA CH3 -CLR3: - CLR r30, CH3BIT - LBCO &r2, CONST_PRUSHAREDRAM, 8, 4 - QBA CH4 -CLR4: - CLR r30, CH4BIT - LBCO &r3, CONST_PRUSHAREDRAM, 12, 4 - QBA CH5 -CLR5: - CLR r30, CH5BIT - LBCO &r4, CONST_PRUSHAREDRAM, 16, 4 - QBA CH6 -CLR6: - CLR r30, CH6BIT - LBCO &r5, CONST_PRUSHAREDRAM, 20, 4 - QBA CH7 -CLR7: - CLR r30, CH7BIT - LBCO &r6, CONST_PRUSHAREDRAM, 24, 4 - QBA CH8 -CLR8: - CLR r30, CH8BIT - LBCO &r7, CONST_PRUSHAREDRAM, 28, 4 - QBA CH1 ; return to beginning of loop diff --git a/books/pru-cookbook/01case/code/servo-test.c b/books/pru-cookbook/01case/code/servo-test.c deleted file mode 100644 index 1f94e274..00000000 --- a/books/pru-cookbook/01case/code/servo-test.c +++ /dev/null @@ -1,84 +0,0 @@ -/* - * - * servo tester - * (c) Copyright 2016 - * Mark A. Yoder, 20-July-2016 - * - */ - -#include <stdio.h> -#include <fcntl.h> -#include <sys/mman.h> -#include "robotics_cape_defs.h" - -#define PRU_ADDR 0x4A300000 // Start of PRU memory Page 184 am335x TRM -#define PRU_LEN 0x80000 // Length of PRU memory -#define PRU_SHAREDMEM 0x10000 // Offset to shared memory - -unsigned int *prusharedMem_32int_ptr; // Points to the start of the shared memory - -/******************************************************************************* -* int send_servo_pulse_us(int ch, int us) -* -* Sends a single pulse of duration us (microseconds) to a single channel (ch) -*******************************************************************************/ -int send_servo_pulse_us(int ch, int us) { - // Sanity Checks - if(ch<1 || ch>SERVO_CHANNELS){ - printf("ERROR: Servo Channel must be between 1&%d\n", SERVO_CHANNELS); - return -1; - } if(prusharedMem_32int_ptr == NULL){ - printf("ERROR: PRU servo Controller not initialized\n"); - return -1; - } - // PRU runs at 200Mhz. find #loops needed - unsigned int num_loops = ((us*200.0)/PRU_SERVO_LOOP_INSTRUCTIONS); - // printf("num_loops: %d\n", num_loops); - // write to PRU shared memory - prusharedMem_32int_ptr[ch-1] = num_loops; - return 0; -} - -int main(int argc, char *argv[]) -{ - unsigned int *pru; // Points to start of PRU memory. - int fd; - printf("Servo tester\n"); - - fd = open ("/dev/mem", O_RDWR | O_SYNC); - if (fd == -1) { - printf ("ERROR: could not open /dev/mem.\n\n"); - return 1; - } - pru = mmap (0, PRU_LEN, PROT_READ | PROT_WRITE, MAP_SHARED, fd, PRU_ADDR); - if (pru == MAP_FAILED) { - printf ("ERROR: could not map memory.\n\n"); - return 1; - } - close(fd); - printf ("Using /dev/mem.\n"); - - prusharedMem_32int_ptr = pru + PRU_SHAREDMEM/4; // Points to start of shared memory - - // while(1) { - // printf("value to store: "); - // scanf("%d", &value); - // printf("Storing: %d in %lx\n", value, addr); - // pru[addr/4] = value; - // } - - int i; - while(1) { - for(i=1; i<=SERVO_CHANNELS; i++) { - send_servo_pulse_us(i, 10*i); - } - usleep(200); - } - - if(munmap(pru, PRU_LEN)) { - printf("munmap failed\n"); - } else { - printf("munmap succeeded\n"); - } -} - diff --git a/books/pru-cookbook/01case/code/servos_setup.sh b/books/pru-cookbook/01case/code/servos_setup.sh deleted file mode 100755 index 330e8f34..00000000 --- a/books/pru-cookbook/01case/code/servos_setup.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -# Configure the PRU pins based on which Beagle is running -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine -if [ $machine = "Black" ]; then - echo " Found" - pins="P8_27 P8_28 P8_29 P8_30 P8_39 P8_40 P8_41 P8_42" -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - pins="P2_35 P1_35 P1_02 P1_04" -else - echo " Not Found" - pins="" -fi - -for pin in $pins -do - echo $pin - config-pin $pin pruout - config-pin -q $pin -done \ No newline at end of file diff --git a/books/pru-cookbook/02start/code/Makefile b/books/pru-cookbook/02start/code/Makefile deleted file mode 100644 index a7557fda..00000000 --- a/books/pru-cookbook/02start/code/Makefile +++ /dev/null @@ -1 +0,0 @@ -include /var/lib/cloud9/common/Makefile diff --git a/books/pru-cookbook/02start/code/ai.notes b/books/pru-cookbook/02start/code/ai.notes deleted file mode 100644 index d11ac1d4..00000000 --- a/books/pru-cookbook/02start/code/ai.notes +++ /dev/null @@ -1,59 +0,0 @@ -Here are some differences between the AI and the Black for the PRU. - -Black -/sys/devices/platform/ocp/ - 4a326004.pruss-soc-bus/ - 4a300000.pruss/ - 4a334000.pru/remoteproc/remoteproc1 - 4a338000.pru/remoteproc/remoteproc2 - - -AI -/sys/devices/platform/44000000.ocp/ - 4b226004.pruss-soc-bus/ - 4b200000.pruss/ - 4b234000.pru/remoteproc/remoteproc0 - 4b238000.pru/remoteproc/remoteproc1 - - - 4b2a6004.pruss-soc-bus/ - 4b280000.pruss/ - 4b2b4000.pru/remoteproc/remoteproc2 - 4b2b8000.pru/remoteproc/remoteproc3 - -LED addresses -https://github.com/beagleboard/BeagleBoard-DeviceTrees/blob/v4.19.x-ti/src/arm/am5729-beagleboneai.dts#L134-L171 - led0 { - label = "beaglebone:green:usr0"; - gpios = <&gpio3 17 GPIO_ACTIVE_HIGH>; - linux,default-trigger = "heartbeat"; - default-state = "off"; - }; - - led1 { - label = "beaglebone:green:usr1"; - gpios = <&gpio5 5 GPIO_ACTIVE_HIGH>; - linux,default-trigger = "mmc0"; - default-state = "off"; - }; - - led2 { - label = "beaglebone:green:usr2"; - gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>; - linux,default-trigger = "cpu"; - default-state = "off"; - }; - - led3 { - label = "beaglebone:green:usr3"; - gpios = <&gpio3 14 GPIO_ACTIVE_HIGH>; - linux,default-trigger = "mmc1"; - default-state = "off"; - }; - - led4 { - label = "beaglebone:green:usr4"; - gpios = <&gpio3 7 GPIO_ACTIVE_HIGH>; - linux,default-trigger = "phy0assoc"; - -GPIO Addresses: Page 404 for TRM \ No newline at end of file diff --git a/books/pru-cookbook/02start/code/hello.pru0.c b/books/pru-cookbook/02start/code/hello.pru0.c deleted file mode 100644 index ab61e79e..00000000 --- a/books/pru-cookbook/02start/code/hello.pru0.c +++ /dev/null @@ -1,35 +0,0 @@ -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -volatile register unsigned int __R30; -volatile register unsigned int __R31; - -void main(void) { - int i; - - uint32_t *gpio1 = (uint32_t *)GPIO1; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - for(i=0; i<10; i++) { - gpio1[GPIO_SETDATAOUT] = USR3; // The the USR3 LED on - - __delay_cycles(500000000/5); // Wait 1/2 second - - gpio1[GPIO_CLEARDATAOUT] = USR3; - - __delay_cycles(500000000/5); - - } - __halt(); -} - -// Turns off triggers -#pragma DATA_SECTION(init_pins, ".init_pins") -#pragma RETAIN(init_pins) -const char init_pins[] = - "/sys/class/leds/beaglebone:green:usr3/trigger\0none\0" \ - "\0\0"; diff --git a/books/pru-cookbook/02start/code/hello.pru1_1.c b/books/pru-cookbook/02start/code/hello.pru1_1.c deleted file mode 100644 index 8cb8146f..00000000 --- a/books/pru-cookbook/02start/code/hello.pru1_1.c +++ /dev/null @@ -1,35 +0,0 @@ -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -volatile register unsigned int __R30; -volatile register unsigned int __R31; - -void main(void) { - int i; - - uint32_t *gpio3 = (uint32_t *)GPIO3; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - for(i=0; i<10; i++) { - gpio3[GPIO_SETDATAOUT] = USR3; // The the USR3 LED on - - __delay_cycles(500000000/5); // Wait 1/2 second - - gpio3[GPIO_CLEARDATAOUT] = USR3; - - __delay_cycles(500000000/5); - - } - __halt(); -} - -// Turns off triggers -#pragma DATA_SECTION(init_pins, ".init_pins") -#pragma RETAIN(init_pins) -const char init_pins[] = - "/sys/class/leds/beaglebone:green:usr3/trigger\0none\0" \ - "\0\0"; diff --git a/books/pru-cookbook/02start/code/hello2.pru0.c b/books/pru-cookbook/02start/code/hello2.pru0.c deleted file mode 100644 index d268d33b..00000000 --- a/books/pru-cookbook/02start/code/hello2.pru0.c +++ /dev/null @@ -1,42 +0,0 @@ -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -volatile register unsigned int __R30; -volatile register unsigned int __R31; - -void main(void) { - int i; - - uint32_t *gpio1 = (uint32_t *)GPIO1; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - for(i=0; i<10; i++) { - gpio1[GPIO_SETDATAOUT] = USR1; // The the USR3 LED on - gpio1[GPIO_CLEARDATAOUT] = USR2; - - // __R30 |= gpio; // Set the GPIO pin to 1 - - __delay_cycles(500000000/5); // Wait 1/2 second - - gpio1[GPIO_CLEARDATAOUT] = USR1; - gpio1[GPIO_SETDATAOUT] = USR2; - - // __R30 &= ~gpio; // Clearn the GPIO pin - - __delay_cycles(500000000/5); - - } - __halt(); -} - -// Turns off triggers -#pragma DATA_SECTION(init_pins, ".init_pins") -#pragma RETAIN(init_pins) -const char init_pins[] = - "/sys/class/leds/beaglebone:green:usr1/trigger\0none\0" \ - "/sys/class/leds/beaglebone:green:usr2/trigger\0none\0" \ - "\0\0"; diff --git a/books/pru-cookbook/02start/code/hello2.pru1.c b/books/pru-cookbook/02start/code/hello2.pru1.c deleted file mode 100644 index 15df5449..00000000 --- a/books/pru-cookbook/02start/code/hello2.pru1.c +++ /dev/null @@ -1,43 +0,0 @@ -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -volatile register unsigned int __R30; -volatile register unsigned int __R31; - -void main(void) { - int i; - - uint32_t *gpio1 = (uint32_t *)GPIO1; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - for(i=0; i<10; i++) { - gpio1[GPIO_SETDATAOUT] = USR1; // The the USR3 LED on - gpio1[GPIO_CLEARDATAOUT] = USR2; - - // __R30 |= gpio; // Set the GPIO pin to 1 - - __delay_cycles(500000000/5); // Wait 1/2 second - - gpio1[GPIO_CLEARDATAOUT] = USR1; - gpio1[GPIO_SETDATAOUT] = USR2; - - // __R30 &= ~gpio; // Clearn the GPIO pin - - __delay_cycles(500000000/5); - - } - __halt(); -} - -// Turns off triggers -#pragma DATA_SECTION(init_pins, ".init_pins") -#pragma RETAIN(init_pins) -const char init_pins[] = - "/sys/class/leds/beaglebone:green:usr1/trigger\0none\0" \ - "/sys/class/leds/beaglebone:green:usr2/trigger\0none\0" \ - "\0\0"; - diff --git a/books/pru-cookbook/02start/code/hello2.pru1_0.c b/books/pru-cookbook/02start/code/hello2.pru1_0.c deleted file mode 100644 index 564e1bc9..00000000 --- a/books/pru-cookbook/02start/code/hello2.pru1_0.c +++ /dev/null @@ -1,63 +0,0 @@ -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -volatile register unsigned int __R30; -volatile register unsigned int __R31; - -void main(void) { - int i; - - // uint32_t *gpio1 = (uint32_t *)GPIO1; - // uint32_t *gpio2 = (uint32_t *)GPIO2; - uint32_t *gpio3 = (uint32_t *)GPIO3; - // uint32_t *gpio4 = (uint32_t *)GPIO4; - uint32_t *gpio5 = (uint32_t *)GPIO5; - uint32_t *gpio6 = (uint32_t *)GPIO6; - // uint32_t *gpio7 = (uint32_t *)GPIO7; - uint32_t *gpio8 = (uint32_t *)GPIO8; - - // Select which pins to toggle. These are all on pru1_1 - uint32_t gpio = P9_16 | P8_15 | P8_16 | P8_26; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - for(i=0; i<100; i++) { - gpio5[GPIO_SETDATAOUT] = USR1; // Turn the USR1 LED on - gpio3[GPIO_CLEARDATAOUT] = USR2; - gpio8[GPIO_SETDATAOUT] = P8_17; - gpio6[GPIO_SETDATAOUT] = P9_25; - - __R30 |= gpio; // Set the GPIO pin to 1 - - __delay_cycles(500000000/5); // Wait 1/2 second - - gpio5[GPIO_CLEARDATAOUT] = USR1; - gpio3[GPIO_SETDATAOUT] = USR2; - gpio8[GPIO_CLEARDATAOUT] = P8_17; - gpio6[GPIO_CLEARDATAOUT] = P9_25; - - __R30 &= ~gpio; // Clear the GPIO pin - - __delay_cycles(500000000/5); - - if((__R31&P8_19) == P8_19) { - gpio3[GPIO_CLEARDATAOUT] = USR3; // Turn on LED - } else - gpio3[GPIO_SETDATAOUT] = USR3; // Turn off LED - } - __halt(); -} - -// Turns off triggers -#pragma DATA_SECTION(init_pins, ".init_pins") -#pragma RETAIN(init_pins) -const char init_pins[] = - "/sys/class/leds/beaglebone:green:usr1/trigger\0none\0" \ - "/sys/class/leds/beaglebone:green:usr2/trigger\0none\0" \ - "/sys/class/gpio/export\0 177\0" \ - "/sys/class/gpio/gpio177/direction\0out\0" \ - "\0\0"; - diff --git a/books/pru-cookbook/02start/code/hello2.pru1_1.c b/books/pru-cookbook/02start/code/hello2.pru1_1.c deleted file mode 100644 index 564e1bc9..00000000 --- a/books/pru-cookbook/02start/code/hello2.pru1_1.c +++ /dev/null @@ -1,63 +0,0 @@ -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -volatile register unsigned int __R30; -volatile register unsigned int __R31; - -void main(void) { - int i; - - // uint32_t *gpio1 = (uint32_t *)GPIO1; - // uint32_t *gpio2 = (uint32_t *)GPIO2; - uint32_t *gpio3 = (uint32_t *)GPIO3; - // uint32_t *gpio4 = (uint32_t *)GPIO4; - uint32_t *gpio5 = (uint32_t *)GPIO5; - uint32_t *gpio6 = (uint32_t *)GPIO6; - // uint32_t *gpio7 = (uint32_t *)GPIO7; - uint32_t *gpio8 = (uint32_t *)GPIO8; - - // Select which pins to toggle. These are all on pru1_1 - uint32_t gpio = P9_16 | P8_15 | P8_16 | P8_26; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - for(i=0; i<100; i++) { - gpio5[GPIO_SETDATAOUT] = USR1; // Turn the USR1 LED on - gpio3[GPIO_CLEARDATAOUT] = USR2; - gpio8[GPIO_SETDATAOUT] = P8_17; - gpio6[GPIO_SETDATAOUT] = P9_25; - - __R30 |= gpio; // Set the GPIO pin to 1 - - __delay_cycles(500000000/5); // Wait 1/2 second - - gpio5[GPIO_CLEARDATAOUT] = USR1; - gpio3[GPIO_SETDATAOUT] = USR2; - gpio8[GPIO_CLEARDATAOUT] = P8_17; - gpio6[GPIO_CLEARDATAOUT] = P9_25; - - __R30 &= ~gpio; // Clear the GPIO pin - - __delay_cycles(500000000/5); - - if((__R31&P8_19) == P8_19) { - gpio3[GPIO_CLEARDATAOUT] = USR3; // Turn on LED - } else - gpio3[GPIO_SETDATAOUT] = USR3; // Turn off LED - } - __halt(); -} - -// Turns off triggers -#pragma DATA_SECTION(init_pins, ".init_pins") -#pragma RETAIN(init_pins) -const char init_pins[] = - "/sys/class/leds/beaglebone:green:usr1/trigger\0none\0" \ - "/sys/class/leds/beaglebone:green:usr2/trigger\0none\0" \ - "/sys/class/gpio/export\0 177\0" \ - "/sys/class/gpio/gpio177/direction\0out\0" \ - "\0\0"; - diff --git a/books/pru-cookbook/02start/code/hello2.pru2_0.c b/books/pru-cookbook/02start/code/hello2.pru2_0.c deleted file mode 100644 index 564e1bc9..00000000 --- a/books/pru-cookbook/02start/code/hello2.pru2_0.c +++ /dev/null @@ -1,63 +0,0 @@ -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -volatile register unsigned int __R30; -volatile register unsigned int __R31; - -void main(void) { - int i; - - // uint32_t *gpio1 = (uint32_t *)GPIO1; - // uint32_t *gpio2 = (uint32_t *)GPIO2; - uint32_t *gpio3 = (uint32_t *)GPIO3; - // uint32_t *gpio4 = (uint32_t *)GPIO4; - uint32_t *gpio5 = (uint32_t *)GPIO5; - uint32_t *gpio6 = (uint32_t *)GPIO6; - // uint32_t *gpio7 = (uint32_t *)GPIO7; - uint32_t *gpio8 = (uint32_t *)GPIO8; - - // Select which pins to toggle. These are all on pru1_1 - uint32_t gpio = P9_16 | P8_15 | P8_16 | P8_26; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - for(i=0; i<100; i++) { - gpio5[GPIO_SETDATAOUT] = USR1; // Turn the USR1 LED on - gpio3[GPIO_CLEARDATAOUT] = USR2; - gpio8[GPIO_SETDATAOUT] = P8_17; - gpio6[GPIO_SETDATAOUT] = P9_25; - - __R30 |= gpio; // Set the GPIO pin to 1 - - __delay_cycles(500000000/5); // Wait 1/2 second - - gpio5[GPIO_CLEARDATAOUT] = USR1; - gpio3[GPIO_SETDATAOUT] = USR2; - gpio8[GPIO_CLEARDATAOUT] = P8_17; - gpio6[GPIO_CLEARDATAOUT] = P9_25; - - __R30 &= ~gpio; // Clear the GPIO pin - - __delay_cycles(500000000/5); - - if((__R31&P8_19) == P8_19) { - gpio3[GPIO_CLEARDATAOUT] = USR3; // Turn on LED - } else - gpio3[GPIO_SETDATAOUT] = USR3; // Turn off LED - } - __halt(); -} - -// Turns off triggers -#pragma DATA_SECTION(init_pins, ".init_pins") -#pragma RETAIN(init_pins) -const char init_pins[] = - "/sys/class/leds/beaglebone:green:usr1/trigger\0none\0" \ - "/sys/class/leds/beaglebone:green:usr2/trigger\0none\0" \ - "/sys/class/gpio/export\0 177\0" \ - "/sys/class/gpio/gpio177/direction\0out\0" \ - "\0\0"; - diff --git a/books/pru-cookbook/02start/code/hello2.pru2_1.c b/books/pru-cookbook/02start/code/hello2.pru2_1.c deleted file mode 100644 index 564e1bc9..00000000 --- a/books/pru-cookbook/02start/code/hello2.pru2_1.c +++ /dev/null @@ -1,63 +0,0 @@ -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -volatile register unsigned int __R30; -volatile register unsigned int __R31; - -void main(void) { - int i; - - // uint32_t *gpio1 = (uint32_t *)GPIO1; - // uint32_t *gpio2 = (uint32_t *)GPIO2; - uint32_t *gpio3 = (uint32_t *)GPIO3; - // uint32_t *gpio4 = (uint32_t *)GPIO4; - uint32_t *gpio5 = (uint32_t *)GPIO5; - uint32_t *gpio6 = (uint32_t *)GPIO6; - // uint32_t *gpio7 = (uint32_t *)GPIO7; - uint32_t *gpio8 = (uint32_t *)GPIO8; - - // Select which pins to toggle. These are all on pru1_1 - uint32_t gpio = P9_16 | P8_15 | P8_16 | P8_26; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - for(i=0; i<100; i++) { - gpio5[GPIO_SETDATAOUT] = USR1; // Turn the USR1 LED on - gpio3[GPIO_CLEARDATAOUT] = USR2; - gpio8[GPIO_SETDATAOUT] = P8_17; - gpio6[GPIO_SETDATAOUT] = P9_25; - - __R30 |= gpio; // Set the GPIO pin to 1 - - __delay_cycles(500000000/5); // Wait 1/2 second - - gpio5[GPIO_CLEARDATAOUT] = USR1; - gpio3[GPIO_SETDATAOUT] = USR2; - gpio8[GPIO_CLEARDATAOUT] = P8_17; - gpio6[GPIO_CLEARDATAOUT] = P9_25; - - __R30 &= ~gpio; // Clear the GPIO pin - - __delay_cycles(500000000/5); - - if((__R31&P8_19) == P8_19) { - gpio3[GPIO_CLEARDATAOUT] = USR3; // Turn on LED - } else - gpio3[GPIO_SETDATAOUT] = USR3; // Turn off LED - } - __halt(); -} - -// Turns off triggers -#pragma DATA_SECTION(init_pins, ".init_pins") -#pragma RETAIN(init_pins) -const char init_pins[] = - "/sys/class/leds/beaglebone:green:usr1/trigger\0none\0" \ - "/sys/class/leds/beaglebone:green:usr2/trigger\0none\0" \ - "/sys/class/gpio/export\0 177\0" \ - "/sys/class/gpio/gpio177/direction\0out\0" \ - "\0\0"; - diff --git a/books/pru-cookbook/02start/code/setup.sh b/books/pru-cookbook/02start/code/setup.sh deleted file mode 100755 index eaf9943a..00000000 --- a/books/pru-cookbook/02start/code/setup.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -export TARGET=hello.pru0 - -echo TARGET=$TARGET diff --git a/books/pru-cookbook/02start/code/setup2.sh b/books/pru-cookbook/02start/code/setup2.sh deleted file mode 100755 index 76dd6713..00000000 --- a/books/pru-cookbook/02start/code/setup2.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -export TARGET=hello2.pru1 - -echo TARGET=$TARGET diff --git a/books/pru-cookbook/02start/start.rst b/books/pru-cookbook/02start/start.rst index e7a40243..d2188dad 100644 --- a/books/pru-cookbook/02start/start.rst +++ b/books/pru-cookbook/02start/start.rst @@ -278,29 +278,29 @@ You are ready to start playing with the examples and need to find the code. Solution --------- -You can find the code (and the whole book) on the PRU Cookbook github site: -<https://github.com/MarkAYoder/PRUCookbook/tree/master/docs>. Just clone -it on your Beagle and then look in the *docs* directory. +You can find the code on the PRU Cookbook Code project on git.beagleboard.org: +https://git.beagleboard.org/beagleboard/pru-cookbook-code. Just clone +it on your Beagle. -.. code-block::bash - - bone$ *git clone https://github.com/MarkAYoder/PRUCookbook.git* - bone$ *cd PRUCookbook/docs/* - bone$ *ls -F* - 01case/ 05blocks/ book.adoc copyright.adoc index.html projects.adoc - 02start/ 06io/ book.html hack.sh* Makefile projects.html - 03details/ 07more/ book.pdf header.adoc notes.adoc style.adoc - 04debug/ 08ai/ common/ index.adoc notes.html style.html +.. code-block:: shell-session + bone$ git clone https://git.beagleboard.org/beagleboard/pru-cookbook-code + bone$ cd pru-cookbook-code + bone$ ls -F + 01case/ 03details/ 05blocks/ 07more/ README.md + 02start/ 04details/ 06io/ 08ai/ Each chapter has its own directory and within that directory is a **code** directory that has all of the code. -.. code-block::bash +.. code-block:: shell-session - bone$ *cd 02start/code/* - bone$ *ls* + bone$ cd 02start/ + bone$ ls hello.pru0.c hello.pru1_1.c Makefile setup.sh + ai.notes hello2.pru1_1.c hello2.pru2_1.c Makefile + hello2.pru0.c hello2.pru1.c hello.pru0.c setup2.sh* + hello2.pru1_0.c hello2.pru2_0.c hello.pru1_1.c setup.sh* Go and explore. @@ -331,10 +331,10 @@ is some code that blinks the ``USR3`` LED ten times using the PRU. Later chapters will go into details of how this code works, but if you want to run it right now do the following. -.. code-block:: bash +.. code-block:: shell-session - bone$ *git clone https://github.com/MarkAYoder/PRUCookbook.git* - bone$ *cd PRUCookbook/docs/02start/code* + bone$ git clone https://git.beagleboard.org/beagleboard/pru-cookbook-code + bone$ cd pru-cookbook-code/02start .. tip:: @@ -347,9 +347,9 @@ to run it right now do the following. Running Code on the Black or Pocket ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -.. code-block:: bash +.. code-block:: shell-session - bone$ *make TARGET=hello.pru0* + bone$ make TARGET=hello.pru0 /var/lib/cloud9/common/Makefile:28: MODEL=TI_AM335x_BeagleBone_Black,TARGET=hello.pru0,COMMON=/var/lib/cloud9/common /var/lib/cloud9/common/Makefile:147: GEN_DIR=/tmp/cloud9-examples,CHIP=am335x,PROC=pru,PRUN=0,PRU_DIR=/sys/class/remoteproc/remoteproc1,EXE=.out - Stopping PRU 0 @@ -366,9 +366,9 @@ Running Code on the Black or Pocket Running Code on the AI ~~~~~~~~~~~~~~~~~~~~~~~ -.. code-block:: bash +.. code-block:: shell-session - bone$ *make TARGET=hello.pru1_1* + bone$ make TARGET=hello.pru1_1 /var/lib/cloud9/common/Makefile:28: MODEL=BeagleBoard.org_BeagleBone_AI,TARGET=hello.pru1_1 - Stopping PRU 1_1 CC hello.pru1_1.c diff --git a/books/pru-cookbook/03details/code/Makefile b/books/pru-cookbook/03details/code/Makefile deleted file mode 100644 index a7557fda..00000000 --- a/books/pru-cookbook/03details/code/Makefile +++ /dev/null @@ -1 +0,0 @@ -include /var/lib/cloud9/common/Makefile diff --git a/books/pru-cookbook/03details/code/am335x_pru.cmd b/books/pru-cookbook/03details/code/am335x_pru.cmd deleted file mode 100644 index 67005475..00000000 --- a/books/pru-cookbook/03details/code/am335x_pru.cmd +++ /dev/null @@ -1,87 +0,0 @@ -/****************************************************************************/ -/* AM335x_PRU.cmd */ -/* Copyright (c) 2015 Texas Instruments Incorporated */ -/* */ -/* Description: This file is a linker command file that can be used for */ -/* linking PRU programs built with the C compiler and */ -/* the resulting .out file on an AM335x device. */ -/****************************************************************************/ - --cr /* Link using C conventions */ - -/* Specify the System Memory Map */ -MEMORY -{ - PAGE 0: - PRU_IMEM : org = 0x00000000 len = 0x00002000 /* 8kB PRU0 Instruction RAM */ - - PAGE 1: - - /* RAM */ - - PRU_DMEM_0_1 : org = 0x00000000 len = 0x00002000 CREGISTER=24 /* 8kB PRU Data RAM 0_1 */ - PRU_DMEM_1_0 : org = 0x00002000 len = 0x00002000 CREGISTER=25 /* 8kB PRU Data RAM 1_0 */ - - PAGE 2: - PRU_SHAREDMEM : org = 0x00010000 len = 0x00003000 CREGISTER=28 /* 12kB Shared RAM */ - - DDR : org = 0x80000000 len = 0x00000100 CREGISTER=31 - L3OCMC : org = 0x40000000 len = 0x00010000 CREGISTER=30 - - - /* Peripherals */ - - PRU_CFG : org = 0x00026000 len = 0x00000044 CREGISTER=4 - PRU_ECAP : org = 0x00030000 len = 0x00000060 CREGISTER=3 - PRU_IEP : org = 0x0002E000 len = 0x0000031C CREGISTER=26 - PRU_INTC : org = 0x00020000 len = 0x00001504 CREGISTER=0 - PRU_UART : org = 0x00028000 len = 0x00000038 CREGISTER=7 - - DCAN0 : org = 0x481CC000 len = 0x000001E8 CREGISTER=14 - DCAN1 : org = 0x481D0000 len = 0x000001E8 CREGISTER=15 - DMTIMER2 : org = 0x48040000 len = 0x0000005C CREGISTER=1 - PWMSS0 : org = 0x48300000 len = 0x000002C4 CREGISTER=18 - PWMSS1 : org = 0x48302000 len = 0x000002C4 CREGISTER=19 - PWMSS2 : org = 0x48304000 len = 0x000002C4 CREGISTER=20 - GEMAC : org = 0x4A100000 len = 0x0000128C CREGISTER=9 - I2C1 : org = 0x4802A000 len = 0x000000D8 CREGISTER=2 - I2C2 : org = 0x4819C000 len = 0x000000D8 CREGISTER=17 - MBX0 : org = 0x480C8000 len = 0x00000140 CREGISTER=22 - MCASP0_DMA : org = 0x46000000 len = 0x00000100 CREGISTER=8 - MCSPI0 : org = 0x48030000 len = 0x000001A4 CREGISTER=6 - MCSPI1 : org = 0x481A0000 len = 0x000001A4 CREGISTER=16 - MMCHS0 : org = 0x48060000 len = 0x00000300 CREGISTER=5 - SPINLOCK : org = 0x480CA000 len = 0x00000880 CREGISTER=23 - TPCC : org = 0x49000000 len = 0x00001098 CREGISTER=29 - UART1 : org = 0x48022000 len = 0x00000088 CREGISTER=11 - UART2 : org = 0x48024000 len = 0x00000088 CREGISTER=12 - - RSVD10 : org = 0x48318000 len = 0x00000100 CREGISTER=10 - RSVD13 : org = 0x48310000 len = 0x00000100 CREGISTER=13 - RSVD21 : org = 0x00032400 len = 0x00000100 CREGISTER=21 - RSVD27 : org = 0x00032000 len = 0x00000100 CREGISTER=27 - -} - -/* Specify the sections allocation into memory */ -SECTIONS { - /* Forces _c_int00 to the start of PRU IRAM. Not necessary when loading - an ELF file, but useful when loading a binary */ - .text:_c_int00* > 0x0, PAGE 0 - - .text > PRU_IMEM, PAGE 0 - .stack > PRU_DMEM_0_1, PAGE 1 - .bss > PRU_DMEM_0_1, PAGE 1 - .cio > PRU_DMEM_0_1, PAGE 1 - .data > PRU_DMEM_0_1, PAGE 1 - .switch > PRU_DMEM_0_1, PAGE 1 - .sysmem > PRU_DMEM_0_1, PAGE 1 - .cinit > PRU_DMEM_0_1, PAGE 1 - .rodata > PRU_DMEM_0_1, PAGE 1 - .rofardata > PRU_DMEM_0_1, PAGE 1 - .farbss > PRU_DMEM_0_1, PAGE 1 - .fardata > PRU_DMEM_0_1, PAGE 1 - - .resource_table > PRU_DMEM_0_1, PAGE 1 - .init_pins > PRU_DMEM_0_1, PAGE 1 -} \ No newline at end of file diff --git a/books/pru-cookbook/03details/code/encoder_setup.sh b/books/pru-cookbook/03details/code/encoder_setup.sh deleted file mode 100755 index ffc4ad68..00000000 --- a/books/pru-cookbook/03details/code/encoder_setup.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash -# Configure the pins based on which Beagle is running -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine - -# Configure eQEP pins -if [ $machine = "Black" ]; then - echo " Found" - pins="P9_92 P9_27 P8_35 P8_33 P8_12 P8_11 P8_41 P8_42" -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - pins="P1_31 P2_34 P2_10 P2_24 P2_33" -else - echo " Not Found" - pins="" -fi - -for pin in $pins -do - echo $pin - config-pin $pin qep - config-pin -q $pin -done - -########################################## -# Configure PRU pins -if [ $machine = "Black" ]; then - echo " Found" - pins="P8_16 P8_15" -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - pins="P2_09 P2_18" -else - echo " Not Found" - pins="" -fi - -for pin in $pins -do - echo $pin - config-pin $pin pruin - config-pin -q $pin -done diff --git a/books/pru-cookbook/03details/code/gpio_setup.sh b/books/pru-cookbook/03details/code/gpio_setup.sh deleted file mode 100755 index e676ed7a..00000000 --- a/books/pru-cookbook/03details/code/gpio_setup.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -export TARGET=gpio.pru0 -echo TARGET=$TARGET - -# Configure the PRU pins based on which Beagle is running -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine -if [ $machine = "Black" ]; then - echo " Found" - pins="P9_11" -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - pins="P2_05" -else - echo " Not Found" - pins="" -fi - -for pin in $pins -do - echo $pin - config-pin $pin gpio - config-pin -q $pin -done diff --git a/books/pru-cookbook/03details/code/servos_setup.sh b/books/pru-cookbook/03details/code/servos_setup.sh deleted file mode 100755 index 330e8f34..00000000 --- a/books/pru-cookbook/03details/code/servos_setup.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash -# Configure the PRU pins based on which Beagle is running -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine -if [ $machine = "Black" ]; then - echo " Found" - pins="P8_27 P8_28 P8_29 P8_30 P8_39 P8_40 P8_41 P8_42" -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - pins="P2_35 P1_35 P1_02 P1_04" -else - echo " Not Found" - pins="" -fi - -for pin in $pins -do - echo $pin - config-pin $pin pruout - config-pin -q $pin -done \ No newline at end of file diff --git a/books/pru-cookbook/04debug/code/AM335x_PRU.cmd b/books/pru-cookbook/04debug/code/AM335x_PRU.cmd deleted file mode 100644 index b62f0440..00000000 --- a/books/pru-cookbook/04debug/code/AM335x_PRU.cmd +++ /dev/null @@ -1,86 +0,0 @@ -/****************************************************************************/ -/* AM335x_PRU.cmd */ -/* Copyright (c) 2015 Texas Instruments Incorporated */ -/* */ -/* Description: This file is a linker command file that can be used for */ -/* linking PRU programs built with the C compiler and */ -/* the resulting .out file on an AM335x device. */ -/****************************************************************************/ - --cr /* Link using C conventions */ - -/* Specify the System Memory Map */ -MEMORY -{ - PAGE 0: - PRU_IMEM : org = 0x00000000 len = 0x00002000 /* 8kB PRU0 Instruction RAM */ - - PAGE 1: - - /* RAM */ - - PRU_DMEM_0_1 : org = 0x00000000 len = 0x00002000 CREGISTER=24 /* 8kB PRU Data RAM 0_1 */ - PRU_DMEM_1_0 : org = 0x00002000 len = 0x00002000 CREGISTER=25 /* 8kB PRU Data RAM 1_0 */ - - PAGE 2: - PRU_SHAREDMEM : org = 0x00010000 len = 0x00003000 CREGISTER=28 /* 12kB Shared RAM */ - - DDR : org = 0x80000000 len = 0x00000100 CREGISTER=31 - L3OCMC : org = 0x40000000 len = 0x00010000 CREGISTER=30 - - - /* Peripherals */ - - PRU_CFG : org = 0x00026000 len = 0x00000044 CREGISTER=4 - PRU_ECAP : org = 0x00030000 len = 0x00000060 CREGISTER=3 - PRU_IEP : org = 0x0002E000 len = 0x0000031C CREGISTER=26 - PRU_INTC : org = 0x00020000 len = 0x00001504 CREGISTER=0 - PRU_UART : org = 0x00028000 len = 0x00000038 CREGISTER=7 - - DCAN0 : org = 0x481CC000 len = 0x000001E8 CREGISTER=14 - DCAN1 : org = 0x481D0000 len = 0x000001E8 CREGISTER=15 - DMTIMER2 : org = 0x48040000 len = 0x0000005C CREGISTER=1 - PWMSS0 : org = 0x48300000 len = 0x000002C4 CREGISTER=18 - PWMSS1 : org = 0x48302000 len = 0x000002C4 CREGISTER=19 - PWMSS2 : org = 0x48304000 len = 0x000002C4 CREGISTER=20 - GEMAC : org = 0x4A100000 len = 0x0000128C CREGISTER=9 - I2C1 : org = 0x4802A000 len = 0x000000D8 CREGISTER=2 - I2C2 : org = 0x4819C000 len = 0x000000D8 CREGISTER=17 - MBX0 : org = 0x480C8000 len = 0x00000140 CREGISTER=22 - MCASP0_DMA : org = 0x46000000 len = 0x00000100 CREGISTER=8 - MCSPI0 : org = 0x48030000 len = 0x000001A4 CREGISTER=6 - MCSPI1 : org = 0x481A0000 len = 0x000001A4 CREGISTER=16 - MMCHS0 : org = 0x48060000 len = 0x00000300 CREGISTER=5 - SPINLOCK : org = 0x480CA000 len = 0x00000880 CREGISTER=23 - TPCC : org = 0x49000000 len = 0x00001098 CREGISTER=29 - UART1 : org = 0x48022000 len = 0x00000088 CREGISTER=11 - UART2 : org = 0x48024000 len = 0x00000088 CREGISTER=12 - - RSVD10 : org = 0x48318000 len = 0x00000100 CREGISTER=10 - RSVD13 : org = 0x48310000 len = 0x00000100 CREGISTER=13 - RSVD21 : org = 0x00032400 len = 0x00000100 CREGISTER=21 - RSVD27 : org = 0x00032000 len = 0x00000100 CREGISTER=27 - -} - -/* Specify the sections allocation into memory */ -SECTIONS { - /* Forces _c_int00 to the start of PRU IRAM. Not necessary when loading - an ELF file, but useful when loading a binary */ - .text:_c_int00* > 0x0, PAGE 0 - - .text > PRU_IMEM, PAGE 0 - .stack > PRU_DMEM_0_1, PAGE 1 - .bss > PRU_DMEM_0_1, PAGE 1 - .cio > PRU_DMEM_0_1, PAGE 1 - .data > PRU_DMEM_0_1, PAGE 1 - .switch > PRU_DMEM_0_1, PAGE 1 - .sysmem > PRU_DMEM_0_1, PAGE 1 - .cinit > PRU_DMEM_0_1, PAGE 1 - .rodata > PRU_DMEM_0_1, PAGE 1 - .rofardata > PRU_DMEM_0_1, PAGE 1 - .farbss > PRU_DMEM_0_1, PAGE 1 - .fardata > PRU_DMEM_0_1, PAGE 1 - - .resource_table > PRU_DMEM_0_1, PAGE 1 -} diff --git a/books/pru-cookbook/04debug/code/Makefile b/books/pru-cookbook/04debug/code/Makefile deleted file mode 100644 index a7557fda..00000000 --- a/books/pru-cookbook/04debug/code/Makefile +++ /dev/null @@ -1 +0,0 @@ -include /var/lib/cloud9/common/Makefile diff --git a/books/pru-cookbook/04debug/code/copyright.c b/books/pru-cookbook/04debug/code/copyright.c deleted file mode 100644 index a34918fa..00000000 --- a/books/pru-cookbook/04debug/code/copyright.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * * Neither the name of Texas Instruments Incorporated nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ diff --git a/books/pru-cookbook/04debug/code/resource_table_empty.h b/books/pru-cookbook/04debug/code/resource_table_empty.h deleted file mode 100644 index c14bd2b2..00000000 --- a/books/pru-cookbook/04debug/code/resource_table_empty.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * * Neither the name of Texas Instruments Incorporated nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * ======== resource_table_empty.h ======== - * - * Define the resource table entries for all PRU cores. This will be - * incorporated into corresponding base images, and used by the remoteproc - * on the host-side to allocated/reserve resources. Note the remoteproc - * driver requires that all PRU firmware be built with a resource table. - * - * This file contains an empty resource table. It can be used either as: - * - * 1) A template, or - * 2) As-is if a PRU application does not need to configure PRU_INTC - * or interact with the rpmsg driver - * - */ - -#ifndef _RSC_TABLE_PRU_H_ -#define _RSC_TABLE_PRU_H_ - -#include <stddef.h> -#include <rsc_types.h> - -struct my_resource_table { - struct resource_table base; - - uint32_t offset[1]; /* Should match 'num' in actual definition */ -}; - -#pragma DATA_SECTION(pru_remoteproc_ResourceTable, ".resource_table") -#pragma RETAIN(pru_remoteproc_ResourceTable) -struct my_resource_table pru_remoteproc_ResourceTable = { - 1, /* we're the first version that implements this */ - 0, /* number of entries in the table */ - 0, 0, /* reserved, must be zero */ - 0, /* offset[0] */ -}; - -#endif /* _RSC_TABLE_PRU_H_ */ - diff --git a/books/pru-cookbook/04debug/code/uart1.pru0.c b/books/pru-cookbook/04debug/code/uart1.pru0.c deleted file mode 100644 index e9b40d5c..00000000 --- a/books/pru-cookbook/04debug/code/uart1.pru0.c +++ /dev/null @@ -1,88 +0,0 @@ -// From: http://git.ti.com/pru-software-support-package/pru-software-support-package/trees/master/examples/am335x/PRU_Hardware_UART - -#include <stdint.h> -#include <pru_uart.h> -#include "resource_table_empty.h" - -/* The FIFO size on the PRU UART is 16 bytes; however, we are (arbitrarily) - * only going to send 8 at a time */ -#define FIFO_SIZE 16 -#define MAX_CHARS 8 - -void main(void) -{ - uint8_t tx; - uint8_t rx; - uint8_t cnt; - - /* hostBuffer points to the string to be printed */ - char* hostBuffer; - - /*** INITIALIZATION ***/ - - /* Set up UART to function at 115200 baud - DLL divisor is 104 at 16x oversample - * 192MHz / 104 / 16 = ~115200 */ - CT_UART.DLL = 104; - CT_UART.DLH = 0; - CT_UART.MDR = 0x0; - - /* Enable Interrupts in UART module. This allows the main thread to poll for - * Receive Data Available and Transmit Holding Register Empty */ - CT_UART.IER = 0x7; - - /* If FIFOs are to be used, select desired trigger level and enable - * FIFOs by writing to FCR. FIFOEN bit in FCR must be set first before - * other bits are configured */ - /* Enable FIFOs for now at 1-byte, and flush them */ - CT_UART.FCR = (0x8) | (0x4) | (0x2) | (0x1); - //CT_UART.FCR = (0x80) | (0x4) | (0x2) | (0x01); // 8-byte RX FIFO trigger - - /* Choose desired protocol settings by writing to LCR */ - /* 8-bit word, 1 stop bit, no parity, no break control and no divisor latch */ - CT_UART.LCR = 3; - - /* Enable loopback for test */ - CT_UART.MCR = 0x00; - - /* Choose desired response to emulation suspend events by configuring - * FREE bit and enable UART by setting UTRST and URRST in PWREMU_MGMT */ - /* Allow UART to run free, enable UART TX/RX */ - CT_UART.PWREMU_MGMT = 0x6001; - - /*** END INITIALIZATION ***/ - - /* Priming the 'hostbuffer' with a message */ - hostBuffer = "Hello! This is a long string\r\n"; - - /*** SEND SOME DATA ***/ - - /* Let's send/receive some dummy data */ - while(1) { - cnt = 0; - while(1) { - /* Load character, ensure it is not string termination */ - if ((tx = hostBuffer[cnt]) == '\0') - break; - cnt++; - CT_UART.THR = tx; - - /* Because we are doing loopback, wait until LSR.DR == 1 - * indicating there is data in the RX FIFO */ - while ((CT_UART.LSR & 0x1) == 0x0); - - /* Read the value from RBR */ - rx = CT_UART.RBR; - - /* Wait for TX FIFO to be empty */ - while (!((CT_UART.FCR & 0x2) == 0x2)); - } - } - - /*** DONE SENDING DATA ***/ - - /* Disable UART before halting */ - CT_UART.PWREMU_MGMT = 0x0; - - /* Halt PRU core */ - __halt(); -} diff --git a/books/pru-cookbook/04debug/code/uart1.pru1_0.c b/books/pru-cookbook/04debug/code/uart1.pru1_0.c deleted file mode 100644 index 4c558bb9..00000000 --- a/books/pru-cookbook/04debug/code/uart1.pru1_0.c +++ /dev/null @@ -1,90 +0,0 @@ -// From: http://git.ti.com/pru-software-support-package/pru-software-support-package/trees/master/examples/am335x/PRU_Hardware_UART -// This example was converted to the am5729 by changing the names in pru_uart.h -// for the am335x to the more descriptive names for the am5729. -// For example DLL convertes to DIVISOR_REGISTER_LSB_ -#include <stdint.h> -#include <pru_uart.h> -#include "resource_table_empty.h" - -/* The FIFO size on the PRU UART is 16 bytes; however, we are (arbitrarily) - * only going to send 8 at a time */ -#define FIFO_SIZE 16 -#define MAX_CHARS 8 - -void main(void) -{ - uint8_t tx; - uint8_t rx; - uint8_t cnt; - - /* hostBuffer points to the string to be printed */ - char* hostBuffer; - - /*** INITIALIZATION ***/ - - /* Set up UART to function at 115200 baud - DLL divisor is 104 at 16x oversample - * 192MHz / 104 / 16 = ~115200 */ - CT_UART.DIVISOR_REGISTER_LSB_ = 104; - CT_UART.DIVISOR_REGISTER_MSB_ = 0; - CT_UART.MODE_DEFINITION_REGISTER = 0x0; - - /* Enable Interrupts in UART module. This allows the main thread to poll for - * Receive Data Available and Transmit Holding Register Empty */ - CT_UART.INTERRUPT_ENABLE_REGISTER = 0x7; - - /* If FIFOs are to be used, select desired trigger level and enable - * FIFOs by writing to FCR. FIFOEN bit in FCR must be set first before - * other bits are configured */ - /* Enable FIFOs for now at 1-byte, and flush them */ - CT_UART.INTERRUPT_IDENTIFICATION_REGISTER_FIFO_CONTROL_REGISTER = (0x8) | (0x4) | (0x2) | (0x1); - //CT_UART.FCR = (0x80) | (0x4) | (0x2) | (0x01); // 8-byte RX FIFO trigger - - /* Choose desired protocol settings by writing to LCR */ - /* 8-bit word, 1 stop bit, no parity, no break control and no divisor latch */ - CT_UART.LINE_CONTROL_REGISTER = 3; - - /* Enable loopback for test */ - CT_UART.MODEM_CONTROL_REGISTER = 0x00; - - /* Choose desired response to emulation suspend events by configuring - * FREE bit and enable UART by setting UTRST and URRST in PWREMU_MGMT */ - /* Allow UART to run free, enable UART TX/RX */ - CT_UART.POWERMANAGEMENT_AND_EMULATION_REGISTER = 0x6001; - - /*** END INITIALIZATION ***/ - - /* Priming the 'hostbuffer' with a message */ - hostBuffer = "Hello! This is a long string\r\n"; - - /*** SEND SOME DATA ***/ - - /* Let's send/receive some dummy data */ - while(1) { - cnt = 0; - while(1) { - /* Load character, ensure it is not string termination */ - if ((tx = hostBuffer[cnt]) == '\0') - break; - cnt++; - CT_UART.RBR_THR_REGISTERS = tx; - - /* Because we are doing loopback, wait until LSR.DR == 1 - * indicating there is data in the RX FIFO */ - while ((CT_UART.LINE_STATUS_REGISTER & 0x1) == 0x0); - - /* Read the value from RBR */ - rx = CT_UART.RBR_THR_REGISTERS; - - /* Wait for TX FIFO to be empty */ - while (!((CT_UART.INTERRUPT_IDENTIFICATION_REGISTER_FIFO_CONTROL_REGISTER & 0x2) == 0x2)); - } - } - - /*** DONE SENDING DATA ***/ - - /* Disable UART before halting */ - CT_UART.POWERMANAGEMENT_AND_EMULATION_REGISTER = 0x0; - - /* Halt PRU core */ - __halt(); -} diff --git a/books/pru-cookbook/04debug/code/uart2.pru0.c b/books/pru-cookbook/04debug/code/uart2.pru0.c deleted file mode 100644 index 56ca985d..00000000 --- a/books/pru-cookbook/04debug/code/uart2.pru0.c +++ /dev/null @@ -1,126 +0,0 @@ -// From: http://git.ti.com/pru-software-support-package/pru-software-support-package/trees/master/pru_cape/pru_fw/PRU_Hardware_UART - -#include <stdint.h> -#include <pru_uart.h> -#include "resource_table_empty.h" - -/* The FIFO size on the PRU UART is 16 bytes; however, we are (arbitrarily) - * only going to send 8 at a time */ -#define FIFO_SIZE 16 -#define MAX_CHARS 8 -#define BUFFER 40 - -//****************************************************************************** -// Print Message Out -// This function take in a string literal of any size and then fill the -// TX FIFO when it's empty and waits until there is info in the RX FIFO -// before returning. -//****************************************************************************** -void PrintMessageOut(volatile char* Message) -{ - uint8_t cnt, index = 0; - - while (1) { - cnt = 0; - - /* Wait until the TX FIFO and the TX SR are completely empty */ - while (!CT_UART.LSR_bit.TEMT); - - while (Message[index] != NULL && cnt < MAX_CHARS) { - CT_UART.THR = Message[index]; - index++; - cnt++; - } - if (Message[index] == NULL) - break; - } - - /* Wait until the TX FIFO and the TX SR are completely empty */ - while (!CT_UART.LSR_bit.TEMT); - -} - -//****************************************************************************** -// IEP Timer Config -// This function waits until there is info in the RX FIFO and then returns -// the first character entered. -//****************************************************************************** -char ReadMessageIn(void) -{ - while (!CT_UART.LSR_bit.DR); - - return CT_UART.RBR_bit.DATA; -} - -void main(void) -{ - uint32_t i; - volatile uint32_t not_done = 1; - - char rxBuffer[BUFFER]; - rxBuffer[BUFFER-1] = NULL; // null terminate the string - - /*** INITIALIZATION ***/ - - /* Set up UART to function at 115200 baud - DLL divisor is 104 at 16x oversample - * 192MHz / 104 / 16 = ~115200 */ - CT_UART.DLL = 104; - CT_UART.DLH = 0; - CT_UART.MDR_bit.OSM_SEL = 0x0; - - /* Enable Interrupts in UART module. This allows the main thread to poll for - * Receive Data Available and Transmit Holding Register Empty */ - CT_UART.IER = 0x7; - - /* If FIFOs are to be used, select desired trigger level and enable - * FIFOs by writing to FCR. FIFOEN bit in FCR must be set first before - * other bits are configured */ - /* Enable FIFOs for now at 1-byte, and flush them */ - CT_UART.FCR = (0x80) | (0x8) | (0x4) | (0x2) | (0x01); // 8-byte RX FIFO trigger - - /* Choose desired protocol settings by writing to LCR */ - /* 8-bit word, 1 stop bit, no parity, no break control and no divisor latch */ - CT_UART.LCR = 3; - - /* If flow control is desired write appropriate values to MCR. */ - /* No flow control for now, but enable loopback for test */ - CT_UART.MCR = 0x00; - - /* Choose desired response to emulation suspend events by configuring - * FREE bit and enable UART by setting UTRST and URRST in PWREMU_MGMT */ - /* Allow UART to run free, enable UART TX/RX */ - CT_UART.PWREMU_MGMT_bit.FREE = 0x1; - CT_UART.PWREMU_MGMT_bit.URRST = 0x1; - CT_UART.PWREMU_MGMT_bit.UTRST = 0x1; - - /* Turn off RTS and CTS functionality */ - CT_UART.MCR_bit.AFE = 0x0; - CT_UART.MCR_bit.RTS = 0x0; - - /*** END INITIALIZATION ***/ - - while(1) { - /* Print out greeting message */ - PrintMessageOut("Hello you are in the PRU UART demo test please enter some characters\r\n"); - - /* Read in characters from user, then echo them back out */ - for (i = 0; i < BUFFER-1 ; i++) { - rxBuffer[i] = ReadMessageIn(); - if(rxBuffer[i] == '\r') { // Quit early if ENTER is hit. - rxBuffer[i+1] = NULL; - break; - } - } - - PrintMessageOut("you typed:\r\n"); - PrintMessageOut(rxBuffer); - PrintMessageOut("\r\n"); - } - - /*** DONE SENDING DATA ***/ - /* Disable UART before halting */ - CT_UART.PWREMU_MGMT = 0x0; - - /* Halt PRU core */ - __halt(); -} diff --git a/books/pru-cookbook/04debug/code/uart2.pru1_0.c b/books/pru-cookbook/04debug/code/uart2.pru1_0.c deleted file mode 100644 index c934ef7d..00000000 --- a/books/pru-cookbook/04debug/code/uart2.pru1_0.c +++ /dev/null @@ -1,126 +0,0 @@ -// From: http://git.ti.com/pru-software-support-package/pru-software-support-package/trees/master/pru_cape/pru_fw/PRU_Hardware_UART - -#include <stdint.h> -#include <pru_uart.h> -#include "resource_table_empty.h" - -/* The FIFO size on the PRU UART is 16 bytes; however, we are (arbitrarily) - * only going to send 8 at a time */ -#define FIFO_SIZE 16 -#define MAX_CHARS 8 -#define BUFFER 40 - -//****************************************************************************** -// Print Message Out -// This function take in a string literal of any size and then fill the -// TX FIFO when it's empty and waits until there is info in the RX FIFO -// before returning. -//****************************************************************************** -void PrintMessageOut(volatile char* Message) -{ - uint8_t cnt, index = 0; - - while (1) { - cnt = 0; - - /* Wait until the TX FIFO and the TX SR are completely empty */ - while (!CT_UART.LINE_STATUS_REGISTER_bit.TEMT); - - while (Message[index] != NULL && cnt < MAX_CHARS) { - CT_UART.RBR_THR_REGISTERS = Message[index]; - index++; - cnt++; - } - if (Message[index] == NULL) - break; - } - - /* Wait until the TX FIFO and the TX SR are completely empty */ - while (!CT_UART.LINE_STATUS_REGISTER_bit.TEMT); - -} - -//****************************************************************************** -// IEP Timer Config -// This function waits until there is info in the RX FIFO and then returns -// the first character entered. -//****************************************************************************** -char ReadMessageIn(void) -{ - while (!CT_UART.LINE_STATUS_REGISTER_bit.DR); - - return CT_UART.RBR_THR_REGISTERS_bit.DATA; -} - -void main(void) -{ - uint32_t i; - volatile uint32_t not_done = 1; - - char rxBuffer[BUFFER]; - rxBuffer[BUFFER-1] = NULL; // null terminate the string - - /*** INITIALIZATION ***/ - - /* Set up UART to function at 115200 baud - DLL divisor is 104 at 16x oversample - * 192MHz / 104 / 16 = ~115200 */ - CT_UART.DIVISOR_REGISTER_LSB_ = 104; - CT_UART.DIVISOR_REGISTER_MSB_ = 0; - CT_UART.MODE_DEFINITION_REGISTER_bit.OSM_SEL = 0x0; - - /* Enable Interrupts in UART module. This allows the main thread to poll for - * Receive Data Available and Transmit Holding Register Empty */ - CT_UART.INTERRUPT_ENABLE_REGISTER = 0x7; - - /* If FIFOs are to be used, select desired trigger level and enable - * FIFOs by writing to FCR. FIFOEN bit in FCR must be set first before - * other bits are configured */ - /* Enable FIFOs for now at 1-byte, and flush them */ - CT_UART.INTERRUPT_IDENTIFICATION_REGISTER_FIFO_CONTROL_REGISTER = (0x80) | (0x8) | (0x4) | (0x2) | (0x01); // 8-byte RX FIFO trigger - - /* Choose desired protocol settings by writing to LCR */ - /* 8-bit word, 1 stop bit, no parity, no break control and no divisor latch */ - CT_UART.LINE_CONTROL_REGISTER = 3; - - /* If flow control is desired write appropriate values to MCR. */ - /* No flow control for now, but enable loopback for test */ - CT_UART.MODEM_CONTROL_REGISTER = 0x00; - - /* Choose desired response to emulation suspend events by configuring - * FREE bit and enable UART by setting UTRST and URRST in PWREMU_MGMT */ - /* Allow UART to run free, enable UART TX/RX */ - CT_UART.POWERMANAGEMENT_AND_EMULATION_REGISTER_bit.FREE = 0x1; - CT_UART.POWERMANAGEMENT_AND_EMULATION_REGISTER_bit.URRST = 0x1; - CT_UART.POWERMANAGEMENT_AND_EMULATION_REGISTER_bit.UTRST = 0x1; - - /* Turn off RTS and CTS functionality */ - CT_UART.MODEM_CONTROL_REGISTER_bit.AFE = 0x0; - CT_UART.MODEM_CONTROL_REGISTER_bit.RTS = 0x0; - - /*** END INITIALIZATION ***/ - - while(1) { - /* Print out greeting message */ - PrintMessageOut("Hello you are in the PRU UART demo test please enter some characters\r\n"); - - /* Read in characters from user, then echo them back out */ - for (i = 0; i < BUFFER-1 ; i++) { - rxBuffer[i] = ReadMessageIn(); - if(rxBuffer[i] == '\r') { // Quit early if ENTER is hit. - rxBuffer[i+1] = NULL; - break; - } - } - - PrintMessageOut("you typed:\r\n"); - PrintMessageOut(rxBuffer); - PrintMessageOut("\r\n"); - } - - /*** DONE SENDING DATA ***/ - /* Disable UART before halting */ - CT_UART.POWERMANAGEMENT_AND_EMULATION_REGISTER = 0x0; - - /* Halt PRU core */ - __halt(); -} diff --git a/books/pru-cookbook/04debug/code/uart_setup.sh b/books/pru-cookbook/04debug/code/uart_setup.sh deleted file mode 100644 index db11d1f4..00000000 --- a/books/pru-cookbook/04debug/code/uart_setup.sh +++ /dev/null @@ -1,28 +0,0 @@ -export TARGET=uart1.pru0 -echo TARGET=$TARGET - -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine -if [ $machine = "Black" ]; then - echo " Found" - # Configure tx - config-pin P9_24 pru_uart - # Configure rx - config-pin P9_26 pru_uart -elif [ $machine = "AI" ]; then - echo " Found" - echo "See AI chapter for configuring via device tree" -elif [ $machine = "Blue" ]; then - echo " Found" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - # Configure tx - config-pin P1_06 pru_uart - config-pin P2_09 pru_uart - # Configure rx - config-pin P1_12 pru_uart - config-pin P2_11 pru_uart -else - echo " Not Found" - pins="" -fi diff --git a/books/pru-cookbook/05blocks/code/Makefile b/books/pru-cookbook/05blocks/code/Makefile deleted file mode 100644 index a7557fda..00000000 --- a/books/pru-cookbook/05blocks/code/Makefile +++ /dev/null @@ -1 +0,0 @@ -include /var/lib/cloud9/common/Makefile diff --git a/books/pru-cookbook/05blocks/code/copyright.c b/books/pru-cookbook/05blocks/code/copyright.c deleted file mode 100644 index a34918fa..00000000 --- a/books/pru-cookbook/05blocks/code/copyright.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * * Neither the name of Texas Instruments Incorporated nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ diff --git a/books/pru-cookbook/05blocks/code/input.pru0.c b/books/pru-cookbook/05blocks/code/input.pru0.c deleted file mode 100644 index 9ed5d3b7..00000000 --- a/books/pru-cookbook/05blocks/code/input.pru0.c +++ /dev/null @@ -1,26 +0,0 @@ -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t led; - uint32_t sw; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - led = 0x1<<0; // P9_31 or P1_36 - sw = 0x1<<7; // P9_25 or P1_29 - - while (1) { - if((__R31&sw) == sw) { - __R30 |= led; // Turn on LED - } else - __R30 &= ~led; // Turn off LED - } -} - diff --git a/books/pru-cookbook/05blocks/code/input_setup.sh b/books/pru-cookbook/05blocks/code/input_setup.sh deleted file mode 100755 index 35a0d9c3..00000000 --- a/books/pru-cookbook/05blocks/code/input_setup.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash -# -export TARGET=input.pru0 -echo TARGET=$TARGET - -# Configure the PRU pins based on which Beagle is running -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine -if [ $machine = "Black" ]; then - echo " Found" - config-pin P9_31 pruout - config-pin -q P9_31 - config-pin P9_25 pruin - config-pin -q P9_25 -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - config-pin P1_36 pruout - config-pin -q P1_36 - config-pin P1_29 pruin - config-pin -q P1_29 -else - echo " Not Found" - pins="" -fi diff --git a/books/pru-cookbook/05blocks/code/module/.gitignore b/books/pru-cookbook/05blocks/code/module/.gitignore deleted file mode 100644 index 9b6dfc43..00000000 --- a/books/pru-cookbook/05blocks/code/module/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.ko diff --git a/books/pru-cookbook/05blocks/code/module/Makefile b/books/pru-cookbook/05blocks/code/module/Makefile deleted file mode 100644 index 9ca05d05..00000000 --- a/books/pru-cookbook/05blocks/code/module/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -# Makefile for compiling out-of-tree -# From Free Electrons -# If on the Bone run apt install linux-headers-`uname -r` - -KDIR := /lib/modules/$(shell uname -r)/build - -obj-m += rpmsg_client_sample.o -obj-m += rpmsg_pru.o - -all: - $(MAKE) -C $(KDIR) M=$$PWD - -install: - scp hello*.ko bone:. - -print: - @echo KERNELRELEASE= $(KERNELRELEASE) - @echo CONFIG_EXAMPLES= $(CONFIG_EXAMPLES) - @echo obj-m= $(obj-m) - -clean: - rm -rf .tmp_versions *.o - rm -rf .rpmsg_client_sample* rpmsg_client_sample*.mod.c - rm -rf .rpmsg_pru* rpmsg_pru*.mod.c - rm modules.order Module.symvers .built-in.o.cmd \ No newline at end of file diff --git a/books/pru-cookbook/05blocks/code/module/install.sh b/books/pru-cookbook/05blocks/code/module/install.sh deleted file mode 100755 index 89f497f0..00000000 --- a/books/pru-cookbook/05blocks/code/module/install.sh +++ /dev/null @@ -1,6 +0,0 @@ -# This is a example of ARM to PRU communication from Lab 5 of -# http://processors.wiki.ti.com/index.php/PRU_Training:_Hands-on_Labs#LAB_5:_RPMsg_Communication_between_ARM_and_PRU - -sudo apt install linux-headers-`uname -r` - -wget https://github.com/beagleboard/linux/raw/4.9/drivers/rpmsg/rpmsg_pru.c diff --git a/books/pru-cookbook/05blocks/code/module/rpmsg_client_sample.c b/books/pru-cookbook/05blocks/code/module/rpmsg_client_sample.c deleted file mode 100644 index 72b24524..00000000 --- a/books/pru-cookbook/05blocks/code/module/rpmsg_client_sample.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Remote processor messaging - sample client driver - * - * Copyright (C) 2011 Texas Instruments, Inc. - * Copyright (C) 2011 Google, Inc. - * - * Ohad Ben-Cohen <ohad@wizery.com> - * Brian Swetland <swetland@google.com> - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include <linux/kernel.h> -#include <linux/module.h> -#include <linux/rpmsg.h> - -#define MSG "hello world!" -#define MSG_LIMIT 10 - -struct instance_data { - int rx_count; -}; - -static int rpmsg_sample_cb(struct rpmsg_device *rpdev, void *data, int len, - void *priv, u32 src) -{ - int ret; - struct instance_data *idata = dev_get_drvdata(&rpdev->dev); - - dev_info(&rpdev->dev, "incoming msg %d (src: 0x%x)\n", - ++idata->rx_count, src); - - print_hex_dump(KERN_DEBUG, __func__, DUMP_PREFIX_NONE, 16, 1, - data, len, true); - - /* samples should not live forever */ - if (idata->rx_count >= MSG_LIMIT) { - dev_info(&rpdev->dev, "goodbye!\n"); - return 0; - } - - /* send a new message now */ - ret = rpmsg_send(rpdev->ept, MSG, strlen(MSG)); - if (ret) - dev_err(&rpdev->dev, "rpmsg_send failed: %d\n", ret); - - return 0; -} - -static int rpmsg_sample_probe(struct rpmsg_device *rpdev) -{ - int ret; - struct instance_data *idata; - - dev_info(&rpdev->dev, "new channel: 0x%x -> 0x%x!\n", - rpdev->src, rpdev->dst); - - idata = devm_kzalloc(&rpdev->dev, sizeof(*idata), GFP_KERNEL); - if (!idata) - return -ENOMEM; - - dev_set_drvdata(&rpdev->dev, idata); - - /* send a message to our remote processor */ - ret = rpmsg_send(rpdev->ept, MSG, strlen(MSG)); - if (ret) { - dev_err(&rpdev->dev, "rpmsg_send failed: %d\n", ret); - return ret; - } - - return 0; -} - -static void rpmsg_sample_remove(struct rpmsg_device *rpdev) -{ - dev_info(&rpdev->dev, "rpmsg sample client driver is removed\n"); -} - -static struct rpmsg_device_id rpmsg_driver_sample_id_table[] = { - { .name = "rpmsg-client-sample" }, - { }, -}; -MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_sample_id_table); - -static struct rpmsg_driver rpmsg_sample_client = { - .drv.name = KBUILD_MODNAME, - .id_table = rpmsg_driver_sample_id_table, - .probe = rpmsg_sample_probe, - .callback = rpmsg_sample_cb, - .remove = rpmsg_sample_remove, -}; -module_rpmsg_driver(rpmsg_sample_client); - -MODULE_DESCRIPTION("Remote processor messaging sample client driver"); -MODULE_LICENSE("GPL v2"); diff --git a/books/pru-cookbook/05blocks/code/module/rpmsg_pru.c b/books/pru-cookbook/05blocks/code/module/rpmsg_pru.c deleted file mode 100644 index 5a96b209..00000000 --- a/books/pru-cookbook/05blocks/code/module/rpmsg_pru.c +++ /dev/null @@ -1,359 +0,0 @@ -/* - * PRU Remote Processor Messaging Driver - * - * Copyright (C) 2015-2017 Texas Instruments Incorporated - http://www.ti.com/ - * Jason Reeder <jreeder@ti.com> - * Suman Anna <s-anna@ti.com> - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#include <linux/kernel.h> -#include <linux/rpmsg.h> -#include <linux/slab.h> -#include <linux/fs.h> -#include <linux/init.h> -#include <linux/cdev.h> -#include <linux/module.h> -#include <linux/kfifo.h> -#include <linux/uaccess.h> -#include <linux/mutex.h> -#include <linux/poll.h> -#include <linux/rpmsg/virtio_rpmsg.h> - -#define PRU_MAX_DEVICES (8) -/* Matches the definition in virtio_rpmsg_bus.c */ -#define RPMSG_BUF_SIZE (512) -#define MAX_FIFO_MSG (32) -#define FIFO_MSG_SIZE RPMSG_BUF_SIZE - -/** - * struct rpmsg_pru_dev - Structure that contains the per-device data - * @rpdev: rpmsg channel device that is associated with this rpmsg_pru device - * @dev: device - * @cdev: character device - * @locked: boolean used to determine whether or not the device file is in use - * @devt: dev_t structure for the rpmsg_pru device - * @msg_fifo: kernel fifo used to buffer the messages between userspace and PRU - * @msg_len: array storing the lengths of each message in the kernel fifo - * @msg_idx_rd: kernel fifo read index - * @msg_idx_wr: kernel fifo write index - * @wait_list: wait queue used to implement the poll operation of the character - * device - * - * Each rpmsg_pru device provides an interface, using an rpmsg channel (rpdev), - * between a user space character device (cdev) and a PRU core. A kernel fifo - * (msg_fifo) is used to buffer the messages in the kernel that are - * being passed between the character device and the PRU. - */ -struct rpmsg_pru_dev { - struct rpmsg_device *rpdev; - struct device *dev; - struct cdev cdev; - bool locked; - dev_t devt; - struct kfifo msg_fifo; - u32 msg_len[MAX_FIFO_MSG]; - int msg_idx_rd; - int msg_idx_wr; - wait_queue_head_t wait_list; -}; - -static struct class *rpmsg_pru_class; -static dev_t rpmsg_pru_devt; -static DEFINE_MUTEX(rpmsg_pru_lock); -static DEFINE_IDR(rpmsg_pru_minors); - -static int rpmsg_pru_open(struct inode *inode, struct file *filp) -{ - struct rpmsg_pru_dev *prudev; - int ret = -EACCES; - - prudev = container_of(inode->i_cdev, struct rpmsg_pru_dev, cdev); - - mutex_lock(&rpmsg_pru_lock); - if (!prudev->locked) { - prudev->locked = true; - filp->private_data = prudev; - ret = 0; - } - mutex_unlock(&rpmsg_pru_lock); - - if (ret) - dev_err(prudev->dev, "Device already open\n"); - - return ret; -} - -static int rpmsg_pru_release(struct inode *inode, struct file *filp) -{ - struct rpmsg_pru_dev *prudev; - - prudev = container_of(inode->i_cdev, struct rpmsg_pru_dev, cdev); - mutex_lock(&rpmsg_pru_lock); - prudev->locked = false; - mutex_unlock(&rpmsg_pru_lock); - return 0; -} - -static ssize_t rpmsg_pru_read(struct file *filp, char __user *buf, - size_t count, loff_t *f_pos) -{ - int ret; - u32 length; - struct rpmsg_pru_dev *prudev; - - prudev = filp->private_data; - - if (kfifo_is_empty(&prudev->msg_fifo) && - (filp->f_flags & O_NONBLOCK)) - return -EAGAIN; - - ret = wait_event_interruptible(prudev->wait_list, - !kfifo_is_empty(&prudev->msg_fifo)); - if (ret) - return -EINTR; - - ret = kfifo_to_user(&prudev->msg_fifo, buf, - prudev->msg_len[prudev->msg_idx_rd], &length); - prudev->msg_idx_rd = (prudev->msg_idx_rd + 1) % MAX_FIFO_MSG; - - return ret ? ret : length; -} - -static ssize_t rpmsg_pru_write(struct file *filp, const char __user *buf, - size_t count, loff_t *f_pos) -{ - int ret; - struct rpmsg_pru_dev *prudev; - static char rpmsg_pru_buf[RPMSG_BUF_SIZE]; - - prudev = filp->private_data; - - if (count > RPMSG_BUF_SIZE - sizeof(struct rpmsg_hdr)) { - dev_err(prudev->dev, "Data too large for RPMsg Buffer\n"); - return -EINVAL; - } - - if (copy_from_user(rpmsg_pru_buf, buf, count)) { - dev_err(prudev->dev, "Error copying buffer from user space"); - return -EFAULT; - } - - ret = rpmsg_send(prudev->rpdev->ept, (void *)rpmsg_pru_buf, count); - if (ret) - dev_err(prudev->dev, "rpmsg_send failed: %d\n", ret); - - return ret ? ret : count; -} - -static unsigned int rpmsg_pru_poll(struct file *filp, - struct poll_table_struct *wait) -{ - int mask; - struct rpmsg_pru_dev *prudev; - - prudev = filp->private_data; - - poll_wait(filp, &prudev->wait_list, wait); - - mask = POLLOUT | POLLWRNORM; - - if (!kfifo_is_empty(&prudev->msg_fifo)) - mask |= POLLIN | POLLRDNORM; - - return mask; -} - -static const struct file_operations rpmsg_pru_fops = { - .owner = THIS_MODULE, - .open = rpmsg_pru_open, - .release = rpmsg_pru_release, - .read = rpmsg_pru_read, - .write = rpmsg_pru_write, - .poll = rpmsg_pru_poll, -}; - -static int rpmsg_pru_cb(struct rpmsg_device *rpdev, void *data, int len, - void *priv, u32 src) -{ - u32 length; - struct rpmsg_pru_dev *prudev; - - prudev = dev_get_drvdata(&rpdev->dev); - - if (kfifo_avail(&prudev->msg_fifo) < len) { - dev_err(&rpdev->dev, "Not enough space on the FIFO\n"); - return -ENOSPC; - } - - if ((prudev->msg_idx_wr + 1) % MAX_FIFO_MSG == - prudev->msg_idx_rd) { - dev_err(&rpdev->dev, "Message length table is full\n"); - return -ENOSPC; - } - - length = kfifo_in(&prudev->msg_fifo, data, len); - prudev->msg_len[prudev->msg_idx_wr] = length; - prudev->msg_idx_wr = (prudev->msg_idx_wr + 1) % MAX_FIFO_MSG; - - wake_up_interruptible(&prudev->wait_list); - - return 0; -} - -static int rpmsg_pru_probe(struct rpmsg_device *rpdev) -{ - int ret; - struct rpmsg_pru_dev *prudev; - int minor_got; - - prudev = devm_kzalloc(&rpdev->dev, sizeof(*prudev), GFP_KERNEL); - if (!prudev) - return -ENOMEM; - - mutex_lock(&rpmsg_pru_lock); - minor_got = idr_alloc(&rpmsg_pru_minors, prudev, 0, PRU_MAX_DEVICES, - GFP_KERNEL); - mutex_unlock(&rpmsg_pru_lock); - if (minor_got < 0) { - ret = minor_got; - dev_err(&rpdev->dev, "Failed to get a minor number for the rpmsg_pru device: %d\n", - ret); - goto fail_alloc_minor; - } - - prudev->devt = MKDEV(MAJOR(rpmsg_pru_devt), minor_got); - - cdev_init(&prudev->cdev, &rpmsg_pru_fops); - prudev->cdev.owner = THIS_MODULE; - ret = cdev_add(&prudev->cdev, prudev->devt, 1); - if (ret) { - dev_err(&rpdev->dev, "Unable to add cdev for the rpmsg_pru device\n"); - goto fail_add_cdev; - } - - prudev->dev = device_create(rpmsg_pru_class, &rpdev->dev, prudev->devt, - NULL, "rpmsg_pru%d", rpdev->dst); - if (IS_ERR(prudev->dev)) { - dev_err(&rpdev->dev, "Unable to create the rpmsg_pru device\n"); - ret = PTR_ERR(prudev->dev); - goto fail_create_device; - } - - prudev->rpdev = rpdev; - - ret = kfifo_alloc(&prudev->msg_fifo, MAX_FIFO_MSG * FIFO_MSG_SIZE, - GFP_KERNEL); - if (ret) { - dev_err(&rpdev->dev, "Unable to allocate fifo for the rpmsg_pru device\n"); - goto fail_alloc_fifo; - } - - init_waitqueue_head(&prudev->wait_list); - - dev_set_drvdata(&rpdev->dev, prudev); - - dev_info(&rpdev->dev, "new rpmsg_pru device: /dev/rpmsg_pru%d", - rpdev->dst); - - return 0; - -fail_alloc_fifo: - device_destroy(rpmsg_pru_class, prudev->devt); -fail_create_device: - cdev_del(&prudev->cdev); -fail_add_cdev: - mutex_lock(&rpmsg_pru_lock); - idr_remove(&rpmsg_pru_minors, minor_got); - mutex_unlock(&rpmsg_pru_lock); -fail_alloc_minor: - return ret; -} - -static void rpmsg_pru_remove(struct rpmsg_device *rpdev) -{ - struct rpmsg_pru_dev *prudev; - - prudev = dev_get_drvdata(&rpdev->dev); - - kfifo_free(&prudev->msg_fifo); - device_destroy(rpmsg_pru_class, prudev->devt); - cdev_del(&prudev->cdev); - mutex_lock(&rpmsg_pru_lock); - idr_remove(&rpmsg_pru_minors, MINOR(prudev->devt)); - mutex_unlock(&rpmsg_pru_lock); -} - -/* .name matches on RPMsg Channels and causes a probe */ -static const struct rpmsg_device_id rpmsg_driver_pru_id_table[] = { - { .name = "rpmsg-pru" }, - { }, -}; -MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_pru_id_table); - -static struct rpmsg_driver rpmsg_pru_driver = { - .drv.name = KBUILD_MODNAME, - .id_table = rpmsg_driver_pru_id_table, - .probe = rpmsg_pru_probe, - .callback = rpmsg_pru_cb, - .remove = rpmsg_pru_remove, -}; - -static int __init rpmsg_pru_init(void) -{ - int ret; - - rpmsg_pru_class = class_create(THIS_MODULE, "rpmsg_pru"); - if (IS_ERR(rpmsg_pru_class)) { - pr_err("Unable to create class\n"); - ret = PTR_ERR(rpmsg_pru_class); - goto fail_create_class; - } - - ret = alloc_chrdev_region(&rpmsg_pru_devt, 0, PRU_MAX_DEVICES, - "rpmsg_pru"); - if (ret) { - pr_err("Unable to allocate chrdev region\n"); - goto fail_alloc_region; - } - - ret = register_rpmsg_driver(&rpmsg_pru_driver); - if (ret) { - pr_err("Unable to register rpmsg driver"); - goto fail_register_rpmsg_driver; - } - - return 0; - -fail_register_rpmsg_driver: - unregister_chrdev_region(rpmsg_pru_devt, PRU_MAX_DEVICES); -fail_alloc_region: - class_destroy(rpmsg_pru_class); -fail_create_class: - return ret; -} - -static void __exit rpmsg_pru_exit(void) -{ - unregister_rpmsg_driver(&rpmsg_pru_driver); - idr_destroy(&rpmsg_pru_minors); - mutex_destroy(&rpmsg_pru_lock); - class_destroy(rpmsg_pru_class); - unregister_chrdev_region(rpmsg_pru_devt, PRU_MAX_DEVICES); -} - -module_init(rpmsg_pru_init); -module_exit(rpmsg_pru_exit); - -MODULE_AUTHOR("Jason Reeder <jreeder@ti.com>"); -MODULE_ALIAS("rpmsg:rpmsg-pru"); -MODULE_DESCRIPTION("PRU Remote Processor Messaging Driver"); -MODULE_LICENSE("GPL v2"); diff --git a/books/pru-cookbook/05blocks/code/module/setup.sh b/books/pru-cookbook/05blocks/code/module/setup.sh deleted file mode 100755 index 3b313b36..00000000 --- a/books/pru-cookbook/05blocks/code/module/setup.sh +++ /dev/null @@ -1 +0,0 @@ -insmod rpmsg_pru.ko diff --git a/books/pru-cookbook/05blocks/code/neo-colors.py b/books/pru-cookbook/05blocks/code/neo-colors.py deleted file mode 100755 index 736a47b3..00000000 --- a/books/pru-cookbook/05blocks/code/neo-colors.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/python3 -from time import sleep -import math - -length = 24 -max = 25 - -# Open a file -fo = open("/dev/rpmsg_pru30", "wb", 0) - -colors = [[1,0,0],[1,1,0],[0,1,0],[0,1,1],[0,0,1],[1,0,1]]# colors = [[1,0,0],[1,0,0]] - -oldr=0 -oldb=0 -oldg=0 - -while True: - for color in colors: - newr = color[0] - newg = color[1] - newb = color[2] - maxtime=20 - for time in range(0, maxtime): - r = (max*oldr+(newr-oldr)*max*time/maxtime) - g = (max*oldg+(newg-oldg)*max*time/maxtime) - b = (max*oldb+(newb-oldb)*max*time/maxtime) - for i in range(0, length): - fo.write(b"%d %d %d %d\n" % (i, r, g, b)) - # print("0 0 127 %d" % (i)) - fo.write(b"-1 0 0 0\n"); # Send colors to LEDs - - # print (r,g,b) - - sleep(0.05) - - oldr=newr - oldg=newg - oldb=newb - -# Close opened file -fo.close() \ No newline at end of file diff --git a/books/pru-cookbook/05blocks/code/neo-rainbow.py b/books/pru-cookbook/05blocks/code/neo-rainbow.py deleted file mode 100755 index ffd706a6..00000000 --- a/books/pru-cookbook/05blocks/code/neo-rainbow.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/python3 -from time import sleep -import math - -len = 24 -amp = 12 -f = 25 -shift = 3 -phase = 0 - -# Open a file -fo = open("/dev/rpmsg_pru30", "wb", 0) - -while True: - for i in range(0, len): - r = (amp * (math.sin(2*math.pi*f*(i-phase-0*shift)/len) + 1)) + 1; - g = (amp * (math.sin(2*math.pi*f*(i-phase-1*shift)/len) + 1)) + 1; - b = (amp * (math.sin(2*math.pi*f*(i-phase-2*shift)/len) + 1)) + 1; - fo.write(b"%d %d %d %d\n" % (i, r, g, b)) - # print("0 0 127 %d" % (i)) - - fo.write(b"-1 0 0 0\n"); - phase = phase + 1 - sleep(0.05) - -# Close opened file -fo.close() \ No newline at end of file diff --git a/books/pru-cookbook/05blocks/code/neo1.pru0.c b/books/pru-cookbook/05blocks/code/neo1.pru0.c deleted file mode 100644 index 5f2ce824..00000000 --- a/books/pru-cookbook/05blocks/code/neo1.pru0.c +++ /dev/null @@ -1,44 +0,0 @@ -// Control a ws2812 (NeoPixel) display, All on or all off -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -#define STR_LEN 24 -#define oneCyclesOn 700/5 // Stay on 700ns -#define oneCyclesOff 800/5 -#define zeroCyclesOn 350/5 -#define zeroCyclesOff 600/5 -#define resetCycles 60000/5 // Must be at least 50u, use 60u -#define gpio P9_29 // output pin - -#define ONE - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - uint32_t i; - for(i=0; i<STR_LEN*3*8; i++) { -#ifdef ONE - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(oneCyclesOn-1); - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(oneCyclesOff-2); -#else - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(zeroCyclesOn-1); - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(zeroCyclesOff-2); -#endif - } - // Send Reset - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(resetCycles); - - __halt(); -} diff --git a/books/pru-cookbook/05blocks/code/neo1.pru1_1.c b/books/pru-cookbook/05blocks/code/neo1.pru1_1.c deleted file mode 100644 index 2ad8d56d..00000000 --- a/books/pru-cookbook/05blocks/code/neo1.pru1_1.c +++ /dev/null @@ -1,44 +0,0 @@ -// Control a ws2812 (NeoPixel) display, All on or all off -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -#define STR_LEN 24 -#define oneCyclesOn 700/5 // Stay on 700ns -#define oneCyclesOff 800/5 -#define zeroCyclesOn 350/5 -#define zeroCyclesOff 600/5 -#define resetCycles 60000/5 // Must be at least 50u, use 60u -#define gpio P9_16 // output pin - -#define ONE - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - uint32_t i; - for(i=0; i<STR_LEN*3*8; i++) { -#ifdef ONE - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(oneCyclesOn-1); - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(oneCyclesOff-2); -#else - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(zeroCyclesOn-1); - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(zeroCyclesOff-2); -#endif - } - // Send Reset - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(resetCycles); - - __halt(); -} diff --git a/books/pru-cookbook/05blocks/code/neo2.pru0.c b/books/pru-cookbook/05blocks/code/neo2.pru0.c deleted file mode 100644 index a30077ce..00000000 --- a/books/pru-cookbook/05blocks/code/neo2.pru0.c +++ /dev/null @@ -1,46 +0,0 @@ -// Control a ws2812 (neo pixel) display, green, red, blue, green, ... -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -#define STR_LEN 3 -#define oneCyclesOn 700/5 // Stay on 700ns -#define oneCyclesOff 800/5 -#define zeroCyclesOn 350/5 -#define zeroCyclesOff 600/5 -#define resetCycles 60000/5 // Must be at least 50u, use 60u -#define gpio P9_29 // output pin - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - uint32_t color[STR_LEN] = {0x0f0000, 0x000f00, 0x0000f}; // green, red, blue - int i, j; - - for(j=0; j<STR_LEN; j++) { - for(i=23; i>=0; i--) { - if(color[j] & (0x1<<i)) { - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(oneCyclesOn-1); - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(oneCyclesOff-2); - } else { - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(zeroCyclesOn-1); - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(zeroCyclesOff-2); - } - } - } - // Send Reset - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(resetCycles); - - __halt(); -} diff --git a/books/pru-cookbook/05blocks/code/neo2.pru1_1.c b/books/pru-cookbook/05blocks/code/neo2.pru1_1.c deleted file mode 100644 index 6b243dcf..00000000 --- a/books/pru-cookbook/05blocks/code/neo2.pru1_1.c +++ /dev/null @@ -1,46 +0,0 @@ -// Control a ws2812 (neo pixel) display, green, red, blue, green, ... -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -#define STR_LEN 3 -#define oneCyclesOn 700/5 // Stay on 700ns -#define oneCyclesOff 800/5 -#define zeroCyclesOn 350/5 -#define zeroCyclesOff 600/5 -#define resetCycles 60000/5 // Must be at least 50u, use 60u -#define gpio P9_16 // output pin - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - uint32_t color[STR_LEN] = {0x0f0000, 0x000f00, 0x0000f}; // green, red, blue - int i, j; - - for(j=0; j<STR_LEN; j++) { - for(i=23; i>=0; i--) { - if(color[j] & (0x1<<i)) { - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(oneCyclesOn-1); - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(oneCyclesOff-2); - } else { - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(zeroCyclesOn-1); - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(zeroCyclesOff-2); - } - } - } - // Send Reset - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(resetCycles); - - __halt(); -} diff --git a/books/pru-cookbook/05blocks/code/neo3.pru0.c b/books/pru-cookbook/05blocks/code/neo3.pru0.c deleted file mode 100644 index 8c1a9f13..00000000 --- a/books/pru-cookbook/05blocks/code/neo3.pru0.c +++ /dev/null @@ -1,67 +0,0 @@ -// Control a ws2812 (neo pixel) display, green, red, blue, green, ... -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -#define STR_LEN 24 -#define oneCyclesOn 700/5 // Stay on 700ns -#define oneCyclesOff 800/5 -#define zeroCyclesOn 350/5 -#define zeroCyclesOff 600/5 -#define resetCycles 60000/5 // Must be at least 50u, use 60u -#define gpio P9_29 // output pin - -#define SPEED 20000000/5 // Time to wait between updates - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t background = 0x00000f; - uint32_t foreground = 0x000f00; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - uint32_t color[STR_LEN]; // green, red, blue - int i, j; - int k, oldk = 0;; - // Set everything to background - for(i=0; i<STR_LEN; i++) { - color[i] = background; - } - - while(1) { - // Move forward one position - for(k=0; k<STR_LEN; k++) { - color[oldk] = background; - color[k] = foreground; - oldk=k; - - // Output the string - for(j=0; j<STR_LEN; j++) { - for(i=23; i>=0; i--) { - if(color[j] & (0x1<<i)) { - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(oneCyclesOn-1); - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(oneCyclesOff-2); - } else { - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(zeroCyclesOn-1); - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(zeroCyclesOff-2); - } - } - } - // Send Reset - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(resetCycles); - - // Wait - __delay_cycles(SPEED); - } - } -} diff --git a/books/pru-cookbook/05blocks/code/neo3.pru1_1.c b/books/pru-cookbook/05blocks/code/neo3.pru1_1.c deleted file mode 100644 index ee8dd638..00000000 --- a/books/pru-cookbook/05blocks/code/neo3.pru1_1.c +++ /dev/null @@ -1,67 +0,0 @@ -// Control a ws2812 (neo pixel) display, green, red, blue, green, ... -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -#define STR_LEN 24 -#define oneCyclesOn 700/5 // Stay on 700ns -#define oneCyclesOff 800/5 -#define zeroCyclesOn 350/5 -#define zeroCyclesOff 600/5 -#define resetCycles 60000/5 // Must be at least 50u, use 60u -#define gpio P9_16 // output pin - -#define SPEED 20000000/5 // Time to wait between updates - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t background = 0x00000f; - uint32_t foreground = 0x000f00; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - uint32_t color[STR_LEN]; // green, red, blue - int i, j; - int k, oldk = 0;; - // Set everything to background - for(i=0; i<STR_LEN; i++) { - color[i] = background; - } - - while(1) { - // Move forward one position - for(k=0; k<STR_LEN; k++) { - color[oldk] = background; - color[k] = foreground; - oldk=k; - - // Output the string - for(j=0; j<STR_LEN; j++) { - for(i=23; i>=0; i--) { - if(color[j] & (0x1<<i)) { - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(oneCyclesOn-1); - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(oneCyclesOff-2); - } else { - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(zeroCyclesOn-1); - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(zeroCyclesOff-2); - } - } - } - // Send Reset - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(resetCycles); - - // Wait - __delay_cycles(SPEED); - } - } -} diff --git a/books/pru-cookbook/05blocks/code/neo4.pru0.c b/books/pru-cookbook/05blocks/code/neo4.pru0.c deleted file mode 100644 index 7fb54557..00000000 --- a/books/pru-cookbook/05blocks/code/neo4.pru0.c +++ /dev/null @@ -1,145 +0,0 @@ -// Use rpmsg to control the NeoPixels via /dev/rpmsg_pru30 -#include <stdint.h> -#include <stdio.h> -#include <stdlib.h> // atoi -#include <string.h> -#include <pru_cfg.h> -#include <pru_intc.h> -#include <rsc_types.h> -#include <pru_rpmsg.h> -#include "resource_table_0.h" -#include "prugpio.h" - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -/* Host-0 Interrupt sets bit 30 in register R31 */ -#define HOST_INT ((uint32_t) 1 << 30) - -/* The PRU-ICSS system events used for RPMsg are defined in the Linux device tree - * PRU0 uses system event 16 (To ARM) and 17 (From ARM) - * PRU1 uses system event 18 (To ARM) and 19 (From ARM) - */ -#define TO_ARM_HOST 16 -#define FROM_ARM_HOST 17 - -/* -* Using the name 'rpmsg-pru' will probe the rpmsg_pru driver found -* at linux-x.y.z/drivers/rpmsg/rpmsg_pru.c -*/ -#define CHAN_NAME "rpmsg-pru" -#define CHAN_DESC "Channel 30" -#define CHAN_PORT 30 - -/* - * Used to make sure the Linux drivers are ready for RPMsg communication - * Found at linux-x.y.z/include/uapi/linux/virtio_config.h - */ -#define VIRTIO_CONFIG_S_DRIVER_OK 4 - -char payload[RPMSG_BUF_SIZE]; - -#define STR_LEN 24 -#define oneCyclesOn 700/5 // Stay on for 700ns -#define oneCyclesOff 600/5 -#define zeroCyclesOn 350/5 -#define zeroCyclesOff 800/5 -#define resetCycles 51000/5 // Must be at least 50u, use 51u -#define out P9_29 // Bit number to output on - -#define SPEED 20000000/5 // Time to wait between updates - -uint32_t color[STR_LEN]; // green, red, blue - -/* - * main.c - */ -void main(void) -{ - struct pru_rpmsg_transport transport; - uint16_t src, dst, len; - volatile uint8_t *status; - - uint8_t r, g, b; - int i, j; - // Set everything to background - for(i=0; i<STR_LEN; i++) { - color[i] = 0x010000; - } - - /* Allow OCP master port access by the PRU so the PRU can read external memories */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - /* Clear the status of the PRU-ICSS system event that the ARM will use to 'kick' us */ -#ifdef CHIP_IS_am57xx - CT_INTC.SICR_bit.STATUS_CLR_INDEX = FROM_ARM_HOST; -#else - CT_INTC.SICR_bit.STS_CLR_IDX = FROM_ARM_HOST; -#endif - - /* Make sure the Linux drivers are ready for RPMsg communication */ - status = &resourceTable.rpmsg_vdev.status; - while (!(*status & VIRTIO_CONFIG_S_DRIVER_OK)); - - /* Initialize the RPMsg transport structure */ - pru_rpmsg_init(&transport, &resourceTable.rpmsg_vring0, &resourceTable.rpmsg_vring1, TO_ARM_HOST, FROM_ARM_HOST); - - /* Create the RPMsg channel between the PRU and ARM user space using the transport structure. */ - while (pru_rpmsg_channel(RPMSG_NS_CREATE, &transport, CHAN_NAME, CHAN_DESC, CHAN_PORT) != PRU_RPMSG_SUCCESS); - while (1) { - /* Check bit 30 of register R31 to see if the ARM has kicked us */ - if (__R31 & HOST_INT) { - /* Clear the event status */ -#ifdef CHIP_IS_am57xx - CT_INTC.SICR_bit.STATUS_CLR_INDEX = FROM_ARM_HOST; -#else - CT_INTC.SICR_bit.STS_CLR_IDX = FROM_ARM_HOST; -#endif - /* Receive all available messages, multiple messages can be sent per kick */ - while (pru_rpmsg_receive(&transport, &src, &dst, payload, &len) == PRU_RPMSG_SUCCESS) { - char *ret; // rest of payload after front character is removed - int index; // index of LED to control - // Input format is: index red green blue - index = atoi(payload); - // Update the array, but don't write it out. - if((index >=0) & (index < STR_LEN)) { - ret = strchr(payload, ' '); // Skip over index - r = strtol(&ret[1], NULL, 0); - ret = strchr(&ret[1], ' '); // Skip over r, etc. - g = strtol(&ret[1], NULL, 0); - ret = strchr(&ret[1], ' '); - b = strtol(&ret[1], NULL, 0); - - color[index] = (g<<16)|(r<<8)|b; // String wants GRB - } - // When index is -1, send the array to the LED string - if(index == -1) { - // Output the string - for(j=0; j<STR_LEN; j++) { - // Cycle through each bit - for(i=23; i>=0; i--) { - if(color[j] & (0x1<<i)) { - __R30 |= out; // Set the GPIO pin to 1 - __delay_cycles(oneCyclesOn-1); - __R30 &= ~out; // Clear the GPIO pin - __delay_cycles(oneCyclesOff-14); - } else { - __R30 |= out; // Set the GPIO pin to 1 - __delay_cycles(zeroCyclesOn-1); - __R30 &= ~(out); // Clear the GPIO pin - __delay_cycles(zeroCyclesOff-14); - } - } - } - // Send Reset - __R30 &= ~out; // Clear the GPIO pin - __delay_cycles(resetCycles); - - // Wait - __delay_cycles(SPEED); - } - - } - } - } -} diff --git a/books/pru-cookbook/05blocks/code/neo4.pru1_1.c b/books/pru-cookbook/05blocks/code/neo4.pru1_1.c deleted file mode 100644 index 7c120937..00000000 --- a/books/pru-cookbook/05blocks/code/neo4.pru1_1.c +++ /dev/null @@ -1,145 +0,0 @@ -// Use rpmsg to control the NeoPixels via /dev/rpmsg_pru30 -#include <stdint.h> -#include <stdio.h> -#include <stdlib.h> // atoi -#include <string.h> -#include <pru_cfg.h> -#include <pru_intc.h> -#include <rsc_types.h> -#include <pru_rpmsg.h> -#include "resource_table_1.h" -#include "prugpio.h" - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -/* Host-1 Interrupt sets bit 31 in register R31 */ -#define HOST_INT ((uint32_t) 1 << 31) - -/* The PRU-ICSS system events used for RPMsg are defined in the Linux device tree - * PRU0 uses system event 16 (To ARM) and 17 (From ARM) - * PRU1 uses system event 18 (To ARM) and 19 (From ARM) - */ -#define TO_ARM_HOST 18 -#define FROM_ARM_HOST 19 - -/* -* Using the name 'rpmsg-pru' will probe the rpmsg_pru driver found -* at linux-x.y.z/drivers/rpmsg/rpmsg_pru.c -*/ -#define CHAN_NAME "rpmsg-pru" -#define CHAN_DESC "Channel 31" -#define CHAN_PORT 31 - -/* - * Used to make sure the Linux drivers are ready for RPMsg communication - * Found at linux-x.y.z/include/uapi/linux/virtio_config.h - */ -#define VIRTIO_CONFIG_S_DRIVER_OK 4 - -char payload[RPMSG_BUF_SIZE]; - -#define STR_LEN 24 -#define oneCyclesOn 700/5 // Stay on for 700ns -#define oneCyclesOff 600/5 -#define zeroCyclesOn 350/5 -#define zeroCyclesOff 800/5 -#define resetCycles 51000/5 // Must be at least 50u, use 51u -#define out P9_16 // Bit number to output on - -#define SPEED 20000000/5 // Time to wait between updates - -uint32_t color[STR_LEN]; // green, red, blue - -/* - * main.c - */ -void main(void) -{ - struct pru_rpmsg_transport transport; - uint16_t src, dst, len; - volatile uint8_t *status; - - uint8_t r, g, b; - int i, j; - // Set everything to background - for(i=0; i<STR_LEN; i++) { - color[i] = 0x010000; - } - - /* Allow OCP master port access by the PRU so the PRU can read external memories */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - /* Clear the status of the PRU-ICSS system event that the ARM will use to 'kick' us */ -#ifdef CHIP_IS_am57xx - CT_INTC.SICR_bit.STATUS_CLR_INDEX = FROM_ARM_HOST; -#else - CT_INTC.SICR_bit.STS_CLR_IDX = FROM_ARM_HOST; -#endif - - /* Make sure the Linux drivers are ready for RPMsg communication */ - status = &resourceTable.rpmsg_vdev.status; - while (!(*status & VIRTIO_CONFIG_S_DRIVER_OK)); - - /* Initialize the RPMsg transport structure */ - pru_rpmsg_init(&transport, &resourceTable.rpmsg_vring0, &resourceTable.rpmsg_vring1, TO_ARM_HOST, FROM_ARM_HOST); - - /* Create the RPMsg channel between the PRU and ARM user space using the transport structure. */ - while (pru_rpmsg_channel(RPMSG_NS_CREATE, &transport, CHAN_NAME, CHAN_DESC, CHAN_PORT) != PRU_RPMSG_SUCCESS); - while (1) { - /* Check bit 30 of register R31 to see if the ARM has kicked us */ - if (__R31 & HOST_INT) { - /* Clear the event status */ -#ifdef CHIP_IS_am57xx - CT_INTC.SICR_bit.STATUS_CLR_INDEX = FROM_ARM_HOST; -#else - CT_INTC.SICR_bit.STS_CLR_IDX = FROM_ARM_HOST; -#endif - /* Receive all available messages, multiple messages can be sent per kick */ - while (pru_rpmsg_receive(&transport, &src, &dst, payload, &len) == PRU_RPMSG_SUCCESS) { - char *ret; // rest of payload after front character is removed - int index; // index of LED to control - // Input format is: index red green blue - index = atoi(payload); - // Update the array, but don't write it out. - if((index >=0) & (index < STR_LEN)) { - ret = strchr(payload, ' '); // Skip over index - r = strtol(&ret[1], NULL, 0); - ret = strchr(&ret[1], ' '); // Skip over r, etc. - g = strtol(&ret[1], NULL, 0); - ret = strchr(&ret[1], ' '); - b = strtol(&ret[1], NULL, 0); - - color[index] = (g<<16)|(r<<8)|b; // String wants GRB - } - // When index is -1, send the array to the LED string - if(index == -1) { - // Output the string - for(j=0; j<STR_LEN; j++) { - // Cycle through each bit - for(i=23; i>=0; i--) { - if(color[j] & (0x1<<i)) { - __R30 |= out; // Set the GPIO pin to 1 - __delay_cycles(oneCyclesOn-1); - __R30 &= ~out; // Clear the GPIO pin - __delay_cycles(oneCyclesOff-14); - } else { - __R30 |= out; // Set the GPIO pin to 1 - __delay_cycles(zeroCyclesOn-1); - __R30 &= ~(out); // Clear the GPIO pin - __delay_cycles(zeroCyclesOff-14); - } - } - } - // Send Reset - __R30 &= ~out; // Clear the GPIO pin - __delay_cycles(resetCycles); - - // Wait - __delay_cycles(SPEED); - } - - } - } - } -} diff --git a/books/pru-cookbook/05blocks/code/neo_setup.sh b/books/pru-cookbook/05blocks/code/neo_setup.sh deleted file mode 100755 index 8f98cbb2..00000000 --- a/books/pru-cookbook/05blocks/code/neo_setup.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -# -export TARGET=neo1.pru0 -echo TARGET=$TARGET - -# Configure the PRU pins based on which Beagle is running -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine -if [ $machine = "Black" ]; then - echo " Found" - pins="P9_29 " -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - pins="P1_33" -else - echo " Not Found" - pins="" -fi - -for pin in $pins -do - echo $pin - config-pin $pin pruout - config-pin -q $pin -done diff --git a/books/pru-cookbook/05blocks/code/pwm-test.c b/books/pru-cookbook/05blocks/code/pwm-test.c deleted file mode 100644 index 3bff5f71..00000000 --- a/books/pru-cookbook/05blocks/code/pwm-test.c +++ /dev/null @@ -1,74 +0,0 @@ -/* - * - * pwm tester - * The on cycle and off cycles are stored in each PRU's Data memory - * - */ - -#include <stdio.h> -#include <fcntl.h> -#include <sys/mman.h> - -#define MAXCH 4 - -#define PRU_ADDR 0x4A300000 // Start of PRU memory Page 184 am335x TRM -#define PRU_LEN 0x80000 // Length of PRU memory -#define PRU0_DRAM 0x00000 // Offset to DRAM -#define PRU1_DRAM 0x02000 -#define PRU_SHAREDMEM 0x10000 // Offset to shared memory - -unsigned int *pru0DRAM_32int_ptr; // Points to the start of local DRAM -unsigned int *pru1DRAM_32int_ptr; // Points to the start of local DRAM -unsigned int *prusharedMem_32int_ptr; // Points to the start of the shared memory - -/******************************************************************************* -* int start_pwm_count(int ch, int countOn, int countOff) -* -* Starts a pwm pulse on for countOn and off for countOff to a single channel (ch) -*******************************************************************************/ -int start_pwm_count(int ch, int countOn, int countOff) { - unsigned int *pruDRAM_32int_ptr = pru0DRAM_32int_ptr; - - printf("countOn: %d, countOff: %d, count: %d\n", - countOn, countOff, countOn+countOff); - // write to PRU shared memory - pruDRAM_32int_ptr[2*(ch)+0] = countOn; // On time - pruDRAM_32int_ptr[2*(ch)+1] = countOff; // Off time - return 0; -} - -int main(int argc, char *argv[]) -{ - unsigned int *pru; // Points to start of PRU memory. - int fd; - printf("Servo tester\n"); - - fd = open ("/dev/mem", O_RDWR | O_SYNC); - if (fd == -1) { - printf ("ERROR: could not open /dev/mem.\n\n"); - return 1; - } - pru = mmap (0, PRU_LEN, PROT_READ | PROT_WRITE, MAP_SHARED, fd, PRU_ADDR); - if (pru == MAP_FAILED) { - printf ("ERROR: could not map memory.\n\n"); - return 1; - } - close(fd); - printf ("Using /dev/mem.\n"); - - pru0DRAM_32int_ptr = pru + PRU0_DRAM/4 + 0x200/4; // Points to 0x200 of PRU0 memory - pru1DRAM_32int_ptr = pru + PRU1_DRAM/4 + 0x200/4; // Points to 0x200 of PRU1 memory - prusharedMem_32int_ptr = pru + PRU_SHAREDMEM/4; // Points to start of shared memory - - int i; - for(i=0; i<MAXCH; i++) { - start_pwm_count(i, i+1, 20-(i+1)); - } - - if(munmap(pru, PRU_LEN)) { - printf("munmap failed\n"); - } else { - printf("munmap succeeded\n"); - } -} - diff --git a/books/pru-cookbook/05blocks/code/pwm1.pru0.c b/books/pru-cookbook/05blocks/code/pwm1.pru0.c deleted file mode 100644 index 2ea5caa1..00000000 --- a/books/pru-cookbook/05blocks/code/pwm1.pru0.c +++ /dev/null @@ -1,22 +0,0 @@ -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t gpio = P9_31; // Select which pin to toggle.; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - while(1) { - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(100000000); - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(100000000); - } -} diff --git a/books/pru-cookbook/05blocks/code/pwm1.pru1_1.c b/books/pru-cookbook/05blocks/code/pwm1.pru1_1.c deleted file mode 100644 index 1f8b737e..00000000 --- a/books/pru-cookbook/05blocks/code/pwm1.pru1_1.c +++ /dev/null @@ -1,22 +0,0 @@ -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t gpio = P9_16; // Select which pin to toggle.; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - while(1) { - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(100000000); - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(100000000); - } -} diff --git a/books/pru-cookbook/05blocks/code/pwm2.pru0.c b/books/pru-cookbook/05blocks/code/pwm2.pru0.c deleted file mode 100644 index bfa0d076..00000000 --- a/books/pru-cookbook/05blocks/code/pwm2.pru0.c +++ /dev/null @@ -1,22 +0,0 @@ -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t gpio = P9_31; // Select which pin to toggle.; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - while (1) { - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(1); // Delay one cycle to correct for loop time - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(0); - } -} diff --git a/books/pru-cookbook/05blocks/code/pwm3.pru0.c b/books/pru-cookbook/05blocks/code/pwm3.pru0.c deleted file mode 100644 index 4b2955a0..00000000 --- a/books/pru-cookbook/05blocks/code/pwm3.pru0.c +++ /dev/null @@ -1,43 +0,0 @@ -// This code does MAXCH parallel PWM channels. -// It's period is 3 us -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" - -#define MAXCH 4 // Maximum number of channels - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t ch; - uint32_t on[] = {1, 2, 3, 4}; // Number of cycles to stay on - uint32_t off[] = {4, 3, 2, 1}; // Number to stay off - uint32_t onCount[MAXCH]; // Current count - uint32_t offCount[MAXCH]; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - // Initialize the channel counters. - for(ch=0; ch<MAXCH; ch++) { - onCount[ch] = on[ch]; - offCount[ch]= off[ch]; - } - - while (1) { - for(ch=0; ch<MAXCH; ch++) { - if(onCount[ch]) { - onCount[ch]--; - __R30 |= 0x1<<ch; // Set the GPIO pin to 1 - } else if(offCount[ch]) { - offCount[ch]--; - __R30 &= ~(0x1<<ch); // Clear the GPIO pin - } else { - onCount[ch] = on[ch]; - offCount[ch]= off[ch]; - } - } - } -} diff --git a/books/pru-cookbook/05blocks/code/pwm4.pru0.c b/books/pru-cookbook/05blocks/code/pwm4.pru0.c deleted file mode 100644 index ee0f7ec6..00000000 --- a/books/pru-cookbook/05blocks/code/pwm4.pru0.c +++ /dev/null @@ -1,50 +0,0 @@ -// This code does MAXCH parallel PWM channels. -// It's period is 3 us -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" - -#define PRU0_DRAM 0x00000 // Offset to DRAM -// Skip the first 0x200 byte of DRAM since the Makefile allocates -// 0x100 for the STACK and 0x100 for the HEAP. -volatile unsigned int *pru0_dram = (unsigned int *) (PRU0_DRAM + 0x200); - -#define MAXCH 4 // Maximum number of channels per PRU - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t ch; - uint32_t on[] = {1, 2, 3, 4}; // Number of cycles to stay on - uint32_t off[] = {4, 3, 2, 1}; // Number to stay off - uint32_t onCount[MAXCH]; // Current count - uint32_t offCount[MAXCH]; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - // Initialize the channel counters. - for(ch=0; ch<MAXCH; ch++) { - pru0_dram[2*ch ] = on[ch]; // Copy to DRAM0 so the ARM can change it - pru0_dram[2*ch+1] = off[ch]; // Interleave the on and off values - onCount[ch] = on[ch]; - offCount[ch]= off[ch]; - } - - while (1) { - for(ch=0; ch<MAXCH; ch++) { - if(onCount[ch]) { - onCount[ch]--; - __R30 |= 0x1<<ch; // Set the GPIO pin to 1 - } else if(offCount[ch]) { - offCount[ch]--; - __R30 &= ~(0x1<<ch); // Clear the GPIO pin - } else { - onCount[ch] = pru0_dram[2*ch]; // Read from DRAM0 - offCount[ch]= pru0_dram[2*ch+1]; - } - } - } -} diff --git a/books/pru-cookbook/05blocks/code/pwm5.pru0.c b/books/pru-cookbook/05blocks/code/pwm5.pru0.c deleted file mode 100644 index 60a97b81..00000000 --- a/books/pru-cookbook/05blocks/code/pwm5.pru0.c +++ /dev/null @@ -1,53 +0,0 @@ -// This code does MAXCH parallel PWM channels. -// It's period is 510ns. -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" - -#define PRU0_DRAM 0x00000 // Offset to DRAM -// Skip the first 0x200 byte of DRAM since the Makefile allocates -// 0x100 for the STACK and 0x100 for the HEAP. -volatile unsigned int *pru0_dram = (unsigned int *) (PRU0_DRAM + 0x200); - -#define MAXCH 4 // Maximum number of channels per PRU - -#define update(ch) \ - if(onCount[ch]) { \ - onCount[ch]--; \ - __R30 |= 0x1<<ch; \ - } else if(offCount[ch]) { \ - offCount[ch]--; \ - __R30 &= ~(0x1<<ch); \ - } else { \ - onCount[ch] = pru0_dram[2*ch]; \ - offCount[ch]= pru0_dram[2*ch+1]; \ - } - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t ch; - uint32_t on[] = {1, 2, 3, 4}; - uint32_t off[] = {4, 3, 2, 1}; - uint32_t onCount[MAXCH], offCount[MAXCH]; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - -#pragma UNROLL(MAXCH) - for(ch=0; ch<MAXCH; ch++) { - pru0_dram[2*ch ] = on[ch]; // Copy to DRAM0 so the ARM can change it - pru0_dram[2*ch+1] = off[ch]; // Interleave the on and off values - onCount[ch] = on[ch]; - offCount[ch]= off[ch]; - } - - while (1) { - update(0) - update(1) - update(2) - update(3) - } -} diff --git a/books/pru-cookbook/05blocks/code/pwm6.pru0.c b/books/pru-cookbook/05blocks/code/pwm6.pru0.c deleted file mode 100644 index 6df321f5..00000000 --- a/books/pru-cookbook/05blocks/code/pwm6.pru0.c +++ /dev/null @@ -1,56 +0,0 @@ -// This code does MAXCH parallel PWM channels. -// All channels start at the same time. It's period is 510ns -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" - -#define PRU0_DRAM 0x00000 // Offset to DRAM -// Skip the first 0x200 byte of DRAM since the Makefile allocates -// 0x100 for the STACK and 0x100 for the HEAP. -volatile unsigned int *pru0_dram = (unsigned int *) (PRU0_DRAM + 0x200); - -#define MAXCH 4 // Maximum number of channels per PRU - -#define update(ch) \ - if(onCount[ch]) { \ - onCount[ch]--; \ - Rtmp |= 0x1<<ch; \ - } else if(offCount[ch]) { \ - offCount[ch]--; \ - Rtmp &= ~(0x1<<ch); \ - } else { \ - onCount[ch] = pru0_dram[2*ch]; \ - offCount[ch]= pru0_dram[2*ch+1]; \ - } - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t ch; - uint32_t on[] = {1, 2, 3, 4}; - uint32_t off[] = {4, 3, 2, 1}; - uint32_t onCount[MAXCH], offCount[MAXCH]; - register uint32_t Rtmp; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - -#pragma UNROLL(MAXCH) - for(ch=0; ch<MAXCH; ch++) { - pru0_dram[2*ch ] = on[ch]; // Copy to DRAM0 so the ARM can change it - pru0_dram[2*ch+1] = off[ch]; // Interleave the on and off values - onCount[ch] = on[ch]; - offCount[ch]= off[ch]; - } - Rtmp = __R30; - - while (1) { - update(0) - update(1) - update(2) - update(3) - __R30 = Rtmp; - } -} diff --git a/books/pru-cookbook/05blocks/code/pwm7-test.c b/books/pru-cookbook/05blocks/code/pwm7-test.c deleted file mode 100644 index cbb67698..00000000 --- a/books/pru-cookbook/05blocks/code/pwm7-test.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * - * pwm tester - * (c) Copyright 2016 - * Mark A. Yoder, 20-July-2016 - * The channels 0-11 are on PRU1 and channels 12-17 are on PRU0 - * The period and duty cycle values are stored in each PRU's Data memory - * The enable bits are stored in the shared memory - * - */ - -#include <stdio.h> -#include <fcntl.h> -#include <sys/mman.h> - -#define MAXCH 2 - -#define PRU_ADDR 0x4A300000 // Start of PRU memory Page 184 am335x TRM -#define PRU_LEN 0x80000 // Length of PRU memory -#define PRU0_DRAM 0x00000 // Offset to DRAM -#define PRU1_DRAM 0x02000 -#define PRU_SHAREDMEM 0x10000 // Offset to shared memory - -unsigned int *pru0DRAM_32int_ptr; // Points to the start of local DRAM -unsigned int *pru1DRAM_32int_ptr; // Points to the start of local DRAM -unsigned int *prusharedMem_32int_ptr; // Points to the start of the shared memory - -/******************************************************************************* -* int start_pwm_count(int ch, int countOn, int countOff) -* -* Starts a pwm pulse on for countOn and off for countOff to a single channel (ch) -*******************************************************************************/ -int start_pwm_count(int ch, int countOn, int countOff, unsigned int *ptr) { - unsigned int *pruDRAM_32int_ptr = ptr; - - printf("countOn: %d, countOff: %d, count: %d\n", - countOn, countOff, countOn+countOff); - // write to PRU shared memory - pruDRAM_32int_ptr[2*(ch)+0] = countOn; // On time - pruDRAM_32int_ptr[2*(ch)+1] = countOff; // Off time - return 0; -} - -int main(int argc, char *argv[]) -{ - unsigned int *pru; // Points to start of PRU memory. - int fd; - printf("Servo tester\n"); - - fd = open ("/dev/mem", O_RDWR | O_SYNC); - if (fd == -1) { - printf ("ERROR: could not open /dev/mem.\n\n"); - return 1; - } - pru = mmap (0, PRU_LEN, PROT_READ | PROT_WRITE, MAP_SHARED, fd, PRU_ADDR); - if (pru == MAP_FAILED) { - printf ("ERROR: could not map memory.\n\n"); - return 1; - } - close(fd); - printf ("Using /dev/mem.\n"); - - pru0DRAM_32int_ptr = pru + PRU0_DRAM/4 + 0x200/4; // Points to 0x200 of PRU0 memory - pru1DRAM_32int_ptr = pru + PRU1_DRAM/4 + 0x200/4; // Points to 0x200 of PRU1 memory - prusharedMem_32int_ptr = pru + PRU_SHAREDMEM/4; // Points to start of shared memory - - - int on[] = {1, 2, 3, 4}; - int off[] = {4, 3, 2, 1}; - - int ch; - for(ch=0; ch<MAXCH; ch++) { - start_pwm_count(ch, on[ch], off[ch], pru0DRAM_32int_ptr); - start_pwm_count(ch, on[ch+MAXCH], off[ch+MAXCH], pru1DRAM_32int_ptr); - } - - if(munmap(pru, PRU_LEN)) { - printf("munmap failed\n"); - } else { - printf("munmap succeeded\n"); - } -} - diff --git a/books/pru-cookbook/05blocks/code/pwm7.pru0.c b/books/pru-cookbook/05blocks/code/pwm7.pru0.c deleted file mode 100644 index b95c5caa..00000000 --- a/books/pru-cookbook/05blocks/code/pwm7.pru0.c +++ /dev/null @@ -1,57 +0,0 @@ -// This code does MAXCH parallel PWM channels on both PRU 0 and PRU 1 -// All channels start at the same time. But the PRU 1 ch have a difference period -// It's period is 370ns -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" - -#define PRUNUM 0 - -#define PRU0_DRAM 0x00000 // Offset to DRAM -// Skip the first 0x200 byte of DRAM since the Makefile allocates -// 0x100 for the STACK and 0x100 for the HEAP. -volatile unsigned int *pru0_dram = (unsigned int *) (PRU0_DRAM + 0x200); - -#define MAXCH 2 // Maximum number of channels per PRU - -#define update(ch) \ - if(onCount[ch]) { \ - onCount[ch]--; \ - Rtmp |= 0x1<<ch; \ - } else if(offCount[ch]) { \ - offCount[ch]--; \ - Rtmp &= ~(0x1<<ch); \ - } else { \ - onCount[ch] = pru0_dram[2*ch]; \ - offCount[ch]= pru0_dram[2*ch+1]; \ - } - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t ch; - uint32_t on[] = {1, 2, 3, 4}; - uint32_t off[] = {4, 3, 2, 1}; - uint32_t onCount[MAXCH], offCount[MAXCH]; - register uint32_t Rtmp; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - -#pragma UNROLL(MAXCH) - for(ch=0; ch<MAXCH; ch++) { - pru0_dram[2*ch ] = on [ch+PRUNUM*MAXCH]; // Copy to DRAM0 so the ARM can change it - pru0_dram[2*ch+1] = off[ch+PRUNUM*MAXCH]; // Interleave the on and off values - onCount[ch] = on [ch+PRUNUM*MAXCH]; - offCount[ch]= off[ch+PRUNUM*MAXCH]; - } - Rtmp = __R30; - - while (1) { - update(0) - update(1) - __R30 = Rtmp; - } -} diff --git a/books/pru-cookbook/05blocks/code/pwm7.pru1.c b/books/pru-cookbook/05blocks/code/pwm7.pru1.c deleted file mode 100644 index 50d4788b..00000000 --- a/books/pru-cookbook/05blocks/code/pwm7.pru1.c +++ /dev/null @@ -1,57 +0,0 @@ -// This code does MAXCH parallel PWM channels on both PRU 0 and PRU 1 -// All channels start at the same time. But the PRU 1 ch have a difference period -// It's period is 370ns -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" - -#define PRUNUM 1 - -#define PRU0_DRAM 0x00000 // Offset to DRAM -// Skip the first 0x200 byte of DRAM since the Makefile allocates -// 0x100 for the STACK and 0x100 for the HEAP. -volatile unsigned int *pru0_dram = (unsigned int *) (PRU0_DRAM + 0x200); - -#define MAXCH 2 // Maximum number of channels per PRU - -#define update(ch) \ - if(onCount[ch]) { \ - onCount[ch]--; \ - Rtmp |= 0x1<<ch; \ - } else if(offCount[ch]) { \ - offCount[ch]--; \ - Rtmp &= ~(0x1<<ch); \ - } else { \ - onCount[ch] = pru0_dram[2*ch]; \ - offCount[ch]= pru0_dram[2*ch+1]; \ - } - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t ch; - uint32_t on[] = {1, 2, 3, 4}; - uint32_t off[] = {4, 3, 2, 1}; - uint32_t onCount[MAXCH], offCount[MAXCH]; - register uint32_t Rtmp; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - -#pragma UNROLL(MAXCH) - for(ch=0; ch<MAXCH; ch++) { - pru0_dram[2*ch ] = on [ch+PRUNUM*MAXCH]; // Copy to DRAM0 so the ARM can change it - pru0_dram[2*ch+1] = off[ch+PRUNUM*MAXCH]; // Interleave the on and off values - onCount[ch] = on [ch+PRUNUM*MAXCH]; - offCount[ch]= off[ch+PRUNUM*MAXCH]; - } - Rtmp = __R30; - - while (1) { - update(0) - update(1) - __R30 = Rtmp; - } -} diff --git a/books/pru-cookbook/05blocks/code/pwm7_setup.sh b/books/pru-cookbook/05blocks/code/pwm7_setup.sh deleted file mode 100755 index aae4c778..00000000 --- a/books/pru-cookbook/05blocks/code/pwm7_setup.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -# -export TARGET=pwm7.pru0 -echo TARGET=$TARGET - -# Configure the PRU pins based on which Beagle is running -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine -if [ $machine = "Black" ]; then - echo " Found" - pins="P9_31 P9_29 P8_45 P8_46" -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - pins="P1_36 P1_33" -else - echo " Not Found" - pins="" -fi - -for pin in $pins -do - echo $pin - config-pin $pin pruout - config-pin -q $pin -done diff --git a/books/pru-cookbook/05blocks/code/pwm8.pru0.c b/books/pru-cookbook/05blocks/code/pwm8.pru0.c deleted file mode 100644 index c566573f..00000000 --- a/books/pru-cookbook/05blocks/code/pwm8.pru0.c +++ /dev/null @@ -1,78 +0,0 @@ -// This code does MAXCH parallel PWM channels on both PRU 0 and PRU 1 -// All channels start at the same time. -// It's period is 430ns -#include <stdint.h> -#include <pru_cfg.h> -#include <pru_intc.h> -#include <pru_ctrl.h> -#include "resource_table_empty.h" - -#define PRUNUM 0 - -#define PRU0_DRAM 0x00000 // Offset to DRAM -// Skip the first 0x200 byte of DRAM since the Makefile allocates -// 0x100 for the STACK and 0x100 for the HEAP. -volatile unsigned int *pru0_dram = (unsigned int *) (PRU0_DRAM + 0x200); - -#define MAXCH 2 // Maximum number of channels per PRU - -#define update(ch) \ - if(onCount[ch]) { \ - onCount[ch]--; \ - Rtmp |= 0x1<<ch; \ - } else if(offCount[ch]) { \ - offCount[ch]--; \ - Rtmp &= ~(0x1<<ch); \ - } else { \ - onCount[ch] = pru0_dram[2*ch]; \ - offCount[ch]= pru0_dram[2*ch+1]; \ - } - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -// Initialize interupts so the PRUs can be syncronized. -// PRU1 is started first and then waits for PRU0 -// PRU0 is then started and tells PRU1 when to start going -void configIntc(void) { - __R31 = 0x00000000; // Clear any pending PRU-generated events - CT_INTC.CMR4_bit.CH_MAP_16 = 1; // Map event 16 to channel 1 - CT_INTC.HMR0_bit.HINT_MAP_1 = 1; // Map channel 1 to host 1 - CT_INTC.SICR = 16; // Ensure event 16 is cleared - CT_INTC.EISR = 16; // Enable event 16 - CT_INTC.HIEISR |= (1 << 0); // Enable Host interrupt 1 - CT_INTC.GER = 1; // Globally enable host interrupts -} - -void main(void) -{ - uint32_t ch; - uint32_t on[] = {1, 2, 3, 4}; - uint32_t off[] = {4, 3, 2, 1}; - uint32_t onCount[MAXCH], offCount[MAXCH]; - register uint32_t Rtmp; - - CT_CFG.GPCFG0 = 0x0000; // Configure GPI and GPO as Mode 0 (Direct Connect) - configIntc(); // Configure INTC - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - -#pragma UNROLL(MAXCH) - for(ch=0; ch<MAXCH; ch++) { - pru0_dram[2*ch ] = on [ch+PRUNUM*MAXCH]; // Copy to DRAM0 so the ARM can change it - pru0_dram[2*ch+1] = off[ch+PRUNUM*MAXCH]; // Interleave the on and off values - onCount[ch] = on [ch+PRUNUM*MAXCH]; - offCount[ch]= off[ch+PRUNUM*MAXCH]; - } - Rtmp = __R30; - - while (1) { - __R30 = Rtmp; - update(0) - update(1) -#define PRU0_PRU1_EVT 16 - __R31 = (PRU0_PRU1_EVT-16) | (0x1<<5); //Tell PRU 1 to start - __delay_cycles(1); - } -} diff --git a/books/pru-cookbook/05blocks/code/pwm8.pru1.c b/books/pru-cookbook/05blocks/code/pwm8.pru1.c deleted file mode 100644 index cf5c241c..00000000 --- a/books/pru-cookbook/05blocks/code/pwm8.pru1.c +++ /dev/null @@ -1,66 +0,0 @@ -// This code does MAXCH parallel PWM channels on both PRU 0 and PRU 1 -// All channels start at the same time. -// It's period is 430ns -#include <stdint.h> -#include <pru_cfg.h> -#include <pru_intc.h> -#include <pru_ctrl.h> -#include "resource_table_empty.h" - -#define PRUNUM 1 - -#define PRU0_DRAM 0x00000 // Offset to DRAM -// Skip the first 0x200 byte of DRAM since the Makefile allocates -// 0x100 for the STACK and 0x100 for the HEAP. -volatile unsigned int *pru0_dram = (unsigned int *) (PRU0_DRAM + 0x200); - -#define MAXCH 2 // Maximum number of channels per PRU - -#define update(ch) \ - if(onCount[ch]) { \ - onCount[ch]--; \ - Rtmp |= 0x1<<ch; \ - } else if(offCount[ch]) { \ - offCount[ch]--; \ - Rtmp &= ~(0x1<<ch); \ - } else { \ - onCount[ch] = pru0_dram[2*ch]; \ - offCount[ch]= pru0_dram[2*ch+1]; \ - } - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -// Initialize interupts so the PRUs can be syncronized. -// PRU1 is started first and then waits for PRU0 -// PRU0 is then started and tells PRU1 when to start going - -void main(void) -{ - uint32_t ch; - uint32_t on[] = {1, 2, 3, 4}; - uint32_t off[] = {4, 3, 2, 1}; - uint32_t onCount[MAXCH], offCount[MAXCH]; - register uint32_t Rtmp; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - -#pragma UNROLL(MAXCH) - for(ch=0; ch<MAXCH; ch++) { - pru0_dram[2*ch ] = on [ch+PRUNUM*MAXCH]; // Copy to DRAM0 so the ARM can change it - pru0_dram[2*ch+1] = off[ch+PRUNUM*MAXCH]; // Interleave the on and off values - onCount[ch] = on [ch+PRUNUM*MAXCH]; - offCount[ch]= off[ch+PRUNUM*MAXCH]; - } - Rtmp = __R30; - - while (1) { - while((__R31 & (0x1<<31))==0) { // Wait for PRU 0 - } - CT_INTC.SICR = 16; // Clear event 16 - __R30 = Rtmp; - update(0) - update(1) - } -} diff --git a/books/pru-cookbook/05blocks/code/pwm_setup.sh b/books/pru-cookbook/05blocks/code/pwm_setup.sh deleted file mode 100755 index b69ed129..00000000 --- a/books/pru-cookbook/05blocks/code/pwm_setup.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -# -export TARGET=pwm1.pru0 -echo TARGET=$TARGET - -# Configure the PRU pins based on which Beagle is running -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine -if [ $machine = "Black" ]; then - echo " Found" - pins="P9_31 P9_29 P9_30 P9_28" -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - pins="P1_36 P1_33 P2_32 P2_30" -else - echo " Not Found" - pins="" -fi - -for pin in $pins -do - echo $pin - config-pin $pin pruout - config-pin -q $pin -done diff --git a/books/pru-cookbook/05blocks/code/resource_table_empty.h b/books/pru-cookbook/05blocks/code/resource_table_empty.h deleted file mode 100644 index 07e97d9b..00000000 --- a/books/pru-cookbook/05blocks/code/resource_table_empty.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * ======== resource_table_empty.h ======== - * - * Define the resource table entries for all PRU cores. This will be - * incorporated into corresponding base images, and used by the remoteproc - * on the host-side to allocated/reserve resources. Note the remoteproc - * driver requires that all PRU firmware be built with a resource table. - * - * This file contains an empty resource table. It can be used either as: - * - * 1) A template, or - * 2) As-is if a PRU application does not need to configure PRU_INTC - * or interact with the rpmsg driver - * - */ - -#ifndef _RSC_TABLE_PRU_H_ -#define _RSC_TABLE_PRU_H_ - -#include <stddef.h> -#include <rsc_types.h> - -struct my_resource_table { - struct resource_table base; - - uint32_t offset[1]; /* Should match 'num' in actual definition */ -}; - -#pragma DATA_SECTION(pru_remoteproc_ResourceTable, ".resource_table") -#pragma RETAIN(pru_remoteproc_ResourceTable) -struct my_resource_table pru_remoteproc_ResourceTable = { - 1, /* we're the first version that implements this */ - 0, /* number of entries in the table */ - 0, 0, /* reserved, must be zero */ - 0, /* offset[0] */ -}; - -#endif /* _RSC_TABLE_PRU_H_ */ - diff --git a/books/pru-cookbook/05blocks/code/rgb1.pru0.c b/books/pru-cookbook/05blocks/code/rgb1.pru0.c deleted file mode 100644 index 9936d627..00000000 --- a/books/pru-cookbook/05blocks/code/rgb1.pru0.c +++ /dev/null @@ -1,80 +0,0 @@ -// This code drives the RGB LED Matrix on the 1st Connector -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" -#include "rgb_pocket.h" - -#define DELAY 10 // Number of cycles (5ns each) to wait after a write - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - // Set up the pointers to each of the GPIO ports - uint32_t *gpio[] = { - (uint32_t *) GPIO0, - (uint32_t *) GPIO1, - (uint32_t *) GPIO2, - (uint32_t *) GPIO3 - }; - - uint32_t i, row; - - while(1) { - for(row=0; row<16; row++) { - // Set the row address - // Here we take advantage of the select bits (LA,LB,LC,LD) - // being sequential in the R30 register (bits 2,3,4,5) - // We shift row over so it lines up with the select bits - // Oring (|=) with R30 sets bits to 1 and - // Anding (&=) clears bits to 0, the 0xffc mask makes sure the - // other bits aren't changed. - __R30 |= row<<pru_sel0; - __R30 &= (row<<pru_sel0)|0xffc3; - - for(i=0; i<64; i++) { - // Top row white - // Combining these to one write works because they are all in - // the same gpio port - gpio[r11_gpio][GPIO_SETDATAOUT] = r11_pin | g11_pin | b11_pin; - __delay_cycles(DELAY);; - - // Bottom row red - gpio[r12_gpio][GPIO_SETDATAOUT] = r12_pin; - __delay_cycles(DELAY); - gpio[r12_gpio][GPIO_CLEARDATAOUT] = g12_pin | b12_pin; - __delay_cycles(DELAY); - - __R30 |= pru_clock; // Toggle clock - __delay_cycles(DELAY); - __R30 &= ~pru_clock; - __delay_cycles(DELAY); - - // Top row black - gpio[r11_gpio][GPIO_CLEARDATAOUT] = r11_pin | g11_pin | b11_pin; - __delay_cycles(DELAY); - - // Bottom row green - gpio[r12_gpio][GPIO_CLEARDATAOUT] = r12_pin | b12_pin; - __delay_cycles(DELAY); - gpio[r12_gpio][GPIO_SETDATAOUT] = g12_pin; - __delay_cycles(DELAY); - - __R30 |= pru_clock; // Toggle clock - __delay_cycles(DELAY); - __R30 &= ~pru_clock; - __delay_cycles(DELAY); - } - __R30 |= pru_oe; // Disable display - __delay_cycles(DELAY); - __R30 |= pru_latch; // Toggle latch - __delay_cycles(DELAY); - __R30 &= ~pru_latch; - __delay_cycles(DELAY); - __R30 &= ~pru_oe; // Enable display - __delay_cycles(DELAY); - } - } -} diff --git a/books/pru-cookbook/05blocks/code/rgb2.pru0.c b/books/pru-cookbook/05blocks/code/rgb2.pru0.c deleted file mode 100644 index eb43b357..00000000 --- a/books/pru-cookbook/05blocks/code/rgb2.pru0.c +++ /dev/null @@ -1,81 +0,0 @@ -// This code drives the RGB LED Matrix on J1 connector -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" -#include "rgb_pocket.h" - -#define DELAY 100 - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - // Set up the pointers to each of the GPIO ports - uint32_t *gpio[] = { - (uint32_t *) GPIO0, - (uint32_t *) GPIO1, - (uint32_t *) GPIO2, - (uint32_t *) GPIO3 - }; - - uint32_t i, row; - - while(1) { - for(row=0; row<16; row++) { - if(row&(0x1<<0)) __R30|=(0x1<<pru_sel0); else __R30&=~(0x1<<pru_sel0); - __delay_cycles(DELAY); - if(row&(0x1<<1)) __R30|=(0x1<<pru_sel1); else __R30&=~(0x1<<pru_sel1); - __delay_cycles(DELAY); - if(row&(0x1<<2)) __R30|=(0x1<<pru_sel2); else __R30&=~(0x1<<pru_sel2); - __delay_cycles(DELAY); - if(row&(0x1<<3)) __R30|=(0x1<<pru_sel3); else __R30&=~(0x1<<pru_sel3); - __delay_cycles(DELAY); - - for(i=0; i<64; i++) { - // red - gpio[r11_gpio][GPIO_SETDATAOUT] = r11_pin; - __delay_cycles(DELAY); - gpio[r11_gpio][GPIO_CLEARDATAOUT] = g11_pin | b11_pin; - __delay_cycles(DELAY); - - // green - gpio[r11_gpio][GPIO_CLEARDATAOUT] = r12_pin | b12_pin; - __delay_cycles(DELAY); - gpio[r11_gpio][GPIO_SETDATAOUT] = g12_pin; - __delay_cycles(DELAY); - - __R30 |= pru_clock; // Toggle clock - __delay_cycles(DELAY); - __R30 &= ~pru_clock; - __delay_cycles(DELAY); - - // blue - gpio[r11_gpio][GPIO_CLEARDATAOUT] = r11_pin | g11_pin; - __delay_cycles(DELAY); - gpio[r11_gpio][GPIO_SETDATAOUT] = b11_pin; - __delay_cycles(DELAY); - - //blue - gpio[r11_gpio][GPIO_CLEARDATAOUT] = r12_pin | g12_pin; - __delay_cycles(DELAY); - gpio[r11_gpio][GPIO_SETDATAOUT] = b12_pin; - __delay_cycles(DELAY); - - __R30 |= pru_clock; // Toggle clock - __delay_cycles(DELAY); - __R30 &= ~pru_clock; - __delay_cycles(DELAY); - } - __R30 |= pru_oe; // Disable display - __delay_cycles(DELAY); - __R30 |= pru_latch; // Toggle latch - __delay_cycles(DELAY); - __R30 &= ~pru_latch; - __delay_cycles(DELAY); - __R30 &= ~pru_oe; // Enable display - __delay_cycles(DELAY); - } - } -} diff --git a/books/pru-cookbook/05blocks/code/rgb3.pru0.c b/books/pru-cookbook/05blocks/code/rgb3.pru0.c deleted file mode 100644 index b14ad864..00000000 --- a/books/pru-cookbook/05blocks/code/rgb3.pru0.c +++ /dev/null @@ -1,114 +0,0 @@ -// This code drives the RGB LED Matrix on the 1st and 2nd Connectors -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" -#include "rgb_pocket.h" - -#define DELAY 10 // Number of cycles (5ns each) to wait after a write - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - // Set up the pointers to each of the GPIO ports - uint32_t *gpio[] = { - (uint32_t *) GPIO0, - (uint32_t *) GPIO1, - (uint32_t *) GPIO2, - (uint32_t *) GPIO3 - }; - - uint32_t i, row; - - while(1) { - for(row=0; row<16; row++) { - // Set the row address - // Here we take advantage of the select bits (LA,LB,LC,LD) - // being sequential in the R30 register (bits 2,3,4,5) - // We shift row over so it lines up with the select bits - // Oring (|=) with R30 sets bits to 1 and - // Anding (&=) clears bits to 0, the 0xffc mask makes sure the - // other bits aren't changed. - __R30 |= row<<pru_sel0; - __R30 &= (row<<pru_sel0)|0xffc3; - - for(i=0; i<64; i++) { - // Panel 1 Upper - // Top row white - // Combining these to one write works because they are all in - // the same gpio port - gpio[r11_gpio][GPIO_SETDATAOUT] = r11_pin | g11_pin | b11_pin; - __delay_cycles(DELAY); - - // Bottom row red - gpio[r12_gpio][GPIO_SETDATAOUT] = r12_pin; - // __delay_cycles(DELAY); - gpio[g12_gpio][GPIO_CLEARDATAOUT] = g12_pin | b12_pin; - __delay_cycles(DELAY); - - // Panel 2 Upper - // Top row blue - // Combining these to one write works because they are all in - // the same gpio port except b12 - gpio[r21_gpio][GPIO_CLEARDATAOUT] = r21_pin | g21_pin; - // __delay_cycles(DELAY); - gpio[b21_gpio][GPIO_SETDATAOUT] = b21_pin; - __delay_cycles(DELAY); - - // Bottom row red - gpio[r22_gpio][GPIO_SETDATAOUT] = r22_pin; - __delay_cycles(DELAY); - gpio[g22_gpio][GPIO_CLEARDATAOUT] = g22_pin; - __delay_cycles(DELAY); - gpio[b22_gpio][GPIO_CLEARDATAOUT] = b22_pin; - __delay_cycles(DELAY); - - __R30 |= pru_clock; // Toggle clock - __delay_cycles(DELAY); - __R30 &= ~pru_clock; - __delay_cycles(DELAY); - - // Panel 1 Lower - // Top row black - gpio[r11_gpio][GPIO_CLEARDATAOUT] = r11_pin | g11_pin | b11_pin; - __delay_cycles(DELAY); - - // Bottom row green - gpio[r12_gpio][GPIO_CLEARDATAOUT] = r12_pin | b12_pin; - __delay_cycles(DELAY); - gpio[g12_gpio][GPIO_SETDATAOUT] = g12_pin; - __delay_cycles(DELAY); - - // Panel 2 Lower - // Top row reg+green = yellow - gpio[r21_gpio][GPIO_SETDATAOUT] = r21_pin | g21_pin; - __delay_cycles(DELAY); - gpio[b21_gpio][GPIO_CLEARDATAOUT] = b21_pin; - __delay_cycles(DELAY); - - // Bottom row green - gpio[r22_gpio][GPIO_CLEARDATAOUT] = r22_pin; - __delay_cycles(DELAY); - gpio[b22_gpio][GPIO_CLEARDATAOUT] = b22_pin; - __delay_cycles(DELAY); - gpio[g22_gpio][GPIO_SETDATAOUT] = g22_pin; - __delay_cycles(2*DELAY); - - __R30 |= pru_clock; // Toggle clock - __delay_cycles(DELAY); - __R30 &= ~pru_clock; - __delay_cycles(DELAY); - } - __R30 |= pru_oe; // Disable display - __delay_cycles(DELAY); - __R30 |= pru_latch; // Toggle latch - __delay_cycles(DELAY); - __R30 &= ~pru_latch; - __delay_cycles(DELAY); - __R30 &= ~pru_oe; // Enable display - __delay_cycles(DELAY); - } - } -} diff --git a/books/pru-cookbook/05blocks/code/rgb4.pru0.c b/books/pru-cookbook/05blocks/code/rgb4.pru0.c deleted file mode 100644 index 6d06f121..00000000 --- a/books/pru-cookbook/05blocks/code/rgb4.pru0.c +++ /dev/null @@ -1,84 +0,0 @@ -// This code drives the RGB LED Matrix on the 2nd Connector -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" -#include "rgb_pocket.h" - -#define DELAY 10 // Number of cycles (5ns each) to wait after a write - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - // Set up the pointers to each of the GPIO ports - uint32_t *gpio[] = { - (uint32_t *) GPIO0, - (uint32_t *) GPIO1, - (uint32_t *) GPIO2, - (uint32_t *) GPIO3 - }; - - uint32_t i, row; - - while(1) { - for(row=0; row<16; row++) { - // Set the row address - // Here we take advantage of the select bits (LA,LB,LC,LD) - // being sequential in the R30 register (bits 2,3,4,5) - // We shift row over so it lines up with the select bits - // Oring (|=) with R30 sets bits to 1 and - // Anding (&=) clears bits to 0, the 0xffc mask makes sure the - // other bits aren't changed. - __R30 |= row<<pru_sel0; - __R30 &= (row<<pru_sel0)|0xffc3; - - for(i=0; i<64; i++) { - // Top row white - // Combining these to one write works because they are all in - // the same gpio port except b12 - gpio[r21_gpio][GPIO_SETDATAOUT] = r21_pin | g21_pin; - __delay_cycles(DELAY); - gpio[b21_gpio][GPIO_SETDATAOUT] = b21_pin; - __delay_cycles(DELAY); - - // Bottom row red - gpio[r22_gpio][GPIO_SETDATAOUT] = r22_pin; - __delay_cycles(DELAY); - gpio[g22_gpio][GPIO_CLEARDATAOUT] = g22_pin | b22_pin; - __delay_cycles(2*DELAY); - - __R30 |= pru_clock; // Toggle clock - __delay_cycles(DELAY); - __R30 &= ~pru_clock; - __delay_cycles(DELAY); - - // Top row black - gpio[r21_gpio][GPIO_CLEARDATAOUT] = r21_pin | g21_pin; - __delay_cycles(DELAY); - gpio[b21_gpio][GPIO_CLEARDATAOUT] = b21_pin; - __delay_cycles(DELAY); - - // Bottom row green - gpio[r22_gpio][GPIO_CLEARDATAOUT] = r22_pin | b22_pin; - __delay_cycles(DELAY); - gpio[g22_gpio][GPIO_SETDATAOUT] = g22_pin; - __delay_cycles(2*DELAY); - - __R30 |= pru_clock; // Toggle clock - __delay_cycles(DELAY); - __R30 &= ~pru_clock; - __delay_cycles(DELAY); - } - __R30 |= pru_oe; // Disable display - __delay_cycles(DELAY); - __R30 |= pru_latch; // Toggle latch - __delay_cycles(DELAY); - __R30 &= ~pru_latch; - __delay_cycles(DELAY); - __R30 &= ~pru_oe; // Enable display - __delay_cycles(DELAY); - } - } -} diff --git a/books/pru-cookbook/05blocks/code/rgb_black.h b/books/pru-cookbook/05blocks/code/rgb_black.h deleted file mode 100644 index be7cf4ba..00000000 --- a/books/pru-cookbook/05blocks/code/rgb_black.h +++ /dev/null @@ -1,31 +0,0 @@ -//Black - Not tested -// These are from https://github.com/FalconChristmas/fpp/blob/master/src/pru/PocketScrollerV1.hp -// _gpio tells which gpio port and _pin tells which bit in the port -// The first 1 in r11 is for the J1 connector -// See the githuub file for the other connectors - -#define r11_gpio 2 -#define r11_pin 9 -#define g11_gpio 2 -#define g11_pin 11 -#define b11_gpio 2 -#define b11_pin 10 - -#define r12_gpio 2 -#define r12_pin 12 -#define g12_gpio 2 -#define g12_pin 22 -#define b12_gpio 2 -#define b12_pin 23 - -#define pru_latch 1 // These are the bit positions in R30 -#define pru_oe 0 -#define pru_clock 2 - -// Control pins are all in GPIO2 -// The pocket has these on R0, the code needs to be changed for this work work -#define gpio_sel0 13 /* must be sequential with sel1 and sel2 */ -#define gpio_sel1 14 -#define gpio_sel2 15 -#define gpio_sel3 16 -#define gpio_sel4 17 diff --git a/books/pru-cookbook/05blocks/code/rgb_pocket.h b/books/pru-cookbook/05blocks/code/rgb_pocket.h deleted file mode 100644 index 45a91118..00000000 --- a/books/pru-cookbook/05blocks/code/rgb_pocket.h +++ /dev/null @@ -1,45 +0,0 @@ -// Pocket -// These are from https://github.com/FalconChristmas/fpp/blob/master/src/pru/PocketScrollerV1.hp -// _gpio tells which gpio port and _pin tells which bit in the port -// The first 1 in r11 is for the J1 connector -// See the githuub file for the other connectors - -// J1 -#define r11_gpio 1 -#define r11_pin (0x1<<20) -#define g11_gpio 1 -#define g11_pin (0x1<<28) -#define b11_gpio 1 -#define b11_pin (0x1<<25) - -#define r12_gpio 1 -#define r12_pin (0x1<<26) -#define g12_gpio 1 -#define g12_pin (0x1<<27) -#define b12_gpio 1 -#define b12_pin (0x1<<18) - -// J2 -#define r21_gpio 1 -#define r21_pin (0x1<<8) -#define g21_gpio 1 -#define g21_pin (0x1<<9) -#define b21_gpio 0 -#define b21_pin (0x1<<30) - -#define r22_gpio 1 -#define r22_pin (0x1<<12) -#define g22_gpio 1 -#define g22_pin (0x1<<14) -#define b22_gpio 1 -#define b22_pin (0x1<<15) - -// All connectors -#define pru_latch (0x1<<0) // These are the bit positions in R30 -#define pru_oe (0x1<<7) -#define pru_clock (0x1<<1) - -#define pru_sel0 2 // These are called LA, LB, LC and LD in the python code -#define pru_sel1 3 // Also bit positions -#define pru_sel2 4 -#define pru_sel3 5 diff --git a/books/pru-cookbook/05blocks/code/rgb_python.py b/books/pru-cookbook/05blocks/code/rgb_python.py deleted file mode 100755 index 25e35334..00000000 --- a/books/pru-cookbook/05blocks/code/rgb_python.py +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env python3 -import Adafruit_BBIO.GPIO as GPIO - -# Define which functions are connect to which pins -OE="P1_29" # Output Enable, active low -LAT="P1_36" # Latch, toggle after clocking in a row of pixels -CLK="P1_33" # Clock, toggle after each pixel - -# Input data pins -R1="P2_10" # R1, G1, B1 are for the top rows (1-16) of pixels -G1="P2_8" -B1="P2_6" - -R2="P2_4" # R2, G2, B2 are for the bottom rows (17-32) of pixels -G2="P2_2" -B2="P2_1" - -LA="P2_32" # Address lines for which row (1-16 or 17-32) to update -LB="P2_30" -LC="P1_31" -LD="P2_34" - -# Set everything as output ports -GPIO.setup(OE, GPIO.OUT) -GPIO.setup(LAT, GPIO.OUT) -GPIO.setup(CLK, GPIO.OUT) - -GPIO.setup(R1, GPIO.OUT) -GPIO.setup(G1, GPIO.OUT) -GPIO.setup(B1, GPIO.OUT) -GPIO.setup(R2, GPIO.OUT) -GPIO.setup(G2, GPIO.OUT) -GPIO.setup(B2, GPIO.OUT) - -GPIO.setup(LA, GPIO.OUT) -GPIO.setup(LB, GPIO.OUT) -GPIO.setup(LC, GPIO.OUT) -GPIO.setup(LD, GPIO.OUT) - -GPIO.output(OE, 0) # Enable the display -GPIO.output(LAT, 0) # Set latch to low - -while True: - for bank in range(64): - GPIO.output(LA, bank>>0&0x1) # Select rows - GPIO.output(LB, bank>>1&0x1) - GPIO.output(LC, bank>>2&0x1) - GPIO.output(LD, bank>>3&0x1) - - # Shift the colors out. Here we only have four different - # colors to keep things simple. - for i in range(16): - GPIO.output(R1, 1) # Top row, white - GPIO.output(G1, 1) - GPIO.output(B1, 1) - - GPIO.output(R2, 1) # Bottom row, red - GPIO.output(G2, 0) - GPIO.output(B2, 0) - - GPIO.output(CLK, 0) # Toggle clock - GPIO.output(CLK, 1) - - GPIO.output(R1, 0) # Top row, black - GPIO.output(G1, 0) - GPIO.output(B1, 0) - - GPIO.output(R2, 0) # Bottom row, green - GPIO.output(G2, 1) - GPIO.output(B2, 0) - - GPIO.output(CLK, 0) # Toggle clock - GPIO.output(CLK, 1) - - GPIO.output(OE, 1) # Disable display while updating - GPIO.output(LAT, 1) # Toggle latch - GPIO.output(LAT, 0) - GPIO.output(OE, 0) # Enable display diff --git a/books/pru-cookbook/05blocks/code/rgb_python_setup.sh b/books/pru-cookbook/05blocks/code/rgb_python_setup.sh deleted file mode 100755 index 72106746..00000000 --- a/books/pru-cookbook/05blocks/code/rgb_python_setup.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -# Setup for 64x32 RGB Matrix -export TARGET=rgb1.pru0 -echo TARGET=$TARGET - -# Configure the PRU pins based on which Beagle is running -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine -if [ $machine = "Black" ]; then - echo " Found" - pins="" -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - prupins="P2_32 P1_31 P1_33 P1_29 P2_30 P2_34 P1_36" - gpiopins="P2_10 P2_06 P2_04 P2_01 P2_08 P2_02" - # Uncomment for J2 - # gpiopins="$gpiopins P2_27 P2_25 P2_05 P2_24 P2_22 P2_18" -else - echo " Not Found" - pins="" -fi - -for pin in $prupins -do - echo $pin - # config-pin $pin pruout - config-pin $pin gpio - config-pin $pin out - config-pin -q $pin -done - -for pin in $gpiopins -do - echo $pin - config-pin $pin gpio - config-pin $pin out - config-pin -q $pin -done diff --git a/books/pru-cookbook/05blocks/code/rgb_setup.sh b/books/pru-cookbook/05blocks/code/rgb_setup.sh deleted file mode 100755 index fc545144..00000000 --- a/books/pru-cookbook/05blocks/code/rgb_setup.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -# Setup for 64x32 RGB Matrix -export TARGET=rgb1.pru0 -echo TARGET=$TARGET - -# Configure the PRU pins based on which Beagle is running -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine -if [ $machine = "Black" ]; then - echo " Found" - pins="" -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - prupins="P2_32 P1_31 P1_33 P1_29 P2_30 P2_34 P1_36" - gpiopins="P2_10 P2_06 P2_04 P2_01 P2_08 P2_02" - # Uncomment for J2 - # gpiopins="$gpiopins P2_27 P2_25 P2_05 P2_24 P2_22 P2_18" -else - echo " Not Found" - pins="" -fi - -for pin in $prupins -do - echo $pin - config-pin $pin pruout - # config-pin $pin gpio - # config-pin $pin out - config-pin -q $pin -done - -for pin in $gpiopins -do - echo $pin - config-pin $pin gpio - config-pin $pin out - config-pin -q $pin -done diff --git a/books/pru-cookbook/05blocks/code/rgb_white.pru0.c b/books/pru-cookbook/05blocks/code/rgb_white.pru0.c deleted file mode 100644 index e62d98e0..00000000 --- a/books/pru-cookbook/05blocks/code/rgb_white.pru0.c +++ /dev/null @@ -1,64 +0,0 @@ -// This code drives the RGB LED Matrix -// Turns all the LEDs on -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" -#include "rgb_pocket.h" - -#define DELAY 10 // Number of cycles (5ns each) to wait after a write - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - // Set up the pointers to each of the GPIO ports - uint32_t *gpio[] = { - (uint32_t *) GPIO0, - (uint32_t *) GPIO1, - (uint32_t *) GPIO2, - (uint32_t *) GPIO3 - }; - - uint32_t i, row; - - while(1) { - for(row=0; row<16; row++) { - // Set the row address - // Here we take advantage of the select bits (LA,LB,LC,LD) - // being sequential in the R30 register (bits 2,3,4,5) - // We shift row over so it lines up with the select bits - // Oring (|=) with R30 sets bits to 1 and - // Anding (&=) clears bits to 0, the 0xffc mask makes sure the - // other bits aren't changed. - __R30 |= row<<pru_sel0; - __R30 &= (row<<pru_sel0)|0xffc3; - - for(i=0; i<64; i++) { - // Top row white - // Combining these to one write works because they are all in - // the same gpio port - gpio[r11_gpio][GPIO_SETDATAOUT] = r11_pin | g11_pin | b11_pin; - __delay_cycles(DELAY);; - - // Bottom row white - gpio[r12_gpio][GPIO_SETDATAOUT] = r12_pin | g12_pin | b12_pin; - __delay_cycles(DELAY); - - __R30 |= pru_clock; // Toggle clock - __delay_cycles(DELAY); - __R30 &= ~pru_clock; - __delay_cycles(DELAY); - } - __R30 |= pru_oe; // Disable display - __delay_cycles(DELAY); - __R30 |= pru_latch; // Toggle latch - __delay_cycles(DELAY); - __R30 &= ~pru_latch; - __delay_cycles(DELAY); - __R30 &= ~pru_oe; // Enable display - __delay_cycles(DELAY); - } - } -} diff --git a/books/pru-cookbook/05blocks/code/shared.pru0.c b/books/pru-cookbook/05blocks/code/shared.pru0.c deleted file mode 100644 index 95d87c5d..00000000 --- a/books/pru-cookbook/05blocks/code/shared.pru0.c +++ /dev/null @@ -1,63 +0,0 @@ -// From: http://git.ti.com/pru-software-support-package/pru-software-support-package/blobs/master/examples/am335x/PRU_access_const_table/PRU_access_const_table.c -#include <stdint.h> -#include <pru_cfg.h> -#include <pru_ctrl.h> -#include "resource_table_empty.h" - -#define PRU_SRAM __far __attribute__((cregister("PRU_SHAREDMEM", near))) -#define PRU_DMEM0 __far __attribute__((cregister("PRU_DMEM_0_1", near))) -#define PRU_DMEM1 __far __attribute__((cregister("PRU_DMEM_1_0", near))) - -/* NOTE: Allocating shared_x to PRU Shared Memory means that other PRU cores on - * the same subsystem must take care not to allocate data to that memory. - * Users also cannot rely on where in shared memory these variables are placed - * so accessing them from another PRU core or from the ARM is an undefined behavior. - */ -volatile uint32_t shared_0; -PRU_SRAM volatile uint32_t shared_1; -PRU_DMEM0 volatile uint32_t shared_2; -PRU_DMEM1 volatile uint32_t shared_3; -#pragma DATA_SECTION(shared_4, ".bss") -volatile uint32_t shared_4; - -/* NOTE: Here we pick where in memory to store shared_5. The stack and - * heap take up the first 0x200 words, so we must start after that. - * Since we are hardcoding where things are stored we can share - * this between the PRUs and the ARM. -*/ -#define PRU0_DRAM 0x00000 // Offset to DRAM -// Skip the first 0x200 bytes of DRAM since the Makefile allocates -// 0x100 for the STACK and 0x100 for the HEAP. -volatile unsigned int *shared_5 = (unsigned int *) (PRU0_DRAM + 0x200); - - -int main(void) -{ - volatile uint32_t shared_6; - volatile uint32_t shared_7; - /*****************************************************************/ - /* Access PRU peripherals using Constant Table & PRU header file */ - /*****************************************************************/ - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - /*****************************************************************/ - /* Access PRU Shared RAM using Constant Table */ - /*****************************************************************/ - - /* C28 defaults to 0x00000000, we need to set bits 23:8 to 0x0100 in order to have it point to 0x00010000 */ - PRU0_CTRL.CTPPR0_bit.C28_BLK_POINTER = 0x0100; - - shared_0 = 0xfeef; - shared_1 = 0xdeadbeef; - shared_2 = shared_2 + 0xfeed; - shared_3 = 0xdeed; - shared_4 = 0xbeed; - shared_5[0] = 0x1234; - shared_6 = 0x4321; - shared_7 = 0x9876; - - /* Halt PRU core */ - __halt(); -} diff --git a/books/pru-cookbook/05blocks/code/shared_setup.sh b/books/pru-cookbook/05blocks/code/shared_setup.sh deleted file mode 100755 index eefbcd55..00000000 --- a/books/pru-cookbook/05blocks/code/shared_setup.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -# -export TARGET=shared.pru0 -echo TARGET=$TARGET - -# Configure the PRU pins based on which Beagle is running -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine -if [ $machine = "Black" ]; then - echo " Found" - pins="P9_31 P9_29 P9_30 P9_28" -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - pins="P1_36 P1_33 P2_32 P2_30" -else - echo " Not Found" - pins="" -fi - -for pin in $pins -do - echo $pin - config-pin $pin pruout - config-pin -q $pin -done diff --git a/books/pru-cookbook/05blocks/code/sine.map b/books/pru-cookbook/05blocks/code/sine.map deleted file mode 100644 index 45872d39..00000000 --- a/books/pru-cookbook/05blocks/code/sine.map +++ /dev/null @@ -1,338 +0,0 @@ -****************************************************************************** -PRU Linker Unix v2.1.5 -****************************************************************************** ->> Linked Fri Jun 29 13:58:08 2018 - -OUTPUT FILE NAME: </tmp/pru0-gen/sine1.out> -ENTRY POINT SYMBOL: "_c_int00_noinit_noargs_noexit" address: 00000000 - - -MEMORY CONFIGURATION - - name origin length used unused attr fill ----------------------- -------- --------- -------- -------- ---- -------- -PAGE 0: - PRU_IMEM 00000000 00002000 000018c0 00000740 RWIX - -PAGE 1: - PRU_DMEM_0_1 00000000 00002000 00000154 00001eac RWIX - PRU_DMEM_1_0 00002000 00002000 00000000 00002000 RWIX - -PAGE 2: - PRU_SHAREDMEM 00010000 00003000 00000000 00003000 RWIX - PRU_INTC 00020000 00001504 00000000 00001504 RWIX - PRU_CFG 00026000 00000044 00000044 00000000 RWIX - PRU_UART 00028000 00000038 00000000 00000038 RWIX - PRU_IEP 0002e000 0000031c 00000000 0000031c RWIX - PRU_ECAP 00030000 00000060 00000000 00000060 RWIX - RSVD27 00032000 00000100 00000000 00000100 RWIX - RSVD21 00032400 00000100 00000000 00000100 RWIX - L3OCMC 40000000 00010000 00000000 00010000 RWIX - MCASP0_DMA 46000000 00000100 00000000 00000100 RWIX - UART1 48022000 00000088 00000000 00000088 RWIX - UART2 48024000 00000088 00000000 00000088 RWIX - I2C1 4802a000 000000d8 00000000 000000d8 RWIX - MCSPI0 48030000 000001a4 00000000 000001a4 RWIX - DMTIMER2 48040000 0000005c 00000000 0000005c RWIX - MMCHS0 48060000 00000300 00000000 00000300 RWIX - MBX0 480c8000 00000140 00000000 00000140 RWIX - SPINLOCK 480ca000 00000880 00000000 00000880 RWIX - I2C2 4819c000 000000d8 00000000 000000d8 RWIX - MCSPI1 481a0000 000001a4 00000000 000001a4 RWIX - DCAN0 481cc000 000001e8 00000000 000001e8 RWIX - DCAN1 481d0000 000001e8 00000000 000001e8 RWIX - PWMSS0 48300000 000002c4 00000000 000002c4 RWIX - PWMSS1 48302000 000002c4 00000000 000002c4 RWIX - PWMSS2 48304000 000002c4 00000000 000002c4 RWIX - RSVD13 48310000 00000100 00000000 00000100 RWIX - RSVD10 48318000 00000100 00000000 00000100 RWIX - TPCC 49000000 00001098 00000000 00001098 RWIX - GEMAC 4a100000 0000128c 00000000 0000128c RWIX - DDR 80000000 00000100 00000000 00000100 RWIX - - -SECTION ALLOCATION MAP - - output attributes/ -section page origin length input sections --------- ---- ---------- ---------- ---------------- -.text:_c_int00* -* 0 00000000 00000014 - 00000000 00000014 rtspruv3_le.lib : boot_special.obj (.text:_c_int00_noinit_noargs_noexit) - -.text 0 00000014 000018ac - 00000014 00000374 rtspruv3_le.lib : sin.obj (.text:sin) - 00000388 00000314 : frcmpyd.obj (.text:__TI_frcmpyd) - 0000069c 00000258 : frcaddd.obj (.text:__TI_frcaddd) - 000008f4 00000254 : mpyd.obj (.text:__pruabi_mpyd) - 00000b48 00000248 : addd.obj (.text:__pruabi_addd) - 00000d90 000001c8 : mpyf.obj (.text:__pruabi_mpyf) - 00000f58 00000100 : modf.obj (.text:modf) - 00001058 000000b4 : gtd.obj (.text:__pruabi_gtd) - 0000110c 000000b0 : ged.obj (.text:__pruabi_ged) - 000011bc 000000b0 : ltd.obj (.text:__pruabi_ltd) - 0000126c 000000b0 sine1.obj (.text:main) - 0000131c 000000a8 rtspruv3_le.lib : frcmpyf.obj (.text:__TI_frcmpyf) - 000013c4 000000a0 : fixdu.obj (.text:__pruabi_fixdu) - 00001464 0000009c : round.obj (.text:__pruabi_nround) - 00001500 00000090 : eqld.obj (.text:__pruabi_eqd) - 00001590 0000008c : renormd.obj (.text:__TI_renormd) - 0000161c 0000008c : fixdi.obj (.text:__pruabi_fixdi) - 000016a8 00000084 : fltid.obj (.text:__pruabi_fltid) - 0000172c 00000078 : cvtfd.obj (.text:__pruabi_cvtfd) - 000017a4 00000050 : fltuf.obj (.text:__pruabi_fltuf) - 000017f4 0000002c : asri.obj (.text:__pruabi_asri) - 00001820 0000002c : subd.obj (.text:__pruabi_subd) - 0000184c 00000024 : mpyi.obj (.text:__pruabi_mpyi) - 00001870 00000020 : negd.obj (.text:__pruabi_negd) - 00001890 00000020 : trunc.obj (.text:__pruabi_trunc) - 000018b0 00000008 : exit.obj (.text:abort) - 000018b8 00000008 : exit.obj (.text:loader_exit) - -.stack 1 00000000 00000100 UNINITIALIZED - 00000000 00000004 rtspruv3_le.lib : boot.obj (.stack) - 00000004 000000fc --HOLE-- - -.cinit 1 00000000 00000000 UNINITIALIZED - -.fardata 1 00000100 00000040 - 00000100 00000040 rtspruv3_le.lib : sin.obj (.fardata:R$1) - -.resource_table -* 1 00000140 00000014 - 00000140 00000014 sine1.obj (.resource_table:retain) - -.creg.PRU_CFG.noload.near -* 2 00026000 00000044 NOLOAD SECTION - 00026000 00000044 sine1.obj (.creg.PRU_CFG.noload.near) - -.creg.PRU_CFG.near -* 2 00026044 00000000 UNINITIALIZED - -.creg.PRU_CFG.noload.far -* 2 00026044 00000000 NOLOAD SECTION - -.creg.PRU_CFG.far -* 2 00026044 00000000 UNINITIALIZED - - -SEGMENT ATTRIBUTES - - id tag seg value - -- --- --- ----- - 0 PHA_PAGE 1 1 - 1 PHA_PAGE 2 1 - - -GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name - -page address name ----- ------- ---- -0 000018b8 C$$EXIT -2 00026000 CT_CFG -abs 481cc000 __PRU_CREG_BASE_DCAN0 -abs 481d0000 __PRU_CREG_BASE_DCAN1 -abs 80000000 __PRU_CREG_BASE_DDR -abs 48040000 __PRU_CREG_BASE_DMTIMER2 -abs 4a100000 __PRU_CREG_BASE_GEMAC -abs 4802a000 __PRU_CREG_BASE_I2C1 -abs 4819c000 __PRU_CREG_BASE_I2C2 -abs 40000000 __PRU_CREG_BASE_L3OCMC -abs 480c8000 __PRU_CREG_BASE_MBX0 -abs 46000000 __PRU_CREG_BASE_MCASP0_DMA -abs 48030000 __PRU_CREG_BASE_MCSPI0 -abs 481a0000 __PRU_CREG_BASE_MCSPI1 -abs 48060000 __PRU_CREG_BASE_MMCHS0 -abs 00026000 __PRU_CREG_BASE_PRU_CFG -abs 00000000 __PRU_CREG_BASE_PRU_DMEM_0_1 -abs 00002000 __PRU_CREG_BASE_PRU_DMEM_1_0 -abs 00030000 __PRU_CREG_BASE_PRU_ECAP -abs 0002e000 __PRU_CREG_BASE_PRU_IEP -abs 00020000 __PRU_CREG_BASE_PRU_INTC -abs 00010000 __PRU_CREG_BASE_PRU_SHAREDMEM -abs 00028000 __PRU_CREG_BASE_PRU_UART -abs 48300000 __PRU_CREG_BASE_PWMSS0 -abs 48302000 __PRU_CREG_BASE_PWMSS1 -abs 48304000 __PRU_CREG_BASE_PWMSS2 -abs 48318000 __PRU_CREG_BASE_RSVD10 -abs 48310000 __PRU_CREG_BASE_RSVD13 -abs 00032400 __PRU_CREG_BASE_RSVD21 -abs 00032000 __PRU_CREG_BASE_RSVD27 -abs 480ca000 __PRU_CREG_BASE_SPINLOCK -abs 49000000 __PRU_CREG_BASE_TPCC -abs 48022000 __PRU_CREG_BASE_UART1 -abs 48024000 __PRU_CREG_BASE_UART2 -abs 0000000e __PRU_CREG_DCAN0 -abs 0000000f __PRU_CREG_DCAN1 -abs 0000001f __PRU_CREG_DDR -abs 00000001 __PRU_CREG_DMTIMER2 -abs 00000009 __PRU_CREG_GEMAC -abs 00000002 __PRU_CREG_I2C1 -abs 00000011 __PRU_CREG_I2C2 -abs 0000001e __PRU_CREG_L3OCMC -abs 00000016 __PRU_CREG_MBX0 -abs 00000008 __PRU_CREG_MCASP0_DMA -abs 00000006 __PRU_CREG_MCSPI0 -abs 00000010 __PRU_CREG_MCSPI1 -abs 00000005 __PRU_CREG_MMCHS0 -abs 00000004 __PRU_CREG_PRU_CFG -abs 00000018 __PRU_CREG_PRU_DMEM_0_1 -abs 00000019 __PRU_CREG_PRU_DMEM_1_0 -abs 00000003 __PRU_CREG_PRU_ECAP -abs 0000001a __PRU_CREG_PRU_IEP -abs 00000000 __PRU_CREG_PRU_INTC -abs 0000001c __PRU_CREG_PRU_SHAREDMEM -abs 00000007 __PRU_CREG_PRU_UART -abs 00000012 __PRU_CREG_PWMSS0 -abs 00000013 __PRU_CREG_PWMSS1 -abs 00000014 __PRU_CREG_PWMSS2 -abs 0000000a __PRU_CREG_RSVD10 -abs 0000000d __PRU_CREG_RSVD13 -abs 00000015 __PRU_CREG_RSVD21 -abs 0000001b __PRU_CREG_RSVD27 -abs 00000017 __PRU_CREG_SPINLOCK -abs 0000001d __PRU_CREG_TPCC -abs 0000000b __PRU_CREG_UART1 -abs 0000000c __PRU_CREG_UART2 -1 00000100 __TI_STACK_END -abs 00000100 __TI_STACK_SIZE -0 0000069c __TI_frcaddd -0 00000388 __TI_frcmpyd -0 0000131c __TI_frcmpyf -0 00001590 __TI_renormd -abs ffffffff __binit__ -abs ffffffff __c_args__ -0 00000b48 __pruabi_addd -0 000017f4 __pruabi_asri -0 0000172c __pruabi_cvtfd -0 00001500 __pruabi_eqd -0 0000161c __pruabi_fixdi -0 000013c4 __pruabi_fixdu -0 000016a8 __pruabi_fltid -0 000017a4 __pruabi_fltuf -0 0000110c __pruabi_ged -0 00001058 __pruabi_gtd -0 000011bc __pruabi_ltd -0 000008f4 __pruabi_mpyd -0 00000d90 __pruabi_mpyf -0 0000184c __pruabi_mpyi -0 00001870 __pruabi_negd -0 00001464 __pruabi_nround -0 00001820 __pruabi_subd -0 00001890 __pruabi_trunc -0 00000000 _c_int00_noinit_noargs_noexit -1 00000000 _stack -0 000018b0 abort -abs ffffffff binit -0 0000126c main -0 00000f58 modf -1 00000140 pru_remoteproc_ResourceTable -0 00000014 sin - - -GLOBAL SYMBOLS: SORTED BY Symbol Address - -page address name ----- ------- ---- -0 00000000 _c_int00_noinit_noargs_noexit -0 00000014 sin -0 00000388 __TI_frcmpyd -0 0000069c __TI_frcaddd -0 000008f4 __pruabi_mpyd -0 00000b48 __pruabi_addd -0 00000d90 __pruabi_mpyf -0 00000f58 modf -0 00001058 __pruabi_gtd -0 0000110c __pruabi_ged -0 000011bc __pruabi_ltd -0 0000126c main -0 0000131c __TI_frcmpyf -0 000013c4 __pruabi_fixdu -0 00001464 __pruabi_nround -0 00001500 __pruabi_eqd -0 00001590 __TI_renormd -0 0000161c __pruabi_fixdi -0 000016a8 __pruabi_fltid -0 0000172c __pruabi_cvtfd -0 000017a4 __pruabi_fltuf -0 000017f4 __pruabi_asri -0 00001820 __pruabi_subd -0 0000184c __pruabi_mpyi -0 00001870 __pruabi_negd -0 00001890 __pruabi_trunc -0 000018b0 abort -0 000018b8 C$$EXIT -1 00000000 _stack -1 00000100 __TI_STACK_END -1 00000140 pru_remoteproc_ResourceTable -2 00026000 CT_CFG -abs 00000000 __PRU_CREG_BASE_PRU_DMEM_0_1 -abs 00000000 __PRU_CREG_PRU_INTC -abs 00000001 __PRU_CREG_DMTIMER2 -abs 00000002 __PRU_CREG_I2C1 -abs 00000003 __PRU_CREG_PRU_ECAP -abs 00000004 __PRU_CREG_PRU_CFG -abs 00000005 __PRU_CREG_MMCHS0 -abs 00000006 __PRU_CREG_MCSPI0 -abs 00000007 __PRU_CREG_PRU_UART -abs 00000008 __PRU_CREG_MCASP0_DMA -abs 00000009 __PRU_CREG_GEMAC -abs 0000000a __PRU_CREG_RSVD10 -abs 0000000b __PRU_CREG_UART1 -abs 0000000c __PRU_CREG_UART2 -abs 0000000d __PRU_CREG_RSVD13 -abs 0000000e __PRU_CREG_DCAN0 -abs 0000000f __PRU_CREG_DCAN1 -abs 00000010 __PRU_CREG_MCSPI1 -abs 00000011 __PRU_CREG_I2C2 -abs 00000012 __PRU_CREG_PWMSS0 -abs 00000013 __PRU_CREG_PWMSS1 -abs 00000014 __PRU_CREG_PWMSS2 -abs 00000015 __PRU_CREG_RSVD21 -abs 00000016 __PRU_CREG_MBX0 -abs 00000017 __PRU_CREG_SPINLOCK -abs 00000018 __PRU_CREG_PRU_DMEM_0_1 -abs 00000019 __PRU_CREG_PRU_DMEM_1_0 -abs 0000001a __PRU_CREG_PRU_IEP -abs 0000001b __PRU_CREG_RSVD27 -abs 0000001c __PRU_CREG_PRU_SHAREDMEM -abs 0000001d __PRU_CREG_TPCC -abs 0000001e __PRU_CREG_L3OCMC -abs 0000001f __PRU_CREG_DDR -abs 00000100 __TI_STACK_SIZE -abs 00002000 __PRU_CREG_BASE_PRU_DMEM_1_0 -abs 00010000 __PRU_CREG_BASE_PRU_SHAREDMEM -abs 00020000 __PRU_CREG_BASE_PRU_INTC -abs 00026000 __PRU_CREG_BASE_PRU_CFG -abs 00028000 __PRU_CREG_BASE_PRU_UART -abs 0002e000 __PRU_CREG_BASE_PRU_IEP -abs 00030000 __PRU_CREG_BASE_PRU_ECAP -abs 00032000 __PRU_CREG_BASE_RSVD27 -abs 00032400 __PRU_CREG_BASE_RSVD21 -abs 40000000 __PRU_CREG_BASE_L3OCMC -abs 46000000 __PRU_CREG_BASE_MCASP0_DMA -abs 48022000 __PRU_CREG_BASE_UART1 -abs 48024000 __PRU_CREG_BASE_UART2 -abs 4802a000 __PRU_CREG_BASE_I2C1 -abs 48030000 __PRU_CREG_BASE_MCSPI0 -abs 48040000 __PRU_CREG_BASE_DMTIMER2 -abs 48060000 __PRU_CREG_BASE_MMCHS0 -abs 480c8000 __PRU_CREG_BASE_MBX0 -abs 480ca000 __PRU_CREG_BASE_SPINLOCK -abs 4819c000 __PRU_CREG_BASE_I2C2 -abs 481a0000 __PRU_CREG_BASE_MCSPI1 -abs 481cc000 __PRU_CREG_BASE_DCAN0 -abs 481d0000 __PRU_CREG_BASE_DCAN1 -abs 48300000 __PRU_CREG_BASE_PWMSS0 -abs 48302000 __PRU_CREG_BASE_PWMSS1 -abs 48304000 __PRU_CREG_BASE_PWMSS2 -abs 48310000 __PRU_CREG_BASE_RSVD13 -abs 48318000 __PRU_CREG_BASE_RSVD10 -abs 49000000 __PRU_CREG_BASE_TPCC -abs 4a100000 __PRU_CREG_BASE_GEMAC -abs 80000000 __PRU_CREG_BASE_DDR -abs ffffffff __binit__ -abs ffffffff __c_args__ -abs ffffffff binit - -[100 symbols] diff --git a/books/pru-cookbook/05blocks/code/sine.pru0.c b/books/pru-cookbook/05blocks/code/sine.pru0.c deleted file mode 100644 index ed6b5778..00000000 --- a/books/pru-cookbook/05blocks/code/sine.pru0.c +++ /dev/null @@ -1,58 +0,0 @@ -// Generate an analog waveform and use a filter to reconstruct it. -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include <math.h> - -#define MAXT 100 // Maximum number of time samples -#define SAWTOOTH // Pick which waveform - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t onCount; // Current count for 1 out - uint32_t offCount; // count for 0 out - uint32_t i; - uint32_t waveform[MAXT]; // Waveform to be produced - - // Generate a periodic wave in an array of MAXT values -#ifdef SAWTOOTH - for(i=0; i<MAXT; i++) { - waveform[i] = i*100/MAXT; - } -#endif -#ifdef TRIANGLE - for(i=0; i<MAXT/2; i++) { - waveform[i] = 2*i*100/MAXT; - waveform[MAXT-i-1] = 2*i*100/MAXT; - } -#endif -#ifdef SINE - float gain = 50.0f; - float bias = 50.0f; - float freq = 2.0f * 3.14159f / MAXT; - for (i=0; i<MAXT; i++){ - waveform[i] = (uint32_t)(bias+gain*sin(i*freq)); - } -#endif - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - while (1) { - // Generate a PWM signal whose duty cycle matches - // the amplitude of the signal. - for(i=0; i<MAXT; i++) { - onCount = waveform[i]; - offCount = 100 - onCount; - while(onCount--) { - __R30 |= 0x1; // Set the GPIO pin to 1 - } - while(offCount--) { - __R30 &= ~(0x1); // Clear the GPIO pin - } - } - } -} diff --git a/books/pru-cookbook/05blocks/code/write_init_pins.sh b/books/pru-cookbook/05blocks/code/write_init_pins.sh deleted file mode 100755 index f5208236..00000000 --- a/books/pru-cookbook/05blocks/code/write_init_pins.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -init_pins=$(readelf -x .init_pins $1 | grep 0x000 | cut -d' ' -f4-7 | xxd -r -p | tr '\0' '\n' | paste - -) -while read -a line; do - if [ ${#line[@]} == 2 ]; then - echo writing \"${line[1]}\" to \"${line[0]}\" - echo ${line[1]} > ${line[0]} - sleep 0.1 - fi -done <<< "$init_pins" diff --git a/books/pru-cookbook/06io/code/Makefile b/books/pru-cookbook/06io/code/Makefile deleted file mode 100644 index a7557fda..00000000 --- a/books/pru-cookbook/06io/code/Makefile +++ /dev/null @@ -1 +0,0 @@ -include /var/lib/cloud9/common/Makefile diff --git a/books/pru-cookbook/06io/code/gpio.pru0.c b/books/pru-cookbook/06io/code/gpio.pru0.c deleted file mode 100644 index bcab90ef..00000000 --- a/books/pru-cookbook/06io/code/gpio.pru0.c +++ /dev/null @@ -1,23 +0,0 @@ -// This code accesses GPIO without using R30 and R31 -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -#define P9_11 (0x1<<30) // Bit position tied to P9_11 on Black -#define P2_05 (0x1<<30) // Bit position tied to P2_05 on Pocket - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t *gpio0 = (uint32_t *)GPIO0; - - while(1) { - gpio0[GPIO_SETDATAOUT] = P9_11; - __delay_cycles(100000000); - gpio0[GPIO_CLEARDATAOUT] = P9_11; - __delay_cycles(100000000); - } -} diff --git a/books/pru-cookbook/06io/code/setup.sh b/books/pru-cookbook/06io/code/setup.sh deleted file mode 100755 index e676ed7a..00000000 --- a/books/pru-cookbook/06io/code/setup.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -export TARGET=gpio.pru0 -echo TARGET=$TARGET - -# Configure the PRU pins based on which Beagle is running -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine -if [ $machine = "Black" ]; then - echo " Found" - pins="P9_11" -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - pins="P2_05" -else - echo " Not Found" - pins="" -fi - -for pin in $pins -do - echo $pin - config-pin $pin gpio - config-pin -q $pin -done diff --git a/books/pru-cookbook/07more/code/Makefile b/books/pru-cookbook/07more/code/Makefile deleted file mode 100644 index a7557fda..00000000 --- a/books/pru-cookbook/07more/code/Makefile +++ /dev/null @@ -1 +0,0 @@ -include /var/lib/cloud9/common/Makefile diff --git a/books/pru-cookbook/07more/code/copyright.c b/books/pru-cookbook/07more/code/copyright.c deleted file mode 100644 index 63b6a419..00000000 --- a/books/pru-cookbook/07more/code/copyright.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * * Neither the name of Texas Instruments Incorporated nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - \ No newline at end of file diff --git a/books/pru-cookbook/07more/code/cycle.pru0.c b/books/pru-cookbook/07more/code/cycle.pru0.c deleted file mode 100644 index 73055d9f..00000000 --- a/books/pru-cookbook/07more/code/cycle.pru0.c +++ /dev/null @@ -1,32 +0,0 @@ -// Access the CYCLE and STALL registers -#include <stdint.h> -#include <pru_cfg.h> -#include <pru_ctrl.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t gpio = P9_31; // Select which pin to toggle.; - - // These will be kept in registers and never witten to DRAM - uint32_t cycle, stall; - - // Clear SYSCFG[STANDBY_INIT] to enable OCP master port - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - PRU0_CTRL.CTRL_bit.CTR_EN = 1; // Enable cycle counter - - __R30 |= gpio; // Set the GPIO pin to 1 - // Reset cycle counter, cycle is on the right side to force the compiler - // to put it in it's own register - PRU0_CTRL.CYCLE = cycle; - __R30 &= ~gpio; // Clear the GPIO pin - cycle = PRU0_CTRL.CYCLE; // Read cycle and store in a register - stall = PRU0_CTRL.STALL; // Ditto for stall - - __halt(); -} diff --git a/books/pru-cookbook/07more/code/cycle.pru0.lst b/books/pru-cookbook/07more/code/cycle.pru0.lst deleted file mode 100644 index f2e13176..00000000 --- a/books/pru-cookbook/07more/code/cycle.pru0.lst +++ /dev/null @@ -1,3082 +0,0 @@ -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 1 - - 1;****************************************************************************** - 2;* PRU C/C++ Codegen Unix v2.1.5 * - 3;* Date/Time created: Fri Jun 5 14:14:07 2020 * - 4;****************************************************************************** - 5 .compiler_opts --abi=eabi --endian=little --hll_source=on --object_format=elf --silicon_versio - 6 - 7$C$DW$CU .dwtag DW_TAG_compile_unit - 8 .dwattr $C$DW$CU, DW_AT_name("cycle.pru0.c") - 9 .dwattr $C$DW$CU, DW_AT_producer("TI PRU C/C++ Codegen Unix v2.1.5 Copyright (c) 2012-2017 Tex - 10 .dwattr $C$DW$CU, DW_AT_TI_version(0x01) - 11 .dwattr $C$DW$CU, DW_AT_comp_dir("/home/debian/PRUCookbook/docs/07more/code") - 12 .global __PRU_CREG_PRU_CFG - 13 - 14$C$DW$1 .dwtag DW_TAG_subprogram, DW_AT_name("__halt") - 15 .dwattr $C$DW$1, DW_AT_TI_symbol_name("__halt") - 16 .dwattr $C$DW$1, DW_AT_declaration - 17 .dwattr $C$DW$1, DW_AT_external - 18 .weak ||CT_CFG|| - 19 00000000 ||CT_CFG||: .usect ".creg.PRU_CFG.noload.near",68,1 - 20$C$DW$2 .dwtag DW_TAG_variable, DW_AT_name("CT_CFG") - 21 .dwattr $C$DW$2, DW_AT_TI_symbol_name("CT_CFG") - 22 .dwattr $C$DW$2, DW_AT_location[DW_OP_addr ||CT_CFG||] - 23 .dwattr $C$DW$2, DW_AT_type(*$C$DW$T$98) - 24 .dwattr $C$DW$2, DW_AT_external - 25 .dwattr $C$DW$2, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru_ - 26 .dwattr $C$DW$2, DW_AT_decl_line(0xf2) - 27 .dwattr $C$DW$2, DW_AT_decl_column(0x17) - 28 .global ||pru_remoteproc_ResourceTable|| - 29 00000000 .sect ".resource_table:retain", RW - 30 .retain - 31 .align 1 - 32 .elfsym ||pru_remoteproc_ResourceTable||,SYM_SIZE(20) - 33 00000000 ||pru_remoteproc_ResourceTable||: - 34 00000000 00000000000001 .bits 1,32 ; pru_remoteproc_ResourceTable.base.ver @ 0 - 35 00000004 00000000000000 .bits 0,32 ; pru_remoteproc_ResourceTable.base.num @ 32 - 36 00000008 00000000000000 .bits 0,32 ; pru_remoteproc_ResourceTable.base.reserved[0] @ 64 - 37 0000000c 00000000000000 .bits 0,32 ; pru_remoteproc_ResourceTable.base.reserved[1] @ 96 - 38 00000010 00000000000000 .bits 0,32 ; pru_remoteproc_ResourceTable.offset[0] @ 128 - 39 - 40$C$DW$3 .dwtag DW_TAG_variable, DW_AT_name("pru_remoteproc_ResourceTable") - 41 .dwattr $C$DW$3, DW_AT_TI_symbol_name("pru_remoteproc_ResourceTable") - 42 .dwattr $C$DW$3, DW_AT_location[DW_OP_addr ||pru_remoteproc_ResourceTable||] - 43 .dwattr $C$DW$3, DW_AT_type(*$C$DW$T$92) - 44 .dwattr $C$DW$3, DW_AT_external - 45 .dwattr $C$DW$3, DW_AT_decl_file("/var/lib/cloud9/common/resource_table_empty.h") - 46 .dwattr $C$DW$3, DW_AT_decl_line(0x1f) - 47 .dwattr $C$DW$3, DW_AT_decl_column(0x1a) - 48; optpru /tmp/TI18yQKu8QO /tmp/TI18y6Ruqzt - 49; acpiapru -@/tmp/TI18yH9tQJL - 50 00000000 .sect ".text:main" - 51 .clink - 52 .global ||main|| - 53 - 54$C$DW$4 .dwtag DW_TAG_subprogram, DW_AT_name("main") - 55 .dwattr $C$DW$4, DW_AT_low_pc(||main||) -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 2 - - 56 .dwattr $C$DW$4, DW_AT_high_pc(0x00) - 57 .dwattr $C$DW$4, DW_AT_TI_symbol_name("main") - 58 .dwattr $C$DW$4, DW_AT_external - 59 .dwattr $C$DW$4, DW_AT_TI_begin_file("cycle.pru0.c") - 60 .dwattr $C$DW$4, DW_AT_TI_begin_line(0x0d) - 61 .dwattr $C$DW$4, DW_AT_TI_begin_column(0x06) - 62 .dwattr $C$DW$4, DW_AT_decl_file("cycle.pru0.c") - 63 .dwattr $C$DW$4, DW_AT_decl_line(0x0d) - 64 .dwattr $C$DW$4, DW_AT_decl_column(0x06) - 65 .dwattr $C$DW$4, DW_AT_TI_max_frame_size(0x00) - 66 .dwpsn file "cycle.pru0.c",line 14,column 1,is_stmt,address ||main||,isa 0 - 67 - 68 .dwfde $C$DW$CIE, ||main|| - 69;---------------------------------------------------------------------- - 70; 13 | void main(void) - 71; 15 | uint32_t gpio = P9_31; // Select which pin to toggle.; - 72; 17 | // These will be kept in registers and never witten to DRAM - 73; 18 | uint32_t cycle, stall; - 74; 20 | // Clear SYSCFG[STANDBY_INIT] to enable OCP master port - 75;---------------------------------------------------------------------- - 76 - 77;*************************************************************** - 78;* FNAME: main FR SIZE: 0 * - 79;* * - 80;* FUNCTION ENVIRONMENT * - 81;* * - 82;* FUNCTION PROPERTIES * - 83;* 0 Auto, 0 SOE * - 84;*************************************************************** - 85 - 86||main||: - 87;* --------------------------------------------------------------------------* - 88;* r0_0 assigned to $O$C1 - 89;* r14_0 assigned to cycle - 90$C$DW$5 .dwtag DW_TAG_variable, DW_AT_name("cycle") - 91 .dwattr $C$DW$5, DW_AT_TI_symbol_name("cycle") - 92 .dwattr $C$DW$5, DW_AT_type(*$C$DW$T$32) - 93 .dwattr $C$DW$5, DW_AT_location[DW_OP_regx 0x38] - 94 .dwcfi cfa_offset, 0 - 95 .dwpsn file "cycle.pru0.c",line 21,column 2,is_stmt,isa 0 - 96;---------------------------------------------------------------------- - 97; 21 | CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - 98;---------------------------------------------------------------------- - 99 00000000 00000091042080! LBCO &r0, __PRU_CREG_PRU_CFG, $CSBREL(||CT_CFG||+4), 4 ; [ALU_PRU] |21| CT_CFG - 100 00000004 0000001D04E0E0 CLR r0, r0, 0x00000004 ; [ALU_PRU] |21| - 101 00000008 00000081042080! SBCO &r0, __PRU_CREG_PRU_CFG, $CSBREL(||CT_CFG||+4), 4 ; [ALU_PRU] |21| CT_CFG - 102 .dwpsn file "cycle.pru0.c",line 23,column 2,is_stmt,isa 0 - 103;---------------------------------------------------------------------- - 104; 23 | PRU0_CTRL.CTRL_bit.CTR_EN = 1; // Enable cycle counter - 105;---------------------------------------------------------------------- - 106 0000000c 200080240002C0 LDI32 r0, 0x00022000 ; [ALU_PRU] |23| $O$C1 - 107 00000014 000000F1002081 LBBO &r1, r0, 0, 4 ; [ALU_PRU] |23| - 108 00000018 0000001F03E1E1 SET r1, r1, 0x00000003 ; [ALU_PRU] |23| - 109 0000001c 000000E1002081 SBBO &r1, r0, 0, 4 ; [ALU_PRU] |23| - 110 .dwpsn file "cycle.pru0.c",line 25,column 2,is_stmt,isa 0 -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 3 - - 111;---------------------------------------------------------------------- - 112; 25 | __R30 |= gpio; // Set the GPIO pin to 1 - 113; 26 | // Reset cycle counter, cycle is on the right side to force the compile - 114; | r - 115; 27 | // to put it in it's own register - 116;---------------------------------------------------------------------- - 117 00000020 0000001F00FEFE SET r30, r30, 0x00000000 ; [ALU_PRU] |25| - 118 .dwpsn file "cycle.pru0.c",line 28,column 2,is_stmt,isa 0 - 119;---------------------------------------------------------------------- - 120; 28 | PRU0_CTRL.CYCLE = cycle; - 121;---------------------------------------------------------------------- - 122 00000024 000000E10C208E SBBO &r14, r0, 12, 4 ; [ALU_PRU] |28| $O$C1,cycle - 123 .dwpsn file "cycle.pru0.c",line 29,column 2,is_stmt,isa 0 - 124;---------------------------------------------------------------------- - 125; 29 | __R30 &= ~gpio; // Clear the GPIO pin - 126;---------------------------------------------------------------------- - 127 00000028 0000001D00FEFE CLR r30, r30, 0x00000000 ; [ALU_PRU] |29| - 128 .dwpsn file "cycle.pru0.c",line 30,column 2,is_stmt,isa 0 - 129;---------------------------------------------------------------------- - 130; 30 | cycle = PRU0_CTRL.CYCLE; // Read cycle and store in a register - 131;---------------------------------------------------------------------- - 132 0000002c 000000F10C2081 LBBO &r1, r0, 12, 4 ; [ALU_PRU] |30| $O$C1 - 133 .dwpsn file "cycle.pru0.c",line 31,column 2,is_stmt,isa 0 - 134;---------------------------------------------------------------------- - 135; 31 | stall = PRU0_CTRL.STALL; // Ditto for stall - 136;---------------------------------------------------------------------- - 137 00000030 000000F1102080 LBBO &r0, r0, 16, 4 ; [ALU_PRU] |31| $O$C1 - 138 .dwpsn file "cycle.pru0.c",line 33,column 2,is_stmt,isa 0 - 139;---------------------------------------------------------------------- - 140; 33 | __halt(); - 141;---------------------------------------------------------------------- - 142 00000034 0000002A000000 HALT ; [ALU_PRU] |33| - 143$C$DW$6 .dwtag DW_TAG_TI_branch - 144 .dwattr $C$DW$6, DW_AT_low_pc(0x00) - 145 .dwattr $C$DW$6, DW_AT_TI_return - 146 00000038 00000020C30000 JMP r3.w2 ; [ALU_PRU] - 147 .dwattr $C$DW$4, DW_AT_TI_end_file("cycle.pru0.c") - 148 .dwattr $C$DW$4, DW_AT_TI_end_line(0x22) - 149 .dwattr $C$DW$4, DW_AT_TI_end_column(0x01) - 150 .dwendentry - 151 .dwendtag $C$DW$4 - 152 - 153 - 154;****************************************************************************** - 155;* TYPE INFORMATION * - 156;****************************************************************************** - 157 - 158$C$DW$T$19 .dwtag DW_TAG_structure_type - 159 .dwattr $C$DW$T$19, DW_AT_byte_size(0x04) - 160$C$DW$7 .dwtag DW_TAG_member - 161 .dwattr $C$DW$7, DW_AT_type(*$C$DW$T$11) - 162 .dwattr $C$DW$7, DW_AT_name("REVID") - 163 .dwattr $C$DW$7, DW_AT_TI_symbol_name("REVID") - 164 .dwattr $C$DW$7, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x20) - 165 .dwattr $C$DW$7, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 4 - - 166 .dwattr $C$DW$7, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 167 .dwattr $C$DW$7, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru_ - 168 .dwattr $C$DW$7, DW_AT_decl_line(0x2d) - 169 .dwattr $C$DW$7, DW_AT_decl_column(0x0d) - 170 .dwendtag $C$DW$T$19 - 171 - 172 .dwattr $C$DW$T$19, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 173 .dwattr $C$DW$T$19, DW_AT_decl_line(0x2c) - 174 .dwattr $C$DW$T$19, DW_AT_decl_column(0x13) - 175$C$DW$T$48 .dwtag DW_TAG_volatile_type - 176 .dwattr $C$DW$T$48, DW_AT_type(*$C$DW$T$19) - 177 - 178$C$DW$T$20 .dwtag DW_TAG_structure_type - 179 .dwattr $C$DW$T$20, DW_AT_byte_size(0x04) - 180$C$DW$8 .dwtag DW_TAG_member - 181 .dwattr $C$DW$8, DW_AT_type(*$C$DW$T$11) - 182 .dwattr $C$DW$8, DW_AT_name("IDLE_MODE") - 183 .dwattr $C$DW$8, DW_AT_TI_symbol_name("IDLE_MODE") - 184 .dwattr $C$DW$8, DW_AT_bit_offset(0x1e), DW_AT_bit_size(0x02) - 185 .dwattr $C$DW$8, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 186 .dwattr $C$DW$8, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 187 .dwattr $C$DW$8, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru_ - 188 .dwattr $C$DW$8, DW_AT_decl_line(0x37) - 189 .dwattr $C$DW$8, DW_AT_decl_column(0x0d) - 190$C$DW$9 .dwtag DW_TAG_member - 191 .dwattr $C$DW$9, DW_AT_type(*$C$DW$T$11) - 192 .dwattr $C$DW$9, DW_AT_name("STANDBY_MODE") - 193 .dwattr $C$DW$9, DW_AT_TI_symbol_name("STANDBY_MODE") - 194 .dwattr $C$DW$9, DW_AT_bit_offset(0x1c), DW_AT_bit_size(0x02) - 195 .dwattr $C$DW$9, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 196 .dwattr $C$DW$9, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 197 .dwattr $C$DW$9, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru_ - 198 .dwattr $C$DW$9, DW_AT_decl_line(0x38) - 199 .dwattr $C$DW$9, DW_AT_decl_column(0x0d) - 200$C$DW$10 .dwtag DW_TAG_member - 201 .dwattr $C$DW$10, DW_AT_type(*$C$DW$T$11) - 202 .dwattr $C$DW$10, DW_AT_name("STANDBY_INIT") - 203 .dwattr $C$DW$10, DW_AT_TI_symbol_name("STANDBY_INIT") - 204 .dwattr $C$DW$10, DW_AT_bit_offset(0x1b), DW_AT_bit_size(0x01) - 205 .dwattr $C$DW$10, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 206 .dwattr $C$DW$10, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 207 .dwattr $C$DW$10, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 208 .dwattr $C$DW$10, DW_AT_decl_line(0x39) - 209 .dwattr $C$DW$10, DW_AT_decl_column(0x0d) - 210$C$DW$11 .dwtag DW_TAG_member - 211 .dwattr $C$DW$11, DW_AT_type(*$C$DW$T$11) - 212 .dwattr $C$DW$11, DW_AT_name("SUB_MWAIT") - 213 .dwattr $C$DW$11, DW_AT_TI_symbol_name("SUB_MWAIT") - 214 .dwattr $C$DW$11, DW_AT_bit_offset(0x1a), DW_AT_bit_size(0x01) - 215 .dwattr $C$DW$11, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 216 .dwattr $C$DW$11, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 217 .dwattr $C$DW$11, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 218 .dwattr $C$DW$11, DW_AT_decl_line(0x3a) - 219 .dwattr $C$DW$11, DW_AT_decl_column(0x0d) - 220$C$DW$12 .dwtag DW_TAG_member -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 5 - - 221 .dwattr $C$DW$12, DW_AT_type(*$C$DW$T$11) - 222 .dwattr $C$DW$12, DW_AT_name("rsvd6") - 223 .dwattr $C$DW$12, DW_AT_TI_symbol_name("rsvd6") - 224 .dwattr $C$DW$12, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x1a) - 225 .dwattr $C$DW$12, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 226 .dwattr $C$DW$12, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 227 .dwattr $C$DW$12, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 228 .dwattr $C$DW$12, DW_AT_decl_line(0x3b) - 229 .dwattr $C$DW$12, DW_AT_decl_column(0x0d) - 230 .dwendtag $C$DW$T$20 - 231 - 232 .dwattr $C$DW$T$20, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 233 .dwattr $C$DW$T$20, DW_AT_decl_line(0x36) - 234 .dwattr $C$DW$T$20, DW_AT_decl_column(0x13) - 235$C$DW$T$50 .dwtag DW_TAG_volatile_type - 236 .dwattr $C$DW$T$50, DW_AT_type(*$C$DW$T$20) - 237 - 238$C$DW$T$21 .dwtag DW_TAG_structure_type - 239 .dwattr $C$DW$T$21, DW_AT_byte_size(0x04) - 240$C$DW$13 .dwtag DW_TAG_member - 241 .dwattr $C$DW$13, DW_AT_type(*$C$DW$T$11) - 242 .dwattr $C$DW$13, DW_AT_name("PRU0_GPI_MODE") - 243 .dwattr $C$DW$13, DW_AT_TI_symbol_name("PRU0_GPI_MODE") - 244 .dwattr $C$DW$13, DW_AT_bit_offset(0x1e), DW_AT_bit_size(0x02) - 245 .dwattr $C$DW$13, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 246 .dwattr $C$DW$13, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 247 .dwattr $C$DW$13, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 248 .dwattr $C$DW$13, DW_AT_decl_line(0x45) - 249 .dwattr $C$DW$13, DW_AT_decl_column(0x0d) - 250$C$DW$14 .dwtag DW_TAG_member - 251 .dwattr $C$DW$14, DW_AT_type(*$C$DW$T$11) - 252 .dwattr $C$DW$14, DW_AT_name("PRU0_GPI_CLK_MODE") - 253 .dwattr $C$DW$14, DW_AT_TI_symbol_name("PRU0_GPI_CLK_MODE") - 254 .dwattr $C$DW$14, DW_AT_bit_offset(0x1d), DW_AT_bit_size(0x01) - 255 .dwattr $C$DW$14, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 256 .dwattr $C$DW$14, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 257 .dwattr $C$DW$14, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 258 .dwattr $C$DW$14, DW_AT_decl_line(0x46) - 259 .dwattr $C$DW$14, DW_AT_decl_column(0x0d) - 260$C$DW$15 .dwtag DW_TAG_member - 261 .dwattr $C$DW$15, DW_AT_type(*$C$DW$T$11) - 262 .dwattr $C$DW$15, DW_AT_name("PRU0_GPI_DIV0") - 263 .dwattr $C$DW$15, DW_AT_TI_symbol_name("PRU0_GPI_DIV0") - 264 .dwattr $C$DW$15, DW_AT_bit_offset(0x18), DW_AT_bit_size(0x05) - 265 .dwattr $C$DW$15, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 266 .dwattr $C$DW$15, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 267 .dwattr $C$DW$15, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 268 .dwattr $C$DW$15, DW_AT_decl_line(0x47) - 269 .dwattr $C$DW$15, DW_AT_decl_column(0x0d) - 270$C$DW$16 .dwtag DW_TAG_member - 271 .dwattr $C$DW$16, DW_AT_type(*$C$DW$T$11) - 272 .dwattr $C$DW$16, DW_AT_name("PRU0_GPI_DIV1") - 273 .dwattr $C$DW$16, DW_AT_TI_symbol_name("PRU0_GPI_DIV1") - 274 .dwattr $C$DW$16, DW_AT_bit_offset(0x13), DW_AT_bit_size(0x05) - 275 .dwattr $C$DW$16, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 6 - - 276 .dwattr $C$DW$16, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 277 .dwattr $C$DW$16, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 278 .dwattr $C$DW$16, DW_AT_decl_line(0x48) - 279 .dwattr $C$DW$16, DW_AT_decl_column(0x0d) - 280$C$DW$17 .dwtag DW_TAG_member - 281 .dwattr $C$DW$17, DW_AT_type(*$C$DW$T$11) - 282 .dwattr $C$DW$17, DW_AT_name("PRU0_GPI_SB") - 283 .dwattr $C$DW$17, DW_AT_TI_symbol_name("PRU0_GPI_SB") - 284 .dwattr $C$DW$17, DW_AT_bit_offset(0x12), DW_AT_bit_size(0x01) - 285 .dwattr $C$DW$17, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 286 .dwattr $C$DW$17, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 287 .dwattr $C$DW$17, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 288 .dwattr $C$DW$17, DW_AT_decl_line(0x49) - 289 .dwattr $C$DW$17, DW_AT_decl_column(0x0d) - 290$C$DW$18 .dwtag DW_TAG_member - 291 .dwattr $C$DW$18, DW_AT_type(*$C$DW$T$11) - 292 .dwattr $C$DW$18, DW_AT_name("PRU0_GPO_MODE") - 293 .dwattr $C$DW$18, DW_AT_TI_symbol_name("PRU0_GPO_MODE") - 294 .dwattr $C$DW$18, DW_AT_bit_offset(0x11), DW_AT_bit_size(0x01) - 295 .dwattr $C$DW$18, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 296 .dwattr $C$DW$18, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 297 .dwattr $C$DW$18, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 298 .dwattr $C$DW$18, DW_AT_decl_line(0x4a) - 299 .dwattr $C$DW$18, DW_AT_decl_column(0x0d) - 300$C$DW$19 .dwtag DW_TAG_member - 301 .dwattr $C$DW$19, DW_AT_type(*$C$DW$T$11) - 302 .dwattr $C$DW$19, DW_AT_name("PRU0_GPO_DIV0") - 303 .dwattr $C$DW$19, DW_AT_TI_symbol_name("PRU0_GPO_DIV0") - 304 .dwattr $C$DW$19, DW_AT_bit_offset(0x0c), DW_AT_bit_size(0x05) - 305 .dwattr $C$DW$19, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 306 .dwattr $C$DW$19, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 307 .dwattr $C$DW$19, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 308 .dwattr $C$DW$19, DW_AT_decl_line(0x4b) - 309 .dwattr $C$DW$19, DW_AT_decl_column(0x0d) - 310$C$DW$20 .dwtag DW_TAG_member - 311 .dwattr $C$DW$20, DW_AT_type(*$C$DW$T$11) - 312 .dwattr $C$DW$20, DW_AT_name("PRU0_GPO_DIV1") - 313 .dwattr $C$DW$20, DW_AT_TI_symbol_name("PRU0_GPO_DIV1") - 314 .dwattr $C$DW$20, DW_AT_bit_offset(0x07), DW_AT_bit_size(0x05) - 315 .dwattr $C$DW$20, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 316 .dwattr $C$DW$20, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 317 .dwattr $C$DW$20, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 318 .dwattr $C$DW$20, DW_AT_decl_line(0x4c) - 319 .dwattr $C$DW$20, DW_AT_decl_column(0x0d) - 320$C$DW$21 .dwtag DW_TAG_member - 321 .dwattr $C$DW$21, DW_AT_type(*$C$DW$T$11) - 322 .dwattr $C$DW$21, DW_AT_name("PRU0_GPO_SH_SEL") - 323 .dwattr $C$DW$21, DW_AT_TI_symbol_name("PRU0_GPO_SH_SEL") - 324 .dwattr $C$DW$21, DW_AT_bit_offset(0x06), DW_AT_bit_size(0x01) - 325 .dwattr $C$DW$21, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 326 .dwattr $C$DW$21, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 327 .dwattr $C$DW$21, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 328 .dwattr $C$DW$21, DW_AT_decl_line(0x4d) - 329 .dwattr $C$DW$21, DW_AT_decl_column(0x0d) - 330$C$DW$22 .dwtag DW_TAG_member -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 7 - - 331 .dwattr $C$DW$22, DW_AT_type(*$C$DW$T$11) - 332 .dwattr $C$DW$22, DW_AT_name("rsvd26") - 333 .dwattr $C$DW$22, DW_AT_TI_symbol_name("rsvd26") - 334 .dwattr $C$DW$22, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x06) - 335 .dwattr $C$DW$22, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 336 .dwattr $C$DW$22, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 337 .dwattr $C$DW$22, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 338 .dwattr $C$DW$22, DW_AT_decl_line(0x4e) - 339 .dwattr $C$DW$22, DW_AT_decl_column(0x0d) - 340 .dwendtag $C$DW$T$21 - 341 - 342 .dwattr $C$DW$T$21, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 343 .dwattr $C$DW$T$21, DW_AT_decl_line(0x44) - 344 .dwattr $C$DW$T$21, DW_AT_decl_column(0x13) - 345$C$DW$T$52 .dwtag DW_TAG_volatile_type - 346 .dwattr $C$DW$T$52, DW_AT_type(*$C$DW$T$21) - 347 - 348$C$DW$T$22 .dwtag DW_TAG_structure_type - 349 .dwattr $C$DW$T$22, DW_AT_byte_size(0x04) - 350$C$DW$23 .dwtag DW_TAG_member - 351 .dwattr $C$DW$23, DW_AT_type(*$C$DW$T$11) - 352 .dwattr $C$DW$23, DW_AT_name("PRU1_GPI_MODE") - 353 .dwattr $C$DW$23, DW_AT_TI_symbol_name("PRU1_GPI_MODE") - 354 .dwattr $C$DW$23, DW_AT_bit_offset(0x1e), DW_AT_bit_size(0x02) - 355 .dwattr $C$DW$23, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 356 .dwattr $C$DW$23, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 357 .dwattr $C$DW$23, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 358 .dwattr $C$DW$23, DW_AT_decl_line(0x58) - 359 .dwattr $C$DW$23, DW_AT_decl_column(0x0d) - 360$C$DW$24 .dwtag DW_TAG_member - 361 .dwattr $C$DW$24, DW_AT_type(*$C$DW$T$11) - 362 .dwattr $C$DW$24, DW_AT_name("PRU1_GPI_CLK_MODE") - 363 .dwattr $C$DW$24, DW_AT_TI_symbol_name("PRU1_GPI_CLK_MODE") - 364 .dwattr $C$DW$24, DW_AT_bit_offset(0x1d), DW_AT_bit_size(0x01) - 365 .dwattr $C$DW$24, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 366 .dwattr $C$DW$24, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 367 .dwattr $C$DW$24, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 368 .dwattr $C$DW$24, DW_AT_decl_line(0x59) - 369 .dwattr $C$DW$24, DW_AT_decl_column(0x0d) - 370$C$DW$25 .dwtag DW_TAG_member - 371 .dwattr $C$DW$25, DW_AT_type(*$C$DW$T$11) - 372 .dwattr $C$DW$25, DW_AT_name("PRU1_GPI_DIV0") - 373 .dwattr $C$DW$25, DW_AT_TI_symbol_name("PRU1_GPI_DIV0") - 374 .dwattr $C$DW$25, DW_AT_bit_offset(0x18), DW_AT_bit_size(0x05) - 375 .dwattr $C$DW$25, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 376 .dwattr $C$DW$25, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 377 .dwattr $C$DW$25, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 378 .dwattr $C$DW$25, DW_AT_decl_line(0x5a) - 379 .dwattr $C$DW$25, DW_AT_decl_column(0x0d) - 380$C$DW$26 .dwtag DW_TAG_member - 381 .dwattr $C$DW$26, DW_AT_type(*$C$DW$T$11) - 382 .dwattr $C$DW$26, DW_AT_name("PRU1_GPI_DIV1") - 383 .dwattr $C$DW$26, DW_AT_TI_symbol_name("PRU1_GPI_DIV1") - 384 .dwattr $C$DW$26, DW_AT_bit_offset(0x13), DW_AT_bit_size(0x05) - 385 .dwattr $C$DW$26, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 8 - - 386 .dwattr $C$DW$26, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 387 .dwattr $C$DW$26, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 388 .dwattr $C$DW$26, DW_AT_decl_line(0x5b) - 389 .dwattr $C$DW$26, DW_AT_decl_column(0x0d) - 390$C$DW$27 .dwtag DW_TAG_member - 391 .dwattr $C$DW$27, DW_AT_type(*$C$DW$T$11) - 392 .dwattr $C$DW$27, DW_AT_name("PRU1_GPI_SB") - 393 .dwattr $C$DW$27, DW_AT_TI_symbol_name("PRU1_GPI_SB") - 394 .dwattr $C$DW$27, DW_AT_bit_offset(0x12), DW_AT_bit_size(0x01) - 395 .dwattr $C$DW$27, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 396 .dwattr $C$DW$27, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 397 .dwattr $C$DW$27, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 398 .dwattr $C$DW$27, DW_AT_decl_line(0x5c) - 399 .dwattr $C$DW$27, DW_AT_decl_column(0x0d) - 400$C$DW$28 .dwtag DW_TAG_member - 401 .dwattr $C$DW$28, DW_AT_type(*$C$DW$T$11) - 402 .dwattr $C$DW$28, DW_AT_name("PRU1_GPO_MODE") - 403 .dwattr $C$DW$28, DW_AT_TI_symbol_name("PRU1_GPO_MODE") - 404 .dwattr $C$DW$28, DW_AT_bit_offset(0x11), DW_AT_bit_size(0x01) - 405 .dwattr $C$DW$28, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 406 .dwattr $C$DW$28, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 407 .dwattr $C$DW$28, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 408 .dwattr $C$DW$28, DW_AT_decl_line(0x5d) - 409 .dwattr $C$DW$28, DW_AT_decl_column(0x0d) - 410$C$DW$29 .dwtag DW_TAG_member - 411 .dwattr $C$DW$29, DW_AT_type(*$C$DW$T$11) - 412 .dwattr $C$DW$29, DW_AT_name("PRU1_GPO_DIV0") - 413 .dwattr $C$DW$29, DW_AT_TI_symbol_name("PRU1_GPO_DIV0") - 414 .dwattr $C$DW$29, DW_AT_bit_offset(0x0c), DW_AT_bit_size(0x05) - 415 .dwattr $C$DW$29, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 416 .dwattr $C$DW$29, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 417 .dwattr $C$DW$29, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 418 .dwattr $C$DW$29, DW_AT_decl_line(0x5e) - 419 .dwattr $C$DW$29, DW_AT_decl_column(0x0d) - 420$C$DW$30 .dwtag DW_TAG_member - 421 .dwattr $C$DW$30, DW_AT_type(*$C$DW$T$11) - 422 .dwattr $C$DW$30, DW_AT_name("PRU1_GPO_DIV1") - 423 .dwattr $C$DW$30, DW_AT_TI_symbol_name("PRU1_GPO_DIV1") - 424 .dwattr $C$DW$30, DW_AT_bit_offset(0x07), DW_AT_bit_size(0x05) - 425 .dwattr $C$DW$30, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 426 .dwattr $C$DW$30, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 427 .dwattr $C$DW$30, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 428 .dwattr $C$DW$30, DW_AT_decl_line(0x5f) - 429 .dwattr $C$DW$30, DW_AT_decl_column(0x0d) - 430$C$DW$31 .dwtag DW_TAG_member - 431 .dwattr $C$DW$31, DW_AT_type(*$C$DW$T$11) - 432 .dwattr $C$DW$31, DW_AT_name("PRU1_GPO_SH_SEL") - 433 .dwattr $C$DW$31, DW_AT_TI_symbol_name("PRU1_GPO_SH_SEL") - 434 .dwattr $C$DW$31, DW_AT_bit_offset(0x06), DW_AT_bit_size(0x01) - 435 .dwattr $C$DW$31, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 436 .dwattr $C$DW$31, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 437 .dwattr $C$DW$31, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 438 .dwattr $C$DW$31, DW_AT_decl_line(0x60) - 439 .dwattr $C$DW$31, DW_AT_decl_column(0x0d) - 440$C$DW$32 .dwtag DW_TAG_member -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 9 - - 441 .dwattr $C$DW$32, DW_AT_type(*$C$DW$T$11) - 442 .dwattr $C$DW$32, DW_AT_name("rsvd26") - 443 .dwattr $C$DW$32, DW_AT_TI_symbol_name("rsvd26") - 444 .dwattr $C$DW$32, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x06) - 445 .dwattr $C$DW$32, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 446 .dwattr $C$DW$32, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 447 .dwattr $C$DW$32, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 448 .dwattr $C$DW$32, DW_AT_decl_line(0x61) - 449 .dwattr $C$DW$32, DW_AT_decl_column(0x0d) - 450 .dwendtag $C$DW$T$22 - 451 - 452 .dwattr $C$DW$T$22, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 453 .dwattr $C$DW$T$22, DW_AT_decl_line(0x57) - 454 .dwattr $C$DW$T$22, DW_AT_decl_column(0x13) - 455$C$DW$T$54 .dwtag DW_TAG_volatile_type - 456 .dwattr $C$DW$T$54, DW_AT_type(*$C$DW$T$22) - 457 - 458$C$DW$T$23 .dwtag DW_TAG_structure_type - 459 .dwattr $C$DW$T$23, DW_AT_byte_size(0x04) - 460$C$DW$33 .dwtag DW_TAG_member - 461 .dwattr $C$DW$33, DW_AT_type(*$C$DW$T$11) - 462 .dwattr $C$DW$33, DW_AT_name("PRU0_CLK_STOP_REQ") - 463 .dwattr $C$DW$33, DW_AT_TI_symbol_name("PRU0_CLK_STOP_REQ") - 464 .dwattr $C$DW$33, DW_AT_bit_offset(0x1f), DW_AT_bit_size(0x01) - 465 .dwattr $C$DW$33, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 466 .dwattr $C$DW$33, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 467 .dwattr $C$DW$33, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 468 .dwattr $C$DW$33, DW_AT_decl_line(0x6b) - 469 .dwattr $C$DW$33, DW_AT_decl_column(0x0d) - 470$C$DW$34 .dwtag DW_TAG_member - 471 .dwattr $C$DW$34, DW_AT_type(*$C$DW$T$11) - 472 .dwattr $C$DW$34, DW_AT_name("PRU0_CLK_STOP_ACK") - 473 .dwattr $C$DW$34, DW_AT_TI_symbol_name("PRU0_CLK_STOP_ACK") - 474 .dwattr $C$DW$34, DW_AT_bit_offset(0x1e), DW_AT_bit_size(0x01) - 475 .dwattr $C$DW$34, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 476 .dwattr $C$DW$34, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 477 .dwattr $C$DW$34, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 478 .dwattr $C$DW$34, DW_AT_decl_line(0x6c) - 479 .dwattr $C$DW$34, DW_AT_decl_column(0x0d) - 480$C$DW$35 .dwtag DW_TAG_member - 481 .dwattr $C$DW$35, DW_AT_type(*$C$DW$T$11) - 482 .dwattr $C$DW$35, DW_AT_name("PRU0_CLK_EN") - 483 .dwattr $C$DW$35, DW_AT_TI_symbol_name("PRU0_CLK_EN") - 484 .dwattr $C$DW$35, DW_AT_bit_offset(0x1d), DW_AT_bit_size(0x01) - 485 .dwattr $C$DW$35, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 486 .dwattr $C$DW$35, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 487 .dwattr $C$DW$35, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 488 .dwattr $C$DW$35, DW_AT_decl_line(0x6d) - 489 .dwattr $C$DW$35, DW_AT_decl_column(0x0d) - 490$C$DW$36 .dwtag DW_TAG_member - 491 .dwattr $C$DW$36, DW_AT_type(*$C$DW$T$11) - 492 .dwattr $C$DW$36, DW_AT_name("PRU1_CLK_STOP_REQ") - 493 .dwattr $C$DW$36, DW_AT_TI_symbol_name("PRU1_CLK_STOP_REQ") - 494 .dwattr $C$DW$36, DW_AT_bit_offset(0x1c), DW_AT_bit_size(0x01) - 495 .dwattr $C$DW$36, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 10 - - 496 .dwattr $C$DW$36, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 497 .dwattr $C$DW$36, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 498 .dwattr $C$DW$36, DW_AT_decl_line(0x6e) - 499 .dwattr $C$DW$36, DW_AT_decl_column(0x0d) - 500$C$DW$37 .dwtag DW_TAG_member - 501 .dwattr $C$DW$37, DW_AT_type(*$C$DW$T$11) - 502 .dwattr $C$DW$37, DW_AT_name("PRU1_CLK_STOP_ACK") - 503 .dwattr $C$DW$37, DW_AT_TI_symbol_name("PRU1_CLK_STOP_ACK") - 504 .dwattr $C$DW$37, DW_AT_bit_offset(0x1b), DW_AT_bit_size(0x01) - 505 .dwattr $C$DW$37, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 506 .dwattr $C$DW$37, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 507 .dwattr $C$DW$37, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 508 .dwattr $C$DW$37, DW_AT_decl_line(0x6f) - 509 .dwattr $C$DW$37, DW_AT_decl_column(0x0d) - 510$C$DW$38 .dwtag DW_TAG_member - 511 .dwattr $C$DW$38, DW_AT_type(*$C$DW$T$11) - 512 .dwattr $C$DW$38, DW_AT_name("PRU1_CLK_EN") - 513 .dwattr $C$DW$38, DW_AT_TI_symbol_name("PRU1_CLK_EN") - 514 .dwattr $C$DW$38, DW_AT_bit_offset(0x1a), DW_AT_bit_size(0x01) - 515 .dwattr $C$DW$38, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 516 .dwattr $C$DW$38, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 517 .dwattr $C$DW$38, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 518 .dwattr $C$DW$38, DW_AT_decl_line(0x70) - 519 .dwattr $C$DW$38, DW_AT_decl_column(0x0d) - 520$C$DW$39 .dwtag DW_TAG_member - 521 .dwattr $C$DW$39, DW_AT_type(*$C$DW$T$11) - 522 .dwattr $C$DW$39, DW_AT_name("INTC_CLK_STOP_REQ") - 523 .dwattr $C$DW$39, DW_AT_TI_symbol_name("INTC_CLK_STOP_REQ") - 524 .dwattr $C$DW$39, DW_AT_bit_offset(0x19), DW_AT_bit_size(0x01) - 525 .dwattr $C$DW$39, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 526 .dwattr $C$DW$39, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 527 .dwattr $C$DW$39, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 528 .dwattr $C$DW$39, DW_AT_decl_line(0x71) - 529 .dwattr $C$DW$39, DW_AT_decl_column(0x0d) - 530$C$DW$40 .dwtag DW_TAG_member - 531 .dwattr $C$DW$40, DW_AT_type(*$C$DW$T$11) - 532 .dwattr $C$DW$40, DW_AT_name("INTC_CLK_STOP_ACK") - 533 .dwattr $C$DW$40, DW_AT_TI_symbol_name("INTC_CLK_STOP_ACK") - 534 .dwattr $C$DW$40, DW_AT_bit_offset(0x18), DW_AT_bit_size(0x01) - 535 .dwattr $C$DW$40, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 536 .dwattr $C$DW$40, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 537 .dwattr $C$DW$40, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 538 .dwattr $C$DW$40, DW_AT_decl_line(0x72) - 539 .dwattr $C$DW$40, DW_AT_decl_column(0x0d) - 540$C$DW$41 .dwtag DW_TAG_member - 541 .dwattr $C$DW$41, DW_AT_type(*$C$DW$T$11) - 542 .dwattr $C$DW$41, DW_AT_name("INTC_CLK_EN") - 543 .dwattr $C$DW$41, DW_AT_TI_symbol_name("INTC_CLK_EN") - 544 .dwattr $C$DW$41, DW_AT_bit_offset(0x17), DW_AT_bit_size(0x01) - 545 .dwattr $C$DW$41, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 546 .dwattr $C$DW$41, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 547 .dwattr $C$DW$41, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 548 .dwattr $C$DW$41, DW_AT_decl_line(0x73) - 549 .dwattr $C$DW$41, DW_AT_decl_column(0x0d) - 550$C$DW$42 .dwtag DW_TAG_member -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 11 - - 551 .dwattr $C$DW$42, DW_AT_type(*$C$DW$T$11) - 552 .dwattr $C$DW$42, DW_AT_name("UART_CLK_STOP_REQ") - 553 .dwattr $C$DW$42, DW_AT_TI_symbol_name("UART_CLK_STOP_REQ") - 554 .dwattr $C$DW$42, DW_AT_bit_offset(0x16), DW_AT_bit_size(0x01) - 555 .dwattr $C$DW$42, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 556 .dwattr $C$DW$42, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 557 .dwattr $C$DW$42, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 558 .dwattr $C$DW$42, DW_AT_decl_line(0x74) - 559 .dwattr $C$DW$42, DW_AT_decl_column(0x0d) - 560$C$DW$43 .dwtag DW_TAG_member - 561 .dwattr $C$DW$43, DW_AT_type(*$C$DW$T$11) - 562 .dwattr $C$DW$43, DW_AT_name("UART_CLK_STOP_ACK") - 563 .dwattr $C$DW$43, DW_AT_TI_symbol_name("UART_CLK_STOP_ACK") - 564 .dwattr $C$DW$43, DW_AT_bit_offset(0x15), DW_AT_bit_size(0x01) - 565 .dwattr $C$DW$43, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 566 .dwattr $C$DW$43, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 567 .dwattr $C$DW$43, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 568 .dwattr $C$DW$43, DW_AT_decl_line(0x75) - 569 .dwattr $C$DW$43, DW_AT_decl_column(0x0d) - 570$C$DW$44 .dwtag DW_TAG_member - 571 .dwattr $C$DW$44, DW_AT_type(*$C$DW$T$11) - 572 .dwattr $C$DW$44, DW_AT_name("UART_CLK_EN") - 573 .dwattr $C$DW$44, DW_AT_TI_symbol_name("UART_CLK_EN") - 574 .dwattr $C$DW$44, DW_AT_bit_offset(0x14), DW_AT_bit_size(0x01) - 575 .dwattr $C$DW$44, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 576 .dwattr $C$DW$44, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 577 .dwattr $C$DW$44, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 578 .dwattr $C$DW$44, DW_AT_decl_line(0x76) - 579 .dwattr $C$DW$44, DW_AT_decl_column(0x0d) - 580$C$DW$45 .dwtag DW_TAG_member - 581 .dwattr $C$DW$45, DW_AT_type(*$C$DW$T$11) - 582 .dwattr $C$DW$45, DW_AT_name("ECAP_CLK_STOP_REQ") - 583 .dwattr $C$DW$45, DW_AT_TI_symbol_name("ECAP_CLK_STOP_REQ") - 584 .dwattr $C$DW$45, DW_AT_bit_offset(0x13), DW_AT_bit_size(0x01) - 585 .dwattr $C$DW$45, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 586 .dwattr $C$DW$45, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 587 .dwattr $C$DW$45, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 588 .dwattr $C$DW$45, DW_AT_decl_line(0x77) - 589 .dwattr $C$DW$45, DW_AT_decl_column(0x0d) - 590$C$DW$46 .dwtag DW_TAG_member - 591 .dwattr $C$DW$46, DW_AT_type(*$C$DW$T$11) - 592 .dwattr $C$DW$46, DW_AT_name("ECAP_CLK_STOP_ACK") - 593 .dwattr $C$DW$46, DW_AT_TI_symbol_name("ECAP_CLK_STOP_ACK") - 594 .dwattr $C$DW$46, DW_AT_bit_offset(0x12), DW_AT_bit_size(0x01) - 595 .dwattr $C$DW$46, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 596 .dwattr $C$DW$46, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 597 .dwattr $C$DW$46, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 598 .dwattr $C$DW$46, DW_AT_decl_line(0x78) - 599 .dwattr $C$DW$46, DW_AT_decl_column(0x0d) - 600$C$DW$47 .dwtag DW_TAG_member - 601 .dwattr $C$DW$47, DW_AT_type(*$C$DW$T$11) - 602 .dwattr $C$DW$47, DW_AT_name("ECAP_CLK_EN") - 603 .dwattr $C$DW$47, DW_AT_TI_symbol_name("ECAP_CLK_EN") - 604 .dwattr $C$DW$47, DW_AT_bit_offset(0x11), DW_AT_bit_size(0x01) - 605 .dwattr $C$DW$47, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 12 - - 606 .dwattr $C$DW$47, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 607 .dwattr $C$DW$47, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 608 .dwattr $C$DW$47, DW_AT_decl_line(0x79) - 609 .dwattr $C$DW$47, DW_AT_decl_column(0x0d) - 610$C$DW$48 .dwtag DW_TAG_member - 611 .dwattr $C$DW$48, DW_AT_type(*$C$DW$T$11) - 612 .dwattr $C$DW$48, DW_AT_name("IEP_CLK_STOP_REQ") - 613 .dwattr $C$DW$48, DW_AT_TI_symbol_name("IEP_CLK_STOP_REQ") - 614 .dwattr $C$DW$48, DW_AT_bit_offset(0x10), DW_AT_bit_size(0x01) - 615 .dwattr $C$DW$48, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 616 .dwattr $C$DW$48, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 617 .dwattr $C$DW$48, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 618 .dwattr $C$DW$48, DW_AT_decl_line(0x7a) - 619 .dwattr $C$DW$48, DW_AT_decl_column(0x0d) - 620$C$DW$49 .dwtag DW_TAG_member - 621 .dwattr $C$DW$49, DW_AT_type(*$C$DW$T$11) - 622 .dwattr $C$DW$49, DW_AT_name("IEP_CLK_STOP_ACK") - 623 .dwattr $C$DW$49, DW_AT_TI_symbol_name("IEP_CLK_STOP_ACK") - 624 .dwattr $C$DW$49, DW_AT_bit_offset(0x0f), DW_AT_bit_size(0x01) - 625 .dwattr $C$DW$49, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 626 .dwattr $C$DW$49, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 627 .dwattr $C$DW$49, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 628 .dwattr $C$DW$49, DW_AT_decl_line(0x7b) - 629 .dwattr $C$DW$49, DW_AT_decl_column(0x0d) - 630$C$DW$50 .dwtag DW_TAG_member - 631 .dwattr $C$DW$50, DW_AT_type(*$C$DW$T$11) - 632 .dwattr $C$DW$50, DW_AT_name("IEP_CLK_EN") - 633 .dwattr $C$DW$50, DW_AT_TI_symbol_name("IEP_CLK_EN") - 634 .dwattr $C$DW$50, DW_AT_bit_offset(0x0e), DW_AT_bit_size(0x01) - 635 .dwattr $C$DW$50, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 636 .dwattr $C$DW$50, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 637 .dwattr $C$DW$50, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 638 .dwattr $C$DW$50, DW_AT_decl_line(0x7c) - 639 .dwattr $C$DW$50, DW_AT_decl_column(0x0d) - 640$C$DW$51 .dwtag DW_TAG_member - 641 .dwattr $C$DW$51, DW_AT_type(*$C$DW$T$11) - 642 .dwattr $C$DW$51, DW_AT_name("rsvd18") - 643 .dwattr $C$DW$51, DW_AT_TI_symbol_name("rsvd18") - 644 .dwattr $C$DW$51, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x0e) - 645 .dwattr $C$DW$51, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 646 .dwattr $C$DW$51, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 647 .dwattr $C$DW$51, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 648 .dwattr $C$DW$51, DW_AT_decl_line(0x7d) - 649 .dwattr $C$DW$51, DW_AT_decl_column(0x0d) - 650 .dwendtag $C$DW$T$23 - 651 - 652 .dwattr $C$DW$T$23, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 653 .dwattr $C$DW$T$23, DW_AT_decl_line(0x6a) - 654 .dwattr $C$DW$T$23, DW_AT_decl_column(0x13) - 655$C$DW$T$56 .dwtag DW_TAG_volatile_type - 656 .dwattr $C$DW$T$56, DW_AT_type(*$C$DW$T$23) - 657 - 658$C$DW$T$24 .dwtag DW_TAG_structure_type - 659 .dwattr $C$DW$T$24, DW_AT_byte_size(0x04) - 660$C$DW$52 .dwtag DW_TAG_member -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 13 - - 661 .dwattr $C$DW$52, DW_AT_type(*$C$DW$T$11) - 662 .dwattr $C$DW$52, DW_AT_name("PRU0_IMEM_PE_RAW") - 663 .dwattr $C$DW$52, DW_AT_TI_symbol_name("PRU0_IMEM_PE_RAW") - 664 .dwattr $C$DW$52, DW_AT_bit_offset(0x1c), DW_AT_bit_size(0x04) - 665 .dwattr $C$DW$52, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 666 .dwattr $C$DW$52, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 667 .dwattr $C$DW$52, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 668 .dwattr $C$DW$52, DW_AT_decl_line(0x87) - 669 .dwattr $C$DW$52, DW_AT_decl_column(0x0d) - 670$C$DW$53 .dwtag DW_TAG_member - 671 .dwattr $C$DW$53, DW_AT_type(*$C$DW$T$11) - 672 .dwattr $C$DW$53, DW_AT_name("PRU0_DMEM_PE_RAW") - 673 .dwattr $C$DW$53, DW_AT_TI_symbol_name("PRU0_DMEM_PE_RAW") - 674 .dwattr $C$DW$53, DW_AT_bit_offset(0x18), DW_AT_bit_size(0x04) - 675 .dwattr $C$DW$53, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 676 .dwattr $C$DW$53, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 677 .dwattr $C$DW$53, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 678 .dwattr $C$DW$53, DW_AT_decl_line(0x88) - 679 .dwattr $C$DW$53, DW_AT_decl_column(0x0d) - 680$C$DW$54 .dwtag DW_TAG_member - 681 .dwattr $C$DW$54, DW_AT_type(*$C$DW$T$11) - 682 .dwattr $C$DW$54, DW_AT_name("PRU1_IMEM_PE_RAW") - 683 .dwattr $C$DW$54, DW_AT_TI_symbol_name("PRU1_IMEM_PE_RAW") - 684 .dwattr $C$DW$54, DW_AT_bit_offset(0x14), DW_AT_bit_size(0x04) - 685 .dwattr $C$DW$54, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 686 .dwattr $C$DW$54, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 687 .dwattr $C$DW$54, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 688 .dwattr $C$DW$54, DW_AT_decl_line(0x89) - 689 .dwattr $C$DW$54, DW_AT_decl_column(0x0d) - 690$C$DW$55 .dwtag DW_TAG_member - 691 .dwattr $C$DW$55, DW_AT_type(*$C$DW$T$11) - 692 .dwattr $C$DW$55, DW_AT_name("PRU1_DMEM_PE_RAW") - 693 .dwattr $C$DW$55, DW_AT_TI_symbol_name("PRU1_DMEM_PE_RAW") - 694 .dwattr $C$DW$55, DW_AT_bit_offset(0x10), DW_AT_bit_size(0x04) - 695 .dwattr $C$DW$55, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 696 .dwattr $C$DW$55, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 697 .dwattr $C$DW$55, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 698 .dwattr $C$DW$55, DW_AT_decl_line(0x8a) - 699 .dwattr $C$DW$55, DW_AT_decl_column(0x0d) - 700$C$DW$56 .dwtag DW_TAG_member - 701 .dwattr $C$DW$56, DW_AT_type(*$C$DW$T$11) - 702 .dwattr $C$DW$56, DW_AT_name("RAM_PE_RAW") - 703 .dwattr $C$DW$56, DW_AT_TI_symbol_name("RAM_PE_RAW") - 704 .dwattr $C$DW$56, DW_AT_bit_offset(0x0c), DW_AT_bit_size(0x04) - 705 .dwattr $C$DW$56, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 706 .dwattr $C$DW$56, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 707 .dwattr $C$DW$56, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 708 .dwattr $C$DW$56, DW_AT_decl_line(0x8b) - 709 .dwattr $C$DW$56, DW_AT_decl_column(0x0d) - 710$C$DW$57 .dwtag DW_TAG_member - 711 .dwattr $C$DW$57, DW_AT_type(*$C$DW$T$11) - 712 .dwattr $C$DW$57, DW_AT_name("rsvd20") - 713 .dwattr $C$DW$57, DW_AT_TI_symbol_name("rsvd20") - 714 .dwattr $C$DW$57, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x0c) - 715 .dwattr $C$DW$57, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 14 - - 716 .dwattr $C$DW$57, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 717 .dwattr $C$DW$57, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 718 .dwattr $C$DW$57, DW_AT_decl_line(0x8c) - 719 .dwattr $C$DW$57, DW_AT_decl_column(0x0d) - 720 .dwendtag $C$DW$T$24 - 721 - 722 .dwattr $C$DW$T$24, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 723 .dwattr $C$DW$T$24, DW_AT_decl_line(0x86) - 724 .dwattr $C$DW$T$24, DW_AT_decl_column(0x14) - 725$C$DW$T$58 .dwtag DW_TAG_volatile_type - 726 .dwattr $C$DW$T$58, DW_AT_type(*$C$DW$T$24) - 727 - 728$C$DW$T$25 .dwtag DW_TAG_structure_type - 729 .dwattr $C$DW$T$25, DW_AT_byte_size(0x04) - 730$C$DW$58 .dwtag DW_TAG_member - 731 .dwattr $C$DW$58, DW_AT_type(*$C$DW$T$11) - 732 .dwattr $C$DW$58, DW_AT_name("PRU0_IMEM_PE") - 733 .dwattr $C$DW$58, DW_AT_TI_symbol_name("PRU0_IMEM_PE") - 734 .dwattr $C$DW$58, DW_AT_bit_offset(0x1c), DW_AT_bit_size(0x04) - 735 .dwattr $C$DW$58, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 736 .dwattr $C$DW$58, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 737 .dwattr $C$DW$58, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 738 .dwattr $C$DW$58, DW_AT_decl_line(0x96) - 739 .dwattr $C$DW$58, DW_AT_decl_column(0x0d) - 740$C$DW$59 .dwtag DW_TAG_member - 741 .dwattr $C$DW$59, DW_AT_type(*$C$DW$T$11) - 742 .dwattr $C$DW$59, DW_AT_name("PRU0_DMEM_PE") - 743 .dwattr $C$DW$59, DW_AT_TI_symbol_name("PRU0_DMEM_PE") - 744 .dwattr $C$DW$59, DW_AT_bit_offset(0x18), DW_AT_bit_size(0x04) - 745 .dwattr $C$DW$59, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 746 .dwattr $C$DW$59, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 747 .dwattr $C$DW$59, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 748 .dwattr $C$DW$59, DW_AT_decl_line(0x97) - 749 .dwattr $C$DW$59, DW_AT_decl_column(0x0d) - 750$C$DW$60 .dwtag DW_TAG_member - 751 .dwattr $C$DW$60, DW_AT_type(*$C$DW$T$11) - 752 .dwattr $C$DW$60, DW_AT_name("PRU1_IMEM_PE") - 753 .dwattr $C$DW$60, DW_AT_TI_symbol_name("PRU1_IMEM_PE") - 754 .dwattr $C$DW$60, DW_AT_bit_offset(0x14), DW_AT_bit_size(0x04) - 755 .dwattr $C$DW$60, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 756 .dwattr $C$DW$60, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 757 .dwattr $C$DW$60, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 758 .dwattr $C$DW$60, DW_AT_decl_line(0x98) - 759 .dwattr $C$DW$60, DW_AT_decl_column(0x0d) - 760$C$DW$61 .dwtag DW_TAG_member - 761 .dwattr $C$DW$61, DW_AT_type(*$C$DW$T$11) - 762 .dwattr $C$DW$61, DW_AT_name("PRU1_DMEM_PE") - 763 .dwattr $C$DW$61, DW_AT_TI_symbol_name("PRU1_DMEM_PE") - 764 .dwattr $C$DW$61, DW_AT_bit_offset(0x10), DW_AT_bit_size(0x04) - 765 .dwattr $C$DW$61, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 766 .dwattr $C$DW$61, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 767 .dwattr $C$DW$61, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 768 .dwattr $C$DW$61, DW_AT_decl_line(0x99) - 769 .dwattr $C$DW$61, DW_AT_decl_column(0x0d) - 770$C$DW$62 .dwtag DW_TAG_member -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 15 - - 771 .dwattr $C$DW$62, DW_AT_type(*$C$DW$T$11) - 772 .dwattr $C$DW$62, DW_AT_name("RAM_PE") - 773 .dwattr $C$DW$62, DW_AT_TI_symbol_name("RAM_PE") - 774 .dwattr $C$DW$62, DW_AT_bit_offset(0x0c), DW_AT_bit_size(0x04) - 775 .dwattr $C$DW$62, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 776 .dwattr $C$DW$62, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 777 .dwattr $C$DW$62, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 778 .dwattr $C$DW$62, DW_AT_decl_line(0x9a) - 779 .dwattr $C$DW$62, DW_AT_decl_column(0x0d) - 780$C$DW$63 .dwtag DW_TAG_member - 781 .dwattr $C$DW$63, DW_AT_type(*$C$DW$T$11) - 782 .dwattr $C$DW$63, DW_AT_name("rsvd20") - 783 .dwattr $C$DW$63, DW_AT_TI_symbol_name("rsvd20") - 784 .dwattr $C$DW$63, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x0c) - 785 .dwattr $C$DW$63, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 786 .dwattr $C$DW$63, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 787 .dwattr $C$DW$63, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 788 .dwattr $C$DW$63, DW_AT_decl_line(0x9b) - 789 .dwattr $C$DW$63, DW_AT_decl_column(0x0d) - 790 .dwendtag $C$DW$T$25 - 791 - 792 .dwattr $C$DW$T$25, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 793 .dwattr $C$DW$T$25, DW_AT_decl_line(0x95) - 794 .dwattr $C$DW$T$25, DW_AT_decl_column(0x14) - 795$C$DW$T$60 .dwtag DW_TAG_volatile_type - 796 .dwattr $C$DW$T$60, DW_AT_type(*$C$DW$T$25) - 797 - 798$C$DW$T$26 .dwtag DW_TAG_structure_type - 799 .dwattr $C$DW$T$26, DW_AT_byte_size(0x04) - 800$C$DW$64 .dwtag DW_TAG_member - 801 .dwattr $C$DW$64, DW_AT_type(*$C$DW$T$11) - 802 .dwattr $C$DW$64, DW_AT_name("PRU0_IMEM_PE_SET") - 803 .dwattr $C$DW$64, DW_AT_TI_symbol_name("PRU0_IMEM_PE_SET") - 804 .dwattr $C$DW$64, DW_AT_bit_offset(0x1c), DW_AT_bit_size(0x04) - 805 .dwattr $C$DW$64, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 806 .dwattr $C$DW$64, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 807 .dwattr $C$DW$64, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 808 .dwattr $C$DW$64, DW_AT_decl_line(0xa4) - 809 .dwattr $C$DW$64, DW_AT_decl_column(0x0d) - 810$C$DW$65 .dwtag DW_TAG_member - 811 .dwattr $C$DW$65, DW_AT_type(*$C$DW$T$11) - 812 .dwattr $C$DW$65, DW_AT_name("PRU0_DMEM_PE_SET") - 813 .dwattr $C$DW$65, DW_AT_TI_symbol_name("PRU0_DMEM_PE_SET") - 814 .dwattr $C$DW$65, DW_AT_bit_offset(0x18), DW_AT_bit_size(0x04) - 815 .dwattr $C$DW$65, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 816 .dwattr $C$DW$65, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 817 .dwattr $C$DW$65, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 818 .dwattr $C$DW$65, DW_AT_decl_line(0xa5) - 819 .dwattr $C$DW$65, DW_AT_decl_column(0x0d) - 820$C$DW$66 .dwtag DW_TAG_member - 821 .dwattr $C$DW$66, DW_AT_type(*$C$DW$T$11) - 822 .dwattr $C$DW$66, DW_AT_name("PRU1_IMEM_PE_SET") - 823 .dwattr $C$DW$66, DW_AT_TI_symbol_name("PRU1_IMEM_PE_SET") - 824 .dwattr $C$DW$66, DW_AT_bit_offset(0x14), DW_AT_bit_size(0x04) - 825 .dwattr $C$DW$66, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 16 - - 826 .dwattr $C$DW$66, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 827 .dwattr $C$DW$66, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 828 .dwattr $C$DW$66, DW_AT_decl_line(0xa6) - 829 .dwattr $C$DW$66, DW_AT_decl_column(0x0d) - 830$C$DW$67 .dwtag DW_TAG_member - 831 .dwattr $C$DW$67, DW_AT_type(*$C$DW$T$11) - 832 .dwattr $C$DW$67, DW_AT_name("PRU1_DMEM_PE_SET") - 833 .dwattr $C$DW$67, DW_AT_TI_symbol_name("PRU1_DMEM_PE_SET") - 834 .dwattr $C$DW$67, DW_AT_bit_offset(0x10), DW_AT_bit_size(0x04) - 835 .dwattr $C$DW$67, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 836 .dwattr $C$DW$67, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 837 .dwattr $C$DW$67, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 838 .dwattr $C$DW$67, DW_AT_decl_line(0xa7) - 839 .dwattr $C$DW$67, DW_AT_decl_column(0x0d) - 840$C$DW$68 .dwtag DW_TAG_member - 841 .dwattr $C$DW$68, DW_AT_type(*$C$DW$T$11) - 842 .dwattr $C$DW$68, DW_AT_name("RAM_PE_SET") - 843 .dwattr $C$DW$68, DW_AT_TI_symbol_name("RAM_PE_SET") - 844 .dwattr $C$DW$68, DW_AT_bit_offset(0x0c), DW_AT_bit_size(0x04) - 845 .dwattr $C$DW$68, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 846 .dwattr $C$DW$68, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 847 .dwattr $C$DW$68, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 848 .dwattr $C$DW$68, DW_AT_decl_line(0xa8) - 849 .dwattr $C$DW$68, DW_AT_decl_column(0x0d) - 850$C$DW$69 .dwtag DW_TAG_member - 851 .dwattr $C$DW$69, DW_AT_type(*$C$DW$T$11) - 852 .dwattr $C$DW$69, DW_AT_name("rsvd20") - 853 .dwattr $C$DW$69, DW_AT_TI_symbol_name("rsvd20") - 854 .dwattr $C$DW$69, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x0c) - 855 .dwattr $C$DW$69, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 856 .dwattr $C$DW$69, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 857 .dwattr $C$DW$69, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 858 .dwattr $C$DW$69, DW_AT_decl_line(0xa9) - 859 .dwattr $C$DW$69, DW_AT_decl_column(0x0d) - 860 .dwendtag $C$DW$T$26 - 861 - 862 .dwattr $C$DW$T$26, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 863 .dwattr $C$DW$T$26, DW_AT_decl_line(0xa3) - 864 .dwattr $C$DW$T$26, DW_AT_decl_column(0x13) - 865$C$DW$T$62 .dwtag DW_TAG_volatile_type - 866 .dwattr $C$DW$T$62, DW_AT_type(*$C$DW$T$26) - 867 - 868$C$DW$T$27 .dwtag DW_TAG_structure_type - 869 .dwattr $C$DW$T$27, DW_AT_byte_size(0x04) - 870$C$DW$70 .dwtag DW_TAG_member - 871 .dwattr $C$DW$70, DW_AT_type(*$C$DW$T$11) - 872 .dwattr $C$DW$70, DW_AT_name("PRU0_IMEM_PE_CLR") - 873 .dwattr $C$DW$70, DW_AT_TI_symbol_name("PRU0_IMEM_PE_CLR") - 874 .dwattr $C$DW$70, DW_AT_bit_offset(0x1c), DW_AT_bit_size(0x04) - 875 .dwattr $C$DW$70, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 876 .dwattr $C$DW$70, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 877 .dwattr $C$DW$70, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 878 .dwattr $C$DW$70, DW_AT_decl_line(0xb3) - 879 .dwattr $C$DW$70, DW_AT_decl_column(0x0d) - 880$C$DW$71 .dwtag DW_TAG_member -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 17 - - 881 .dwattr $C$DW$71, DW_AT_type(*$C$DW$T$11) - 882 .dwattr $C$DW$71, DW_AT_name("PRU0_DMEM_PE_CLR") - 883 .dwattr $C$DW$71, DW_AT_TI_symbol_name("PRU0_DMEM_PE_CLR") - 884 .dwattr $C$DW$71, DW_AT_bit_offset(0x18), DW_AT_bit_size(0x04) - 885 .dwattr $C$DW$71, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 886 .dwattr $C$DW$71, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 887 .dwattr $C$DW$71, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 888 .dwattr $C$DW$71, DW_AT_decl_line(0xb4) - 889 .dwattr $C$DW$71, DW_AT_decl_column(0x0d) - 890$C$DW$72 .dwtag DW_TAG_member - 891 .dwattr $C$DW$72, DW_AT_type(*$C$DW$T$11) - 892 .dwattr $C$DW$72, DW_AT_name("PRU1_IMEM_PE_CLR") - 893 .dwattr $C$DW$72, DW_AT_TI_symbol_name("PRU1_IMEM_PE_CLR") - 894 .dwattr $C$DW$72, DW_AT_bit_offset(0x14), DW_AT_bit_size(0x04) - 895 .dwattr $C$DW$72, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 896 .dwattr $C$DW$72, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 897 .dwattr $C$DW$72, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 898 .dwattr $C$DW$72, DW_AT_decl_line(0xb5) - 899 .dwattr $C$DW$72, DW_AT_decl_column(0x0d) - 900$C$DW$73 .dwtag DW_TAG_member - 901 .dwattr $C$DW$73, DW_AT_type(*$C$DW$T$11) - 902 .dwattr $C$DW$73, DW_AT_name("PRU1_DMEM_PE_CLR") - 903 .dwattr $C$DW$73, DW_AT_TI_symbol_name("PRU1_DMEM_PE_CLR") - 904 .dwattr $C$DW$73, DW_AT_bit_offset(0x10), DW_AT_bit_size(0x04) - 905 .dwattr $C$DW$73, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 906 .dwattr $C$DW$73, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 907 .dwattr $C$DW$73, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 908 .dwattr $C$DW$73, DW_AT_decl_line(0xb6) - 909 .dwattr $C$DW$73, DW_AT_decl_column(0x0d) - 910$C$DW$74 .dwtag DW_TAG_member - 911 .dwattr $C$DW$74, DW_AT_type(*$C$DW$T$11) - 912 .dwattr $C$DW$74, DW_AT_name("rsvd16") - 913 .dwattr $C$DW$74, DW_AT_TI_symbol_name("rsvd16") - 914 .dwattr $C$DW$74, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x10) - 915 .dwattr $C$DW$74, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 916 .dwattr $C$DW$74, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 917 .dwattr $C$DW$74, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 918 .dwattr $C$DW$74, DW_AT_decl_line(0xb7) - 919 .dwattr $C$DW$74, DW_AT_decl_column(0x0d) - 920 .dwendtag $C$DW$T$27 - 921 - 922 .dwattr $C$DW$T$27, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 923 .dwattr $C$DW$T$27, DW_AT_decl_line(0xb2) - 924 .dwattr $C$DW$T$27, DW_AT_decl_column(0x13) - 925$C$DW$T$64 .dwtag DW_TAG_volatile_type - 926 .dwattr $C$DW$T$64, DW_AT_type(*$C$DW$T$27) - 927 - 928$C$DW$T$28 .dwtag DW_TAG_structure_type - 929 .dwattr $C$DW$T$28, DW_AT_byte_size(0x04) - 930$C$DW$75 .dwtag DW_TAG_member - 931 .dwattr $C$DW$75, DW_AT_type(*$C$DW$T$11) - 932 .dwattr $C$DW$75, DW_AT_name("PMAO_PRU0") - 933 .dwattr $C$DW$75, DW_AT_TI_symbol_name("PMAO_PRU0") - 934 .dwattr $C$DW$75, DW_AT_bit_offset(0x1f), DW_AT_bit_size(0x01) - 935 .dwattr $C$DW$75, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 18 - - 936 .dwattr $C$DW$75, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 937 .dwattr $C$DW$75, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 938 .dwattr $C$DW$75, DW_AT_decl_line(0xc4) - 939 .dwattr $C$DW$75, DW_AT_decl_column(0x0d) - 940$C$DW$76 .dwtag DW_TAG_member - 941 .dwattr $C$DW$76, DW_AT_type(*$C$DW$T$11) - 942 .dwattr $C$DW$76, DW_AT_name("PMAO_PRU1") - 943 .dwattr $C$DW$76, DW_AT_TI_symbol_name("PMAO_PRU1") - 944 .dwattr $C$DW$76, DW_AT_bit_offset(0x1e), DW_AT_bit_size(0x01) - 945 .dwattr $C$DW$76, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 946 .dwattr $C$DW$76, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 947 .dwattr $C$DW$76, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 948 .dwattr $C$DW$76, DW_AT_decl_line(0xc5) - 949 .dwattr $C$DW$76, DW_AT_decl_column(0x0d) - 950$C$DW$77 .dwtag DW_TAG_member - 951 .dwattr $C$DW$77, DW_AT_type(*$C$DW$T$11) - 952 .dwattr $C$DW$77, DW_AT_name("rsvd2") - 953 .dwattr $C$DW$77, DW_AT_TI_symbol_name("rsvd2") - 954 .dwattr $C$DW$77, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x1e) - 955 .dwattr $C$DW$77, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 956 .dwattr $C$DW$77, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 957 .dwattr $C$DW$77, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 958 .dwattr $C$DW$77, DW_AT_decl_line(0xc6) - 959 .dwattr $C$DW$77, DW_AT_decl_column(0x0d) - 960 .dwendtag $C$DW$T$28 - 961 - 962 .dwattr $C$DW$T$28, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 963 .dwattr $C$DW$T$28, DW_AT_decl_line(0xc3) - 964 .dwattr $C$DW$T$28, DW_AT_decl_column(0x13) - 965$C$DW$T$66 .dwtag DW_TAG_volatile_type - 966 .dwattr $C$DW$T$66, DW_AT_type(*$C$DW$T$28) - 967 - 968$C$DW$T$29 .dwtag DW_TAG_structure_type - 969 .dwattr $C$DW$T$29, DW_AT_byte_size(0x04) - 970$C$DW$78 .dwtag DW_TAG_member - 971 .dwattr $C$DW$78, DW_AT_type(*$C$DW$T$11) - 972 .dwattr $C$DW$78, DW_AT_name("OCP_EN") - 973 .dwattr $C$DW$78, DW_AT_TI_symbol_name("OCP_EN") - 974 .dwattr $C$DW$78, DW_AT_bit_offset(0x1f), DW_AT_bit_size(0x01) - 975 .dwattr $C$DW$78, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 976 .dwattr $C$DW$78, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 977 .dwattr $C$DW$78, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 978 .dwattr $C$DW$78, DW_AT_decl_line(0xd3) - 979 .dwattr $C$DW$78, DW_AT_decl_column(0x0d) - 980$C$DW$79 .dwtag DW_TAG_member - 981 .dwattr $C$DW$79, DW_AT_type(*$C$DW$T$11) - 982 .dwattr $C$DW$79, DW_AT_name("rsvd1") - 983 .dwattr $C$DW$79, DW_AT_TI_symbol_name("rsvd1") - 984 .dwattr $C$DW$79, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x1f) - 985 .dwattr $C$DW$79, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 986 .dwattr $C$DW$79, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 987 .dwattr $C$DW$79, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 988 .dwattr $C$DW$79, DW_AT_decl_line(0xd4) - 989 .dwattr $C$DW$79, DW_AT_decl_column(0x0d) - 990 .dwendtag $C$DW$T$29 -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 19 - - 991 - 992 .dwattr $C$DW$T$29, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 993 .dwattr $C$DW$T$29, DW_AT_decl_line(0xd2) - 994 .dwattr $C$DW$T$29, DW_AT_decl_column(0x13) - 995$C$DW$T$68 .dwtag DW_TAG_volatile_type - 996 .dwattr $C$DW$T$68, DW_AT_type(*$C$DW$T$29) - 997 - 998$C$DW$T$30 .dwtag DW_TAG_structure_type - 999 .dwattr $C$DW$T$30, DW_AT_byte_size(0x04) - 1000$C$DW$80 .dwtag DW_TAG_member - 1001 .dwattr $C$DW$80, DW_AT_type(*$C$DW$T$11) - 1002 .dwattr $C$DW$80, DW_AT_name("PRU1_PAD_HP_EN") - 1003 .dwattr $C$DW$80, DW_AT_TI_symbol_name("PRU1_PAD_HP_EN") - 1004 .dwattr $C$DW$80, DW_AT_bit_offset(0x1f), DW_AT_bit_size(0x01) - 1005 .dwattr $C$DW$80, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1006 .dwattr $C$DW$80, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1007 .dwattr $C$DW$80, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1008 .dwattr $C$DW$80, DW_AT_decl_line(0xde) - 1009 .dwattr $C$DW$80, DW_AT_decl_column(0x0d) - 1010$C$DW$81 .dwtag DW_TAG_member - 1011 .dwattr $C$DW$81, DW_AT_type(*$C$DW$T$11) - 1012 .dwattr $C$DW$81, DW_AT_name("XFR_SHIFT_EN") - 1013 .dwattr $C$DW$81, DW_AT_TI_symbol_name("XFR_SHIFT_EN") - 1014 .dwattr $C$DW$81, DW_AT_bit_offset(0x1e), DW_AT_bit_size(0x01) - 1015 .dwattr $C$DW$81, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1016 .dwattr $C$DW$81, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1017 .dwattr $C$DW$81, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1018 .dwattr $C$DW$81, DW_AT_decl_line(0xdf) - 1019 .dwattr $C$DW$81, DW_AT_decl_column(0x0d) - 1020$C$DW$82 .dwtag DW_TAG_member - 1021 .dwattr $C$DW$82, DW_AT_type(*$C$DW$T$11) - 1022 .dwattr $C$DW$82, DW_AT_name("rsvd2") - 1023 .dwattr $C$DW$82, DW_AT_TI_symbol_name("rsvd2") - 1024 .dwattr $C$DW$82, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x1e) - 1025 .dwattr $C$DW$82, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1026 .dwattr $C$DW$82, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1027 .dwattr $C$DW$82, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1028 .dwattr $C$DW$82, DW_AT_decl_line(0xe0) - 1029 .dwattr $C$DW$82, DW_AT_decl_column(0x0d) - 1030 .dwendtag $C$DW$T$30 - 1031 - 1032 .dwattr $C$DW$T$30, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1033 .dwattr $C$DW$T$30, DW_AT_decl_line(0xdd) - 1034 .dwattr $C$DW$T$30, DW_AT_decl_column(0x13) - 1035$C$DW$T$70 .dwtag DW_TAG_volatile_type - 1036 .dwattr $C$DW$T$70, DW_AT_type(*$C$DW$T$30) - 1037 - 1038$C$DW$T$31 .dwtag DW_TAG_structure_type - 1039 .dwattr $C$DW$T$31, DW_AT_byte_size(0x04) - 1040$C$DW$83 .dwtag DW_TAG_member - 1041 .dwattr $C$DW$83, DW_AT_type(*$C$DW$T$11) - 1042 .dwattr $C$DW$83, DW_AT_name("PIN_MUX_SEL") - 1043 .dwattr $C$DW$83, DW_AT_TI_symbol_name("PIN_MUX_SEL") - 1044 .dwattr $C$DW$83, DW_AT_bit_offset(0x18), DW_AT_bit_size(0x08) - 1045 .dwattr $C$DW$83, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 20 - - 1046 .dwattr $C$DW$83, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1047 .dwattr $C$DW$83, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1048 .dwattr $C$DW$83, DW_AT_decl_line(0xec) - 1049 .dwattr $C$DW$83, DW_AT_decl_column(0x0d) - 1050$C$DW$84 .dwtag DW_TAG_member - 1051 .dwattr $C$DW$84, DW_AT_type(*$C$DW$T$11) - 1052 .dwattr $C$DW$84, DW_AT_name("rsvd2") - 1053 .dwattr $C$DW$84, DW_AT_TI_symbol_name("rsvd2") - 1054 .dwattr $C$DW$84, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x18) - 1055 .dwattr $C$DW$84, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1056 .dwattr $C$DW$84, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1057 .dwattr $C$DW$84, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1058 .dwattr $C$DW$84, DW_AT_decl_line(0xed) - 1059 .dwattr $C$DW$84, DW_AT_decl_column(0x0d) - 1060 .dwendtag $C$DW$T$31 - 1061 - 1062 .dwattr $C$DW$T$31, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1063 .dwattr $C$DW$T$31, DW_AT_decl_line(0xeb) - 1064 .dwattr $C$DW$T$31, DW_AT_decl_column(0x13) - 1065$C$DW$T$72 .dwtag DW_TAG_volatile_type - 1066 .dwattr $C$DW$T$72, DW_AT_type(*$C$DW$T$31) - 1067 - 1068$C$DW$T$35 .dwtag DW_TAG_structure_type - 1069 .dwattr $C$DW$T$35, DW_AT_byte_size(0x44) - 1070$C$DW$85 .dwtag DW_TAG_member - 1071 .dwattr $C$DW$85, DW_AT_type(*$C$DW$T$49) - 1072 .dwattr $C$DW$85, DW_AT_name("$P$T0") - 1073 .dwattr $C$DW$85, DW_AT_TI_symbol_name("$P$T0") - 1074 .dwattr $C$DW$85, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1075 .dwattr $C$DW$85, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1076 .dwattr $C$DW$85, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1077 .dwattr $C$DW$85, DW_AT_decl_line(0x29) - 1078 .dwattr $C$DW$85, DW_AT_decl_column(0x02) - 1079$C$DW$86 .dwtag DW_TAG_member - 1080 .dwattr $C$DW$86, DW_AT_type(*$C$DW$T$51) - 1081 .dwattr $C$DW$86, DW_AT_name("$P$T1") - 1082 .dwattr $C$DW$86, DW_AT_TI_symbol_name("$P$T1") - 1083 .dwattr $C$DW$86, DW_AT_data_member_location[DW_OP_plus_uconst 0x4] - 1084 .dwattr $C$DW$86, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1085 .dwattr $C$DW$86, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1086 .dwattr $C$DW$86, DW_AT_decl_line(0x33) - 1087 .dwattr $C$DW$86, DW_AT_decl_column(0x02) - 1088$C$DW$87 .dwtag DW_TAG_member - 1089 .dwattr $C$DW$87, DW_AT_type(*$C$DW$T$53) - 1090 .dwattr $C$DW$87, DW_AT_name("$P$T2") - 1091 .dwattr $C$DW$87, DW_AT_TI_symbol_name("$P$T2") - 1092 .dwattr $C$DW$87, DW_AT_data_member_location[DW_OP_plus_uconst 0x8] - 1093 .dwattr $C$DW$87, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1094 .dwattr $C$DW$87, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1095 .dwattr $C$DW$87, DW_AT_decl_line(0x41) - 1096 .dwattr $C$DW$87, DW_AT_decl_column(0x02) - 1097$C$DW$88 .dwtag DW_TAG_member - 1098 .dwattr $C$DW$88, DW_AT_type(*$C$DW$T$55) - 1099 .dwattr $C$DW$88, DW_AT_name("$P$T3") - 1100 .dwattr $C$DW$88, DW_AT_TI_symbol_name("$P$T3") -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 21 - - 1101 .dwattr $C$DW$88, DW_AT_data_member_location[DW_OP_plus_uconst 0xc] - 1102 .dwattr $C$DW$88, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1103 .dwattr $C$DW$88, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1104 .dwattr $C$DW$88, DW_AT_decl_line(0x54) - 1105 .dwattr $C$DW$88, DW_AT_decl_column(0x02) - 1106$C$DW$89 .dwtag DW_TAG_member - 1107 .dwattr $C$DW$89, DW_AT_type(*$C$DW$T$57) - 1108 .dwattr $C$DW$89, DW_AT_name("$P$T4") - 1109 .dwattr $C$DW$89, DW_AT_TI_symbol_name("$P$T4") - 1110 .dwattr $C$DW$89, DW_AT_data_member_location[DW_OP_plus_uconst 0x10] - 1111 .dwattr $C$DW$89, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1112 .dwattr $C$DW$89, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1113 .dwattr $C$DW$89, DW_AT_decl_line(0x67) - 1114 .dwattr $C$DW$89, DW_AT_decl_column(0x02) - 1115$C$DW$90 .dwtag DW_TAG_member - 1116 .dwattr $C$DW$90, DW_AT_type(*$C$DW$T$59) - 1117 .dwattr $C$DW$90, DW_AT_name("$P$T5") - 1118 .dwattr $C$DW$90, DW_AT_TI_symbol_name("$P$T5") - 1119 .dwattr $C$DW$90, DW_AT_data_member_location[DW_OP_plus_uconst 0x14] - 1120 .dwattr $C$DW$90, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1121 .dwattr $C$DW$90, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1122 .dwattr $C$DW$90, DW_AT_decl_line(0x83) - 1123 .dwattr $C$DW$90, DW_AT_decl_column(0x02) - 1124$C$DW$91 .dwtag DW_TAG_member - 1125 .dwattr $C$DW$91, DW_AT_type(*$C$DW$T$61) - 1126 .dwattr $C$DW$91, DW_AT_name("$P$T6") - 1127 .dwattr $C$DW$91, DW_AT_TI_symbol_name("$P$T6") - 1128 .dwattr $C$DW$91, DW_AT_data_member_location[DW_OP_plus_uconst 0x18] - 1129 .dwattr $C$DW$91, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1130 .dwattr $C$DW$91, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1131 .dwattr $C$DW$91, DW_AT_decl_line(0x92) - 1132 .dwattr $C$DW$91, DW_AT_decl_column(0x02) - 1133$C$DW$92 .dwtag DW_TAG_member - 1134 .dwattr $C$DW$92, DW_AT_type(*$C$DW$T$63) - 1135 .dwattr $C$DW$92, DW_AT_name("$P$T7") - 1136 .dwattr $C$DW$92, DW_AT_TI_symbol_name("$P$T7") - 1137 .dwattr $C$DW$92, DW_AT_data_member_location[DW_OP_plus_uconst 0x1c] - 1138 .dwattr $C$DW$92, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1139 .dwattr $C$DW$92, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1140 .dwattr $C$DW$92, DW_AT_decl_line(0xa0) - 1141 .dwattr $C$DW$92, DW_AT_decl_column(0x02) - 1142$C$DW$93 .dwtag DW_TAG_member - 1143 .dwattr $C$DW$93, DW_AT_type(*$C$DW$T$65) - 1144 .dwattr $C$DW$93, DW_AT_name("$P$T8") - 1145 .dwattr $C$DW$93, DW_AT_TI_symbol_name("$P$T8") - 1146 .dwattr $C$DW$93, DW_AT_data_member_location[DW_OP_plus_uconst 0x20] - 1147 .dwattr $C$DW$93, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1148 .dwattr $C$DW$93, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1149 .dwattr $C$DW$93, DW_AT_decl_line(0xaf) - 1150 .dwattr $C$DW$93, DW_AT_decl_column(0x02) - 1151$C$DW$94 .dwtag DW_TAG_member - 1152 .dwattr $C$DW$94, DW_AT_type(*$C$DW$T$32) - 1153 .dwattr $C$DW$94, DW_AT_name("rsvd24") - 1154 .dwattr $C$DW$94, DW_AT_TI_symbol_name("rsvd24") - 1155 .dwattr $C$DW$94, DW_AT_data_member_location[DW_OP_plus_uconst 0x24] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 22 - - 1156 .dwattr $C$DW$94, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1157 .dwattr $C$DW$94, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1158 .dwattr $C$DW$94, DW_AT_decl_line(0xbc) - 1159 .dwattr $C$DW$94, DW_AT_decl_column(0x0b) - 1160$C$DW$95 .dwtag DW_TAG_member - 1161 .dwattr $C$DW$95, DW_AT_type(*$C$DW$T$67) - 1162 .dwattr $C$DW$95, DW_AT_name("$P$T9") - 1163 .dwattr $C$DW$95, DW_AT_TI_symbol_name("$P$T9") - 1164 .dwattr $C$DW$95, DW_AT_data_member_location[DW_OP_plus_uconst 0x28] - 1165 .dwattr $C$DW$95, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1166 .dwattr $C$DW$95, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1167 .dwattr $C$DW$95, DW_AT_decl_line(0xc0) - 1168 .dwattr $C$DW$95, DW_AT_decl_column(0x02) - 1169$C$DW$96 .dwtag DW_TAG_member - 1170 .dwattr $C$DW$96, DW_AT_type(*$C$DW$T$33) - 1171 .dwattr $C$DW$96, DW_AT_name("rsvd2c") - 1172 .dwattr $C$DW$96, DW_AT_TI_symbol_name("rsvd2c") - 1173 .dwattr $C$DW$96, DW_AT_data_member_location[DW_OP_plus_uconst 0x2c] - 1174 .dwattr $C$DW$96, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1175 .dwattr $C$DW$96, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1176 .dwattr $C$DW$96, DW_AT_decl_line(0xcb) - 1177 .dwattr $C$DW$96, DW_AT_decl_column(0x0b) - 1178$C$DW$97 .dwtag DW_TAG_member - 1179 .dwattr $C$DW$97, DW_AT_type(*$C$DW$T$69) - 1180 .dwattr $C$DW$97, DW_AT_name("$P$T10") - 1181 .dwattr $C$DW$97, DW_AT_TI_symbol_name("$P$T10") - 1182 .dwattr $C$DW$97, DW_AT_data_member_location[DW_OP_plus_uconst 0x30] - 1183 .dwattr $C$DW$97, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1184 .dwattr $C$DW$97, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1185 .dwattr $C$DW$97, DW_AT_decl_line(0xcf) - 1186 .dwattr $C$DW$97, DW_AT_decl_column(0x02) - 1187$C$DW$98 .dwtag DW_TAG_member - 1188 .dwattr $C$DW$98, DW_AT_type(*$C$DW$T$71) - 1189 .dwattr $C$DW$98, DW_AT_name("$P$T11") - 1190 .dwattr $C$DW$98, DW_AT_TI_symbol_name("$P$T11") - 1191 .dwattr $C$DW$98, DW_AT_data_member_location[DW_OP_plus_uconst 0x34] - 1192 .dwattr $C$DW$98, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1193 .dwattr $C$DW$98, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1194 .dwattr $C$DW$98, DW_AT_decl_line(0xda) - 1195 .dwattr $C$DW$98, DW_AT_decl_column(0x02) - 1196$C$DW$99 .dwtag DW_TAG_member - 1197 .dwattr $C$DW$99, DW_AT_type(*$C$DW$T$34) - 1198 .dwattr $C$DW$99, DW_AT_name("rsvd38") - 1199 .dwattr $C$DW$99, DW_AT_TI_symbol_name("rsvd38") - 1200 .dwattr $C$DW$99, DW_AT_data_member_location[DW_OP_plus_uconst 0x38] - 1201 .dwattr $C$DW$99, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1202 .dwattr $C$DW$99, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pru - 1203 .dwattr $C$DW$99, DW_AT_decl_line(0xe5) - 1204 .dwattr $C$DW$99, DW_AT_decl_column(0x0b) - 1205$C$DW$100 .dwtag DW_TAG_member - 1206 .dwattr $C$DW$100, DW_AT_type(*$C$DW$T$73) - 1207 .dwattr $C$DW$100, DW_AT_name("$P$T12") - 1208 .dwattr $C$DW$100, DW_AT_TI_symbol_name("$P$T12") - 1209 .dwattr $C$DW$100, DW_AT_data_member_location[DW_OP_plus_uconst 0x40] - 1210 .dwattr $C$DW$100, DW_AT_accessibility(DW_ACCESS_ai_64_lic) -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 23 - - 1211 .dwattr $C$DW$100, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1212 .dwattr $C$DW$100, DW_AT_decl_line(0xe8) - 1213 .dwattr $C$DW$100, DW_AT_decl_column(0x02) - 1214 .dwendtag $C$DW$T$35 - 1215 - 1216 .dwattr $C$DW$T$35, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1217 .dwattr $C$DW$T$35, DW_AT_decl_line(0x26) - 1218 .dwattr $C$DW$T$35, DW_AT_decl_column(0x10) - 1219$C$DW$T$97 .dwtag DW_TAG_typedef, DW_AT_name("pruCfg") - 1220 .dwattr $C$DW$T$97, DW_AT_type(*$C$DW$T$35) - 1221 .dwattr $C$DW$T$97, DW_AT_language(DW_LANG_C) - 1222 .dwattr $C$DW$T$97, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1223 .dwattr $C$DW$T$97, DW_AT_decl_line(0xf0) - 1224 .dwattr $C$DW$T$97, DW_AT_decl_column(0x03) - 1225$C$DW$T$98 .dwtag DW_TAG_volatile_type - 1226 .dwattr $C$DW$T$98, DW_AT_type(*$C$DW$T$97) - 1227 - 1228$C$DW$T$36 .dwtag DW_TAG_structure_type - 1229 .dwattr $C$DW$T$36, DW_AT_byte_size(0x04) - 1230$C$DW$101 .dwtag DW_TAG_member - 1231 .dwattr $C$DW$101, DW_AT_type(*$C$DW$T$11) - 1232 .dwattr $C$DW$101, DW_AT_name("SOFT_RST_N") - 1233 .dwattr $C$DW$101, DW_AT_TI_symbol_name("SOFT_RST_N") - 1234 .dwattr $C$DW$101, DW_AT_bit_offset(0x1f), DW_AT_bit_size(0x01) - 1235 .dwattr $C$DW$101, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1236 .dwattr $C$DW$101, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1237 .dwattr $C$DW$101, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1238 .dwattr $C$DW$101, DW_AT_decl_line(0x2d) - 1239 .dwattr $C$DW$101, DW_AT_decl_column(0x0d) - 1240$C$DW$102 .dwtag DW_TAG_member - 1241 .dwattr $C$DW$102, DW_AT_type(*$C$DW$T$11) - 1242 .dwattr $C$DW$102, DW_AT_name("EN") - 1243 .dwattr $C$DW$102, DW_AT_TI_symbol_name("EN") - 1244 .dwattr $C$DW$102, DW_AT_bit_offset(0x1e), DW_AT_bit_size(0x01) - 1245 .dwattr $C$DW$102, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1246 .dwattr $C$DW$102, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1247 .dwattr $C$DW$102, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1248 .dwattr $C$DW$102, DW_AT_decl_line(0x2e) - 1249 .dwattr $C$DW$102, DW_AT_decl_column(0x0d) - 1250$C$DW$103 .dwtag DW_TAG_member - 1251 .dwattr $C$DW$103, DW_AT_type(*$C$DW$T$11) - 1252 .dwattr $C$DW$103, DW_AT_name("SLEEPING") - 1253 .dwattr $C$DW$103, DW_AT_TI_symbol_name("SLEEPING") - 1254 .dwattr $C$DW$103, DW_AT_bit_offset(0x1d), DW_AT_bit_size(0x01) - 1255 .dwattr $C$DW$103, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1256 .dwattr $C$DW$103, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1257 .dwattr $C$DW$103, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1258 .dwattr $C$DW$103, DW_AT_decl_line(0x2f) - 1259 .dwattr $C$DW$103, DW_AT_decl_column(0x0d) - 1260$C$DW$104 .dwtag DW_TAG_member - 1261 .dwattr $C$DW$104, DW_AT_type(*$C$DW$T$11) - 1262 .dwattr $C$DW$104, DW_AT_name("CTR_EN") - 1263 .dwattr $C$DW$104, DW_AT_TI_symbol_name("CTR_EN") - 1264 .dwattr $C$DW$104, DW_AT_bit_offset(0x1c), DW_AT_bit_size(0x01) - 1265 .dwattr $C$DW$104, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 24 - - 1266 .dwattr $C$DW$104, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1267 .dwattr $C$DW$104, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1268 .dwattr $C$DW$104, DW_AT_decl_line(0x30) - 1269 .dwattr $C$DW$104, DW_AT_decl_column(0x0d) - 1270$C$DW$105 .dwtag DW_TAG_member - 1271 .dwattr $C$DW$105, DW_AT_type(*$C$DW$T$11) - 1272 .dwattr $C$DW$105, DW_AT_name("rsvd4") - 1273 .dwattr $C$DW$105, DW_AT_TI_symbol_name("rsvd4") - 1274 .dwattr $C$DW$105, DW_AT_bit_offset(0x18), DW_AT_bit_size(0x04) - 1275 .dwattr $C$DW$105, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1276 .dwattr $C$DW$105, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1277 .dwattr $C$DW$105, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1278 .dwattr $C$DW$105, DW_AT_decl_line(0x31) - 1279 .dwattr $C$DW$105, DW_AT_decl_column(0x0d) - 1280$C$DW$106 .dwtag DW_TAG_member - 1281 .dwattr $C$DW$106, DW_AT_type(*$C$DW$T$11) - 1282 .dwattr $C$DW$106, DW_AT_name("SINGLE_STEP") - 1283 .dwattr $C$DW$106, DW_AT_TI_symbol_name("SINGLE_STEP") - 1284 .dwattr $C$DW$106, DW_AT_bit_offset(0x17), DW_AT_bit_size(0x01) - 1285 .dwattr $C$DW$106, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1286 .dwattr $C$DW$106, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1287 .dwattr $C$DW$106, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1288 .dwattr $C$DW$106, DW_AT_decl_line(0x32) - 1289 .dwattr $C$DW$106, DW_AT_decl_column(0x0d) - 1290$C$DW$107 .dwtag DW_TAG_member - 1291 .dwattr $C$DW$107, DW_AT_type(*$C$DW$T$11) - 1292 .dwattr $C$DW$107, DW_AT_name("rsvd9") - 1293 .dwattr $C$DW$107, DW_AT_TI_symbol_name("rsvd9") - 1294 .dwattr $C$DW$107, DW_AT_bit_offset(0x11), DW_AT_bit_size(0x06) - 1295 .dwattr $C$DW$107, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1296 .dwattr $C$DW$107, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1297 .dwattr $C$DW$107, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1298 .dwattr $C$DW$107, DW_AT_decl_line(0x33) - 1299 .dwattr $C$DW$107, DW_AT_decl_column(0x0d) - 1300$C$DW$108 .dwtag DW_TAG_member - 1301 .dwattr $C$DW$108, DW_AT_type(*$C$DW$T$11) - 1302 .dwattr $C$DW$108, DW_AT_name("RUNSTATE") - 1303 .dwattr $C$DW$108, DW_AT_TI_symbol_name("RUNSTATE") - 1304 .dwattr $C$DW$108, DW_AT_bit_offset(0x10), DW_AT_bit_size(0x01) - 1305 .dwattr $C$DW$108, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1306 .dwattr $C$DW$108, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1307 .dwattr $C$DW$108, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1308 .dwattr $C$DW$108, DW_AT_decl_line(0x34) - 1309 .dwattr $C$DW$108, DW_AT_decl_column(0x0d) - 1310$C$DW$109 .dwtag DW_TAG_member - 1311 .dwattr $C$DW$109, DW_AT_type(*$C$DW$T$11) - 1312 .dwattr $C$DW$109, DW_AT_name("PCTR_RST_VAL") - 1313 .dwattr $C$DW$109, DW_AT_TI_symbol_name("PCTR_RST_VAL") - 1314 .dwattr $C$DW$109, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x10) - 1315 .dwattr $C$DW$109, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1316 .dwattr $C$DW$109, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1317 .dwattr $C$DW$109, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1318 .dwattr $C$DW$109, DW_AT_decl_line(0x35) - 1319 .dwattr $C$DW$109, DW_AT_decl_column(0x0d) - 1320 .dwendtag $C$DW$T$36 -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 25 - - 1321 - 1322 .dwattr $C$DW$T$36, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1323 .dwattr $C$DW$T$36, DW_AT_decl_line(0x2c) - 1324 .dwattr $C$DW$T$36, DW_AT_decl_column(0x13) - 1325$C$DW$T$74 .dwtag DW_TAG_volatile_type - 1326 .dwattr $C$DW$T$74, DW_AT_type(*$C$DW$T$36) - 1327 - 1328$C$DW$T$37 .dwtag DW_TAG_structure_type - 1329 .dwattr $C$DW$T$37, DW_AT_byte_size(0x04) - 1330$C$DW$110 .dwtag DW_TAG_member - 1331 .dwattr $C$DW$110, DW_AT_type(*$C$DW$T$11) - 1332 .dwattr $C$DW$110, DW_AT_name("PCTR") - 1333 .dwattr $C$DW$110, DW_AT_TI_symbol_name("PCTR") - 1334 .dwattr $C$DW$110, DW_AT_bit_offset(0x10), DW_AT_bit_size(0x10) - 1335 .dwattr $C$DW$110, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1336 .dwattr $C$DW$110, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1337 .dwattr $C$DW$110, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1338 .dwattr $C$DW$110, DW_AT_decl_line(0x3f) - 1339 .dwattr $C$DW$110, DW_AT_decl_column(0x0d) - 1340$C$DW$111 .dwtag DW_TAG_member - 1341 .dwattr $C$DW$111, DW_AT_type(*$C$DW$T$11) - 1342 .dwattr $C$DW$111, DW_AT_name("rsvd16") - 1343 .dwattr $C$DW$111, DW_AT_TI_symbol_name("rsvd16") - 1344 .dwattr $C$DW$111, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x10) - 1345 .dwattr $C$DW$111, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1346 .dwattr $C$DW$111, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1347 .dwattr $C$DW$111, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1348 .dwattr $C$DW$111, DW_AT_decl_line(0x40) - 1349 .dwattr $C$DW$111, DW_AT_decl_column(0x0d) - 1350 .dwendtag $C$DW$T$37 - 1351 - 1352 .dwattr $C$DW$T$37, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1353 .dwattr $C$DW$T$37, DW_AT_decl_line(0x3e) - 1354 .dwattr $C$DW$T$37, DW_AT_decl_column(0x13) - 1355$C$DW$T$76 .dwtag DW_TAG_volatile_type - 1356 .dwattr $C$DW$T$76, DW_AT_type(*$C$DW$T$37) - 1357 - 1358$C$DW$T$38 .dwtag DW_TAG_structure_type - 1359 .dwattr $C$DW$T$38, DW_AT_byte_size(0x04) - 1360$C$DW$112 .dwtag DW_TAG_member - 1361 .dwattr $C$DW$112, DW_AT_type(*$C$DW$T$11) - 1362 .dwattr $C$DW$112, DW_AT_name("BITWISE_ENS") - 1363 .dwattr $C$DW$112, DW_AT_TI_symbol_name("BITWISE_ENS") - 1364 .dwattr $C$DW$112, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x20) - 1365 .dwattr $C$DW$112, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1366 .dwattr $C$DW$112, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1367 .dwattr $C$DW$112, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1368 .dwattr $C$DW$112, DW_AT_decl_line(0x4a) - 1369 .dwattr $C$DW$112, DW_AT_decl_column(0x0d) - 1370 .dwendtag $C$DW$T$38 - 1371 - 1372 .dwattr $C$DW$T$38, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1373 .dwattr $C$DW$T$38, DW_AT_decl_line(0x49) - 1374 .dwattr $C$DW$T$38, DW_AT_decl_column(0x13) - 1375$C$DW$T$78 .dwtag DW_TAG_volatile_type -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 26 - - 1376 .dwattr $C$DW$T$78, DW_AT_type(*$C$DW$T$38) - 1377 - 1378$C$DW$T$39 .dwtag DW_TAG_structure_type - 1379 .dwattr $C$DW$T$39, DW_AT_byte_size(0x04) - 1380$C$DW$113 .dwtag DW_TAG_member - 1381 .dwattr $C$DW$113, DW_AT_type(*$C$DW$T$11) - 1382 .dwattr $C$DW$113, DW_AT_name("CYCLECOUNT") - 1383 .dwattr $C$DW$113, DW_AT_TI_symbol_name("CYCLECOUNT") - 1384 .dwattr $C$DW$113, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x20) - 1385 .dwattr $C$DW$113, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1386 .dwattr $C$DW$113, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1387 .dwattr $C$DW$113, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1388 .dwattr $C$DW$113, DW_AT_decl_line(0x54) - 1389 .dwattr $C$DW$113, DW_AT_decl_column(0x0d) - 1390 .dwendtag $C$DW$T$39 - 1391 - 1392 .dwattr $C$DW$T$39, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1393 .dwattr $C$DW$T$39, DW_AT_decl_line(0x53) - 1394 .dwattr $C$DW$T$39, DW_AT_decl_column(0x13) - 1395$C$DW$T$80 .dwtag DW_TAG_volatile_type - 1396 .dwattr $C$DW$T$80, DW_AT_type(*$C$DW$T$39) - 1397 - 1398$C$DW$T$40 .dwtag DW_TAG_structure_type - 1399 .dwattr $C$DW$T$40, DW_AT_byte_size(0x04) - 1400$C$DW$114 .dwtag DW_TAG_member - 1401 .dwattr $C$DW$114, DW_AT_type(*$C$DW$T$11) - 1402 .dwattr $C$DW$114, DW_AT_name("STALLCOUNT") - 1403 .dwattr $C$DW$114, DW_AT_TI_symbol_name("STALLCOUNT") - 1404 .dwattr $C$DW$114, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x20) - 1405 .dwattr $C$DW$114, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1406 .dwattr $C$DW$114, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1407 .dwattr $C$DW$114, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1408 .dwattr $C$DW$114, DW_AT_decl_line(0x5e) - 1409 .dwattr $C$DW$114, DW_AT_decl_column(0x0d) - 1410 .dwendtag $C$DW$T$40 - 1411 - 1412 .dwattr $C$DW$T$40, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1413 .dwattr $C$DW$T$40, DW_AT_decl_line(0x5d) - 1414 .dwattr $C$DW$T$40, DW_AT_decl_column(0x14) - 1415$C$DW$T$82 .dwtag DW_TAG_volatile_type - 1416 .dwattr $C$DW$T$82, DW_AT_type(*$C$DW$T$40) - 1417 - 1418$C$DW$T$41 .dwtag DW_TAG_structure_type - 1419 .dwattr $C$DW$T$41, DW_AT_byte_size(0x04) - 1420$C$DW$115 .dwtag DW_TAG_member - 1421 .dwattr $C$DW$115, DW_AT_type(*$C$DW$T$11) - 1422 .dwattr $C$DW$115, DW_AT_name("C24_BLK_IDX") - 1423 .dwattr $C$DW$115, DW_AT_TI_symbol_name("C24_BLK_IDX") - 1424 .dwattr $C$DW$115, DW_AT_bit_offset(0x18), DW_AT_bit_size(0x08) - 1425 .dwattr $C$DW$115, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1426 .dwattr $C$DW$115, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1427 .dwattr $C$DW$115, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1428 .dwattr $C$DW$115, DW_AT_decl_line(0x6b) - 1429 .dwattr $C$DW$115, DW_AT_decl_column(0x0d) - 1430$C$DW$116 .dwtag DW_TAG_member -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 27 - - 1431 .dwattr $C$DW$116, DW_AT_type(*$C$DW$T$11) - 1432 .dwattr $C$DW$116, DW_AT_name("rsvd8") - 1433 .dwattr $C$DW$116, DW_AT_TI_symbol_name("rsvd8") - 1434 .dwattr $C$DW$116, DW_AT_bit_offset(0x10), DW_AT_bit_size(0x08) - 1435 .dwattr $C$DW$116, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1436 .dwattr $C$DW$116, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1437 .dwattr $C$DW$116, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1438 .dwattr $C$DW$116, DW_AT_decl_line(0x6c) - 1439 .dwattr $C$DW$116, DW_AT_decl_column(0x0d) - 1440$C$DW$117 .dwtag DW_TAG_member - 1441 .dwattr $C$DW$117, DW_AT_type(*$C$DW$T$11) - 1442 .dwattr $C$DW$117, DW_AT_name("C25_BLK_IDX") - 1443 .dwattr $C$DW$117, DW_AT_TI_symbol_name("C25_BLK_IDX") - 1444 .dwattr $C$DW$117, DW_AT_bit_offset(0x08), DW_AT_bit_size(0x08) - 1445 .dwattr $C$DW$117, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1446 .dwattr $C$DW$117, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1447 .dwattr $C$DW$117, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1448 .dwattr $C$DW$117, DW_AT_decl_line(0x6d) - 1449 .dwattr $C$DW$117, DW_AT_decl_column(0x0d) - 1450$C$DW$118 .dwtag DW_TAG_member - 1451 .dwattr $C$DW$118, DW_AT_type(*$C$DW$T$11) - 1452 .dwattr $C$DW$118, DW_AT_name("rsvd24") - 1453 .dwattr $C$DW$118, DW_AT_TI_symbol_name("rsvd24") - 1454 .dwattr $C$DW$118, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x08) - 1455 .dwattr $C$DW$118, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1456 .dwattr $C$DW$118, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1457 .dwattr $C$DW$118, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1458 .dwattr $C$DW$118, DW_AT_decl_line(0x6e) - 1459 .dwattr $C$DW$118, DW_AT_decl_column(0x0d) - 1460 .dwendtag $C$DW$T$41 - 1461 - 1462 .dwattr $C$DW$T$41, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1463 .dwattr $C$DW$T$41, DW_AT_decl_line(0x6a) - 1464 .dwattr $C$DW$T$41, DW_AT_decl_column(0x13) - 1465$C$DW$T$84 .dwtag DW_TAG_volatile_type - 1466 .dwattr $C$DW$T$84, DW_AT_type(*$C$DW$T$41) - 1467 - 1468$C$DW$T$42 .dwtag DW_TAG_structure_type - 1469 .dwattr $C$DW$T$42, DW_AT_byte_size(0x04) - 1470$C$DW$119 .dwtag DW_TAG_member - 1471 .dwattr $C$DW$119, DW_AT_type(*$C$DW$T$11) - 1472 .dwattr $C$DW$119, DW_AT_name("C26_BLK_IDX") - 1473 .dwattr $C$DW$119, DW_AT_TI_symbol_name("C26_BLK_IDX") - 1474 .dwattr $C$DW$119, DW_AT_bit_offset(0x18), DW_AT_bit_size(0x08) - 1475 .dwattr $C$DW$119, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1476 .dwattr $C$DW$119, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1477 .dwattr $C$DW$119, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1478 .dwattr $C$DW$119, DW_AT_decl_line(0x78) - 1479 .dwattr $C$DW$119, DW_AT_decl_column(0x0d) - 1480$C$DW$120 .dwtag DW_TAG_member - 1481 .dwattr $C$DW$120, DW_AT_type(*$C$DW$T$11) - 1482 .dwattr $C$DW$120, DW_AT_name("rsvd8") - 1483 .dwattr $C$DW$120, DW_AT_TI_symbol_name("rsvd8") - 1484 .dwattr $C$DW$120, DW_AT_bit_offset(0x10), DW_AT_bit_size(0x08) - 1485 .dwattr $C$DW$120, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 28 - - 1486 .dwattr $C$DW$120, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1487 .dwattr $C$DW$120, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1488 .dwattr $C$DW$120, DW_AT_decl_line(0x79) - 1489 .dwattr $C$DW$120, DW_AT_decl_column(0x0d) - 1490$C$DW$121 .dwtag DW_TAG_member - 1491 .dwattr $C$DW$121, DW_AT_type(*$C$DW$T$11) - 1492 .dwattr $C$DW$121, DW_AT_name("C27_BLK_IDX") - 1493 .dwattr $C$DW$121, DW_AT_TI_symbol_name("C27_BLK_IDX") - 1494 .dwattr $C$DW$121, DW_AT_bit_offset(0x08), DW_AT_bit_size(0x08) - 1495 .dwattr $C$DW$121, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1496 .dwattr $C$DW$121, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1497 .dwattr $C$DW$121, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1498 .dwattr $C$DW$121, DW_AT_decl_line(0x7a) - 1499 .dwattr $C$DW$121, DW_AT_decl_column(0x0d) - 1500$C$DW$122 .dwtag DW_TAG_member - 1501 .dwattr $C$DW$122, DW_AT_type(*$C$DW$T$11) - 1502 .dwattr $C$DW$122, DW_AT_name("rsvd24") - 1503 .dwattr $C$DW$122, DW_AT_TI_symbol_name("rsvd24") - 1504 .dwattr $C$DW$122, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x08) - 1505 .dwattr $C$DW$122, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1506 .dwattr $C$DW$122, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1507 .dwattr $C$DW$122, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1508 .dwattr $C$DW$122, DW_AT_decl_line(0x7b) - 1509 .dwattr $C$DW$122, DW_AT_decl_column(0x0d) - 1510 .dwendtag $C$DW$T$42 - 1511 - 1512 .dwattr $C$DW$T$42, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1513 .dwattr $C$DW$T$42, DW_AT_decl_line(0x77) - 1514 .dwattr $C$DW$T$42, DW_AT_decl_column(0x13) - 1515$C$DW$T$86 .dwtag DW_TAG_volatile_type - 1516 .dwattr $C$DW$T$86, DW_AT_type(*$C$DW$T$42) - 1517 - 1518$C$DW$T$43 .dwtag DW_TAG_structure_type - 1519 .dwattr $C$DW$T$43, DW_AT_byte_size(0x04) - 1520$C$DW$123 .dwtag DW_TAG_member - 1521 .dwattr $C$DW$123, DW_AT_type(*$C$DW$T$11) - 1522 .dwattr $C$DW$123, DW_AT_name("C28_BLK_POINTER") - 1523 .dwattr $C$DW$123, DW_AT_TI_symbol_name("C28_BLK_POINTER") - 1524 .dwattr $C$DW$123, DW_AT_bit_offset(0x10), DW_AT_bit_size(0x10) - 1525 .dwattr $C$DW$123, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1526 .dwattr $C$DW$123, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1527 .dwattr $C$DW$123, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1528 .dwattr $C$DW$123, DW_AT_decl_line(0x85) - 1529 .dwattr $C$DW$123, DW_AT_decl_column(0x0d) - 1530$C$DW$124 .dwtag DW_TAG_member - 1531 .dwattr $C$DW$124, DW_AT_type(*$C$DW$T$11) - 1532 .dwattr $C$DW$124, DW_AT_name("C29_BLK_POINTER") - 1533 .dwattr $C$DW$124, DW_AT_TI_symbol_name("C29_BLK_POINTER") - 1534 .dwattr $C$DW$124, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x10) - 1535 .dwattr $C$DW$124, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1536 .dwattr $C$DW$124, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1537 .dwattr $C$DW$124, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1538 .dwattr $C$DW$124, DW_AT_decl_line(0x86) - 1539 .dwattr $C$DW$124, DW_AT_decl_column(0x0d) - 1540 .dwendtag $C$DW$T$43 -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 29 - - 1541 - 1542 .dwattr $C$DW$T$43, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1543 .dwattr $C$DW$T$43, DW_AT_decl_line(0x84) - 1544 .dwattr $C$DW$T$43, DW_AT_decl_column(0x13) - 1545$C$DW$T$88 .dwtag DW_TAG_volatile_type - 1546 .dwattr $C$DW$T$88, DW_AT_type(*$C$DW$T$43) - 1547 - 1548$C$DW$T$44 .dwtag DW_TAG_structure_type - 1549 .dwattr $C$DW$T$44, DW_AT_byte_size(0x04) - 1550$C$DW$125 .dwtag DW_TAG_member - 1551 .dwattr $C$DW$125, DW_AT_type(*$C$DW$T$11) - 1552 .dwattr $C$DW$125, DW_AT_name("C30_BLK_POINTER") - 1553 .dwattr $C$DW$125, DW_AT_TI_symbol_name("C30_BLK_POINTER") - 1554 .dwattr $C$DW$125, DW_AT_bit_offset(0x10), DW_AT_bit_size(0x10) - 1555 .dwattr $C$DW$125, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1556 .dwattr $C$DW$125, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1557 .dwattr $C$DW$125, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1558 .dwattr $C$DW$125, DW_AT_decl_line(0x90) - 1559 .dwattr $C$DW$125, DW_AT_decl_column(0x0d) - 1560$C$DW$126 .dwtag DW_TAG_member - 1561 .dwattr $C$DW$126, DW_AT_type(*$C$DW$T$11) - 1562 .dwattr $C$DW$126, DW_AT_name("C31_BLK_POINTER") - 1563 .dwattr $C$DW$126, DW_AT_TI_symbol_name("C31_BLK_POINTER") - 1564 .dwattr $C$DW$126, DW_AT_bit_offset(0x00), DW_AT_bit_size(0x10) - 1565 .dwattr $C$DW$126, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1566 .dwattr $C$DW$126, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1567 .dwattr $C$DW$126, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1568 .dwattr $C$DW$126, DW_AT_decl_line(0x91) - 1569 .dwattr $C$DW$126, DW_AT_decl_column(0x0d) - 1570 .dwendtag $C$DW$T$44 - 1571 - 1572 .dwattr $C$DW$T$44, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1573 .dwattr $C$DW$T$44, DW_AT_decl_line(0x8f) - 1574 .dwattr $C$DW$T$44, DW_AT_decl_column(0x13) - 1575$C$DW$T$90 .dwtag DW_TAG_volatile_type - 1576 .dwattr $C$DW$T$90, DW_AT_type(*$C$DW$T$44) - 1577 - 1578$C$DW$T$46 .dwtag DW_TAG_structure_type - 1579 .dwattr $C$DW$T$46, DW_AT_byte_size(0x30) - 1580$C$DW$127 .dwtag DW_TAG_member - 1581 .dwattr $C$DW$127, DW_AT_type(*$C$DW$T$75) - 1582 .dwattr $C$DW$127, DW_AT_name("$P$T13") - 1583 .dwattr $C$DW$127, DW_AT_TI_symbol_name("$P$T13") - 1584 .dwattr $C$DW$127, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1585 .dwattr $C$DW$127, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1586 .dwattr $C$DW$127, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1587 .dwattr $C$DW$127, DW_AT_decl_line(0x29) - 1588 .dwattr $C$DW$127, DW_AT_decl_column(0x02) - 1589$C$DW$128 .dwtag DW_TAG_member - 1590 .dwattr $C$DW$128, DW_AT_type(*$C$DW$T$77) - 1591 .dwattr $C$DW$128, DW_AT_name("$P$T14") - 1592 .dwattr $C$DW$128, DW_AT_TI_symbol_name("$P$T14") - 1593 .dwattr $C$DW$128, DW_AT_data_member_location[DW_OP_plus_uconst 0x4] - 1594 .dwattr $C$DW$128, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1595 .dwattr $C$DW$128, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 30 - - 1596 .dwattr $C$DW$128, DW_AT_decl_line(0x3b) - 1597 .dwattr $C$DW$128, DW_AT_decl_column(0x02) - 1598$C$DW$129 .dwtag DW_TAG_member - 1599 .dwattr $C$DW$129, DW_AT_type(*$C$DW$T$79) - 1600 .dwattr $C$DW$129, DW_AT_name("$P$T15") - 1601 .dwattr $C$DW$129, DW_AT_TI_symbol_name("$P$T15") - 1602 .dwattr $C$DW$129, DW_AT_data_member_location[DW_OP_plus_uconst 0x8] - 1603 .dwattr $C$DW$129, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1604 .dwattr $C$DW$129, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1605 .dwattr $C$DW$129, DW_AT_decl_line(0x46) - 1606 .dwattr $C$DW$129, DW_AT_decl_column(0x02) - 1607$C$DW$130 .dwtag DW_TAG_member - 1608 .dwattr $C$DW$130, DW_AT_type(*$C$DW$T$81) - 1609 .dwattr $C$DW$130, DW_AT_name("$P$T16") - 1610 .dwattr $C$DW$130, DW_AT_TI_symbol_name("$P$T16") - 1611 .dwattr $C$DW$130, DW_AT_data_member_location[DW_OP_plus_uconst 0xc] - 1612 .dwattr $C$DW$130, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1613 .dwattr $C$DW$130, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1614 .dwattr $C$DW$130, DW_AT_decl_line(0x50) - 1615 .dwattr $C$DW$130, DW_AT_decl_column(0x02) - 1616$C$DW$131 .dwtag DW_TAG_member - 1617 .dwattr $C$DW$131, DW_AT_type(*$C$DW$T$83) - 1618 .dwattr $C$DW$131, DW_AT_name("$P$T17") - 1619 .dwattr $C$DW$131, DW_AT_TI_symbol_name("$P$T17") - 1620 .dwattr $C$DW$131, DW_AT_data_member_location[DW_OP_plus_uconst 0x10] - 1621 .dwattr $C$DW$131, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1622 .dwattr $C$DW$131, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1623 .dwattr $C$DW$131, DW_AT_decl_line(0x5a) - 1624 .dwattr $C$DW$131, DW_AT_decl_column(0x02) - 1625$C$DW$132 .dwtag DW_TAG_member - 1626 .dwattr $C$DW$132, DW_AT_type(*$C$DW$T$45) - 1627 .dwattr $C$DW$132, DW_AT_name("rsvd14") - 1628 .dwattr $C$DW$132, DW_AT_TI_symbol_name("rsvd14") - 1629 .dwattr $C$DW$132, DW_AT_data_member_location[DW_OP_plus_uconst 0x14] - 1630 .dwattr $C$DW$132, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1631 .dwattr $C$DW$132, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1632 .dwattr $C$DW$132, DW_AT_decl_line(0x63) - 1633 .dwattr $C$DW$132, DW_AT_decl_column(0x0b) - 1634$C$DW$133 .dwtag DW_TAG_member - 1635 .dwattr $C$DW$133, DW_AT_type(*$C$DW$T$85) - 1636 .dwattr $C$DW$133, DW_AT_name("$P$T18") - 1637 .dwattr $C$DW$133, DW_AT_TI_symbol_name("$P$T18") - 1638 .dwattr $C$DW$133, DW_AT_data_member_location[DW_OP_plus_uconst 0x20] - 1639 .dwattr $C$DW$133, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1640 .dwattr $C$DW$133, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1641 .dwattr $C$DW$133, DW_AT_decl_line(0x67) - 1642 .dwattr $C$DW$133, DW_AT_decl_column(0x02) - 1643$C$DW$134 .dwtag DW_TAG_member - 1644 .dwattr $C$DW$134, DW_AT_type(*$C$DW$T$87) - 1645 .dwattr $C$DW$134, DW_AT_name("$P$T19") - 1646 .dwattr $C$DW$134, DW_AT_TI_symbol_name("$P$T19") - 1647 .dwattr $C$DW$134, DW_AT_data_member_location[DW_OP_plus_uconst 0x24] - 1648 .dwattr $C$DW$134, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1649 .dwattr $C$DW$134, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1650 .dwattr $C$DW$134, DW_AT_decl_line(0x74) -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 31 - - 1651 .dwattr $C$DW$134, DW_AT_decl_column(0x02) - 1652$C$DW$135 .dwtag DW_TAG_member - 1653 .dwattr $C$DW$135, DW_AT_type(*$C$DW$T$89) - 1654 .dwattr $C$DW$135, DW_AT_name("$P$T20") - 1655 .dwattr $C$DW$135, DW_AT_TI_symbol_name("$P$T20") - 1656 .dwattr $C$DW$135, DW_AT_data_member_location[DW_OP_plus_uconst 0x28] - 1657 .dwattr $C$DW$135, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1658 .dwattr $C$DW$135, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1659 .dwattr $C$DW$135, DW_AT_decl_line(0x81) - 1660 .dwattr $C$DW$135, DW_AT_decl_column(0x02) - 1661$C$DW$136 .dwtag DW_TAG_member - 1662 .dwattr $C$DW$136, DW_AT_type(*$C$DW$T$91) - 1663 .dwattr $C$DW$136, DW_AT_name("$P$T21") - 1664 .dwattr $C$DW$136, DW_AT_TI_symbol_name("$P$T21") - 1665 .dwattr $C$DW$136, DW_AT_data_member_location[DW_OP_plus_uconst 0x2c] - 1666 .dwattr $C$DW$136, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1667 .dwattr $C$DW$136, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1668 .dwattr $C$DW$136, DW_AT_decl_line(0x8c) - 1669 .dwattr $C$DW$136, DW_AT_decl_column(0x02) - 1670 .dwendtag $C$DW$T$46 - 1671 - 1672 .dwattr $C$DW$T$46, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1673 .dwattr $C$DW$T$46, DW_AT_decl_line(0x26) - 1674 .dwattr $C$DW$T$46, DW_AT_decl_column(0x10) - 1675$C$DW$T$102 .dwtag DW_TAG_typedef, DW_AT_name("pruCtrl") - 1676 .dwattr $C$DW$T$102, DW_AT_type(*$C$DW$T$46) - 1677 .dwattr $C$DW$T$102, DW_AT_language(DW_LANG_C) - 1678 .dwattr $C$DW$T$102, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/ - 1679 .dwattr $C$DW$T$102, DW_AT_decl_line(0x95) - 1680 .dwattr $C$DW$T$102, DW_AT_decl_column(0x03) - 1681 - 1682$C$DW$T$49 .dwtag DW_TAG_union_type - 1683 .dwattr $C$DW$T$49, DW_AT_byte_size(0x04) - 1684$C$DW$137 .dwtag DW_TAG_member - 1685 .dwattr $C$DW$137, DW_AT_type(*$C$DW$T$47) - 1686 .dwattr $C$DW$137, DW_AT_name("REVID") - 1687 .dwattr $C$DW$137, DW_AT_TI_symbol_name("REVID") - 1688 .dwattr $C$DW$137, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1689 .dwattr $C$DW$137, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1690 .dwattr $C$DW$137, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1691 .dwattr $C$DW$137, DW_AT_decl_line(0x2a) - 1692 .dwattr $C$DW$137, DW_AT_decl_column(0x15) - 1693$C$DW$138 .dwtag DW_TAG_member - 1694 .dwattr $C$DW$138, DW_AT_type(*$C$DW$T$48) - 1695 .dwattr $C$DW$138, DW_AT_name("REVID_bit") - 1696 .dwattr $C$DW$138, DW_AT_TI_symbol_name("REVID_bit") - 1697 .dwattr $C$DW$138, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1698 .dwattr $C$DW$138, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1699 .dwattr $C$DW$138, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1700 .dwattr $C$DW$138, DW_AT_decl_line(0x2e) - 1701 .dwattr $C$DW$138, DW_AT_decl_column(0x05) - 1702 .dwendtag $C$DW$T$49 - 1703 - 1704 .dwattr $C$DW$T$49, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1705 .dwattr $C$DW$T$49, DW_AT_decl_line(0x29) -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 32 - - 1706 .dwattr $C$DW$T$49, DW_AT_decl_column(0x08) - 1707 - 1708$C$DW$T$51 .dwtag DW_TAG_union_type - 1709 .dwattr $C$DW$T$51, DW_AT_byte_size(0x04) - 1710$C$DW$139 .dwtag DW_TAG_member - 1711 .dwattr $C$DW$139, DW_AT_type(*$C$DW$T$47) - 1712 .dwattr $C$DW$139, DW_AT_name("SYSCFG") - 1713 .dwattr $C$DW$139, DW_AT_TI_symbol_name("SYSCFG") - 1714 .dwattr $C$DW$139, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1715 .dwattr $C$DW$139, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1716 .dwattr $C$DW$139, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1717 .dwattr $C$DW$139, DW_AT_decl_line(0x34) - 1718 .dwattr $C$DW$139, DW_AT_decl_column(0x15) - 1719$C$DW$140 .dwtag DW_TAG_member - 1720 .dwattr $C$DW$140, DW_AT_type(*$C$DW$T$50) - 1721 .dwattr $C$DW$140, DW_AT_name("SYSCFG_bit") - 1722 .dwattr $C$DW$140, DW_AT_TI_symbol_name("SYSCFG_bit") - 1723 .dwattr $C$DW$140, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1724 .dwattr $C$DW$140, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1725 .dwattr $C$DW$140, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1726 .dwattr $C$DW$140, DW_AT_decl_line(0x3c) - 1727 .dwattr $C$DW$140, DW_AT_decl_column(0x05) - 1728 .dwendtag $C$DW$T$51 - 1729 - 1730 .dwattr $C$DW$T$51, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1731 .dwattr $C$DW$T$51, DW_AT_decl_line(0x33) - 1732 .dwattr $C$DW$T$51, DW_AT_decl_column(0x08) - 1733 - 1734$C$DW$T$53 .dwtag DW_TAG_union_type - 1735 .dwattr $C$DW$T$53, DW_AT_byte_size(0x04) - 1736$C$DW$141 .dwtag DW_TAG_member - 1737 .dwattr $C$DW$141, DW_AT_type(*$C$DW$T$47) - 1738 .dwattr $C$DW$141, DW_AT_name("GPCFG0") - 1739 .dwattr $C$DW$141, DW_AT_TI_symbol_name("GPCFG0") - 1740 .dwattr $C$DW$141, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1741 .dwattr $C$DW$141, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1742 .dwattr $C$DW$141, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1743 .dwattr $C$DW$141, DW_AT_decl_line(0x42) - 1744 .dwattr $C$DW$141, DW_AT_decl_column(0x15) - 1745$C$DW$142 .dwtag DW_TAG_member - 1746 .dwattr $C$DW$142, DW_AT_type(*$C$DW$T$52) - 1747 .dwattr $C$DW$142, DW_AT_name("GPCFG0_bit") - 1748 .dwattr $C$DW$142, DW_AT_TI_symbol_name("GPCFG0_bit") - 1749 .dwattr $C$DW$142, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1750 .dwattr $C$DW$142, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1751 .dwattr $C$DW$142, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1752 .dwattr $C$DW$142, DW_AT_decl_line(0x4f) - 1753 .dwattr $C$DW$142, DW_AT_decl_column(0x05) - 1754 .dwendtag $C$DW$T$53 - 1755 - 1756 .dwattr $C$DW$T$53, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1757 .dwattr $C$DW$T$53, DW_AT_decl_line(0x41) - 1758 .dwattr $C$DW$T$53, DW_AT_decl_column(0x08) - 1759 - 1760$C$DW$T$55 .dwtag DW_TAG_union_type -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 33 - - 1761 .dwattr $C$DW$T$55, DW_AT_byte_size(0x04) - 1762$C$DW$143 .dwtag DW_TAG_member - 1763 .dwattr $C$DW$143, DW_AT_type(*$C$DW$T$47) - 1764 .dwattr $C$DW$143, DW_AT_name("GPCFG1") - 1765 .dwattr $C$DW$143, DW_AT_TI_symbol_name("GPCFG1") - 1766 .dwattr $C$DW$143, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1767 .dwattr $C$DW$143, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1768 .dwattr $C$DW$143, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1769 .dwattr $C$DW$143, DW_AT_decl_line(0x55) - 1770 .dwattr $C$DW$143, DW_AT_decl_column(0x15) - 1771$C$DW$144 .dwtag DW_TAG_member - 1772 .dwattr $C$DW$144, DW_AT_type(*$C$DW$T$54) - 1773 .dwattr $C$DW$144, DW_AT_name("GPCFG1_bit") - 1774 .dwattr $C$DW$144, DW_AT_TI_symbol_name("GPCFG1_bit") - 1775 .dwattr $C$DW$144, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1776 .dwattr $C$DW$144, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1777 .dwattr $C$DW$144, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1778 .dwattr $C$DW$144, DW_AT_decl_line(0x62) - 1779 .dwattr $C$DW$144, DW_AT_decl_column(0x05) - 1780 .dwendtag $C$DW$T$55 - 1781 - 1782 .dwattr $C$DW$T$55, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1783 .dwattr $C$DW$T$55, DW_AT_decl_line(0x54) - 1784 .dwattr $C$DW$T$55, DW_AT_decl_column(0x08) - 1785 - 1786$C$DW$T$57 .dwtag DW_TAG_union_type - 1787 .dwattr $C$DW$T$57, DW_AT_byte_size(0x04) - 1788$C$DW$145 .dwtag DW_TAG_member - 1789 .dwattr $C$DW$145, DW_AT_type(*$C$DW$T$47) - 1790 .dwattr $C$DW$145, DW_AT_name("CGR") - 1791 .dwattr $C$DW$145, DW_AT_TI_symbol_name("CGR") - 1792 .dwattr $C$DW$145, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1793 .dwattr $C$DW$145, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1794 .dwattr $C$DW$145, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1795 .dwattr $C$DW$145, DW_AT_decl_line(0x68) - 1796 .dwattr $C$DW$145, DW_AT_decl_column(0x15) - 1797$C$DW$146 .dwtag DW_TAG_member - 1798 .dwattr $C$DW$146, DW_AT_type(*$C$DW$T$56) - 1799 .dwattr $C$DW$146, DW_AT_name("CGR_bit") - 1800 .dwattr $C$DW$146, DW_AT_TI_symbol_name("CGR_bit") - 1801 .dwattr $C$DW$146, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1802 .dwattr $C$DW$146, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1803 .dwattr $C$DW$146, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1804 .dwattr $C$DW$146, DW_AT_decl_line(0x7e) - 1805 .dwattr $C$DW$146, DW_AT_decl_column(0x05) - 1806 .dwendtag $C$DW$T$57 - 1807 - 1808 .dwattr $C$DW$T$57, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1809 .dwattr $C$DW$T$57, DW_AT_decl_line(0x67) - 1810 .dwattr $C$DW$T$57, DW_AT_decl_column(0x08) - 1811 - 1812$C$DW$T$59 .dwtag DW_TAG_union_type - 1813 .dwattr $C$DW$T$59, DW_AT_byte_size(0x04) - 1814$C$DW$147 .dwtag DW_TAG_member - 1815 .dwattr $C$DW$147, DW_AT_type(*$C$DW$T$47) -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 34 - - 1816 .dwattr $C$DW$147, DW_AT_name("ISRP") - 1817 .dwattr $C$DW$147, DW_AT_TI_symbol_name("ISRP") - 1818 .dwattr $C$DW$147, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1819 .dwattr $C$DW$147, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1820 .dwattr $C$DW$147, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1821 .dwattr $C$DW$147, DW_AT_decl_line(0x84) - 1822 .dwattr $C$DW$147, DW_AT_decl_column(0x15) - 1823$C$DW$148 .dwtag DW_TAG_member - 1824 .dwattr $C$DW$148, DW_AT_type(*$C$DW$T$58) - 1825 .dwattr $C$DW$148, DW_AT_name("ISRP_bit") - 1826 .dwattr $C$DW$148, DW_AT_TI_symbol_name("ISRP_bit") - 1827 .dwattr $C$DW$148, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1828 .dwattr $C$DW$148, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1829 .dwattr $C$DW$148, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1830 .dwattr $C$DW$148, DW_AT_decl_line(0x8d) - 1831 .dwattr $C$DW$148, DW_AT_decl_column(0x05) - 1832 .dwendtag $C$DW$T$59 - 1833 - 1834 .dwattr $C$DW$T$59, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1835 .dwattr $C$DW$T$59, DW_AT_decl_line(0x83) - 1836 .dwattr $C$DW$T$59, DW_AT_decl_column(0x08) - 1837 - 1838$C$DW$T$61 .dwtag DW_TAG_union_type - 1839 .dwattr $C$DW$T$61, DW_AT_byte_size(0x04) - 1840$C$DW$149 .dwtag DW_TAG_member - 1841 .dwattr $C$DW$149, DW_AT_type(*$C$DW$T$47) - 1842 .dwattr $C$DW$149, DW_AT_name("ISP") - 1843 .dwattr $C$DW$149, DW_AT_TI_symbol_name("ISP") - 1844 .dwattr $C$DW$149, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1845 .dwattr $C$DW$149, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1846 .dwattr $C$DW$149, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1847 .dwattr $C$DW$149, DW_AT_decl_line(0x93) - 1848 .dwattr $C$DW$149, DW_AT_decl_column(0x15) - 1849$C$DW$150 .dwtag DW_TAG_member - 1850 .dwattr $C$DW$150, DW_AT_type(*$C$DW$T$60) - 1851 .dwattr $C$DW$150, DW_AT_name("ISP_bit") - 1852 .dwattr $C$DW$150, DW_AT_TI_symbol_name("ISP_bit") - 1853 .dwattr $C$DW$150, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1854 .dwattr $C$DW$150, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1855 .dwattr $C$DW$150, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1856 .dwattr $C$DW$150, DW_AT_decl_line(0x9c) - 1857 .dwattr $C$DW$150, DW_AT_decl_column(0x05) - 1858 .dwendtag $C$DW$T$61 - 1859 - 1860 .dwattr $C$DW$T$61, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1861 .dwattr $C$DW$T$61, DW_AT_decl_line(0x92) - 1862 .dwattr $C$DW$T$61, DW_AT_decl_column(0x08) - 1863 - 1864$C$DW$T$63 .dwtag DW_TAG_union_type - 1865 .dwattr $C$DW$T$63, DW_AT_byte_size(0x04) - 1866$C$DW$151 .dwtag DW_TAG_member - 1867 .dwattr $C$DW$151, DW_AT_type(*$C$DW$T$47) - 1868 .dwattr $C$DW$151, DW_AT_name("IESP") - 1869 .dwattr $C$DW$151, DW_AT_TI_symbol_name("IESP") - 1870 .dwattr $C$DW$151, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 35 - - 1871 .dwattr $C$DW$151, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1872 .dwattr $C$DW$151, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1873 .dwattr $C$DW$151, DW_AT_decl_line(0xa1) - 1874 .dwattr $C$DW$151, DW_AT_decl_column(0x15) - 1875$C$DW$152 .dwtag DW_TAG_member - 1876 .dwattr $C$DW$152, DW_AT_type(*$C$DW$T$62) - 1877 .dwattr $C$DW$152, DW_AT_name("IESP_bit") - 1878 .dwattr $C$DW$152, DW_AT_TI_symbol_name("IESP_bit") - 1879 .dwattr $C$DW$152, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1880 .dwattr $C$DW$152, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1881 .dwattr $C$DW$152, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1882 .dwattr $C$DW$152, DW_AT_decl_line(0xaa) - 1883 .dwattr $C$DW$152, DW_AT_decl_column(0x05) - 1884 .dwendtag $C$DW$T$63 - 1885 - 1886 .dwattr $C$DW$T$63, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1887 .dwattr $C$DW$T$63, DW_AT_decl_line(0xa0) - 1888 .dwattr $C$DW$T$63, DW_AT_decl_column(0x08) - 1889 - 1890$C$DW$T$65 .dwtag DW_TAG_union_type - 1891 .dwattr $C$DW$T$65, DW_AT_byte_size(0x04) - 1892$C$DW$153 .dwtag DW_TAG_member - 1893 .dwattr $C$DW$153, DW_AT_type(*$C$DW$T$47) - 1894 .dwattr $C$DW$153, DW_AT_name("IECP") - 1895 .dwattr $C$DW$153, DW_AT_TI_symbol_name("IECP") - 1896 .dwattr $C$DW$153, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1897 .dwattr $C$DW$153, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1898 .dwattr $C$DW$153, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1899 .dwattr $C$DW$153, DW_AT_decl_line(0xb0) - 1900 .dwattr $C$DW$153, DW_AT_decl_column(0x15) - 1901$C$DW$154 .dwtag DW_TAG_member - 1902 .dwattr $C$DW$154, DW_AT_type(*$C$DW$T$64) - 1903 .dwattr $C$DW$154, DW_AT_name("IECP_bit") - 1904 .dwattr $C$DW$154, DW_AT_TI_symbol_name("IECP_bit") - 1905 .dwattr $C$DW$154, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1906 .dwattr $C$DW$154, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1907 .dwattr $C$DW$154, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1908 .dwattr $C$DW$154, DW_AT_decl_line(0xb8) - 1909 .dwattr $C$DW$154, DW_AT_decl_column(0x05) - 1910 .dwendtag $C$DW$T$65 - 1911 - 1912 .dwattr $C$DW$T$65, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1913 .dwattr $C$DW$T$65, DW_AT_decl_line(0xaf) - 1914 .dwattr $C$DW$T$65, DW_AT_decl_column(0x08) - 1915 - 1916$C$DW$T$67 .dwtag DW_TAG_union_type - 1917 .dwattr $C$DW$T$67, DW_AT_byte_size(0x04) - 1918$C$DW$155 .dwtag DW_TAG_member - 1919 .dwattr $C$DW$155, DW_AT_type(*$C$DW$T$47) - 1920 .dwattr $C$DW$155, DW_AT_name("PMAO") - 1921 .dwattr $C$DW$155, DW_AT_TI_symbol_name("PMAO") - 1922 .dwattr $C$DW$155, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1923 .dwattr $C$DW$155, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1924 .dwattr $C$DW$155, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1925 .dwattr $C$DW$155, DW_AT_decl_line(0xc1) -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 36 - - 1926 .dwattr $C$DW$155, DW_AT_decl_column(0x15) - 1927$C$DW$156 .dwtag DW_TAG_member - 1928 .dwattr $C$DW$156, DW_AT_type(*$C$DW$T$66) - 1929 .dwattr $C$DW$156, DW_AT_name("PMAO_bit") - 1930 .dwattr $C$DW$156, DW_AT_TI_symbol_name("PMAO_bit") - 1931 .dwattr $C$DW$156, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1932 .dwattr $C$DW$156, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1933 .dwattr $C$DW$156, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1934 .dwattr $C$DW$156, DW_AT_decl_line(0xc7) - 1935 .dwattr $C$DW$156, DW_AT_decl_column(0x05) - 1936 .dwendtag $C$DW$T$67 - 1937 - 1938 .dwattr $C$DW$T$67, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1939 .dwattr $C$DW$T$67, DW_AT_decl_line(0xc0) - 1940 .dwattr $C$DW$T$67, DW_AT_decl_column(0x08) - 1941 - 1942$C$DW$T$69 .dwtag DW_TAG_union_type - 1943 .dwattr $C$DW$T$69, DW_AT_byte_size(0x04) - 1944$C$DW$157 .dwtag DW_TAG_member - 1945 .dwattr $C$DW$157, DW_AT_type(*$C$DW$T$47) - 1946 .dwattr $C$DW$157, DW_AT_name("IEPCLK") - 1947 .dwattr $C$DW$157, DW_AT_TI_symbol_name("IEPCLK") - 1948 .dwattr $C$DW$157, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1949 .dwattr $C$DW$157, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1950 .dwattr $C$DW$157, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1951 .dwattr $C$DW$157, DW_AT_decl_line(0xd0) - 1952 .dwattr $C$DW$157, DW_AT_decl_column(0x15) - 1953$C$DW$158 .dwtag DW_TAG_member - 1954 .dwattr $C$DW$158, DW_AT_type(*$C$DW$T$68) - 1955 .dwattr $C$DW$158, DW_AT_name("IEPCLK_bit") - 1956 .dwattr $C$DW$158, DW_AT_TI_symbol_name("IEPCLK_bit") - 1957 .dwattr $C$DW$158, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1958 .dwattr $C$DW$158, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1959 .dwattr $C$DW$158, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1960 .dwattr $C$DW$158, DW_AT_decl_line(0xd5) - 1961 .dwattr $C$DW$158, DW_AT_decl_column(0x05) - 1962 .dwendtag $C$DW$T$69 - 1963 - 1964 .dwattr $C$DW$T$69, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1965 .dwattr $C$DW$T$69, DW_AT_decl_line(0xcf) - 1966 .dwattr $C$DW$T$69, DW_AT_decl_column(0x08) - 1967 - 1968$C$DW$T$71 .dwtag DW_TAG_union_type - 1969 .dwattr $C$DW$T$71, DW_AT_byte_size(0x04) - 1970$C$DW$159 .dwtag DW_TAG_member - 1971 .dwattr $C$DW$159, DW_AT_type(*$C$DW$T$47) - 1972 .dwattr $C$DW$159, DW_AT_name("SPP") - 1973 .dwattr $C$DW$159, DW_AT_TI_symbol_name("SPP") - 1974 .dwattr $C$DW$159, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1975 .dwattr $C$DW$159, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1976 .dwattr $C$DW$159, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1977 .dwattr $C$DW$159, DW_AT_decl_line(0xdb) - 1978 .dwattr $C$DW$159, DW_AT_decl_column(0x15) - 1979$C$DW$160 .dwtag DW_TAG_member - 1980 .dwattr $C$DW$160, DW_AT_type(*$C$DW$T$70) -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 37 - - 1981 .dwattr $C$DW$160, DW_AT_name("SPP_bit") - 1982 .dwattr $C$DW$160, DW_AT_TI_symbol_name("SPP_bit") - 1983 .dwattr $C$DW$160, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 1984 .dwattr $C$DW$160, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 1985 .dwattr $C$DW$160, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 1986 .dwattr $C$DW$160, DW_AT_decl_line(0xe1) - 1987 .dwattr $C$DW$160, DW_AT_decl_column(0x05) - 1988 .dwendtag $C$DW$T$71 - 1989 - 1990 .dwattr $C$DW$T$71, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 1991 .dwattr $C$DW$T$71, DW_AT_decl_line(0xda) - 1992 .dwattr $C$DW$T$71, DW_AT_decl_column(0x08) - 1993 - 1994$C$DW$T$73 .dwtag DW_TAG_union_type - 1995 .dwattr $C$DW$T$73, DW_AT_byte_size(0x04) - 1996$C$DW$161 .dwtag DW_TAG_member - 1997 .dwattr $C$DW$161, DW_AT_type(*$C$DW$T$47) - 1998 .dwattr $C$DW$161, DW_AT_name("PIN_MX") - 1999 .dwattr $C$DW$161, DW_AT_TI_symbol_name("PIN_MX") - 2000 .dwattr $C$DW$161, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2001 .dwattr $C$DW$161, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2002 .dwattr $C$DW$161, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2003 .dwattr $C$DW$161, DW_AT_decl_line(0xe9) - 2004 .dwattr $C$DW$161, DW_AT_decl_column(0x15) - 2005$C$DW$162 .dwtag DW_TAG_member - 2006 .dwattr $C$DW$162, DW_AT_type(*$C$DW$T$72) - 2007 .dwattr $C$DW$162, DW_AT_name("PIN_MX_bit") - 2008 .dwattr $C$DW$162, DW_AT_TI_symbol_name("PIN_MX_bit") - 2009 .dwattr $C$DW$162, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2010 .dwattr $C$DW$162, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2011 .dwattr $C$DW$162, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2012 .dwattr $C$DW$162, DW_AT_decl_line(0xee) - 2013 .dwattr $C$DW$162, DW_AT_decl_column(0x05) - 2014 .dwendtag $C$DW$T$73 - 2015 - 2016 .dwattr $C$DW$T$73, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 2017 .dwattr $C$DW$T$73, DW_AT_decl_line(0xe8) - 2018 .dwattr $C$DW$T$73, DW_AT_decl_column(0x08) - 2019 - 2020$C$DW$T$75 .dwtag DW_TAG_union_type - 2021 .dwattr $C$DW$T$75, DW_AT_byte_size(0x04) - 2022$C$DW$163 .dwtag DW_TAG_member - 2023 .dwattr $C$DW$163, DW_AT_type(*$C$DW$T$47) - 2024 .dwattr $C$DW$163, DW_AT_name("CTRL") - 2025 .dwattr $C$DW$163, DW_AT_TI_symbol_name("CTRL") - 2026 .dwattr $C$DW$163, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2027 .dwattr $C$DW$163, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2028 .dwattr $C$DW$163, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2029 .dwattr $C$DW$163, DW_AT_decl_line(0x2a) - 2030 .dwattr $C$DW$163, DW_AT_decl_column(0x15) - 2031$C$DW$164 .dwtag DW_TAG_member - 2032 .dwattr $C$DW$164, DW_AT_type(*$C$DW$T$74) - 2033 .dwattr $C$DW$164, DW_AT_name("CTRL_bit") - 2034 .dwattr $C$DW$164, DW_AT_TI_symbol_name("CTRL_bit") - 2035 .dwattr $C$DW$164, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 38 - - 2036 .dwattr $C$DW$164, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2037 .dwattr $C$DW$164, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2038 .dwattr $C$DW$164, DW_AT_decl_line(0x36) - 2039 .dwattr $C$DW$164, DW_AT_decl_column(0x05) - 2040 .dwendtag $C$DW$T$75 - 2041 - 2042 .dwattr $C$DW$T$75, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 2043 .dwattr $C$DW$T$75, DW_AT_decl_line(0x29) - 2044 .dwattr $C$DW$T$75, DW_AT_decl_column(0x08) - 2045 - 2046$C$DW$T$77 .dwtag DW_TAG_union_type - 2047 .dwattr $C$DW$T$77, DW_AT_byte_size(0x04) - 2048$C$DW$165 .dwtag DW_TAG_member - 2049 .dwattr $C$DW$165, DW_AT_type(*$C$DW$T$47) - 2050 .dwattr $C$DW$165, DW_AT_name("STS") - 2051 .dwattr $C$DW$165, DW_AT_TI_symbol_name("STS") - 2052 .dwattr $C$DW$165, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2053 .dwattr $C$DW$165, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2054 .dwattr $C$DW$165, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2055 .dwattr $C$DW$165, DW_AT_decl_line(0x3c) - 2056 .dwattr $C$DW$165, DW_AT_decl_column(0x15) - 2057$C$DW$166 .dwtag DW_TAG_member - 2058 .dwattr $C$DW$166, DW_AT_type(*$C$DW$T$76) - 2059 .dwattr $C$DW$166, DW_AT_name("STS_bit") - 2060 .dwattr $C$DW$166, DW_AT_TI_symbol_name("STS_bit") - 2061 .dwattr $C$DW$166, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2062 .dwattr $C$DW$166, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2063 .dwattr $C$DW$166, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2064 .dwattr $C$DW$166, DW_AT_decl_line(0x41) - 2065 .dwattr $C$DW$166, DW_AT_decl_column(0x05) - 2066 .dwendtag $C$DW$T$77 - 2067 - 2068 .dwattr $C$DW$T$77, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 2069 .dwattr $C$DW$T$77, DW_AT_decl_line(0x3b) - 2070 .dwattr $C$DW$T$77, DW_AT_decl_column(0x08) - 2071 - 2072$C$DW$T$79 .dwtag DW_TAG_union_type - 2073 .dwattr $C$DW$T$79, DW_AT_byte_size(0x04) - 2074$C$DW$167 .dwtag DW_TAG_member - 2075 .dwattr $C$DW$167, DW_AT_type(*$C$DW$T$47) - 2076 .dwattr $C$DW$167, DW_AT_name("WAKEUP_EN") - 2077 .dwattr $C$DW$167, DW_AT_TI_symbol_name("WAKEUP_EN") - 2078 .dwattr $C$DW$167, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2079 .dwattr $C$DW$167, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2080 .dwattr $C$DW$167, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2081 .dwattr $C$DW$167, DW_AT_decl_line(0x47) - 2082 .dwattr $C$DW$167, DW_AT_decl_column(0x15) - 2083$C$DW$168 .dwtag DW_TAG_member - 2084 .dwattr $C$DW$168, DW_AT_type(*$C$DW$T$78) - 2085 .dwattr $C$DW$168, DW_AT_name("WAKEUP_EN_bit") - 2086 .dwattr $C$DW$168, DW_AT_TI_symbol_name("WAKEUP_EN_bit") - 2087 .dwattr $C$DW$168, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2088 .dwattr $C$DW$168, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2089 .dwattr $C$DW$168, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2090 .dwattr $C$DW$168, DW_AT_decl_line(0x4b) -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 39 - - 2091 .dwattr $C$DW$168, DW_AT_decl_column(0x05) - 2092 .dwendtag $C$DW$T$79 - 2093 - 2094 .dwattr $C$DW$T$79, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 2095 .dwattr $C$DW$T$79, DW_AT_decl_line(0x46) - 2096 .dwattr $C$DW$T$79, DW_AT_decl_column(0x08) - 2097 - 2098$C$DW$T$81 .dwtag DW_TAG_union_type - 2099 .dwattr $C$DW$T$81, DW_AT_byte_size(0x04) - 2100$C$DW$169 .dwtag DW_TAG_member - 2101 .dwattr $C$DW$169, DW_AT_type(*$C$DW$T$47) - 2102 .dwattr $C$DW$169, DW_AT_name("CYCLE") - 2103 .dwattr $C$DW$169, DW_AT_TI_symbol_name("CYCLE") - 2104 .dwattr $C$DW$169, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2105 .dwattr $C$DW$169, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2106 .dwattr $C$DW$169, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2107 .dwattr $C$DW$169, DW_AT_decl_line(0x51) - 2108 .dwattr $C$DW$169, DW_AT_decl_column(0x15) - 2109$C$DW$170 .dwtag DW_TAG_member - 2110 .dwattr $C$DW$170, DW_AT_type(*$C$DW$T$80) - 2111 .dwattr $C$DW$170, DW_AT_name("CYCLE_bit") - 2112 .dwattr $C$DW$170, DW_AT_TI_symbol_name("CYCLE_bit") - 2113 .dwattr $C$DW$170, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2114 .dwattr $C$DW$170, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2115 .dwattr $C$DW$170, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2116 .dwattr $C$DW$170, DW_AT_decl_line(0x55) - 2117 .dwattr $C$DW$170, DW_AT_decl_column(0x05) - 2118 .dwendtag $C$DW$T$81 - 2119 - 2120 .dwattr $C$DW$T$81, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 2121 .dwattr $C$DW$T$81, DW_AT_decl_line(0x50) - 2122 .dwattr $C$DW$T$81, DW_AT_decl_column(0x08) - 2123 - 2124$C$DW$T$83 .dwtag DW_TAG_union_type - 2125 .dwattr $C$DW$T$83, DW_AT_byte_size(0x04) - 2126$C$DW$171 .dwtag DW_TAG_member - 2127 .dwattr $C$DW$171, DW_AT_type(*$C$DW$T$47) - 2128 .dwattr $C$DW$171, DW_AT_name("STALL") - 2129 .dwattr $C$DW$171, DW_AT_TI_symbol_name("STALL") - 2130 .dwattr $C$DW$171, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2131 .dwattr $C$DW$171, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2132 .dwattr $C$DW$171, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2133 .dwattr $C$DW$171, DW_AT_decl_line(0x5b) - 2134 .dwattr $C$DW$171, DW_AT_decl_column(0x15) - 2135$C$DW$172 .dwtag DW_TAG_member - 2136 .dwattr $C$DW$172, DW_AT_type(*$C$DW$T$82) - 2137 .dwattr $C$DW$172, DW_AT_name("STALL_bit") - 2138 .dwattr $C$DW$172, DW_AT_TI_symbol_name("STALL_bit") - 2139 .dwattr $C$DW$172, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2140 .dwattr $C$DW$172, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2141 .dwattr $C$DW$172, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2142 .dwattr $C$DW$172, DW_AT_decl_line(0x5f) - 2143 .dwattr $C$DW$172, DW_AT_decl_column(0x05) - 2144 .dwendtag $C$DW$T$83 - 2145 -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 40 - - 2146 .dwattr $C$DW$T$83, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 2147 .dwattr $C$DW$T$83, DW_AT_decl_line(0x5a) - 2148 .dwattr $C$DW$T$83, DW_AT_decl_column(0x08) - 2149 - 2150$C$DW$T$85 .dwtag DW_TAG_union_type - 2151 .dwattr $C$DW$T$85, DW_AT_byte_size(0x04) - 2152$C$DW$173 .dwtag DW_TAG_member - 2153 .dwattr $C$DW$173, DW_AT_type(*$C$DW$T$47) - 2154 .dwattr $C$DW$173, DW_AT_name("CTBIR0") - 2155 .dwattr $C$DW$173, DW_AT_TI_symbol_name("CTBIR0") - 2156 .dwattr $C$DW$173, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2157 .dwattr $C$DW$173, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2158 .dwattr $C$DW$173, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2159 .dwattr $C$DW$173, DW_AT_decl_line(0x68) - 2160 .dwattr $C$DW$173, DW_AT_decl_column(0x15) - 2161$C$DW$174 .dwtag DW_TAG_member - 2162 .dwattr $C$DW$174, DW_AT_type(*$C$DW$T$84) - 2163 .dwattr $C$DW$174, DW_AT_name("CTBIR0_bit") - 2164 .dwattr $C$DW$174, DW_AT_TI_symbol_name("CTBIR0_bit") - 2165 .dwattr $C$DW$174, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2166 .dwattr $C$DW$174, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2167 .dwattr $C$DW$174, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2168 .dwattr $C$DW$174, DW_AT_decl_line(0x6f) - 2169 .dwattr $C$DW$174, DW_AT_decl_column(0x05) - 2170 .dwendtag $C$DW$T$85 - 2171 - 2172 .dwattr $C$DW$T$85, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 2173 .dwattr $C$DW$T$85, DW_AT_decl_line(0x67) - 2174 .dwattr $C$DW$T$85, DW_AT_decl_column(0x08) - 2175 - 2176$C$DW$T$87 .dwtag DW_TAG_union_type - 2177 .dwattr $C$DW$T$87, DW_AT_byte_size(0x04) - 2178$C$DW$175 .dwtag DW_TAG_member - 2179 .dwattr $C$DW$175, DW_AT_type(*$C$DW$T$47) - 2180 .dwattr $C$DW$175, DW_AT_name("CTBIR1") - 2181 .dwattr $C$DW$175, DW_AT_TI_symbol_name("CTBIR1") - 2182 .dwattr $C$DW$175, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2183 .dwattr $C$DW$175, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2184 .dwattr $C$DW$175, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2185 .dwattr $C$DW$175, DW_AT_decl_line(0x75) - 2186 .dwattr $C$DW$175, DW_AT_decl_column(0x15) - 2187$C$DW$176 .dwtag DW_TAG_member - 2188 .dwattr $C$DW$176, DW_AT_type(*$C$DW$T$86) - 2189 .dwattr $C$DW$176, DW_AT_name("CTBIR1_bit") - 2190 .dwattr $C$DW$176, DW_AT_TI_symbol_name("CTBIR1_bit") - 2191 .dwattr $C$DW$176, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2192 .dwattr $C$DW$176, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2193 .dwattr $C$DW$176, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2194 .dwattr $C$DW$176, DW_AT_decl_line(0x7c) - 2195 .dwattr $C$DW$176, DW_AT_decl_column(0x05) - 2196 .dwendtag $C$DW$T$87 - 2197 - 2198 .dwattr $C$DW$T$87, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 2199 .dwattr $C$DW$T$87, DW_AT_decl_line(0x74) - 2200 .dwattr $C$DW$T$87, DW_AT_decl_column(0x08) -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 41 - - 2201 - 2202$C$DW$T$89 .dwtag DW_TAG_union_type - 2203 .dwattr $C$DW$T$89, DW_AT_byte_size(0x04) - 2204$C$DW$177 .dwtag DW_TAG_member - 2205 .dwattr $C$DW$177, DW_AT_type(*$C$DW$T$47) - 2206 .dwattr $C$DW$177, DW_AT_name("CTPPR0") - 2207 .dwattr $C$DW$177, DW_AT_TI_symbol_name("CTPPR0") - 2208 .dwattr $C$DW$177, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2209 .dwattr $C$DW$177, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2210 .dwattr $C$DW$177, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2211 .dwattr $C$DW$177, DW_AT_decl_line(0x82) - 2212 .dwattr $C$DW$177, DW_AT_decl_column(0x15) - 2213$C$DW$178 .dwtag DW_TAG_member - 2214 .dwattr $C$DW$178, DW_AT_type(*$C$DW$T$88) - 2215 .dwattr $C$DW$178, DW_AT_name("CTPPR0_bit") - 2216 .dwattr $C$DW$178, DW_AT_TI_symbol_name("CTPPR0_bit") - 2217 .dwattr $C$DW$178, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2218 .dwattr $C$DW$178, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2219 .dwattr $C$DW$178, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2220 .dwattr $C$DW$178, DW_AT_decl_line(0x87) - 2221 .dwattr $C$DW$178, DW_AT_decl_column(0x05) - 2222 .dwendtag $C$DW$T$89 - 2223 - 2224 .dwattr $C$DW$T$89, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 2225 .dwattr $C$DW$T$89, DW_AT_decl_line(0x81) - 2226 .dwattr $C$DW$T$89, DW_AT_decl_column(0x08) - 2227 - 2228$C$DW$T$91 .dwtag DW_TAG_union_type - 2229 .dwattr $C$DW$T$91, DW_AT_byte_size(0x04) - 2230$C$DW$179 .dwtag DW_TAG_member - 2231 .dwattr $C$DW$179, DW_AT_type(*$C$DW$T$47) - 2232 .dwattr $C$DW$179, DW_AT_name("CTPPR1") - 2233 .dwattr $C$DW$179, DW_AT_TI_symbol_name("CTPPR1") - 2234 .dwattr $C$DW$179, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2235 .dwattr $C$DW$179, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2236 .dwattr $C$DW$179, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2237 .dwattr $C$DW$179, DW_AT_decl_line(0x8d) - 2238 .dwattr $C$DW$179, DW_AT_decl_column(0x15) - 2239$C$DW$180 .dwtag DW_TAG_member - 2240 .dwattr $C$DW$180, DW_AT_type(*$C$DW$T$90) - 2241 .dwattr $C$DW$180, DW_AT_name("CTPPR1_bit") - 2242 .dwattr $C$DW$180, DW_AT_TI_symbol_name("CTPPR1_bit") - 2243 .dwattr $C$DW$180, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2244 .dwattr $C$DW$180, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2245 .dwattr $C$DW$180, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/pr - 2246 .dwattr $C$DW$180, DW_AT_decl_line(0x92) - 2247 .dwattr $C$DW$180, DW_AT_decl_column(0x05) - 2248 .dwendtag $C$DW$T$91 - 2249 - 2250 .dwattr $C$DW$T$91, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/am335x/p - 2251 .dwattr $C$DW$T$91, DW_AT_decl_line(0x8c) - 2252 .dwattr $C$DW$T$91, DW_AT_decl_column(0x08) - 2253$C$DW$T$2 .dwtag DW_TAG_unspecified_type - 2254 .dwattr $C$DW$T$2, DW_AT_name("void") - 2255$C$DW$T$4 .dwtag DW_TAG_base_type -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 42 - - 2256 .dwattr $C$DW$T$4, DW_AT_encoding(DW_ATE_boolean) - 2257 .dwattr $C$DW$T$4, DW_AT_name("bool") - 2258 .dwattr $C$DW$T$4, DW_AT_byte_size(0x01) - 2259$C$DW$T$5 .dwtag DW_TAG_base_type - 2260 .dwattr $C$DW$T$5, DW_AT_encoding(DW_ATE_signed_char) - 2261 .dwattr $C$DW$T$5, DW_AT_name("signed char") - 2262 .dwattr $C$DW$T$5, DW_AT_byte_size(0x01) - 2263$C$DW$T$6 .dwtag DW_TAG_base_type - 2264 .dwattr $C$DW$T$6, DW_AT_encoding(DW_ATE_unsigned_char) - 2265 .dwattr $C$DW$T$6, DW_AT_name("unsigned char") - 2266 .dwattr $C$DW$T$6, DW_AT_byte_size(0x01) - 2267$C$DW$T$7 .dwtag DW_TAG_base_type - 2268 .dwattr $C$DW$T$7, DW_AT_encoding(DW_ATE_signed_char) - 2269 .dwattr $C$DW$T$7, DW_AT_name("wchar_t") - 2270 .dwattr $C$DW$T$7, DW_AT_byte_size(0x04) - 2271$C$DW$T$8 .dwtag DW_TAG_base_type - 2272 .dwattr $C$DW$T$8, DW_AT_encoding(DW_ATE_signed) - 2273 .dwattr $C$DW$T$8, DW_AT_name("short") - 2274 .dwattr $C$DW$T$8, DW_AT_byte_size(0x02) - 2275$C$DW$T$9 .dwtag DW_TAG_base_type - 2276 .dwattr $C$DW$T$9, DW_AT_encoding(DW_ATE_unsigned) - 2277 .dwattr $C$DW$T$9, DW_AT_name("unsigned short") - 2278 .dwattr $C$DW$T$9, DW_AT_byte_size(0x02) - 2279$C$DW$T$10 .dwtag DW_TAG_base_type - 2280 .dwattr $C$DW$T$10, DW_AT_encoding(DW_ATE_signed) - 2281 .dwattr $C$DW$T$10, DW_AT_name("int") - 2282 .dwattr $C$DW$T$10, DW_AT_byte_size(0x04) - 2283$C$DW$T$11 .dwtag DW_TAG_base_type - 2284 .dwattr $C$DW$T$11, DW_AT_encoding(DW_ATE_unsigned) - 2285 .dwattr $C$DW$T$11, DW_AT_name("unsigned int") - 2286 .dwattr $C$DW$T$11, DW_AT_byte_size(0x04) - 2287$C$DW$T$32 .dwtag DW_TAG_typedef, DW_AT_name("uint32_t") - 2288 .dwattr $C$DW$T$32, DW_AT_type(*$C$DW$T$11) - 2289 .dwattr $C$DW$T$32, DW_AT_language(DW_LANG_C) - 2290 .dwattr $C$DW$T$32, DW_AT_decl_file("/usr/share/ti/cgt-pru/include/stdint.h") - 2291 .dwattr $C$DW$T$32, DW_AT_decl_line(0x2f) - 2292 .dwattr $C$DW$T$32, DW_AT_decl_column(0x1c) - 2293 - 2294$C$DW$T$33 .dwtag DW_TAG_array_type - 2295 .dwattr $C$DW$T$33, DW_AT_type(*$C$DW$T$32) - 2296 .dwattr $C$DW$T$33, DW_AT_language(DW_LANG_C) - 2297 .dwattr $C$DW$T$33, DW_AT_byte_size(0x04) - 2298$C$DW$181 .dwtag DW_TAG_subrange_type - 2299 .dwattr $C$DW$181, DW_AT_upper_bound(0x00) - 2300 .dwendtag $C$DW$T$33 - 2301 - 2302 - 2303$C$DW$T$34 .dwtag DW_TAG_array_type - 2304 .dwattr $C$DW$T$34, DW_AT_type(*$C$DW$T$32) - 2305 .dwattr $C$DW$T$34, DW_AT_language(DW_LANG_C) - 2306 .dwattr $C$DW$T$34, DW_AT_byte_size(0x08) - 2307$C$DW$182 .dwtag DW_TAG_subrange_type - 2308 .dwattr $C$DW$182, DW_AT_upper_bound(0x01) - 2309 .dwendtag $C$DW$T$34 - 2310 -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 43 - - 2311 - 2312$C$DW$T$45 .dwtag DW_TAG_array_type - 2313 .dwattr $C$DW$T$45, DW_AT_type(*$C$DW$T$32) - 2314 .dwattr $C$DW$T$45, DW_AT_language(DW_LANG_C) - 2315 .dwattr $C$DW$T$45, DW_AT_byte_size(0x0c) - 2316$C$DW$183 .dwtag DW_TAG_subrange_type - 2317 .dwattr $C$DW$183, DW_AT_upper_bound(0x02) - 2318 .dwendtag $C$DW$T$45 - 2319 - 2320$C$DW$T$47 .dwtag DW_TAG_volatile_type - 2321 .dwattr $C$DW$T$47, DW_AT_type(*$C$DW$T$32) - 2322$C$DW$T$12 .dwtag DW_TAG_base_type - 2323 .dwattr $C$DW$T$12, DW_AT_encoding(DW_ATE_signed) - 2324 .dwattr $C$DW$T$12, DW_AT_name("long") - 2325 .dwattr $C$DW$T$12, DW_AT_byte_size(0x04) - 2326$C$DW$T$13 .dwtag DW_TAG_base_type - 2327 .dwattr $C$DW$T$13, DW_AT_encoding(DW_ATE_unsigned) - 2328 .dwattr $C$DW$T$13, DW_AT_name("unsigned long") - 2329 .dwattr $C$DW$T$13, DW_AT_byte_size(0x04) - 2330$C$DW$T$14 .dwtag DW_TAG_base_type - 2331 .dwattr $C$DW$T$14, DW_AT_encoding(DW_ATE_signed) - 2332 .dwattr $C$DW$T$14, DW_AT_name("long long") - 2333 .dwattr $C$DW$T$14, DW_AT_byte_size(0x08) - 2334$C$DW$T$15 .dwtag DW_TAG_base_type - 2335 .dwattr $C$DW$T$15, DW_AT_encoding(DW_ATE_unsigned) - 2336 .dwattr $C$DW$T$15, DW_AT_name("unsigned long long") - 2337 .dwattr $C$DW$T$15, DW_AT_byte_size(0x08) - 2338$C$DW$T$16 .dwtag DW_TAG_base_type - 2339 .dwattr $C$DW$T$16, DW_AT_encoding(DW_ATE_float) - 2340 .dwattr $C$DW$T$16, DW_AT_name("float") - 2341 .dwattr $C$DW$T$16, DW_AT_byte_size(0x04) - 2342$C$DW$T$17 .dwtag DW_TAG_base_type - 2343 .dwattr $C$DW$T$17, DW_AT_encoding(DW_ATE_float) - 2344 .dwattr $C$DW$T$17, DW_AT_name("double") - 2345 .dwattr $C$DW$T$17, DW_AT_byte_size(0x08) - 2346$C$DW$T$18 .dwtag DW_TAG_base_type - 2347 .dwattr $C$DW$T$18, DW_AT_encoding(DW_ATE_float) - 2348 .dwattr $C$DW$T$18, DW_AT_name("long double") - 2349 .dwattr $C$DW$T$18, DW_AT_byte_size(0x08) - 2350 - 2351$C$DW$T$92 .dwtag DW_TAG_structure_type - 2352 .dwattr $C$DW$T$92, DW_AT_name("my_resource_table") - 2353 .dwattr $C$DW$T$92, DW_AT_byte_size(0x14) - 2354$C$DW$184 .dwtag DW_TAG_member - 2355 .dwattr $C$DW$184, DW_AT_type(*$C$DW$T$93) - 2356 .dwattr $C$DW$184, DW_AT_name("base") - 2357 .dwattr $C$DW$184, DW_AT_TI_symbol_name("base") - 2358 .dwattr $C$DW$184, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2359 .dwattr $C$DW$184, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2360 .dwattr $C$DW$184, DW_AT_decl_file("/var/lib/cloud9/common/resource_table_empty.h") - 2361 .dwattr $C$DW$184, DW_AT_decl_line(0x18) - 2362 .dwattr $C$DW$184, DW_AT_decl_column(0x18) - 2363$C$DW$185 .dwtag DW_TAG_member - 2364 .dwattr $C$DW$185, DW_AT_type(*$C$DW$T$33) - 2365 .dwattr $C$DW$185, DW_AT_name("offset") -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 44 - - 2366 .dwattr $C$DW$185, DW_AT_TI_symbol_name("offset") - 2367 .dwattr $C$DW$185, DW_AT_data_member_location[DW_OP_plus_uconst 0x10] - 2368 .dwattr $C$DW$185, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2369 .dwattr $C$DW$185, DW_AT_decl_file("/var/lib/cloud9/common/resource_table_empty.h") - 2370 .dwattr $C$DW$185, DW_AT_decl_line(0x1a) - 2371 .dwattr $C$DW$185, DW_AT_decl_column(0x0b) - 2372 .dwendtag $C$DW$T$92 - 2373 - 2374 .dwattr $C$DW$T$92, DW_AT_decl_file("/var/lib/cloud9/common/resource_table_empty.h") - 2375 .dwattr $C$DW$T$92, DW_AT_decl_line(0x17) - 2376 .dwattr $C$DW$T$92, DW_AT_decl_column(0x08) - 2377 - 2378$C$DW$T$93 .dwtag DW_TAG_structure_type - 2379 .dwattr $C$DW$T$93, DW_AT_name("resource_table") - 2380 .dwattr $C$DW$T$93, DW_AT_byte_size(0x10) - 2381$C$DW$186 .dwtag DW_TAG_member - 2382 .dwattr $C$DW$186, DW_AT_type(*$C$DW$T$32) - 2383 .dwattr $C$DW$186, DW_AT_name("ver") - 2384 .dwattr $C$DW$186, DW_AT_TI_symbol_name("ver") - 2385 .dwattr $C$DW$186, DW_AT_data_member_location[DW_OP_plus_uconst 0x0] - 2386 .dwattr $C$DW$186, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2387 .dwattr $C$DW$186, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/rsc_types - 2388 .dwattr $C$DW$186, DW_AT_decl_line(0x59) - 2389 .dwattr $C$DW$186, DW_AT_decl_column(0x0b) - 2390$C$DW$187 .dwtag DW_TAG_member - 2391 .dwattr $C$DW$187, DW_AT_type(*$C$DW$T$32) - 2392 .dwattr $C$DW$187, DW_AT_name("num") - 2393 .dwattr $C$DW$187, DW_AT_TI_symbol_name("num") - 2394 .dwattr $C$DW$187, DW_AT_data_member_location[DW_OP_plus_uconst 0x4] - 2395 .dwattr $C$DW$187, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2396 .dwattr $C$DW$187, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/rsc_types - 2397 .dwattr $C$DW$187, DW_AT_decl_line(0x5a) - 2398 .dwattr $C$DW$187, DW_AT_decl_column(0x0b) - 2399$C$DW$188 .dwtag DW_TAG_member - 2400 .dwattr $C$DW$188, DW_AT_type(*$C$DW$T$34) - 2401 .dwattr $C$DW$188, DW_AT_name("reserved") - 2402 .dwattr $C$DW$188, DW_AT_TI_symbol_name("reserved") - 2403 .dwattr $C$DW$188, DW_AT_data_member_location[DW_OP_plus_uconst 0x8] - 2404 .dwattr $C$DW$188, DW_AT_accessibility(DW_ACCESS_ai_64_lic) - 2405 .dwattr $C$DW$188, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/rsc_types - 2406 .dwattr $C$DW$188, DW_AT_decl_line(0x5b) - 2407 .dwattr $C$DW$188, DW_AT_decl_column(0x0b) - 2408 .dwendtag $C$DW$T$93 - 2409 - 2410 .dwattr $C$DW$T$93, DW_AT_decl_file("/usr/lib/ti/pru-software-support-package/include/rsc_type - 2411 .dwattr $C$DW$T$93, DW_AT_decl_line(0x58) - 2412 .dwattr $C$DW$T$93, DW_AT_decl_column(0x08) - 2413 .dwattr $C$DW$CU, DW_AT_language(DW_LANG_C) - 2414 - 2415;*************************************************************** - 2416;* DWARF CIE ENTRIES * - 2417;*************************************************************** - 2418 - 2419$C$DW$CIE .dwcie 14 - 2420 .dwcfi cfa_register, 8 -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 45 - - 2421 .dwcfi cfa_offset, 0 - 2422 .dwcfi undefined, 0 - 2423 .dwcfi undefined, 1 - 2424 .dwcfi undefined, 2 - 2425 .dwcfi undefined, 3 - 2426 .dwcfi undefined, 4 - 2427 .dwcfi undefined, 5 - 2428 .dwcfi undefined, 6 - 2429 .dwcfi undefined, 7 - 2430 .dwcfi same_value, 8 - 2431 .dwcfi same_value, 9 - 2432 .dwcfi same_value, 10 - 2433 .dwcfi same_value, 11 - 2434 .dwcfi undefined, 12 - 2435 .dwcfi undefined, 13 - 2436 .dwcfi undefined, 14 - 2437 .dwcfi undefined, 15 - 2438 .dwcfi same_value, 16 - 2439 .dwcfi same_value, 17 - 2440 .dwcfi same_value, 18 - 2441 .dwcfi same_value, 19 - 2442 .dwcfi same_value, 20 - 2443 .dwcfi same_value, 21 - 2444 .dwcfi same_value, 22 - 2445 .dwcfi same_value, 23 - 2446 .dwcfi same_value, 24 - 2447 .dwcfi same_value, 25 - 2448 .dwcfi same_value, 26 - 2449 .dwcfi same_value, 27 - 2450 .dwcfi same_value, 28 - 2451 .dwcfi same_value, 29 - 2452 .dwcfi same_value, 30 - 2453 .dwcfi same_value, 31 - 2454 .dwcfi same_value, 32 - 2455 .dwcfi same_value, 33 - 2456 .dwcfi same_value, 34 - 2457 .dwcfi same_value, 35 - 2458 .dwcfi same_value, 36 - 2459 .dwcfi same_value, 37 - 2460 .dwcfi same_value, 38 - 2461 .dwcfi same_value, 39 - 2462 .dwcfi same_value, 40 - 2463 .dwcfi same_value, 41 - 2464 .dwcfi same_value, 42 - 2465 .dwcfi same_value, 43 - 2466 .dwcfi same_value, 44 - 2467 .dwcfi same_value, 45 - 2468 .dwcfi same_value, 46 - 2469 .dwcfi same_value, 47 - 2470 .dwcfi same_value, 48 - 2471 .dwcfi same_value, 49 - 2472 .dwcfi same_value, 50 - 2473 .dwcfi same_value, 51 - 2474 .dwcfi same_value, 52 - 2475 .dwcfi same_value, 53 -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 46 - - 2476 .dwcfi same_value, 54 - 2477 .dwcfi same_value, 55 - 2478 .dwcfi undefined, 56 - 2479 .dwcfi undefined, 57 - 2480 .dwcfi undefined, 58 - 2481 .dwcfi undefined, 59 - 2482 .dwcfi undefined, 60 - 2483 .dwcfi undefined, 61 - 2484 .dwcfi undefined, 62 - 2485 .dwcfi undefined, 63 - 2486 .dwcfi undefined, 64 - 2487 .dwcfi undefined, 65 - 2488 .dwcfi undefined, 66 - 2489 .dwcfi undefined, 67 - 2490 .dwcfi undefined, 68 - 2491 .dwcfi undefined, 69 - 2492 .dwcfi undefined, 70 - 2493 .dwcfi undefined, 71 - 2494 .dwcfi undefined, 72 - 2495 .dwcfi undefined, 73 - 2496 .dwcfi undefined, 74 - 2497 .dwcfi undefined, 75 - 2498 .dwcfi undefined, 76 - 2499 .dwcfi undefined, 77 - 2500 .dwcfi undefined, 78 - 2501 .dwcfi undefined, 79 - 2502 .dwcfi undefined, 80 - 2503 .dwcfi undefined, 81 - 2504 .dwcfi undefined, 82 - 2505 .dwcfi undefined, 83 - 2506 .dwcfi undefined, 84 - 2507 .dwcfi undefined, 85 - 2508 .dwcfi undefined, 86 - 2509 .dwcfi undefined, 87 - 2510 .dwcfi undefined, 88 - 2511 .dwcfi undefined, 89 - 2512 .dwcfi undefined, 90 - 2513 .dwcfi undefined, 91 - 2514 .dwcfi undefined, 92 - 2515 .dwcfi undefined, 93 - 2516 .dwcfi undefined, 94 - 2517 .dwcfi undefined, 95 - 2518 .dwcfi undefined, 96 - 2519 .dwcfi undefined, 97 - 2520 .dwcfi undefined, 98 - 2521 .dwcfi undefined, 99 - 2522 .dwcfi undefined, 100 - 2523 .dwcfi undefined, 101 - 2524 .dwcfi undefined, 102 - 2525 .dwcfi undefined, 103 - 2526 .dwcfi undefined, 104 - 2527 .dwcfi undefined, 105 - 2528 .dwcfi undefined, 106 - 2529 .dwcfi undefined, 107 - 2530 .dwcfi undefined, 108 -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 47 - - 2531 .dwcfi undefined, 109 - 2532 .dwcfi undefined, 110 - 2533 .dwcfi undefined, 111 - 2534 .dwcfi undefined, 112 - 2535 .dwcfi undefined, 113 - 2536 .dwcfi undefined, 114 - 2537 .dwcfi undefined, 115 - 2538 .dwcfi undefined, 116 - 2539 .dwcfi undefined, 117 - 2540 .dwcfi undefined, 118 - 2541 .dwcfi undefined, 119 - 2542 .dwcfi undefined, 120 - 2543 .dwcfi undefined, 121 - 2544 .dwcfi undefined, 122 - 2545 .dwcfi undefined, 123 - 2546 .dwcfi undefined, 124 - 2547 .dwcfi undefined, 125 - 2548 .dwcfi undefined, 126 - 2549 .dwcfi undefined, 127 - 2550 .dwcfi undefined, 128 - 2551 .dwcfi undefined, 129 - 2552 .dwcfi undefined, 130 - 2553 .dwcfi undefined, 131 - 2554 .dwcfi undefined, 132 - 2555 .dwcfi undefined, 133 - 2556 .dwcfi undefined, 134 - 2557 .dwendentry - 2558 - 2559;*************************************************************** - 2560;* DWARF REGISTER MAP * - 2561;*************************************************************** - 2562 - 2563$C$DW$189 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R0_b0") - 2564 .dwattr $C$DW$189, DW_AT_location[DW_OP_reg0] - 2565$C$DW$190 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R0_b1") - 2566 .dwattr $C$DW$190, DW_AT_location[DW_OP_reg1] - 2567$C$DW$191 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R0_b2") - 2568 .dwattr $C$DW$191, DW_AT_location[DW_OP_reg2] - 2569$C$DW$192 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R0_b3") - 2570 .dwattr $C$DW$192, DW_AT_location[DW_OP_reg3] - 2571$C$DW$193 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R1_b0") - 2572 .dwattr $C$DW$193, DW_AT_location[DW_OP_reg4] - 2573$C$DW$194 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R1_b1") - 2574 .dwattr $C$DW$194, DW_AT_location[DW_OP_reg5] - 2575$C$DW$195 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R1_b2") - 2576 .dwattr $C$DW$195, DW_AT_location[DW_OP_reg6] - 2577$C$DW$196 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R1_b3") - 2578 .dwattr $C$DW$196, DW_AT_location[DW_OP_reg7] - 2579$C$DW$197 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R2_b0") - 2580 .dwattr $C$DW$197, DW_AT_location[DW_OP_reg8] - 2581$C$DW$198 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R2_b1") - 2582 .dwattr $C$DW$198, DW_AT_location[DW_OP_reg9] - 2583$C$DW$199 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R2_b2") - 2584 .dwattr $C$DW$199, DW_AT_location[DW_OP_reg10] - 2585$C$DW$200 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R2_b3") -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 48 - - 2586 .dwattr $C$DW$200, DW_AT_location[DW_OP_reg11] - 2587$C$DW$201 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R3_b0") - 2588 .dwattr $C$DW$201, DW_AT_location[DW_OP_reg12] - 2589$C$DW$202 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R3_b1") - 2590 .dwattr $C$DW$202, DW_AT_location[DW_OP_reg13] - 2591$C$DW$203 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R3_b2") - 2592 .dwattr $C$DW$203, DW_AT_location[DW_OP_reg14] - 2593$C$DW$204 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R3_b3") - 2594 .dwattr $C$DW$204, DW_AT_location[DW_OP_reg15] - 2595$C$DW$205 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R4_b0") - 2596 .dwattr $C$DW$205, DW_AT_location[DW_OP_reg16] - 2597$C$DW$206 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R4_b1") - 2598 .dwattr $C$DW$206, DW_AT_location[DW_OP_reg17] - 2599$C$DW$207 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R4_b2") - 2600 .dwattr $C$DW$207, DW_AT_location[DW_OP_reg18] - 2601$C$DW$208 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R4_b3") - 2602 .dwattr $C$DW$208, DW_AT_location[DW_OP_reg19] - 2603$C$DW$209 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R5_b0") - 2604 .dwattr $C$DW$209, DW_AT_location[DW_OP_reg20] - 2605$C$DW$210 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R5_b1") - 2606 .dwattr $C$DW$210, DW_AT_location[DW_OP_reg21] - 2607$C$DW$211 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R5_b2") - 2608 .dwattr $C$DW$211, DW_AT_location[DW_OP_reg22] - 2609$C$DW$212 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R5_b3") - 2610 .dwattr $C$DW$212, DW_AT_location[DW_OP_reg23] - 2611$C$DW$213 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R6_b0") - 2612 .dwattr $C$DW$213, DW_AT_location[DW_OP_reg24] - 2613$C$DW$214 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R6_b1") - 2614 .dwattr $C$DW$214, DW_AT_location[DW_OP_reg25] - 2615$C$DW$215 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R6_b2") - 2616 .dwattr $C$DW$215, DW_AT_location[DW_OP_reg26] - 2617$C$DW$216 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R6_b3") - 2618 .dwattr $C$DW$216, DW_AT_location[DW_OP_reg27] - 2619$C$DW$217 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R7_b0") - 2620 .dwattr $C$DW$217, DW_AT_location[DW_OP_reg28] - 2621$C$DW$218 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R7_b1") - 2622 .dwattr $C$DW$218, DW_AT_location[DW_OP_reg29] - 2623$C$DW$219 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R7_b2") - 2624 .dwattr $C$DW$219, DW_AT_location[DW_OP_reg30] - 2625$C$DW$220 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R7_b3") - 2626 .dwattr $C$DW$220, DW_AT_location[DW_OP_reg31] - 2627$C$DW$221 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R8_b0") - 2628 .dwattr $C$DW$221, DW_AT_location[DW_OP_regx 0x20] - 2629$C$DW$222 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R8_b1") - 2630 .dwattr $C$DW$222, DW_AT_location[DW_OP_regx 0x21] - 2631$C$DW$223 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R8_b2") - 2632 .dwattr $C$DW$223, DW_AT_location[DW_OP_regx 0x22] - 2633$C$DW$224 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R8_b3") - 2634 .dwattr $C$DW$224, DW_AT_location[DW_OP_regx 0x23] - 2635$C$DW$225 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R9_b0") - 2636 .dwattr $C$DW$225, DW_AT_location[DW_OP_regx 0x24] - 2637$C$DW$226 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R9_b1") - 2638 .dwattr $C$DW$226, DW_AT_location[DW_OP_regx 0x25] - 2639$C$DW$227 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R9_b2") - 2640 .dwattr $C$DW$227, DW_AT_location[DW_OP_regx 0x26] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 49 - - 2641$C$DW$228 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R9_b3") - 2642 .dwattr $C$DW$228, DW_AT_location[DW_OP_regx 0x27] - 2643$C$DW$229 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R10_b0") - 2644 .dwattr $C$DW$229, DW_AT_location[DW_OP_regx 0x28] - 2645$C$DW$230 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R10_b1") - 2646 .dwattr $C$DW$230, DW_AT_location[DW_OP_regx 0x29] - 2647$C$DW$231 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R10_b2") - 2648 .dwattr $C$DW$231, DW_AT_location[DW_OP_regx 0x2a] - 2649$C$DW$232 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R10_b3") - 2650 .dwattr $C$DW$232, DW_AT_location[DW_OP_regx 0x2b] - 2651$C$DW$233 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R11_b0") - 2652 .dwattr $C$DW$233, DW_AT_location[DW_OP_regx 0x2c] - 2653$C$DW$234 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R11_b1") - 2654 .dwattr $C$DW$234, DW_AT_location[DW_OP_regx 0x2d] - 2655$C$DW$235 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R11_b2") - 2656 .dwattr $C$DW$235, DW_AT_location[DW_OP_regx 0x2e] - 2657$C$DW$236 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R11_b3") - 2658 .dwattr $C$DW$236, DW_AT_location[DW_OP_regx 0x2f] - 2659$C$DW$237 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R12_b0") - 2660 .dwattr $C$DW$237, DW_AT_location[DW_OP_regx 0x30] - 2661$C$DW$238 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R12_b1") - 2662 .dwattr $C$DW$238, DW_AT_location[DW_OP_regx 0x31] - 2663$C$DW$239 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R12_b2") - 2664 .dwattr $C$DW$239, DW_AT_location[DW_OP_regx 0x32] - 2665$C$DW$240 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R12_b3") - 2666 .dwattr $C$DW$240, DW_AT_location[DW_OP_regx 0x33] - 2667$C$DW$241 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R13_b0") - 2668 .dwattr $C$DW$241, DW_AT_location[DW_OP_regx 0x34] - 2669$C$DW$242 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R13_b1") - 2670 .dwattr $C$DW$242, DW_AT_location[DW_OP_regx 0x35] - 2671$C$DW$243 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R13_b2") - 2672 .dwattr $C$DW$243, DW_AT_location[DW_OP_regx 0x36] - 2673$C$DW$244 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R13_b3") - 2674 .dwattr $C$DW$244, DW_AT_location[DW_OP_regx 0x37] - 2675$C$DW$245 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R14_b0") - 2676 .dwattr $C$DW$245, DW_AT_location[DW_OP_regx 0x38] - 2677$C$DW$246 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R14_b1") - 2678 .dwattr $C$DW$246, DW_AT_location[DW_OP_regx 0x39] - 2679$C$DW$247 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R14_b2") - 2680 .dwattr $C$DW$247, DW_AT_location[DW_OP_regx 0x3a] - 2681$C$DW$248 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R14_b3") - 2682 .dwattr $C$DW$248, DW_AT_location[DW_OP_regx 0x3b] - 2683$C$DW$249 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R15_b0") - 2684 .dwattr $C$DW$249, DW_AT_location[DW_OP_regx 0x3c] - 2685$C$DW$250 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R15_b1") - 2686 .dwattr $C$DW$250, DW_AT_location[DW_OP_regx 0x3d] - 2687$C$DW$251 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R15_b2") - 2688 .dwattr $C$DW$251, DW_AT_location[DW_OP_regx 0x3e] - 2689$C$DW$252 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R15_b3") - 2690 .dwattr $C$DW$252, DW_AT_location[DW_OP_regx 0x3f] - 2691$C$DW$253 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R16_b0") - 2692 .dwattr $C$DW$253, DW_AT_location[DW_OP_regx 0x40] - 2693$C$DW$254 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R16_b1") - 2694 .dwattr $C$DW$254, DW_AT_location[DW_OP_regx 0x41] - 2695$C$DW$255 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R16_b2") -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 50 - - 2696 .dwattr $C$DW$255, DW_AT_location[DW_OP_regx 0x42] - 2697$C$DW$256 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R16_b3") - 2698 .dwattr $C$DW$256, DW_AT_location[DW_OP_regx 0x43] - 2699$C$DW$257 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R17_b0") - 2700 .dwattr $C$DW$257, DW_AT_location[DW_OP_regx 0x44] - 2701$C$DW$258 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R17_b1") - 2702 .dwattr $C$DW$258, DW_AT_location[DW_OP_regx 0x45] - 2703$C$DW$259 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R17_b2") - 2704 .dwattr $C$DW$259, DW_AT_location[DW_OP_regx 0x46] - 2705$C$DW$260 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R17_b3") - 2706 .dwattr $C$DW$260, DW_AT_location[DW_OP_regx 0x47] - 2707$C$DW$261 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R18_b0") - 2708 .dwattr $C$DW$261, DW_AT_location[DW_OP_regx 0x48] - 2709$C$DW$262 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R18_b1") - 2710 .dwattr $C$DW$262, DW_AT_location[DW_OP_regx 0x49] - 2711$C$DW$263 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R18_b2") - 2712 .dwattr $C$DW$263, DW_AT_location[DW_OP_regx 0x4a] - 2713$C$DW$264 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R18_b3") - 2714 .dwattr $C$DW$264, DW_AT_location[DW_OP_regx 0x4b] - 2715$C$DW$265 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R19_b0") - 2716 .dwattr $C$DW$265, DW_AT_location[DW_OP_regx 0x4c] - 2717$C$DW$266 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R19_b1") - 2718 .dwattr $C$DW$266, DW_AT_location[DW_OP_regx 0x4d] - 2719$C$DW$267 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R19_b2") - 2720 .dwattr $C$DW$267, DW_AT_location[DW_OP_regx 0x4e] - 2721$C$DW$268 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R19_b3") - 2722 .dwattr $C$DW$268, DW_AT_location[DW_OP_regx 0x4f] - 2723$C$DW$269 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R20_b0") - 2724 .dwattr $C$DW$269, DW_AT_location[DW_OP_regx 0x50] - 2725$C$DW$270 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R20_b1") - 2726 .dwattr $C$DW$270, DW_AT_location[DW_OP_regx 0x51] - 2727$C$DW$271 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R20_b2") - 2728 .dwattr $C$DW$271, DW_AT_location[DW_OP_regx 0x52] - 2729$C$DW$272 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R20_b3") - 2730 .dwattr $C$DW$272, DW_AT_location[DW_OP_regx 0x53] - 2731$C$DW$273 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R21_b0") - 2732 .dwattr $C$DW$273, DW_AT_location[DW_OP_regx 0x54] - 2733$C$DW$274 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R21_b1") - 2734 .dwattr $C$DW$274, DW_AT_location[DW_OP_regx 0x55] - 2735$C$DW$275 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R21_b2") - 2736 .dwattr $C$DW$275, DW_AT_location[DW_OP_regx 0x56] - 2737$C$DW$276 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R21_b3") - 2738 .dwattr $C$DW$276, DW_AT_location[DW_OP_regx 0x57] - 2739$C$DW$277 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R22_b0") - 2740 .dwattr $C$DW$277, DW_AT_location[DW_OP_regx 0x58] - 2741$C$DW$278 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R22_b1") - 2742 .dwattr $C$DW$278, DW_AT_location[DW_OP_regx 0x59] - 2743$C$DW$279 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R22_b2") - 2744 .dwattr $C$DW$279, DW_AT_location[DW_OP_regx 0x5a] - 2745$C$DW$280 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R22_b3") - 2746 .dwattr $C$DW$280, DW_AT_location[DW_OP_regx 0x5b] - 2747$C$DW$281 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R23_b0") - 2748 .dwattr $C$DW$281, DW_AT_location[DW_OP_regx 0x5c] - 2749$C$DW$282 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R23_b1") - 2750 .dwattr $C$DW$282, DW_AT_location[DW_OP_regx 0x5d] -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 51 - - 2751$C$DW$283 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R23_b2") - 2752 .dwattr $C$DW$283, DW_AT_location[DW_OP_regx 0x5e] - 2753$C$DW$284 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R23_b3") - 2754 .dwattr $C$DW$284, DW_AT_location[DW_OP_regx 0x5f] - 2755$C$DW$285 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R24_b0") - 2756 .dwattr $C$DW$285, DW_AT_location[DW_OP_regx 0x60] - 2757$C$DW$286 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R24_b1") - 2758 .dwattr $C$DW$286, DW_AT_location[DW_OP_regx 0x61] - 2759$C$DW$287 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R24_b2") - 2760 .dwattr $C$DW$287, DW_AT_location[DW_OP_regx 0x62] - 2761$C$DW$288 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R24_b3") - 2762 .dwattr $C$DW$288, DW_AT_location[DW_OP_regx 0x63] - 2763$C$DW$289 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R25_b0") - 2764 .dwattr $C$DW$289, DW_AT_location[DW_OP_regx 0x64] - 2765$C$DW$290 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R25_b1") - 2766 .dwattr $C$DW$290, DW_AT_location[DW_OP_regx 0x65] - 2767$C$DW$291 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R25_b2") - 2768 .dwattr $C$DW$291, DW_AT_location[DW_OP_regx 0x66] - 2769$C$DW$292 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R25_b3") - 2770 .dwattr $C$DW$292, DW_AT_location[DW_OP_regx 0x67] - 2771$C$DW$293 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R26_b0") - 2772 .dwattr $C$DW$293, DW_AT_location[DW_OP_regx 0x68] - 2773$C$DW$294 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R26_b1") - 2774 .dwattr $C$DW$294, DW_AT_location[DW_OP_regx 0x69] - 2775$C$DW$295 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R26_b2") - 2776 .dwattr $C$DW$295, DW_AT_location[DW_OP_regx 0x6a] - 2777$C$DW$296 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R26_b3") - 2778 .dwattr $C$DW$296, DW_AT_location[DW_OP_regx 0x6b] - 2779$C$DW$297 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R27_b0") - 2780 .dwattr $C$DW$297, DW_AT_location[DW_OP_regx 0x6c] - 2781$C$DW$298 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R27_b1") - 2782 .dwattr $C$DW$298, DW_AT_location[DW_OP_regx 0x6d] - 2783$C$DW$299 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R27_b2") - 2784 .dwattr $C$DW$299, DW_AT_location[DW_OP_regx 0x6e] - 2785$C$DW$300 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R27_b3") - 2786 .dwattr $C$DW$300, DW_AT_location[DW_OP_regx 0x6f] - 2787$C$DW$301 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R28_b0") - 2788 .dwattr $C$DW$301, DW_AT_location[DW_OP_regx 0x70] - 2789$C$DW$302 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R28_b1") - 2790 .dwattr $C$DW$302, DW_AT_location[DW_OP_regx 0x71] - 2791$C$DW$303 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R28_b2") - 2792 .dwattr $C$DW$303, DW_AT_location[DW_OP_regx 0x72] - 2793$C$DW$304 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R28_b3") - 2794 .dwattr $C$DW$304, DW_AT_location[DW_OP_regx 0x73] - 2795$C$DW$305 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R29_b0") - 2796 .dwattr $C$DW$305, DW_AT_location[DW_OP_regx 0x74] - 2797$C$DW$306 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R29_b1") - 2798 .dwattr $C$DW$306, DW_AT_location[DW_OP_regx 0x75] - 2799$C$DW$307 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R29_b2") - 2800 .dwattr $C$DW$307, DW_AT_location[DW_OP_regx 0x76] - 2801$C$DW$308 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R29_b3") - 2802 .dwattr $C$DW$308, DW_AT_location[DW_OP_regx 0x77] - 2803$C$DW$309 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R30_b0") - 2804 .dwattr $C$DW$309, DW_AT_location[DW_OP_regx 0x78] - 2805$C$DW$310 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R30_b1") -PRU Assembler Unix v2.1.5 Fri Jun 5 14:14:07 2020 - -Tools Copyright (c) 2012-2017 Texas Instruments Incorporated -/tmp/cloud9-examples/cycle.pru0.asm PAGE 52 - - 2806 .dwattr $C$DW$310, DW_AT_location[DW_OP_regx 0x79] - 2807$C$DW$311 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R30_b2") - 2808 .dwattr $C$DW$311, DW_AT_location[DW_OP_regx 0x7a] - 2809$C$DW$312 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R30_b3") - 2810 .dwattr $C$DW$312, DW_AT_location[DW_OP_regx 0x7b] - 2811$C$DW$313 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R31_b0") - 2812 .dwattr $C$DW$313, DW_AT_location[DW_OP_regx 0x7c] - 2813$C$DW$314 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R31_b1") - 2814 .dwattr $C$DW$314, DW_AT_location[DW_OP_regx 0x7d] - 2815$C$DW$315 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R31_b2") - 2816 .dwattr $C$DW$315, DW_AT_location[DW_OP_regx 0x7e] - 2817$C$DW$316 .dwtag DW_TAG_TI_assign_register, DW_AT_name("R31_b3") - 2818 .dwattr $C$DW$316, DW_AT_location[DW_OP_regx 0x7f] - 2819 .dwendtag $C$DW$CU - 2820 - -No Assembly Errors, No Assembly Warnings diff --git a/books/pru-cookbook/07more/code/delay-test.pru0.c b/books/pru-cookbook/07more/code/delay-test.pru0.c deleted file mode 100644 index 337ecbb2..00000000 --- a/books/pru-cookbook/07more/code/delay-test.pru0.c +++ /dev/null @@ -1,28 +0,0 @@ -// Shows how to call an assembly routine with one parameter -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -// The function is defined in delay.asm in same dir -// We just need to add a declaration here, the defination can be -// seperately linked -extern void my_delay_cycles(uint32_t); - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t gpio = P9_31; // Select which pin to toggle.; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - while(1) { - __R30 |= gpio; // Set the GPIO pin to 1 - my_delay_cycles(1); - __R30 &= ~gpio; // Clear the GPIO pin - my_delay_cycles(1); - } -} diff --git a/books/pru-cookbook/07more/code/delay-test2.pru0.c b/books/pru-cookbook/07more/code/delay-test2.pru0.c deleted file mode 100644 index 763b3a7d..00000000 --- a/books/pru-cookbook/07more/code/delay-test2.pru0.c +++ /dev/null @@ -1,32 +0,0 @@ -// Shows how to call an assembly routine with a return value -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -#define TEST 100 - -// The function is defined in delay.asm in same dir -// We just need to add a declaration here, the defination can be -// seperately linked -extern uint32_t my_delay_cycles(uint32_t); - -uint32_t ret; - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t gpio = P9_31; // Select which pin to toggle.; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - while(1) { - __R30 |= gpio; // Set the GPIO pin to 1 - ret = my_delay_cycles(1); - __R30 &= ~gpio; // Clear the GPIO pin - ret = my_delay_cycles(1); - } -} diff --git a/books/pru-cookbook/07more/code/delay.pru0.asm b/books/pru-cookbook/07more/code/delay.pru0.asm deleted file mode 100644 index 1c1cce7d..00000000 --- a/books/pru-cookbook/07more/code/delay.pru0.asm +++ /dev/null @@ -1,9 +0,0 @@ -; This is an example of how to call an assembly routine from C. -; Mark A. Yoder, 9-July-2018 - .global my_delay_cycles -my_delay_cycles: -delay: - sub r14, r14, 1 ; The first argument is passed in r14 - qbne delay, r14, 0 - - jmp r3.w2 ; r3 contains the return address \ No newline at end of file diff --git a/books/pru-cookbook/07more/code/delay2.pru0.asm b/books/pru-cookbook/07more/code/delay2.pru0.asm deleted file mode 100644 index e1f1da03..00000000 --- a/books/pru-cookbook/07more/code/delay2.pru0.asm +++ /dev/null @@ -1,15 +0,0 @@ -; This is an example of how to call an assembly routine from C with a retun value. -; Mark A. Yoder, 9-July-2018 - - .cdecls "delay-test2.pru0.c" - - .global my_delay_cycles -my_delay_cycles: -delay: - sub r14, r14, 1 ; The first argument is passed in r14 - qbne delay, r14, 0 - - ldi r14, TEST ; TEST is defined in delay-test2.c - ; r14 is the return register - - jmp r3.w2 ; r3 contains the return address \ No newline at end of file diff --git a/books/pru-cookbook/07more/code/logic.c b/books/pru-cookbook/07more/code/logic.c deleted file mode 100644 index f774708d..00000000 --- a/books/pru-cookbook/07more/code/logic.c +++ /dev/null @@ -1,34 +0,0 @@ -// Access the CYCLE and STALL registers -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - // Copy lower 8 bits to r16 - struct { - uint8_t b0; - uint8_t b1; - uint8_t b2; - uint8_t b3; - } r17; - - // Clear SYSCFG[STANDBY_INIT] to enable OCP master port - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - -// r16.b0 = __R31.b0; - __asm(" mov r17.b0, r31.b0"); - __delay_cycles(1); - r17.b1 = (uint32_t) __R31; - __delay_cycles(1); - r17.b2 = (uint32_t) __R31; - __delay_cycles(1); - r17.b3 = (uint32_t) __R31; - - __xout(10, 16, 0, r17); - - __halt(); -} diff --git a/books/pru-cookbook/07more/code/logic_setup.sh b/books/pru-cookbook/07more/code/logic_setup.sh deleted file mode 100644 index 2253459c..00000000 --- a/books/pru-cookbook/07more/code/logic_setup.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -# -export PRUN=0 -export TARGET=logic -echo PRUN=$PRUN -echo TARGET=$TARGET - -# Configure the PRU pins based on which Beagle is running -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine -if [ $machine = "Black" ]; then - echo " Found" - pins="P9_31 P9_29 P9_30 P9_28 P9_92 P9_27 P9_91 P9_25 " -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - pins="P1_36 P1_33 P2_32 P2_30 P1_31 P2_34 P2_28 P1_29" -else - echo " Not Found" - pins="" -fi - -for pin in $pins -do - echo $pin - config-pin $pin pruin - config-pin -q $pin -done diff --git a/books/pru-cookbook/07more/code/resource_table_pru0.h b/books/pru-cookbook/07more/code/resource_table_pru0.h deleted file mode 100644 index 06c14800..00000000 --- a/books/pru-cookbook/07more/code/resource_table_pru0.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * * Neither the name of Texas Instruments Incorporated nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * ======== rsc_table_pru.h ======== - * - * Define the resource table entries for PRU0. This will be - * incorporated into corresponding base images, and used by the remoteproc - * on the host-side to allocated/reserve resources. Note the remoteproc - * driver requires that all PRU firmware be built with a resource table. - * - * - */ - -#ifndef _RSC_TABLE_PRU_H_ -#define _RSC_TABLE_PRU_H_ - -#include <stddef.h> -#include <rsc_types.h> -#include "pru_virtio_ids.h" - -/* - * Sizes of the virtqueues (expressed in number of buffers supported, - * and must be power of 2) - */ -#define PRU_RPMSG_VQ0_SIZE 2 -#define PRU_RPMSG_VQ1_SIZE 2 - -/* flip up bits whose indices represent features we support */ -#define RPMSG_PRU_C0_FEATURES 1 - -/* Definition for unused interrupts */ -#define HOST_UNUSED 255 - -/* Mapping sysevts to a channel. Each pair contains a sysevt, channel */ -struct ch_map pru_intc_map[] = { {17, 1}, {18, 0}, {19, 2}, {20, 3}, {21, 0}, - {22, 1}, {24, 4}, {25, 5}, {26, 6}, {27, 7}, -}; - -struct my_resource_table { - struct resource_table base; - - uint32_t offset[1]; /* Should match 'num' in actual definition */ - - /* intc definition */ - struct fw_rsc_custom pru_ints; -}; - -#pragma DATA_SECTION(am335x_pru_remoteproc_ResourceTable, ".resource_table") -#pragma RETAIN(am335x_pru_remoteproc_ResourceTable) -struct my_resource_table am335x_pru_remoteproc_ResourceTable = { - 1, /* we're the first version that implements this */ - 1, /* number of entries in the table */ - 0, 0, /* reserved, must be zero */ - /* offsets to entries */ - { - offsetof(struct my_resource_table, pru_ints), - }, - - { - TYPE_CUSTOM, TYPE_PRU_INTS, - sizeof(struct fw_rsc_custom_ints), - { /* PRU_INTS version */ - 0x0000, - /* Channel-to-host mapping, 255 for unused */ - 0, 1, 2, 3, 0, 6, 1, 7, HOST_UNUSED, HOST_UNUSED, - /* Number of evts being mapped to channels */ - (sizeof(pru_intc_map) / sizeof(struct ch_map)), - /* Pointer to the structure containing mapped events */ - pru_intc_map, - }, - }, -}; - -#endif /* _RSC_TABLE_PRU_H_ */ diff --git a/books/pru-cookbook/07more/code/setup.sh b/books/pru-cookbook/07more/code/setup.sh deleted file mode 100644 index f1d0d9db..00000000 --- a/books/pru-cookbook/07more/code/setup.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash -# -export TARGET=delay-test.pru0 -export TARGETasm=delay.pru0 -echo TARGET=$TARGET -echo TARGETasm=$TARGETasm - -# Configure the PRU pins based on which Beagle is running -machine=$(awk '{print $NF}' /proc/device-tree/model) -echo -n $machine -if [ $machine = "Black" ]; then - echo " Found" - pins="P9_31" -elif [ $machine = "Blue" ]; then - echo " Found" - pins="" -elif [ $machine = "PocketBeagle" ]; then - echo " Found" - pins="P1_33" -else - echo " Not Found" - pins="" -fi - -for pin in $pins -do - echo $pin - config-pin $pin pruout - config-pin -q $pin -done diff --git a/books/pru-cookbook/07more/code/xin.pru1.c b/books/pru-cookbook/07more/code/xin.pru1.c deleted file mode 100644 index 56d4a682..00000000 --- a/books/pru-cookbook/07more/code/xin.pru1.c +++ /dev/null @@ -1,34 +0,0 @@ -// From: http://git.ti.com/pru-software-support-package/pru-software-support-package/trees/master/examples/am335x/PRU_Direct_Connect1 -#include <stdint.h> -#include "resource_table_empty.h" - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -typedef struct { - uint32_t reg5; - uint32_t reg6; - uint32_t reg7; - uint32_t reg8; - uint32_t reg9; - uint32_t reg10; -} bufferData; - -bufferData dmemBuf; - -/* PRU-to-ARM interrupt */ -#define PRU1_PRU0_INTERRUPT (18) -#define PRU1_ARM_INTERRUPT (20+16) - -void main(void) -{ - /* Let PRU0 know that I am awake */ - __R31 = PRU1_PRU0_INTERRUPT+16; - - /* XFR registers R5-R10 from PRU0 to PRU1 */ - /* 14 is the device_id that signifies a PRU to PRU transfer */ - __xin(14, 5, 0, dmemBuf); - - /* Halt the PRU core */ - __halt(); -} diff --git a/books/pru-cookbook/07more/code/xout-cycle.pru0.c b/books/pru-cookbook/07more/code/xout-cycle.pru0.c deleted file mode 100644 index 339fedfc..00000000 --- a/books/pru-cookbook/07more/code/xout-cycle.pru0.c +++ /dev/null @@ -1,62 +0,0 @@ -// Version of xout.c with code to use CYCLE to count cycle times. -#include <stdint.h> -#include <pru_intc.h> -#include <pru_ctrl.h> -#include "resource_table_pru0.h" - -#define PRU0 - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -typedef struct { - uint32_t reg5; - uint32_t reg6; - uint32_t reg7; - uint32_t reg8; - uint32_t reg9; - uint32_t reg10; -} bufferData; - -bufferData dmemBuf; - -/* PRU-to-ARM interrupt */ -#define PRU1_PRU0_INTERRUPT (18) -#define PRU0_ARM_INTERRUPT (19+16) - -void main(void) -{ - uint32_t cycleXX; // Use a name that's easy to search - /* Clear the status of all interrupts */ - CT_INTC.SECR0 = 0xFFFFFFFF; - CT_INTC.SECR1 = 0xFFFFFFFF; - - /* Load the buffer with default values to transfer */ - dmemBuf.reg5 = 0xDEADBEEF; - dmemBuf.reg6 = 0xAAAAAAAA; - dmemBuf.reg7 = 0x12345678; - dmemBuf.reg8 = 0xBBBBBBBB; - dmemBuf.reg9 = 0x87654321; - dmemBuf.reg10 = 0xCCCCCCCC; - - /* Poll until R31.30 (PRU0 interrupt) is set - * This signals PRU1 is initialized */ - while ((__R31 & (1<<30)) == 0) { - } - - /* XFR registers R5-R10 from PRU0 to PRU1 */ - /* 14 is the device_id that signifies a PRU to PRU transfer */ - PRU0_CTRL.CTRL_bit.CTR_EN = 1; // Enable cycle counter - - __xout(14, 5, 0, dmemBuf); - - cycleXX = PRU0_CTRL.CYCLE; // Read cycle and store in a register - - /* Clear the status of the interrupt */ - CT_INTC.SICR = PRU1_PRU0_INTERRUPT; - - dmemBuf.reg5 = cycleXX; - - /* Halt the PRU core */ - __halt(); -} diff --git a/books/pru-cookbook/07more/code/xout.pru0.c b/books/pru-cookbook/07more/code/xout.pru0.c deleted file mode 100644 index bfcdbf5f..00000000 --- a/books/pru-cookbook/07more/code/xout.pru0.c +++ /dev/null @@ -1,52 +0,0 @@ -// From: http://git.ti.com/pru-software-support-package/pru-software-support-package/trees/master/examples/am335x/PRU_Direct_Connect0 -#include <stdint.h> -#include <pru_intc.h> -#include "resource_table_pru0.h" - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -typedef struct { - uint32_t reg5; - uint32_t reg6; - uint32_t reg7; - uint32_t reg8; - uint32_t reg9; - uint32_t reg10; -} bufferData; - -bufferData dmemBuf; - -/* PRU-to-ARM interrupt */ -#define PRU1_PRU0_INTERRUPT (18) -#define PRU0_ARM_INTERRUPT (19+16) - -void main(void) -{ - /* Clear the status of all interrupts */ - CT_INTC.SECR0 = 0xFFFFFFFF; - CT_INTC.SECR1 = 0xFFFFFFFF; - - /* Load the buffer with default values to transfer */ - dmemBuf.reg5 = 0xDEADBEEF; - dmemBuf.reg6 = 0xAAAAAAAA; - dmemBuf.reg7 = 0x12345678; - dmemBuf.reg8 = 0xBBBBBBBB; - dmemBuf.reg9 = 0x87654321; - dmemBuf.reg10 = 0xCCCCCCCC; - - /* Poll until R31.30 (PRU0 interrupt) is set - * This signals PRU1 is initialized */ - while ((__R31 & (1<<30)) == 0) { - } - - /* XFR registers R5-R10 from PRU0 to PRU1 */ - /* 14 is the device_id that signifies a PRU to PRU transfer */ - __xout(14, 5, 0, dmemBuf); - - /* Clear the status of the interrupt */ - CT_INTC.SICR = PRU1_PRU0_INTERRUPT; - - /* Halt the PRU core */ - __halt(); -} diff --git a/books/pru-cookbook/07more/code/xout_run.sh b/books/pru-cookbook/07more/code/xout_run.sh deleted file mode 100755 index 158cf472..00000000 --- a/books/pru-cookbook/07more/code/xout_run.sh +++ /dev/null @@ -1,3 +0,0 @@ -# Be sure to start PRU 0 before PRU 1. PRU 0 will wait for PRU 1 to signal it. -make TARGET=xout.pru0 -make TARGET=xin.pru1 diff --git a/books/pru-cookbook/08ai/code/Makefile b/books/pru-cookbook/08ai/code/Makefile deleted file mode 100644 index a7557fda..00000000 --- a/books/pru-cookbook/08ai/code/Makefile +++ /dev/null @@ -1 +0,0 @@ -include /var/lib/cloud9/common/Makefile diff --git a/books/pru-cookbook/08ai/code/pwm1.pru2_1.c b/books/pru-cookbook/08ai/code/pwm1.pru2_1.c deleted file mode 100644 index d35f2185..00000000 --- a/books/pru-cookbook/08ai/code/pwm1.pru2_1.c +++ /dev/null @@ -1,24 +0,0 @@ -#include <stdint.h> -#include <pru_cfg.h> -#include "resource_table_empty.h" -#include "prugpio.h" - -#define P9_31 (0x1<<10) - -volatile register uint32_t __R30; -volatile register uint32_t __R31; - -void main(void) -{ - uint32_t gpio = P9_31; // Select which pin to toggle.; - - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - while(1) { - __R30 |= gpio; // Set the GPIO pin to 1 - __delay_cycles(100000000); - __R30 &= ~gpio; // Clear the GPIO pin - __delay_cycles(100000000); - } -} diff --git a/books/pru-cookbook/code b/books/pru-cookbook/code new file mode 160000 index 00000000..155c7a92 --- /dev/null +++ b/books/pru-cookbook/code @@ -0,0 +1 @@ +Subproject commit 155c7a92ca8352a75c97beb7d54ce022220d4f03 -- GitLab