i2c working version

Dependencies:   mbed-rtos mbed

Committer:
sakthipriya
Date:
Thu Apr 09 22:44:39 2015 +0000
Revision:
0:7882d03f59e2
i2c working version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sakthipriya 0:7882d03f59e2 1 //switch off the sync!!!!!!!
sakthipriya 0:7882d03f59e2 2 //switch off the preamble!!!!!!!
sakthipriya 0:7882d03f59e2 3 /*for crc in tx:
sakthipriya 0:7882d03f59e2 4 regIrq2(0x28) :
sakthipriya 0:7882d03f59e2 5
sakthipriya 0:7882d03f59e2 6 regpacketconfig 1(0x37) :
sakthipriya 0:7882d03f59e2 7 set crc detection/calc. on : | 0x10
sakthipriya 0:7882d03f59e2 8 crcautoclearoff : | 0x08
sakthipriya 0:7882d03f59e2 9
sakthipriya 0:7882d03f59e2 10 for data whitening : regpacketconfig 1(0x37) :| 0x40
sakthipriya 0:7882d03f59e2 11 for
sakthipriya 0:7882d03f59e2 12
sakthipriya 0:7882d03f59e2 13
sakthipriya 0:7882d03f59e2 14
sakthipriya 0:7882d03f59e2 15 */
sakthipriya 0:7882d03f59e2 16 // 6CC000 for 435 MHz
sakthipriya 0:7882d03f59e2 17 //set all values as FF for checking on spectrum analyzer
sakthipriya 0:7882d03f59e2 18 #include "beacon.h"
sakthipriya 0:7882d03f59e2 19 #include "HK.h"
sakthipriya 0:7882d03f59e2 20 Serial chavan(USBTX, USBRX); // tx, rx
sakthipriya 0:7882d03f59e2 21 SPI spi(PTD6,PTD7,PTD5); // mosi, miso, sclk
sakthipriya 0:7882d03f59e2 22 //DigitalOut cs_bar(PTC11); //slave select or chip select
sakthipriya 0:7882d03f59e2 23 DigitalOut cs_bar(PIN6); //slave select or chip select
sakthipriya 0:7882d03f59e2 24
sakthipriya 0:7882d03f59e2 25 //InterruptIn button(p9);
sakthipriya 0:7882d03f59e2 26 //#define TIMES 16
sakthipriya 0:7882d03f59e2 27 //Timer t;
sakthipriya 0:7882d03f59e2 28
sakthipriya 0:7882d03f59e2 29 /*void interrupt_func()
sakthipriya 0:7882d03f59e2 30 {
sakthipriya 0:7882d03f59e2 31 chavan.printf("INTERRUPT_FUNC TRIGGERED\n wait for 3 secs\n");
sakthipriya 0:7882d03f59e2 32 wait(3);
sakthipriya 0:7882d03f59e2 33
sakthipriya 0:7882d03f59e2 34 }*/
sakthipriya 0:7882d03f59e2 35
sakthipriya 0:7882d03f59e2 36 extern ShortBeacy Shortbeacon;
sakthipriya 0:7882d03f59e2 37 void writereg(uint8_t reg,uint8_t val)
sakthipriya 0:7882d03f59e2 38 {
sakthipriya 0:7882d03f59e2 39 cs_bar = 0;
sakthipriya 0:7882d03f59e2 40 spi.write(reg | 0x80);
sakthipriya 0:7882d03f59e2 41 spi.write(val);
sakthipriya 0:7882d03f59e2 42 cs_bar = 1;
sakthipriya 0:7882d03f59e2 43 }
sakthipriya 0:7882d03f59e2 44 uint8_t readreg(uint8_t reg)
sakthipriya 0:7882d03f59e2 45 {
sakthipriya 0:7882d03f59e2 46 uint8_t val;
sakthipriya 0:7882d03f59e2 47 cs_bar = 0;
sakthipriya 0:7882d03f59e2 48 spi.write(reg & ~0x80);
sakthipriya 0:7882d03f59e2 49 val = spi.write(0);
sakthipriya 0:7882d03f59e2 50 cs_bar = 1;
sakthipriya 0:7882d03f59e2 51 return val;
sakthipriya 0:7882d03f59e2 52 }
sakthipriya 0:7882d03f59e2 53
sakthipriya 0:7882d03f59e2 54 void FUNC_BEA() {
sakthipriya 0:7882d03f59e2 55
sakthipriya 0:7882d03f59e2 56 //button.rise(&interrupt_func); //interrupt enabled ( rising edge of pin 9)
sakthipriya 0:7882d03f59e2 57 printf("\n\rBeacon function entered\n\r");
sakthipriya 0:7882d03f59e2 58 wait(0.02); //takes 10 ms for POR event + 10ms for safety
sakthipriya 0:7882d03f59e2 59
sakthipriya 0:7882d03f59e2 60 uint8_t byte_counter = 0;
sakthipriya 0:7882d03f59e2 61
sakthipriya 0:7882d03f59e2 62 /*struct Short_beacon{
sakthipriya 0:7882d03f59e2 63 uint8_t Voltage[1];
sakthipriya 0:7882d03f59e2 64 uint8_t AngularSpeed[2];
sakthipriya 0:7882d03f59e2 65 uint8_t SubsystemStatus[1];
sakthipriya 0:7882d03f59e2 66 uint8_t Temp[3];
sakthipriya 0:7882d03f59e2 67 uint8_t ErrorFlag[1];
sakthipriya 0:7882d03f59e2 68 }Shortbeacon = { {0x22}, {0x22, 0x33} , {0x00},{0x00,0x00,0x00}, {0xFE} };
sakthipriya 0:7882d03f59e2 69 */
sakthipriya 0:7882d03f59e2 70 //filling hk data
sakthipriya 0:7882d03f59e2 71 //ShortBeacon Shortbeacon;
sakthipriya 0:7882d03f59e2 72 uint8_t short_beacon[] = { 0xAB, 0x8A, 0xE2, 0xBB, 0xB8, 0xA2, 0x8E,Shortbeacon.Voltage[0],Shortbeacon.AngularSpeed[0], Shortbeacon.AngularSpeed[1],Shortbeacon.SubsystemStatus[0],Shortbeacon.Temp[0],Shortbeacon.Temp[1],Shortbeacon.Temp[2],Shortbeacon.ErrorFlag[0]};
sakthipriya 0:7882d03f59e2 73
sakthipriya 0:7882d03f59e2 74 //mask
sakthipriya 0:7882d03f59e2 75 //uint8_t mask[] = {0x80, 0x40, 0x20,0x10,0x8,0x4,0x2,0x1};
sakthipriya 0:7882d03f59e2 76
sakthipriya 0:7882d03f59e2 77 for(int i = 0; i < 15 ; i++)
sakthipriya 0:7882d03f59e2 78 {
sakthipriya 0:7882d03f59e2 79 chavan.printf("0x%X\n\r",(short_beacon[i]));
sakthipriya 0:7882d03f59e2 80 }
sakthipriya 0:7882d03f59e2 81
sakthipriya 0:7882d03f59e2 82 spi.format(8,0);
sakthipriya 0:7882d03f59e2 83 spi.frequency(10000000); //10MHz SCLK frequency(its max for rfm69hcw)
sakthipriya 0:7882d03f59e2 84 cs_bar = 1; // Chip must be deselected
sakthipriya 0:7882d03f59e2 85
sakthipriya 0:7882d03f59e2 86 //initialization
sakthipriya 0:7882d03f59e2 87 //Common configuration registers
sakthipriya 0:7882d03f59e2 88 writereg(0x01,0x04); //sequencer on,standby mode
sakthipriya 0:7882d03f59e2 89 writereg(0x02,0x08); //packet-mode used , ook modultion , no dc-shaping
sakthipriya 0:7882d03f59e2 90 writereg(0x03,0x68); //1200bps datarate
sakthipriya 0:7882d03f59e2 91 writereg(0x04,0x2B); //1200bps datarate
sakthipriya 0:7882d03f59e2 92 writereg(0x07,0x6C); //Frequency MSB
sakthipriya 0:7882d03f59e2 93 writereg(0x08,0xC0); //Frequency MID
sakthipriya 0:7882d03f59e2 94 writereg(0x09,0x00); //Frequency LSB ....6C C0 00 for 435 MHZ
sakthipriya 0:7882d03f59e2 95
sakthipriya 0:7882d03f59e2 96 //Transmitter registers
sakthipriya 0:7882d03f59e2 97 // RegPaLevel(default +13 dBm)
sakthipriya 0:7882d03f59e2 98
sakthipriya 0:7882d03f59e2 99 //IRQ and Pin Mapping Registers
sakthipriya 0:7882d03f59e2 100 //no DIO mapped yet
sakthipriya 0:7882d03f59e2 101 //regirq1(0x27): modeready (8th bit) will be checked for interrupts
sakthipriya 0:7882d03f59e2 102 //regIrq2(0x28): fifothresh (5th bit) ,packetsent(3rd bit) will be checked for interrupts
sakthipriya 0:7882d03f59e2 103
sakthipriya 0:7882d03f59e2 104 //Packet Engine Registers
sakthipriya 0:7882d03f59e2 105 writereg(0x2C,0x00); //set preamble
sakthipriya 0:7882d03f59e2 106 writereg(0x2D,0x0A); //set preamble
sakthipriya 0:7882d03f59e2 107 writereg(0x2E,0x80); //sync off
sakthipriya 0:7882d03f59e2 108 writereg(0x2F,0x5E); //sync word 1
sakthipriya 0:7882d03f59e2 109 writereg(0x37,0x08 | 0x40);// | 0x10); //packetconfig1, 0x40 for data whitening (only for testing)
sakthipriya 0:7882d03f59e2 110 writereg(0x38,0x00); //payload length = 0 ... unlimited payload mode
sakthipriya 0:7882d03f59e2 111 writereg(0x3C,0xB0); //fifothresh = 48 because we want it cleared once its 40!!!!
sakthipriya 0:7882d03f59e2 112 //Initialization complete
sakthipriya 0:7882d03f59e2 113
sakthipriya 0:7882d03f59e2 114 //while(chavan.getc() == 't'){
sakthipriya 0:7882d03f59e2 115 //t.start();
sakthipriya 0:7882d03f59e2 116 //Filling Data into FIFO 64 BYTES : eff.32 bits = 4bytes //fread
sakthipriya 0:7882d03f59e2 117 cs_bar = 0;
sakthipriya 0:7882d03f59e2 118 spi.write(0x80);//fifo write access
sakthipriya 0:7882d03f59e2 119 for(byte_counter=0 ; byte_counter<4; byte_counter++)
sakthipriya 0:7882d03f59e2 120 {
sakthipriya 0:7882d03f59e2 121 for(int i=7; i>=0 ; i--)
sakthipriya 0:7882d03f59e2 122 {
sakthipriya 0:7882d03f59e2 123 if((short_beacon[byte_counter] & (uint8_t) pow(2.0,i))!=0)
sakthipriya 0:7882d03f59e2 124 //if((short_beacon[byte_counter] & mask[i]) != 0)
sakthipriya 0:7882d03f59e2 125 {
sakthipriya 0:7882d03f59e2 126 spi.write(0xFF);
sakthipriya 0:7882d03f59e2 127 spi.write(0xFF);
sakthipriya 0:7882d03f59e2 128 }
sakthipriya 0:7882d03f59e2 129 else
sakthipriya 0:7882d03f59e2 130 {
sakthipriya 0:7882d03f59e2 131 spi.write(0x00);
sakthipriya 0:7882d03f59e2 132 spi.write(0x00);
sakthipriya 0:7882d03f59e2 133 }
sakthipriya 0:7882d03f59e2 134 }
sakthipriya 0:7882d03f59e2 135 }
sakthipriya 0:7882d03f59e2 136 cs_bar = 1; //cs_bar
sakthipriya 0:7882d03f59e2 137
sakthipriya 0:7882d03f59e2 138 //Check for fifoThresh
sakthipriya 0:7882d03f59e2 139 printf("\n\rfor loop executed\n\r");
sakthipriya 0:7882d03f59e2 140 while((readreg(0x28) & 0x20) != 0x20);
sakthipriya 0:7882d03f59e2 141 printf("\n\rwhile loop executed\n\r");
sakthipriya 0:7882d03f59e2 142 //Highpower settings
sakthipriya 0:7882d03f59e2 143 writereg(0x11,0x7F); //RegPalevel (20db) //~
sakthipriya 0:7882d03f59e2 144 writereg(0x13,0x0F); //RegOCP
sakthipriya 0:7882d03f59e2 145 writereg(0x5A,0x5D); //RegTestPa1
sakthipriya 0:7882d03f59e2 146 writereg(0x5C,0x7C); //RegTestPa2
sakthipriya 0:7882d03f59e2 147
sakthipriya 0:7882d03f59e2 148 //Set to Tx mode
sakthipriya 0:7882d03f59e2 149 writereg(0x01,0x0C);
sakthipriya 0:7882d03f59e2 150
sakthipriya 0:7882d03f59e2 151 printf("\n\rpre 2nd while loop\n\r");
sakthipriya 0:7882d03f59e2 152 //Check for fifoThresh
sakthipriya 0:7882d03f59e2 153 while((readreg(0x28) & 0x20) != 0x00);
sakthipriya 0:7882d03f59e2 154 printf("\n\r2nd while loop executed\n\r");
sakthipriya 0:7882d03f59e2 155 while(byte_counter!=15){
sakthipriya 0:7882d03f59e2 156
sakthipriya 0:7882d03f59e2 157 //writing again
sakthipriya 0:7882d03f59e2 158 cs_bar = 0;
sakthipriya 0:7882d03f59e2 159 spi.write(0x80);
sakthipriya 0:7882d03f59e2 160 for(int i=7; i>=0 ;i--)
sakthipriya 0:7882d03f59e2 161 {
sakthipriya 0:7882d03f59e2 162 if((short_beacon[byte_counter] & (uint8_t) pow(2.0,i))!=0)
sakthipriya 0:7882d03f59e2 163 //if((short_beacon[byte_counter] & mask[i]) != 0)
sakthipriya 0:7882d03f59e2 164 {
sakthipriya 0:7882d03f59e2 165 spi.write(0xFF);
sakthipriya 0:7882d03f59e2 166 spi.write(0xFF);
sakthipriya 0:7882d03f59e2 167 }
sakthipriya 0:7882d03f59e2 168 else
sakthipriya 0:7882d03f59e2 169 {
sakthipriya 0:7882d03f59e2 170 spi.write(0x00);
sakthipriya 0:7882d03f59e2 171 spi.write(0x00);
sakthipriya 0:7882d03f59e2 172 }
sakthipriya 0:7882d03f59e2 173 }
sakthipriya 0:7882d03f59e2 174 cs_bar = 1;
sakthipriya 0:7882d03f59e2 175 byte_counter++;
sakthipriya 0:7882d03f59e2 176
sakthipriya 0:7882d03f59e2 177 //Check for fifoThresh
sakthipriya 0:7882d03f59e2 178 while((readreg(0x28) & 0x20) != 0x00);
sakthipriya 0:7882d03f59e2 179 }
sakthipriya 0:7882d03f59e2 180 printf("\n\r3rd big while loop executed\n\r");
sakthipriya 0:7882d03f59e2 181 //wait for packet sent bit to fire
sakthipriya 0:7882d03f59e2 182 while((readreg(0x28) & 0x08) != 0x08);
sakthipriya 0:7882d03f59e2 183 printf("\n\r4th while loop executed\n\r");
sakthipriya 0:7882d03f59e2 184 //chavan.printf("packet sent!!! \n\r");
sakthipriya 0:7882d03f59e2 185
sakthipriya 0:7882d03f59e2 186 //Switch back to Standby Mode
sakthipriya 0:7882d03f59e2 187 writereg(0x01,0x04);
sakthipriya 0:7882d03f59e2 188
sakthipriya 0:7882d03f59e2 189 //Lowpowermode
sakthipriya 0:7882d03f59e2 190 writereg(0x11,0x9F); //RegPalevel (13db)
sakthipriya 0:7882d03f59e2 191 writereg(0x13,0x1A); //RegOCP
sakthipriya 0:7882d03f59e2 192 writereg(0x5A,0x55); //RegTestPa1(setting PA_BOOST on RFIO)
sakthipriya 0:7882d03f59e2 193 writereg(0x5C,0x70); //RegTestPa2(setting PA_BOOST on RFIO)
sakthipriya 0:7882d03f59e2 194
sakthipriya 0:7882d03f59e2 195 //wait for modeready
sakthipriya 0:7882d03f59e2 196 while((readreg(0x27)&0x80)!=0x80);
sakthipriya 0:7882d03f59e2 197
sakthipriya 0:7882d03f59e2 198 //t.stop();
sakthipriya 0:7882d03f59e2 199 //chavan.printf(" time taken to init + transmit = %f \n", t.read()) ;
sakthipriya 0:7882d03f59e2 200 //}
sakthipriya 0:7882d03f59e2 201 printf("\n\rBeacon function exiting\n\r");
sakthipriya 0:7882d03f59e2 202 }