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
00030
00031
00032
00033
00034
00035 #ifndef BASE_ZDMA1281_H
00036 #define BASE_ZDMA1281_H
00037
00038 #ifndef PB0
00039 # define PB0 (0)
00040 # define PB1 (1)
00041 # define PB2 (2)
00042 # define PB3 (3)
00043 # define PB4 (4)
00044 # define PB5 (5)
00045 # define PB6 (6)
00046 # define PB7 (7)
00047 # define PD4 (4)
00048 #endif
00049
00050 #ifndef DEFAULT_SPI_RATE
00051 # define DEFAULT_SPI_RATE (SPI_RATE_1_2)
00052 #endif
00053
00054
00055
00056 #ifndef RADIO_TYPE
00057 #define RADIO_TYPE (RADIO_AT86RF230)
00058 #endif
00059
00060
00061 #define DDR_TRX_RESET DDRA
00062 #define PORT_TRX_RESET PORTA
00063 #define MASK_TRX_RESET (_BV(7))
00066 #define TRX_RESET_INIT() DDR_TRX_RESET |= MASK_TRX_RESET
00067
00068 #define TRX_RESET_HIGH() PORT_TRX_RESET |= MASK_TRX_RESET
00069
00070 #define TRX_RESET_LOW() PORT_TRX_RESET &= ~MASK_TRX_RESET
00071
00073 #define PORT_TRX_SLPTR PORTB
00074
00075 #define DDR_TRX_SLPTR DDRB
00076
00077 #define MASK_TRX_SLPTR (_BV(PB4))
00078
00080 #define TRX_SLPTR_INIT() DDR_TRX_SLPTR |= MASK_TRX_SLPTR
00081
00082 #define TRX_SLPTR_HIGH() PORT_TRX_SLPTR |= MASK_TRX_SLPTR
00083
00084 #define TRX_SLPTR_LOW() PORT_TRX_SLPTR &= ~MASK_TRX_SLPTR
00085
00086
00087
00090 # define TRX_IRQ _BV(INT5)
00091 # define TRX_IRQ_vect INT5_vect
00092
00097 # define TRX_IRQ_INIT() do{\
00098 EICRB |= (_BV(ISC51)|_BV(ISC50));\
00099 EIFR =TRX_IRQ; \
00100 } while(0)
00101
00103 #define DI_TRX_IRQ() {EIMSK &= ~TRX_IRQ;}
00104
00106 #define EI_TRX_IRQ() {EIMSK |= TRX_IRQ;}
00107
00109 #define TRX_TSTAMP_REG TCNT1
00110
00111
00112 #define DDR_SPI (DDRB)
00113 #define PORT_SPI (PORTB)
00115 #define SPI_MOSI _BV(PB2)
00116 #define SPI_MISO _BV(PB3)
00117 #define SPI_SCK _BV(PB1)
00118 #define SPI_SS _BV(PB0)
00120 #define SPI_DATA_REG SPDR
00126 static inline void SPI_INIT(uint8_t spirate)
00127 {
00128
00129 PORT_SPI |= SPI_SCK | SPI_SS;
00130 DDR_SPI |= SPI_MOSI | SPI_SCK | SPI_SS;
00131 DDR_SPI &= ~SPI_MISO;
00132
00133 SPCR = (_BV(SPE) | _BV(MSTR));
00134
00135 SPCR &= ~(_BV(SPR1) | _BV(SPR0) );
00136 SPSR &= ~_BV(SPI2X);
00137
00138 SPCR |= (spirate & 0x03);
00139 SPSR |= ((spirate >> 2) & 0x01);
00140
00141 }
00142
00144 #define SPI_SELN_LOW() uint8_t sreg = SREG; cli(); PORT_SPI &=~SPI_SS
00145
00146 #define SPI_SELN_HIGH() PORT_SPI |= SPI_SS; SREG = sreg
00147
00148 #define SPI_WAITFOR() do { while((SPSR & _BV(SPIF)) == 0);} while(0)
00149
00150
00151 #endif
00152