Rolling buffer mechanism for Tx mode of ADF7023..Without any comments

Dependencies:   mbed

main.cpp

Committer:
dheerajmpai23
Date:
2015-07-09
Revision:
0:d53780574d21
Child:
1:45b03e6a9c06

File content as of revision 0:d53780574d21:

#include "mbed.h"
#include <iostream>
#include <stdio.h>
using namespace std;
#include <bitset>
#define ENDL "\r" << endl;
#define START_ADDRESS 0x020;
#define PI 3.14
SPI adf(PTA16, PTA17, PTA15);
//MOSI, MISO, CLOCK
DigitalOut CS(D10);
//DigitalOut CS(PTD4);//D10==PTD4
Serial PC(USBTX, USBRX);
DigitalOut ledr(LED1);
DigitalOut led2(LED2);
InterruptIn IRQ(D8);
//InterruptIn IRQ(PTA13);//D8==PTA13
Ticker ticker;
//Timer t;
//Timer stop;
int x=IRQ;
int src=0;
int irqsrc = 0;
int j = 0;
int k = 0;
int irq1=0;
int r = 0;
unsigned char data[]={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,0x10,0x83,0x11,0x24,0x67,0xCE,0x05,0x50,0x01,0x45,0x9D,0x46,0x0D,0x6B,0xC1,0xF2,0xF3,0xE8,0xFE,0x52,0x0A,0x27,0x90,0x0A,0x3F,0x15,0xD1,0x68,0xD0,0x48,0x75,0x06,0x04,0xB7,0xE6,0xA0,0x82,0xF2,0x50,0x20,0x75,0x09,0x65,0x68,0x1A,0x9A,0xDD,0x1C,0x3F,0xC6,0xF5,0xD8,0xBD,0x96,0xB1,0xA0,0x92,0x29,0x44,0x78,0x60,0x0C,0x5D,0xCE,0xED,0x7A,0x85,0xF0,0x70,0x1C,0x7F,0x52,0x7B,0x14,0x43,0x4C,0x76,0xDD,0x41,0x86,0x59,0x6D,0x18,0x7C,0x63,0xF3,0x9F,0x74,0xB8,0x00,0x77,0xC0,0x18,0xDD,0xCE,0xA2,0xD1,0x2A,0xF3,0xFE,0x22,0xB5,0x0E,0x42,0xAF,0xB7,0x89,0x38,0x15,0xB0,0xCD,0xD6,0x27,0xEB,0x3F,0x5C,0x05,0xF7,0x26,0x5A,0x6A,0x4B,0x08,0x9E,0xAA,0x74,0xFF,0x30,0x0A,0x0A,0xBD,0x72,0xA2,0x44,0x20,0xC6,0x92,0x59,0xF3,0x80,0x55,0x00,0x51,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x20,0xE5,0xEE,0x00,0xD4,0x63,0x5A,0xF0,0x1F,0x1C,0xFA,0x3C,0xE5,0x22,0x89,0xE4,0x00,0xAF,0xC5,0x74,0x16,0xB4,0x12,0x1C,0x50,0x61,0x2D,0xF8,0x6A,0x20,0xBC,0x96,0x82,0x1D,0x42,0x5A,0xD6,0x86,0xA6,0xB4,0xD1,0xCF,0xF1,0xBC,0x5D,0xAF,0x65,0xAE,0x9A,0x24,0x8A,0x52,0xC7,0x98,0x03,0x14,0xDC,0xDB,0x5E,0xA0,0x5F,0x1C,0x07,0x1E,0x75,0x3E,0xC5,0x12,0xB4,0xDD,0xB7,0x50,0x18,0x76,0x5B,0x44,0x87,0xD8,0xFC,0xE4,0xF7,0x6E,0x00,0x1E,0xFC,0x06,0x37,0x70,0xEA,0x14,0x4A,0xBE,0xBF,0xE8,0xAD,0x42,0x64,0x0B,0xED,0xE2,0x13,0x85,0x6C,0x30,0xDD,0x69,0xFA,0xCC,0xF5,0xC1,0x7D,0xC8,0x65,0xBA,0x92,0xC0,0x89,0xCA,0x9D,0x3C,0xF3,0x02,0x82,0xAE,0x57,0x08,0x91,0x08,0x0C,0x44,0x96,0x7E,0xB8,0x15,0x40,0x14,0x16,0x75,0x18,0xD4,0xAF,0x07,0xC7,0x3C,0xA3,0xF9,0x48,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x20,0xE5,0xEE,0x00,0x9E,0x40,0x2B,0xF0,0x57,0x45,0xAD,0x04,0x21,0xD4,0x18,0x48,0xDF,0x9A,0x88,0x2C,0xC9,0x40,0x87,0x52,0xA5,0x95,0xA1,0xA8,0x6B,0x74,0x73,0xFC,0x1B,0xD7,0x6B,0xDA,0xDA,0xC6,0x89,0x22,0x25,0x11,0xE6,0x00,0x31,0x77,0x36,0xD6,0x6A,0x17,0xC7,0x02,0xF1,0xFD,0x4F,0xB0,0x51,0x0D,0x37,0x6E,0xF5,0x06,0x1D,0x96,0x34,0x61,0xF6,0x3C,0xCE,0x7D,0xDB,0x80,0x01,0xDF,0x01,0x8C,0x77,0x3A,0x85,0x10,0xAB,0xCF,0xFA,0x2A,0x54,0x39,0x02,0xFA,0x5E,0x24,0xE1,0x58,0xC3,0x37,0x5A,0x7C,0xAC,0xFD,0x70,0x5C,0xDC,0x99,0x6E,0xA6,0xAC,0x22,0x72,0xA6,0x53,0xFC,0xC0,0xA0,0x2A,0xF5,0xC2,0x24,0x10,0x83,0x11,0x24,0x67,0xCE,0x05,0x50,0x01,0x45,0x9D,0x46,0x0D,0x6B,0xC1,0xF2,0xF3,0xE8,0xFE,0x52,0x0A,0x27,0x90,0x0A,0x3F,0x15,0xD1,0x68,0xD0,0x48,0x75,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x20,0xE5,0xEE,0x00,0x04,0xB7,0xE6,0xA0,0x82,0xF2,0x50,0x20,0x75,0x09,0x65,0x68,0x1A,0x9A,0xDD,0x1C,0x3F,0xC6,0xF5,0xD8,0xBD,0x96,0xB1,0xA0,0x92,0x29,0x44,0x78,0x60,0x0C,0x5D,0xCE,0xED,0x7A,0x85,0xF0,0x70,0x1C,0x7F,0x52,0x7B,0x14,0x43,0x4C,0x76,0xDD,0x41,0x86,0x59,0x6D,0x18,0x7C,0x63,0xF3,0x9F,0x74,0xB8,0x00,0x77,0xC0,0x18,0xDD,0xCE,0xA2,0xD1,0x2A,0xF3,0xFE,0x22,0xB5,0x0E,0x42,0xAF,0xB7,0x89,0x38,0x15,0xB0,0xCD,0xD6,0x27,0xEB,0x3F,0x5C,0x05,0xF7,0x26,0x5A,0x6A,0x4B,0x08,0x9E,0xAA,0x74,0xFF,0x30,0x0A,0x0A,0xBD,0x72,0xA2,0x44,0x20,0xC6,0x92,0x59,0xF3,0x80,0x55,0x00,0x51,0x64,0xD4,0x63,0x5A,0xF0,0x1F,0x1C,0xFA,0x3C,0xE5,0x22,0x89,0xE4,0x00,0xAF,0xC5,0x74,0x16,0xB4,0x12,0x1C,0x50,0x61,0x2D,0xF8,0x6A,0x20,0xBC,0x96,0x82,0x1D,0x42,0x5A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x20,0xE5,0xEE,0x00,0xD6,0x86,0xA6,0xB4,0xD1,0xCF,0xF1,0xBC,0x5D,0xAF,0x65,0xAE,0x9A,0x24,0x8A,0x52,0xC7,0x98,0x03,0x14,0xDC,0xDB,0x5E,0xA0,0x5F,0x1C,0x07,0x1E,0x75,0x3E,0xC5,0x12,0xB4,0xDD,0xB7,0x50,0x18,0x76,0x5B,0x44,0x87,0xD8,0xFC,0xE4,0xF7,0x6E,0x00,0x1E,0xFC,0x06,0x37,0x70,0xEA,0x14,0x4A,0xBE,0xBF,0xE8,0xAD,0x42,0x64,0x0B,0xED,0xE2,0x13,0x85,0x6C,0x30,0xDD,0x69,0xFA,0xCC,0xF5,0xC1,0x7D,0xC8,0x65,0xBA,0x92,0xC0,0x89,0xCA,0x9D,0x3C,0xF3,0x02,0x82,0xAE,0x57,0x08,0x91,0x08,0x0C,0x44,0x96,0x7E,0xB8,0x15,0x40,0x14,0x16,0x75,0x18,0xD4,0xAF,0x07,0xC7,0x3C,0xA3,0xF9,0x48,0xA0,0x9E,0x40,0x2B,0xF0,0x57,0x45,0xAD,0x04,0x21,0xD4,0x18,0x48,0xDF,0x9A,0x88,0x2C,0xC9,0x40,0x87,0x52,0xA5,0x95,0xA1,0xA8,0x6B,0x74,0x73,0xFC,0x1B,0xD7,0x6B,0xDA,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};
int a[100];
int b[100];
int c[100];

#define SPI_NOP 0xFF
/***********************************************************************************/
void bbram_write()
{   
    CS=0;
    adf.write(0xB0);//PHY_OFF
    wait_ms(2);
    CS=1;
    
    // Write bbram
    CS=0;
    adf.write(0x19);
    adf.write(0x00);
    adf.write(0x60);
    adf.write(0x00);
    
    adf.write(0x00);    
    adf.write(0x00);
    adf.write(0x00);
    adf.write(0x00);
    
    adf.write(0x00);
    adf.write(0x33);
    adf.write(0x00);
    adf.write(0xF4);//Frequency Register F9 = 435.802 MHz F4 = 435.800 MHz
    
    adf.write(0xC2);
    adf.write(0x10);
    adf.write(0xC0);    
    adf.write(0x00);
    
    adf.write(0x30);
    adf.write(0x31);
    adf.write(0x07);    
    adf.write(0x00);
        
    adf.write(0x01);
    adf.write(0x00);
    adf.write(0x7F);
    adf.write(0x00);
    
    adf.write(0x0B);
    adf.write(0x37);
    adf.write(0x00);    
    adf.write(0x00);
    
    adf.write(0x40);
    adf.write(0x0C);
    adf.write(0x00);
    adf.write(0x05);
    
    adf.write(0x00);
    adf.write(0x00);
    adf.write(0x18);
    adf.write(0x12);
    
    adf.write(0x34);
    adf.write(0x56);
    adf.write(0x10);
    adf.write(0x10);
    
    adf.write(0xC4); // Different
    adf.write(0x14);
    adf.write(0x00);
    adf.write(0x00);
    
    adf.write(0x00);
    adf.write(0x00);
    adf.write(0x00);
    adf.write(0x00);
    
    adf.write(0x00);
    adf.write(0x00);
    adf.write(0x00);
    adf.write(0x00);
    
    adf.write(0x00);
    adf.write(0x00);
    adf.write(0x00);
    adf.write(0x00);
    
    adf.write(0x00);
    adf.write(0x00);
    adf.write(0x00);
    adf.write(0x00);
    
    adf.write(0x04);
    adf.write(0x00);
    adf.write(0x00);
    adf.write(0x00);
    
    adf.write(0x00);
    adf.write(0x00);
    CS=1;
    wait(1);
    
}


/******************************************************************************************/

void initiate(void){
    
    CS=0;
    adf.write(0xFF);
    adf.write(0xFF);
    CS=1;
    wait_ms(2);

    CS=0;
    adf.write(0x08);    // TRANSMIT_DATA LENGTH
    adf.write(0x14);
    adf.write(0xFF);
    CS=1;
    wait_ms(2);
    CS=0;
    adf.write(0x08);        // TRANSMIT_DATA LENGTH
    adf.write(0x15);
    adf.write(0xFF);
    CS=1;
    wait_ms(2);
    
    CS=0;
    adf.write(0x09);
    adf.write(0x24);   // TX_BASE ADDRESS   0x20(starting Tx Byte)
    adf.write(0x20);
    CS=1;
    wait_ms(2);
    
    CS=0;
    adf.write(0x09);
    adf.write(0x37);// BUFFER SIZE 0xE0=224 Bytes 0x137 is adress of buffer size
    adf.write(0xE0);
    CS=1;
    wait_ms(2);
    
    CS=0;
    adf.write(0x09);
    adf.write(0x36);//BB_Tx_Buffer Signal when Buffer is half filled
    adf.write(0x70);//0x70 = 112 >> When Half buffer interrupt is given
    CS=1;
    wait_ms(2);
    
    
    CS=0;
    adf.write(0x09);
    adf.write(0x39);//BB_Tx_Buffer Signal when Buffer is half filled
    adf.write(0x10);//0x70 = 112 >> When Half buffer interrupt is given
    CS=1;
    wait_ms(2);

    }

    
    
/*int irq_src(void){
        
        adf.write(0x2B);
        adf.write(0x36);
        adf.write(0xFF);
        irqsrc = adf.write(0xFF);
        
        irqsrc &= 0x60;
        if (irqsrc == 0x20)
        return 1;//Buffer is almost full
        else if (irqsrc == 0x40)
        return 2;// Buffer is Full
        else
        return 0;
        }
  */  
  int p=112;
  int count = 0;
  int intcount =0;
  
void write_data(void){
//    t.reset();
//    count++;
//    cout<<"3"<<ENDL;
//    ledr=!ledr;
//    cout<<"irq detected"<<ENDL;
//    src = irq_src();
    p+=112;
    
    //CS=0;
//    adf.write(0x0B);//IRQ_SOURCE_Random write //To read CMD = 2B 36 FF FF
//    adf.write(0x36);//Address : 0x336
//    adf.write(0xFF);//Put Low
//    CS=1;
//    wait_us(80);
//    CS=0;
//    k=0;
    
    if(!j){
        adf.write(0x18);
        adf.write(0x20);
        while(k<=223){
          
          adf.write(data[k]);  
          k++;
            }
        
         }       
    
    else if(k<sizeof(data)){
//                if(src == 1){
                if(j%2){  //src==  Buffer Half Full src == 1
                adf.write(0x18);
                adf.write(0x20);
                }
            
//            else if(src==2){
            else{               //src==   Buffer is Full src==2
                adf.write(0x18);
                adf.write(0x90);
                }
            
            
            while(k<p){
                adf.write(data[k]);
                k++;
                        
            }
//            if((k)>=sizeof(data))
//            {
//                ticker.detach();//Stop interrupt detection
//                cout<<src<<ENDL;
//                }
        
        
     }
     
     else if(k>=(sizeof(data)) ){
            k=0;
            j=1;
            p=0;  
//            cout<<count<<" "<<sizeof(data)/112<<ENDL;   
         }
     
     
    CS=0;
    adf.write(0x0B);//IRQ_SOURCE_Random write //To read CMD = 2B 36 FF FF
    adf.write(0x36);//Address : 0x336
    adf.write(0xFF);//Put Low
    CS=1;
    wait_us(80);
    CS=0;
     
//     a[r]=t.read_us();
     j++;
//     r++;
     CS=1;
     wait_us(1);
}     
     
void Interrupt(){
    x = IRQ;
//    intcount++;
    if(x)
    {
        write_data();
        }
    }        
    
    
    
    
void send_data(void){
        
    CS=0;
    adf.write(0xBB);
    CS=1;
    wait_ms(2); 
    
    CS=0;
    adf.write(0xFF);
    adf.write(0xFF);
    CS=1;
    wait_ms(2); 
    
    write_data();
    
    CS=0;
    adf.write(0xB1);
    CS=1;
    wait_ms(2); 
    
    CS=0;
    adf.write(0xFF);
    adf.write(0xFF);
    CS=1;
    wait_ms(2);  
    
    CS=0;
    adf.write(0xB5);
    CS=1;
    wait_ms(2);  
    
    CS=0;
    adf.write(0xFF);
    adf.write(0xFF);
    CS=1;
    wait_ms(2);     
    }
    
    
int main()
{   
    adf.format(8,0);
    adf.frequency(1000000);
    bbram_write();
    initiate();
    send_data();
    cout<<"Work"<<ENDL;
    CS=0;
    adf.write(0x0B);//IRQ_SOURCE_Random write //To read CMD = 2B 36 FF FF  
    adf.write(0x36);//Address : 0x336
    adf.write(0xFF);//Put Low Clearing the MCR Value of the Source Register
    CS=1;
    
//    ticker.attach_us(&Interrupt,2000);
    while(1)
  {
//      ledr=!ledr;
        Interrupt();
      }
    
}