Dummy program to demonstrate problems: working code

Dependencies:   SLCD mbed-rtos mbed

Fork of MNG_TC by Shreesha S

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers adf.h Source File

adf.h

00001 DigitalOut cs_adf(D10);
00002 DigitalOut led2(LED_RED);
00003 InterruptIn IRQ(D8);
00004 Ticker ticker;
00005 unsigned char buffer_half=1; 
00006 unsigned char buffer_counter = 0;
00007 bool transmission_done = false;
00008 bool sent_tmfrom_SDcard;
00009 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};
00010 //void inline bbram_write(){   
00011 //    SPI_mutex.lock(); 
00012 //    cs_adf=0;
00013 //    spi.write(0xB0);//PHY_OFF
00014 //    wait_us(300);
00015 //    cs_adf=1;
00016 //    SPI_mutex.unlock();
00017 //    
00018 //    SPI_mutex.lock();
00019 //    // Write bbram
00020 //    cs_adf=0;
00021 //    for(int i=0;i<66;i++){
00022 //        spi.write(bbram_buffer[i]);    
00023 //    }
00024 //    cs_adf=1;
00025 //    SPI_mutex.unlock();
00026 //}
00027  
00028  
00029 /******************************************************************************************/
00030  
00031 //void initiate(void){
00032 //    SPI_mutex.lock();
00033 //    cs_adf=0;
00034 //    spi.write(0xFF);
00035 //    spi.write(0xFF);
00036 //    cs_adf=1;
00037 ////    wait_ms(2);
00038 // 
00039 //    cs_adf=0;
00040 //    spi.write(0x08);    // TRANSMIT_DATA LENGTH
00041 //    spi.write(0x14);
00042 //    spi.write(0xFF);
00043 //    cs_adf=1;
00044 ////    wait_ms(2);
00045 //    cs_adf=0;
00046 //    spi.write(0x08);        // TRANSMIT_DATA LENGTH
00047 //    spi.write(0x15);
00048 //    spi.write(0xFF);
00049 //    cs_adf=1;
00050 ////    wait_ms(2);
00051 //    
00052 //    cs_adf=0;
00053 //    spi.write(0x09);
00054 //    spi.write(0x24);   // TX_BASE ADDRESS   0x20(starting Tx Byte)
00055 //    spi.write(0x20);
00056 //    cs_adf=1;
00057 ////    wait_ms(2);
00058 //    
00059 //    cs_adf=0;
00060 //    spi.write(0x09);
00061 //    spi.write(0x37);// BUFFER SIZE 0xE0=224 Bytes 0x137 is adress of buffer size
00062 //    spi.write(0xE0);
00063 //    cs_adf=1;
00064 ////    wait_ms(2);
00065 //    
00066 //    cs_adf=0;
00067 //    spi.write(0x09);
00068 //    spi.write(0x36);//BB_Tx_Buffer Signal when Buffer is half filled
00069 //    spi.write(0x70);//0x70 = 112 >> When Half buffer interrupt is given
00070 //    cs_adf=1;
00071 ////    wait_ms(2);
00072 //    
00073 //    
00074 //    cs_adf=0;
00075 //    spi.write(0x09);
00076 //    spi.write(0x39);//BB_Tx_Buffer Signal when Buffer is half filled
00077 //    spi.write(0x10);//0x70 = 112 >> When Half buffer interrupt is given
00078 //    cs_adf=1;
00079 ////    wait_ms(2);    
00080 //    SPI_mutex.unlock();
00081 //    }
00082 // 
00083 // 
00084  
00085 void write_data(void){
00086    
00087     cs_adf=0;
00088     spi.write(0x0B);//IRQ_SOURCE_Random write //To read CMD = 2B 36 FF FF
00089     spi.write(0x36);//Address : 0x336
00090     spi.write(0xFF);//Put Low
00091     cs_adf=1;
00092  
00093     cs_adf=0;
00094     static bool first_2_time = true;
00095     buffer_counter=0;
00096  
00097     if(first_2_time==false && last_buffer==false){
00098        
00099         spi.write(0x18);
00100         if(buffer_half==1){
00101             spi.write(0x20);
00102             buffer_half = 2;
00103         }
00104         else if(buffer_half==2){
00105             spi.write(0x90);
00106             buffer_half = 1;
00107         }
00108         
00109         buffer_counter = 0;
00110         while(buffer_counter<112){
00111             spi.write(buffer_112[buffer_counter]);  
00112             buffer_counter++;
00113         }
00114            
00115     }
00116  
00117     if(first_2_time == true && last_buffer==false){
00118         
00119         spi.write(0x18);
00120         if(buffer_half==1){
00121             spi.write(0x20);
00122             buffer_half=2;
00123         }
00124         else{
00125             spi.write(0x90);
00126             buffer_half=1;
00127             first_2_time = false;
00128         }
00129         
00130         while(buffer_counter<112){
00131             spi.write(buffer_112[buffer_counter]);  
00132             buffer_counter++;
00133         }
00134             
00135     }
00136  
00137     if(last_buffer){
00138         cs_adf=0;
00139         spi.write(0x18);
00140         spi.write(0x20);
00141        
00142         while(buffer_counter<112){
00143             spi.write(buffer_112[buffer_counter]);  
00144             buffer_counter++;
00145         }
00146         cs_adf=1;
00147             
00148         ticker.detach();
00149         cs_adf=0;
00150          spi.write(0xB1);
00151         cs_adf=1;
00152         transmission_done=true;
00153     }
00154                           
00155 cs_adf=1;
00156 }
00157     
00158  
00159 void check(){   
00160     
00161     if(IRQ){
00162         VAR_SPACE::mng_tmtc_thread->signal_set(0x02);
00163     }
00164 }
00165   
00166 // 
00167 //void send_data(void){
00168 //    SPI_mutex.lock();
00169 //    cs_adf=0;
00170 //    spi.write(0xBB);
00171 //    cs_adf=1;
00172 ////    wait_us(300); 
00173 //    
00174 //    cs_adf=0;
00175 //    spi.write(0xFF);
00176 //    spi.write(0xFF);
00177 //    cs_adf=1;
00178 //    SPI_mutex.unlock();
00179 ////    wait_ms(2);
00180 //    if(sent_tmfrom_SDcard){
00181 //        printf("inside if\r\n");
00182 //        send_tm_from_SD_card();
00183 //    }
00184 //    else{
00185 //        printf("inside else\r\n");
00186 //        snd_tm.transmit_data(buffer_112,&last_buffer);
00187 //    }
00188 ////    SPI_mutex.lock();
00189 ////    write_data();
00190 ////    SPI_mutex.unlock();
00191 ////    if(sent_tmfrom_SDcard)
00192 ////    {
00193 ////        send_tm_from_SD_card();
00194 ////    }
00195 ////    else
00196 ////    { 
00197 ////        snd_tm.transmit_data(buffer_112,&last_buffer);
00198 ////    }
00199 ////    SPI_mutex.lock();
00200 ////    write_data();
00201 ////    SPI_mutex.unlock();
00202 ////    if(sent_tmfrom_SDcard)
00203 ////    {
00204 ////        send_tm_from_SD_card();
00205 ////    }
00206 ////    else
00207 ////    { 
00208 ////        snd_tm.transmit_data(buffer_112,&last_buffer);
00209 ////    }
00210 ////    SPI_mutex.lock();
00211 ////    cs_adf=0;
00212 ////    spi.write(0xB1);
00213 ////    cs_adf=1;
00214 ////    SPI_mutex.unlock();
00215 ////    wait_us(300); 
00216 ////    SPI_mutex.lock();
00217 ////    cs_adf=0;
00218 ////    spi.write(0xFF);
00219 ////    spi.write(0xFF);
00220 ////    cs_adf=1;
00221 ////    
00222 //////    wait_ms(2);  
00223 ////    
00224 ////    cs_adf=0;
00225 ////    spi.write(0xB5);
00226 ////    cs_adf=1;
00227 //////    cout<<"B5 given"<<ENDL;
00228 ////    SPI_mutex.unlock();
00229 ////    wait_us(300);  
00230 //////    int b5=t.read_us();
00231 ////    SPI_mutex.lock();
00232 ////    cs_adf=0;
00233 ////    spi.write(0xFF);
00234 ////    spi.write(0xFF);
00235 ////    cs_adf=1;
00236 ////    SPI_mutex.unlock();
00237 //////    wait_ms(2);
00238 ////    ticker.attach_us(&check,32000);
00239 ////    
00240 ////    while(!transmission_done){
00241 ////        led2=!led2;
00242 ////        printf("x");
00243 ////        Thread::signal_wait(0x2);
00244 ////        
00245 ////        SPI_mutex.lock();
00246 ////        write_data();
00247 ////        SPI_mutex.unlock();
00248 ////        if(sent_tmfrom_SDcard){
00249 ////            send_tm_from_SD_card();
00250 ////        }
00251 ////        else{
00252 ////            snd_tm.transmit_data(buffer_112,&last_buffer);
00253 ////        }
00254 ////    }
00255 //}
00256 //    
00257 //    
00258     
00259 void inline spi_SND_SDCard(uint64_t x,uint64_t y ){
00260     start_block_num = x;
00261     end_block_num = y;
00262     sent_tmfrom_SDcard = true;
00263     spi.format(8,0);
00264     spi.frequency(1000000);
00265  
00266 //    bbram_write();
00267 //    initiate();
00268 //    send_data();
00269  
00270 }
00271     
00272 void read_TC(TC_list* TC_ptr){
00273     unsigned char service_subtype = 0;
00274     uint64_t starting_add  = 0, ending_add = 0;
00275     service_subtype = (TC_ptr->TC_string[2])&0x0f;
00276     starting_add =  (TC_ptr->TC_string[5]) +  ( (TC_ptr->TC_string[4])<<8 ) + ( (TC_ptr->TC_string[3]) <<16);
00277     ending_add =  (TC_ptr->TC_string[8]) +  ( (TC_ptr->TC_string[7])<<8 ) + ( (TC_ptr->TC_string[6]) <<16);
00278     spi_SND_SDCard(starting_add , ending_add);   
00279 }
00280     
00281  
00282 void inline adf_not_SDcard(){
00283     spi.format(8,0);
00284     spi.frequency(1000000);
00285     sent_tmfrom_SDcard = false;
00286 //    bbram_write();
00287     SPI_mutex.lock(); 
00288     cs_adf=0;
00289     spi.write(0xB0);//PHY_OFF
00290     wait_us(300);
00291     cs_adf=1;
00292     SPI_mutex.unlock();
00293     
00294     SPI_mutex.lock();
00295     // Write bbram
00296     cs_adf=0;
00297     for(int i=0;i<66;i++){
00298         spi.write(bbram_buffer[i]);    
00299     }
00300     cs_adf=1;
00301     SPI_mutex.unlock();
00302 //    initiate();
00303 
00304 SPI_mutex.lock();
00305     cs_adf=0;
00306     spi.write(0xFF);
00307     spi.write(0xFF);
00308     cs_adf=1;
00309 //    wait_ms(2);
00310  
00311     cs_adf=0;
00312     spi.write(0x08);    // TRANSMIT_DATA LENGTH
00313     spi.write(0x14);
00314     spi.write(0xFF);
00315     cs_adf=1;
00316 //    wait_ms(2);
00317     cs_adf=0;
00318     spi.write(0x08);        // TRANSMIT_DATA LENGTH
00319     spi.write(0x15);
00320     spi.write(0xFF);
00321     cs_adf=1;
00322 //    wait_ms(2);
00323     
00324     cs_adf=0;
00325     spi.write(0x09);
00326     spi.write(0x24);   // TX_BASE ADDRESS   0x20(starting Tx Byte)
00327     spi.write(0x20);
00328     cs_adf=1;
00329 //    wait_ms(2);
00330     
00331     cs_adf=0;
00332     spi.write(0x09);
00333     spi.write(0x37);// BUFFER SIZE 0xE0=224 Bytes 0x137 is adress of buffer size
00334     spi.write(0xE0);
00335     cs_adf=1;
00336 //    wait_ms(2);
00337     
00338     cs_adf=0;
00339     spi.write(0x09);
00340     spi.write(0x36);//BB_Tx_Buffer Signal when Buffer is half filled
00341     spi.write(0x70);//0x70 = 112 >> When Half buffer interrupt is given
00342     cs_adf=1;
00343 //    wait_ms(2);
00344     
00345     
00346     cs_adf=0;
00347     spi.write(0x09);
00348     spi.write(0x39);//BB_Tx_Buffer Signal when Buffer is half filled
00349     spi.write(0x10);//0x70 = 112 >> When Half buffer interrupt is given
00350     cs_adf=1;
00351 //    wait_ms(2);    
00352     SPI_mutex.unlock();
00353 //    send_data();
00354 
00355 SPI_mutex.lock();
00356     cs_adf=0;
00357     spi.write(0xBB);
00358     cs_adf=1;
00359 //    wait_us(300); 
00360     
00361     cs_adf=0;
00362     spi.write(0xFF);
00363     spi.write(0xFF);
00364     cs_adf=1;
00365     SPI_mutex.unlock();
00366 //    wait_ms(2);
00367     if(sent_tmfrom_SDcard){
00368         send_tm_from_SD_card();
00369     }
00370     else{
00371         snd_tm.transmit_data(buffer_112,&last_buffer);
00372     }
00373     SPI_mutex.lock();
00374     write_data();
00375     SPI_mutex.unlock();
00376     if(sent_tmfrom_SDcard)
00377     {
00378         send_tm_from_SD_card();
00379     }
00380     else
00381     { 
00382         snd_tm.transmit_data(buffer_112,&last_buffer);
00383     }
00384     SPI_mutex.lock();
00385     write_data();
00386     SPI_mutex.unlock();
00387     if(sent_tmfrom_SDcard)
00388     {
00389         send_tm_from_SD_card();
00390     }
00391     else
00392     { 
00393         snd_tm.transmit_data(buffer_112,&last_buffer);
00394     }
00395     SPI_mutex.lock();
00396     cs_adf=0;
00397     spi.write(0xB1);
00398     cs_adf=1;
00399     SPI_mutex.unlock();
00400     wait_us(300); 
00401     SPI_mutex.lock();
00402     cs_adf=0;
00403     spi.write(0xFF);
00404     spi.write(0xFF);
00405     cs_adf=1;
00406     
00407 //    wait_ms(2);  
00408     
00409     cs_adf=0;
00410     spi.write(0xB5);
00411     cs_adf=1;
00412 //    cout<<"B5 given"<<ENDL;
00413     SPI_mutex.unlock();
00414     wait_us(300);  
00415 //    int b5=t.read_us();
00416     SPI_mutex.lock();
00417     cs_adf=0;
00418     spi.write(0xFF);
00419     spi.write(0xFF);
00420     cs_adf=1;
00421     SPI_mutex.unlock();
00422 //    wait_ms(2);
00423     ticker.attach_us(&check,32000);
00424     
00425     while(!transmission_done){
00426         led2=!led2;
00427         Thread::signal_wait(0x2);
00428         
00429         SPI_mutex.lock();
00430         write_data();
00431         SPI_mutex.unlock();
00432         if(sent_tmfrom_SDcard){
00433             send_tm_from_SD_card();
00434         }
00435         else{
00436             snd_tm.transmit_data(buffer_112,&last_buffer);
00437         }
00438     }
00439 }