Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00116 #ifndef BOARD_STBRFA1_H
00117 #define BOARD_STBRFA1_H
00118
00120 #if defined(stb128rfa1)
00121 # define BOARD_TYPE (BOARD_STB128RFA1)
00122 # define BOARD_NAME "stb128rfa1"
00123 # define RADIO_TYPE (RADIO_ATMEGA128RFA1_C)
00124 #elif defined(stb256rfr2)
00125 # define BOARD_TYPE (BOARD_STB256RFR2)
00126 # define BOARD_NAME "stb256rfr2"
00127 # define RADIO_TYPE (RADIO_ATMEGA256RFR2)
00128 #endif
00129
00130
00131
00132
00133 #ifndef DEFAULT_SPI_RATE
00134 # define DEFAULT_SPI_RATE (SPI_RATE_1_2)
00135 #endif
00136
00137
00138 #if BOARD_TYPE == BOARD_STB230 || BOARD_TYPE == BOARD_STB230B
00139 # include "base_rdk230.h"
00140 #elif BOARD_TYPE == BOARD_STB128RFA1 || BOARD_TYPE == BOARD_STB256RFR2
00141 # define TRX_RESET_LOW() do { TRXPR &= ~_BV(TRXRST); } while (0)
00142 # define TRX_RESET_HIGH() do { TRXPR |= _BV(TRXRST); } while (0)
00143 # define TRX_SLPTR_LOW() do { TRXPR &= ~_BV(SLPTR); } while (0)
00144 # define TRX_SLPTR_HIGH() do { TRXPR |= _BV(SLPTR); } while (0)
00145 # define TRX_TSTAMP_REG TCNT1
00146 #else
00147 # include "base_rdk2xx.h"
00148 #endif
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166 static inline void hif_mmio_init(void)
00167 {
00168 DDRD |= 0xc0;
00169 PORTD = (PORTD & ~0xc0) | 0x80;
00170
00171 PORTE &= ~0x10;
00172
00173 PORTE |= 0x20;
00174 DDRE |= 0x30;
00175 PORTG &= ~0x04;
00176
00177 DDRG |= 0x04;
00178 }
00179
00180 static inline void hif_usb_write(uint8_t val)
00181 {
00182 DDRB = 0xFF;
00183 PORTB = val;
00184 PORTD = (PORTD & ~0xc0);
00185 __asm volatile("nop");
00186 PORTD = (PORTD & ~0xc0) | 0x80;
00187 DDRB = 0;
00188 PORTB = 0;
00189 }
00190
00191 static inline uint8_t hif_usb_read(void)
00192 {
00193 PORTE |= 0x10;
00194 PORTD = (PORTD & ~0xc0);
00195 PORTE &= ~0x20;
00196 PORTE |= 0x20;
00197 __asm volatile("nop");
00198 uint8_t rv = PINB;
00199 PORTD = (PORTD & ~0xc0) | 0x80;
00200 PORTE &= ~0x10;
00201
00202 return rv;
00203 }
00204
00205
00206 static inline void hif_led_write(uint8_t val)
00207 {
00208 PORTE |= 0x10;
00209 DDRB = 0xFF;
00210 PORTB = val;
00211 PORTD = (PORTD & ~0xc0) | 0x40;
00212 PORTE &= ~0x10;
00213 PORTE |= 0x10;
00214 __asm volatile("nop");
00215 PORTD = (PORTD & ~0xc0) | 0x80;
00216 DDRB = 0;
00217 PORTB = 0;
00218 PORTE &= ~0x10;
00219 }
00220
00221 static inline uint8_t hif_key_read(void)
00222 {
00223 PORTE |= 0x10;
00224 PORTD = (PORTD & ~0xc0) | 0x40;
00225 PORTE &= ~0x20;
00226 PORTE |= 0x20;
00227 __asm volatile("nop");
00228 uint8_t rv = PINB;
00229 PORTD = (PORTD & ~0xc0) | 0x80;
00230 PORTE &= ~0x10;
00231
00232 return rv;
00233 }
00234
00235
00236
00237
00238 #if !defined(USE_RCB_LEDS)
00239
00240
00241 # define LED_SHADOW GPIOR2
00242 # define LED_MASK (0x03)
00243 # define LED_SHIFT (0)
00244 # define LEDS_INVERSE (1)
00245 # define LED_NUMBER (2)
00246
00247 # define LED_INIT()\
00248 do{\
00249 hif_mmio_init(); \
00250 LED_SHADOW = LED_MASK;\
00251 hif_led_write(LED_SHADOW); \
00252 }while(0)
00253
00254 # define LED_SET_VALUE(x) \
00255 do{\
00256 LED_SHADOW = (LED_SHADOW & ~LED_MASK) | ((~x<<LED_SHIFT) & LED_MASK);\
00257 hif_led_write(LED_SHADOW);\
00258 }while(0)
00259
00260 # define LED_GET_VALUE()\
00261 ((~LED_SHADOW & LED_MASK) >> LED_SHIFT)
00262
00263 # define LED_SET(ln)\
00264 do{\
00265 LED_SHADOW &= ~(_BV(ln+LED_SHIFT) & LED_MASK);\
00266 hif_led_write(LED_SHADOW);\
00267 }while(0)
00268
00269 # define LED_CLR(ln)\
00270 do{\
00271 LED_SHADOW |= (_BV(ln+LED_SHIFT) & LED_MASK);\
00272 hif_led_write(LED_SHADOW);\
00273 }while(0)
00274
00275 # define LED_VAL(msk,val)\
00276 do{\
00277 LED_SHADOW &= ~(LED_MASK|(msk<<LED_SHIFT)); \
00278 LED_SHADOW |= ~(val & (LED_MASK|msk));\
00279 hif_led_write(LED_SHADOW);\
00280 }while(0)
00281
00282
00283 # define LED_TOGGLE(ln)\
00284 do{\
00285 LED_SHADOW ^= (_BV(ln+LED_SHIFT) & LED_MASK);\
00286 hif_led_write(LED_SHADOW);\
00287 }while(0)
00288
00289 #else
00290
00291 # define LED_PORT PORTE
00292 # define LED_DDR DDRE
00293 # define LED_MASK (0x1c)
00294 # define LED_SHIFT (2)
00295 # define LEDS_INVERSE (1)
00296 # define LED_NUMBER (3)
00297 #endif
00298
00299 #define PIN_KEY (hif_key_read())
00300 #define MASK_KEY (0x1)
00301 #define SHIFT_KEY (0)
00302 #define INVERSE_KEYS (0)
00303 #define PULLUP_KEYS (0)
00304 #define KEY_INIT hif_mmio_init
00305
00306
00307 #define HIF_TYPE (HIF_FT245)
00308 #define HIF_IO_ENABLE hif_mmio_init
00309 #define HIF_USB_READ() hif_usb_read()
00310 #define HIF_USB_WRITE(x) hif_usb_write(x)
00311 #define HIF_NO_DATA (0x0100)
00312 #define FT245_DDR DDRE
00313 #define FT245_PIN PINE
00314 #define FT245_TXE _BV(6)
00315 #define FT245_RXF _BV(7)
00316 #define FT245_INIT() do { \
00317 FT245_DDR &= ~(FT245_TXE|FT245_RXF);\
00318 } while(0)
00319
00320 #define FT245_TX_IS_BLOCKED() (0 != (FT245_PIN & FT245_TXE))
00321 #define FT245_RX_HAS_DATA() (0 == (FT245_PIN & FT245_RXF))
00322
00323
00324 #define HWTMR_PRESCALE (1)
00325 #define HWTIMER_TICK ((1.0*HWTMR_PRESCALE)/F_CPU)
00326 #define HWTIMER_TICK_NB (0xFFFFUL+1)
00327 #define HWTIMER_REG (TCNT1)
00328 #define TIMER_TICK (HWTIMER_TICK_NB * HWTIMER_TICK)
00329 #define TIMER_POOL_SIZE (4)
00330
00332 #define TIMER_IRQ_vect TIMER1_OVF_vect
00333
00343 # define TIMER_INIT() \
00344 do{ \
00345 TCCR1B |= _BV(CS10); \
00346 TIMSK1 |= _BV(TOIE1); \
00347 }while(0)
00348
00349 #endif