altos/cc1200: Adjust bit-sync configuration
[fw/altos] / src / drivers / ao_cc115l.h
1 /*
2  * Copyright © 2013 Keith Packard <keithp@keithp.com>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; version 2 of the License.
7  *
8  * This program is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11  * General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License along
14  * with this program; if not, write to the Free Software Foundation, Inc.,
15  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
16  */
17
18 #ifndef _AO_CC115L_H_
19 #define _AO_CC115L_H_
20
21 #define CC115L_BURST            6
22 #define CC115L_READ             7
23
24 /* Register space */
25 #define CC115L_IOCFG2           0x00    /* GDO2 Output Pin Configuration */
26 #define CC115L_IOCFG1           0x01    /* GDO1 Output Pin Configuration */
27 #define CC115L_IOCFG0           0x02    /* GDO0 Output Pin Configuration */
28
29 #define  CC115L_IOCFG_GPIO1_DS          7
30 #define  CC115L_IOCFG_GPIO_INV          6
31
32 #define  CC115L_IOCFG_GPIO_CFG          0
33 #define  CC115L_IOCFG_GPIO_CFG_TXFIFO_THR       2
34 #define  CC115L_IOCFG_GPIO_CFG_TXFIFO_THR_PKT   3
35 #define  CC115L_IOCFG_GPIO_CFG_TXFIFO_UNDERFLOW 5
36 #define  CC115L_IOCFG_GPIO_CFG_PKT_SYNC_TX      6
37 #define  CC115L_IOCFG_GPIO_CFG_PLL_LOCKED       10
38 #define  CC115L_IOCFG_GPIO_CFG_SERIAL_CLK       11
39 #define  CC115L_IOCFG_GPIO_CFG_SYNC_DATA        12
40 #define  CC115L_IOCFG_GPIO_CFG_ASYNC_DATA       13
41 #define  CC115L_IOCFG_GPIO_CFG_PA_PD            27
42 #define  CC115L_IOCFG_GPIO_CFG_CHIP_RDYn        41
43 #define  CC115L_IOCFG_GPIO_CFG_XOSC_STABLE      43
44 #define  CC115L_IOCFG_GPIO_CFG_HIGHZ            46
45 #define  CC115L_IOCFG_GPIO_CFG_HW_0             47
46 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_1       48
47 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_1_5     49
48 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_2       50
49 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_3       51
50 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_4       52
51 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_6       53
52 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_8       54
53 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_12      55
54 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_16      56
55 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_24      57
56 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_32      58
57 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_48      59
58 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_64      60
59 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_96      61
60 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_128     62
61 #define  CC115L_IOCFG_GPIO_CFG_CLK_XOSC_192     63
62 #define  CC115L_IOCFG_GPIO_CFG_MASK     0x3f
63
64 #define CC115L_FIFOTHR          0x03    /* TX FIFO Thresholds */
65 #define  CC115L_FIFOTHR_THR_MASK        0x0f
66 #define  CC115L_FIFOTHR_THR_61          0
67 #define  CC115L_FIFOTHR_THR_57          1
68 #define  CC115L_FIFOTHR_THR_53          2
69 #define  CC115L_FIFOTHR_THR_49          3
70 #define  CC115L_FIFOTHR_THR_45          4
71 #define  CC115L_FIFOTHR_THR_41          5
72 #define  CC115L_FIFOTHR_THR_37          6
73 #define  CC115L_FIFOTHR_THR_33          7
74 #define  CC115L_FIFOTHR_THR_29          8
75 #define  CC115L_FIFOTHR_THR_25          9
76 #define  CC115L_FIFOTHR_THR_21          10
77 #define  CC115L_FIFOTHR_THR_17          11
78 #define  CC115L_FIFOTHR_THR_13          12
79 #define  CC115L_FIFOTHR_THR_9           13
80 #define  CC115L_FIFOTHR_THR_5           14
81 #define  CC115L_FIFOTHR_THR_1           15
82
83 #define CC115L_SYNC1            0x04    /* Sync Word, High Byte */
84 #define CC115L_SYNC0            0x05    /* Sync Word, Low Byte */
85 #define CC115L_PKTLEN           0x06    /* Packet Length */
86 #define CC115L_PKTCTRL0         0x08    /* Packet Automation Control */
87 #define  CC115L_PKTCTRL0_PKT_FORMAT             4
88 #define  CC115L_PKTCTRL0_PKT_FORMAT_NORMAL              0
89 #define  CC115L_PKTCTRL0_PKT_FORMAT_SYNC_SERIAL         1
90 #define  CC115L_PKTCTRL0_PKT_FORMAT_RANDOM              2
91 #define  CC115L_PKTCTRL0_PKT_FORMAT_ASYNC_SERIAL        3
92 #define  CC115L_PKTCTRL0_PKT_FORMAT_MASK                3
93 #define  CC115L_PKTCTRL0_PKT_CRC_EN             2
94 #define  CC115L_PKTCTRL0_PKT_LENGTH_CONFIG      0
95 #define  CC115L_PKTCTRL0_PKT_LENGTH_CONFIG_FIXED        0
96 #define  CC115L_PKTCTRL0_PKT_LENGTH_CONFIG_VARIABLE     1
97 #define  CC115L_PKTCTRL0_PKT_LENGTH_CONFIG_INFINITE     2
98 #define  CC115L_PKTCTRL0_PKT_LENGTH_CONFIG_MASK         3
99 #define CC115L_CHANNR           0x0a    /* Channel Number */
100 #define CC115L_FSCTRL0          0x0c    /* Frequency Synthesizer Control */
101 #define CC115L_FREQ2            0x0d    /* Frequency Control Word, High Byte */
102 #define CC115L_FREQ1            0x0e    /* Frequency Control Word, Middle Byte */
103 #define CC115L_FREQ0            0x0f    /* Frequency Control Word, Low Byte */
104 #define CC115L_MDMCFG4          0x10    /* Modem Configuration */
105 #define  CC115L_MDMCFG4_DRATE_E                 0
106 #define CC115L_MDMCFG3          0x11    /* Modem Configuration */
107 #define CC115L_MDMCFG2          0x12    /* Modem Configuration */
108 #define  CC115L_MDMCFG2_MOD_FORMAT              4
109 #define  CC115L_MDMCFG2_MOD_FORMAT_2FSK                 0
110 #define  CC115L_MDMCFG2_MOD_FORMAT_GFSK                 1
111 #define  CC115L_MDMCFG2_MOD_FORMAT_OOK                  3
112 #define  CC115L_MDMCFG2_MOD_FORMAT_4FSK                 4
113 #define  CC115L_MDMCFG2_MOD_FORMAT_MASK                 7
114 #define  CC115L_MDMCFG2_MANCHESTER_EN           3
115 #define  CC115L_MDMCFG2_SYNC_MODE               0
116 #define  CC115L_MDMCFG2_SYNC_MODE_NONE                  0
117 #define  CC115L_MDMCFG2_SYNC_MODE_16BITS                1
118 #define  CC115L_MDMCFG2_SYNC_MODE_32BITS                3
119 #define  CC115L_MDMCFG2_SYNC_MODE_MASK                  3
120 #define CC115L_MDMCFG1          0x13    /* Modem Configuration */
121 #define  CC115L_MDMCFG1_NUM_PREAMBLE            4
122 #define  CC115L_MDMCFG1_NUM_PREAMBLE_2                  0
123 #define  CC115L_MDMCFG1_NUM_PREAMBLE_3                  1
124 #define  CC115L_MDMCFG1_NUM_PREAMBLE_4                  2
125 #define  CC115L_MDMCFG1_NUM_PREAMBLE_6                  3
126 #define  CC115L_MDMCFG1_NUM_PREAMBLE_8                  4
127 #define  CC115L_MDMCFG1_NUM_PREAMBLE_12                 5
128 #define  CC115L_MDMCFG1_NUM_PREAMBLE_16                 6
129 #define  CC115L_MDMCFG1_NUM_PREAMBLE_24                 7
130 #define  CC115L_MDMCFG1_NUM_PREAMBLE_MASK               7
131 #define  CC115L_MDMCFG1_CHANSPC_E               0
132 #define CC115L_MDMCFG0          0x14    /* Modem Configuration */
133 #define CC115L_DEVIATN          0x15    /* Modem Deviation Setting */
134 #define  CC115L_DEVIATN_DEVIATION_E             4
135 #define  CC115L_DEVIATN_DEVIATION_E_MASK        7
136 #define  CC115L_DEVIATN_DEVIATION_M             0
137 #define  CC115L_DEVIATN_DEVIATION_M_MASK        7
138 #define CC115L_MCSM1            0x17    /* Main Radio Control State Machine Configuration */
139 #define  CC115L_MCSM1_TXOFF_MODE                0
140 #define  CC115L_MCSM1_TXOFF_MODE_IDLE                   0
141 #define  CC115L_MCSM1_TXOFF_MODE_FSTXON                 1
142 #define  CC115L_MCSM1_TXOFF_MODE_TX                     2
143 #define  CC115L_MCSM1_TXOFF_MODE_MASK                   3
144 #define CC115L_MCSM0            0x18    /* Main Radio Control State Machine Configuration */
145 #define  CC115L_MCSM0_FS_AUTOCAL                4
146 #define  CC115L_MCSM0_FS_AUTOCAL_NEVER                  0
147 #define  CC115L_MCSM0_FS_AUTOCAL_IDLE_TO_TX             1
148 #define  CC115L_MCSM0_FS_AUTOCAL_TX_TO_IDLE             2
149 #define  CC115L_MCSM0_FS_AUTOCAL_4TH_TX_TO_IDLE         3
150 #define  CC115L_MCSM0_FS_AUTOCAL_MASK                   3
151 #define  CC115L_MCSM0_PO_TIMEOUT                2
152 #define  CC115L_MCSM0_PO_TIMEOUT_1                      0
153 #define  CC115L_MCSM0_PO_TIMEOUT_16                     1
154 #define  CC115L_MCSM0_PO_TIMEOUT_64                     2
155 #define  CC115L_MCSM0_PO_TIMEOUT_256                    3
156 #define  CC115L_MCSM0_PO_TIMEOUT_MASK                   3
157 #define  CC115L_MCSM0_XOSC_FORCE_ON             0
158 #define CC115L_RESERVED_0X20    0x20    /* Use setting from SmartRF Studio */
159 #define CC115L_FREND0           0x22    /* Front End TX Configuration */
160 #define CC115L_FSCAL3           0x23    /* Frequency Synthesizer Calibration */
161 #define CC115L_FSCAL2           0x24    /* Frequency Synthesizer Calibration */
162 #define CC115L_FSCAL1           0x25    /* Frequency Synthesizer Calibration */
163 #define CC115L_FSCAL0           0x26    /* Frequency Synthesizer Calibration */
164 #define CC115L_RESERVED_0X29    0x29    /* Use setting from SmartRF Studio */
165 #define CC115L_RESERVED_0X2A    0x2a    /* Use setting from SmartRF Studio */
166 #define CC115L_RESERVED_0X2B    0x2b    /* Use setting from SmartRF Studio */
167 #define CC115L_TEST2            0x2c    /* Various Test Settings */
168 #define CC115L_TEST1            0x2d    /* Various Test Settings */
169 #define CC115L_TEST0            0x2e    /* Various Test Settings */
170
171 /* Status registers (use BURST bit to select these) */
172 #define CC115L_PARTNUM          (0x30|(1<<CC115L_BURST))        /* Part number for CC115L */
173 #define CC115L_VERSION          (0x31|(1<<CC115L_BURST))        /* Current version number */
174 #define CC115L_MARCSTATE        (0x35|(1<<CC115L_BURST))        /* Control state machine state */
175 #define  CC115L_MARCSTATE_MASK          0x1f
176 #define  CC115L_MARCSTATE_SLEEP         0x00
177 #define  CC115L_MARCSTATE_IDLE          0x01
178 #define  CC115L_MARCSTATE_XOFF          0x02
179 #define  CC115L_MARCSTATE_VCOON_MC      0x03
180 #define  CC115L_MARCSTATE_REGON_MC      0x04
181 #define  CC115L_MARCSTATE_MANCAL        0x05
182 #define  CC115L_MARCSTATE_VCOON         0x06
183 #define  CC115L_MARCSTATE_REGON         0x07
184 #define  CC115L_MARCSTATE_STARTCAL      0x08
185 #define  CC115L_MARCSTATE_BWBOOST       0x09
186 #define  CC115L_MARCSTATE_FS_LOCK       0x0a
187 #define  CC115L_MARCSTATE_ENDCAL        0x0c
188 #define  CC115L_MARCSTATE_FSTXON        0x12
189 #define  CC115L_MARCSTATE_TX            0x13
190 #define  CC115L_MARCSTATE_TX_END        0x14
191 #define  CC115L_MARCSTATE_TX_UNDERFLOW  0x16
192 #define CC115L_PKTSTATUS        (0x38|(1<<CC115L_BURST))        /* Current GDOx status and packet status */
193 #define CC115L_TXBYTES          (0x3a|(1<<CC115L_BURST))        /* Underflow and number of bytes in the TX FIFO */
194 #define  CC115L_TXBYTES_TXFIFO_UNDERFLOW        7
195 #define  CC115L_TXBYTES_NUM_TX_BYTES            0
196 #define  CC115L_TXBYTES_NUM_TX_BYTES_MASK               0x7f
197
198 /* Command strobes (no BURST bit for these) */
199 #define CC115L_SRES             0x30
200 #define CC115L_SFSTXON          0x31
201 #define CC115L_SXOFF            0x32
202 #define CC115L_SCAL             0x33
203 #define CC115L_STX              0x35
204 #define CC115L_SIDLE            0x36
205 #define CC115L_SPWD             0x39
206 #define CC115L_SFTX             0x3b
207 #define CC115L_SNOP             0x3d
208
209 #define CC115L_PA               0x3e
210 #define CC115L_FIFO             0x3f
211
212 #define CC115L_FIFO_SIZE        64
213
214 /* Status byte */
215 #define CC115L_STATUS_CHIP_RDY  7
216 #define CC115L_STATUS_STATE     4
217 #define  CC115L_STATUS_STATE_IDLE               0
218 #define  CC115L_STATUS_STATE_TX                 2
219 #define  CC115L_STATUS_STATE_FSTXON             3
220 #define  CC115L_STATUS_STATE_CALIBRATE          4
221 #define  CC115L_STATUS_STATE_SETTLING           5
222 #define  CC115L_STATUS_STATE_TX_FIFO_UNDERFLOW  7
223 #define  CC115L_STATUS_STATE_MASK               7
224
225 #define CC115L_STATUS_FIFO_BYTES_AVAILABLE      0
226 #endif /* _AO_CC115L_H_ */