2 // Author: Bc. Jiri Kubias <Jiri.kubias@gmail.com>, (C) 2008
4 // Copyright: (c) DCE FEE CTU - Department of Control Engeneering
5 // License: GNU GPL v.2
11 * @author Bc. Jiri Kubias , DCE FEL CTU 2008
13 * @brief Radio register definition and platform specific definitions.
22 //#define ATmega88 ///< Select ATmega88 as master MCU
23 #define LPC ///< Select LPC as master MCU
26 //------------- procesor ATmega88 specific definitons ------------
31 #define IRQ PD2 ///< Inverted , input, ISR request
32 #define CE PD4 ///< slave select , #CE on MC radio
33 #define ATTN PD5 ///< Inverted , output
34 #define RXTXEN PD6 ///< enable RX or TX operations
35 #define RST PD7 ///< Inverted , output
36 #define DD_MOSI PB3 ///< SPI - master output
37 #define DD_MISO PB4 ///< SPI - master input
38 #define DD_SCK PB5 ///< SPI - master clock
42 #define CLR(x) \ ///< clear pin command
43 { PORTD
&= ~(1<<(x
)); }
46 #define SET(x) \ ///< clear pin command
47 { PORTD
|= (1<<(x
)); }
54 #define IRQ 9 ///< P0.9 Inverted , input, ISR request
55 #define CE 7 ///< P0.7 slave select , #CE on MC radio
56 #define ATTN 11 ///< P0.11 Inverted , output
57 #define RXTXEN 8 ///< P0.8 enable RX or TX operations
58 #define RST 12 ///< P0.12 Inverted , output
59 #define MOSI 6 ///< P0.6 SPI - master output
60 #define MISO 5 ///< P0.5 SPI - master input
61 #define SCK 4 ///< P0.4 SPI - master clock
65 { IO0CLR |= (1<<(x)); }
69 { IO0SET |= (1<<(x)); }
74 // ------------------ message definitons ----------------
79 /// Radio message structure
81 uint8_t done
; ///< Send / recieve flag
82 uint8_t error
; ///< error flag - ocured during send or recieveng
83 uint8_t len
; ///< data length t osend (0 to 125)
84 uint8_t data
[25]; ///< data
92 //-------------- MC1319x definitions -----------------------------
95 // SPI read and write mask comands
102 // Recieve buffer register
103 #define RX_PKT_RAM 0x01
105 // Transmit buffer register
106 #define TX_PKT_RAM 0x02
108 // Transmit control register
109 #define TX_PKT_CTL 0x03
110 #define TX_PKT_CTL_RAM2_SELm 15
111 #define TX_PKT_CTL_PKT_LENGHT(x) ( x + 2 )
113 // CCA treshold register
114 #define CCA_THRESH 0x04
117 #define IRQ_MASK 0x05
118 #define IRQ_MASK_ATTNm 0x8000
119 #define IRQ_MASK_RAM_ADDRm 0x1000
120 #define IRQ_MASK_ARB_BUSYm 0x0800
121 #define IRQ_MASK_STRM_DATAm 0x0400
122 #define IRQ_MASK_PPL_LOCKm 0x0200
123 #define IRQ_MASK_ACOMAm 0x0100
124 #define IRQ_MASK_DOZEm 0x0010
125 #define IRQ_MASK_TMR4m 0x0008
126 #define IRQ_MASK_TMR3m 0x0004
127 #define IRQ_MASK_TMR2m 0x0002
128 #define IRQ_MASK_TMR1m 0x0001
131 #define CONTROL_A 0x06
132 #define CONTROL_A_TX_STRMm 0x1000
133 #define CONTROL_A_RX_STRMm 0x0800
134 #define CONTROL_A_CCAm 0x0400
135 #define CONTROL_A_TX_SENTm 0x0200
136 #define CONTROL_A_RX_RCVDm 0x0100
137 #define CONTROL_A_TMR_TRIG_ENm 0x0080
138 #define CONTROL_A_CCA_TYPE1m 0x0020
139 #define CONTROL_A_CCA_TYPE0m 0x0010
140 #define CONTROL_A_CCA_CCAm CONTROL_A_CCA_TYPE0m
141 #define CONTROL_A_CCA_EDm CONTROL_A_CCA_TYPE1m
142 #define CONTROL_A_CCA_XCVR_SEG1m 0x0002
143 #define CONTROL_A_CCA_XCVR_SEG0m 0x0001
144 #define CONTROL_A_CCA_XCVR_IDLEm 0
145 #define CONTROL_A_CCA_XCVR_CCAEDm CONTROL_A_CCA_XCVR_SEG0m
146 #define CONTROL_A_CCA_XCVR_PMRXm CONTROL_A_CCA_XCVR_SEG1m
147 #define CONTROL_A_CCA_XCVR_PMTXm (CONTROL_A_CCA_XCVR_SEG1m | CONTROL_A_CCA_XCVR_SEG0m)
148 #define CONTROL_A_CCA_XCVR_CLRm (CONTROL_A_CCA_XCVR_SEG1m | CONTROL_A_CCA_XCVR_SEG0m)
150 #define CONTROL_B 0x07
151 #define CONTROL_B_TMR_LOADm 0x8000
152 #define CONTROL_B_MISO_HIZ_ENm 0x0800
153 #define CONTROL_B_CLKO_DOZE_ENm 0x0200
154 #define CONTROL_B_TX_DONEm 0x0080
155 #define CONTROL_B_RX_DONEm 0x0040
156 #define CONTROL_B_USE_STM_MODEm 0x0020
157 #define CONTROL_B_HIB_ENm 0x0002
158 #define CONTROL_B_DOZE_ENm 0x0001
160 #define PA_ENABLE 0x08
161 #define PA_ENABLE_PA_ENm 0x8000
163 #define CONTROL_C 0x09
164 #define CONTROL_C_GPIO_ALT_ENm 0x0080
165 #define CONTROL_C_CLKO_ENm 0x0020
166 #define CONTROL_C_TMR_PRESCALE2m 0x0004
167 #define CONTROL_C_TMR_PRESCALE1m 0x0002
168 #define CONTROL_C_TMR_PRESCALE0m 0x0001
170 #define CLKO_CTL 0x0A
171 #define CLKO_CTL_CLKO_RATE2m 0x0004
172 #define CLKO_CTL_CLKO_RATE1m 0x0002
173 #define CLKO_CTL_CLKO_RATE0m 0x0001
174 #define CLKO_CTL_CLKO_16Mm 0x00
175 #define CLKO_CTL_CLKO_8Mm CLKO_CTL_CLKO_RATE0m
176 #define CLKO_CTL_CLKO_4Mm CLKO_CTL_CLKO_RATE1m
177 #define CLKO_CTL_CLKO_2Mm (CLKO_CTL_CLKO_RATE0m | CLKO_CTL_CLKO_RATE1m)
178 #define CLKO_CTL_CLKO_1Mm CLKO_CTL_CLKO_RATE2m
179 #define CLKO_CTL_CLKO_62Km (CLKO_CTL_CLKO_RATE0m | CLKO_CTL_CLKO_RATE2m)
180 #define CLKO_CTL_CLKO_32Km (CLKO_CTL_CLKO_RATE1m | CLKO_CTL_CLKO_RATE2m)
181 #define CLKO_CTL_CLKO_16Km (CLKO_CTL_CLKO_RATE0m | CLKO_CTL_CLKO_RATE1m| CLKO_CTL_CLKO_RATE2m)
183 #define CLKO_CTL_CLKO_ONm 0x01 // additional definition, not in register
184 #define CLKO_CTL_CLKO_OFFm 0x00 // additional definition, not in register
185 #define CLKO_CTL_CLKO_CLRm (CLKO_CTL_CLKO_RATE0m | CLKO_CTL_CLKO_RATE1m| CLKO_CTL_CLKO_RATE2m)
188 #define GPIO_DIR 0x0B // not finished
189 #define GPIO_DATA_OUT 0x0C // not finished
192 #define LO1_INT_DIV 0x0F
193 #define LO1_INT_DIV_CH1 0x95
194 #define LO1_INT_DIV_CH2 0x95
195 #define LO1_INT_DIV_CH3 0x95
196 #define LO1_INT_DIV_CH4 0x96
197 #define LO1_INT_DIV_CH5 0x96
198 #define LO1_INT_DIV_CH6 0x96
199 #define LO1_INT_DIV_CH7 0x97
200 #define LO1_INT_DIV_CH8 0x97
201 #define LO1_INT_DIV_CH9 0x97
202 #define LO1_INT_DIV_CH10 0x98
203 #define LO1_INT_DIV_CH11 0x98
204 #define LO1_INT_DIV_CH12 0x98
205 #define LO1_INT_DIV_CH13 0x99
206 #define LO1_INT_DIV_CH14 0x99
207 #define LO1_INT_DIV_CH15 0x99
208 #define LO1_INT_DIV_CH16 0x9A
212 #define LO1_NUM_CH1 0x5000
213 #define LO1_NUM_CH2 0xA000
214 #define LO1_NUM_CH3 0xF000
215 #define LO1_NUM_CH4 0x4000
216 #define LO1_NUM_CH5 0x9000
217 #define LO1_NUM_CH6 0xE000
218 #define LO1_NUM_CH7 0x3000
219 #define LO1_NUM_CH8 0x8000
220 #define LO1_NUM_CH9 0xD000
221 #define LO1_NUM_CH10 0x2000
222 #define LO1_NUM_CH11 0x7000
223 #define LO1_NUM_CH12 0xC000
224 #define LO1_NUM_CH13 0x1000
225 #define LO1_NUM_CH14 0x6000
226 #define LO1_NUM_CH15 0xB000
227 #define LO1_NUM_CH16 0x0000
230 // channel decimal definiton
248 // channel 802.15.4 definiton
249 #define ZB_CH802_11 ZB_CH1
250 #define ZB_CH802_12 ZB_CH2
251 #define ZB_CH802_13 ZB_CH3
252 #define ZB_CH802_14 ZB_CH4
253 #define ZB_CH802_15 ZB_CH5
254 #define ZB_CH802_16 ZB_CH6
255 #define ZB_CH802_17 ZB_CH7
256 #define ZB_CH802_18 ZB_CH8
257 #define ZB_CH802_19 ZB_CH9
258 #define ZB_CH802_20 ZB_CH10
259 #define ZB_CH802_21 ZB_CH11
260 #define ZB_CH802_22 ZB_CH12
261 #define ZB_CH802_23 ZB_CH13
262 #define ZB_CH802_24 ZB_CH14
263 #define ZB_CH802_25 ZB_CH15
264 #define ZB_CH802_26 ZB_CH16
269 #define PA_LVL 0x12// not finished
271 #define TMR_CMP1_A 0x1B// not finished
272 #define TMR_CMP1_B 0x1C// not finished
274 #define TMR_CMP2_A 0x1D// not finished
275 #define TMR_CMP2_B 0x1E// not finished
277 #define TMR_CMP3_A 0x1F// not finished
278 #define TMR_CMP3_B 0x20// not finished
280 #define TMR_CMP4_A 0x21// not finished
281 #define TMR_CMP4_B 0x22// not finished
283 #define TC2_PRIME 0x23// not finished
285 #define IRQ_STATUS 0x24
286 #define IRQ_STATUS_PLL_LOCK_IRQm 0x8000
287 #define IRQ_STATUS_RAM_ADR_ERRm 0x4000
288 #define IRQ_STATUS_ARB_BUSY_ERRm 0x2000
289 #define IRQ_STATUS_SRTM_DATA_ERRm 0x1000
290 #define IRQ_STATUS_ATTN_IRQm 0x0400
291 #define IRQ_STATUS_DOZE_IRQm 0x0200
292 #define IRQ_STATUS_TMR1_IRQm 0x0100
293 #define IRQ_STATUS_RX_RCVD_IRQm 0x0080
294 #define IRQ_STATUS_TX_SENT_IRQm 0x0040
295 #define IRQ_STATUS_CCA_IRQm 0x0020
296 #define IRQ_STATUS_TMR3_IRQm 0x0010
297 #define IRQ_STATUS_TMR4_IRQm 0x0008
298 #define IRQ_STATUS_TMR2_IRQm 0x0004
299 #define IRQ_STATUS_CCAm 0x0002
300 #define IRQ_STATUS_CRC_VALIDm 0x0001
303 #define RST_IND_RESET_INDm 0x0080
306 #define CURRENT_TIME_A 0x26
307 #define CURRENT_TIME_B 0x27
309 #define GPIO_DATA_IN 0x28 // not finished
311 #define CHIP_ID 0x2C // not finished
313 #define RX_STATUS 0x2D
315 #define TIMESTAMP_A 0x2E
316 #define TIMESTAMP_B 0x2F
318 #define BER_ENABLE 0x30
319 #define BER_ENABLE_BER_EN 0x8000