libpruio  0.6.8
Fast and easy Digital/Analog Input/Output for Beaglebones
pruss_toggle.c File Reference

Example: PRUSS GPIO toggling measured speed. More...

#include "stdio.h"
#include "string.h"
#include "libpruio/pruio.h"
#include "libpruio/pruio_pins.h"
#include "libpruio/pruio_prussdrv.h"
Include dependency graph for pruss_toggle.c:

Go to the source code of this file.

Functions

int32 load_firmware (uint32 IRam)
 load firmware to PRU More...
 
int main (int argc, char **argv)
 The main function.
 

Detailed Description

Example: PRUSS GPIO toggling measured speed.

This file contains an example for parallel usage of the other PRUSS. The firmware toggles a GPIO pin at reduced speed. (Maximum is 100 MHz pulse train, we add 4 NOOPs to reduce it to 20 MHz for better measurments.) Find a functional description in section pruss_toggle.

Licence: GPLv3, Copyright 2018-2023 by Thomas{ doT ]Freiherr[ At ]gmx[ DoT }net

Compile by: gcc -Wall -o pruss_toggle pruss_toggle.c -lpruio

Since
0.6.2

Definition in file pruss_toggle.c.

Function Documentation

◆ load_firmware()

int32 load_firmware ( uint32  IRam)

load firmware to PRU

Parameters
IRamThe IRam ID for the PRU to use
Returns
Zero on success, otherwise -1

The instructions are compiled by command

pasm -V3 -c pruss_toggle.p

from source code (named pruss_toggle.p)

.origin 0
  LDI  r0, 0
  LBBO r1, r0, 0, 12 // load parameters in r1 (bitnumber), r2 (counter), r3 (interrupt)
  LDI  r0, 1
  LSL  r1, r0, r1.b0 // generate bit mask

start:
  LOOP finished, r2.w0
  XOR  r30, r30, r1  // togle output, max. 200 MHz toggling
  LDI  r0, 0         // NOOPs here, CAP is only 100 MHz
  LDI  r0, 0         // 1 + 4 x NOOP = 5 cycles
  LDI  r0, 0         // --> 40 MHz toggling frequency
  LDI  r0, 0         // --> 20 MHz pulse train
finished:

  MOV  r31.b0, r3.b0 // send notification to host
  HALT
  JMP start
Since
0.6.2

Definition at line 55 of file pruss_toggle.c.

Here is the call graph for this function:
Here is the caller graph for this function: