Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
cc2500.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2019 Tom van Dijk <tomvand@users.noreply.github.com>
3 *
4 * This code is based on the betaflight cc2500 and FrskyX implementation.
5 * https://github.com/betaflight/betaflight
6 *
7 * This file is part of paparazzi.
8 *
9 * paparazzi is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2, or (at your option)
12 * any later version.
13 *
14 * paparazzi is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with paparazzi; see the file COPYING. If not, write to
21 * the Free Software Foundation, 59 Temple Place - Suite 330,
22 * Boston, MA 02111-1307, USA.
23 */
24
25#ifndef PERIPHERALS_CC2500_H
26#define PERIPHERALS_CC2500_H
27
28void cc2500_init(void);
29
30
31// betaflight/src/main/drivers/rx/rx_cc2500.h @ 0a16f4d on Oct 1, 2018
32
33/*
34 * This file is part of Cleanflight and Betaflight.
35 *
36 * Cleanflight and Betaflight are free software. You can redistribute
37 * this software and/or modify this software under the terms of the
38 * GNU General Public License as published by the Free Software
39 * Foundation, either version 3 of the License, or (at your option)
40 * any later version.
41 *
42 * Cleanflight and Betaflight are distributed in the hope that they
43 * will be useful, but WITHOUT ANY WARRANTY; without even the implied
44 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
45 * See the GNU General Public License for more details.
46 *
47 * You should have received a copy of the GNU General Public License
48 * along with this software.
49 *
50 * If not, see <http://www.gnu.org/licenses/>.
51 */
52
53/*
54 CC2500 SPI drivers
55*/
56
57#pragma once
58
59#include <stdbool.h>
60#include <stdint.h>
61
62//#include "rx/rx_spi.h"
63
64enum {
65 CC2500_00_IOCFG2 = 0x00, // GDO2 output pin configuration
66 CC2500_01_IOCFG1 = 0x01, // GDO1 output pin configuration
67 CC2500_02_IOCFG0 = 0x02, // GDO0 output pin configuration
68 CC2500_03_FIFOTHR = 0x03, // RX FIFO and TX FIFO thresholds
69 CC2500_04_SYNC1 = 0x04, // Sync word, high byte
70 CC2500_05_SYNC0 = 0x05, // Sync word, low byte
71 CC2500_06_PKTLEN = 0x06, // Packet length
72 CC2500_07_PKTCTRL1 = 0x07, // Packet automation control
73 CC2500_08_PKTCTRL0 = 0x08, // Packet automation control
74 CC2500_09_ADDR = 0x09, // Device address
75 CC2500_0A_CHANNR = 0x0A, // Channel number
76 CC2500_0B_FSCTRL1 = 0x0B, // Frequency synthesizer control
77 CC2500_0C_FSCTRL0 = 0x0C, // Frequency synthesizer control
78 CC2500_0D_FREQ2 = 0x0D, // Frequency control word, high byte
79 CC2500_0E_FREQ1 = 0x0E, // Frequency control word, middle byte
80 CC2500_0F_FREQ0 = 0x0F, // Frequency control word, low byte
81 CC2500_10_MDMCFG4 = 0x10, // Modem configuration
82 CC2500_11_MDMCFG3 = 0x11, // Modem configuration
83 CC2500_12_MDMCFG2 = 0x12, // Modem configuration
84 CC2500_13_MDMCFG1 = 0x13, // Modem configuration
85 CC2500_14_MDMCFG0 = 0x14, // Modem configuration
86 CC2500_15_DEVIATN = 0x15, // Modem deviation setting
87 CC2500_16_MCSM2 = 0x16, // Main Radio Cntrl State Machine config
88 CC2500_17_MCSM1 = 0x17, // Main Radio Cntrl State Machine config
89 CC2500_18_MCSM0 = 0x18, // Main Radio Cntrl State Machine config
90 CC2500_19_FOCCFG = 0x19, // Frequency Offset Compensation config
91 CC2500_1A_BSCFG = 0x1A, // Bit Synchronization configuration
92 CC2500_1B_AGCCTRL2 = 0x1B, // AGC control
93 CC2500_1C_AGCCTRL1 = 0x1C, // AGC control
94 CC2500_1D_AGCCTRL0 = 0x1D, // AGC control
95 CC2500_1E_WOREVT1 = 0x1E, // High byte Event 0 timeout
96 CC2500_1F_WOREVT0 = 0x1F, // Low byte Event 0 timeout
97 CC2500_20_WORCTRL = 0x20, // Wake On Radio control
98 CC2500_21_FREND1 = 0x21, // Front end RX configuration
99 CC2500_22_FREND0 = 0x22, // Front end TX configuration
100 CC2500_23_FSCAL3 = 0x23, // Frequency synthesizer calibration
101 CC2500_24_FSCAL2 = 0x24, // Frequency synthesizer calibration
102 CC2500_25_FSCAL1 = 0x25, // Frequency synthesizer calibration
103 CC2500_26_FSCAL0 = 0x26, // Frequency synthesizer calibration
104 CC2500_27_RCCTRL1 = 0x27, // RC oscillator configuration
105 CC2500_28_RCCTRL0 = 0x28, // RC oscillator configuration
106 CC2500_29_FSTEST = 0x29, // Frequency synthesizer cal control
107 CC2500_2A_PTEST = 0x2A, // Production test
108 CC2500_2B_AGCTEST = 0x2B, // AGC test
109 CC2500_2C_TEST2 = 0x2C, // Various test settings
110 CC2500_2D_TEST1 = 0x2D, // Various test settings
111 CC2500_2E_TEST0 = 0x2E, // Various test settings
112
113 // Status registers
114 CC2500_30_PARTNUM = 0x30, // Part number
115 CC2500_31_VERSION = 0x31, // Current version number
116 CC2500_32_FREQEST = 0x32, // Frequency offset estimate
117 CC2500_33_LQI = 0x33, // Demodulator estimate for link quality
118 CC2500_34_RSSI = 0x34, // Received signal strength indication
119 CC2500_35_MARCSTATE = 0x35, // Control state machine state
120 CC2500_36_WORTIME1 = 0x36, // High byte of WOR timer
121 CC2500_37_WORTIME0 = 0x37, // Low byte of WOR timer
122 CC2500_38_PKTSTATUS = 0x38, // Current GDOx status and packet status
123 CC2500_39_VCO_VC_DAC = 0x39, // Current setting from PLL cal module
124 CC2500_3A_TXBYTES = 0x3A, // Underflow and # of bytes in TXFIFO
125 CC2500_3B_RXBYTES = 0x3B, // Overflow and # of bytes in RXFIFO
126
127 // Multi byte memory locations
130 CC2500_3F_RXFIFO = 0x3F
132
133// Definitions for burst/single access to registers
134#define CC2500_WRITE_SINGLE 0x00
135#define CC2500_WRITE_BURST 0x40
136#define CC2500_READ_SINGLE 0x80
137#define CC2500_READ_BURST 0xC0
138
139// Strobe commands
140#define CC2500_SRES 0x30 // Reset chip.
141#define CC2500_SFSTXON \
142 0x31 // Enable and calibrate frequency synthesizer (if MCSM0.FS_AUTOCAL=1).
143 // If in RX/TX: Go to a wait state where only the synthesizer is
144 // running (for quick RX / TX turnaround).
145#define CC2500_SXOFF 0x32 // Turn off crystal oscillator.
146#define CC2500_SCAL 0x33 // Calibrate frequency synthesizer and turn it off
147 // (enables quick start).
148#define CC2500_SRX \
149 0x34 // Enable RX. Perform calibration first if coming from IDLE and
150 // MCSM0.FS_AUTOCAL=1.
151#define CC2500_STX \
152 0x35 // In IDLE state: Enable TX. Perform calibration first if
153 // MCSM0.FS_AUTOCAL=1. If in RX state and CCA is enabled:
154 // Only go to TX if channel is clear.
155#define CC2500_SIDLE \
156 0x36 // Exit RX / TX, turn off frequency synthesizer and exit
157 // Wake-On-Radio mode if applicable.
158#define CC2500_SAFC 0x37 // Perform AFC adjustment of the frequency synthesizer
159#define CC2500_SWOR 0x38 // Start automatic RX polling sequence (Wake-on-Radio)
160#define CC2500_SPWD 0x39 // Enter power down mode when CSn goes high.
161#define CC2500_SFRX 0x3A // Flush the RX FIFO buffer.
162#define CC2500_SFTX 0x3B // Flush the TX FIFO buffer.
163#define CC2500_SWORRST 0x3C // Reset real time clock.
164#define CC2500_SNOP \
165 0x3D // No operation. May be used to pad strobe commands to two
166 // bytes for simpler software.
167//----------------------------------------------------------------------------------
168// Chip Status Byte
169//----------------------------------------------------------------------------------
170
171// Bit fields in the chip status byte
172#define CC2500_STATUS_CHIP_RDYn_BM 0x80
173#define CC2500_STATUS_STATE_BM 0x70
174#define CC2500_STATUS_FIFO_BYTES_AVAILABLE_BM 0x0F
175
176// Chip states
177#define CC2500_STATE_IDLE 0x00
178#define CC2500_STATE_RX 0x10
179#define CC2500_STATE_TX 0x20
180#define CC2500_STATE_FSTXON 0x30
181#define CC2500_STATE_CALIBRATE 0x40
182#define CC2500_STATE_SETTLING 0x50
183#define CC2500_STATE_RX_OVERFLOW 0x60
184#define CC2500_STATE_TX_UNDERFLOW 0x70
185
186//----------------------------------------------------------------------------------
187// Other register bit fields
188//----------------------------------------------------------------------------------
189#define CC2500_LQI_CRC_OK_BM 0x80
190#define CC2500_LQI_EST_BM 0x7F
191
194
195void cc2500ReadRegisterMulti(uint8_t address, uint8_t *data,
196 uint8_t length);
197void cc2500WriteRegisterMulti(uint8_t address, uint8_t *data,
198 uint8_t length);
199
201void cc2500Strobe(uint8_t address);
202void cc2500WriteReg(uint8_t address, uint8_t data);
203void cc2500SetPower(uint8_t power);
204uint8_t cc2500Reset(void);
205
206
207#endif
void cc2500WriteReg(uint8_t address, uint8_t data)
Definition cc2500.c:206
void cc2500ReadFifo(uint8_t *dpbuffer, uint8_t len)
Definition cc2500.c:174
uint8_t cc2500ReadReg(uint8_t reg)
Definition cc2500.c:199
void cc2500ReadRegisterMulti(uint8_t address, uint8_t *data, uint8_t length)
Definition cc2500.c:188
void cc2500WriteRegisterMulti(uint8_t address, uint8_t *data, uint8_t length)
Definition cc2500.c:193
void cc2500WriteFifo(uint8_t *dpbuffer, uint8_t len)
Definition cc2500.c:180
void cc2500Strobe(uint8_t address)
Definition cc2500.c:204
void cc2500_init(void)
Definition cc2500.c:43
uint8_t cc2500Reset(void)
Definition cc2500.c:228
void cc2500SetPower(uint8_t power)
Definition cc2500.c:211
@ CC2500_1B_AGCCTRL2
Definition cc2500.h:92
@ CC2500_1F_WOREVT0
Definition cc2500.h:96
@ CC2500_08_PKTCTRL0
Definition cc2500.h:73
@ CC2500_31_VERSION
Definition cc2500.h:115
@ CC2500_27_RCCTRL1
Definition cc2500.h:104
@ CC2500_1D_AGCCTRL0
Definition cc2500.h:94
@ CC2500_28_RCCTRL0
Definition cc2500.h:105
@ CC2500_2C_TEST2
Definition cc2500.h:109
@ CC2500_03_FIFOTHR
Definition cc2500.h:68
@ CC2500_20_WORCTRL
Definition cc2500.h:97
@ CC2500_13_MDMCFG1
Definition cc2500.h:84
@ CC2500_00_IOCFG2
Definition cc2500.h:65
@ CC2500_17_MCSM1
Definition cc2500.h:88
@ CC2500_23_FSCAL3
Definition cc2500.h:100
@ CC2500_22_FREND0
Definition cc2500.h:99
@ CC2500_16_MCSM2
Definition cc2500.h:87
@ CC2500_38_PKTSTATUS
Definition cc2500.h:122
@ CC2500_2B_AGCTEST
Definition cc2500.h:108
@ CC2500_33_LQI
Definition cc2500.h:117
@ CC2500_3E_PATABLE
Definition cc2500.h:128
@ CC2500_36_WORTIME1
Definition cc2500.h:120
@ CC2500_0A_CHANNR
Definition cc2500.h:75
@ CC2500_12_MDMCFG2
Definition cc2500.h:83
@ CC2500_10_MDMCFG4
Definition cc2500.h:81
@ CC2500_35_MARCSTATE
Definition cc2500.h:119
@ CC2500_18_MCSM0
Definition cc2500.h:89
@ CC2500_1A_BSCFG
Definition cc2500.h:91
@ CC2500_02_IOCFG0
Definition cc2500.h:67
@ CC2500_30_PARTNUM
Definition cc2500.h:114
@ CC2500_0E_FREQ1
Definition cc2500.h:79
@ CC2500_37_WORTIME0
Definition cc2500.h:121
@ CC2500_0C_FSCTRL0
Definition cc2500.h:77
@ CC2500_3F_RXFIFO
Definition cc2500.h:130
@ CC2500_07_PKTCTRL1
Definition cc2500.h:72
@ CC2500_1C_AGCCTRL1
Definition cc2500.h:93
@ CC2500_0B_FSCTRL1
Definition cc2500.h:76
@ CC2500_0F_FREQ0
Definition cc2500.h:80
@ CC2500_04_SYNC1
Definition cc2500.h:69
@ CC2500_25_FSCAL1
Definition cc2500.h:102
@ CC2500_3F_TXFIFO
Definition cc2500.h:129
@ CC2500_3B_RXBYTES
Definition cc2500.h:125
@ CC2500_34_RSSI
Definition cc2500.h:118
@ CC2500_19_FOCCFG
Definition cc2500.h:90
@ CC2500_29_FSTEST
Definition cc2500.h:106
@ CC2500_11_MDMCFG3
Definition cc2500.h:82
@ CC2500_05_SYNC0
Definition cc2500.h:70
@ CC2500_39_VCO_VC_DAC
Definition cc2500.h:123
@ CC2500_32_FREQEST
Definition cc2500.h:116
@ CC2500_21_FREND1
Definition cc2500.h:98
@ CC2500_06_PKTLEN
Definition cc2500.h:71
@ CC2500_2E_TEST0
Definition cc2500.h:111
@ CC2500_3A_TXBYTES
Definition cc2500.h:124
@ CC2500_09_ADDR
Definition cc2500.h:74
@ CC2500_24_FSCAL2
Definition cc2500.h:101
@ CC2500_14_MDMCFG0
Definition cc2500.h:85
@ CC2500_26_FSCAL0
Definition cc2500.h:103
@ CC2500_15_DEVIATN
Definition cc2500.h:86
@ CC2500_01_IOCFG1
Definition cc2500.h:66
@ CC2500_1E_WOREVT1
Definition cc2500.h:95
@ CC2500_2D_TEST1
Definition cc2500.h:110
@ CC2500_2A_PTEST
Definition cc2500.h:107
@ CC2500_0D_FREQ2
Definition cc2500.h:78
uint16_t foo
Definition main_demo5.c:58
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.