ECE497 BeagleBone PRU
Embedded Linux Class by Mark A. Yoder
Team members: Mark A. Yoder, Bryan Correll, Andrew Miller, Peter Ngo, James Popenhagen
Contents
Executive Summary
Give two sentence intro to the project.
Give two sentences telling what works.
Give two sentences telling what isn't working.
End with a two sentence conclusion.
The sentence count is approximate and only to give an idea of the expected length.
Installation Instructions
Give step by step instructions on how to install your project on the SPEd2 image.
- Include your github path as a link like this: https://github.com/MarkAYoder/gitLearn.
- Include any additional packages installed via opkg.
- Include kernel mods.
- If there is extra hardware needed, include links to where it can be obtained.
User Instructions
Always run the following before doing anything with the PRU:
beagle$ modprobe uio_pruss
Building and Running the GPIO_PWM_PRU Example
This example is located in the GPIO_PWM_PRU directory in the AM335x_PRU_BeagleBone git repository, and can be pulled with the following:
git clone git://github.com/millerap/AM335x_PRU_BeagleBone
This example uses the gpio and delay loops to approximate a PWM using the user LEDs on the BeagleBone. It is based on an example provided by Lyren Brown and documented by boxysean at
http://blog.boxysean.com/2012/08/12/first-steps-with-the-beaglebone-pru/
In GPIO_PWM_PRU all of the complicated Makefiles and directories used to make a multitude of examples at once have been stripped away to allow the user to compile one individual program that will run on the PRU.
The readme.txt file in the GPIO_PWM_PRU directory provides a walkthrough for compiling and running blinker on the BeagleBone.
The first step to compiling a program for the PRU is to make sure prussdrv.c is made and up to date. This is the file provided by TI that contains all of the C functions that allow for communication with the PRU. To do this, do the following:
cd <directory>/AM335x_PRU_BeagleBone/GPIO_PWM_PRU/interface make CROSS_COMPILE=""
CROSS_COMPILE is specified as "" because this is running on the BeagleBone itself and the Makefile is setup to defaultly cross compile the code from another linux machine.
Once this is completed, the pasm_source must be set for the BeagleBone's linux operating system:
cd ../utils/pasm_source ./linuxbuild
Note: The above instructions need to be done for every time the BeagleBone boots up and these directories should be included with any code that you write for the PRU
Now, the BeagleBone is ready to compile the example code. Navigate to the example's root directory again:
cd ../../ make CROSS_COMPILE=""
This will compile the blinker.c file and output it to the bin folder. After this point, the assembly file needs to be compiled into a .bin file. This is done in the bin folder.
cd bin make
Now, there should be a blinker.bin file in the folder. running the blinker executabile will put the blinker.bin file on the PRU and start it running. Use the following:
./blinker
How it Works
//in the overview talk about the period being 5ns
Registers r5 and r6 are the duty_cycle and period respectively. The duty_cycle is a number smaller than the period that the accumulator r4 counts up to before setting the output to zero. When the r4 = period, r4 resets and the output is set to 1. This gives a very nearly even number of instructions for OnTime and OffTime.
SecondsPerCycle = 5*10^-9 OnCycles = 2 + (duty_cycle)*3 + 2 OffCycles = 2 + (period - duty_cycle)*3 - 1 + 2 TotalCycles = 7 + (period)*3
Highlights
Here is where you brag about what your project can do.
Include a YouTube demo.
Theory of Operation
Give a high level overview of the structure of your software. Are you using GStreamer? Show a diagram of the pipeline. Are you running multiple tasks? Show what they do and how they interact.
Work Breakdown
Milestones
10/22: We should have all research done. Update documentation with every Milestone.
10/26: We should be able to show something, an example or simple implementation.
10/29: Ability to send different lengths to turn on an LEDs.
10/31: Ability to send different lengths to multiple LEDs.
11/2: We should be able to demo our overall work, possibly have some things to fix before presentation.
11/4: Finalize presentation
11/6: Presentation
Research
Most of our research has come from internet resources listed below:
- TI PRU Resources
- Example for Running Code on the PRU
- PRU Assembly Instructions
- Initializing PRU in C
- AM335X Datasheet
Future Work
Suggest addition things that could be done with this project.
Conclusions
Give some concluding thoughts about the project. Suggest some future additions that could make it even more interesting.
Embedded Linux Class by Mark A. Yoder