diff --git a/books/pru-cookbook/01case/case.rst b/books/pru-cookbook/01case/case.rst index 0500a5baca1edeb7e144dddbe914c856a7008e30..93f7c7b998762fcabe727f35173f95765910f6f3 100644 --- a/books/pru-cookbook/01case/case.rst +++ b/books/pru-cookbook/01case/case.rst @@ -113,14 +113,14 @@ via the PRU that can be used out of the box. Just run: -.. code-block:: bash +.. code-block:: shell-session bone$ sudo rc_test_servos -f 10 -p 1.5 The ``-f 10`` says to use a frequency of 10 Hz and the ``-p 1.5`` says to set the position to ``1.5``. The range of positions is ``-1.5`` to ``1.5``. Run ``rc_test_servos -h`` to see all the options. -.. code-block:: bash +.. code-block:: shell-session bone$ rc_test_servos -h @@ -229,9 +229,9 @@ Solution The forth encoder can be implemented on the PRU. If you run ``rc_test_encoders_eqep`` on the Blue, you will see the output of encoders E1-E3 which are connected to the eEQP hardware. -.. code-block:: bash +.. code-block:: shell-session - bone$ *rc_test_encoders_eqep* + bone$ rc_test_encoders_eqep Raw encoder positions E1 | E2 | E3 | @@ -288,13 +288,13 @@ Solution The forth encoder is implemented on the PRU and accessed with `sudo rc_test_encoders_pru` .. note:: - This command needs root permission, so the `sudo` is needed. + This command needs root permission, so the `sudo` is needed. The default password is `temppwd`. Here's what you will see -.. code-block:: bash +.. code-block:: shell-session - bone$ *sudo rc_test_encoders_pru* + bone$ sudo rc_test_encoders_pru [sudo] password for debian: Raw encoder position @@ -343,17 +343,17 @@ If you want to be running a newer image, there are instructions on the site for .. _case_installing_beaglelogic: -.. code-block:: bash +.. code-block:: shell-session :caption: Installing BeagleLogic - bone$ *git clone https://github.com/abhishek-kakkar/BeagleLogic* - bone$ *cd BeagleLogic/kernel* - bone$ *mv beaglelogic-00A0.dts beaglelogic-00A0.dts.orig* - bone$ *wget https://gist.githubusercontent.com/abhishek-kakkar/0761ef7b10822cff4b3efd194837f49c/raw/eb2cf6cfb59ff5ccb1710dcd7d4a40cc01cfc050/beaglelogic-00A0.dts* - bone$ *make overlay* - bone$ *sudo cp beaglelogic-00A0.dtbo /lib/firmware/* - bone$ *sudo update-initramfs -u -k \`uname -r`* - bone$ *sudo reboot* + bone$ git clone https://github.com/abhishek-kakkar/BeagleLogic + bone$ cd BeagleLogic/kernel + bone$ mv beaglelogic-00A0.dts beaglelogic-00A0.dts.orig + bone$ wget https://gist.githubusercontent.com/abhishek-kakkar/0761ef7b10822cff4b3efd194837f49c/raw/eb2cf6cfb59ff5ccb1710dcd7d4a40cc01cfc050/beaglelogic-00A0.dts + bone$ make overlay + bone$ sudo cp beaglelogic-00A0.dtbo /lib/firmware/ + bone$ sudo update-initramfs -u -k \`uname -r` + bone$ sudo reboot Once the Bone has rebooted, browse to 192.168.7.2:4000 where you'll see :ref:`case_beaglelogic_capture`. Here you can easily select the sample @@ -386,17 +386,17 @@ logic analyzer on the Bone with no additional hardware needed. The kernel interface makes it easy to control the PRUs through the command line. For example -.. code-block:: bash +.. code-block:: shell-session - bone$ *dd if=/dev/beaglelogic of=mydump bs=1M count=1* + bone$ dd if=/dev/beaglelogic of=mydump bs=1M count=1 will capture a binary dump from the PRUs. The sample rate and number of bits per sample can be controlled through ``/sys/``. -.. code-block:: bash +.. code-block:: shell-session - bone$ *cd /sys/devices/virtual/misc/beaglelogic* - bone$ *ls* + bone$ cd /sys/devices/virtual/misc/beaglelogic + bone$ ls buffers filltestpattern power state uevent bufunitsize lasterror samplerate subsystem dev memalloc sampleunit triggerflags @@ -407,9 +407,9 @@ bits per sample can be controlled through ``/sys/``. You can set the sample rate by simply writing to ``samplerate``. -.. code-block:: bash +.. code-block:: shell-session - bone$ *echo 100000000 > samplerate* + bone$ echo 100000000 > samplerate `sysfs attributes Reference <https://beaglelogic.readthedocs.io/en/latest/sysfs_attributes.html>`_ has more details on configuring via sysfs. @@ -417,9 +417,9 @@ has more details on configuring via sysfs. If you run ``dmesg -Hw`` in another window you can see when a capture is started and stopped. -.. code-block:: bash +.. code-block:: shell-session - bone$ *dmesg -Hw* + bone$ dmesg -Hw [Jul25 08:46] misc beaglelogic: capture started with sample rate=100000000 Hz, sampleunit=1, triggerflags=0 [ +0.086261] misc beaglelogic: capture session ended @@ -583,11 +583,11 @@ explaining how the PRUs get this type of performance. .. _case_e1.31_example: - .. literalinclude:: code/e1.31-test.py + .. literalinclude:: ../code/01start/e1.31-test.py :caption: e1.31-test.py -Example of generating packets to control the NeoPixels :linenos: - :download:`e1.31-test.py <code/e1.31-test.py>` + :download:`e1.31-test.py <../code/01start/e1.31-test.py>` .. TODO document the code @@ -748,10 +748,10 @@ following instructions at https://xlights.org/releases/. Run xLights and you'll see :ref:`case_xlights_setup`. -.. code-block:: bash +.. code-block:: shell-session - host$ *chmod +x xLights-2021.18-x86_64.AppImage* - host$ *./xLights-2021.18-x86_64.AppImage* + host$ chmod +x xLights-2021.18-x86_64.AppImage + host$ ./xLights-2021.18-x86_64.AppImage .. TODO update the figures. @@ -985,7 +985,7 @@ You can `build simpPRU <https://simppru.readthedocs.io/en/latest/install/build/> source, more easily just `install it <https://simppru.readthedocs.io/en/latest/install/install/>`_. On the Beagle run: -.. code-block:: bash +.. code-block:: shell-session bone$ wget https://github.com/VedantParanjape/simpPRU/releases/download/1.4/simppru-1.4-armhf.deb bone$ sudo dpkg -i simppru-1.4-armhf.deb @@ -996,15 +996,15 @@ Now, suppose you wanted to run the `LED blink <https://simppru.readthedocs.io/en/latest/examples/led_blink/>`_ example which is reproduced here. -.. literalinclude:: code/blink.sim +.. literalinclude:: ../code/01start/blink.sim :caption: LED Blink (blink.sim) :linenos: -:download:`blink.sim <code/blink.sim>` +:download:`blink.sim <../code/01start/blink.sim>` Just run simppru -.. code-block:: bash +.. code-block:: shell-session bone$ simppru blink.sim --load Detected TI AM335x PocketBeagle @@ -1019,7 +1019,7 @@ Detected TI AM335x PocketBeagle The +--load+ flag caused the compiled code to be copied to +/lib/firmware+. To start just do: -.. code-block:: bash +.. code-block:: shell-session bone$ cd /dev/remoteproc/pruss-core0/ bone$ ls diff --git a/books/pru-cookbook/02start/start.rst b/books/pru-cookbook/02start/start.rst index d2188dad281e1ea673a93e4c686c0c4424dce9a9..3889fa931a3ef4757e2b94df5d521ca723af9aa3 100644 --- a/books/pru-cookbook/02start/start.rst +++ b/books/pru-cookbook/02start/start.rst @@ -9,8 +9,9 @@ latest software image on your beagle, how to run the Cloud9 IDE and how to blink an LED. If you already have your Beagle and know your way around it, you can find the -code (and the whole book) on the PRU Cookbook github site: -https://github.com/MarkAYoder/PRUCookbook. +code at https://git.beagleboard.org/beagleboard/pru-cookbook-code and book +contents at https://git.beagleboard.org/docs/docs.beagleboard.io under the +books/pru-cookbook directory. Selecting a Beagle ******************** @@ -256,12 +257,12 @@ as shown in :ref:`start_c9_show_home`. If you want to edit files beyond your home directory you can link to the root file system by: -.. code-block:: bash +.. code-block:: shell-session - bone$ *cd* - bone$ *ln -s / root* - bone$ *cd root* - bone$ *ls* + bone$ cd + bone$ ln -s / root + bone$ cd root + bone$ ls bbb-uEnv.txt boot etc ID.txt lost+found mnt opt root sbin sys usr bin dev home lib media nfs-uEnv.txt proc run srv tmp var @@ -322,11 +323,11 @@ is some code that blinks the ``USR3`` LED ten times using the PRU. .. _start_hello: -.. literalinclude:: code/hello.pru0.c +.. literalinclude:: ../code/02start/hello.pru0.c :caption: hello.pru0.c :linenos: -:download:`hello.pru0.c <code/hello.pru0.c>` +:download:`hello.pru0.c <../code/02start/hello.pru0.c>` Later chapters will go into details of how this code works, but if you want to run it right now do the following. diff --git a/books/pru-cookbook/03details/details.rst b/books/pru-cookbook/03details/details.rst index 8052ff0097c648f53ccafde79a4a4d571cf08aa7..6dd6cdddefe28b7a1387198bd11809e45d3f6e83 100644 --- a/books/pru-cookbook/03details/details.rst +++ b/books/pru-cookbook/03details/details.rst @@ -32,15 +32,15 @@ Solution It's all on a GitHub repository. -.. code-block:: bash +.. code-block:: shell-session - bone$ git clone https://github.com/MarkAYoder/PRUCookbook.git + bone$ git clone https://git.beagleboard.org/beagleboard/pru-cookbook-code +.. note:: + #TODO#: The version of code used needs to be noted in the documentation. .. note:: - #TODO#: There needs to be a code-only repo that is validated against the documentation - code to be identical for specific version. The version needs to be noted in the - documentation. + #TODO#: Why is this documented in multiple places? .. _compiling_with_clpru_and_lnkpru: @@ -58,7 +58,7 @@ Solution The PRU compiler and linker are already installed on many images. They are called ``clpru`` and ``lnkpru``. Do the following to see if ``clpru`` is installed. -.. code-block:: bash +.. code-block:: shell-session bone$ which clpru /usr/bin/clpru @@ -69,7 +69,7 @@ They are called ``clpru`` and ``lnkpru``. Do the following to see if ``clpru`` https://elinux.org/Beagleboard:BeagleBoneBlack_Debian#TI_PRU_Code_Generation_Tools to install it. -.. code-block:: bash +.. code-block:: shell-session bone$ sudo apt update bone$ sudo apt install ti-pru-cgt-installer @@ -85,7 +85,7 @@ In fact there are PRU versions of many of the standard code generation tools. code tools ~~~~~~~~~~~ -.. code-block:: bash +.. code-block:: shell-session bone$ ls /usr/bin/*pru /usr/bin/abspru /usr/bin/clistpru /usr/bin/hexpru /usr/bin/ofdpru @@ -109,13 +109,13 @@ Solution Edit ``/boot/uEnv.txt`` and enble pru_rproc by doing the following. -.. code-block:: bash +.. code-block:: shell-session - bone$ *sudo vi /boot/uEnv.txt* + bone$ sudo vi /boot/uEnv.txt Around line 40 you will see: -.. code-block:: bash +.. code-block:: shell-session ###pru_rproc (4.19.x-ti kernel) uboot_overlay_pru=AM335X-PRU-RPROC-4-19-TI-00A0.dtbo @@ -123,7 +123,7 @@ Around line 40 you will see: Uncomment the ``uboot_overlay`` line as shown and then reboot. ``/dev/remoteproc`` should now be there. -.. code-block:: bash +.. code-block:: shell-session bone$ sudo reboot bone$ ls -ls /dev/remoteproc/ @@ -144,15 +144,15 @@ Solution Change to the directory of the code you want to run. -.. code-block:: bash +.. code-block:: shell-session - bone$ cd PRUCookbook/docs/06io/code + bone$ cd pru-cookbook-code/06io bone$ ls gpio.pru0.c Makefile setup.sh Source the setup file. -.. code-block:: bash +.. code-block:: shell-session bone$ source setup.sh TARGET=gpio.pru0 @@ -163,7 +163,7 @@ Source the setup file. Now you are ready to compile and run. This is automated for you in the Makefile -.. code-block:: bash +.. code-block:: shell-session bone$ make /var/lib/cloud9/common/Makefile:28: MODEL=TI_AM335x_BeagleBone_Black,TARGET=gpio.pru0,COMMON=/var/lib/cloud9/common @@ -197,7 +197,7 @@ The file extension ``.pru0`` specifies the number of the PRU you are using You can override the ``TARGET`` on the command line. -.. code-block:: bash +.. code-block:: shell-session bone$ cp gpio.pru0.c gpio.pru1.c bone$ export TARGET=gpio.pru1 @@ -206,7 +206,7 @@ Notice the ``TARGET`` doesn't have the ``.c`` on the end. You can also specify them when running ``make``. -.. code-block:: bash +.. code-block:: shell-session bone$ cp gpio.pru0.c gpio.pru1.c bone$ make TARGET=gpio.pru1 @@ -215,11 +215,11 @@ The setup file also contains instructions to figure out which Beagle you are run and then configure the pins accordingly. -.. literalinclude:: code/gpio_setup.sh +.. literalinclude:: ../code/06io/gpio_setup.sh :caption: gpio_setup.sh :linenos: -:download:`gpio_setup.sh <code/gpio_setup.sh>` +:download:`gpio_setup.sh <../code/06io/gpio_setup.sh>` .. table:: @@ -257,7 +257,7 @@ Solution It's easy, if you already have ``TARGET`` set up: -.. code-block:: bash +.. code-block:: shell-session bone$ make stop - Stopping PRU 0 @@ -272,7 +272,7 @@ is stopped. This assumes ``TARGET`` is set to the PRU you are using. If you want to control the other PRU use: -.. code-block:: bash +.. code-block:: shell-session bone$ cp gpio.pru0.c gpio.pru1.c bone$ make TARGET=gpio.pru1 @@ -304,11 +304,11 @@ It's assumed you already know how Makefiles work. If not, there are many resources online that can bring you up to speed. Here is the local ``Makefile`` used throughout this book. -.. literalinclude:: code/Makefile +.. literalinclude:: ../code/06io/Makefile :caption: Local Makefile :linenos: -:download:`Makefile <code/Makefile>` +:download:`Makefile <../code/06io/Makefile>` Each of the local Makefiles refer to the same standard Makefile. The details of how the Makefile works is beyond the scope of this cookbook. @@ -335,11 +335,11 @@ The ``am57xx_pru.cmd`` does the same for the AI. Both files can be found in ``/var/lib/cloud9/common``. -.. literalinclude:: code/am335x_pru.cmd +.. literalinclude:: ../code/06io/am335x_pru.cmd :caption: am335x_pru.cmd :linenos: -:download:`am335x_pru.cmd <code/am335x_pru.cmd>` +:download:`am335x_pru.cmd <../code/06io/am335x_pru.cmd>` .. TODO does this need updating? @@ -412,7 +412,7 @@ The PRUs appear in the Linux file space at ``/dev/remoteproc/``. Finding the PRUs ~~~~~~~~~~~~~~~~~~~ -.. code-block:: bash +.. code-block:: shell-session bone$ cd /dev/remoteproc/ bone$ ls @@ -420,7 +420,7 @@ Finding the PRUs Or if you are on the AI: -.. code-block:: bash +.. code-block:: shell-session bone$ cd /dev/remoteproc/ bone$ ls @@ -430,7 +430,7 @@ You see there that the AI has two pairs of PRUs, plus a couple of DSPs and other Here we see PRU 0 and PRU 1 in the path. Let's follow PRU 0. -.. code-block:: bash +.. code-block:: shell-session bone$ cd pruss-core0 bone$ ls @@ -439,7 +439,7 @@ Here we see PRU 0 and PRU 1 in the path. Let's follow PRU 0. Here we see the files that control PRU 0. ``firmware`` tells where in ``/lib/firmware`` to look for the code to run on the PRU. -.. code-block:: bash +.. code-block:: shell-session bone$ cat firmware am335x-pru0-fw @@ -464,11 +464,11 @@ everything is already configured for you. If you are on the Black or Pocket you'll need to run the following script. -.. literalinclude:: code/servos_setup.sh +.. literalinclude:: ../code/06io/servos_setup.sh :caption: servos_setup.sh :linenos: -:download:`servos_setup.sh <code/servos_setup.sh>` +:download:`servos_setup.sh <../code/06io/servos_setup.sh>` Discussion ----------- @@ -494,11 +494,11 @@ It depends on which Beagle you are running on. If you are on the AI or Blue, everything is already configured for you. If you are on the Black or Pocket you'll need to run the following script. -.. literalinclude:: code/encoder_setup.sh +.. literalinclude:: ../code/06io/encoder_setup.sh :caption: encoder_setup.sh :linenos: -:download:`encoder_setup.sh <code/encoder_setup.sh>` +:download:`encoder_setup.sh <../code/06io/encoder_setup.sh>` Discussion ----------- diff --git a/books/pru-cookbook/07more/more.rst b/books/pru-cookbook/07more/more.rst index d62996fcad6ae0b0141fbec544c6d5ef70ba63b4..9eec99cdfa71cd9ddce581c6aa10807668dac044 100644 --- a/books/pru-cookbook/07more/more.rst +++ b/books/pru-cookbook/07more/more.rst @@ -43,37 +43,37 @@ constant. Our new ``delay_cycles`` can take a runtime delay value. .. _more_delay-test: -.. literalinclude:: code/delay-test.pru0.c +.. literalinclude:: ../code/07more/delay-test.pru0.c :caption: delay-test.pru0.c :linenos: -:download:`delay-test.pru0.c <code/delay-test.pru0.c>` +:download:`delay-test.pru0.c <../code/07more/delay-test.pru0.c>` :ref:`more_delay` is the assembly code. .. _more_delay: -.. literalinclude:: code/delay.pru0.asm +.. literalinclude:: ../code/07more/delay.pru0.asm :caption: delay.pru0.asm :linenos: -:download:`delay.pru0.asm <code/delay.pru0.asm>` +:download:`delay.pru0.asm <../code/07more/delay.pru0.asm>` The ``Makefile`` has one addition that needs to be made to compile both :ref:`more_delay-test` and :ref:`more_delay`. If you look in the local ``Makefile`` you'll see: .. _more_makefile: -.. literalinclude:: code/Makefile +.. literalinclude:: ../code/07more/Makefile :caption: Makefile :linenos: -:download:`Makefile <code/Makefile>` +:download:`Makefile <../code/07more/Makefile>` This Makefle includes a common Makfile at ``/var/lib/cloud9/common/Makefile``, this the Makefile you need to edit. Edit ``/var/lib/cloud9/common/Makefile`` and go to line 195. -.. code-block:: bash +.. code-block:: shell-session $(GEN_DIR)/%.out: $(GEN_DIR)/%.o *$(GEN_DIR)/$(TARGETasm).o* @mkdir -p $(GEN_DIR) @@ -87,10 +87,10 @@ this addition once you are done with this example since it will break the other The following will compile and run everything. -.. code-block:: bash +.. code-block:: shell-session - bone$ *config-pin P9_31 pruout* - bone$ *make TARGET=delay-test.pru0 TARGETasm=delay.pru0* + bone$ config-pin P9_31 pruout + bone$ make TARGET=delay-test.pru0 TARGETasm=delay.pru0 /var/lib/cloud9/common/Makefile:29: MODEL=TI_AM335x_BeagleBone_Black,TARGET=delay-test.pru0 - Stopping PRU 0 - copying firmware file /tmp/cloud9-examples/delay-test.pru0.out to /lib/firmware/am335x-pru0-fw @@ -166,21 +166,21 @@ Solution .. _more_test2: -.. literalinclude:: code/delay-test2.pru0.c +.. literalinclude:: ../code/07more/delay-test2.pru0.c :caption: delay-test2.pru0.c :linenos: -:download:`delay-test2.pru0.c <code/delay-test2.pru0.c>` +:download:`delay-test2.pru0.c <../code/07more/delay-test2.pru0.c>` :ref:`more_delay2` is the assembly code. .. _more_delay2: -.. literalinclude:: code/delay2.pru0.asm +.. literalinclude:: ../code/07more/delay2.pru0.asm :caption: delay2.pru0.asm :linenos: -:download:`delay2.pru0.asm <code/delay2.pru0.asm>` +:download:`delay2.pru0.asm <../code/07more/delay2.pru0.asm>` An additional feature is shown in line 4 of :ref:`more_delay2`. The ``.cdecls "delay-test2.pru0.c"`` says to include any defines from ``delay-test2.pru0.c`` @@ -206,11 +206,11 @@ many times the PRU stalled fetching an instruction. .. _more_cycle: -.. literalinclude:: code/cycle.pru0.c +.. literalinclude:: ../code/07more/cycle.pru0.c :caption: cycle.pru0.c - Code to count cycles. :linenos: -:download:`cycle.pru0.c <code/cycle.pru0.c>` +:download:`cycle.pru0.c <../code/07more/cycle.pru0.c>` Discission ------------ @@ -244,26 +244,26 @@ You can see where ``cycle`` and ``stall`` are stored by looking into :ref:`more_ .. _more_cycle_list0: -.. literalinclude:: code/cycle.pru0.lst +.. literalinclude:: ../code/07more/cycle.pru0.lst :caption: /tmp/cloud9-examples/cycle.pru0.lst Lines 113..119 :lines: 113-119 :lineno-start: 113 :linenos: -:download:`cycle.pru0.lst <code/cycle.pru0.lst>` +:download:`cycle.pru0.lst <../code/07more/cycle.pru0.lst>` Here the ``LDI32`` instruction loads the address ``0x22000`` into ``r0``. This is the offset to the ``CTRL`` registers. Later in the file we see :ref:`more_cycle_list1`. .. _more_cycle_list1: -.. literalinclude:: code/cycle.pru0.lst +.. literalinclude:: ../code/07more/cycle.pru0.lst :caption: /tmp/cloud9-examples/cycle.pru0.lst Lines 146..152 :lines: 146-152 :lineno-start: 146 :linenos: -:download:`cycle.pru0.lst <code/cycle.pru0.lst>` +:download:`cycle.pru0.lst <../code/07more/cycle.pru0.lst>` The first ``LBBO`` takes the contents of ``r0`` and adds the offset 12 to it and copies 4 bytes @@ -274,10 +274,10 @@ thus ``STALL`` is now in ``r0``. Now fire up **prudebug** and look at those registers. -.. code-block:: bash +.. code-block:: shell-session - bone$ *sudo prudebug* - PRU0> *r* + bone$ sudo prudebug + PRU0> r r r Register info for PRU0 @@ -319,28 +319,28 @@ The ``pass:[__]xout()`` and ``pass:[__]xin()`` intrinsics are able to transfer u .. _more_xout: -.. literalinclude:: code/xout.pru0.c +.. literalinclude:: ../code/07more/xout.pru0.c :caption: xout.pru0.c :linenos: -:download:`xout.pru0.c <code/xout.pru0.c>` +:download:`xout.pru0.c <../code/07more/xout.pru0.c>` PRU 1 waits at line 41 until PRU 0 signals it. :ref:`more_xin` sends an interrupt to PRU 0 and waits for it to send the data. .. _more_xin: -.. literalinclude:: code/xin.pru1.c +.. literalinclude:: ../code/07more/xin.pru1.c :caption: xin.pru1.c :linenos: -:download:`xin.pru1.c <code/xin.pru1.c>` +:download:`xin.pru1.c <../code/07more/xin.pru1.c>` Use ``prudebug`` to see registers R5-R10 are transferred from PRU 0 to PRU 1. -.. code-block:: bash +.. code-block:: shell-session - PRU0> *r* + PRU0> r Register info for PRU0 Control register: 0x00000001 Reset PC:0x0000 STOPPED, FREE_RUN, COUNTER_DISABLED, NOT_SLEEPING, PROC_DISABLED @@ -441,8 +441,8 @@ If you really need speed, considering using ``pass:[__]xout()`` and ``pass:[__]x Copyright ========== -.. literalinclude:: code/copyright.c +.. literalinclude:: ../code/07more/copyright.c :caption: copyright.c :linenos: -:download:`copyright.c <code/copyright.c>` +:download:`copyright.c <../code/07more/copyright.c>` diff --git a/books/pru-cookbook/08ai/ai.rst b/books/pru-cookbook/08ai/ai.rst index d2e055c07bbeb80cc9334210f4db78e3503c589e..9e20784781f0889e626f72beb0390499bf08c660 100644 --- a/books/pru-cookbook/08ai/ai.rst +++ b/books/pru-cookbook/08ai/ai.rst @@ -155,7 +155,7 @@ Solution The ``show-pins.pl`` command does what you want, but you have to set it up first. -.. code-block:: bash +.. code-block:: shell-session bone$ cd ~/bin bone$ ln -s /opt/scripts/device/bone/show-pins.pl . @@ -164,7 +164,7 @@ This creates a symbolic link to the ``show-pins.pl`` command that is rather hidd away. The link is put in the ``bin`` directory which is in the default command ``$PATH``. Now you can run ``show-pins.pl`` from anywhere. -.. code-block:: bash +.. code-block:: shell-session bone$ *show-pins.pl* P9.19a 16 R6 7 fast rx up i2c4_scl @@ -180,7 +180,7 @@ which direction they are set by using ``gpioinfo`` and the chip number. Unfortunately you subtract one from the port number to get the chip number. So ``P8.35b`` is on chip number 2. -.. code-block:: bash +.. code-block:: shell-session bone$ *gpioinfo 2* line 0: unnamed unused *input* active-high @@ -194,7 +194,7 @@ Here we see both (lines 0 and 1) are set to input. Adding ``-v`` gives more details. -.. code-block:: bash +.. code-block:: shell-session bone$ *show-pins.pl -v* ... @@ -210,7 +210,7 @@ Adding ``-v`` gives more details. The best way to use ``show-pins.pl`` is with ``grep``. To see all the pru pins try: -.. code-block:: bash +.. code-block:: shell-session bone$ *show-pins.pl | grep -i pru | sort* P8.13 100 D3 c fast rx pr1_pru1_gpi7 @@ -236,7 +236,7 @@ Problem I want to configure another pin for the PRU, but I get an error. -.. code-block:: bash +.. code-block:: shell-session bone$ *config-pin P9_31 pruout* ERROR: open() for /sys/devices/platform/ocp/ocp:P9_31_pinmux/state failed, No such file or directory @@ -271,14 +271,14 @@ We see that when ``P9_31a`` is set to ``MODE13`` it will be a PRU **out** pin. Next, find which kernel you are running. -.. code-block:: bash +.. code-block:: shell-session bone$ uname -a Linux ai 4.14.108-ti-r131 #1buster SMP PREEMPT Tue Mar 24 19:18:36 UTC 2020 armv7l GNU/Linux I'm running the 4.14 version. Now look in ``/opt/source`` for your kernel. -.. code-block:: bash +.. code-block:: shell-session bone$ cd /opt/source/ bone$ ls @@ -290,7 +290,7 @@ I'm running the 4.14 version. Now look in ``/opt/source`` for your kernel. ``am5729-beagleboneai.dts`` is the file we need to edit. Search for ``P9_31``. You'l see: -.. code-block:: bash +.. code-block:: shell-session :linenos: DRA7XX_CORE_IOPAD(0x36DC, MUX_MODE14) // B13: P9.30: mcasp1_axr10.off // @@ -301,7 +301,7 @@ Change the ``MUX_MODE14`` to ``MUX_MODE13`` for output, or ``MUX_MODE12`` for in Compile and install. The first time will take a while since it recompiles all the dts files. -.. code-block:: bash +.. code-block:: shell-session :linenos: bone$ make @@ -358,11 +358,11 @@ the adapted code. .. _ai_pwm1: -.. literalinclude:: code/pwm1.pru2_1.c +.. literalinclude:: ../code/08ai/pwm1.pru2_1.c :caption: pwm1.pru2_1.c :linenos: -:download:`pwm1.pru2_1.c <code/pwm1.pru2_1.c>` +:download:`pwm1.pru2_1.c <../code/08ai/pwm1.pru2_1.c>` One line 6 ``P9_31`` is defined as ``(0x1:ref:`10)``, which means shift ``1`` over by 10 bits.