BFIN GAS /tmp/ccPntIEp.s page 1 1 .file "src/l502_user_process.c"; 2 .section .debug_abbrev,"",@progbits 3 .Ldebug_abbrev0: 4 .section .debug_info,"",@progbits 5 .Ldebug_info0: 6 .section .debug_line,"",@progbits 7 .Ldebug_line0: 8 0000 F1010000 .text; 8 02000001 8 00000101 8 FB0E0D00 8 01010101 9 .Ltext0: 10 .align 4 11 .global _usr_cmd_process; 12 .type _usr_cmd_process, STT_FUNC; 13 _usr_cmd_process: 14 .LFB6: 15 .file 1 "src/l502_user_process.c" 1:src/l502_user_process.c **** /***************************************************************************//** 2:src/l502_user_process.c **** @addtogroup user_process 3:src/l502_user_process.c **** @{ 4:src/l502_user_process.c **** @file l502_user_process.c 5:src/l502_user_process.c **** 6:src/l502_user_process.c **** Файл содержит простейший вариант реализации пользо 7:src/l502_user_process.c **** потоки данных передаются без изменения и никакие по 8:src/l502_user_process.c **** обрабатываются. Пользователь может изменить этот ф 9:src/l502_user_process.c **** обработку. 10:src/l502_user_process.c **** *******************************************************************************/ 11:src/l502_user_process.c **** 12:src/l502_user_process.c **** 13:src/l502_user_process.c **** 14:src/l502_user_process.c **** #include "l502_stream.h" 15:src/l502_user_process.c **** #include "l502_hdma.h" 16:src/l502_user_process.c **** #include "l502_sport_tx.h" 17:src/l502_user_process.c **** #include "l502_cmd.h" 18:src/l502_user_process.c **** 19:src/l502_user_process.c **** #include 20:src/l502_user_process.c **** 21:src/l502_user_process.c **** #include "l502_defs.h" // import defines of constants 22:src/l502_user_process.c **** #include "l502_params.h" 23:src/l502_user_process.c **** #include "l502_stream.h" 24:src/l502_user_process.c **** #include "l502_user_process.h" 25:src/l502_user_process.c **** 26:src/l502_user_process.c **** 27:src/l502_user_process.c **** 28:src/l502_user_process.c **** uint32_t streams_cnt[4] = {0,}; 29:src/l502_user_process.c **** 30:src/l502_user_process.c **** 31:src/l502_user_process.c **** 32:src/l502_user_process.c **** #define LFSM_val_ON 0b01100111 33:src/l502_user_process.c **** #define LFSM_val_OFF 0b01101000 34:src/l502_user_process.c **** #define LFSM_val_X 0b01101001 35:src/l502_user_process.c **** 36:src/l502_user_process.c **** //#define TX_BUFF_SIZE 1024*1024 37:src/l502_user_process.c **** //#define TX_BUFF_SIZE 1000 38:src/l502_user_process.c **** BFIN GAS /tmp/ccPntIEp.s page 2 39:src/l502_user_process.c **** #define LFSM_BUFF_SIZE 1000 40:src/l502_user_process.c **** 41:src/l502_user_process.c **** #define LFSM_DATALEN 1024 42:src/l502_user_process.c **** 43:src/l502_user_process.c **** #define dbg_sport_rx_copy_size 10 44:src/l502_user_process.c **** //#define LFSM_DATALEN 1024 45:src/l502_user_process.c **** 46:src/l502_user_process.c **** 47:src/l502_user_process.c **** 48:src/l502_user_process.c **** 49:src/l502_user_process.c **** 50:src/l502_user_process.c **** //#pragma section("sdram_noinit", NO_INIT) 51:src/l502_user_process.c **** //#include "l502_sdram_noinit.h" 52:src/l502_user_process.c **** //__attribute__((section(".sdram_noinit"), far)) 53:src/l502_user_process.c **** //static volatile uint32_t dbg_sport_rx_copy[TX_BUFF_SIZE]; 54:src/l502_user_process.c **** //uint32_t dbg_sport_rx_copy[TX_BUFF_SIZE];// = {0,}; 55:src/l502_user_process.c **** uint32_t dbg_sport_rx_copy[dbg_sport_rx_copy_size];// = {0,}; 56:src/l502_user_process.c **** //* 57:src/l502_user_process.c **** 58:src/l502_user_process.c **** //#include "l502_sdram_noinit.h" 59:src/l502_user_process.c **** //static volatile uint32_t LFSM_data[LFSM_DATALEN] = {0,}; 60:src/l502_user_process.c **** 61:src/l502_user_process.c **** //#include "l502_sdram_noinit.h" 62:src/l502_user_process.c **** //static volatile uint32_t TX_buff[TX_BUFF_SIZE]; 63:src/l502_user_process.c **** //static volatile uint32_t TX_buff[TX_BUFF_SIZE] __attribute__((section(".sdram_noinit"))); 64:src/l502_user_process.c **** //static volatile uint32_t TX_buff[10000] __attribute__((section(".sdram_noinit"))); 65:src/l502_user_process.c **** //static volatile uint32_t TX_buff[10000]; 66:src/l502_user_process.c **** 67:src/l502_user_process.c **** //static volatile uint32_t 68:src/l502_user_process.c **** 69:src/l502_user_process.c **** // = {0,}; 70:src/l502_user_process.c **** 71:src/l502_user_process.c **** 72:src/l502_user_process.c **** 73:src/l502_user_process.c **** uint32_t streams_succes_flag = 0; 74:src/l502_user_process.c **** 75:src/l502_user_process.c **** /* 76:src/l502_user_process.c **** struct dataprocess_typedef { 77:src/l502_user_process.c **** uint8_t config = 0; 78:src/l502_user_process.c **** uint32_t datapoints_max_N = 0; 79:src/l502_user_process.c **** uint32_t datapoint_curr_I = 0; 80:src/l502_user_process.c **** uint32_t data_raw; 81:src/l502_user_process.c **** }; 82:src/l502_user_process.c **** */ 83:src/l502_user_process.c **** 84:src/l502_user_process.c **** 85:src/l502_user_process.c **** extern volatile uint32_t TX_buff[]; //size: TX_BUFF_SIZE 86:src/l502_user_process.c **** //extern volatile uint32_t RAW_data_buff[]; //size: RAW_DATA_BUFF_SIZE 87:src/l502_user_process.c **** extern volatile uint32_t AVG_buff[]; //size: AVG_BUFF_SIZE 88:src/l502_user_process.c **** //extern volatile uint32_t FFT_buff[]; //size: FFT_BUFF_SIZE 89:src/l502_user_process.c **** 90:src/l502_user_process.c **** volatile struct dataprocessor_dypedef{ 91:src/l502_user_process.c **** uint8_t mode; 92:src/l502_user_process.c **** uint8_t mode_next; 93:src/l502_user_process.c **** uint8_t cycle_state; 94:src/l502_user_process.c **** uint8_t LFSM_state; // 0 -- waiting for it... ; 1 -- receiving LFSM data 95:src/l502_user_process.c **** uint16_t average_N_max; BFIN GAS /tmp/ccPntIEp.s page 3 96:src/l502_user_process.c **** uint16_t average_N; 97:src/l502_user_process.c **** uint32_t TX_buff_I; 98:src/l502_user_process.c **** uint8_t TX_buff_state; //0 --blocked, 1 -- filling, 2 -- ready to send 99:src/l502_user_process.c **** uint32_t AVG_buff_I; 100:src/l502_user_process.c **** uint8_t AVG_buff_state; 101:src/l502_user_process.c **** uint32_t FFT_buff_I; 102:src/l502_user_process.c **** uint8_t FFT_buff_state; 103:src/l502_user_process.c **** uint32_t digital_word_prev; 104:src/l502_user_process.c **** uint32_t digital_word_curr; 105:src/l502_user_process.c **** uint8_t DIN2_SYN_value_curr; 106:src/l502_user_process.c **** uint8_t DIN2_SYN_value_prev; 107:src/l502_user_process.c **** }Proc_state; 108:src/l502_user_process.c **** 109:src/l502_user_process.c **** volatile uint32_t TX_buff_I = 0; 110:src/l502_user_process.c **** volatile uint32_t TX_buff_I_shadow = 123321; 111:src/l502_user_process.c **** 112:src/l502_user_process.c **** volatile uint32_t data_I = 0; 113:src/l502_user_process.c **** volatile uint32_t send_size = 0; 114:src/l502_user_process.c **** 115:src/l502_user_process.c **** 116:src/l502_user_process.c **** 117:src/l502_user_process.c **** //int f_sport_test(void); 118:src/l502_user_process.c **** void l502_stream_init(void); 119:src/l502_user_process.c **** 120:src/l502_user_process.c **** //struct LFSM_typedef{ 121:src/l502_user_process.c **** // uint8_t 122:src/l502_user_process.c **** //}; 123:src/l502_user_process.c **** 124:src/l502_user_process.c **** uint8_t LFSM_started = 0; 125:src/l502_user_process.c **** 126:src/l502_user_process.c **** 127:src/l502_user_process.c **** uint8_t DY_SYN_2_value = 0; 128:src/l502_user_process.c **** uint8_t DY_SYN_2_value_prev = 0; 129:src/l502_user_process.c **** /***************************************************************************//** 130:src/l502_user_process.c **** @brief Обработка принятого массива данных АЦП/DIN. 131:src/l502_user_process.c **** 132:src/l502_user_process.c **** Функция вызывается каждый раз, когда обнаружены нов 133:src/l502_user_process.c **** АЦП/цифровых входов, пришедшие по SPORT0. 134:src/l502_user_process.c **** 135:src/l502_user_process.c **** Функция должна обработать данные и вернуть количес 136:src/l502_user_process.c **** однако эти данные все еще считаются использованным 137:src/l502_user_process.c **** новыми пришедшими данными) до тех пор пока не будет 138:src/l502_user_process.c **** stream_in_buf_free()). 139:src/l502_user_process.c **** 140:src/l502_user_process.c **** Если функция вернет значение меньше чем size, то функц 141:src/l502_user_process.c **** следующем проходе еще раз с указателем на необработ 142:src/l502_user_process.c **** 143:src/l502_user_process.c **** В текущей реализации просто запускается передача д 144:src/l502_user_process.c **** 145:src/l502_user_process.c **** @param[in] data Указатель на массив с принятыми данными 146:src/l502_user_process.c **** @param[in] size Количество принятых данных в 32-битных сло 147:src/l502_user_process.c **** @return Функция возвращает количество обработанн 148:src/l502_user_process.c **** На эти данные не будет вызываться повторн 149:src/l502_user_process.c **** но они считаются еще используемыми 150:src/l502_user_process.c **** *******************************************************************************/ 151:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 152:src/l502_user_process.c **** /* если есть свободные дескрипторы на передачу по HDMA BFIN GAS /tmp/ccPntIEp.s page 4 153:src/l502_user_process.c **** передачу. Иначе возвращаем 0, чтобы на обработку эт 154:src/l502_user_process.c **** вызвали бы позже */ 155:src/l502_user_process.c **** ++streams_cnt[0]; 156:src/l502_user_process.c **** /* 157:src/l502_user_process.c **** for (int i = 0; i < TX_BUFF_SIZE; ++i){ 158:src/l502_user_process.c **** TX_buff[i] = 0x00000000; 159:src/l502_user_process.c **** } 160:src/l502_user_process.c **** */ 161:src/l502_user_process.c **** 162:src/l502_user_process.c **** //for (int i = 0; i < dbg_sport_rx_copy; ++i){ 163:src/l502_user_process.c **** // dbg_sport_rx_copy[i] = data[i]; 164:src/l502_user_process.c **** //} 165:src/l502_user_process.c **** 166:src/l502_user_process.c **** 167:src/l502_user_process.c **** 168:src/l502_user_process.c **** //* 169:src/l502_user_process.c **** //simple transparent mode 170:src/l502_user_process.c **** if (Proc_state.mode == TRANSPARENT){ 171:src/l502_user_process.c **** data_I = 0; 172:src/l502_user_process.c **** while((data_I < size )&& (TX_buff_I < TX_BUFF_SIZE)){ 173:src/l502_user_process.c **** TX_buff[TX_buff_I++] = data[data_I++]; 174:src/l502_user_process.c **** } 175:src/l502_user_process.c **** } 176:src/l502_user_process.c **** 177:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 178:src/l502_user_process.c **** data_I = 0; 179:src/l502_user_process.c **** //TX_buff_I = 0; 180:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 181:src/l502_user_process.c **** while((data_I < size )&& (Proc_state.AVG_buff_I < AVG_BUFF_SIZE)){ 182:src/l502_user_process.c **** //uint32_t word = data[data_I]; 183:src/l502_user_process.c **** //uint32_t avg_word = AVG_buff[Proc_state.AVG_buff_I++]; 184:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I] = (avg_word & 0x00FFFFFF) + (word & 0x00FFFFFF); 185:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I++] = data[data_I++]; 186:src/l502_user_process.c **** AVG_buff[Proc_state.AVG_buff_I++] = data[data_I++]; 187:src/l502_user_process.c **** // Proc_state.AVG_buff_I++; 188:src/l502_user_process.c **** // data_I++; 189:src/l502_user_process.c **** } 190:src/l502_user_process.c **** //Proc_state.AVG_buff_I = 0; 191:src/l502_user_process.c **** 192:src/l502_user_process.c **** } 193:src/l502_user_process.c **** 194:src/l502_user_process.c **** 195:src/l502_user_process.c **** 196:src/l502_user_process.c **** /*/ 197:src/l502_user_process.c **** 198:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 199:src/l502_user_process.c **** uint32_t data_I = 0; 200:src/l502_user_process.c **** while((data_I < size )&& (TX_buff_I < (TX_BUFF_SIZE - 1))){ 201:src/l502_user_process.c **** // TX_buff[TX_buff_I++] = data[data_I++]; 202:src/l502_user_process.c **** uint32_t word = data[data_I++]; 203:src/l502_user_process.c **** TX_buff[TX_buff_I++] = (word & 0x00FFFFFF);// | 0xDE000000; 204:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = ((word & 0x00FFFFFF) | 0xDE000000); 205:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xADEFDEED; 206:src/l502_user_process.c **** } 207:src/l502_user_process.c **** } 208:src/l502_user_process.c **** //*/ 209:src/l502_user_process.c **** BFIN GAS /tmp/ccPntIEp.s page 5 210:src/l502_user_process.c **** //* 211:src/l502_user_process.c **** 212:src/l502_user_process.c **** 213:src/l502_user_process.c **** // if (Proc_state.mode == AVG){ 214:src/l502_user_process.c **** //TX_buff_I = 10; 215:src/l502_user_process.c **** /* 216:src/l502_user_process.c **** uint32_t data_I = 0; 217:src/l502_user_process.c **** uint8_t new_cycle_started = 0; 218:src/l502_user_process.c **** uint8_t cycle_cont = 1; 219:src/l502_user_process.c **** while ((data_I < size) && (Proc_state.AVG_buff_I < AVG_BUFF_SIZE) && cycle_cont ){ 220:src/l502_user_process.c **** uint32_t word = data[data_I]; 221:src/l502_user_process.c **** uint32_t val = word & 0x00FFFFFF; 222:src/l502_user_process.c **** uint8_t header = (uint8_t)(word >> 24); 223:src/l502_user_process.c **** */ 224:src/l502_user_process.c **** /* 225:src/l502_user_process.c **** if (header == 0x00){ 226:src/l502_user_process.c **** Proc_state.digital_word_prev = Proc_state.digital_word_curr; 227:src/l502_user_process.c **** Proc_state.digital_word_curr = word; 228:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 229:src/l502_user_process.c **** if (word & 0b1 << 17){ 230:src/l502_user_process.c **** DY_SYN_2_value = 1; 231:src/l502_user_process.c **** }else{ 232:src/l502_user_process.c **** DY_SYN_2_value = 0; 233:src/l502_user_process.c **** } 234:src/l502_user_process.c **** 235:src/l502_user_process.c **** if ((DY_SYN_2_value == 1)&& (DY_SYN_2_value_prev == 0)){ //new cycle started 236:src/l502_user_process.c **** new_cycle_started = 1; 237:src/l502_user_process.c **** } 238:src/l502_user_process.c **** } 239:src/l502_user_process.c **** //*/ 240:src/l502_user_process.c **** /* 241:src/l502_user_process.c **** if (header == 0xD0){ //it`s first channel 242:src/l502_user_process.c **** if (new_cycle_started){ 243:src/l502_user_process.c **** new_cycle_started = 0; 244:src/l502_user_process.c **** ++Proc_state.average_N; 245:src/l502_user_process.c **** if (Proc_state.average_N >= Proc_state.average_N_max){ 246:src/l502_user_process.c **** Proc_state.mode == AVG_DONE; 247:src/l502_user_process.c **** cycle_cont = 0; //break averaging cycle 248:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 249:src/l502_user_process.c **** } 250:src/l502_user_process.c **** }else{ 251:src/l502_user_process.c **** if (Proc_state.AVG_buff_I < AVG_BUFF_SIZE){ 252:src/l502_user_process.c **** AVG_buff[Proc_state.AVG_buff_I] =(word & 0x00FFFFFF);// | 0xDE000000; 253:src/l502_user_process.c **** //uint32_t tmp = AVG_buff[Proc_state.AVG_buff_I]; 254:src/l502_user_process.c **** //tmp += val; 255:src/l502_user_process.c **** //tmp &= 0x0FFFFFFF; 256:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I] = tmp | (0x40000000 & 0xF0000000); //set header (first 4 bit 257:src/l502_user_process.c **** 258:src/l502_user_process.c **** Proc_state.AVG_buff_I++; 259:src/l502_user_process.c **** } 260:src/l502_user_process.c **** } 261:src/l502_user_process.c **** } 262:src/l502_user_process.c **** data_I++; 263:src/l502_user_process.c **** //*/ 264:src/l502_user_process.c **** 265:src/l502_user_process.c **** // AVG_buff[Proc_state.AVG_buff_I] = 0xDDDDDDDD; 266:src/l502_user_process.c **** BFIN GAS /tmp/ccPntIEp.s page 6 267:src/l502_user_process.c **** 268:src/l502_user_process.c **** 269:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = data[data_I]; 270:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xEEEEEEEE; 271:src/l502_user_process.c **** // data_I++; 272:src/l502_user_process.c **** // Proc_state.AVG_buff_I++; 273:src/l502_user_process.c **** 274:src/l502_user_process.c **** //} 275:src/l502_user_process.c **** 276:src/l502_user_process.c **** 277:src/l502_user_process.c **** // if (Proc_state.AVG_buff_I == AVG_BUFF_SIZE){ 278:src/l502_user_process.c **** /* if (Proc_state.AVG_buff_I >= 10){ 279:src/l502_user_process.c **** Proc_state.AVG_buff_I = 10; 280:src/l502_user_process.c **** Proc_state.mode == AVG_DONE; 281:src/l502_user_process.c **** } 282:src/l502_user_process.c **** */ 283:src/l502_user_process.c **** // } 284:src/l502_user_process.c **** /* 285:src/l502_user_process.c **** if(Proc_state.mode == AVG_DONE){ //TODO: 286:src/l502_user_process.c **** if (Proc_state.TX_buff_state == 0){ 287:src/l502_user_process.c **** Proc_state.TX_buff_state = 1; //0 --ready, 1 -- filling, 2 -- ready to send 288:src/l502_user_process.c **** // Proc_state.AVG_buff_state = 1; //0 -- ready, 1 -- blocked, 289:src/l502_user_process.c **** uint32_t max_I = TX_BUFF_SIZE; 290:src/l502_user_process.c **** if (max_I > AVG_BUFF_SIZE){ 291:src/l502_user_process.c **** max_I = AVG_BUFF_SIZE; 292:src/l502_user_process.c **** } 293:src/l502_user_process.c **** for (uint32_t I = 0; I < max_I; ++I){ 294:src/l502_user_process.c **** if (TX_buff_I < TX_BUFF_SIZE){ 295:src/l502_user_process.c **** ++TX_buff_I; 296:src/l502_user_process.c **** } 297:src/l502_user_process.c **** TX_buff[TX_buff_I] = AVG_buff[I]; 298:src/l502_user_process.c **** AVG_buff[I] = 0; 299:src/l502_user_process.c **** } 300:src/l502_user_process.c **** Proc_state.TX_buff_state = 2; //0 --ready, 1 -- filling, 2 -- ready to send 301:src/l502_user_process.c **** } 302:src/l502_user_process.c **** Proc_state.mode = Proc_state.mode_next; 303:src/l502_user_process.c **** } 304:src/l502_user_process.c **** //*/ 305:src/l502_user_process.c **** 306:src/l502_user_process.c **** 307:src/l502_user_process.c **** 308:src/l502_user_process.c **** 309:src/l502_user_process.c **** 310:src/l502_user_process.c **** /* 311:src/l502_user_process.c **** uint32_t radar_word_I = 0; 312:src/l502_user_process.c **** 313:src/l502_user_process.c **** //uint32_t TX_buff_I = 0; 314:src/l502_user_process.c **** uint32_t word_prev = 0; 315:src/l502_user_process.c **** uint32_t digital_word_prev = 0; 316:src/l502_user_process.c **** 317:src/l502_user_process.c **** 318:src/l502_user_process.c **** 319:src/l502_user_process.c **** 320:src/l502_user_process.c **** for (int data_I = 0; (data_I < size) && (TX_buff_I < TX_BUFF_SIZE); ++data_I){ 321:src/l502_user_process.c **** uint32_t word = data[data_I]; 322:src/l502_user_process.c **** uint32_t val = word & 0x00FFFFFF; 323:src/l502_user_process.c **** uint8_t header = (uint8_t)(word >> 24); BFIN GAS /tmp/ccPntIEp.s page 7 324:src/l502_user_process.c **** //11010000 325:src/l502_user_process.c **** if (((header & 0b10000000) == 0b10000000)){ //it`s ADC word 326:src/l502_user_process.c **** if (header == 0XD0){ //phy channel № 1 in common mode 327:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = ((0b01100000 & LFSM_val_ON) << 24) & val; 328:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0xD0ADEFEA; 329:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = word; 330:src/l502_user_process.c **** 331:src/l502_user_process.c **** }else if (header == 0xD1){//phy channel № 2 in common mode 332:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 333:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = ((0b01100000 & LFSM_val_OFF) << 24) & val; 334:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xD0ADEFEB; 335:src/l502_user_process.c **** }else{ 336:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = word; 337:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 338:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xD0AAAAAA; 339:src/l502_user_process.c **** } 340:src/l502_user_process.c **** 341:src/l502_user_process.c **** 342:src/l502_user_process.c **** } else if ( header == 0b00000000){ //it`s digital 343:src/l502_user_process.c **** //if ((word & 0x2200) == 0x2200){ 344:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 345:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xAD000000; 346:src/l502_user_process.c **** 347:src/l502_user_process.c **** 348:src/l502_user_process.c **** 349:src/l502_user_process.c **** //detect rise on DI_SYN2 -- start of chirp 350:src/l502_user_process.c **** if (word & 0b1 << 17){ 351:src/l502_user_process.c **** DY_SYN_2_value = 1; 352:src/l502_user_process.c **** }else{ 353:src/l502_user_process.c **** DY_SYN_2_value = 0; 354:src/l502_user_process.c **** } 355:src/l502_user_process.c **** 356:src/l502_user_process.c **** if ((DY_SYN_2_value == 1)&& (DY_SYN_2_value_prev == 0)){ 357:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0xAD000000; 358:src/l502_user_process.c **** } 359:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 360:src/l502_user_process.c **** 361:src/l502_user_process.c **** digital_word_prev = word; 362:src/l502_user_process.c **** } else{ 363:src/l502_user_process.c **** // TX_buff[TX_buff_I++] = word; 364:src/l502_user_process.c **** } 365:src/l502_user_process.c **** word_prev = word; 366:src/l502_user_process.c **** 367:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 368:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 369:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 370:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 371:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 372:src/l502_user_process.c **** 373:src/l502_user_process.c **** } 374:src/l502_user_process.c **** */ 375:src/l502_user_process.c **** 376:src/l502_user_process.c **** //stream_in_buf_free(size); 377:src/l502_user_process.c **** 378:src/l502_user_process.c **** /* 379:src/l502_user_process.c **** 380:src/l502_user_process.c **** //int i = 0; BFIN GAS /tmp/ccPntIEp.s page 8 381:src/l502_user_process.c **** //uint8_t 382:src/l502_user_process.c **** //while 383:src/l502_user_process.c **** 384:src/l502_user_process.c **** for (int i = 0; i < LFSM_DATALEN; ++i){ 385:src/l502_user_process.c **** uint32_t msg; 386:src/l502_user_process.c **** if (i % 2){ 387:src/l502_user_process.c **** msg = (LFSM_val_ON << 24) + data[i]; 388:src/l502_user_process.c **** }else{ 389:src/l502_user_process.c **** msg = (LFSM_val_OFF << 24) + data[i]; 390:src/l502_user_process.c **** } 391:src/l502_user_process.c **** LFSM_data[i] = msg; 392:src/l502_user_process.c **** } 393:src/l502_user_process.c **** 394:src/l502_user_process.c **** */ 395:src/l502_user_process.c **** if (hdma_send_req_rdy()) { 396:src/l502_user_process.c **** 397:src/l502_user_process.c **** //streams_cnt[0] 398:src/l502_user_process.c **** /* 399:src/l502_user_process.c **** if (Proc_state.TX_buff_state == 2){ 400:src/l502_user_process.c **** hdma_send_req_start(TX_buff, TX_BUFF_SIZE, 0); 401:src/l502_user_process.c **** }else if(0){ 402:src/l502_user_process.c **** 403:src/l502_user_process.c **** }else{ 404:src/l502_user_process.c **** hdma_send_req_start(TX_buff, TX_buff_I, 0); 405:src/l502_user_process.c **** TX_buff_I = 0; 406:src/l502_user_process.c **** //hdma_send_req_start(data, size, 0); 407:src/l502_user_process.c **** } 408:src/l502_user_process.c **** */ 409:src/l502_user_process.c **** 410:src/l502_user_process.c **** /* 411:src/l502_user_process.c **** if (Proc_state.mode == AVG_DONE){ 412:src/l502_user_process.c **** 413:src/l502_user_process.c **** uint32_t send_size = Proc_state.AVG_buff_I; 414:src/l502_user_process.c **** // uint32_t send_size = AVG_BUFF_SIZE; 415:src/l502_user_process.c **** hdma_send_req_start(AVG_buff, send_size, 0); 416:src/l502_user_process.c **** Proc_state.mode = AVG; 417:src/l502_user_process.c **** return send_size; 418:src/l502_user_process.c **** } 419:src/l502_user_process.c **** //*/ 420:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 421:src/l502_user_process.c **** send_size = Proc_state.AVG_buff_I; 422:src/l502_user_process.c **** //send_size = TX_buff_I; 423:src/l502_user_process.c **** //uint32_t send_size = AVG_BUFF_SIZE; 424:src/l502_user_process.c **** hdma_send_req_start(AVG_buff, send_size, 0); 425:src/l502_user_process.c **** return send_size; 426:src/l502_user_process.c **** }else{ 427:src/l502_user_process.c **** hdma_send_req_start(TX_buff, TX_buff_I, 0); 428:src/l502_user_process.c **** TX_buff_I_shadow = TX_buff_I; 429:src/l502_user_process.c **** TX_buff_I = 0; 430:src/l502_user_process.c **** return TX_buff_I_shadow; 431:src/l502_user_process.c **** } 432:src/l502_user_process.c **** //hdma_send_req_start(data, size, 0); 433:src/l502_user_process.c **** //streams_cnt[0] = hdma_send_req_start(LFSM_data, LFSM_DATALEN, 0); 434:src/l502_user_process.c **** //return size; 435:src/l502_user_process.c **** } 436:src/l502_user_process.c **** return 0; 437:src/l502_user_process.c **** } BFIN GAS /tmp/ccPntIEp.s page 9 438:src/l502_user_process.c **** 439:src/l502_user_process.c **** 440:src/l502_user_process.c **** 441:src/l502_user_process.c **** /***************************************************************************//** 442:src/l502_user_process.c **** @brief Обработка принятого массива с данными ЦАП/DOUT 443:src/l502_user_process.c **** 444:src/l502_user_process.c **** Функция вызывается каждый раз, когда обнаружены нов 445:src/l502_user_process.c **** ПК по HDMA. 446:src/l502_user_process.c **** Функция должна обработать данные и вернуть количес 447:src/l502_user_process.c **** однако эти данные все еще считаются использованным 448:src/l502_user_process.c **** новыми пришедшими данными) до тех пор пока не будет 449:src/l502_user_process.c **** stream_out_buf_free()). 450:src/l502_user_process.c **** 451:src/l502_user_process.c **** Если функция вернет значение меньше чем size, то функц 452:src/l502_user_process.c **** вызвана после еще раз с указателем на необработанны 453:src/l502_user_process.c **** 454:src/l502_user_process.c **** В текущей реализации просто запускается передача д 455:src/l502_user_process.c **** для вывода на ЦАП/цифровые выходы. 456:src/l502_user_process.c **** 457:src/l502_user_process.c **** @param[in] data Указатель на массив с принятыми данными 458:src/l502_user_process.c **** @param[in] size Количество принятых данных в 32-битных сло 459:src/l502_user_process.c **** @return Функция возвращает количество обработанн 460:src/l502_user_process.c **** На эти данные не будет вызываться повторн 461:src/l502_user_process.c **** но они считаются еще используемыми 462:src/l502_user_process.c **** ******************************************************************************/ 463:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 464:src/l502_user_process.c **** 465:src/l502_user_process.c **** /* если есть свободные дескрипторы на передачу по HDMA 466:src/l502_user_process.c **** передачу. Иначе возвращаем 0, чтобы на обработку эт 467:src/l502_user_process.c **** вызвали бы позже */ 468:src/l502_user_process.c **** ++streams_cnt[2]; 469:src/l502_user_process.c **** 470:src/l502_user_process.c **** if (sport_tx_req_rdy()) { 471:src/l502_user_process.c **** 472:src/l502_user_process.c **** /* за один раз можем передать в SPORT не более 473:src/l502_user_process.c **** SPORT_TX_REQ_SIZE_MAX слов */ 474:src/l502_user_process.c **** if (size > SPORT_TX_REQ_SIZE_MAX) 475:src/l502_user_process.c **** size = SPORT_TX_REQ_SIZE_MAX; 476:src/l502_user_process.c **** 477:src/l502_user_process.c **** sport_tx_start_req(data, size); 478:src/l502_user_process.c **** 479:src/l502_user_process.c **** return size; 480:src/l502_user_process.c **** } 481:src/l502_user_process.c **** return 0; 482:src/l502_user_process.c **** } 483:src/l502_user_process.c **** 484:src/l502_user_process.c **** 485:src/l502_user_process.c **** 486:src/l502_user_process.c **** 487:src/l502_user_process.c **** 488:src/l502_user_process.c **** 489:src/l502_user_process.c **** /****************************************************************************//** 490:src/l502_user_process.c **** @brief Обработка завершения передачи по HostDMA 491:src/l502_user_process.c **** 492:src/l502_user_process.c **** Функция вызывается из обработчика прерывания, когд 493:src/l502_user_process.c **** блока данных по HDMA в ПК, поставленного до этого на пе 494:src/l502_user_process.c **** помощью hdma_send_req_start(). BFIN GAS /tmp/ccPntIEp.s page 10 495:src/l502_user_process.c **** 496:src/l502_user_process.c **** @param[in] addr Адрес слова, сразу за последним переданны 497:src/l502_user_process.c **** @param[in] size Размер переданных данных в 32-битных слова 498:src/l502_user_process.c **** ****************************************************************************/ 499:src/l502_user_process.c **** void hdma_send_done(uint32_t* addr, uint32_t size) { 500:src/l502_user_process.c **** ++streams_cnt[3]; 501:src/l502_user_process.c **** 502:src/l502_user_process.c **** stream_in_buf_free(size); 503:src/l502_user_process.c **** } 504:src/l502_user_process.c **** 505:src/l502_user_process.c **** 506:src/l502_user_process.c **** 507:src/l502_user_process.c **** /***************************************************************************//** 508:src/l502_user_process.c **** @brief Обработка завершения передачи по SPORT 509:src/l502_user_process.c **** 510:src/l502_user_process.c **** Функция вызывается из обработчика прерывания при з 511:src/l502_user_process.c **** по SPORT'у на цифровые выходы/ЦАП, поставленного до это 512:src/l502_user_process.c **** помощью sport_tx_start_req(). 513:src/l502_user_process.c **** 514:src/l502_user_process.c **** 515:src/l502_user_process.c **** @param[in] addr Адрес слова, сразу за последним переданны 516:src/l502_user_process.c **** @param[in] size Размер переданных данных в 32-битных слова 517:src/l502_user_process.c **** void sport_tx_done(uint32_t* addr, uint32_t size) { 518:src/l502_user_process.c **** ++streams_cnt[1]; 519:src/l502_user_process.c **** 520:src/l502_user_process.c **** stream_out_buf_free(size); 521:src/l502_user_process.c **** } 522:src/l502_user_process.c **** 523:src/l502_user_process.c **** 524:src/l502_user_process.c **** 525:src/l502_user_process.c **** 526:src/l502_user_process.c **** 527:src/l502_user_process.c **** 528:src/l502_user_process.c **** 529:src/l502_user_process.c **** 530:src/l502_user_process.c **** 531:src/l502_user_process.c **** /****************************************************************************//** 532:src/l502_user_process.c **** @brief Обработка пользовательских команд. 533:src/l502_user_process.c **** 534:src/l502_user_process.c **** Функция вызывается при приеме команды от ПК с кодом 535:src/l502_user_process.c **** #L502_BF_CMD_CODE_USER. 536:src/l502_user_process.c **** 537:src/l502_user_process.c **** По завершению обработки необходимо обязательно выз 538:src/l502_user_process.c **** l502_cmd_done(), указав код завершения команды и 539:src/l502_user_process.c **** при необходимости передать данные с результатом 540:src/l502_user_process.c **** 541:src/l502_user_process.c **** @param[in] cmd Структура с описанием принятой команды 542:src/l502_user_process.c **** ******************************************************************************/ 543:src/l502_user_process.c **** 544:src/l502_user_process.c **** 545:src/l502_user_process.c **** void usr_cmd_process(t_l502_bf_cmd *cmd) { 16 .loc 1 545 0 17 .LVL0: 18 0000 0032 P0 = R0; 19 0002 FC05 [--sp] = ( r7:7, p5:4 ); 20 21 .LCFI0: BFIN GAS /tmp/ccPntIEp.s page 11 22 0004 00E81A00 LINK 104; 23 .LCFI1: 546:src/l502_user_process.c **** switch (cmd->code){ 24 .loc 1 546 0 25 0008 21E1FF7F R1 = 32767 (X); 547:src/l502_user_process.c **** 548:src/l502_user_process.c **** 549:src/l502_user_process.c **** /* 550:src/l502_user_process.c **** Command template 551:src/l502_user_process.c **** case 0x800?:{ 552:src/l502_user_process.c **** 553:src/l502_user_process.c **** l502_cmd_done(rcv_code, rcv_data, rcv_data_length); //void l502_cmd_done (int32_t result, uint32_ 554:src/l502_user_process.c **** break; 555:src/l502_user_process.c **** } 556:src/l502_user_process.c **** */ 557:src/l502_user_process.c **** // typedef struct { 558:src/l502_user_process.c **** // uint16_t code; /**< Код команды из #t_l502_bf_cmd_code */ 559:src/l502_user_process.c **** // uint16_t status; /**< Статус выполнения - в обработчике не и 560:src/l502_user_process.c **** // uint32_t param; /**< Параметр команды */ 561:src/l502_user_process.c **** // int32_t result; /**< Код результата выполнения команды */ 562:src/l502_user_process.c **** // uint32_t data_size; /**< Количество данных, переданных с кома 563:src/l502_user_process.c **** // uint32_t data[L502_BF_CMD_DATA_SIZE_MAX]; /**< Данные, передаваемые с к 564:src/l502_user_process.c **** // } t_l502_bf_cmd; 565:src/l502_user_process.c **** 566:src/l502_user_process.c **** 567:src/l502_user_process.c **** 568:src/l502_user_process.c **** 569:src/l502_user_process.c **** case 0x8001:{ //L502_BF_USR_CMD_CODE_ECHO 570:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 571:src/l502_user_process.c **** break; 572:src/l502_user_process.c **** } 573:src/l502_user_process.c **** 574:src/l502_user_process.c **** case 0x8002:{ //L502_BF_USR_CMD_CODE_DATA_ECHO 575:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 576:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 577:src/l502_user_process.c **** //rcv_data[I] = (cmd-> data)[I]; 578:src/l502_user_process.c **** rcv_data[I] = I; 579:src/l502_user_process.c **** } 580:src/l502_user_process.c **** l502_cmd_done(cmd-> param, rcv_data, cmd->data_size); 581:src/l502_user_process.c **** break; 582:src/l502_user_process.c **** } 583:src/l502_user_process.c **** case 0x8003:{ //configure ADC 584:src/l502_user_process.c **** uint32_t err_codes[15] = {0,}; 585:src/l502_user_process.c **** err_codes[0] = params_set_lch_cnt(1); 586:src/l502_user_process.c **** //err_codes[1] = params_set_lch(1, 1, L502_LCH_MODE_COMM, L502_ADC_RANGE_5, 1, 0);// chan index 587:src/l502_user_process.c **** err_codes[1] = params_set_lch(0, 0, L502_LCH_MODE_COMM, L502_ADC_RANGE_5, 1, 0);// chan index 1, 588:src/l502_user_process.c **** err_codes[2] = params_set_adc_freq_div(1); 589:src/l502_user_process.c **** err_codes[3] = params_set_ref_freq(2000000); 590:src/l502_user_process.c **** err_codes[4] = params_set_adc_interframe_delay(0); 591:src/l502_user_process.c **** err_codes[5] = params_set_sync_mode (L502_SYNC_INTERNAL); 592:src/l502_user_process.c **** err_codes[6] = params_set_sync_start_mode (L502_SYNC_INTERNAL); 593:src/l502_user_process.c **** //err_codes[7] = params_set_din_freq_div; 594:src/l502_user_process.c **** //err_codes[8] = params_set_dac_freq_div; 595:src/l502_user_process.c **** 596:src/l502_user_process.c **** err_codes[9] = sport_in_set_step_size(1024); 597:src/l502_user_process.c **** 598:src/l502_user_process.c **** //L502_BF_PARAM_ADC_COEF BFIN GAS /tmp/ccPntIEp.s page 12 599:src/l502_user_process.c **** //err_codes[10] = fpga_reg_write(f_regaddr_k[range], ??); 600:src/l502_user_process.c **** //err_codes[11] = fpga_reg_write(f_regaddr_offs[range], ??); 601:src/l502_user_process.c **** err_codes[12] = configure(); 602:src/l502_user_process.c **** 603:src/l502_user_process.c **** 604:src/l502_user_process.c **** 605:src/l502_user_process.c **** 606:src/l502_user_process.c **** uint32_t err_codes_sum = 0; 607:src/l502_user_process.c **** for (int i = 0; i < 15; ++i){ 608:src/l502_user_process.c **** err_codes_sum += err_codes[i]; 609:src/l502_user_process.c **** } 610:src/l502_user_process.c **** l502_cmd_done(err_codes_sum, err_codes, 15); 611:src/l502_user_process.c **** break; 612:src/l502_user_process.c **** } 613:src/l502_user_process.c **** case 0x8004:{ //start streams 614:src/l502_user_process.c **** uint32_t err_codes[5] = {0,}; 615:src/l502_user_process.c **** l502_stream_init(); 616:src/l502_user_process.c **** err_codes[0] = stream_enable(L502_STREAM_ADC | L502_STREAM_DIN); //bitmask 617:src/l502_user_process.c **** err_codes[1] = stream_out_preload(); 618:src/l502_user_process.c **** err_codes[2] = streams_start(); 619:src/l502_user_process.c **** //hdma_send_start(); 620:src/l502_user_process.c **** l502_cmd_done(0, err_codes, 5); 621:src/l502_user_process.c **** break; 622:src/l502_user_process.c **** } 623:src/l502_user_process.c **** case 0x8005:{ //get some data from adc buff. Or simple flag, raised inside usr_in_proc_data() 624:src/l502_user_process.c **** 625:src/l502_user_process.c **** uint32_t streams_sum = streams_cnt[0] + streams_cnt[1] + streams_cnt[2] + streams_cnt[3]; 626:src/l502_user_process.c **** l502_cmd_done(streams_sum, streams_cnt, 4); 627:src/l502_user_process.c **** break; 628:src/l502_user_process.c **** } 629:src/l502_user_process.c **** 630:src/l502_user_process.c **** case 0x8006:{ //get data from SPORT_RX copied arr 631:src/l502_user_process.c **** uint32_t sport_rx_nonzero_sum = 0; 632:src/l502_user_process.c **** 633:src/l502_user_process.c **** for (int i = 0; i < dbg_sport_rx_copy_size; ++i){ 634:src/l502_user_process.c **** if (dbg_sport_rx_copy[i]){ 635:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 636:src/l502_user_process.c **** } 637:src/l502_user_process.c **** } 638:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 639:src/l502_user_process.c **** break; 640:src/l502_user_process.c **** } 641:src/l502_user_process.c **** 642:src/l502_user_process.c **** 643:src/l502_user_process.c **** 644:src/l502_user_process.c **** case 0x8007:{ //start data processing: No dataprocessing. Just copy data to output buffer 645:src/l502_user_process.c **** TX_buff_I = 0; 646:src/l502_user_process.c **** 647:src/l502_user_process.c **** Proc_state.mode = TRANSPARENT; 648:src/l502_user_process.c **** Proc_state.mode_next = TRANSPARENT; 649:src/l502_user_process.c **** Proc_state.LFSM_state = 0; 650:src/l502_user_process.c **** Proc_state.average_N_max = 10; 651:src/l502_user_process.c **** // Proc_state.average_N_max = cmd->param; 652:src/l502_user_process.c **** Proc_state.average_N = 1; 653:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 654:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 655:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; BFIN GAS /tmp/ccPntIEp.s page 13 656:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 657:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; 658:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 659:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 660:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 661:src/l502_user_process.c **** 662:src/l502_user_process.c **** 663:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 664:src/l502_user_process.c **** TX_buff[i] = 0; 665:src/l502_user_process.c **** } 666:src/l502_user_process.c **** 667:src/l502_user_process.c **** // l502_cmd_done(cmd-> param, NULL, 0); 668:src/l502_user_process.c **** l502_cmd_done(TX_buff_I, NULL, 0); 669:src/l502_user_process.c **** break; 670:src/l502_user_process.c **** } 671:src/l502_user_process.c **** case 0x8008:{ //get data from SPORT_RX copied arr 672:src/l502_user_process.c **** TX_buff_I = 0; 673:src/l502_user_process.c **** 674:src/l502_user_process.c **** Proc_state.mode = AVG; 675:src/l502_user_process.c **** Proc_state.mode_next = AVG; 676:src/l502_user_process.c **** Proc_state.LFSM_state = 0; 677:src/l502_user_process.c **** Proc_state.average_N_max = 10; 678:src/l502_user_process.c **** // Proc_state.average_N_max = cmd->param; 679:src/l502_user_process.c **** Proc_state.average_N = 1; 680:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 681:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 682:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 683:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 684:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; 685:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 686:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 687:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 688:src/l502_user_process.c **** 689:src/l502_user_process.c **** 690:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 691:src/l502_user_process.c **** TX_buff[i] = 0; 692:src/l502_user_process.c **** } 693:src/l502_user_process.c **** 694:src/l502_user_process.c **** // l502_cmd_done(cmd-> param, NULL, 0); 695:src/l502_user_process.c **** l502_cmd_done(TX_buff_I, NULL, 0); 696:src/l502_user_process.c **** 697:src/l502_user_process.c **** break; 698:src/l502_user_process.c **** } 699:src/l502_user_process.c **** case 0x8009:{ //request TX_buff_I_shadow value (last size of TX_buff transferred to pc ) 700:src/l502_user_process.c **** l502_cmd_done(TX_buff_I_shadow, NULL, 0); 701:src/l502_user_process.c **** break; 702:src/l502_user_process.c **** } 703:src/l502_user_process.c **** case 0x800A:{ //get data from SPORT_RX copied arr 704:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 705:src/l502_user_process.c **** break; 706:src/l502_user_process.c **** } 707:src/l502_user_process.c **** 708:src/l502_user_process.c **** 709:src/l502_user_process.c **** 710:src/l502_user_process.c **** 711:src/l502_user_process.c **** 712:src/l502_user_process.c **** case 0x8010:{ //L502_BF_USR_CMD_CODE_ECHO BFIN GAS /tmp/ccPntIEp.s page 14 713:src/l502_user_process.c **** //uint32_t test_res = f_sport_test(); 714:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 715:src/l502_user_process.c **** break; 716:src/l502_user_process.c **** } 717:src/l502_user_process.c **** 718:src/l502_user_process.c **** 719:src/l502_user_process.c **** 720:src/l502_user_process.c **** /* 721:src/l502_user_process.c **** case 0x8002:{ 722:src/l502_user_process.c **** cmd-> result = cmd->param * 2; 723:src/l502_user_process.c **** uint32_t data[] = {0,1,2,3,4,5,6,5,4,3,2,1,0}; 724:src/l502_user_process.c **** l502_cmd_done(cmd-> param*3, data, 13); 725:src/l502_user_process.c **** break;} 726:src/l502_user_process.c **** case 0x8001:{ 727:src/l502_user_process.c **** //cmd-> result = cmd->param * 2; 728:src/l502_user_process.c **** uint32_t data[] = {6,5,4,3,2,1,0,1,2,3,4,5,6}; 729:src/l502_user_process.c **** l502_cmd_done(cmd-> param*75, data, 13); 730:src/l502_user_process.c **** break;} 731:src/l502_user_process.c **** */ 732:src/l502_user_process.c **** 733:src/l502_user_process.c **** default: { 734:src/l502_user_process.c **** l502_cmd_done(1, NULL, 0); 735:src/l502_user_process.c **** } 736:src/l502_user_process.c **** } 737:src/l502_user_process.c **** //l502_cmd_done(1, 1, 1); 738:src/l502_user_process.c **** //l502_cmd_done(L502_BF_ERR_UNSUP_CMD, NULL, 0); 739:src/l502_user_process.c **** } 26 .loc 1 739 0 27 000c 7E30 R7 = SP; 546:src/l502_user_process.c **** switch (cmd->code){ 28 .loc 1 546 0 29 000e 0095 R0 = W [P0] (Z); 30 .LVL1: 31 0010 0850 R0 = R0 + R1; 32 0012 C042 R0 = R0.L (Z); 33 0014 7960 R1 = 15 (X); 34 0016 080A cc =R0<=R1 (iu); 35 0018 0B1C if cc jump .L46 (bp); 36 .L2: 734:src/l502_user_process.c **** l502_cmd_done(1, NULL, 0); 37 .loc 1 734 0 38 001a 0860 R0 = 1 (X); 39 001c 0160 R1 = 0 (X); 40 001e 0260 R2 = 0 (X); 41 0020 FFE3F0FF call _l502_cmd_done; 42 .LVL2: 43 .L40: 44 .loc 1 739 0 45 0024 3732 SP = R7; 46 0026 01E80000 UNLINK; 47 002a BC05 ( r7:7, p5:4 ) = [sp++]; 48 49 .LCFI2: 50 002c 1000 rts; 51 .LVL3: 52 .L46: 546:src/l502_user_process.c **** switch (cmd->code){ BFIN GAS /tmp/ccPntIEp.s page 15 53 .loc 1 546 0 54 002e 0832 P1 = R0; 55 0030 4AE10000 P2.H = .L14; 56 0034 0AE10000 P2.L = .L14; 57 0038 8A5E P2 = P2 + (P1 << 2); 58 003a 5291 P2 = [P2]; 59 003c 5200 jump (P2); 60 .section .rodata 61 .align 4 62 .align 4 63 .L14: 64 0000 3E000000 .dd .L13; 65 0004 66000000 .dd .L4; 66 0008 92000000 .dd .L5; 67 000c 44010000 .dd .L6; 68 0010 76010000 .dd .L7; 69 0014 96010000 .dd .L8; 70 0018 0A020000 .dd .L9; 71 001c 78020000 .dd .L10; 72 0020 52000000 .dd .L11; 73 0024 3E000000 .dd .L13; 74 0028 1A000000 .dd .L2; 75 002c 1A000000 .dd .L2; 76 0030 1A000000 .dd .L2; 77 0034 1A000000 .dd .L2; 78 0038 1A000000 .dd .L2; 79 003c 3E000000 .dd .L13; 80 .text; 81 .L13: 714:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 82 .loc 1 714 0 83 003e 40A0 R0 = [P0+4]; 84 0040 0160 R1 = 0 (X); 85 0042 0260 R2 = 0 (X); 86 0044 FFE3DEFF call _l502_cmd_done; 87 .LVL4: 88 .loc 1 739 0 89 0048 3732 SP = R7; 90 004a 01E80000 UNLINK; 91 004e BC05 ( r7:7, p5:4 ) = [sp++]; 92 93 .LCFI3: 94 0050 1000 rts; 95 .LVL5: 96 .L11: 700:src/l502_user_process.c **** l502_cmd_done(TX_buff_I_shadow, NULL, 0); 97 .loc 1 700 0 98 0052 4AE10000 P2.H = _TX_buff_I_shadow; 99 0056 0AE10000 P2.L = _TX_buff_I_shadow; 100 005a 1091 R0 = [P2]; 101 005c 0160 R1 = 0 (X); 102 005e 0260 R2 = 0 (X); 103 0060 FFE3D0FF call _l502_cmd_done; 104 .LVL6: 105 0064 E02F jump.s .L40; 106 .LVL7: 107 .L4: BFIN GAS /tmp/ccPntIEp.s page 16 108 .LBB2: 575:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 109 .loc 1 575 0 110 0066 C1AC P1 = [P0+12]; 111 .LBE2: 571:src/l502_user_process.c **** break; 112 .loc 1 571 0 113 0068 6E32 P5 = SP; 114 .LBB5: 575:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 115 .loc 1 575 0 116 006a 4A44 P2 = P1 << 2; 117 006c 226C P2 += 4; 118 006e 1644 SP -= P2; 119 0070 4E30 R1 = SP; 120 .LBB3: 576:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 121 .loc 1 576 0 122 0072 5130 R2 = P1; 123 .LBE3: 575:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 124 .loc 1 575 0 125 0074 C164 R1 += 24; 126 .LBB4: 576:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 127 .loc 1 576 0 128 0076 020C cc =R2==0; 129 0078 0818 if cc jump .L16; 130 007a 1132 P2 = R1; 131 007c 0060 R0 = 0 (X); 132 .LVL8: 133 .L17: 578:src/l502_user_process.c **** rcv_data[I] = I; 134 .loc 1 578 0 135 007e 1092 [P2++] = R0; 576:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 136 .loc 1 576 0 137 0080 0864 R0 += 1; 138 0082 C2A0 R2 = [P0+12]; 139 0084 020A cc =R2<=R0 (iu); 140 0086 FC17 if !cc jump .L17 (bp); 141 .L16: 142 .LBE4: 580:src/l502_user_process.c **** l502_cmd_done(cmd-> param, rcv_data, cmd->data_size); 143 .loc 1 580 0 144 0088 40A0 R0 = [P0+4]; 145 .LVL9: 146 008a FFE3BBFF call _l502_cmd_done; 147 .LVL10: 148 008e 7532 SP = P5; 149 0090 CA2F jump.s .L40; 150 .LVL11: 151 .L5: 152 .LBE5: 153 .LBB6: 584:src/l502_user_process.c **** uint32_t err_codes[15] = {0,}; 154 .loc 1 584 0 BFIN GAS /tmp/ccPntIEp.s page 17 155 0092 2AE1B0FF P2 = -80 (X); 156 0096 575B P5 = FP + P2; 157 0098 0160 R1 = 0 (X); 158 009a E261 R2 = 60 (X); 159 009c 4530 R0 = P5; 160 009e FFE3B1FF call _memset; 161 .LVL12: 585:src/l502_user_process.c **** err_codes[0] = params_set_lch_cnt(1); 162 .loc 1 585 0 163 00a2 0860 R0 = 1 (X); 164 00a4 FFE3AEFF call _params_set_lch_cnt; 165 00a8 C0BA [FP+-80] = R0; 587:src/l502_user_process.c **** err_codes[1] = params_set_lch(0, 0, L502_LCH_MODE_COMM, L502_ADC_RANGE_5, 1, 0);// chan index 1, 166 .loc 1 587 0 167 00aa 0860 R0 = 1 (X); 168 00ac F0B0 [SP+12] = R0; 169 00ae 30B1 [SP+16] = R0; 170 00b0 0060 R0 = 0 (X); 171 00b2 00CC09C2 R1 = R1 -|- R1 || 171 70B10000 172 [SP+20] = R0 || 173 nop; 174 00ba 0260 R2 = 0 (X); 175 00bc FFE3A2FF call _params_set_lch; 176 00c0 D0BA [FP+-76] = R0; 588:src/l502_user_process.c **** err_codes[2] = params_set_adc_freq_div(1); 177 .loc 1 588 0 178 00c2 0860 R0 = 1 (X); 179 00c4 FFE39EFF call _params_set_adc_freq_div; 180 00c8 E0BA [FP+-72] = R0; 589:src/l502_user_process.c **** err_codes[3] = params_set_ref_freq(2000000); 181 .loc 1 589 0 182 00ca 20E1093D R0 = 15625 (X); 183 00ce 384F R0 <<= 7; 184 00d0 FFE398FF call _params_set_ref_freq; 185 00d4 F0BA [FP+-68] = R0; 590:src/l502_user_process.c **** err_codes[4] = params_set_adc_interframe_delay(0); 186 .loc 1 590 0 187 00d6 0060 R0 = 0 (X); 188 00d8 FFE394FF call _params_set_adc_interframe_delay; 189 00dc 00BB [FP+-64] = R0; 591:src/l502_user_process.c **** err_codes[5] = params_set_sync_mode (L502_SYNC_INTERNAL); 190 .loc 1 591 0 191 00de 0060 R0 = 0 (X); 192 00e0 FFE390FF call _params_set_sync_mode; 193 00e4 10BB [FP+-60] = R0; 592:src/l502_user_process.c **** err_codes[6] = params_set_sync_start_mode (L502_SYNC_INTERNAL); 194 .loc 1 592 0 195 00e6 0060 R0 = 0 (X); 196 00e8 FFE38CFF call _params_set_sync_start_mode; 197 00ec 20BB [FP+-56] = R0; 596:src/l502_user_process.c **** err_codes[9] = sport_in_set_step_size(1024); 198 .loc 1 596 0 199 00ee 20E10004 R0 = 1024 (X); 200 00f2 FFE387FF call _sport_in_set_step_size; 201 00f6 50BB [FP+-44] = R0; 601:src/l502_user_process.c **** err_codes[12] = configure(); BFIN GAS /tmp/ccPntIEp.s page 18 202 .loc 1 601 0 203 00f8 FFE384FF call _configure; 204 .LBB7: 608:src/l502_user_process.c **** err_codes_sum += err_codes[i]; 205 .loc 1 608 0 206 00fc D2B8 R2 = [FP+-76]; 207 00fe C1B8 R1 = [FP+-80]; 208 0100 04CC0A02 R1 = R1 + R2 (NS) || 208 80BB0000 209 [FP+-32] = R0 || 210 nop; 211 .LVL13: 212 0108 E2B8 R2 = [FP+-72]; 213 010a 5150 R1 = R1 + R2; 214 .LVL14: 215 010c F2B8 R2 = [FP+-68]; 216 010e 5150 R1 = R1 + R2; 217 .LVL15: 218 0110 02B9 R2 = [FP+-64]; 219 0112 5150 R1 = R1 + R2; 220 .LVL16: 221 0114 12B9 R2 = [FP+-60]; 222 0116 5150 R1 = R1 + R2; 223 .LVL17: 224 0118 22B9 R2 = [FP+-56]; 225 011a 5150 R1 = R1 + R2; 226 .LVL18: 227 011c 32B9 R2 = [FP+-52]; 228 011e 5150 R1 = R1 + R2; 229 .LVL19: 230 0120 42B9 R2 = [FP+-48]; 231 0122 5150 R1 = R1 + R2; 232 .LVL20: 233 0124 52B9 R2 = [FP+-44]; 234 0126 5150 R1 = R1 + R2; 235 .LVL21: 236 0128 62B9 R2 = [FP+-40]; 237 012a 5150 R1 = R1 + R2; 238 .LVL22: 239 012c 72B9 R2 = [FP+-36]; 240 012e 5150 R1 = R1 + R2; 241 .LVL23: 242 0130 0850 R0 = R0 + R1; 243 .LVL24: 244 0132 91B9 R1 = [FP+-28]; 245 0134 0850 R0 = R0 + R1; 246 .LVL25: 247 .LBE7: 610:src/l502_user_process.c **** l502_cmd_done(err_codes_sum, err_codes, 15); 248 .loc 1 610 0 249 0136 A1B9 R1 = [FP+-24]; 250 0138 0850 R0 = R0 + R1; 251 .LVL26: 252 013a 4D30 R1 = P5; 253 013c 7A60 R2 = 15 (X); 254 013e FFE361FF call _l502_cmd_done; 255 0142 712F jump.s .L40; BFIN GAS /tmp/ccPntIEp.s page 19 256 .LVL27: 257 .L6: 258 .LBE6: 259 .LBB8: 614:src/l502_user_process.c **** uint32_t err_codes[5] = {0,}; 260 .loc 1 614 0 261 0144 0060 R0 = 0 (X); 262 0146 B0BB [FP+-20] = R0; 263 0148 C0BB [FP+-16] = R0; 264 014a D0BB [FP+-12] = R0; 265 014c E0BB [FP+-8] = R0; 266 014e F0BB [FP+-4] = R0; 615:src/l502_user_process.c **** l502_stream_init(); 267 .loc 1 615 0 268 0150 FFE358FF call _l502_stream_init; 269 .LVL28: 616:src/l502_user_process.c **** err_codes[0] = stream_enable(L502_STREAM_ADC | L502_STREAM_DIN); //bitmask 270 .loc 1 616 0 271 0154 1860 R0 = 3 (X); 272 0156 FFE355FF call _stream_enable; 273 015a B0BB [FP+-20] = R0; 617:src/l502_user_process.c **** err_codes[1] = stream_out_preload(); 274 .loc 1 617 0 275 015c FFE352FF call _stream_out_preload; 276 0160 C0BB [FP+-16] = R0; 618:src/l502_user_process.c **** err_codes[2] = streams_start(); 277 .loc 1 618 0 278 0162 FFE34FFF call _streams_start; 279 0166 D0BB [FP+-12] = R0; 620:src/l502_user_process.c **** l502_cmd_done(0, err_codes, 5); 280 .loc 1 620 0 281 0168 4F30 R1 = FP; 282 016a 0060 R0 = 0 (X); 283 016c 6167 R1 += -20; 284 016e 2A60 R2 = 5 (X); 285 0170 FFE348FF call _l502_cmd_done; 286 0174 582F jump.s .L40; 287 .LVL29: 288 .L7: 289 .LBE8: 290 .LBB9: 626:src/l502_user_process.c **** l502_cmd_done(streams_sum, streams_cnt, 4); 291 .loc 1 626 0 292 0176 4AE10000 P2.H = _streams_cnt; 293 017a 0AE10000 P2.L = _streams_cnt; 294 017e 1191 R1 = [P2]; 295 0180 50A0 R0 = [P2+4]; 296 0182 0850 R0 = R0 + R1; 297 0184 91A0 R1 = [P2+8]; 298 0186 0850 R0 = R0 + R1; 299 0188 D1A0 R1 = [P2+12]; 300 018a 0850 R0 = R0 + R1; 301 018c 4A30 R1 = P2; 302 018e 2260 R2 = 4 (X); 303 0190 FFE338FF call _l502_cmd_done; 304 .LVL30: 305 0194 482F jump.s .L40; BFIN GAS /tmp/ccPntIEp.s page 20 306 .LVL31: 307 .L8: 627:src/l502_user_process.c **** break; 308 .loc 1 627 0 309 0196 4AE10000 P2.H = _dbg_sport_rx_copy; 310 019a 0AE12800 P2.L = _dbg_sport_rx_copy; 311 019e 1091 R0 = [P2]; 312 01a0 0802 CC = R0; 313 01a2 0002 R0 = CC; 314 .LBE9: 315 .LBB10: 316 .LBB11: 635:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 317 .loc 1 635 0 318 01a4 51A0 R1 = [P2+4]; 319 01a6 1030 R2 = R0; 320 .LVL32: 321 01a8 010C cc =R1==0; 322 01aa 0A64 R2 += 1; 323 01ac 0206 if !cc R0 = R2; 324 .LVL33: 325 01ae 91A0 R1 = [P2+8]; 326 01b0 1030 R2 = R0; 327 01b2 010C cc =R1==0; 328 01b4 0A64 R2 += 1; 329 .LVL34: 330 01b6 0206 if !cc R0 = R2; 331 .LVL35: 332 01b8 D1A0 R1 = [P2+12]; 333 01ba 1030 R2 = R0; 334 01bc 010C cc =R1==0; 335 01be 0A64 R2 += 1; 336 .LVL36: 337 01c0 0206 if !cc R0 = R2; 338 .LVL37: 339 01c2 11A1 R1 = [P2+16]; 340 01c4 1030 R2 = R0; 341 01c6 010C cc =R1==0; 342 01c8 0A64 R2 += 1; 343 .LVL38: 344 01ca 0206 if !cc R0 = R2; 345 .LVL39: 346 01cc 51A1 R1 = [P2+20]; 347 01ce 1030 R2 = R0; 348 01d0 010C cc =R1==0; 349 01d2 0A64 R2 += 1; 350 .LVL40: 351 01d4 0206 if !cc R0 = R2; 352 .LVL41: 353 01d6 91A1 R1 = [P2+24]; 354 01d8 1030 R2 = R0; 355 01da 010C cc =R1==0; 356 01dc 0A64 R2 += 1; 357 .LVL42: 358 01de 0206 if !cc R0 = R2; 359 .LVL43: 360 01e0 D1A1 R1 = [P2+28]; BFIN GAS /tmp/ccPntIEp.s page 21 361 01e2 1030 R2 = R0; 362 01e4 010C cc =R1==0; 363 01e6 0A64 R2 += 1; 364 .LVL44: 365 01e8 0206 if !cc R0 = R2; 366 .LVL45: 367 01ea 11A2 R1 = [P2+32]; 368 01ec 1030 R2 = R0; 369 01ee 010C cc =R1==0; 370 01f0 0A64 R2 += 1; 371 .LVL46: 372 01f2 0206 if !cc R0 = R2; 373 .LVL47: 374 .LBE11: 638:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 375 .loc 1 638 0 376 01f4 51A2 R1 = [P2+36]; 377 .LBB12: 635:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 378 .loc 1 635 0 379 01f6 1030 R2 = R0; 380 .LBE12: 638:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 381 .loc 1 638 0 382 01f8 010C cc =R1==0; 383 .LBB13: 635:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 384 .loc 1 635 0 385 01fa 0A64 R2 += 1; 386 .LVL48: 387 .LBE13: 638:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 388 .loc 1 638 0 389 01fc 0206 if !cc R0 = R2; 390 .LVL49: 391 01fe 4A30 R1 = P2; 392 0200 22E10004 R2 = 1024 (X); 393 0204 FFE3FEFE call _l502_cmd_done; 394 .LVL50: 395 0208 0E2F jump.s .L40; 396 .LVL51: 397 .L9: 398 .LBE10: 645:src/l502_user_process.c **** TX_buff_I = 0; 399 .loc 1 645 0 400 020a 4CE10000 P4.H = _TX_buff_I; 401 020e 0260 R2 = 0 (X); 402 0210 0CE11400 P4.L = _TX_buff_I; 647:src/l502_user_process.c **** Proc_state.mode = TRANSPARENT; 403 .loc 1 647 0 404 0214 4AE10000 P2.H = _Proc_state; 645:src/l502_user_process.c **** TX_buff_I = 0; 405 .loc 1 645 0 406 0218 2293 [P4] = R2; 647:src/l502_user_process.c **** Proc_state.mode = TRANSPARENT; 407 .loc 1 647 0 408 021a 0AE12C00 P2.L = _Proc_state; BFIN GAS /tmp/ccPntIEp.s page 22 409 021e 0860 R0 = 1 (X); 410 0220 109B B [P2] = R0; 648:src/l502_user_process.c **** Proc_state.mode_next = TRANSPARENT; 411 .loc 1 648 0 412 0222 90E60100 B [P2+1] = R0; 649:src/l502_user_process.c **** Proc_state.LFSM_state = 0; 413 .loc 1 649 0 414 0226 0160 R1 = 0 (X); 415 0228 91E60300 B [P2+3] = R1; 650:src/l502_user_process.c **** Proc_state.average_N_max = 10; 416 .loc 1 650 0 417 022c 5060 R0 = 10 (X); 418 022e 90B4 W [P2+4] = R0; 652:src/l502_user_process.c **** Proc_state.average_N = 1; 419 .loc 1 652 0 420 0230 0860 R0 = 1 (X); 421 0232 D0B4 W [P2+6] = R0; 653:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 422 .loc 1 653 0 423 0234 92B0 [P2+8] = R2; 654:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 424 .loc 1 654 0 425 0236 91E60C00 B [P2+12] = R1; 655:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 426 .loc 1 655 0 427 023a 12B1 [P2+16] = R2; 656:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 428 .loc 1 656 0 429 023c 91E61400 B [P2+20] = R1; 657:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; 430 .loc 1 657 0 431 0240 92B1 [P2+24] = R2; 658:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 432 .loc 1 658 0 433 0242 91E61C00 B [P2+28] = R1; 659:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 434 .loc 1 659 0 435 0246 12B2 [P2+32] = R2; 436 0248 4DE10000 P5.H = _TX_buff; 660:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 437 .loc 1 660 0 438 024c 52B2 [P2+36] = R2; 439 024e 0068 P0 = 0 (X); 440 .LVL52: 441 0250 0DE10000 P5.L = _TX_buff; 442 .LBB14: 664:src/l502_user_process.c **** TX_buff[i] = 0; 443 .loc 1 664 0 444 0254 0060 R0 = 0 (X); 445 0256 29E1E803 P1 = 1000 (X); 446 025a B2E00410 LSETUP (.L38, .L48) LC1 = P1; 447 .L38: 448 025e 855E P2 = P5 + (P0 << 2); 449 0260 1093 [P2] = R0; 450 .L48: 663:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 451 .loc 1 663 0 BFIN GAS /tmp/ccPntIEp.s page 23 452 0262 086C P0 += 1; 453 .LVL53: 454 .L44: 455 .LBE14: 695:src/l502_user_process.c **** l502_cmd_done(TX_buff_I, NULL, 0); 456 .loc 1 695 0 457 0264 2091 R0 = [P4]; 458 0266 0160 R1 = 0 (X); 459 0268 0260 R2 = 0 (X); 460 026a FFE3CBFE call _l502_cmd_done; 461 .LVL54: 462 .loc 1 739 0 463 026e 3732 SP = R7; 464 0270 01E80000 UNLINK; 465 0274 BC05 ( r7:7, p5:4 ) = [sp++]; 466 467 .LCFI4: 468 0276 1000 rts; 469 .LVL55: 470 .L10: 672:src/l502_user_process.c **** TX_buff_I = 0; 471 .loc 1 672 0 472 0278 4CE10000 P4.H = _TX_buff_I; 473 027c 0260 R2 = 0 (X); 474 027e 0CE11400 P4.L = _TX_buff_I; 674:src/l502_user_process.c **** Proc_state.mode = AVG; 475 .loc 1 674 0 476 0282 4AE10000 P2.H = _Proc_state; 672:src/l502_user_process.c **** TX_buff_I = 0; 477 .loc 1 672 0 478 0286 2293 [P4] = R2; 674:src/l502_user_process.c **** Proc_state.mode = AVG; 479 .loc 1 674 0 480 0288 0AE12C00 P2.L = _Proc_state; 481 028c 1060 R0 = 2 (X); 482 028e 109B B [P2] = R0; 675:src/l502_user_process.c **** Proc_state.mode_next = AVG; 483 .loc 1 675 0 484 0290 90E60100 B [P2+1] = R0; 676:src/l502_user_process.c **** Proc_state.LFSM_state = 0; 485 .loc 1 676 0 486 0294 0160 R1 = 0 (X); 487 0296 91E60300 B [P2+3] = R1; 677:src/l502_user_process.c **** Proc_state.average_N_max = 10; 488 .loc 1 677 0 489 029a 5060 R0 = 10 (X); 490 029c 90B4 W [P2+4] = R0; 679:src/l502_user_process.c **** Proc_state.average_N = 1; 491 .loc 1 679 0 492 029e 0860 R0 = 1 (X); 493 02a0 D0B4 W [P2+6] = R0; 680:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 494 .loc 1 680 0 495 02a2 92B0 [P2+8] = R2; 681:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 496 .loc 1 681 0 497 02a4 91E60C00 B [P2+12] = R1; BFIN GAS /tmp/ccPntIEp.s page 24 682:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 498 .loc 1 682 0 499 02a8 12B1 [P2+16] = R2; 683:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 500 .loc 1 683 0 501 02aa 91E61400 B [P2+20] = R1; 684:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; 502 .loc 1 684 0 503 02ae 92B1 [P2+24] = R2; 685:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 504 .loc 1 685 0 505 02b0 91E61C00 B [P2+28] = R1; 686:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 506 .loc 1 686 0 507 02b4 12B2 [P2+32] = R2; 508 02b6 4DE10000 P5.H = _TX_buff; 687:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 509 .loc 1 687 0 510 02ba 52B2 [P2+36] = R2; 511 02bc 0068 P0 = 0 (X); 512 .LVL56: 513 02be 0DE10000 P5.L = _TX_buff; 514 .LBB15: 691:src/l502_user_process.c **** TX_buff[i] = 0; 515 .loc 1 691 0 516 02c2 0060 R0 = 0 (X); 517 02c4 29E1E803 P1 = 1000 (X); 518 02c8 B2E00410 LSETUP (.L39, .L47) LC1 = P1; 519 .L39: 520 02cc 855E P2 = P5 + (P0 << 2); 521 02ce 1093 [P2] = R0; 522 .L47: 690:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 523 .loc 1 690 0 524 02d0 086C P0 += 1; 525 02d2 C92F jump.s .L44; 526 .LBE15: 527 .LFE6: 528 .size _usr_cmd_process, .-_usr_cmd_process 529 .align 4 530 .global _sport_tx_done; 531 .type _sport_tx_done, STT_FUNC; 532 _sport_tx_done: 533 .LFB5: 517:src/l502_user_process.c **** void sport_tx_done(uint32_t* addr, uint32_t size) { 534 .loc 1 517 0 535 .LVL57: 518:src/l502_user_process.c **** ++streams_cnt[1]; 536 .loc 1 518 0 537 02d4 4AE10000 P2.H = _streams_cnt; 517:src/l502_user_process.c **** void sport_tx_done(uint32_t* addr, uint32_t size) { 538 .loc 1 517 0 539 02d8 00E80000 LINK 0; 540 .LCFI5: 518:src/l502_user_process.c **** ++streams_cnt[1]; 541 .loc 1 518 0 542 02dc 0AE10000 P2.L = _streams_cnt; BFIN GAS /tmp/ccPntIEp.s page 25 543 02e0 50A0 R0 = [P2+4]; 544 .LVL58: 545 02e2 0864 R0 += 1; 546 02e4 50B0 [P2+4] = R0; 520:src/l502_user_process.c **** stream_out_buf_free(size); 547 .loc 1 520 0 548 02e6 0130 R0 = R1; 521:src/l502_user_process.c **** } 549 .loc 1 521 0 550 02e8 01E80000 UNLINK; 520:src/l502_user_process.c **** stream_out_buf_free(size); 551 .loc 1 520 0 552 02ec FFE28AFE jump.l _stream_out_buf_free; 553 .LVL59: 554 .LFE5: 555 .size _sport_tx_done, .-_sport_tx_done 556 .align 4 557 .global _hdma_send_done; 558 .type _hdma_send_done, STT_FUNC; 559 _hdma_send_done: 560 .LFB4: 499:src/l502_user_process.c **** void hdma_send_done(uint32_t* addr, uint32_t size) { 561 .loc 1 499 0 562 .LVL60: 500:src/l502_user_process.c **** ++streams_cnt[3]; 563 .loc 1 500 0 564 02f0 4AE10000 P2.H = _streams_cnt; 499:src/l502_user_process.c **** void hdma_send_done(uint32_t* addr, uint32_t size) { 565 .loc 1 499 0 566 02f4 00E80000 LINK 0; 567 .LCFI6: 500:src/l502_user_process.c **** ++streams_cnt[3]; 568 .loc 1 500 0 569 02f8 0AE10000 P2.L = _streams_cnt; 570 02fc D0A0 R0 = [P2+12]; 571 .LVL61: 572 02fe 0864 R0 += 1; 573 0300 D0B0 [P2+12] = R0; 502:src/l502_user_process.c **** stream_in_buf_free(size); 574 .loc 1 502 0 575 0302 0130 R0 = R1; 503:src/l502_user_process.c **** } 576 .loc 1 503 0 577 0304 01E80000 UNLINK; 502:src/l502_user_process.c **** stream_in_buf_free(size); 578 .loc 1 502 0 579 0308 FFE27CFE jump.l _stream_in_buf_free; 580 .LVL62: 581 .LFE4: 582 .size _hdma_send_done, .-_hdma_send_done 583 .align 4 584 .global _usr_out_proc_data; 585 .type _usr_out_proc_data, STT_FUNC; 586 _usr_out_proc_data: 587 .LFB3: 463:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 588 .loc 1 463 0 BFIN GAS /tmp/ccPntIEp.s page 26 589 .LVL63: 590 030c 7005 [--sp] = ( r7:6 ); 591 592 .LCFI7: 468:src/l502_user_process.c **** ++streams_cnt[2]; 593 .loc 1 468 0 594 030e 4AE10000 P2.H = _streams_cnt; 463:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 595 .loc 1 463 0 596 0312 00E80300 LINK 12; 597 .LCFI8: 468:src/l502_user_process.c **** ++streams_cnt[2]; 598 .loc 1 468 0 599 0316 0AE10000 P2.L = _streams_cnt; 463:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 600 .loc 1 463 0 601 031a 3030 R6 = R0; 468:src/l502_user_process.c **** ++streams_cnt[2]; 602 .loc 1 468 0 603 031c 90A0 R0 = [P2+8]; 604 .LVL64: 605 031e 0864 R0 += 1; 463:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 606 .loc 1 463 0 607 0320 82CE01CE R7 = ROT R1 BY 0 || 607 90B00000 608 [P2+8] = R0 || 609 nop; 610 .LVL65: 470:src/l502_user_process.c **** if (sport_tx_req_rdy()) { 611 .loc 1 470 0 612 0328 FFE36CFE call _sport_tx_req_rdy; 613 032c 000C cc =R0==0; 614 032e 0E18 if cc jump .L57; 615 0330 20E10040 R0 = 16384 (X); 616 0334 070A cc =R7<=R0 (iu); 617 0336 3806 if !cc R7 = R0; 618 .LVL66: 477:src/l502_user_process.c **** sport_tx_start_req(data, size); 619 .loc 1 477 0 620 0338 0630 R0 = R6; 621 033a 0F30 R1 = R7; 622 033c FFE362FE call _sport_tx_start_req; 482:src/l502_user_process.c **** } 623 .loc 1 482 0 624 0340 0730 R0 = R7; 625 0342 01E80000 UNLINK; 626 0346 3005 ( r7:6 ) = [sp++]; 627 628 .LCFI9: 629 .LVL67: 630 0348 1000 rts; 631 .LVL68: 632 .L57: 470:src/l502_user_process.c **** if (sport_tx_req_rdy()) { 633 .loc 1 470 0 634 034a 0760 R7 = 0 (X); BFIN GAS /tmp/ccPntIEp.s page 27 635 .LVL69: 482:src/l502_user_process.c **** } 636 .loc 1 482 0 637 034c 0730 R0 = R7; 638 034e 01E80000 UNLINK; 639 0352 3005 ( r7:6 ) = [sp++]; 640 641 .LCFI10: 642 .LVL70: 643 0354 1000 rts; 644 .LFE3: 645 .size _usr_out_proc_data, .-_usr_out_proc_data 646 0356 0000 .align 4 647 .global _usr_in_proc_data; 648 .type _usr_in_proc_data, STT_FUNC; 649 _usr_in_proc_data: 650 .LFB2: 151:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 651 .loc 1 151 0 652 .LVL71: 653 0358 FB05 [--sp] = ( r7:7, p5:3 ); 654 655 .LCFI11: 155:src/l502_user_process.c **** ++streams_cnt[0]; 656 .loc 1 155 0 657 035a 4AE10000 P2.H = _streams_cnt; 151:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 658 .loc 1 151 0 659 035e 00E80300 LINK 12; 660 .LCFI12: 155:src/l502_user_process.c **** ++streams_cnt[0]; 661 .loc 1 155 0 662 0362 0AE10000 P2.L = _streams_cnt; 151:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 663 .loc 1 151 0 664 0366 0034 I0 = R0; 155:src/l502_user_process.c **** ++streams_cnt[0]; 665 .loc 1 155 0 666 0368 1091 R0 = [P2]; 667 .LVL72: 668 036a 0864 R0 += 1; 170:src/l502_user_process.c **** if (Proc_state.mode == TRANSPARENT){ 669 .loc 1 170 0 670 036c 4BE10000 P3.H = _Proc_state; 155:src/l502_user_process.c **** ++streams_cnt[0]; 671 .loc 1 155 0 672 0370 1093 [P2] = R0; 170:src/l502_user_process.c **** if (Proc_state.mode == TRANSPARENT){ 673 .loc 1 170 0 674 0372 0BE12C00 P3.L = _Proc_state; 675 0376 5899 R0 = B [P3] (X); 676 0378 4043 R0 = R0.B (Z); 677 037a 080C cc =R0==1; 678 037c 5518 if cc jump .L69; 679 .L59: 177:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 680 .loc 1 177 0 BFIN GAS /tmp/ccPntIEp.s page 28 681 037e 4AE10000 P2.H = _Proc_state; 682 0382 0AE12C00 P2.L = _Proc_state; 683 0386 5899 R0 = B [P3] (X); 684 0388 4043 R0 = R0.B (Z); 685 038a 100C cc =R0==2; 686 038c 2218 if cc jump .L70; 687 .L61: 395:src/l502_user_process.c **** if (hdma_send_req_rdy()) { 688 .loc 1 395 0 689 038e FFE339FE call _hdma_send_req_rdy; 690 .LVL73: 691 0392 000C cc =R0==0; 692 0394 1A18 if cc jump .L64; 420:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 693 .loc 1 420 0 694 0396 5899 R0 = B [P3] (X); 695 0398 4043 R0 = R0.B (Z); 696 039a 100C cc =R0==2; 697 039c 7318 if cc jump .L71; 427:src/l502_user_process.c **** hdma_send_req_start(TX_buff, TX_buff_I, 0); 698 .loc 1 427 0 699 039e 4DE10000 P5.H = _TX_buff_I; 700 03a2 0DE11400 P5.L = _TX_buff_I; 701 03a6 40E10000 R0.H = _TX_buff; 702 03aa 2991 R1 = [P5]; 703 03ac 00E10000 R0.L = _TX_buff; 704 03b0 0260 R2 = 0 (X); 705 03b2 FFE327FE call _hdma_send_req_start; 428:src/l502_user_process.c **** TX_buff_I_shadow = TX_buff_I; 706 .loc 1 428 0 707 03b6 4AE10000 P2.H = _TX_buff_I_shadow; 708 03ba 2891 R0 = [P5]; 709 03bc 0AE10000 P2.L = _TX_buff_I_shadow; 710 03c0 1093 [P2] = R0; 429:src/l502_user_process.c **** TX_buff_I = 0; 711 .loc 1 429 0 712 03c2 0060 R0 = 0 (X); 713 03c4 2893 [P5] = R0; 430:src/l502_user_process.c **** return TX_buff_I_shadow; 714 .loc 1 430 0 715 03c6 1091 R0 = [P2]; 716 .L64: 437:src/l502_user_process.c **** } 717 .loc 1 437 0 718 03c8 01E80000 UNLINK; 719 03cc BB05 ( r7:7, p5:3 ) = [sp++]; 720 721 .LCFI13: 722 03ce 1000 rts; 723 .LVL74: 724 .L70: 178:src/l502_user_process.c **** data_I = 0; 725 .loc 1 178 0 726 03d0 4DE10000 P5.H = _data_I; 727 03d4 0060 R0 = 0 (X); 728 03d6 0DE11800 P5.L = _data_I; 729 03da 2893 [P5] = R0; BFIN GAS /tmp/ccPntIEp.s page 29 180:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 730 .loc 1 180 0 731 03dc 10B1 [P2+16] = R0; 181:src/l502_user_process.c **** while((data_I < size )&& (Proc_state.AVG_buff_I < AVG_BUFF_SIZE)){ 732 .loc 1 181 0 733 03de 2891 R0 = [P5]; 734 03e0 010A cc =R1<=R0 (iu); 735 03e2 D61B if cc jump .L61; 736 03e4 22E1E703 R2 = 999 (X); 737 03e8 10A1 R0 = [P2+16]; 738 03ea 100A cc =R0<=R2 (iu); 739 03ec D113 if !cc jump .L61; 740 03ee 42E10000 R2.H = _AVG_buff; 741 03f2 02E10000 R2.L = _AVG_buff; 186:src/l502_user_process.c **** AVG_buff[Proc_state.AVG_buff_I++] = data[data_I++]; 742 .loc 1 186 0 743 03f6 4A34 I1 = P2; 744 03f8 23E1E703 R3 = 999 (X); 745 03fc 0520 jump.s .L62; 746 .L72: 181:src/l502_user_process.c **** while((data_I < size )&& (Proc_state.AVG_buff_I < AVG_BUFF_SIZE)){ 747 .loc 1 181 0 748 03fe 9132 P2 = I1; 749 0400 10A1 R0 = [P2+16]; 750 0402 180A cc =R0<=R3 (iu); 751 0404 C513 if !cc jump .L61; 752 .L62: 186:src/l502_user_process.c **** AVG_buff[Proc_state.AVG_buff_I++] = data[data_I++]; 753 .loc 1 186 0 754 0406 A032 P4 = I0; 755 0408 19AD P1 = [P3+16]; 756 040a 6891 P0 = [P5]; 757 040c 845E P2 = P4 + (P0 << 2); 758 040e 2232 P4 = R2; 759 0410 1091 R0 = [P2]; 760 0412 086C P0 += 1; 761 0414 8C5E P2 = P4 + (P1 << 2); 762 0416 1093 [P2] = R0; 763 0418 096C P1 += 1; 764 041a 19BD [P3+16] = P1; 765 041c 6893 [P5] = P0; 181:src/l502_user_process.c **** while((data_I < size )&& (Proc_state.AVG_buff_I < AVG_BUFF_SIZE)){ 766 .loc 1 181 0 767 041e 2891 R0 = [P5]; 768 0420 010A cc =R1<=R0 (iu); 769 0422 EE17 if !cc jump .L72 (bp); 770 0424 B52F jump.s .L61; 771 .L69: 171:src/l502_user_process.c **** data_I = 0; 772 .loc 1 171 0 773 0426 4DE10000 P5.H = _data_I; 774 042a 0DE11800 P5.L = _data_I; 775 042e 0060 R0 = 0 (X); 776 0430 2893 [P5] = R0; 172:src/l502_user_process.c **** while((data_I < size )&& (TX_buff_I < TX_BUFF_SIZE)){ 777 .loc 1 172 0 778 0432 2891 R0 = [P5]; BFIN GAS /tmp/ccPntIEp.s page 30 779 0434 010A cc =R1<=R0 (iu); 780 0436 A41B if cc jump .L59; 781 0438 4CE10000 P4.H = _TX_buff_I; 782 043c 0CE11400 P4.L = _TX_buff_I; 783 0440 22E1E703 R2 = 999 (X); 784 0444 2091 R0 = [P4]; 785 0446 100A cc =R0<=R2 (iu); 786 0448 9B13 if !cc jump .L59; 787 044a 43E10000 R3.H = _TX_buff; 788 044e 03E10000 R3.L = _TX_buff; 173:src/l502_user_process.c **** TX_buff[TX_buff_I++] = data[data_I++]; 789 .loc 1 173 0 790 0452 5430 R2 = P4; 791 0454 27E1E703 R7 = 999 (X); 792 0458 0520 jump.s .L60; 793 .L73: 172:src/l502_user_process.c **** while((data_I < size )&& (TX_buff_I < TX_BUFF_SIZE)){ 794 .loc 1 172 0 795 045a 1232 P2 = R2; 796 045c 1091 R0 = [P2]; 797 045e 380A cc =R0<=R7 (iu); 798 0460 8F13 if !cc jump .L59; 799 .L60: 173:src/l502_user_process.c **** TX_buff[TX_buff_I++] = data[data_I++]; 800 .loc 1 173 0 801 0462 9032 P2 = I0; 802 0464 6191 P1 = [P4]; 803 0466 6891 P0 = [P5]; 804 0468 825E P2 = P2 + (P0 << 2); 805 046a 1091 R0 = [P2]; 806 046c 1332 P2 = R3; 807 046e 086C P0 += 1; 808 0470 8A5E P2 = P2 + (P1 << 2); 809 0472 1093 [P2] = R0; 810 0474 096C P1 += 1; 811 0476 6193 [P4] = P1; 812 0478 6893 [P5] = P0; 172:src/l502_user_process.c **** while((data_I < size )&& (TX_buff_I < TX_BUFF_SIZE)){ 813 .loc 1 172 0 814 047a 2891 R0 = [P5]; 815 047c 8809 cc =R0