lele

Dependencies:   mbed

adfHeader.h

Committer:
krishanprajapat
Date:
2015-07-31
Revision:
0:984643af7d81

File content as of revision 0:984643af7d81:

SPI adf(PTA16, PTA17, PTA15); //MOSI, MISO, CLOCK
DigitalOut cs_adf(D10);
DigitalOut led2(LED_RED);
InterruptIn IRQ(D8);
Ticker ticker;
unsigned char buffer_half=1; 
unsigned char buffer_counter = 0;
bool transmission_done = false;
bool sent_tmfrom_SDcard;
unsigned char bbram_buffer[66]={0x19,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0xF4,0xc2,0x10,0xC0,0x00,0x30,0x31,0x07,0x00,0x01,0x00,0x7F,0x00,0x0B,0x37,0x00,0x00,0x40,0x0C,0x00,0x05,0x00,0x00,0x18,0x12,0x34,0x56,0x10,0x10,0xC4,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00};
void bbram_write(){   
 
    cs_adf=0;
    adf.write(0xB0);//PHY_OFF
    wait_us(300);
    cs_adf=1;

    // Write bbram
    cs_adf=0;
    for(int i=0;i<66;i++){
        adf.write(bbram_buffer[i]);    
    }
    cs_adf=1;
    
}


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

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

    cs_adf=0;
    adf.write(0x08);    // TRANSMIT_DATA LENGTH
    adf.write(0x14);
    adf.write(0xFF);
    cs_adf=1;
//    wait_ms(2);
    cs_adf=0;
    adf.write(0x08);        // TRANSMIT_DATA LENGTH
    adf.write(0x15);
    adf.write(0xFF);
    cs_adf=1;
//    wait_ms(2);
    
    cs_adf=0;
    adf.write(0x09);
    adf.write(0x24);   // TX_BASE ADDRESS   0x20(starting Tx Byte)
    adf.write(0x20);
    cs_adf=1;
//    wait_ms(2);
    
    cs_adf=0;
    adf.write(0x09);
    adf.write(0x37);// BUFFER SIZE 0xE0=224 Bytes 0x137 is adress of buffer size
    adf.write(0xE0);
    cs_adf=1;
//    wait_ms(2);
    
    cs_adf=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_adf=1;
//    wait_ms(2);
    
    
    cs_adf=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_adf=1;
//    wait_ms(2);    
    }

 

void write_data(void){
   
    cs_adf=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_adf=1;

    cs_adf=0;
    static bool first_2_time = true;
    buffer_counter=0;
 
    if(first_2_time==false && last_buffer==false){
       
        adf.write(0x18);
        if(buffer_half==1){
            adf.write(0x20);
            buffer_half = 2;
        }
        else if(buffer_half==2){
            adf.write(0x90);
            buffer_half = 1;
        }
        
        buffer_counter = 0;
        while(buffer_counter<112){
            adf.write(buffer_112[buffer_counter]);  
            buffer_counter++;
        }
           
    }
 
    if(first_2_time == true && last_buffer==false){
        
        adf.write(0x18);
        if(buffer_half==1){
            adf.write(0x20);
            buffer_half=2;
        }
        else{
            adf.write(0x90);
            buffer_half=1;
            first_2_time = false;
        }
        
        while(buffer_counter<112){
            adf.write(buffer_112[buffer_counter]);  
            buffer_counter++;
        }
            
    }

    if(last_buffer){
        cs_adf=0;
        adf.write(0x18);
        adf.write(0x20);
       
        while(buffer_counter<112){
            adf.write(buffer_112[buffer_counter]);  
            buffer_counter++;
        }
        cs_adf=1;
            
        ticker.detach();
        cs_adf=0;
         adf.write(0xB1);
        cs_adf=1;
        transmission_done=true;
    }
                          
cs_adf=1;
}
    

void check(){   
    
    if(IRQ){
        write_data();
        if(sent_tmfrom_SDcard){
        send_tm_from_SD_card();
        }
        
        else{
        snd_tm.transmit_data(buffer_112,&last_buffer);
        }    
    }
}
  

void send_data(void){
        
    cs_adf=0;
    adf.write(0xBB);
    cs_adf=1;
//    wait_us(300); 
    
    cs_adf=0;
    adf.write(0xFF);
    adf.write(0xFF);
    cs_adf=1;
//    wait_ms(2);
    if(sent_tmfrom_SDcard){
        send_tm_from_SD_card();
    }
    else{ 
        snd_tm.transmit_data(buffer_112,&last_buffer);
    }
    write_data();
    if(sent_tmfrom_SDcard)
    {
        send_tm_from_SD_card();
    }
    else
    { 
        snd_tm.transmit_data(buffer_112,&last_buffer);
    }
    write_data();
    if(sent_tmfrom_SDcard)
    {
        send_tm_from_SD_card();
    }
    else
    { 
        snd_tm.transmit_data(buffer_112,&last_buffer);
    }

    cs_adf=0;
    adf.write(0xB1);
    cs_adf=1;
    wait_us(300); 
    
    cs_adf=0;
    adf.write(0xFF);
    adf.write(0xFF);
    cs_adf=1;
//    wait_ms(2);  
    
    cs_adf=0;
    adf.write(0xB5);
    cs_adf=1;
//    cout<<"B5 given"<<ENDL;
    wait_us(300);  
//    int b5=t.read_us();
    cs_adf=0;
    adf.write(0xFF);
    adf.write(0xFF);
    cs_adf=1;
//    wait_ms(2);
    ticker.attach_us(&check,32000);
    
    while(!transmission_done){
        led2=!led2;
        wait(.1);
    }
    
}
    
    
    
void inline adf_SND_SDCard(uint64_t x,uint64_t y ){
    start_block_num = x;
    end_block_num = y;
    sent_tmfrom_SDcard = true;
    adf.format(8,0);
    adf.frequency(1000000);

    bbram_write();
    initiate();
    send_data();

}
    
void read_TC(TC_list* TC_ptr){
    unsigned char service_subtype = 0;
    uint64_t starting_add  = 0, ending_add = 0;
    service_subtype = (TC_ptr->TC_string[2])&0x0f;
    starting_add =  (TC_ptr->TC_string[5]) +  ( (TC_ptr->TC_string[4])<<8 ) + ( (TC_ptr->TC_string[3]) <<16);
    ending_add =  (TC_ptr->TC_string[8]) +  ( (TC_ptr->TC_string[7])<<8 ) + ( (TC_ptr->TC_string[6]) <<16);
    adf_SND_SDCard(starting_add , ending_add);   
}
    

void adf_not_SDcard(){
    adf.format(8,0);
    adf.frequency(1000000);
    sent_tmfrom_SDcard = false;
    
    bbram_write();
    initiate();
    send_data();

}