TELECOMMAND MANAGER V1

Dependencies:   mbed SLCD mbed-rtos

Committer:
shreeshas95
Date:
Thu Sep 17 13:54:08 2015 +0000
Revision:
16:de2224dd9a0d
Parent:
13:7b27a8e9cbb4
Child:
14:a4c259ca0325
DUMMY program to demostrate the problems

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shreeshas95 13:7b27a8e9cbb4 1 SPI spi(PTA16, PTA17, PTA15); //MOSI, MISO, CLOCK
shreeshas95 13:7b27a8e9cbb4 2 DigitalOut cs_adf(D10);
shreeshas95 13:7b27a8e9cbb4 3 DigitalOut led2(LED_RED);
shreeshas95 13:7b27a8e9cbb4 4 InterruptIn IRQ(D8);
shreeshas95 13:7b27a8e9cbb4 5 Ticker ticker;
shreeshas95 13:7b27a8e9cbb4 6 unsigned char buffer_half=1;
shreeshas95 13:7b27a8e9cbb4 7 unsigned char buffer_counter = 0;
shreeshas95 13:7b27a8e9cbb4 8 bool transmission_done = false;
shreeshas95 13:7b27a8e9cbb4 9 bool sent_tmfrom_SDcard;
shreeshas95 13:7b27a8e9cbb4 10 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};
shreeshas95 13:7b27a8e9cbb4 11 void bbram_write(){
shreeshas95 13:7b27a8e9cbb4 12 SPI_mutex.lock();
shreeshas95 13:7b27a8e9cbb4 13 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 14 spi.write(0xB0);//PHY_OFF
shreeshas95 13:7b27a8e9cbb4 15 wait_us(300);
shreeshas95 13:7b27a8e9cbb4 16 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 17 SPI_mutex.unlock();
shreeshas95 13:7b27a8e9cbb4 18
shreeshas95 13:7b27a8e9cbb4 19 SPI_mutex.lock();
shreeshas95 13:7b27a8e9cbb4 20 // Write bbram
shreeshas95 13:7b27a8e9cbb4 21 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 22 for(int i=0;i<66;i++){
shreeshas95 13:7b27a8e9cbb4 23 spi.write(bbram_buffer[i]);
shreeshas95 13:7b27a8e9cbb4 24 }
shreeshas95 13:7b27a8e9cbb4 25 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 26 SPI_mutex.unlock();
shreeshas95 13:7b27a8e9cbb4 27 }
shreeshas95 13:7b27a8e9cbb4 28
shreeshas95 13:7b27a8e9cbb4 29
shreeshas95 13:7b27a8e9cbb4 30 /******************************************************************************************/
shreeshas95 13:7b27a8e9cbb4 31
shreeshas95 13:7b27a8e9cbb4 32 void initiate(void){
shreeshas95 13:7b27a8e9cbb4 33 SPI_mutex.lock();
shreeshas95 13:7b27a8e9cbb4 34 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 35 spi.write(0xFF);
shreeshas95 13:7b27a8e9cbb4 36 spi.write(0xFF);
shreeshas95 13:7b27a8e9cbb4 37 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 38 // wait_ms(2);
shreeshas95 13:7b27a8e9cbb4 39
shreeshas95 13:7b27a8e9cbb4 40 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 41 spi.write(0x08); // TRANSMIT_DATA LENGTH
shreeshas95 13:7b27a8e9cbb4 42 spi.write(0x14);
shreeshas95 13:7b27a8e9cbb4 43 spi.write(0xFF);
shreeshas95 13:7b27a8e9cbb4 44 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 45 // wait_ms(2);
shreeshas95 13:7b27a8e9cbb4 46 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 47 spi.write(0x08); // TRANSMIT_DATA LENGTH
shreeshas95 13:7b27a8e9cbb4 48 spi.write(0x15);
shreeshas95 13:7b27a8e9cbb4 49 spi.write(0xFF);
shreeshas95 13:7b27a8e9cbb4 50 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 51 // wait_ms(2);
shreeshas95 13:7b27a8e9cbb4 52
shreeshas95 13:7b27a8e9cbb4 53 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 54 spi.write(0x09);
shreeshas95 13:7b27a8e9cbb4 55 spi.write(0x24); // TX_BASE ADDRESS 0x20(starting Tx Byte)
shreeshas95 13:7b27a8e9cbb4 56 spi.write(0x20);
shreeshas95 13:7b27a8e9cbb4 57 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 58 // wait_ms(2);
shreeshas95 13:7b27a8e9cbb4 59
shreeshas95 13:7b27a8e9cbb4 60 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 61 spi.write(0x09);
shreeshas95 13:7b27a8e9cbb4 62 spi.write(0x37);// BUFFER SIZE 0xE0=224 Bytes 0x137 is adress of buffer size
shreeshas95 13:7b27a8e9cbb4 63 spi.write(0xE0);
shreeshas95 13:7b27a8e9cbb4 64 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 65 // wait_ms(2);
shreeshas95 13:7b27a8e9cbb4 66
shreeshas95 13:7b27a8e9cbb4 67 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 68 spi.write(0x09);
shreeshas95 13:7b27a8e9cbb4 69 spi.write(0x36);//BB_Tx_Buffer Signal when Buffer is half filled
shreeshas95 13:7b27a8e9cbb4 70 spi.write(0x70);//0x70 = 112 >> When Half buffer interrupt is given
shreeshas95 13:7b27a8e9cbb4 71 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 72 // wait_ms(2);
shreeshas95 13:7b27a8e9cbb4 73
shreeshas95 13:7b27a8e9cbb4 74
shreeshas95 13:7b27a8e9cbb4 75 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 76 spi.write(0x09);
shreeshas95 13:7b27a8e9cbb4 77 spi.write(0x39);//BB_Tx_Buffer Signal when Buffer is half filled
shreeshas95 13:7b27a8e9cbb4 78 spi.write(0x10);//0x70 = 112 >> When Half buffer interrupt is given
shreeshas95 13:7b27a8e9cbb4 79 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 80 // wait_ms(2);
shreeshas95 13:7b27a8e9cbb4 81 SPI_mutex.unlock();
shreeshas95 13:7b27a8e9cbb4 82 }
shreeshas95 13:7b27a8e9cbb4 83
shreeshas95 13:7b27a8e9cbb4 84
shreeshas95 13:7b27a8e9cbb4 85
shreeshas95 13:7b27a8e9cbb4 86 void write_data(void){
shreeshas95 13:7b27a8e9cbb4 87
shreeshas95 13:7b27a8e9cbb4 88 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 89 spi.write(0x0B);//IRQ_SOURCE_Random write //To read CMD = 2B 36 FF FF
shreeshas95 13:7b27a8e9cbb4 90 spi.write(0x36);//Address : 0x336
shreeshas95 13:7b27a8e9cbb4 91 spi.write(0xFF);//Put Low
shreeshas95 13:7b27a8e9cbb4 92 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 93
shreeshas95 13:7b27a8e9cbb4 94 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 95 static bool first_2_time = true;
shreeshas95 13:7b27a8e9cbb4 96 buffer_counter=0;
shreeshas95 13:7b27a8e9cbb4 97
shreeshas95 13:7b27a8e9cbb4 98 if(first_2_time==false && last_buffer==false){
shreeshas95 13:7b27a8e9cbb4 99
shreeshas95 13:7b27a8e9cbb4 100 spi.write(0x18);
shreeshas95 13:7b27a8e9cbb4 101 if(buffer_half==1){
shreeshas95 13:7b27a8e9cbb4 102 spi.write(0x20);
shreeshas95 13:7b27a8e9cbb4 103 buffer_half = 2;
shreeshas95 13:7b27a8e9cbb4 104 }
shreeshas95 13:7b27a8e9cbb4 105 else if(buffer_half==2){
shreeshas95 13:7b27a8e9cbb4 106 spi.write(0x90);
shreeshas95 13:7b27a8e9cbb4 107 buffer_half = 1;
shreeshas95 13:7b27a8e9cbb4 108 }
shreeshas95 13:7b27a8e9cbb4 109
shreeshas95 13:7b27a8e9cbb4 110 buffer_counter = 0;
shreeshas95 13:7b27a8e9cbb4 111 while(buffer_counter<112){
shreeshas95 13:7b27a8e9cbb4 112 spi.write(buffer_112[buffer_counter]);
shreeshas95 13:7b27a8e9cbb4 113 buffer_counter++;
shreeshas95 13:7b27a8e9cbb4 114 }
shreeshas95 13:7b27a8e9cbb4 115
shreeshas95 13:7b27a8e9cbb4 116 }
shreeshas95 13:7b27a8e9cbb4 117
shreeshas95 13:7b27a8e9cbb4 118 if(first_2_time == true && last_buffer==false){
shreeshas95 13:7b27a8e9cbb4 119
shreeshas95 13:7b27a8e9cbb4 120 spi.write(0x18);
shreeshas95 13:7b27a8e9cbb4 121 if(buffer_half==1){
shreeshas95 13:7b27a8e9cbb4 122 spi.write(0x20);
shreeshas95 13:7b27a8e9cbb4 123 buffer_half=2;
shreeshas95 13:7b27a8e9cbb4 124 }
shreeshas95 13:7b27a8e9cbb4 125 else{
shreeshas95 13:7b27a8e9cbb4 126 spi.write(0x90);
shreeshas95 13:7b27a8e9cbb4 127 buffer_half=1;
shreeshas95 13:7b27a8e9cbb4 128 first_2_time = false;
shreeshas95 13:7b27a8e9cbb4 129 }
shreeshas95 13:7b27a8e9cbb4 130
shreeshas95 13:7b27a8e9cbb4 131 while(buffer_counter<112){
shreeshas95 13:7b27a8e9cbb4 132 spi.write(buffer_112[buffer_counter]);
shreeshas95 13:7b27a8e9cbb4 133 buffer_counter++;
shreeshas95 13:7b27a8e9cbb4 134 }
shreeshas95 13:7b27a8e9cbb4 135
shreeshas95 13:7b27a8e9cbb4 136 }
shreeshas95 13:7b27a8e9cbb4 137
shreeshas95 13:7b27a8e9cbb4 138 if(last_buffer){
shreeshas95 13:7b27a8e9cbb4 139 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 140 spi.write(0x18);
shreeshas95 13:7b27a8e9cbb4 141 spi.write(0x20);
shreeshas95 13:7b27a8e9cbb4 142
shreeshas95 13:7b27a8e9cbb4 143 while(buffer_counter<112){
shreeshas95 13:7b27a8e9cbb4 144 spi.write(buffer_112[buffer_counter]);
shreeshas95 13:7b27a8e9cbb4 145 buffer_counter++;
shreeshas95 13:7b27a8e9cbb4 146 }
shreeshas95 13:7b27a8e9cbb4 147 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 148
shreeshas95 13:7b27a8e9cbb4 149 ticker.detach();
shreeshas95 13:7b27a8e9cbb4 150 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 151 spi.write(0xB1);
shreeshas95 13:7b27a8e9cbb4 152 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 153 transmission_done=true;
shreeshas95 13:7b27a8e9cbb4 154 }
shreeshas95 13:7b27a8e9cbb4 155
shreeshas95 13:7b27a8e9cbb4 156 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 157 }
shreeshas95 13:7b27a8e9cbb4 158
shreeshas95 13:7b27a8e9cbb4 159
shreeshas95 13:7b27a8e9cbb4 160 void check(){
shreeshas95 13:7b27a8e9cbb4 161
shreeshas95 13:7b27a8e9cbb4 162 if(IRQ){
shreeshas95 13:7b27a8e9cbb4 163 VAR_SPACE::mng_tmtc_thread->signal_set(0x02);
shreeshas95 13:7b27a8e9cbb4 164 }
shreeshas95 13:7b27a8e9cbb4 165 }
shreeshas95 13:7b27a8e9cbb4 166
shreeshas95 13:7b27a8e9cbb4 167
shreeshas95 13:7b27a8e9cbb4 168 void send_data(void){
shreeshas95 13:7b27a8e9cbb4 169 SPI_mutex.lock();
shreeshas95 13:7b27a8e9cbb4 170 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 171 spi.write(0xBB);
shreeshas95 13:7b27a8e9cbb4 172 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 173 // wait_us(300);
shreeshas95 13:7b27a8e9cbb4 174
shreeshas95 13:7b27a8e9cbb4 175 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 176 spi.write(0xFF);
shreeshas95 13:7b27a8e9cbb4 177 spi.write(0xFF);
shreeshas95 13:7b27a8e9cbb4 178 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 179 SPI_mutex.unlock();
shreeshas95 13:7b27a8e9cbb4 180 // wait_ms(2);
shreeshas95 13:7b27a8e9cbb4 181 if(sent_tmfrom_SDcard){
shreeshas95 13:7b27a8e9cbb4 182 send_tm_from_SD_card();
shreeshas95 13:7b27a8e9cbb4 183 }
shreeshas95 13:7b27a8e9cbb4 184 else{
shreeshas95 13:7b27a8e9cbb4 185 snd_tm.transmit_data(buffer_112,&last_buffer);
shreeshas95 13:7b27a8e9cbb4 186 }
shreeshas95 13:7b27a8e9cbb4 187 SPI_mutex.lock();
shreeshas95 13:7b27a8e9cbb4 188 write_data();
shreeshas95 13:7b27a8e9cbb4 189 SPI_mutex.unlock();
shreeshas95 13:7b27a8e9cbb4 190 if(sent_tmfrom_SDcard)
shreeshas95 13:7b27a8e9cbb4 191 {
shreeshas95 13:7b27a8e9cbb4 192 send_tm_from_SD_card();
shreeshas95 13:7b27a8e9cbb4 193 }
shreeshas95 13:7b27a8e9cbb4 194 else
shreeshas95 13:7b27a8e9cbb4 195 {
shreeshas95 13:7b27a8e9cbb4 196 snd_tm.transmit_data(buffer_112,&last_buffer);
shreeshas95 13:7b27a8e9cbb4 197 }
shreeshas95 13:7b27a8e9cbb4 198 SPI_mutex.lock();
shreeshas95 13:7b27a8e9cbb4 199 write_data();
shreeshas95 13:7b27a8e9cbb4 200 SPI_mutex.unlock();
shreeshas95 13:7b27a8e9cbb4 201 if(sent_tmfrom_SDcard)
shreeshas95 13:7b27a8e9cbb4 202 {
shreeshas95 13:7b27a8e9cbb4 203 send_tm_from_SD_card();
shreeshas95 13:7b27a8e9cbb4 204 }
shreeshas95 13:7b27a8e9cbb4 205 else
shreeshas95 13:7b27a8e9cbb4 206 {
shreeshas95 13:7b27a8e9cbb4 207 snd_tm.transmit_data(buffer_112,&last_buffer);
shreeshas95 13:7b27a8e9cbb4 208 }
shreeshas95 13:7b27a8e9cbb4 209 SPI_mutex.lock();
shreeshas95 13:7b27a8e9cbb4 210 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 211 spi.write(0xB1);
shreeshas95 13:7b27a8e9cbb4 212 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 213 SPI_mutex.unlock();
shreeshas95 13:7b27a8e9cbb4 214 wait_us(300);
shreeshas95 13:7b27a8e9cbb4 215 SPI_mutex.lock();
shreeshas95 13:7b27a8e9cbb4 216 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 217 spi.write(0xFF);
shreeshas95 13:7b27a8e9cbb4 218 spi.write(0xFF);
shreeshas95 13:7b27a8e9cbb4 219 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 220
shreeshas95 13:7b27a8e9cbb4 221 // wait_ms(2);
shreeshas95 13:7b27a8e9cbb4 222
shreeshas95 13:7b27a8e9cbb4 223 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 224 spi.write(0xB5);
shreeshas95 13:7b27a8e9cbb4 225 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 226 // cout<<"B5 given"<<ENDL;
shreeshas95 13:7b27a8e9cbb4 227 SPI_mutex.unlock();
shreeshas95 13:7b27a8e9cbb4 228 wait_us(300);
shreeshas95 13:7b27a8e9cbb4 229 // int b5=t.read_us();
shreeshas95 13:7b27a8e9cbb4 230 SPI_mutex.lock();
shreeshas95 13:7b27a8e9cbb4 231 cs_adf=0;
shreeshas95 13:7b27a8e9cbb4 232 spi.write(0xFF);
shreeshas95 13:7b27a8e9cbb4 233 spi.write(0xFF);
shreeshas95 13:7b27a8e9cbb4 234 cs_adf=1;
shreeshas95 13:7b27a8e9cbb4 235 SPI_mutex.unlock();
shreeshas95 13:7b27a8e9cbb4 236 // wait_ms(2);
shreeshas95 13:7b27a8e9cbb4 237 ticker.attach_us(&check,32000);
shreeshas95 13:7b27a8e9cbb4 238
shreeshas95 13:7b27a8e9cbb4 239 while(!transmission_done){
shreeshas95 13:7b27a8e9cbb4 240 led2=!led2;
shreeshas95 13:7b27a8e9cbb4 241 Thread::signal_wait(0x2);
shreeshas95 13:7b27a8e9cbb4 242
shreeshas95 13:7b27a8e9cbb4 243 SPI_mutex.lock();
shreeshas95 13:7b27a8e9cbb4 244 write_data();
shreeshas95 13:7b27a8e9cbb4 245 SPI_mutex.unlock();
shreeshas95 13:7b27a8e9cbb4 246 if(sent_tmfrom_SDcard){
shreeshas95 13:7b27a8e9cbb4 247 send_tm_from_SD_card();
shreeshas95 13:7b27a8e9cbb4 248 }
shreeshas95 13:7b27a8e9cbb4 249 else{
shreeshas95 13:7b27a8e9cbb4 250 snd_tm.transmit_data(buffer_112,&last_buffer);
shreeshas95 13:7b27a8e9cbb4 251 }
shreeshas95 13:7b27a8e9cbb4 252 }
shreeshas95 13:7b27a8e9cbb4 253
shreeshas95 13:7b27a8e9cbb4 254 }
shreeshas95 13:7b27a8e9cbb4 255
shreeshas95 13:7b27a8e9cbb4 256
shreeshas95 13:7b27a8e9cbb4 257
shreeshas95 13:7b27a8e9cbb4 258 void inline spi_SND_SDCard(uint64_t x,uint64_t y ){
shreeshas95 13:7b27a8e9cbb4 259 start_block_num = x;
shreeshas95 13:7b27a8e9cbb4 260 end_block_num = y;
shreeshas95 13:7b27a8e9cbb4 261 sent_tmfrom_SDcard = true;
shreeshas95 13:7b27a8e9cbb4 262 spi.format(8,0);
shreeshas95 13:7b27a8e9cbb4 263 spi.frequency(1000000);
shreeshas95 13:7b27a8e9cbb4 264
shreeshas95 13:7b27a8e9cbb4 265 bbram_write();
shreeshas95 13:7b27a8e9cbb4 266 initiate();
shreeshas95 13:7b27a8e9cbb4 267 send_data();
shreeshas95 13:7b27a8e9cbb4 268
shreeshas95 13:7b27a8e9cbb4 269 }
shreeshas95 13:7b27a8e9cbb4 270
shreeshas95 13:7b27a8e9cbb4 271 void read_TC(TC_list* TC_ptr){
shreeshas95 13:7b27a8e9cbb4 272 unsigned char service_subtype = 0;
shreeshas95 13:7b27a8e9cbb4 273 uint64_t starting_add = 0, ending_add = 0;
shreeshas95 13:7b27a8e9cbb4 274 service_subtype = (TC_ptr->TC_string[2])&0x0f;
shreeshas95 13:7b27a8e9cbb4 275 starting_add = (TC_ptr->TC_string[5]) + ( (TC_ptr->TC_string[4])<<8 ) + ( (TC_ptr->TC_string[3]) <<16);
shreeshas95 13:7b27a8e9cbb4 276 ending_add = (TC_ptr->TC_string[8]) + ( (TC_ptr->TC_string[7])<<8 ) + ( (TC_ptr->TC_string[6]) <<16);
shreeshas95 13:7b27a8e9cbb4 277 spi_SND_SDCard(starting_add , ending_add);
shreeshas95 13:7b27a8e9cbb4 278 }
shreeshas95 13:7b27a8e9cbb4 279
shreeshas95 13:7b27a8e9cbb4 280
shreeshas95 13:7b27a8e9cbb4 281 void adf_not_SDcard(){
shreeshas95 13:7b27a8e9cbb4 282 spi.format(8,0);
shreeshas95 13:7b27a8e9cbb4 283 spi.frequency(1000000);
shreeshas95 13:7b27a8e9cbb4 284 sent_tmfrom_SDcard = false;
shreeshas95 13:7b27a8e9cbb4 285
shreeshas95 13:7b27a8e9cbb4 286 bbram_write();
shreeshas95 13:7b27a8e9cbb4 287 initiate();
shreeshas95 13:7b27a8e9cbb4 288 send_data();
shreeshas95 13:7b27a8e9cbb4 289
shreeshas95 13:7b27a8e9cbb4 290 }