forked from ttrftech/NanoVNA
-
Notifications
You must be signed in to change notification settings - Fork 52
/
si4432.h
216 lines (186 loc) · 7.78 KB
/
si4432.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
/* Copyright (c) 2020, Erik Kaashoek [email protected]
* All rights reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* The software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Radio; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street,
* Boston, MA 02110-1301, USA.
*/
#ifndef __SI4432_H__
#define __SI4432_H__
extern uint32_t SI4432_step_delay;
extern uint32_t SI4432_offset_delay;
#ifdef __SI4432__
//
#define MAX_SI4432 2
// #define SI4432_DUMMY 2 // never used
#define SI4432_DEV_TYPE 0x00
#define SI4432_DEV_VERSION 0x01
#define SI4432_DEV_STATUS 0x02
#define SI4432_INT_STATUS1 0x03
#define SI4432_INT_STATUS2 0x04
#define SI4432_INT_ENABLE1 0x05
#define SI4432_INT_ENABLE2 0x06
#define SI4432_STATE 0x07
#define SI4432_OPERATION_CONTROL 0x08
#define Si4432_CRYSTAL_OSC_LOAD_CAP 0x09
#define Si4432_UC_OUTPUT_CLOCK 0x0A
#define SI4432_GPIO0_CONF 0x0B
#define SI4432_GPIO1_CONF 0x0C
#define SI4432_GPIO2_CONF 0x0D
#define SI4432_IOPORT_CONF 0x0E
#define SI4432_IF_FILTER_BW 0x1C
#define SI4432_AFC_LOOP_GEARSHIFT_OVERRIDE 0x1D
#define SI4432_AFC_TIMING_CONTROL 0x1E
#define SI4432_CLOCK_RECOVERY_GEARSHIFT 0x1F
#define SI4432_CLOCK_RECOVERY_OVERSAMPLING 0x20
#define SI4432_CLOCK_RECOVERY_OFFSET2 0x21
#define SI4432_CLOCK_RECOVERY_OFFSET1 0x22
#define SI4432_CLOCK_RECOVERY_OFFSET0 0x23
#define SI4432_CLOCK_RECOVERY_TIMING_GAIN1 0x24
#define SI4432_CLOCK_RECOVERY_TIMING_GAIN0 0x25
#define SI4432_REG_RSSI 0x26
#define SI4432_RSSI_THRESHOLD 0x27
#define SI4432_AFC_LIMITER 0x2A
#define SI4432_AFC_CORRECTION_READ 0x2B
#define Si4432_OOK_COUNTER_VALUE_1 0x2C
#define Si4432_OOK_COUNTER_VALUE_2 0x2D
#define Si4432_SLICER_PEAK_HOLD 0x2E
#define SI4432_DATAACCESS_CONTROL 0x30
#define SI4432_EZMAC_STATUS 0x31
#define SI4432_HEADER_CONTROL1 0x32
#define SI4432_HEADER_CONTROL2 0x33
#define SI4432_PREAMBLE_LENGTH 0x34
#define SI4432_PREAMBLE_DETECTION 0x35
#define SI4432_SYNC_WORD3 0x36
#define SI4432_SYNC_WORD2 0x37
#define SI4432_SYNC_WORD1 0x38
#define SI4432_SYNC_WORD0 0x39
#define SI4432_TRANSMIT_HEADER3 0x3A
#define SI4432_TRANSMIT_HEADER2 0x3B
#define SI4432_TRANSMIT_HEADER1 0x3C
#define SI4432_TRANSMIT_HEADER0 0x3D
#define SI4432_PKG_LEN 0x3E
#define SI4432_CHECK_HEADER3 0x3F
#define SI4432_CHECK_HEADER2 0x40
#define SI4432_CHECK_HEADER1 0x41
#define SI4432_CHECK_HEADER0 0x42
#define SI4432_RECEIVED_HEADER3 0x47
#define SI4432_RECEIVED_HEADER2 0x48
#define SI4432_RECEIVED_HEADER1 0x49
#define SI4432_RECEIVED_HEADER0 0x4A
#define SI4432_RECEIVED_LENGTH 0x4B
#define SI4432_CHARGEPUMP_OVERRIDE 0x58
#define SI4432_DIVIDER_CURRENT_TRIM 0x59
#define SI4432_VCO_CURRENT_TRIM 0x5A
#define SI4432_AGC_OVERRIDE 0x69
#define SI4432_TX_POWER 0x6D
#define SI4432_TX_DATARATE1 0x6E
#define SI4432_TX_DATARATE0 0x6F
#define SI4432_MODULATION_MODE1 0x70
#define SI4432_MODULATION_MODE2 0x71
#define SI4432_FREQ_DEVIATION 0x72
#define SI4432_FREQ_OFFSET1 0x73
#define SI4432_FREQ_OFFSET2 0x74
#define SI4432_FREQBAND 0x75
#define SI4432_FREQCARRIER_H 0x76
#define SI4432_FREQCARRIER_L 0x77
#define SI4432_FREQCHANNEL 0x79
#define SI4432_CHANNEL_STEPSIZE 0x7A
#define SI4432_FIFO 0x7F
extern uint16_t SI4432_Sel; // currently selected SI4432
extern uint8_t SI4432_frequency_changed;
extern uint8_t SI4432_offset_changed;
void SI4432_shiftOutDword(uint32_t buf, uint16_t size);
#define SI4432_Write_Byte(ADR, DATA) {uint32_t temp = (((ADR|0x80)&0xFF)<<0)|(((DATA )&0xFF)<<8); SI4432_shiftOutDword(temp, 2);}
#define SI4432_Write_2_Byte(ADR, DATA1, DATA2) {uint32_t temp = (((ADR|0x80)&0xFF)<<0)|(((DATA1)&0xFF)<<8)|(((DATA2)&0xFF)<<16);SI4432_shiftOutDword(temp, 3);}
#define SI4432_Write_3_Byte(ADR, DATA1, DATA2, DATA3) {uint32_t temp = (((ADR|0x80)&0xFF)<<0)|(((DATA1)&0xFF)<<8)|(((DATA2)&0xFF)<<16)|(((DATA3)&0xFF)<<24);SI4432_shiftOutDword(temp, 4);}
//void SI4432_Write_Byte(uint8_t ADR, uint8_t DATA);
//void SI4432_Write_2_Byte(uint8_t ADR, uint8_t DATA1, uint8_t DATA2);
//void SI4432_Write_3_Byte(uint8_t ADR, uint8_t DATA1, uint8_t DATA2, uint8_t DATA3 );
uint8_t SI4432_Read_Byte(uint8_t ADR);
void SI4432_Transmit(int d);
void SI4432_Receive(void);
void SI4432_Reset(void);
void SI4432_Init(void);
void SI4432_Drive(int);
pureRSSI_t getSI4432_RSSI_correction(void);
pureRSSI_t SI4432_RSSI(uint32_t i, int s, bool break_on_operation);
#ifdef __SIMULATION__
float Simulated_SI4432_RSSI(uint32_t i, int s);
#endif
void SI4432_Set_Frequency ( uint32_t Freq );
uint16_t force_rbw(int i);
uint16_t set_rbw(uint16_t WISH);
void set_calibration_freq(int freq);
#ifdef __FAST_SWEEP__
void SI4432_Fill(int s, int start);
void SI4432_trigger_fill(int s, uint8_t trigger_lvl, int up_direction, int trigger_mode);
#if 0
int SI4432_is_fast_mode(void);
#endif
#endif
#endif
bool PE4302_Write_Byte(unsigned char DATA );
void PE4302_init(void);
#ifdef __ADF4351__
extern ioline_t ADF4351_LE[];
extern int debug;
void ADF4351_Setup(void);
void ADF4351_WriteRegister32(int channel, const uint32_t value);
void ADF4351_Latch(void);
uint64_t ADF4351_set_frequency(int channel, uint64_t freq);
uint64_t ADF4351_prepare_frequency(int channel, uint64_t freq);
//int ADF4351_set_frequency_with_offset(uint32_t freq, int offset, uint8_t drive_strength);
void ADF4351_Set(int channel);
void ADF4351_spur_mode(int S);
void ADF4351_R_counter(int R);
void ADF4351_channel_spacing(int spacing);
void ADF4351_CP(int p);
void ADF4351_drive(int p);
void ADF4351_aux_drive(int p);
void ADF4351_enable(int p);
void ADF4351_enable_aux_out(int p);
int ADF4351_locked(void);
void ADF4350_shift_ref(int f);
//void ADF4351_enable_out(int p);
//void ADF4351_enable(int s);
//void ADF4351_enable_aux_out(int s);
#endif
#ifdef __SI4463__
#include "si446x_defs.h"
#include "si446x.h"
int16_t Si446x_RSSI(bool break_on_operation);
uint8_t getFRR(uint8_t reg);
si446x_state_t getState(void);
void setState(si446x_state_t newState);
extern si446x_info_t SI4463_info;
pureRSSI_t getSI4463_RSSI_correction(void);
void Si446x_getInfo(si446x_info_t* info);
void SI446x_Fill(int s, int start);
void SI446x_trigger_fill(int s, uint8_t trigger_lvl, int up_direction, int trigger_mode);
void SI4463_init(void);
void set_calibration_freq(int freq);
#define ADF4351_LO 3
#define ADF4351_LO2 4
#define SI4463_RX 2
#endif
#ifdef TINYSA4
void enable_extra_lna(int s);
void enable_ultra(int s);
void enable_rx_output(int s);
void enable_high(int s);
void enable_direct(int s);
void enable_ADF_output(int f, int t);
#endif
#endif //__SI4432_H__