CDMS code for testing sbc

Dependencies:   FreescaleIAP SimpleDMA mbed-rtos mbed

Fork of CDMS_CODE by shubham c

Committer:
ee12b079
Date:
Sun Jul 10 13:47:26 2016 +0000
Revision:
245:da9d1bd999da
Parent:
203:424308159a56
Child:
261:1e54415b34d3
Making integrated code of CDMS

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