annotate include/PRU.h @ 303:421a69d42943 prerelease

Changed BeagleRT -> Bela in defines and thread names; some preliminary mux capelet stuff
author andrewm
date Fri, 27 May 2016 17:40:44 +0100
parents e4392164b458
children ff5f346a293e
rev   line source
andrewm@0 1 /*
andrewm@0 2 * PRU.h
andrewm@0 3 *
andrewm@0 4 * Created on: May 27, 2014
andrewm@0 5 * Author: andrewm
andrewm@0 6 */
andrewm@0 7
andrewm@0 8 #ifndef PRU_H_
andrewm@0 9 #define PRU_H_
andrewm@0 10
andrewm@0 11 #include <stdint.h>
andrewm@45 12 #include <native/intr.h>
giuliomoro@301 13 #include "../include/Bela.h"
andrewm@0 14
andrewm@0 15 class PRU
andrewm@0 16 {
andrewm@0 17 private:
andrewm@0 18 static const unsigned int kPruGPIODACSyncPin;
andrewm@0 19 static const unsigned int kPruGPIOADCSyncPin;
andrewm@0 20 static const unsigned int kPruGPIOTestPin;
andrewm@0 21 static const unsigned int kPruGPIOTestPin2;
andrewm@0 22 static const unsigned int kPruGPIOTestPin3;
andrewm@0 23
andrewm@0 24 public:
andrewm@0 25 // Constructor
giuliomoro@301 26 PRU(BelaContext *input_context);
andrewm@0 27
andrewm@0 28 // Destructor
andrewm@0 29 ~PRU();
andrewm@0 30
andrewm@0 31 // Prepare the GPIO pins needed for the PRU
andrewm@45 32 int prepareGPIO(int include_test_pin, int include_led);
andrewm@0 33
andrewm@0 34 // Clean up the GPIO at the end
andrewm@0 35 void cleanupGPIO();
andrewm@0 36
andrewm@0 37 // Initialise and open the PRU
andrewm@45 38 int initialise(int pru_num, int frames_per_buffer,
andrewm@280 39 int spi_channels, int mux_channels = 0,
andrewm@280 40 bool xenomai_test_pin = false);
andrewm@0 41
andrewm@15 42 // Run the code image in pru_rtaudio_bin.h
giuliomoro@16 43 int start(char * const filename);
andrewm@0 44
andrewm@0 45 // Loop: read and write data from the PRU
andrewm@45 46 void loop(RT_INTR *pru_interrupt, void *userData);
andrewm@0 47
andrewm@0 48 // Wait for an interrupt from the PRU indicate it is finished
andrewm@0 49 void waitForFinish();
andrewm@0 50
andrewm@0 51 // Turn off the PRU when done
andrewm@0 52 void disable();
andrewm@0 53
andrewm@0 54 // For debugging:
andrewm@0 55 void setGPIOTestPin();
andrewm@0 56 void clearGPIOTestPin();
andrewm@0 57
andrewm@0 58 private:
giuliomoro@301 59 BelaContext *context; // Overall settings
andrewm@45 60
andrewm@0 61 int pru_number; // Which PRU we use
andrewm@0 62 bool running; // Whether the PRU is running
andrewm@45 63 bool analog_enabled; // Whether SPI ADC and DAC are used
giuliomoro@19 64 bool digital_enabled; // Whether digital is used
andrewm@0 65 bool gpio_enabled; // Whether GPIO has been prepared
andrewm@0 66 bool led_enabled; // Whether a user LED is enabled
andrewm@303 67 int mux_channels; // How many mux channels are used (if enabled)
andrewm@0 68 bool gpio_test_pin_enabled; // Whether the test pin was also enabled
andrewm@0 69
andrewm@303 70
andrewm@0 71 volatile uint32_t *pru_buffer_comm;
andrewm@0 72 uint16_t *pru_buffer_spi_dac;
andrewm@0 73 uint16_t *pru_buffer_spi_adc;
giuliomoro@19 74 uint32_t *pru_buffer_digital;
andrewm@0 75 int16_t *pru_buffer_audio_dac;
andrewm@0 76 int16_t *pru_buffer_audio_adc;
andrewm@0 77
andrewm@81 78 float *last_analog_out_frame;
andrewm@81 79 uint32_t *digital_buffer0, *digital_buffer1, *last_digital_buffer;
andrewm@81 80
andrewm@0 81 int xenomai_gpio_fd; // File descriptor for /dev/mem for fast GPIO
andrewm@0 82 uint32_t *xenomai_gpio; // Pointer to GPIO registers
andrewm@0 83 };
andrewm@0 84
andrewm@0 85
andrewm@0 86 #endif /* PRU_H_ */