149 lines
5.6 KiB
C
149 lines
5.6 KiB
C
|
#define CLOCK_CNTR_ADDR 0x00000000
|
||
|
#define ADC_STATE_ADDR 0x00000004
|
||
|
#define ADC_CNTRL_STR_ADDR 0x00000008
|
||
|
#define ADC_CNTRL_CHANGE 0x0000000C
|
||
|
#define ADC_ADDR 0x00000010
|
||
|
#define ADC_SIZE 0x00000014
|
||
|
#define ADC_SAMPLE_DIVISOR 0x00000018
|
||
|
#define PRU1_NUM_BLOCKS 0x0000001C
|
||
|
#define PRU0_NUM_BLOCKS 0x00000020
|
||
|
#define BLOCK_SIZE_ADDR 0x00000024
|
||
|
|
||
|
|
||
|
#define PRU1_WR_FLAG 0x00000028
|
||
|
#define PRU1_BUFF_COUNT 0x0000002C
|
||
|
#define PRU1_HEAD 0x00000030
|
||
|
#define PRU1_WRAP_COUNT 0x00000034
|
||
|
|
||
|
#define PRU0_WR_FLAG 0x00000038
|
||
|
#define PRU0_BUFF_COUNT 0x0000003C
|
||
|
#define PRU0_HEAD 0x00000040
|
||
|
#define PRU0_WRAP_COUNT 0x00000044
|
||
|
|
||
|
|
||
|
// This map documents pin mapping to the ADS1287, and the associated registers
|
||
|
#define PWDN_B_CH_1_4 r30.t6 // Pin 8.39
|
||
|
#define PWDN_C_CH_1_4 r30.t7 // Pin 8.40
|
||
|
#define PWDN_B_CH_5_8 r30.t4 // Pin 8.41
|
||
|
#define PWDN_D_CH_1_4 r30.t5 // Pin 8.42
|
||
|
#define PWDN_A_CH_5_8 r30.t2 // Pin 8.43
|
||
|
#define PWDN_D_CH_5_8 r30.t3 // Pin 8.44
|
||
|
#define PWDN_A_CH_1_4 r30.t0 // Pin 8.45
|
||
|
#define PWDN_C_CH_5_8 r30.t1 // Pin 8.46
|
||
|
|
||
|
#define DELAY_PULSES 0x10000
|
||
|
|
||
|
// SPI Interface to AD1278 B & D vi PRU1
|
||
|
#define SPI_CLK_B_D_PIN R30.t8 // Pin 8.27
|
||
|
#define SPI_DSR_B_D_PIN R31.t10 // Pin 8.28
|
||
|
#define SPI_DATA_IN_B_D_PIN R31.t11 // Pin 8.30
|
||
|
#define SPI_SYNC_PIN R30.t9 // Pin 8.29
|
||
|
|
||
|
|
||
|
// SPI Interface to AD1278 A & C vi PRU0
|
||
|
#define SPI_CLK_A_C_PIN R30.t1 // Pin 9.29
|
||
|
#define SPI_DSR_A_C_PIN R31.t5 // Pin 9.27
|
||
|
#define SPI_DATA_IN_A_C_PIN R31.t3 // Pin 9.28
|
||
|
|
||
|
#define PWDN_B_1_4_BIT 0x1 // Pin 8.39
|
||
|
#define PWDN_C_1_4_BIT 0x2 // Pin 8.40
|
||
|
#define PWDN_B_5_8_BIT 0x4 // Pin 8.41
|
||
|
#define PWDN_D_1_4_BIT 0x8 // Pin 8.42
|
||
|
#define PWDN_A_5_8_BIT 0x10 // Pin 8.43
|
||
|
#define PWDN_D_5_8_BIT 0x20 // Pin 8.44
|
||
|
#define PWDN_A_1_4_BIT 0x40 // Pin 8.45
|
||
|
#define PWDN_C_5_8_BIT 0x80 // Pin 8.46
|
||
|
|
||
|
|
||
|
// Register Use
|
||
|
// R0 General Purpose / Indexing
|
||
|
// R1 General Purpose
|
||
|
#define CLOCK_COUNT r2 // Clock Counter used to determine SCLOCK frequency
|
||
|
#define RUN_STATE r3 // Run State - can turn off data acq via this
|
||
|
#define ADC_CNTRL_STR r4 // ADC Control string used to enable/disable daq channels and daq
|
||
|
#define ADC_CHNG_FLG r5 // ADC Control Change flag used to indicate a settings change
|
||
|
#define SMPL_BIT_CNTR r6 // Sample bit counter, used to count number of bits read
|
||
|
#define CHAN_BITMASK r7 // Channel bitmask used to append channel in MSB of the sample
|
||
|
#define SHR_MEM_PTR r8 // Pointer to the shared memory buffer used to store data
|
||
|
#define SHR_MEM_SZ r9 // Size of shared memory buffer
|
||
|
#define COUNT r10 // Sample count
|
||
|
#define HEAD r11 // Buffer head
|
||
|
#define TAIL r12 // Buffer Tail
|
||
|
#define PRU_DATA_STRT r13 // We store a pointer to the beginning of buffer space here
|
||
|
#define CURRENT_SAMPLE r14
|
||
|
#define CURRENT_BUF r15 // Current 128K buffer we are writing to (0 - 9)
|
||
|
#define CUR_BUF_ADRS r16 // Memory address of current 128K buffer
|
||
|
#define CUR_BUF_LEFT r17 // This is the amount left of the current buffer in bytes
|
||
|
#define SHR_MEM_START r18 // Address of shared memory region
|
||
|
#define NUM_BLOCKS r19 // Number of 128k blocks we are going to record
|
||
|
#define BUFF_COUNT r20
|
||
|
#define SAMPLE1 r21
|
||
|
#define SAMPLE2 r22
|
||
|
#define SAMPLE3 r23
|
||
|
#define SAMPLE4 r24
|
||
|
#define SAMPLE5 r25
|
||
|
#define SAMPLE6 r26
|
||
|
#define SAMPLE7 r27
|
||
|
#define SAMPLE8 r28
|
||
|
#define WRAP_COUNT r29
|
||
|
// R30 and R31 are input/output registers, do not use for general purpose regs.
|
||
|
|
||
|
|
||
|
#define BUFSIZE 0x20000 // 128K is optimal flash write size for bbone.
|
||
|
#define SHARED_MEM_SIZE 0x100000
|
||
|
#define QUEUE_SIZE 8 // Number of buffers of BUFSIZE in the queue
|
||
|
#define DAQ_FILE_SIZE 2000 // Number of 128k blocks.
|
||
|
//#define DAQ_FILE_SIZE 0x40 // Number of 128k blocks.
|
||
|
|
||
|
#define PRU1_START_OFFSET 0x00000100
|
||
|
#define PRU0_START_OFFSET 0x00100000
|
||
|
|
||
|
#define FULL_COUNT 0x00FFFFFF
|
||
|
|
||
|
#define BUF_HDR_SIZE 32 // 32 Byte header contained at start of 128k buffer
|
||
|
#define SAMPLE_SIZE 24
|
||
|
|
||
|
#define ADS_CONTROL_STRING 0x1FF // Banks A enabled
|
||
|
|
||
|
#define ADS_SAMPLE_DIVISOR 0x1
|
||
|
|
||
|
#define ADS_CLOCKS 0x0E /// Number of instructions to wait between toggling clock high to low.
|
||
|
//#define ADS_CLOCKS 0x6 /// Number of instructions to wait between toggling clock high to low.
|
||
|
|
||
|
#define PRU0_ADC_CONTROL_PRU 0 // PRU 0 controls ADC2 and ADC3
|
||
|
#define PRU1_ADC_CONTROL_PRU 1 // PRU 1 controls power up/down of ads1278 channels, ADC0 and ADC1
|
||
|
|
||
|
#define BYTES_PER_SAMPLE 4
|
||
|
|
||
|
#define ADS_BOARD_ENABLE 0x100
|
||
|
|
||
|
#define ADC_PRU_DATA_SIZE 128
|
||
|
|
||
|
#define INSTRUCTIONS_PER_SAMPLE 0x02509 //Roughly the number of delay count to be equal to one minute
|
||
|
|
||
|
#define OK 1
|
||
|
#define ERR -1
|
||
|
|
||
|
#define MAP_SIZE 0x0FFFFFFF
|
||
|
#define MAP_MASK (MAP_SIZE - 1)
|
||
|
|
||
|
#define MMAP0_LOC "/sys/class/uio/uio0/maps/map0/"
|
||
|
#define MMAP1_LOC "/sys/class/uio/uio0/maps/map1/"
|
||
|
|
||
|
|
||
|
#define PRU0_R31_VEC_VALID 32 // allows notification of program completion
|
||
|
#define PRU_EVTOUT_0 0 // the event number that is sent back
|
||
|
|
||
|
#define STOP 0
|
||
|
#define RUN 1
|
||
|
#define TEST 2
|
||
|
|
||
|
#define CHANGE 1
|
||
|
#define NO_CHANGE 0
|
||
|
|
||
|
#define TRUE 1
|
||
|
#define FALSE 0
|
||
|
|
||
|
#define ENABLED 1
|
||
|
|