working version

Dependencies:   mbed mbed-rtos SimpleDMA FreescaleIAP eeprom

Fork of CDMS_CODE_FM_28JAN2017 by samp Srinivasan

Committer:
ee12b079
Date:
Tue Nov 22 08:43:13 2016 +0000
Revision:
307:6654e7908e57
Parent:
306:82b7d137db31
testing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shreeshas95 1:a0055b3280c8 1 //without reset feature , with state checks.
ee12b079 172:c508bbf7e89a 2 InterruptIn IRQ(ADF_IRQ);
aniruddhv 52:0bd68655c651 3 //Ticker ticker;
ee12b079 176:a5bfe3ca60b1 4
shreeshas95 1:a0055b3280c8 5 bool loop_on;
shreeshas95 1:a0055b3280c8 6 bool ADF_off;
shreeshas95 1:a0055b3280c8 7 bool buffer_state;
ee12b079 9:e9eaada136c6 8 bool finish_write_data;
shreeshas95 1:a0055b3280c8 9 uint8_t signal = 0x00;
ee12b079 288:aa93d6652381 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,/*PA Level Byte*/0x57/*PA Parameters*/,0x00,0x0B,0x37,0x00,0x00,0x40,0x0C,0x00,0x05,0x00,0x00,0x18,0x12,0x34,0x56,0x20,0x10,0xC4,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xE0,0x00,0x10,0x04,0x00,0x00,0x00,0x00,0x00};
ee12b079 268:ded5306a1fd1 11 bool data_irq_err=0;
ee12b079 268:ded5306a1fd1 12 bool data_err= false;
ee12b079 268:ded5306a1fd1 13 unsigned char temp_byte=0x00;
ee12b079 268:ded5306a1fd1 14 unsigned char data_err1[112];
ee12b079 268:ded5306a1fd1 15 unsigned char data_err_cnt=0;
ee12b079 268:ded5306a1fd1 16 unsigned int byte_count =0;
ee12b079 268:ded5306a1fd1 17 #define DATA_ERR_THRS 20
ee12b079 268:ded5306a1fd1 18 bool rolling_buffer_settings_error=true;
ee12b079 268:ded5306a1fd1 19 bool bbram_write_success=true;
ee12b079 268:ded5306a1fd1 20 int bbram_err_cnt=0;
ee12b079 268:ded5306a1fd1 21 int rbp_err_cnt=0;
ee12b079 268:ded5306a1fd1 22 bool reset_flag=false;
ee12b079 268:ded5306a1fd1 23 #define RBP_THRS 4
ee12b079 268:ded5306a1fd1 24 bool quit_configuration=false;
ee12b079 268:ded5306a1fd1 25 bool power_reset_flag=false;
ee12b079 268:ded5306a1fd1 26 unsigned int power_reset_count=0;
ee12b079 268:ded5306a1fd1 27 bool Configuration_done=false;
ee12b079 268:ded5306a1fd1 28 #define HW_THRS 2
ee12b079 9:e9eaada136c6 29
shreeshas95 2:2caf2a9a13aa 30 //int initialise_card();
shreeshas95 2:2caf2a9a13aa 31 //int disk_initialize();
shreeshas95 1:a0055b3280c8 32 //------------------------------------------------------------------------
shreeshas95 1:a0055b3280c8 33 // state checking functions
shreeshas95 1:a0055b3280c8 34 //bool assrt_phy_off( int, int, int);
shreeshas95 1:a0055b3280c8 35 //bool assrt_phy_on( int,int,int);
shreeshas95 1:a0055b3280c8 36 //bool assrt_phy_tx(int,int,int);
ee12b079 268:ded5306a1fd1 37
ee12b079 268:ded5306a1fd1 38 #define TRANSMIT_LEN_1 0xFF
ee12b079 268:ded5306a1fd1 39 #define TRANSMIT_LEN_2 0xFF
ee12b079 268:ded5306a1fd1 40 /***/
ee12b079 268:ded5306a1fd1 41 Timer T;
ee12b079 9:e9eaada136c6 42
shreeshas95 1:a0055b3280c8 43 #define START_ADDRESS 0x020;
shreeshas95 1:a0055b3280c8 44 #define MISO_PIN PTE3
shreeshas95 1:a0055b3280c8 45 /**************Defining Counter Limits**************/
shreeshas95 1:a0055b3280c8 46 #define THRS 20
shreeshas95 1:a0055b3280c8 47 #define STATE_ERR_THRS 20
shreeshas95 1:a0055b3280c8 48 #define PHY_OFF_EXEC_TIME 300
shreeshas95 1:a0055b3280c8 49 #define PHY_ON_EXEC_TIME 300
shreeshas95 1:a0055b3280c8 50 #define PHY_TX_EXEC_TIME 600
shreeshas95 1:a0055b3280c8 51 /******DEFINING COMMANDS*********/
shreeshas95 1:a0055b3280c8 52 #define CMD_HW_RESET 0xC8
shreeshas95 1:a0055b3280c8 53 #define CMD_PHY_ON 0xB1
shreeshas95 1:a0055b3280c8 54 #define CMD_PHY_OFF 0xB0
shreeshas95 1:a0055b3280c8 55 #define CMD_PHY_TX 0xB5
shreeshas95 1:a0055b3280c8 56 #define CMD_CONFIG_DEV 0xBB
ee12b079 268:ded5306a1fd1 57 /**STATES**/
ee12b079 268:ded5306a1fd1 58 //=======================
ee12b079 268:ded5306a1fd1 59 #define PHY_OFF 0xB1
ee12b079 268:ded5306a1fd1 60 #define PHY_ON 0xB2
ee12b079 268:ded5306a1fd1 61 #define PHY_TX 0xB4
ee12b079 268:ded5306a1fd1 62 #define BUSY 0x00
ee12b079 268:ded5306a1fd1 63 //===================================================
ee12b079 268:ded5306a1fd1 64
ee12b079 268:ded5306a1fd1 65 unsigned int Adf_data_counter=0;
ee12b079 268:ded5306a1fd1 66 unsigned char status =0;
ee12b079 268:ded5306a1fd1 67 unsigned int cmd_err_cnt=0;
ee12b079 268:ded5306a1fd1 68 unsigned int data_length;
ee12b079 268:ded5306a1fd1 69 unsigned int state_err_cnt=0;
ee12b079 268:ded5306a1fd1 70 unsigned int miso_err_cnt=0;
ee12b079 268:ded5306a1fd1 71 unsigned int hw_reset_err_cnt=0;
ee12b079 268:ded5306a1fd1 72 unsigned int counter =0;
ee12b079 268:ded5306a1fd1 73 bool temp_return = 0;
ee12b079 268:ded5306a1fd1 74 bool bcn_flag=0;
ee12b079 268:ded5306a1fd1 75 bool bbram_flag=0;
ee12b079 268:ded5306a1fd1 76
ee12b079 268:ded5306a1fd1 77 bool stop_transmission=false;
ee12b079 268:ded5306a1fd1 78
ee12b079 268:ded5306a1fd1 79 #define reset_flags {\
ee12b079 268:ded5306a1fd1 80 finish_write_data = false;\
ee12b079 268:ded5306a1fd1 81 buffer_state = true;\
ee12b079 268:ded5306a1fd1 82 last_buffer = false;\
ee12b079 268:ded5306a1fd1 83 loop_on = true;\
ee12b079 268:ded5306a1fd1 84 ADF_off = false;\
ee12b079 268:ded5306a1fd1 85 buffer_state = true;\
ee12b079 268:ded5306a1fd1 86 loop_on = true;\
ee12b079 268:ded5306a1fd1 87 ADF_off = false;\
ee12b079 271:72529b247333 88 /*sent_tmfrom_SDcard = false;*/\
ee12b079 268:ded5306a1fd1 89 Adf_data_counter=0;\
ee12b079 268:ded5306a1fd1 90 status =0;\
ee12b079 268:ded5306a1fd1 91 cmd_err_cnt=0;\
ee12b079 268:ded5306a1fd1 92 data_length;\
ee12b079 268:ded5306a1fd1 93 state_err_cnt=0;\
ee12b079 268:ded5306a1fd1 94 miso_err_cnt=0;\
ee12b079 268:ded5306a1fd1 95 hw_reset_err_cnt=0;\
ee12b079 268:ded5306a1fd1 96 counter =0;\
ee12b079 268:ded5306a1fd1 97 bcn_flag=0;\
ee12b079 268:ded5306a1fd1 98 bbram_flag=0;\
ee12b079 268:ded5306a1fd1 99 stop_transmission=false;\
ee12b079 268:ded5306a1fd1 100 }
ee12b079 268:ded5306a1fd1 101
ee12b079 307:6654e7908e57 102 /*Added on 29th October 2016**/
ee12b079 268:ded5306a1fd1 103
ee12b079 307:6654e7908e57 104 bool dummy_digitalOut_1=0;
ee12b079 307:6654e7908e57 105 #define power_reset{\
ee12b079 307:6654e7908e57 106 dummy_digitalOut_1=0;\
ee12b079 307:6654e7908e57 107 wait_ms(10);\
ee12b079 307:6654e7908e57 108 dummy_digitalOut_1=1;\
ee12b079 307:6654e7908e57 109 power_reset_flag=false;\
ee12b079 307:6654e7908e57 110 power_reset_count++;\
ee12b079 307:6654e7908e57 111 wait_ms(10);\
ee12b079 307:6654e7908e57 112 }\
ee12b079 307:6654e7908e57 113 /**********************/
ee12b079 268:ded5306a1fd1 114 int err_arr[64];
ee12b079 268:ded5306a1fd1 115 bool bbram_err=false;
ee12b079 268:ded5306a1fd1 116 int err_idx=-1;
ee12b079 268:ded5306a1fd1 117 int err[64];
ee12b079 268:ded5306a1fd1 118 #define bbram_check gCS_ADF=0;\
ee12b079 268:ded5306a1fd1 119 for(int i=0;i<64;i++){\
ee12b079 268:ded5306a1fd1 120 err_arr[i]=0;\
ee12b079 268:ded5306a1fd1 121 }\
ee12b079 268:ded5306a1fd1 122 for(int i=0;i<64;i++){\
ee12b079 268:ded5306a1fd1 123 err[i]=0;\
ee12b079 268:ded5306a1fd1 124 }\
ee12b079 268:ded5306a1fd1 125 bbram_err=false;\
ee12b079 268:ded5306a1fd1 126 gCS_ADF=0;\
ee12b079 268:ded5306a1fd1 127 spi.write(0x39);\
ee12b079 268:ded5306a1fd1 128 spi.write(0x00);\
ee12b079 268:ded5306a1fd1 129 spi.write(0xFF);\
ee12b079 268:ded5306a1fd1 130 for(int i=0;i<64;i++){\
ee12b079 268:ded5306a1fd1 131 err_arr[i]=spi.write(0xFF);\
ee12b079 268:ded5306a1fd1 132 if(err_arr[i]!=bbram_buffer[i+2]){\
ee12b079 268:ded5306a1fd1 133 err[i]=1;\
ee12b079 268:ded5306a1fd1 134 bbram_err=true;\
ee12b079 268:ded5306a1fd1 135 }\
ee12b079 268:ded5306a1fd1 136 }\
ee12b079 268:ded5306a1fd1 137 gCS_ADF=1;\
ee12b079 268:ded5306a1fd1 138 if(!bbram_err)\
ee12b079 268:ded5306a1fd1 139 gPC.printf("BBRAM verified \r\n");\
ee12b079 268:ded5306a1fd1 140 else\
ee12b079 268:ded5306a1fd1 141 gPC.printf("BBRAM error \r\n");\
ee12b079 176:a5bfe3ca60b1 142
ee12b079 268:ded5306a1fd1 143
ee12b079 268:ded5306a1fd1 144 bool tx_loop=1;
ee12b079 268:ded5306a1fd1 145
ee12b079 268:ded5306a1fd1 146 #define PRNT_ONCE {\
ee12b079 268:ded5306a1fd1 147 gPC.printf("%d %d lol_ what?\r\n",segment_len,EOS_len);\
ee12b079 268:ded5306a1fd1 148 }
ee12b079 268:ded5306a1fd1 149
ee12b079 268:ded5306a1fd1 150 #define bbram_write {\
ee12b079 268:ded5306a1fd1 151 gCS_ADF=0;\
ee12b079 268:ded5306a1fd1 152 spi.write(0xB0);\
ee12b079 268:ded5306a1fd1 153 wait_us(300);\
ee12b079 268:ded5306a1fd1 154 gCS_ADF=1;\
ee12b079 268:ded5306a1fd1 155 gCS_ADF=0;\
ee12b079 268:ded5306a1fd1 156 for(int i=0;i<66;i++){\
ee12b079 268:ded5306a1fd1 157 spi.write(bbram_buffer[i]);\
ee12b079 268:ded5306a1fd1 158 }\
ee12b079 268:ded5306a1fd1 159 gCS_ADF=1;\
ee12b079 268:ded5306a1fd1 160 }
ee12b079 268:ded5306a1fd1 161 //------------------------------------------------------------------------
ee12b079 268:ded5306a1fd1 162 // state checking functions
ee12b079 268:ded5306a1fd1 163 //bool assrt_phy_off( int, int, int);
ee12b079 268:ded5306a1fd1 164 //bool assrt_phy_on( int,int,int);
ee12b079 268:ded5306a1fd1 165 //bool assrt_phy_tx(int,int,int);
ee12b079 268:ded5306a1fd1 166
shreeshas95 1:a0055b3280c8 167 #define check_status {\
shreeshas95 1:a0055b3280c8 168 unsigned char stat=0;\
shreeshas95 1:a0055b3280c8 169 gCS_ADF=0;\
ee12b079 176:a5bfe3ca60b1 170 spi.write(0xFF);\
ee12b079 176:a5bfe3ca60b1 171 stat = spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 172 gCS_ADF=1;\
ee12b079 176:a5bfe3ca60b1 173 status = stat;\
shreeshas95 1:a0055b3280c8 174 }
ee12b079 271:72529b247333 175 /***********************/
ee12b079 271:72529b247333 176 /**********Restart ADF**************/
ee12b079 271:72529b247333 177
ee12b079 271:72529b247333 178 /**************************/
ee12b079 268:ded5306a1fd1 179
ee12b079 268:ded5306a1fd1 180 /*CMD_VAR*/
ee12b079 268:ded5306a1fd1 181 bool cmd_bit=true;
ee12b079 268:ded5306a1fd1 182 bool cmd_err_flag=false;
ee12b079 268:ded5306a1fd1 183 unsigned char command = 0x00;
ee12b079 271:72529b247333 184 void CMD(uint8_t command) {
ee12b079 271:72529b247333 185 cmd_err_cnt=0;
ee12b079 271:72529b247333 186 cmd_err_flag=false;
ee12b079 271:72529b247333 187 while(cmd_err_cnt<3) {
ee12b079 271:72529b247333 188 check_status;
ee12b079 271:72529b247333 189 cmd_bit=status&0x20;
ee12b079 271:72529b247333 190 if(cmd_bit) {
ee12b079 271:72529b247333 191 gCS_ADF=0;
ee12b079 271:72529b247333 192 spi.write(command);
ee12b079 271:72529b247333 193 gCS_ADF=1;
ee12b079 271:72529b247333 194 break;
ee12b079 271:72529b247333 195 } else {
ee12b079 271:72529b247333 196 wait_us(5);
ee12b079 271:72529b247333 197 cmd_err_cnt++;
ee12b079 271:72529b247333 198 }
ee12b079 271:72529b247333 199 }
ee12b079 271:72529b247333 200 if(cmd_err_cnt==3) {
ee12b079 271:72529b247333 201 cmd_err_flag=true;
ee12b079 271:72529b247333 202 }
ee12b079 268:ded5306a1fd1 203 }
ee12b079 271:72529b247333 204
ee12b079 271:72529b247333 205 // all three arguments are int
ee12b079 268:ded5306a1fd1 206 #define assrt_phy_off {\
ee12b079 268:ded5306a1fd1 207 int state_err_cnt = 0;\
ee12b079 268:ded5306a1fd1 208 CMD(CMD_PHY_OFF);\
ee12b079 268:ded5306a1fd1 209 if(cmd_err_flag){\
ee12b079 268:ded5306a1fd1 210 temp_return=1;\
chaithanyarss 261:1e54415b34d3 211 }\
ee12b079 268:ded5306a1fd1 212 else{\
ee12b079 268:ded5306a1fd1 213 for(int i = 0 ; i < 40 ;i++){\
ee12b079 268:ded5306a1fd1 214 CMD(CMD_PHY_OFF);\
ee12b079 268:ded5306a1fd1 215 check_status;\
ee12b079 268:ded5306a1fd1 216 if(status == PHY_OFF){\
ee12b079 268:ded5306a1fd1 217 temp_return = 0;\
ee12b079 268:ded5306a1fd1 218 break;\
ee12b079 268:ded5306a1fd1 219 }\
ee12b079 268:ded5306a1fd1 220 else if(state_err_cnt>THRS){\
ee12b079 268:ded5306a1fd1 221 temp_return = 1;\
ee12b079 268:ded5306a1fd1 222 break;\
ee12b079 268:ded5306a1fd1 223 }\
ee12b079 268:ded5306a1fd1 224 else {\
ee12b079 268:ded5306a1fd1 225 wait_ms(1);\
ee12b079 268:ded5306a1fd1 226 }\
shreeshas95 1:a0055b3280c8 227 }\
ee12b079 245:da9d1bd999da 228 }\
ee12b079 245:da9d1bd999da 229 }
ee12b079 268:ded5306a1fd1 230
ee12b079 307:6654e7908e57 231 #define HW_RESET_THRS 5
ee12b079 268:ded5306a1fd1 232 bool hardware_reset(int bcn_call)
ee12b079 307:6654e7908e57 233 {
ee12b079 307:6654e7908e57 234 if(hw_reset_err_cnt>HW_RESET_THRS){
ee12b079 307:6654e7908e57 235 power_reset_flag=true;
ee12b079 307:6654e7908e57 236 power_reset;
ee12b079 307:6654e7908e57 237 return 0;
ee12b079 307:6654e7908e57 238 }
ee12b079 268:ded5306a1fd1 239 for(int i= 0; i < 2 ; i++) {
shreeshas95 1:a0055b3280c8 240 gCS_ADF=0;
shreeshas95 1:a0055b3280c8 241 spi.write(CMD_HW_RESET);
shreeshas95 1:a0055b3280c8 242 gCS_ADF=1;
shreeshas95 1:a0055b3280c8 243 wait_ms(2);// Typically 1 ms
shreeshas95 1:a0055b3280c8 244 int count=0;
ee12b079 268:ded5306a1fd1 245 temp_return = 0;
ee12b079 268:ded5306a1fd1 246 while(count<10 && miso_err_cnt<10) {
ee12b079 268:ded5306a1fd1 247 if(MISO_PIN) {
ee12b079 268:ded5306a1fd1 248 // assrt_phy_off;
ee12b079 268:ded5306a1fd1 249 /*asseert_phyoff Starts**/
ee12b079 268:ded5306a1fd1 250 {\
ee12b079 268:ded5306a1fd1 251 int state_err_cnt = 0;\
ee12b079 268:ded5306a1fd1 252 CMD(CMD_PHY_OFF);\
ee12b079 268:ded5306a1fd1 253 if(cmd_err_flag){\
ee12b079 268:ded5306a1fd1 254 temp_return=1;\
ee12b079 268:ded5306a1fd1 255 }\
ee12b079 268:ded5306a1fd1 256 else{\
ee12b079 268:ded5306a1fd1 257 for(int i = 0 ; i < 40 ;i++){\
ee12b079 268:ded5306a1fd1 258 CMD(CMD_PHY_OFF);\
ee12b079 268:ded5306a1fd1 259 check_status;\
ee12b079 268:ded5306a1fd1 260 if(status == PHY_OFF){\
ee12b079 268:ded5306a1fd1 261 temp_return = 0;\
ee12b079 268:ded5306a1fd1 262 break;\
ee12b079 268:ded5306a1fd1 263 }\
ee12b079 268:ded5306a1fd1 264 else if(state_err_cnt>THRS){\
ee12b079 268:ded5306a1fd1 265 temp_return = 1;\
ee12b079 268:ded5306a1fd1 266 break;\
ee12b079 268:ded5306a1fd1 267 }\
ee12b079 268:ded5306a1fd1 268 else {\
ee12b079 268:ded5306a1fd1 269 wait_ms(1);\
ee12b079 268:ded5306a1fd1 270 }\
ee12b079 268:ded5306a1fd1 271 }\
ee12b079 268:ded5306a1fd1 272 }\
ee12b079 268:ded5306a1fd1 273 }\
ee12b079 268:ded5306a1fd1 274 /*Assert_phy_off_ends*/
ee12b079 268:ded5306a1fd1 275
ee12b079 268:ded5306a1fd1 276
ee12b079 268:ded5306a1fd1 277
ee12b079 268:ded5306a1fd1 278
ee12b079 268:ded5306a1fd1 279
shreeshas95 1:a0055b3280c8 280 if(!temp_return){
shreeshas95 1:a0055b3280c8 281 return 0;
shreeshas95 1:a0055b3280c8 282 }
shreeshas95 1:a0055b3280c8 283 count++;
ee12b079 268:ded5306a1fd1 284 } else {
shreeshas95 1:a0055b3280c8 285 wait_us(50);
shreeshas95 1:a0055b3280c8 286 miso_err_cnt++;
shreeshas95 1:a0055b3280c8 287 }
shreeshas95 1:a0055b3280c8 288 }
shreeshas95 1:a0055b3280c8 289 }
shreeshas95 1:a0055b3280c8 290 return 1;
shreeshas95 1:a0055b3280c8 291 }
ee12b079 268:ded5306a1fd1 292 //for reseting the transmission call assert function after b5 and b1. after b1 assert_phi_on and after b5 assert_phi_tx.
shreeshas95 1:a0055b3280c8 293 //----------------------------------------------------------------------------
ee12b079 268:ded5306a1fd1 294 unsigned char temp;
ee12b079 268:ded5306a1fd1 295 bool reg_err;
ee12b079 268:ded5306a1fd1 296 int reg_err_cnt;
ee12b079 268:ded5306a1fd1 297 #define REG_ERR_THRS 5
ee12b079 268:ded5306a1fd1 298 #define reg_check(addr1,addr2,reg_val){\
ee12b079 268:ded5306a1fd1 299 gCS_ADF=0;\
ee12b079 268:ded5306a1fd1 300 reg_err=false;\
ee12b079 268:ded5306a1fd1 301 spi.write(addr1);\
ee12b079 268:ded5306a1fd1 302 spi.write(addr2);\
ee12b079 268:ded5306a1fd1 303 spi.write(0xFF);\
ee12b079 268:ded5306a1fd1 304 temp = spi.write(0xFF);\
ee12b079 268:ded5306a1fd1 305 if(temp==reg_val)\
ee12b079 268:ded5306a1fd1 306 reg_err = false;\
ee12b079 268:ded5306a1fd1 307 else\
ee12b079 268:ded5306a1fd1 308 reg_err=true;\
ee12b079 268:ded5306a1fd1 309 gCS_ADF=1;\
ee12b079 268:ded5306a1fd1 310 }
ee12b079 268:ded5306a1fd1 311
ee12b079 268:ded5306a1fd1 312 #define initiate {\
shreeshas95 1:a0055b3280c8 313 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 314 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 315 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 316 gCS_ADF=1;\
ee12b079 268:ded5306a1fd1 317 reg_err=true;\
ee12b079 268:ded5306a1fd1 318 for(reg_err_cnt=0;reg_err_cnt<REG_ERR_THRS && reg_err;reg_err_cnt++){\
ee12b079 268:ded5306a1fd1 319 gCS_ADF=0;\
ee12b079 268:ded5306a1fd1 320 spi.write(0x08);\
ee12b079 268:ded5306a1fd1 321 spi.write(0x14);\
ee12b079 268:ded5306a1fd1 322 spi.write(TRANSMIT_LEN_1);\
ee12b079 268:ded5306a1fd1 323 gCS_ADF=1;\
ee12b079 268:ded5306a1fd1 324 reg_check(0x28,0x14,TRANSMIT_LEN_1);\
ee12b079 268:ded5306a1fd1 325 }\
ee12b079 268:ded5306a1fd1 326 if(reg_err)\
ee12b079 268:ded5306a1fd1 327 gPC.printf("Reg_err_ignored %x \r\n",(int)temp);\
ee12b079 268:ded5306a1fd1 328 else\
ee12b079 268:ded5306a1fd1 329 gPC.printf("reg written successful %x \r\n",(int)temp);\
ee12b079 268:ded5306a1fd1 330 reg_err=true;\
ee12b079 268:ded5306a1fd1 331 for(reg_err_cnt=0;reg_err_cnt<REG_ERR_THRS && reg_err;reg_err_cnt++){\
ee12b079 268:ded5306a1fd1 332 gCS_ADF=0;\
ee12b079 268:ded5306a1fd1 333 spi.write(0x08);\
ee12b079 268:ded5306a1fd1 334 spi.write(0x15);\
ee12b079 268:ded5306a1fd1 335 spi.write(TRANSMIT_LEN_2);\
ee12b079 268:ded5306a1fd1 336 gCS_ADF=1;\
ee12b079 268:ded5306a1fd1 337 reg_check(0x28,0x15,TRANSMIT_LEN_2);\
ee12b079 268:ded5306a1fd1 338 }\
ee12b079 268:ded5306a1fd1 339 if(reg_err)\
ee12b079 268:ded5306a1fd1 340 gPC.printf("Reg_err_ignored %x \r\n",(int)temp);\
ee12b079 268:ded5306a1fd1 341 else\
ee12b079 268:ded5306a1fd1 342 gPC.printf("reg written successful %x \r\n",(int)temp);\
ee12b079 268:ded5306a1fd1 343 }
ee12b079 268:ded5306a1fd1 344
ee12b079 268:ded5306a1fd1 345 #define write_data {\
ee12b079 268:ded5306a1fd1 346 counter++;\
ee12b079 271:72529b247333 347 if(counter==584){\
ee12b079 271:72529b247333 348 finish_write_data=true;\
ee12b079 271:72529b247333 349 restart_adf_flag=true;\
ee12b079 271:72529b247333 350 counter=0;\
ee12b079 271:72529b247333 351 }\
shreeshas95 1:a0055b3280c8 352 gCS_ADF=0;\
ee12b079 268:ded5306a1fd1 353 spi.write(0x0B);\
ee12b079 268:ded5306a1fd1 354 spi.write(0x36);\
ee12b079 268:ded5306a1fd1 355 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 356 gCS_ADF=1;\
ee12b079 268:ded5306a1fd1 357 data_err_cnt=0;\
ee12b079 268:ded5306a1fd1 358 data_err=true;\
ee12b079 268:ded5306a1fd1 359 while(data_err && (data_err_cnt<DATA_ERR_THRS)){\
ee12b079 268:ded5306a1fd1 360 gCS_ADF=0;\
ee12b079 268:ded5306a1fd1 361 if(buffer_state){\
ee12b079 268:ded5306a1fd1 362 spi.write(0x18);\
ee12b079 268:ded5306a1fd1 363 spi.write(0x20);\
ee12b079 268:ded5306a1fd1 364 for(unsigned char i=0; i<112;i++){\
ee12b079 268:ded5306a1fd1 365 spi.write(buffer_112[i]);\
ee12b079 268:ded5306a1fd1 366 /*gPC.printf("0x%X,",spi.write(buffer_112[i]));*/\
ee12b079 268:ded5306a1fd1 367 }\
ee12b079 268:ded5306a1fd1 368 }\
ee12b079 268:ded5306a1fd1 369 else{\
ee12b079 268:ded5306a1fd1 370 spi.write(0x18);\
ee12b079 268:ded5306a1fd1 371 spi.write(0x90);\
ee12b079 268:ded5306a1fd1 372 for(unsigned char i=0; i<112;i++){\
ee12b079 268:ded5306a1fd1 373 spi.write(buffer_112[i]);\
ee12b079 268:ded5306a1fd1 374 /*gPC.printf("0x%X,",spi.write(buffer_112[i]));*/\
ee12b079 268:ded5306a1fd1 375 }\
ee12b079 268:ded5306a1fd1 376 }\
ee12b079 268:ded5306a1fd1 377 gCS_ADF=1;\
ee12b079 268:ded5306a1fd1 378 wait_us(5);\
ee12b079 268:ded5306a1fd1 379 data_err=false;\
ee12b079 268:ded5306a1fd1 380 gCS_ADF=0;\
ee12b079 268:ded5306a1fd1 381 spi.write(0x38);\
ee12b079 268:ded5306a1fd1 382 if(buffer_state){\
ee12b079 268:ded5306a1fd1 383 spi.write(0x20);\
ee12b079 268:ded5306a1fd1 384 }\
ee12b079 268:ded5306a1fd1 385 else{\
ee12b079 268:ded5306a1fd1 386 spi.write(0x90);\
ee12b079 268:ded5306a1fd1 387 }\
ee12b079 268:ded5306a1fd1 388 spi.write(0xFF);\
ee12b079 268:ded5306a1fd1 389 for(unsigned char i=0; i<112;i++){\
ee12b079 268:ded5306a1fd1 390 temp_byte=spi.write(0xFF);\
ee12b079 268:ded5306a1fd1 391 if(buffer_112[i]!=temp_byte){\
ee12b079 268:ded5306a1fd1 392 data_err1[i]=1;\
ee12b079 268:ded5306a1fd1 393 data_err=true;\
ee12b079 268:ded5306a1fd1 394 }\
ee12b079 268:ded5306a1fd1 395 }\
shreeshas95 1:a0055b3280c8 396 gCS_ADF=1;\
ee12b079 268:ded5306a1fd1 397 /*SPI_mutex.unlock();*/\
ee12b079 268:ded5306a1fd1 398 if(data_err==false){\
ee12b079 268:ded5306a1fd1 399 buffer_state = !buffer_state;\
ee12b079 268:ded5306a1fd1 400 }\
ee12b079 268:ded5306a1fd1 401 data_err_cnt++;\
ee12b079 268:ded5306a1fd1 402 if(last_buffer){\
ee12b079 268:ded5306a1fd1 403 finish_write_data = true;\
ee12b079 268:ded5306a1fd1 404 /*gPC.puts("adf_off\r\n");*/\
ee12b079 268:ded5306a1fd1 405 }\
ee12b079 268:ded5306a1fd1 406 }\
ee12b079 268:ded5306a1fd1 407 }
ee12b079 268:ded5306a1fd1 408
ee12b079 268:ded5306a1fd1 409 #define check {\
ee12b079 268:ded5306a1fd1 410 check_status;\
ee12b079 268:ded5306a1fd1 411 /*gPC.printf("I 0x%X\r\n",(int)status);*/\
ee12b079 271:72529b247333 412 if(IRQ){\
ee12b079 306:82b7d137db31 413 /*Reset the timer*/\
ee12b079 307:6654e7908e57 414 T.reset();\
ee12b079 268:ded5306a1fd1 415 /*gPC.printf("det\r\n");*/\
ee12b079 268:ded5306a1fd1 416 if(!ADF_off) {\
ee12b079 271:72529b247333 417 if(finish_write_data || restart_adf_flag) {\
ee12b079 268:ded5306a1fd1 418 write_data;\
ee12b079 268:ded5306a1fd1 419 ADF_off=true;\
ee12b079 268:ded5306a1fd1 420 } else {\
ee12b079 268:ded5306a1fd1 421 write_data;\
ee12b079 268:ded5306a1fd1 422 if(sent_tmfrom_SDcard)\
ee12b079 268:ded5306a1fd1 423 send_tm_from_SD_card_fun();\
ee12b079 268:ded5306a1fd1 424 else snd_tm.transmit_data(buffer_112,&last_buffer);\
ee12b079 268:ded5306a1fd1 425 }\
ee12b079 268:ded5306a1fd1 426 } else {\
ee12b079 268:ded5306a1fd1 427 wait_ms(20);\
ee12b079 268:ded5306a1fd1 428 gCS_ADF=0;\
ee12b079 268:ded5306a1fd1 429 spi.write(0xB1);\
ee12b079 268:ded5306a1fd1 430 gCS_ADF=1;\
ee12b079 268:ded5306a1fd1 431 gPC.puts("transmission done\r\n");\
ee12b079 268:ded5306a1fd1 432 loop_on=false;\
ee12b079 271:72529b247333 433 if(restart_adf_flag)\
ee12b079 271:72529b247333 434 {\
ee12b079 271:72529b247333 435 restart_adf_flag=false;\
ee12b079 271:72529b247333 436 ADF_off=false;\
ee12b079 271:72529b247333 437 send_data;\
ee12b079 271:72529b247333 438 loop_on=true;\
ee12b079 271:72529b247333 439 CMD(CMD_PHY_TX);\
ee12b079 271:72529b247333 440 wait_us(2000);\
ee12b079 271:72529b247333 441 }\
ee12b079 271:72529b247333 442 /*Stop_the_Timer*/\
ee12b079 307:6654e7908e57 443 T.stop();\
ee12b079 268:ded5306a1fd1 444 }\
ee12b079 268:ded5306a1fd1 445 }\
ee12b079 307:6654e7908e57 446 else{\
ee12b079 307:6654e7908e57 447 if(T.read_us()>98000){\
ee12b079 307:6654e7908e57 448 data_irq_err=true;\
ee12b079 307:6654e7908e57 449 CMD(CMD_PHY_ON);\
ee12b079 307:6654e7908e57 450 gPC.printf("Data_error_detected");\
ee12b079 307:6654e7908e57 451 }\
ee12b079 307:6654e7908e57 452 }\
ee12b079 268:ded5306a1fd1 453 }
ee12b079 268:ded5306a1fd1 454
ee12b079 268:ded5306a1fd1 455 #define send_data {\
ee12b079 9:e9eaada136c6 456 gCS_ADF=0;\
ee12b079 9:e9eaada136c6 457 spi.write(0xBB);\
ee12b079 9:e9eaada136c6 458 gCS_ADF=1;\
ee12b079 9:e9eaada136c6 459 gCS_ADF=0;\
ee12b079 9:e9eaada136c6 460 spi.write(0xFF);\
ee12b079 9:e9eaada136c6 461 spi.write(0xFF);\
ee12b079 9:e9eaada136c6 462 gCS_ADF=1;\
ee12b079 268:ded5306a1fd1 463 if(sent_tmfrom_SDcard){\
ee12b079 95:42d6747900cb 464 send_tm_from_SD_card_fun();\
shreeshas95 1:a0055b3280c8 465 }else{\
shreeshas95 1:a0055b3280c8 466 snd_tm.transmit_data(buffer_112,&last_buffer);\
shreeshas95 1:a0055b3280c8 467 }\
shreeshas95 1:a0055b3280c8 468 write_data;\
shreeshas95 1:a0055b3280c8 469 if(sent_tmfrom_SDcard){\
krishanprajapat 148:46763854fa83 470 send_tm_from_SD_card_fun();\
krishanprajapat 148:46763854fa83 471 }else{\
krishanprajapat 148:46763854fa83 472 snd_tm.transmit_data(buffer_112,&last_buffer);\
krishanprajapat 148:46763854fa83 473 }\
krishanprajapat 148:46763854fa83 474 write_data;\
krishanprajapat 148:46763854fa83 475 if(sent_tmfrom_SDcard){\
ee12b079 95:42d6747900cb 476 send_tm_from_SD_card_fun();\
shreeshas95 1:a0055b3280c8 477 }else{\
shreeshas95 1:a0055b3280c8 478 snd_tm.transmit_data(buffer_112,&last_buffer);\
shreeshas95 1:a0055b3280c8 479 }\
shreeshas95 1:a0055b3280c8 480 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 481 spi.write(0xB1);\
shreeshas95 1:a0055b3280c8 482 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 483 wait_us(300);\
shreeshas95 1:a0055b3280c8 484 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 485 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 486 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 487 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 488 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 489 spi.write(0xB5);\
shreeshas95 1:a0055b3280c8 490 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 491 wait_us(300);\
shreeshas95 1:a0055b3280c8 492 gCS_ADF=0;\
shreeshas95 1:a0055b3280c8 493 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 494 spi.write(0xFF);\
shreeshas95 1:a0055b3280c8 495 gCS_ADF=1;\
shreeshas95 1:a0055b3280c8 496 }
ee12b079 268:ded5306a1fd1 497
ee12b079 268:ded5306a1fd1 498 #define initial_adf_check {\
ee12b079 268:ded5306a1fd1 499 bool Configuration_Done=false;\
ee12b079 268:ded5306a1fd1 500 quit_configuration=false;\
ee12b079 268:ded5306a1fd1 501 bool reset_flag1 = 0;\
ee12b079 268:ded5306a1fd1 502 bool flag = false;\
ee12b079 268:ded5306a1fd1 503 while((hw_reset_err_cnt<HW_THRS)&&(quit_configuration==false)){\
ee12b079 268:ded5306a1fd1 504 while((bbram_err_cnt<2)&&(quit_configuration==false)){\
ee12b079 268:ded5306a1fd1 505 /*assrt_phy_off;*/\
ee12b079 268:ded5306a1fd1 506 /*Assrt_phy_off Begin*/\
ee12b079 268:ded5306a1fd1 507 {\
ee12b079 268:ded5306a1fd1 508 int state_err_cnt = 0;\
ee12b079 268:ded5306a1fd1 509 CMD(CMD_PHY_OFF);\
ee12b079 268:ded5306a1fd1 510 if(cmd_err_flag){\
ee12b079 268:ded5306a1fd1 511 temp_return=1;\
ee12b079 268:ded5306a1fd1 512 }\
ee12b079 268:ded5306a1fd1 513 else{\
ee12b079 268:ded5306a1fd1 514 for(int i = 0 ; i < 40 ;i++){\
ee12b079 268:ded5306a1fd1 515 CMD(CMD_PHY_OFF);\
ee12b079 268:ded5306a1fd1 516 check_status;\
ee12b079 268:ded5306a1fd1 517 if(status == PHY_OFF){\
ee12b079 268:ded5306a1fd1 518 temp_return = 0;\
ee12b079 268:ded5306a1fd1 519 break;\
ee12b079 268:ded5306a1fd1 520 }\
ee12b079 268:ded5306a1fd1 521 else if(state_err_cnt>THRS){\
ee12b079 268:ded5306a1fd1 522 temp_return = 1;\
ee12b079 268:ded5306a1fd1 523 break;\
ee12b079 268:ded5306a1fd1 524 }\
ee12b079 268:ded5306a1fd1 525 else {\
ee12b079 268:ded5306a1fd1 526 wait_ms(1);\
ee12b079 268:ded5306a1fd1 527 }\
ee12b079 268:ded5306a1fd1 528 }\
ee12b079 268:ded5306a1fd1 529 }\
ee12b079 268:ded5306a1fd1 530 }\
ee12b079 268:ded5306a1fd1 531 /*Assrt_phy_off end*/\
ee12b079 268:ded5306a1fd1 532 reset_flag1=temp_return;\
ee12b079 268:ded5306a1fd1 533 if(!reset_flag1){\
ee12b079 268:ded5306a1fd1 534 bbram_write;\
ee12b079 268:ded5306a1fd1 535 while((rbp_err_cnt<RBP_THRS)&&(quit_configuration==false)){\
ee12b079 268:ded5306a1fd1 536 bbram_check;\
ee12b079 268:ded5306a1fd1 537 if(bbram_err==0){\
ee12b079 268:ded5306a1fd1 538 bbram_write_success=true;\
ee12b079 268:ded5306a1fd1 539 bbram_err_cnt=0;\
ee12b079 268:ded5306a1fd1 540 initiate;\
ee12b079 268:ded5306a1fd1 541 if(reg_err){\
ee12b079 268:ded5306a1fd1 542 rbp_err_cnt++;\
ee12b079 268:ded5306a1fd1 543 }\
ee12b079 268:ded5306a1fd1 544 else{\
ee12b079 268:ded5306a1fd1 545 rbp_err_cnt=0;\
ee12b079 268:ded5306a1fd1 546 gPC.printf("NO Reg err\r\n");\
ee12b079 268:ded5306a1fd1 547 CMD(CMD_CONFIG_DEV);\
ee12b079 268:ded5306a1fd1 548 if(cmd_err_flag){\
ee12b079 268:ded5306a1fd1 549 reset_flag=1;\
ee12b079 268:ded5306a1fd1 550 gPC.printf("CMD ERR\r\n");\
ee12b079 268:ded5306a1fd1 551 }\
ee12b079 268:ded5306a1fd1 552 else{\
ee12b079 268:ded5306a1fd1 553 reset_flag=0;\
ee12b079 268:ded5306a1fd1 554 gPC.printf("NO CMD ERR CONFIG_DONE\r\n");\
ee12b079 268:ded5306a1fd1 555 quit_configuration=true;\
ee12b079 268:ded5306a1fd1 556 }\
ee12b079 268:ded5306a1fd1 557 }\
ee12b079 268:ded5306a1fd1 558 }\
ee12b079 268:ded5306a1fd1 559 else{\
ee12b079 268:ded5306a1fd1 560 bbram_write_success=false;\
ee12b079 268:ded5306a1fd1 561 bbram_err_cnt++;\
ee12b079 268:ded5306a1fd1 562 break;\
ee12b079 268:ded5306a1fd1 563 }\
ee12b079 268:ded5306a1fd1 564 }\
ee12b079 268:ded5306a1fd1 565 }\
ee12b079 268:ded5306a1fd1 566 else{\
ee12b079 268:ded5306a1fd1 567 break;\
ee12b079 268:ded5306a1fd1 568 }\
ee12b079 268:ded5306a1fd1 569 }\
ee12b079 268:ded5306a1fd1 570 if(reset_flag1){\
ee12b079 268:ded5306a1fd1 571 hardware_reset(0);\
ee12b079 268:ded5306a1fd1 572 hw_reset_err_cnt++;\
ee12b079 268:ded5306a1fd1 573 gPC.puts("Resetting hardware\r\n");\
ee12b079 268:ded5306a1fd1 574 }\
ee12b079 268:ded5306a1fd1 575 }\
ee12b079 268:ded5306a1fd1 576 if(hw_reset_err_cnt==HW_THRS){\
ee12b079 268:ded5306a1fd1 577 power_reset_flag=1;\
ee12b079 268:ded5306a1fd1 578 power_reset_count++;\
ee12b079 268:ded5306a1fd1 579 }\
ee12b079 268:ded5306a1fd1 580 else{\
ee12b079 268:ded5306a1fd1 581 Configuration_Done=true;\
ee12b079 268:ded5306a1fd1 582 gPC.printf("Configuration_Done\n");\
ee12b079 268:ded5306a1fd1 583 }\
ee12b079 268:ded5306a1fd1 584 }
ee12b079 268:ded5306a1fd1 585
aniruddhv 52:0bd68655c651 586 #define configure_adf {\
ee12b079 268:ded5306a1fd1 587 reset_flags;\
aniruddhv 52:0bd68655c651 588 initial_adf_check;\
ee12b079 268:ded5306a1fd1 589 gPC.puts("Config_part done\r\n");\
ee12b079 9:e9eaada136c6 590 }
ee12b079 307:6654e7908e57 591
ee12b079 307:6654e7908e57 592 //int power_reset_count=0;
ee12b079 307:6654e7908e57 593 #define POWER_RESET_THRS 2
ee12b079 307:6654e7908e57 594 bool hw_reset_flag=false;
ee12b079 95:42d6747900cb 595 #define transmit_adf {\
ee12b079 307:6654e7908e57 596 while(power_reset_count<POWER_RESET_THRS){\
ee12b079 271:72529b247333 597 restart_adf_flag=false;\
ee12b079 271:72529b247333 598 bool tx_err=false;\
aniruddhv 52:0bd68655c651 599 configure_adf;\
aniruddhv 52:0bd68655c651 600 send_data;\
ee12b079 268:ded5306a1fd1 601 CMD(CMD_PHY_TX);\
ee12b079 286:0f3a2a7ac295 602 /*PA MCR level*/;\
ee12b079 286:0f3a2a7ac295 603 gCS_ADF=0;\
ee12b079 286:0f3a2a7ac295 604 spi.write(0x1B);\
ee12b079 286:0f3a2a7ac295 605 spi.write(0x07);\
ee12b079 286:0f3a2a7ac295 606 spi.write(0x35);\
ee12b079 286:0f3a2a7ac295 607 gCS_ADF=1;\
ee12b079 268:ded5306a1fd1 608 wait_us(2000);\
aniruddhv 52:0bd68655c651 609 while(loop_on){\
ee12b079 268:ded5306a1fd1 610 wait_us(20);\
ee12b079 268:ded5306a1fd1 611 check;\
ee12b079 271:72529b247333 612 if(data_irq_err||tx_err){\
ee12b079 307:6654e7908e57 613 hw_reset_err_cnt++;\
ee12b079 307:6654e7908e57 614 hw_reset_flag=true;\
ee12b079 268:ded5306a1fd1 615 break;\
aniruddhv 52:0bd68655c651 616 }\
aniruddhv 52:0bd68655c651 617 }\
ee12b079 307:6654e7908e57 618 if(hw_reset_flag==true){\
ee12b079 307:6654e7908e57 619 hardware_reset(0);\
ee12b079 307:6654e7908e57 620 }\
ee12b079 307:6654e7908e57 621 else{\
ee12b079 307:6654e7908e57 622 break;\
ee12b079 307:6654e7908e57 623 }\
ee12b079 307:6654e7908e57 624 gPC.puts("after while loop\r\n");\
ee12b079 307:6654e7908e57 625 }\
ee12b079 268:ded5306a1fd1 626 }