ECE497 BeagleBone PRU

From eLinux.org
Revision as of 16:53, 25 October 2012 by Millerap (Talk | contribs)

Jump to: navigation, search

thumb‎ Embedded Linux Class by Mark A. Yoder


Team members: Mark A. Yoder, Bryan Correll, Andrew Miller, Peter Ngo, James Popenhagen

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:

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.




thumb‎ Embedded Linux Class by Mark A. Yoder