RocketLogger  1.0
pru.h
Go to the documentation of this file.
1 
5 #ifndef ROCKETLOGGER_H
6 #define ROCKETLOGGER_H
7 
8 
9 // ---------------------------------------------- Includes ----------------------------------------------------------//
10 
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <stdint.h>
14 #include <unistd.h>
15 #include <string.h>
16 #include <errno.h>
17 #include <fcntl.h>
18 #include <ctype.h>
19 #include <termios.h>
20 #include <math.h>
21 #include <time.h>
22 #include <pthread.h>
23 #include <sys/types.h>
24 #include <sys/mman.h>
25 #include <sys/stat.h>
26 #include <sys/time.h>
27 #include <sys/select.h>
28 #include <sys/ipc.h>
29 #include <sys/shm.h>
30 #include <prussdrv.h>
31 #include <pruss_intc_mapping.h>
32 
33 #include "log.h"
34 #include "util.h"
35 #include "types.h"
36 #include "calibration.h"
37 #include "meter.h"
38 #include "file_handling.h"
39 #include "sem.h"
40 #include "web.h"
41 
42 
43 
44 // ---------------------------------------------- ADC DEFINES -------------------------------------------------------//
45 
49 #define WAKEUP 0x02000000
50 #define STANDBY 0x04000000
51 #define RESET 0x06000000
52 #define START 0x08000000
53 #define STOP 0x0A000000
54 #define OFFSETCAL 0x1A000000
55 #define RDATAC 0x10000000
56 #define SDATAC 0x11000000
57 #define RDATA 0x12000000
58 #define RREG 0x20000000
59 #define WREG 0x40000000
60 
64 #define ID 0x00000000
65 #define CONFIG1 0x01000000
66 #define CONFIG2 0x02000000
67 #define CONFIG3 0x03000000
68 #define CH1SET 0x05000000
69 #define CH2SET 0x06000000
70 #define CH3SET 0x07000000
71 #define CH4SET 0x08000000
72 #define CH5SET 0x09000000
73 #define CH6SET 0x0A000000
74 #define CH7SET 0x0B000000
75 #define CH8SET 0x0C000000
76 
80 #define GAIN1 0x1000
81 #define GAIN2 0x2000
82 #define GAIN12 0x6000
83 
87 #define K1 0x0600
88 #define K2 0x0500
89 #define K4 0x0400
90 #define K8 0x0300
91 #define K16 0x0200
92 #define K32 0x0100
93 #define K64 0x0000
94 
98 #define CONFIG1DEFAULT 0x9000
99 #define CONFIG2DEFAULT 0xE000
100 #define CONFIG3DEFAULT 0xE800
101 
102 // ---------------------------------------------- FILES ------------------------------------------------------------//
103 
105 #define MMAP_FILE "/sys/class/uio/uio0/maps/map1/"
106 #define PRU_CODE "/lib/firmware/rocketlogger_spi.bin"
108 
109 // ---------------------------------------------- PRU DEFINES ---------------------------------------------------//
110 
114 #define PRECISION_HIGH 24
115 #define PRECISION_LOW 16
116 
120 #define SIZE_HIGH 4
121 #define SIZE_LOW 2
122 
124 #define PRU_TIMEOUT 3
125 
129 typedef enum pru_state {
130  PRU_OFF = 0,
131  PRU_LIMIT = 1,
133 } rl_pru_state;
134 
136 #define NUMBER_ADC_COMMANDS 12
137 
145  uint32_t precision;
147  uint32_t sample_size;
153  uint32_t buffer_size;
155  uint32_t sample_limit;
157  uint32_t number_commands;
160 };
161 
162 // ---------------------------------------------- FUNCTIONS ------------------------------------------------//
163 
164 void *pru_wait_event(void* voidEvent);
165 int pru_wait_event_timeout(unsigned int event, unsigned int timeout);
166 
168 int pru_init(void);
169 int pru_data_setup(struct pru_data_struct* pru, struct rl_conf* conf, uint32_t avg_factor);
170 
171 int pru_sample(FILE* data, struct rl_conf* conf);
172 
173 void pru_stop(void); // stop pru when in continuous mode (has to be done before close)
174 void pru_close(void);
175 
176 
177 #endif
int pru_wait_event_timeout(unsigned int event, unsigned int timeout)
Definition: pru.c:44
pru_state
Definition: pru.h:129
rl_pru_state state
Current PRU state.
Definition: pru.h:143
#define NUMBER_ADC_COMMANDS
Number of ADC commands.
Definition: pru.h:136
enum pru_state rl_pru_state
Limited sampling mode.
Definition: pru.h:131
Continuous sampling mode.
Definition: pru.h:132
int pru_sample(FILE *data, struct rl_conf *conf)
Definition: pru.c:266
state
Definition: types.h:116
uint32_t buffer_size
Shared buffer size.
Definition: pru.h:153
Definition: types.h:202
uint32_t number_commands
Number of ADC commands to send.
Definition: pru.h:157
void pru_close(void)
Definition: pru.c:582
uint32_t sample_limit
Samples to take (0 for continuous)
Definition: pru.h:155
uint32_t sample_size
Sample size in shared memory.
Definition: pru.h:147
int pru_data_setup(struct pru_data_struct *pru, struct rl_conf *conf, uint32_t avg_factor)
Definition: pru.c:160
uint32_t precision
ADC precision (in bit)
Definition: pru.h:145
int pru_init(void)
Definition: pru.c:139
void pru_set_state(rl_pru_state state)
Definition: pru.c:129
uint32_t buffer0_location
Pointer to shared buffer 0.
Definition: pru.h:149
uint32_t buffer1_location
Pointer to shared buffer 1.
Definition: pru.h:151
uint32_t commands[NUMBER_ADC_COMMANDS]
ADC commands to send.
Definition: pru.h:159
PRU off.
Definition: pru.h:130
void pru_stop(void)
Definition: pru.c:567
void * pru_wait_event(void *voidEvent)
Definition: pru.c:21