Synergia AVR 0.1

receiver/firmware/main.cpp

Go to the documentation of this file.
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 7
00010 #define SDI 6
00011 #define SDO 5
00012 #define CS 4 // NSEL
00013 #define NIRQ 2
00014 
00015 #define HI(x) PORTB |= (1<<(x))
00016 #define LO(x) PORTB &= ~(1<<(x))
00017 #define WAIT_NIRQ_LOW() while(PIND & (1<<NIRQ))
00018 
00019 
00020 USART32(usb);
00021 
00022 void portInit(){
00023         HI(CS);
00024         HI(SDI);
00025         LO(SCK);
00026         DDRB = (1<<CS)|(1<<SDI)|(1<<SCK);
00027         DDRD = (1 << PD6);
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                 
00040             HI(SCK);
00041                 recv <<= 1;
00042                 if(PINB & (1<<SDO)){
00043                         recv |= 0x0001;
00044                 }
00045                 
00046                 LO(SCK);
00047                 cmd <<= 1;
00048         }
00049         HI(CS);
00050         return recv;
00051 }
00052 
00053 void rfInit(){
00054         writeCmd(0x80E7); // EL,EF,868band,12.0pF 
00055         writeCmd(0x8299); // !er,!ebb,ET,ES,EX,!eb,!ew,DC 
00056         writeCmd(0xA640); // frequency select 
00057         writeCmd(0xC647); // 4.8kbps 
00058         writeCmd(0x94A0); // VDI,FAST,134kHz,0dBm,-103dBm 
00059         writeCmd(0xC2AC); // AL,!ml,DIG,DQD4 
00060         writeCmd(0xCA81); // FIFO8,SYNC,!ff,DR 
00061         writeCmd(0xCED4); // SYNC=2DD4AG 
00062         writeCmd(0xC483); // @PWR,NO RSTRIC,!st,!fi,OE,EN 
00063         writeCmd(0x9850); // !mp,90kHz,MAX OUT 
00064         writeCmd(0xCC17); // OB1ACOB0, LPX,Iddy,CDDIT,CBW0 
00065         writeCmd(0xE000); // NOT USED 
00066         writeCmd(0xC800); // NOT USED 
00067         writeCmd(0xC040); // 1.66MHz,2.2V
00068 }
00069 
00070 unsigned char rfRecv(){
00071         unsigned int data;
00072         while(1){
00073                 usb << "rfRecv: ";
00074                 data = writeCmd(0x0000);
00075                 usb << (int)data << '\n' << '\r';
00076                 if ( (data & 0x8000) ) {
00077                         data = writeCmd(0xB000);
00078                         return (data & 0x00FF);
00079                 }
00080         }
00081 }
00082 
00083 void FIFOReset(){
00084         writeCmd(0xCA81);
00085         writeCmd(0xCA83);
00086 }
00087 
00088 void rfSend(unsigned char data){
00089         WAIT_NIRQ_LOW();
00090         writeCmd(0xB800 + data);
00091 }
00092 
00093 void rfSendPackage(){
00094         writeCmd(0x0000);
00095         rfSend(0xAA); // PREAMBLE
00096         rfSend(0xAA); // PREAMBLE
00097         rfSend(0xAA); // PREAMBLE
00098         rfSend(0x2D); // SYNC
00099         rfSend(0xD4);
00100         
00101         // send 16 bytes package
00102         for(int i=0; i<16; i++){
00103                 rfSend(0x30 + i);
00104         }
00105         
00106         rfSend(0xAA); // DUMMY
00107         rfSend(0xAA); // DUMMY
00108         rfSend(0xAA); // DUMMY
00109 }
00110 
00111 int main(){
00112         
00113         sei();
00114         unsigned char data, i;
00115         portInit();
00116         rfInit();
00117         FIFOReset();
00118         
00119         usb << "READY TO GO\n";
00120         
00121         while(1){
00122                 for(i=0; i<16; i++){
00123                         data = rfRecv();
00124                         // usart send
00125                         usb << "data: ";
00126                         usb << data;
00127                         usb << "        num: ";
00128                         usb << (int)data;
00129                         usb << "\n\r";
00130                 }
00131                 FIFOReset();
00132         }
00133 
00134         
00135         return 0;
00136 }
00137 
 All Classes Files Functions Variables Defines