ADF7023 with Explanations

Dependencies:   mbed

Committer:
dheerajmpai23
Date:
Wed Aug 05 11:19:48 2015 +0000
Revision:
0:77ff72005133
SPORT MODE ADF7023 WITH EXPLANATION

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dheerajmpai23 0:77ff72005133 1 #include "mbed.h" //mbed Library
dheerajmpai23 0:77ff72005133 2 #include <iostream>
dheerajmpai23 0:77ff72005133 3 using namespace std;
dheerajmpai23 0:77ff72005133 4 #include <bitset>
dheerajmpai23 0:77ff72005133 5
dheerajmpai23 0:77ff72005133 6 #define ENDL "\r" << endl;
dheerajmpai23 0:77ff72005133 7 #define START_ADDRESS 0x020;
dheerajmpai23 0:77ff72005133 8
dheerajmpai23 0:77ff72005133 9 //SPI
dheerajmpai23 0:77ff72005133 10
dheerajmpai23 0:77ff72005133 11 SPI adf(PTD6, PTD7, PTD5); //SPI Pin names in mbed
dheerajmpai23 0:77ff72005133 12 //MOSI, MISO, CLOCK
dheerajmpai23 0:77ff72005133 13
dheerajmpai23 0:77ff72005133 14 DigitalOut CS(D10); //CS = chip select or slave select
dheerajmpai23 0:77ff72005133 15 Serial PC(USBTX, USBRX); //Serial Connection to PC Through USB port
dheerajmpai23 0:77ff72005133 16 DigitalOut ledr(LED_RED); //Blinking of LED for confirming the compilation of code
dheerajmpai23 0:77ff72005133 17
dheerajmpai23 0:77ff72005133 18 DigitalIn clk(D8); //DigitalIn is used to poll the value of the clock
dheerajmpai23 0:77ff72005133 19 DigitalOut DT(D9); //Declaration of the pin
dheerajmpai23 0:77ff72005133 20
dheerajmpai23 0:77ff72005133 21 int j=0; //Variable counting the bytes transmitted
dheerajmpai23 0:77ff72005133 22
dheerajmpai23 0:77ff72005133 23 #define SPI_NOP 0xFF
dheerajmpai23 0:77ff72005133 24
dheerajmpai23 0:77ff72005133 25 //Data that is to be transmitted
dheerajmpai23 0:77ff72005133 26 unsigned char data_TX [] = {0x65,0xD3,0x06,0x08,0xBB,0xE7,0xCD,0x16,0x65,0xD3,0x06,0x08,0xBB,0xE7,0xCD,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x20,0xE5,0xEE,0x00,0xEB,0x3D,0x35,0x66,0xDC,0xDA,0x33,0xA1,0x80,0x62,0xB7,0xB8,0x88,0x8A,0xCE,0x99,0x18,0xFA,0x24,0x42,0xD1,0x7C,0x2D,0x0E,0x72,0x9E,0xE9,0x7C,0xF9,0xBA,0x18,0xAA,0x4B,0xEC,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x20,0xE5,0xEE,0x00,0xCC,0xB3,0xB2,0x5B,0x96,0x38,0x71,0x96,0x54,0xE2,0x4A,0x7F,0xC9,0xB7,0x1E,0x56,0x09,0x30,0x18,0x5A,0x84,0xFA,0xC1,0x9D,0xA6,0x6A,0x17,0x50,0x6F,0xD4,0x34,0x1D,0xF0,0xE0,0xE2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x20,0xE5,0xEE,0x00,0x78,0xC9,0x9A,0x09,0xE2,0x34,0xF9,0x39,0x61,0x36,0x9C,0xC2,0x98,0xB9,0x54,0xC0,0xDC,0xE6,0x90,0xF6,0xF6,0x88,0xD1,0xA5,0x5A,0x75,0x83,0x78,0x08,0xD6,0x9D,0xDE,0xB8,0x58,0xD4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x20,0xE5,0xEE,0x00,0x13,0x3F,0x78,0xD9,0x4E,0xB7,0xE8,0xD6,0x0D,0x1E,0xF1,0xC4,0xB9,0xAB,0x90,0x39,0x6A,0x9E,0x8A,0xB8,0xC9,0xAF,0x5E,0x85,0x66,0xBF,0x4E,0xB3,0xD3,0x54,0x9B,0x7D,0xA3,0x3A,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x20,0xE5,0xEE,0x00,0x81,0x83,0x7B,0x88,0x8A,0xAB,0x31,0x91,0x8F,0xA0,0x91,0x05,0x17,0xC2,0xD2,0xB9,0xC1,0xEE,0x97,0xCE,0x66,0xE9,0x8A,0xA4,0xBC,0xB1,0xFC,0xCB,0x3B,0x24,0x6E,0x5B,0x87,0x19,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x97,0x4C,0x18,0x22,0xEF,0x9F,0x34,0x59,0x97,0x4C,0x18,0x22,0xEF,0x9F,0x34,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x97,0x4C,0x18,0x22,0xEF,0x9F,0x34,0x59,0x97,0x4C,0x18,0x22,0xEF,0x9F,0x34,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
dheerajmpai23 0:77ff72005133 27
dheerajmpai23 0:77ff72005133 28
dheerajmpai23 0:77ff72005133 29 //Note : A delay of 2 microseconds is given to ensure ADF7023 detects the CS = 'High' state and execute the command given.
dheerajmpai23 0:77ff72005133 30 //wait_us(2); ensures delay of 2 microseconds
dheerajmpai23 0:77ff72005133 31
dheerajmpai23 0:77ff72005133 32
dheerajmpai23 0:77ff72005133 33
dheerajmpai23 0:77ff72005133 34 void send_data()
dheerajmpai23 0:77ff72005133 35 {
dheerajmpai23 0:77ff72005133 36
dheerajmpai23 0:77ff72005133 37
dheerajmpai23 0:77ff72005133 38 static int current_bit = 7;
dheerajmpai23 0:77ff72005133 39
dheerajmpai23 0:77ff72005133 40 DT = (data_TX[j] >> current_bit) & 1; //if current bit == 1 then DT = High else DT = Low
dheerajmpai23 0:77ff72005133 41 --current_bit; //Next Bit
dheerajmpai23 0:77ff72005133 42
dheerajmpai23 0:77ff72005133 43 if(current_bit == -1){ //If all 8 bits are transmitted. then go to next byte
dheerajmpai23 0:77ff72005133 44 current_bit = 7; //Going to the bit [0]
dheerajmpai23 0:77ff72005133 45 j++;
dheerajmpai23 0:77ff72005133 46
dheerajmpai23 0:77ff72005133 47
dheerajmpai23 0:77ff72005133 48 if(j>=sizeof(data_TX))
dheerajmpai23 0:77ff72005133 49 {
dheerajmpai23 0:77ff72005133 50 // j=0; // In case repeatation of data is required
dheerajmpai23 0:77ff72005133 51 adf.write(0xB1); // Stops transmitting and reaches PHY_ON State (when repeatation is not required)
dheerajmpai23 0:77ff72005133 52 }
dheerajmpai23 0:77ff72005133 53 }
dheerajmpai23 0:77ff72005133 54 }
dheerajmpai23 0:77ff72005133 55
dheerajmpai23 0:77ff72005133 56
dheerajmpai23 0:77ff72005133 57
dheerajmpai23 0:77ff72005133 58
dheerajmpai23 0:77ff72005133 59 //BBRAM Sequence
dheerajmpai23 0:77ff72005133 60 //
dheerajmpai23 0:77ff72005133 61
dheerajmpai23 0:77ff72005133 62 void write_bbram_sequence(void){
dheerajmpai23 0:77ff72005133 63
dheerajmpai23 0:77ff72005133 64 adf.write(0x19); //SPI_MEM_WR SPI Block Write BBRAM
dheerajmpai23 0:77ff72005133 65 adf.write(0x00); //Starting Address (0x100)
dheerajmpai23 0:77ff72005133 66 adf.write(0x00); //Data on 0x100 -- Interrupt_Mask Register -- As no Interrupt is required Value == 0x00
dheerajmpai23 0:77ff72005133 67 adf.write(0x00); //Interrupt_Mask_1 No interrupts Required
dheerajmpai23 0:77ff72005133 68
dheerajmpai23 0:77ff72005133 69 adf.write(0x00); // For details of other registers Please refer page 90-100 in ADF7023 Datasheet
dheerajmpai23 0:77ff72005133 70 adf.write(0x00);
dheerajmpai23 0:77ff72005133 71 adf.write(0x00);
dheerajmpai23 0:77ff72005133 72 adf.write(0x00);
dheerajmpai23 0:77ff72005133 73
dheerajmpai23 0:77ff72005133 74 adf.write(0x00);
dheerajmpai23 0:77ff72005133 75 adf.write(0x33);
dheerajmpai23 0:77ff72005133 76 adf.write(0x00);
dheerajmpai23 0:77ff72005133 77 adf.write(0xF9); //BBRAm Register Corresponding to the frequency
dheerajmpai23 0:77ff72005133 78
dheerajmpai23 0:77ff72005133 79 adf.write(0xC2);
dheerajmpai23 0:77ff72005133 80 adf.write(0x10);
dheerajmpai23 0:77ff72005133 81 adf.write(0xC0);
dheerajmpai23 0:77ff72005133 82 adf.write(0x00);
dheerajmpai23 0:77ff72005133 83
dheerajmpai23 0:77ff72005133 84 adf.write(0x30);
dheerajmpai23 0:77ff72005133 85 adf.write(0x31);
dheerajmpai23 0:77ff72005133 86 adf.write(0x07);
dheerajmpai23 0:77ff72005133 87 adf.write(0x00);
dheerajmpai23 0:77ff72005133 88
dheerajmpai23 0:77ff72005133 89 adf.write(0x01);
dheerajmpai23 0:77ff72005133 90 adf.write(0x00);
dheerajmpai23 0:77ff72005133 91 adf.write(0x7F);
dheerajmpai23 0:77ff72005133 92 adf.write(0x00);
dheerajmpai23 0:77ff72005133 93
dheerajmpai23 0:77ff72005133 94 adf.write(0x0B);
dheerajmpai23 0:77ff72005133 95 adf.write(0x37);
dheerajmpai23 0:77ff72005133 96 adf.write(0x00);
dheerajmpai23 0:77ff72005133 97 adf.write(0x00);
dheerajmpai23 0:77ff72005133 98 adf.write(0x40);
dheerajmpai23 0:77ff72005133 99 adf.write(0x0C);
dheerajmpai23 0:77ff72005133 100 adf.write(0x00);
dheerajmpai23 0:77ff72005133 101 adf.write(0x05);
dheerajmpai23 0:77ff72005133 102 adf.write(0x00);
dheerajmpai23 0:77ff72005133 103 adf.write(0x00);
dheerajmpai23 0:77ff72005133 104 adf.write(0x18);
dheerajmpai23 0:77ff72005133 105 adf.write(0x12);
dheerajmpai23 0:77ff72005133 106 adf.write(0x34);
dheerajmpai23 0:77ff72005133 107 adf.write(0x56);
dheerajmpai23 0:77ff72005133 108 adf.write(0x10);
dheerajmpai23 0:77ff72005133 109 adf.write(0x10);
dheerajmpai23 0:77ff72005133 110 adf.write(0x08);
dheerajmpai23 0:77ff72005133 111 adf.write(0x14);
dheerajmpai23 0:77ff72005133 112 adf.write(0x00);
dheerajmpai23 0:77ff72005133 113 adf.write(0x00);
dheerajmpai23 0:77ff72005133 114 adf.write(0x00);
dheerajmpai23 0:77ff72005133 115 adf.write(0x00);
dheerajmpai23 0:77ff72005133 116 adf.write(0x00);
dheerajmpai23 0:77ff72005133 117 adf.write(0x00);
dheerajmpai23 0:77ff72005133 118 adf.write(0x00);
dheerajmpai23 0:77ff72005133 119 adf.write(0x00);
dheerajmpai23 0:77ff72005133 120 adf.write(0x00);
dheerajmpai23 0:77ff72005133 121 adf.write(0x00);
dheerajmpai23 0:77ff72005133 122 adf.write(0x00);
dheerajmpai23 0:77ff72005133 123 adf.write(0x00);
dheerajmpai23 0:77ff72005133 124 adf.write(0x00);
dheerajmpai23 0:77ff72005133 125 adf.write(0x00);
dheerajmpai23 0:77ff72005133 126 adf.write(0x00);
dheerajmpai23 0:77ff72005133 127 adf.write(0x00);
dheerajmpai23 0:77ff72005133 128 adf.write(0x00);
dheerajmpai23 0:77ff72005133 129 adf.write(0x00);
dheerajmpai23 0:77ff72005133 130 adf.write(0x04);
dheerajmpai23 0:77ff72005133 131 adf.write(0x00);
dheerajmpai23 0:77ff72005133 132 adf.write(0x00);
dheerajmpai23 0:77ff72005133 133 adf.write(0x00);
dheerajmpai23 0:77ff72005133 134 adf.write(0x00);
dheerajmpai23 0:77ff72005133 135 adf.write(0x00);
dheerajmpai23 0:77ff72005133 136
dheerajmpai23 0:77ff72005133 137 }
dheerajmpai23 0:77ff72005133 138
dheerajmpai23 0:77ff72005133 139 void initiate(void){
dheerajmpai23 0:77ff72005133 140
dheerajmpai23 0:77ff72005133 141 CS=0; //ADF023 and mbed SPI is active low and ADF7023 samples at rising edge mode = 0;
dheerajmpai23 0:77ff72005133 142 adf.write(0x1B);
dheerajmpai23 0:77ff72005133 143 adf.write(0xFA);
dheerajmpai23 0:77ff72005133 144 adf.write(0xA0);
dheerajmpai23 0:77ff72005133 145 CS=1; // SPI goes to High impedence State
dheerajmpai23 0:77ff72005133 146 wait_us(2);
dheerajmpai23 0:77ff72005133 147
dheerajmpai23 0:77ff72005133 148 CS=0; //Chip Select = low implies Chip is selected SPI is enabled
dheerajmpai23 0:77ff72005133 149 adf.write(0x18);
dheerajmpai23 0:77ff72005133 150 adf.write(0x0D);
dheerajmpai23 0:77ff72005133 151 adf.write(0x00);
dheerajmpai23 0:77ff72005133 152 CS=1; //Chip select == high . Chip goes to High impedence state
dheerajmpai23 0:77ff72005133 153 wait_us(2);
dheerajmpai23 0:77ff72005133 154
dheerajmpai23 0:77ff72005133 155 // ADF7023 is now configured to SPORT MODE
dheerajmpai23 0:77ff72005133 156
dheerajmpai23 0:77ff72005133 157 CS=0;
dheerajmpai23 0:77ff72005133 158 adf.write(0xB0); //In order to write BBRAM Sequence we need to change the state to PHY_OFF state
dheerajmpai23 0:77ff72005133 159 CS=1;
dheerajmpai23 0:77ff72005133 160 wait_us(600);
dheerajmpai23 0:77ff72005133 161
dheerajmpai23 0:77ff72005133 162 CS=0;
dheerajmpai23 0:77ff72005133 163 write_bbram_sequence(); //BBRAM_SEQUENCE Contains all data that is required to configure the Radio
dheerajmpai23 0:77ff72005133 164 CS=1;
dheerajmpai23 0:77ff72005133 165 wait_us(2);
dheerajmpai23 0:77ff72005133 166
dheerajmpai23 0:77ff72005133 167 CS=0;
dheerajmpai23 0:77ff72005133 168 adf.write(0xFF); //0xFF is the Dummy Byte Provides required time for ADF to get ready to accept command
dheerajmpai23 0:77ff72005133 169 adf.write(0xFF);
dheerajmpai23 0:77ff72005133 170 CS=1;
dheerajmpai23 0:77ff72005133 171 wait_us(2);
dheerajmpai23 0:77ff72005133 172
dheerajmpai23 0:77ff72005133 173 CS=0;
dheerajmpai23 0:77ff72005133 174 adf.write(0xFF);
dheerajmpai23 0:77ff72005133 175 adf.write(0xFF);
dheerajmpai23 0:77ff72005133 176 CS=1;
dheerajmpai23 0:77ff72005133 177 wait_us(2);
dheerajmpai23 0:77ff72005133 178
dheerajmpai23 0:77ff72005133 179
dheerajmpai23 0:77ff72005133 180 CS=0;
dheerajmpai23 0:77ff72005133 181 adf.write(0xBB);// CONFIGURE_DEV Configures the radio according to the bbram Sequence Except the transmission frequency
dheerajmpai23 0:77ff72005133 182 CS=1;
dheerajmpai23 0:77ff72005133 183 wait_us(2); // Approx time required for state transition
dheerajmpai23 0:77ff72005133 184
dheerajmpai23 0:77ff72005133 185 CS=0;
dheerajmpai23 0:77ff72005133 186 adf.write(0xB1);//PHY_ON Turns on the radio
dheerajmpai23 0:77ff72005133 187 CS=1;
dheerajmpai23 0:77ff72005133 188 wait_us(2);
dheerajmpai23 0:77ff72005133 189
dheerajmpai23 0:77ff72005133 190 CS=0;
dheerajmpai23 0:77ff72005133 191 adf.write(0xB5);//PHY_TX Sets Transmission Frequency according to bbram and starts transmitting
dheerajmpai23 0:77ff72005133 192 CS=1;
dheerajmpai23 0:77ff72005133 193 wait_us(600); //Maximum time required for ADF7023 for the above State transmission . Tested in Space Lab condition
dheerajmpai23 0:77ff72005133 194 }
dheerajmpai23 0:77ff72005133 195
dheerajmpai23 0:77ff72005133 196
dheerajmpai23 0:77ff72005133 197
dheerajmpai23 0:77ff72005133 198
dheerajmpai23 0:77ff72005133 199 int main(){
dheerajmpai23 0:77ff72005133 200
dheerajmpai23 0:77ff72005133 201
dheerajmpai23 0:77ff72005133 202 CS = 1; // Chip Select == low Enabling the SPI
dheerajmpai23 0:77ff72005133 203 adf.format(8,0); // SPI interfaces in 8 bit pattern ,SPI Mode = 0
dheerajmpai23 0:77ff72005133 204 adf.frequency( 1000000 ); // SPI Frequency = 1 MHz
dheerajmpai23 0:77ff72005133 205
dheerajmpai23 0:77ff72005133 206 cout << "Press s" << ENDL; // The following code upto 6 lines are used to ensure the data is transmitted at the required time
dheerajmpai23 0:77ff72005133 207 ledr = 1;
dheerajmpai23 0:77ff72005133 208 char c = 'a'; //Initialising the variable
dheerajmpai23 0:77ff72005133 209
dheerajmpai23 0:77ff72005133 210 while( c != 's'){
dheerajmpai23 0:77ff72005133 211 c = PC.getc();
dheerajmpai23 0:77ff72005133 212 PC.putc(c);
dheerajmpai23 0:77ff72005133 213 }
dheerajmpai23 0:77ff72005133 214 ledr = 0;
dheerajmpai23 0:77ff72005133 215
dheerajmpai23 0:77ff72005133 216 initiate(); // Initiates the Radio to Sport Mode and starts transmitting
dheerajmpai23 0:77ff72005133 217
dheerajmpai23 0:77ff72005133 218 int state; // The datarate in which we are testing is half the Clockrate
dheerajmpai23 0:77ff72005133 219 // We are using the variable 'state' to ensure the data is sampled in alternative rising edge
dheerajmpai23 0:77ff72005133 220
dheerajmpai23 0:77ff72005133 221 if(clk == 0){ // Initialising the State of the clock
dheerajmpai23 0:77ff72005133 222 state = 0;
dheerajmpai23 0:77ff72005133 223 }
dheerajmpai23 0:77ff72005133 224 else{
dheerajmpai23 0:77ff72005133 225 state = 1;
dheerajmpai23 0:77ff72005133 226 }
dheerajmpai23 0:77ff72005133 227
dheerajmpai23 0:77ff72005133 228 while(true){ // Polling
dheerajmpai23 0:77ff72005133 229 if(clk == 0){
dheerajmpai23 0:77ff72005133 230 if(state == 1){
dheerajmpai23 0:77ff72005133 231 state = 0;
dheerajmpai23 0:77ff72005133 232 send_data();
dheerajmpai23 0:77ff72005133 233 }
dheerajmpai23 0:77ff72005133 234 }
dheerajmpai23 0:77ff72005133 235 else{ //As data is sampled in alternating rising edge in ADF7023 this ensures that the Data changes accordingly
dheerajmpai23 0:77ff72005133 236 state = 1;
dheerajmpai23 0:77ff72005133 237 }
dheerajmpai23 0:77ff72005133 238 }
dheerajmpai23 0:77ff72005133 239 }