Synergia AVR 0.1
|
00001 /* Project info here */ 00002 00003 #include <avr/io.h> 00004 #include <avr/interrupt.h> 00005 #include <util/delay.h> 00006 00007 #include "usart.h" 00008 00009 #define SCK 1 // PB1 00010 #define SDO 2 // PB2 00011 #define SDI 3 // PB3 00012 #define CS 0 // PB0 (NSEL, PB4) 00013 00014 #define NIRQ 0 // PD0 00015 00016 #define HI(x) PORTB |= (1<<(x)) 00017 #define LO(x) PORTB &= ~(1<<(x)) 00018 #define WAIT_NIRQ_LOW() while(PIND & (1<<NIRQ)) 00019 00020 USART0(usb); 00021 00022 void portInit(){ 00023 HI(CS); 00024 HI(SDI); 00025 LO(SCK); 00026 DDRB = (1<<CS)|(1<<SDI)|(1<<SCK); 00027 DDRD = 0; 00028 } 00029 00030 unsigned int writeCmd(unsigned int cmd){ 00031 unsigned char i; 00032 unsigned int recv; 00033 recv = 0; 00034 LO(SCK); 00035 LO(CS); 00036 for(i=0; i<16; i++){ 00037 if(cmd & 0x8000) HI(SDI); 00038 else LO(SDI); 00039 HI(SCK); 00040 recv <<= 1; 00041 if(PINB & (1<<SDO)){ 00042 recv |= 0x0001; 00043 } 00044 00045 LO(SCK); 00046 cmd <<= 1; 00047 } 00048 HI(CS); 00049 return recv; 00050 } 00051 00052 void rfInit(){ 00053 writeCmd(0x80E7); // EL,EF,868band,12.0pF 00054 writeCmd(0x8239); // !er,!ebb,ET,ES,EX,!eb,!ew,DC 00055 writeCmd(0xA640); // frequency select 00056 writeCmd(0xC647); // 4.8kbps 00057 writeCmd(0x94A0); // VDI,FAST,134kHz,0dBm,-103dBm 00058 writeCmd(0xC2AC); // AL,!ml,DIG,DQD4 00059 writeCmd(0xCA81); // FIFO8,SYNC,!ff,DR 00060 writeCmd(0xCED4); // SYNC=2DD4AG 00061 writeCmd(0xC483); // @PWR,NO RSTRIC,!st,!fi,OE,EN 00062 writeCmd(0x9850); // !mp,90kHz,MAX OUT 00063 writeCmd(0xCC17); // OB1ACOB0, LPX,Iddy,CDDIT,CBW0 00064 writeCmd(0xE000); // NOT USED 00065 writeCmd(0xC800); // NOT USED 00066 writeCmd(0xC040); // 1.66MHz,2.2V 00067 } 00068 00069 void rfSend(unsigned char data){ 00070 WAIT_NIRQ_LOW(); 00071 writeCmd(0xB800 + data); 00072 } 00073 00074 void rfSendPackage(){ 00075 usb << "SENDING PACKAGE\n\r"; 00076 writeCmd(0x0000); 00077 rfSend(0xAA); // PREAMBLE 00078 rfSend(0xAA); // PREAMBLE 00079 rfSend(0xAA); // PREAMBLE 00080 rfSend(0x2D); // SYNC 00081 rfSend(0xD4); 00082 00083 // send 16 bytes package 00084 for(int i=0; i<16; i++){ 00085 rfSend(0x30 + i); 00086 } 00087 00088 rfSend(0xAA); // DUMMY 00089 rfSend(0xAA); // DUMMY 00090 rfSend(0xAA); // DUMMY 00091 } 00092 00093 int main(){ 00094 sei(); 00095 asm("cli"); 00096 _delay_ms(1000); 00097 00098 usb << "ALL SYSTEMS GO\n\r"; 00099 00100 portInit(); 00101 rfInit(); 00102 00103 while(1){ 00104 usb << "USART TEST\n\r"; 00105 rfSendPackage(); 00106 _delay_ms(1000); 00107 } 00108 00109 } 00110 00111 00112 00113 00114 00115 00116 00117 00118 00119 00120 00121 00122