BFIN GAS /tmp/ccG6eBVz.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 53020000 .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/ccG6eBVz.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 **** volatile uint32_t dbg_receive_value = 1234321; 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 TX_buff_shadow[]; //size: TX_BUFF_SIZE 87:src/l502_user_process.c **** //extern volatile uint32_t RAW_data_buff[]; //size: RAW_DATA_BUFF_SIZE 88:src/l502_user_process.c **** extern volatile uint32_t AVG_buff[]; //size: AVG_BUFF_SIZE 89:src/l502_user_process.c **** //extern volatile uint32_t AVG_buff_B[]; //size: AVG_BUFF_SIZE 90:src/l502_user_process.c **** //extern volatile uint32_t FFT_buff[]; //size: FFT_BUFF_SIZE 91:src/l502_user_process.c **** 92:src/l502_user_process.c **** 93:src/l502_user_process.c **** volatile uint32_t TX_marker[10] = {0xFE00000F,0xFE0000F0, 0xFE000F00, 0xFE00F000, 0xFE0F0000,0xFEF0 94:src/l502_user_process.c **** 95:src/l502_user_process.c **** volatile struct dataprocessor_dypedef{ BFIN GAS /tmp/ccG6eBVz.s page 3 96:src/l502_user_process.c **** uint8_t mode; 97:src/l502_user_process.c **** uint8_t mode_next; 98:src/l502_user_process.c **** uint8_t cycle_state; 99:src/l502_user_process.c **** uint8_t LFSM_state; // 0 -- waiting for it... ; 1 -- receiving LFSM data 100:src/l502_user_process.c **** uint16_t average_N_max; 101:src/l502_user_process.c **** uint16_t average_N; 102:src/l502_user_process.c **** uint32_t TX_buff_I; 103:src/l502_user_process.c **** uint8_t TX_buff_state; //0 --blocked, 1 -- filling, 2 -- ready to send 104:src/l502_user_process.c **** uint32_t AVG_buff_I; 105:src/l502_user_process.c **** uint8_t AVG_state; 106:src/l502_user_process.c **** uint8_t AVG_buff_state; 107:src/l502_user_process.c **** uint8_t AVG_buff_active; 108:src/l502_user_process.c **** uint32_t FFT_buff_I; 109:src/l502_user_process.c **** uint8_t FFT_buff_state; 110:src/l502_user_process.c **** uint32_t digital_word_prev; 111:src/l502_user_process.c **** uint32_t digital_word_curr; 112:src/l502_user_process.c **** uint8_t DIN2_SYN_value_curr; 113:src/l502_user_process.c **** uint8_t DIN2_SYN_value_prev; 114:src/l502_user_process.c **** }Proc_state; 115:src/l502_user_process.c **** 116:src/l502_user_process.c **** volatile uint32_t TX_buff_I = 0; 117:src/l502_user_process.c **** volatile uint32_t TX_buff_I_shadow = 123321; 118:src/l502_user_process.c **** 119:src/l502_user_process.c **** volatile uint32_t data_I = 0; 120:src/l502_user_process.c **** volatile uint32_t send_size = 0; 121:src/l502_user_process.c **** 122:src/l502_user_process.c **** volatile uint8_t TX_buff_state = TX_DONE; //FILLING, TODO_TX, TRANSMITTING, TX_DONE, BUFF_READY, 123:src/l502_user_process.c **** volatile uint32_t tx_val = 0; 124:src/l502_user_process.c **** 125:src/l502_user_process.c **** //int f_sport_test(void); 126:src/l502_user_process.c **** void l502_stream_init(void); 127:src/l502_user_process.c **** 128:src/l502_user_process.c **** //struct LFSM_typedef{ 129:src/l502_user_process.c **** // uint8_t 130:src/l502_user_process.c **** //}; 131:src/l502_user_process.c **** 132:src/l502_user_process.c **** uint8_t LFSM_started = 0; 133:src/l502_user_process.c **** 134:src/l502_user_process.c **** 135:src/l502_user_process.c **** uint8_t DY_SYN_2_value = 0; 136:src/l502_user_process.c **** uint8_t DY_SYN_2_value_prev = 0; 137:src/l502_user_process.c **** /***************************************************************************//** 138:src/l502_user_process.c **** @brief Обработка принятого массива данных АЦП/DIN. 139:src/l502_user_process.c **** 140:src/l502_user_process.c **** Функция вызывается каждый раз, когда обнаружены нов 141:src/l502_user_process.c **** АЦП/цифровых входов, пришедшие по SPORT0. 142:src/l502_user_process.c **** 143:src/l502_user_process.c **** Функция должна обработать данные и вернуть количес 144:src/l502_user_process.c **** однако эти данные все еще считаются использованным 145:src/l502_user_process.c **** новыми пришедшими данными) до тех пор пока не будет 146:src/l502_user_process.c **** stream_in_buf_free()). 147:src/l502_user_process.c **** 148:src/l502_user_process.c **** Если функция вернет значение меньше чем size, то функц 149:src/l502_user_process.c **** следующем проходе еще раз с указателем на необработ 150:src/l502_user_process.c **** 151:src/l502_user_process.c **** В текущей реализации просто запускается передача д 152:src/l502_user_process.c **** BFIN GAS /tmp/ccG6eBVz.s page 4 153:src/l502_user_process.c **** @param[in] data Указатель на массив с принятыми данными 154:src/l502_user_process.c **** @param[in] size Количество принятых данных в 32-битных сло 155:src/l502_user_process.c **** @return Функция возвращает количество обработанн 156:src/l502_user_process.c **** На эти данные не будет вызываться повторн 157:src/l502_user_process.c **** но они считаются еще используемыми 158:src/l502_user_process.c **** *******************************************************************************/ 159:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 160:src/l502_user_process.c **** /* если есть свободные дескрипторы на передачу по HDMA 161:src/l502_user_process.c **** передачу. Иначе возвращаем 0, чтобы на обработку эт 162:src/l502_user_process.c **** вызвали бы позже */ 163:src/l502_user_process.c **** ++streams_cnt[0]; 164:src/l502_user_process.c **** 165:src/l502_user_process.c **** 166:src/l502_user_process.c **** 167:src/l502_user_process.c **** //clear TX_buff 168:src/l502_user_process.c **** if (TX_buff_state == TX_DONE){ 169:src/l502_user_process.c **** for (int i = 0; i < TX_BUFF_SIZE; ++i){ 170:src/l502_user_process.c **** //TX_buff[i] = 0x00000123; 171:src/l502_user_process.c **** TX_buff[i] = tx_val++ | 0xEE000000; 172:src/l502_user_process.c **** //TX_buff[i] = size; 173:src/l502_user_process.c **** } 174:src/l502_user_process.c **** TX_buff_state = FILLING; 175:src/l502_user_process.c **** } 176:src/l502_user_process.c **** /* 177:src/l502_user_process.c **** for (int i = 0; i < TX_BUFF_SIZE; ++i){ 178:src/l502_user_process.c **** TX_buff[i] = 0x00000000; 179:src/l502_user_process.c **** } 180:src/l502_user_process.c **** */ 181:src/l502_user_process.c **** 182:src/l502_user_process.c **** //for (int i = 0; i < dbg_sport_rx_copy; ++i){ 183:src/l502_user_process.c **** // dbg_sport_rx_copy[i] = data[i]; 184:src/l502_user_process.c **** //} 185:src/l502_user_process.c **** 186:src/l502_user_process.c **** 187:src/l502_user_process.c **** 188:src/l502_user_process.c **** //* 189:src/l502_user_process.c **** //simple transparent mode 190:src/l502_user_process.c **** if (Proc_state.mode == TRANSPARENT){ 191:src/l502_user_process.c **** //++Proc_state.average_N; 192:src/l502_user_process.c **** 193:src/l502_user_process.c **** if (TX_buff_state == FILLING){ 194:src/l502_user_process.c **** data_I = 0; 195:src/l502_user_process.c **** TX_buff_I = 0; 196:src/l502_user_process.c **** while((++data_I < size )&& (++TX_buff_I < TX_BUFF_SIZE)){ 197:src/l502_user_process.c **** //; 198:src/l502_user_process.c **** TX_buff[TX_buff_I] = data[data_I]; 199:src/l502_user_process.c **** } 200:src/l502_user_process.c **** 201:src/l502_user_process.c **** TX_buff_state = TODO_TX; 202:src/l502_user_process.c **** //tx_val = 0; 203:src/l502_user_process.c **** } 204:src/l502_user_process.c **** //TX_buff_state = DUMMY; 205:src/l502_user_process.c **** 206:src/l502_user_process.c **** } 207:src/l502_user_process.c **** //TX_buff_I = TX_BUFF_SIZE; 208:src/l502_user_process.c **** 209:src/l502_user_process.c **** if (Proc_state.mode == AVG){ BFIN GAS /tmp/ccG6eBVz.s page 5 210:src/l502_user_process.c **** while(++data_I < size ){ 211:src/l502_user_process.c **** uint32_t word = data[data_I]; 212:src/l502_user_process.c **** uint32_t val = word & 0x00FFFFFF; 213:src/l502_user_process.c **** uint8_t header = (uint8_t)(word >> 24); 214:src/l502_user_process.c **** if (header == 0x00){ //digital_channel. switches LFSM state machine 215:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 216:src/l502_user_process.c **** if (word & 0b1 << 17){ 217:src/l502_user_process.c **** DY_SYN_2_value = 1; 218:src/l502_user_process.c **** }else{ 219:src/l502_user_process.c **** DY_SYN_2_value = 0; 220:src/l502_user_process.c **** } 221:src/l502_user_process.c **** 222:src/l502_user_process.c **** if ((DY_SYN_2_value == 1)&& (DY_SYN_2_value_prev == 0)){ //new cycle started 223:src/l502_user_process.c **** //data[data_I] = 0xB00000000; 224:src/l502_user_process.c **** Proc_state.average_N ++; 225:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 226:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_STARTED; 227:src/l502_user_process.c **** //if (Proc_state.average_N >= Proc_state.average_N_max){ //whole average ended 228:src/l502_user_process.c **** if (1){ 229:src/l502_user_process.c **** Proc_state.AVG_state = FULLY_COMPLETED; 230:src/l502_user_process.c **** //averaging completed => copy average results to TX_buff and start avg again 231:src/l502_user_process.c **** TX_buff_I = 0; 232:src/l502_user_process.c **** for (uint32_t i = 0; ((TX_buff_I < TX_BUFF_SIZE) && (i < AVG_BUFF_SIZE)); i++){ 233:src/l502_user_process.c **** // uint32_t i = 0; 234:src/l502_user_process.c **** // while ((TX_buff_I < TX_BUFF_SIZE) && (i < AVG_BUFF_SIZE)){ 235:src/l502_user_process.c **** TX_buff[TX_buff_I++] = AVG_buff[i]; 236:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xB0000000 + Proc_state.average_N; 237:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xC1000000; 238:src/l502_user_process.c **** } 239:src/l502_user_process.c **** 240:src/l502_user_process.c **** //clear AVG_buff: 241:src/l502_user_process.c **** for (uint32_t i = 0; i < AVG_BUFF_SIZE; i++ ){ 242:src/l502_user_process.c **** AVG_buff[i] = 0xC2321123; 243:src/l502_user_process.c **** } 244:src/l502_user_process.c **** 245:src/l502_user_process.c **** TX_buff_state = TODO_TX; 246:src/l502_user_process.c **** 247:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 248:src/l502_user_process.c **** TX_buff_shadow[i] = TX_buff[i]; 249:src/l502_user_process.c **** } 250:src/l502_user_process.c **** hdma_send_req_start(TX_buff_shadow, TX_buff_I, 0); 251:src/l502_user_process.c **** hdma_send_req_start(TX_marker, 10, 0); 252:src/l502_user_process.c **** 253:src/l502_user_process.c **** 254:src/l502_user_process.c **** // hdma_send_req_start(TX_buff, TX_BUFF_SIZE, 0); 255:src/l502_user_process.c **** //TX_buff_state = TRANSMITTING; 256:src/l502_user_process.c **** TX_buff_state = TX_DONE; 257:src/l502_user_process.c **** 258:src/l502_user_process.c **** 259:src/l502_user_process.c **** }else{ // 260:src/l502_user_process.c **** Proc_state.AVG_state = STEP_RUNNING; 261:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 262:src/l502_user_process.c **** 263:src/l502_user_process.c **** } 264:src/l502_user_process.c **** } 265:src/l502_user_process.c **** 266:src/l502_user_process.c **** }else if(header == 0xD0){ //first phy channel BFIN GAS /tmp/ccG6eBVz.s page 6 267:src/l502_user_process.c **** // if (Proc_state.AVG_state == STEP_RUNNING){ 268:src/l502_user_process.c **** // if (Proc_state.LFSM_state == CYCLE_STARTED){ 269:src/l502_user_process.c **** if (1){ 270:src/l502_user_process.c **** if (1){ 271:src/l502_user_process.c **** // AVG_buff[Proc_state.AVG_buff_I++] = 0xC0000000 | (0x00FFFFFF & (AVG_buff[Proc_state.AVG 272:src/l502_user_process.c **** AVG_buff[Proc_state.AVG_buff_I++] = 0xC0000000 | val; 273:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I++] = 0xC0000000; 274:src/l502_user_process.c **** if (Proc_state.AVG_buff_I >= AVG_BUFF_SIZE){ 275:src/l502_user_process.c **** Proc_state.AVG_state = STEP_COMPLETED; 276:src/l502_user_process.c **** } 277:src/l502_user_process.c **** } 278:src/l502_user_process.c **** } 279:src/l502_user_process.c **** } 280:src/l502_user_process.c **** } 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 **** 286:src/l502_user_process.c **** /* 287:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 288:src/l502_user_process.c **** data_I = 0; 289:src/l502_user_process.c **** //TX_buff_I = 0; 290:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 291:src/l502_user_process.c **** if (Proc_state.AVG_buff_active == A){ 292:src/l502_user_process.c **** while((data_I < size )&& (Proc_state.AVG_buff_I < (AVG_BUFF_SIZE - 10))){ 293:src/l502_user_process.c **** uint32_t word = data[data_I]; 294:src/l502_user_process.c **** //uint32_t avg_word = AVG_buff_A[Proc_state.AVG_buff_I++]; 295:src/l502_user_process.c **** //AVG_buff_A[Proc_state.AVG_buff_I] = (avg_word & 0x007FFFFF) + (word & 0x007FFFFF); 296:src/l502_user_process.c **** //AVG_buff_A[Proc_state.AVG_buff_I] = 0xDD000000 | (word & 0x00FFFFFF); 297:src/l502_user_process.c **** AVG_buff_A[Proc_state.AVG_buff_I] = word; 298:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I++] = data[data_I++]; 299:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I] = data[data_I]; 300:src/l502_user_process.c **** //uint32_t word = data[data_I]; 301:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I] = word; 302:src/l502_user_process.c **** //AVG_buff_A[Proc_state.AVG_buff_I] = 0xDD000000 | (Proc_state.AVG_buff_I & 0x00FFFFFF); 303:src/l502_user_process.c **** 304:src/l502_user_process.c **** Proc_state.AVG_buff_I++; 305:src/l502_user_process.c **** data_I++; 306:src/l502_user_process.c **** } 307:src/l502_user_process.c **** //Proc_state.AVG_buff_I++; 308:src/l502_user_process.c **** //AVG_buff_A[Proc_state.AVG_buff_I] = 0xDD000000 | (Proc_state.AVG_buff_I & 0x00FFFFFF); 309:src/l502_user_process.c **** //data_I++; 310:src/l502_user_process.c **** //Proc_state.AVG_buff_I = 0; 311:src/l502_user_process.c **** }else{ 312:src/l502_user_process.c **** while((data_I < size )&& (Proc_state.AVG_buff_I < (AVG_BUFF_SIZE - 10))){ 313:src/l502_user_process.c **** //uint32_t word = data[data_I]; 314:src/l502_user_process.c **** AVG_buff_B[Proc_state.AVG_buff_I] = 0xDE000000 | (Proc_state.AVG_buff_I & 0x00FFFFFF); 315:src/l502_user_process.c **** Proc_state.AVG_buff_I++; 316:src/l502_user_process.c **** data_I++; 317:src/l502_user_process.c **** } 318:src/l502_user_process.c **** // Proc_state.AVG_buff_I++; 319:src/l502_user_process.c **** // AVG_buff_B[Proc_state.AVG_buff_I] = 0xDD000000 | (Proc_state.AVG_buff_I & 0x00FFFFFF); 320:src/l502_user_process.c **** 321:src/l502_user_process.c **** } 322:src/l502_user_process.c **** 323:src/l502_user_process.c **** BFIN GAS /tmp/ccG6eBVz.s page 7 324:src/l502_user_process.c **** } 325:src/l502_user_process.c **** */ 326:src/l502_user_process.c **** 327:src/l502_user_process.c **** /*/ 328:src/l502_user_process.c **** 329:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 330:src/l502_user_process.c **** uint32_t data_I = 0; 331:src/l502_user_process.c **** while((data_I < size )&& (TX_buff_I < (TX_BUFF_SIZE - 1))){ 332:src/l502_user_process.c **** // TX_buff[TX_buff_I++] = data[data_I++]; 333:src/l502_user_process.c **** uint32_t word = data[data_I++]; 334:src/l502_user_process.c **** TX_buff[TX_buff_I++] = (word & 0x00FFFFFF);// | 0xDE000000; 335:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = ((word & 0x00FFFFFF) | 0xDE000000); 336:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xADEFDEED; 337:src/l502_user_process.c **** } 338:src/l502_user_process.c **** } 339:src/l502_user_process.c **** //*/ 340:src/l502_user_process.c **** 341:src/l502_user_process.c **** //* 342:src/l502_user_process.c **** 343:src/l502_user_process.c **** 344:src/l502_user_process.c **** // if (Proc_state.mode == AVG){ 345:src/l502_user_process.c **** //TX_buff_I = 10; 346:src/l502_user_process.c **** /* 347:src/l502_user_process.c **** uint32_t data_I = 0; 348:src/l502_user_process.c **** uint8_t new_cycle_started = 0; 349:src/l502_user_process.c **** uint8_t cycle_cont = 1; 350:src/l502_user_process.c **** while ((data_I < size) && (Proc_state.AVG_buff_I < AVG_BUFF_SIZE) && cycle_cont ){ 351:src/l502_user_process.c **** uint32_t word = data[data_I]; 352:src/l502_user_process.c **** uint32_t val = word & 0x00FFFFFF; 353:src/l502_user_process.c **** uint8_t header = (uint8_t)(word >> 24); 354:src/l502_user_process.c **** */ 355:src/l502_user_process.c **** /* 356:src/l502_user_process.c **** if (header == 0x00){ 357:src/l502_user_process.c **** Proc_state.digital_word_prev = Proc_state.digital_word_curr; 358:src/l502_user_process.c **** Proc_state.digital_word_curr = word; 359:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 360:src/l502_user_process.c **** if (word & 0b1 << 17){ 361:src/l502_user_process.c **** DY_SYN_2_value = 1; 362:src/l502_user_process.c **** }else{ 363:src/l502_user_process.c **** DY_SYN_2_value = 0; 364:src/l502_user_process.c **** } 365:src/l502_user_process.c **** 366:src/l502_user_process.c **** if ((DY_SYN_2_value == 1)&& (DY_SYN_2_value_prev == 0)){ //new cycle started 367:src/l502_user_process.c **** new_cycle_started = 1; 368:src/l502_user_process.c **** } 369:src/l502_user_process.c **** } 370:src/l502_user_process.c **** //*/ 371:src/l502_user_process.c **** /* 372:src/l502_user_process.c **** if (header == 0xD0){ //it`s first channel 373:src/l502_user_process.c **** if (new_cycle_started){ 374:src/l502_user_process.c **** new_cycle_started = 0; 375:src/l502_user_process.c **** ++Proc_state.average_N; 376:src/l502_user_process.c **** if (Proc_state.average_N >= Proc_state.average_N_max){ 377:src/l502_user_process.c **** Proc_state.mode == AVG_DONE; 378:src/l502_user_process.c **** cycle_cont = 0; //break averaging cycle 379:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 380:src/l502_user_process.c **** } BFIN GAS /tmp/ccG6eBVz.s page 8 381:src/l502_user_process.c **** }else{ 382:src/l502_user_process.c **** if (Proc_state.AVG_buff_I < AVG_BUFF_SIZE){ 383:src/l502_user_process.c **** AVG_buff[Proc_state.AVG_buff_I] =(word & 0x00FFFFFF);// | 0xDE000000; 384:src/l502_user_process.c **** //uint32_t tmp = AVG_buff[Proc_state.AVG_buff_I]; 385:src/l502_user_process.c **** //tmp += val; 386:src/l502_user_process.c **** //tmp &= 0x0FFFFFFF; 387:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I] = tmp | (0x40000000 & 0xF0000000); //set header (first 4 bit 388:src/l502_user_process.c **** 389:src/l502_user_process.c **** Proc_state.AVG_buff_I++; 390:src/l502_user_process.c **** } 391:src/l502_user_process.c **** } 392:src/l502_user_process.c **** } 393:src/l502_user_process.c **** data_I++; 394:src/l502_user_process.c **** //*/ 395:src/l502_user_process.c **** 396:src/l502_user_process.c **** // AVG_buff[Proc_state.AVG_buff_I] = 0xDDDDDDDD; 397:src/l502_user_process.c **** 398:src/l502_user_process.c **** 399:src/l502_user_process.c **** 400:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = data[data_I]; 401:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xEEEEEEEE; 402:src/l502_user_process.c **** // data_I++; 403:src/l502_user_process.c **** // Proc_state.AVG_buff_I++; 404:src/l502_user_process.c **** 405:src/l502_user_process.c **** //} 406:src/l502_user_process.c **** 407:src/l502_user_process.c **** 408:src/l502_user_process.c **** // if (Proc_state.AVG_buff_I == AVG_BUFF_SIZE){ 409:src/l502_user_process.c **** /* if (Proc_state.AVG_buff_I >= 10){ 410:src/l502_user_process.c **** Proc_state.AVG_buff_I = 10; 411:src/l502_user_process.c **** Proc_state.mode == AVG_DONE; 412:src/l502_user_process.c **** } 413:src/l502_user_process.c **** */ 414:src/l502_user_process.c **** // } 415:src/l502_user_process.c **** /* 416:src/l502_user_process.c **** if(Proc_state.mode == AVG_DONE){ //TODO: 417:src/l502_user_process.c **** if (Proc_state.TX_buff_state == 0){ 418:src/l502_user_process.c **** Proc_state.TX_buff_state = 1; //0 --ready, 1 -- filling, 2 -- ready to send 419:src/l502_user_process.c **** // Proc_state.AVG_buff_state = 1; //0 -- ready, 1 -- blocked, 420:src/l502_user_process.c **** uint32_t max_I = TX_BUFF_SIZE; 421:src/l502_user_process.c **** if (max_I > AVG_BUFF_SIZE){ 422:src/l502_user_process.c **** max_I = AVG_BUFF_SIZE; 423:src/l502_user_process.c **** } 424:src/l502_user_process.c **** for (uint32_t I = 0; I < max_I; ++I){ 425:src/l502_user_process.c **** if (TX_buff_I < TX_BUFF_SIZE){ 426:src/l502_user_process.c **** ++TX_buff_I; 427:src/l502_user_process.c **** } 428:src/l502_user_process.c **** TX_buff[TX_buff_I] = AVG_buff[I]; 429:src/l502_user_process.c **** AVG_buff[I] = 0; 430:src/l502_user_process.c **** } 431:src/l502_user_process.c **** Proc_state.TX_buff_state = 2; //0 --ready, 1 -- filling, 2 -- ready to send 432:src/l502_user_process.c **** } 433:src/l502_user_process.c **** Proc_state.mode = Proc_state.mode_next; 434:src/l502_user_process.c **** } 435:src/l502_user_process.c **** //*/ 436:src/l502_user_process.c **** 437:src/l502_user_process.c **** BFIN GAS /tmp/ccG6eBVz.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 **** uint32_t radar_word_I = 0; 443:src/l502_user_process.c **** 444:src/l502_user_process.c **** //uint32_t TX_buff_I = 0; 445:src/l502_user_process.c **** uint32_t word_prev = 0; 446:src/l502_user_process.c **** uint32_t digital_word_prev = 0; 447:src/l502_user_process.c **** 448:src/l502_user_process.c **** 449:src/l502_user_process.c **** 450:src/l502_user_process.c **** 451:src/l502_user_process.c **** for (int data_I = 0; (data_I < size) && (TX_buff_I < TX_BUFF_SIZE); ++data_I){ 452:src/l502_user_process.c **** uint32_t word = data[data_I]; 453:src/l502_user_process.c **** uint32_t val = word & 0x00FFFFFF; 454:src/l502_user_process.c **** uint8_t header = (uint8_t)(word >> 24); 455:src/l502_user_process.c **** //11010000 456:src/l502_user_process.c **** if (((header & 0b10000000) == 0b10000000)){ //it`s ADC word 457:src/l502_user_process.c **** if (header == 0XD0){ //phy channel № 1 in common mode 458:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = ((0b01100000 & LFSM_val_ON) << 24) & val; 459:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0xD0ADEFEA; 460:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = word; 461:src/l502_user_process.c **** 462:src/l502_user_process.c **** }else if (header == 0xD1){//phy channel № 2 in common mode 463:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 464:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = ((0b01100000 & LFSM_val_OFF) << 24) & val; 465:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xD0ADEFEB; 466:src/l502_user_process.c **** }else{ 467:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = word; 468:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 469:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xD0AAAAAA; 470:src/l502_user_process.c **** } 471:src/l502_user_process.c **** 472:src/l502_user_process.c **** 473:src/l502_user_process.c **** } else if ( header == 0b00000000){ //it`s digital 474:src/l502_user_process.c **** //if ((word & 0x2200) == 0x2200){ 475:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 476:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xAD000000; 477:src/l502_user_process.c **** 478:src/l502_user_process.c **** 479:src/l502_user_process.c **** 480:src/l502_user_process.c **** //detect rise on DI_SYN2 -- start of chirp 481:src/l502_user_process.c **** if (word & 0b1 << 17){ 482:src/l502_user_process.c **** DY_SYN_2_value = 1; 483:src/l502_user_process.c **** }else{ 484:src/l502_user_process.c **** DY_SYN_2_value = 0; 485:src/l502_user_process.c **** } 486:src/l502_user_process.c **** 487:src/l502_user_process.c **** if ((DY_SYN_2_value == 1)&& (DY_SYN_2_value_prev == 0)){ 488:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0xAD000000; 489:src/l502_user_process.c **** } 490:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 491:src/l502_user_process.c **** 492:src/l502_user_process.c **** digital_word_prev = word; 493:src/l502_user_process.c **** } else{ 494:src/l502_user_process.c **** // TX_buff[TX_buff_I++] = word; BFIN GAS /tmp/ccG6eBVz.s page 10 495:src/l502_user_process.c **** } 496:src/l502_user_process.c **** word_prev = word; 497:src/l502_user_process.c **** 498:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 499:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 500:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 501:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 502:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 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 **** //stream_in_buf_free(size); 508:src/l502_user_process.c **** 509:src/l502_user_process.c **** /* 510:src/l502_user_process.c **** 511:src/l502_user_process.c **** //int i = 0; 512:src/l502_user_process.c **** //uint8_t 513:src/l502_user_process.c **** //while 514:src/l502_user_process.c **** 515:src/l502_user_process.c **** for (int i = 0; i < LFSM_DATALEN; ++i){ 516:src/l502_user_process.c **** uint32_t msg; 517:src/l502_user_process.c **** if (i % 2){ 518:src/l502_user_process.c **** msg = (LFSM_val_ON << 24) + data[i]; 519:src/l502_user_process.c **** }else{ 520:src/l502_user_process.c **** msg = (LFSM_val_OFF << 24) + data[i]; 521:src/l502_user_process.c **** } 522:src/l502_user_process.c **** LFSM_data[i] = msg; 523:src/l502_user_process.c **** } 524:src/l502_user_process.c **** 525:src/l502_user_process.c **** */ 526:src/l502_user_process.c **** if (hdma_send_req_rdy()) { 527:src/l502_user_process.c **** 528:src/l502_user_process.c **** //streams_cnt[0] 529:src/l502_user_process.c **** /* 530:src/l502_user_process.c **** if (Proc_state.TX_buff_state == 2){ 531:src/l502_user_process.c **** hdma_send_req_start(TX_buff, TX_BUFF_SIZE, 0); 532:src/l502_user_process.c **** }else if(0){ 533:src/l502_user_process.c **** 534:src/l502_user_process.c **** }else{ 535:src/l502_user_process.c **** hdma_send_req_start(TX_buff, TX_buff_I, 0); 536:src/l502_user_process.c **** TX_buff_I = 0; 537:src/l502_user_process.c **** //hdma_send_req_start(data, size, 0); 538:src/l502_user_process.c **** } 539:src/l502_user_process.c **** */ 540:src/l502_user_process.c **** 541:src/l502_user_process.c **** /* 542:src/l502_user_process.c **** if (Proc_state.mode == AVG_DONE){ 543:src/l502_user_process.c **** 544:src/l502_user_process.c **** uint32_t send_size = Proc_state.AVG_buff_I; 545:src/l502_user_process.c **** // uint32_t send_size = AVG_BUFF_SIZE; 546:src/l502_user_process.c **** hdma_send_req_start(AVG_buff, send_size, 0); 547:src/l502_user_process.c **** Proc_state.mode = AVG; 548:src/l502_user_process.c **** return send_size; 549:src/l502_user_process.c **** } 550:src/l502_user_process.c **** //*/ 551:src/l502_user_process.c **** /* BFIN GAS /tmp/ccG6eBVz.s page 11 552:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 553:src/l502_user_process.c **** send_size = Proc_state.AVG_buff_I; 554:src/l502_user_process.c **** //send_size = TX_buff_I; 555:src/l502_user_process.c **** //send_size = AVG_BUFF_SIZE - 500; 556:src/l502_user_process.c **** dbg_receive_value = send_size; 557:src/l502_user_process.c **** if (Proc_state.AVG_buff_active == A){ 558:src/l502_user_process.c **** hdma_send_req_start(AVG_buff_A, send_size, 0); 559:src/l502_user_process.c **** Proc_state.AVG_buff_active == B; 560:src/l502_user_process.c **** }else{ 561:src/l502_user_process.c **** hdma_send_req_start(AVG_buff_B, send_size, 0); 562:src/l502_user_process.c **** Proc_state.AVG_buff_active = A; 563:src/l502_user_process.c **** } 564:src/l502_user_process.c **** return send_size; 565:src/l502_user_process.c **** }else{ 566:src/l502_user_process.c **** hdma_send_req_start(TX_buff, TX_buff_I, 0); 567:src/l502_user_process.c **** TX_buff_I_shadow = TX_buff_I; 568:src/l502_user_process.c **** dbg_receive_value = TX_buff_I; 569:src/l502_user_process.c **** TX_buff_I = 0; 570:src/l502_user_process.c **** return TX_buff_I_shadow; 571:src/l502_user_process.c **** } 572:src/l502_user_process.c **** */ 573:src/l502_user_process.c **** 574:src/l502_user_process.c **** if (TX_buff_state == TODO_TX){ 575:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 576:src/l502_user_process.c **** TX_buff_shadow[i] = TX_buff[i]; 577:src/l502_user_process.c **** } 578:src/l502_user_process.c **** hdma_send_req_start(TX_buff_shadow, TX_buff_I, 0); 579:src/l502_user_process.c **** hdma_send_req_start(TX_marker, 10, 0); 580:src/l502_user_process.c **** 581:src/l502_user_process.c **** 582:src/l502_user_process.c **** // hdma_send_req_start(TX_buff, TX_BUFF_SIZE, 0); 583:src/l502_user_process.c **** //TX_buff_state = TRANSMITTING; 584:src/l502_user_process.c **** TX_buff_state = TX_DONE; 585:src/l502_user_process.c **** //}else{ 586:src/l502_user_process.c **** // hdma_send_req_start(data, size, 0); 587:src/l502_user_process.c **** } 588:src/l502_user_process.c **** 589:src/l502_user_process.c **** //hdma_send_req_start(data, size, 0); 590:src/l502_user_process.c **** //streams_cnt[0] = hdma_send_req_start(LFSM_data, LFSM_DATALEN, 0); 591:src/l502_user_process.c **** return size; 592:src/l502_user_process.c **** //return data_I; //number of really processed words 593:src/l502_user_process.c **** } 594:src/l502_user_process.c **** //return data_I; //number of really processed words 595:src/l502_user_process.c **** 596:src/l502_user_process.c **** return 0; 597:src/l502_user_process.c **** } 598:src/l502_user_process.c **** 599:src/l502_user_process.c **** 600:src/l502_user_process.c **** 601:src/l502_user_process.c **** /***************************************************************************//** 602:src/l502_user_process.c **** @brief Обработка принятого массива с данными ЦАП/DOUT 603:src/l502_user_process.c **** 604:src/l502_user_process.c **** Функция вызывается каждый раз, когда обнаружены нов 605:src/l502_user_process.c **** ПК по HDMA. 606:src/l502_user_process.c **** Функция должна обработать данные и вернуть количес 607:src/l502_user_process.c **** однако эти данные все еще считаются использованным 608:src/l502_user_process.c **** новыми пришедшими данными) до тех пор пока не будет BFIN GAS /tmp/ccG6eBVz.s page 12 609:src/l502_user_process.c **** stream_out_buf_free()). 610:src/l502_user_process.c **** 611:src/l502_user_process.c **** Если функция вернет значение меньше чем size, то функц 612:src/l502_user_process.c **** вызвана после еще раз с указателем на необработанны 613:src/l502_user_process.c **** 614:src/l502_user_process.c **** В текущей реализации просто запускается передача д 615:src/l502_user_process.c **** для вывода на ЦАП/цифровые выходы. 616:src/l502_user_process.c **** 617:src/l502_user_process.c **** @param[in] data Указатель на массив с принятыми данными 618:src/l502_user_process.c **** @param[in] size Количество принятых данных в 32-битных сло 619:src/l502_user_process.c **** @return Функция возвращает количество обработанн 620:src/l502_user_process.c **** На эти данные не будет вызываться повторн 621:src/l502_user_process.c **** но они считаются еще используемыми 622:src/l502_user_process.c **** ******************************************************************************/ 623:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 624:src/l502_user_process.c **** 625:src/l502_user_process.c **** /* если есть свободные дескрипторы на передачу по HDMA 626:src/l502_user_process.c **** передачу. Иначе возвращаем 0, чтобы на обработку эт 627:src/l502_user_process.c **** вызвали бы позже */ 628:src/l502_user_process.c **** ++streams_cnt[2]; 629:src/l502_user_process.c **** 630:src/l502_user_process.c **** if (sport_tx_req_rdy()) { 631:src/l502_user_process.c **** 632:src/l502_user_process.c **** /* за один раз можем передать в SPORT не более 633:src/l502_user_process.c **** SPORT_TX_REQ_SIZE_MAX слов */ 634:src/l502_user_process.c **** if (size > SPORT_TX_REQ_SIZE_MAX) 635:src/l502_user_process.c **** size = SPORT_TX_REQ_SIZE_MAX; 636:src/l502_user_process.c **** 637:src/l502_user_process.c **** sport_tx_start_req(data, size); 638:src/l502_user_process.c **** 639:src/l502_user_process.c **** return size; 640:src/l502_user_process.c **** } 641:src/l502_user_process.c **** return 0; 642:src/l502_user_process.c **** } 643:src/l502_user_process.c **** 644:src/l502_user_process.c **** 645:src/l502_user_process.c **** 646:src/l502_user_process.c **** 647:src/l502_user_process.c **** 648:src/l502_user_process.c **** 649:src/l502_user_process.c **** /****************************************************************************//** 650:src/l502_user_process.c **** @brief Обработка завершения передачи по HostDMA 651:src/l502_user_process.c **** 652:src/l502_user_process.c **** Функция вызывается из обработчика прерывания, когд 653:src/l502_user_process.c **** блока данных по HDMA в ПК, поставленного до этого на пе 654:src/l502_user_process.c **** помощью hdma_send_req_start(). 655:src/l502_user_process.c **** 656:src/l502_user_process.c **** @param[in] addr Адрес слова, сразу за последним переданны 657:src/l502_user_process.c **** @param[in] size Размер переданных данных в 32-битных слова 658:src/l502_user_process.c **** ****************************************************************************/ 659:src/l502_user_process.c **** void hdma_send_done(uint32_t* addr, uint32_t size) { 660:src/l502_user_process.c **** 661:src/l502_user_process.c **** TX_buff_state = TX_DONE; 662:src/l502_user_process.c **** ++streams_cnt[3]; 663:src/l502_user_process.c **** 664:src/l502_user_process.c **** stream_in_buf_free(size); 665:src/l502_user_process.c **** } BFIN GAS /tmp/ccG6eBVz.s page 13 666:src/l502_user_process.c **** 667:src/l502_user_process.c **** 668:src/l502_user_process.c **** 669:src/l502_user_process.c **** /***************************************************************************//** 670:src/l502_user_process.c **** @brief Обработка завершения передачи по SPORT 671:src/l502_user_process.c **** 672:src/l502_user_process.c **** Функция вызывается из обработчика прерывания при з 673:src/l502_user_process.c **** по SPORT'у на цифровые выходы/ЦАП, поставленного до это 674:src/l502_user_process.c **** помощью sport_tx_start_req(). 675:src/l502_user_process.c **** 676:src/l502_user_process.c **** 677:src/l502_user_process.c **** @param[in] addr Адрес слова, сразу за последним переданны 678:src/l502_user_process.c **** @param[in] size Размер переданных данных в 32-битных слова 679:src/l502_user_process.c **** void sport_tx_done(uint32_t* addr, uint32_t size) { 680:src/l502_user_process.c **** ++streams_cnt[1]; 681:src/l502_user_process.c **** 682:src/l502_user_process.c **** stream_out_buf_free(size); 683:src/l502_user_process.c **** } 684:src/l502_user_process.c **** 685:src/l502_user_process.c **** 686:src/l502_user_process.c **** 687:src/l502_user_process.c **** 688:src/l502_user_process.c **** 689:src/l502_user_process.c **** 690:src/l502_user_process.c **** 691:src/l502_user_process.c **** 692:src/l502_user_process.c **** 693:src/l502_user_process.c **** /****************************************************************************//** 694:src/l502_user_process.c **** @brief Обработка пользовательских команд. 695:src/l502_user_process.c **** 696:src/l502_user_process.c **** Функция вызывается при приеме команды от ПК с кодом 697:src/l502_user_process.c **** #L502_BF_CMD_CODE_USER. 698:src/l502_user_process.c **** 699:src/l502_user_process.c **** По завершению обработки необходимо обязательно выз 700:src/l502_user_process.c **** l502_cmd_done(), указав код завершения команды и 701:src/l502_user_process.c **** при необходимости передать данные с результатом 702:src/l502_user_process.c **** 703:src/l502_user_process.c **** @param[in] cmd Структура с описанием принятой команды 704:src/l502_user_process.c **** ******************************************************************************/ 705:src/l502_user_process.c **** 706:src/l502_user_process.c **** 707:src/l502_user_process.c **** void usr_cmd_process(t_l502_bf_cmd *cmd) { 16 .loc 1 707 0 17 .LVL0: 18 0000 0032 P0 = R0; 19 0002 F405 [--sp] = ( r7:6, p5:4 ); 20 21 .LCFI0: 22 0004 00E81A00 LINK 104; 23 .LCFI1: 708:src/l502_user_process.c **** switch (cmd->code){ 24 .loc 1 708 0 25 0008 21E1FF7F R1 = 32767 (X); 709:src/l502_user_process.c **** 710:src/l502_user_process.c **** 711:src/l502_user_process.c **** /* 712:src/l502_user_process.c **** Command template BFIN GAS /tmp/ccG6eBVz.s page 14 713:src/l502_user_process.c **** case 0x800?:{ 714:src/l502_user_process.c **** 715:src/l502_user_process.c **** l502_cmd_done(rcv_code, rcv_data, rcv_data_length); //void l502_cmd_done (int32_t result, uint32_ 716:src/l502_user_process.c **** break; 717:src/l502_user_process.c **** } 718:src/l502_user_process.c **** */ 719:src/l502_user_process.c **** // typedef struct { 720:src/l502_user_process.c **** // uint16_t code; /**< Код команды из #t_l502_bf_cmd_code */ 721:src/l502_user_process.c **** // uint16_t status; /**< Статус выполнения - в обработчике не и 722:src/l502_user_process.c **** // uint32_t param; /**< Параметр команды */ 723:src/l502_user_process.c **** // int32_t result; /**< Код результата выполнения команды */ 724:src/l502_user_process.c **** // uint32_t data_size; /**< Количество данных, переданных с кома 725:src/l502_user_process.c **** // uint32_t data[L502_BF_CMD_DATA_SIZE_MAX]; /**< Данные, передаваемые с к 726:src/l502_user_process.c **** // } t_l502_bf_cmd; 727:src/l502_user_process.c **** 728:src/l502_user_process.c **** 729:src/l502_user_process.c **** 730:src/l502_user_process.c **** 731:src/l502_user_process.c **** case 0x8001:{ //L502_BF_USR_CMD_CODE_ECHO 732:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 733:src/l502_user_process.c **** break; 734:src/l502_user_process.c **** } 735:src/l502_user_process.c **** 736:src/l502_user_process.c **** case 0x8002:{ //L502_BF_USR_CMD_CODE_DATA_ECHO 737:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 738:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 739:src/l502_user_process.c **** //rcv_data[I] = (cmd-> data)[I]; 740:src/l502_user_process.c **** rcv_data[I] = I; 741:src/l502_user_process.c **** } 742:src/l502_user_process.c **** l502_cmd_done(cmd-> param, rcv_data, cmd->data_size); 743:src/l502_user_process.c **** break; 744:src/l502_user_process.c **** } 745:src/l502_user_process.c **** case 0x8003:{ //configure ADC 746:src/l502_user_process.c **** uint32_t err_codes[15] = {0,}; 747:src/l502_user_process.c **** err_codes[0] = params_set_lch_cnt(1); 748: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 749: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, 750:src/l502_user_process.c **** err_codes[2] = params_set_adc_freq_div(1); 751:src/l502_user_process.c **** err_codes[3] = params_set_ref_freq(2000000); 752:src/l502_user_process.c **** err_codes[4] = params_set_adc_interframe_delay(0); 753:src/l502_user_process.c **** err_codes[5] = params_set_sync_mode (L502_SYNC_INTERNAL); 754:src/l502_user_process.c **** err_codes[6] = params_set_sync_start_mode (L502_SYNC_INTERNAL); 755:src/l502_user_process.c **** //err_codes[7] = params_set_din_freq_div; 756:src/l502_user_process.c **** //err_codes[8] = params_set_dac_freq_div; 757:src/l502_user_process.c **** 758:src/l502_user_process.c **** err_codes[9] = sport_in_set_step_size(1024); 759:src/l502_user_process.c **** 760:src/l502_user_process.c **** //L502_BF_PARAM_ADC_COEF 761:src/l502_user_process.c **** //err_codes[10] = fpga_reg_write(f_regaddr_k[range], ??); 762:src/l502_user_process.c **** //err_codes[11] = fpga_reg_write(f_regaddr_offs[range], ??); 763:src/l502_user_process.c **** err_codes[12] = configure(); 764:src/l502_user_process.c **** 765:src/l502_user_process.c **** 766:src/l502_user_process.c **** 767:src/l502_user_process.c **** 768:src/l502_user_process.c **** uint32_t err_codes_sum = 0; 769:src/l502_user_process.c **** for (int i = 0; i < 15; ++i){ BFIN GAS /tmp/ccG6eBVz.s page 15 770:src/l502_user_process.c **** err_codes_sum += err_codes[i]; 771:src/l502_user_process.c **** } 772:src/l502_user_process.c **** l502_cmd_done(err_codes_sum, err_codes, 15); 773:src/l502_user_process.c **** break; 774:src/l502_user_process.c **** } 775:src/l502_user_process.c **** case 0x8004:{ //start streams 776:src/l502_user_process.c **** uint32_t err_codes[5] = {0,}; 777:src/l502_user_process.c **** l502_stream_init(); 778:src/l502_user_process.c **** err_codes[0] = stream_enable(L502_STREAM_ADC | L502_STREAM_DIN); //bitmask 779:src/l502_user_process.c **** err_codes[1] = stream_out_preload(); 780:src/l502_user_process.c **** err_codes[2] = streams_start(); 781:src/l502_user_process.c **** //hdma_send_start(); 782:src/l502_user_process.c **** l502_cmd_done(0, err_codes, 5); 783:src/l502_user_process.c **** break; 784:src/l502_user_process.c **** } 785:src/l502_user_process.c **** case 0x8005:{ //get some data from adc buff. Or simple flag, raised inside usr_in_proc_data() 786:src/l502_user_process.c **** 787:src/l502_user_process.c **** uint32_t streams_sum = streams_cnt[0] + streams_cnt[1] + streams_cnt[2] + streams_cnt[3]; 788:src/l502_user_process.c **** l502_cmd_done(streams_sum, streams_cnt, 4); 789:src/l502_user_process.c **** break; 790:src/l502_user_process.c **** } 791:src/l502_user_process.c **** 792:src/l502_user_process.c **** case 0x8006:{ //get data from SPORT_RX copied arr 793:src/l502_user_process.c **** uint32_t sport_rx_nonzero_sum = 0; 794:src/l502_user_process.c **** 795:src/l502_user_process.c **** for (int i = 0; i < dbg_sport_rx_copy_size; ++i){ 796:src/l502_user_process.c **** if (dbg_sport_rx_copy[i]){ 797:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 798:src/l502_user_process.c **** } 799:src/l502_user_process.c **** } 800:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 801:src/l502_user_process.c **** break; 802:src/l502_user_process.c **** } 803:src/l502_user_process.c **** 804:src/l502_user_process.c **** 805:src/l502_user_process.c **** 806:src/l502_user_process.c **** case 0x8007:{ //start data processing: No dataprocessing. Just copy data to output buffer 807:src/l502_user_process.c **** TX_buff_I = 0; 808:src/l502_user_process.c **** 809:src/l502_user_process.c **** Proc_state.mode = TRANSPARENT; 810:src/l502_user_process.c **** Proc_state.mode_next = TRANSPARENT; 811:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_UNKNOWN; 812:src/l502_user_process.c **** Proc_state.average_N_max = 10; 813:src/l502_user_process.c **** // Proc_state.average_N_max = cmd->param; 814:src/l502_user_process.c **** Proc_state.average_N = 1; 815:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 816:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 817:src/l502_user_process.c **** Proc_state.AVG_state = 0; 818:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 819:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 820:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; 821:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 822:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 823:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 824:src/l502_user_process.c **** Proc_state.AVG_buff_active = A; 825:src/l502_user_process.c **** TX_buff_state = TX_DONE; 826:src/l502_user_process.c **** BFIN GAS /tmp/ccG6eBVz.s page 16 827:src/l502_user_process.c **** 828:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 829:src/l502_user_process.c **** TX_buff[i] = 0; 830:src/l502_user_process.c **** } 831:src/l502_user_process.c **** 832:src/l502_user_process.c **** // l502_cmd_done(cmd-> param, NULL, 0); 833:src/l502_user_process.c **** l502_cmd_done(TX_buff_I, NULL, 0); 834:src/l502_user_process.c **** break; 835:src/l502_user_process.c **** } 836:src/l502_user_process.c **** case 0x8008:{ //AVG mode 837:src/l502_user_process.c **** TX_buff_I = 0; 838:src/l502_user_process.c **** 839:src/l502_user_process.c **** Proc_state.mode = AVG; 840:src/l502_user_process.c **** Proc_state.mode_next = AVG; 841:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_UNKNOWN; 842:src/l502_user_process.c **** Proc_state.average_N_max = 3; 843:src/l502_user_process.c **** // Proc_state.average_N_max = cmd->param; 844:src/l502_user_process.c **** Proc_state.average_N = 0; 845:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 846:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 847:src/l502_user_process.c **** Proc_state.AVG_state = 0; 848:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 849:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 850:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; 851:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 852:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 853:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 854:src/l502_user_process.c **** Proc_state.AVG_buff_active = A; 855:src/l502_user_process.c **** TX_buff_state = TX_DONE; 856:src/l502_user_process.c **** 857:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 858:src/l502_user_process.c **** TX_buff[i] = 0; 859:src/l502_user_process.c **** } 860:src/l502_user_process.c **** 861:src/l502_user_process.c **** // l502_cmd_done(cmd-> param, NULL, 0); 862:src/l502_user_process.c **** l502_cmd_done(TX_buff_I, NULL, 0); 863:src/l502_user_process.c **** 864:src/l502_user_process.c **** break; 865:src/l502_user_process.c **** } 866:src/l502_user_process.c **** case 0x8009:{ //request TX_buff_I_shadow value (last size of TX_buff transferred to pc ) 867:src/l502_user_process.c **** l502_cmd_done(TX_buff_I_shadow, NULL, 0); 868:src/l502_user_process.c **** break; 869:src/l502_user_process.c **** } 870:src/l502_user_process.c **** case 0x800A:{ //return uint32_t value stored in dbg_receive_value 871:src/l502_user_process.c **** l502_cmd_done(dbg_receive_value, NULL, 0); 872:src/l502_user_process.c **** break; 873:src/l502_user_process.c **** } 874:src/l502_user_process.c **** 875:src/l502_user_process.c **** 876:src/l502_user_process.c **** 877:src/l502_user_process.c **** 878:src/l502_user_process.c **** 879:src/l502_user_process.c **** case 0x8010:{ //flush HDMA TX buffer 880:src/l502_user_process.c **** int number_of_free_tx_descriptors = hdma_send_req_rdy(); 881:src/l502_user_process.c **** hdma_send_stop(); 882:src/l502_user_process.c **** hdma_send_start(); 883:src/l502_user_process.c **** l502_cmd_done(number_of_free_tx_descriptors, NULL, 0); BFIN GAS /tmp/ccG6eBVz.s page 17 884:src/l502_user_process.c **** break; 885:src/l502_user_process.c **** } 886:src/l502_user_process.c **** case 0x8011:{ //L502_BF_USR_CMD_CODE_ECHO 887:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 888:src/l502_user_process.c **** break; 889:src/l502_user_process.c **** } 890:src/l502_user_process.c **** case 0x8012:{ //L502_BF_USR_CMD_CODE_ECHO 891:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 892:src/l502_user_process.c **** break; 893:src/l502_user_process.c **** } 894:src/l502_user_process.c **** case 0x8013:{ //L502_BF_USR_CMD_CODE_ECHO 895:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 896:src/l502_user_process.c **** break; 897:src/l502_user_process.c **** } 898:src/l502_user_process.c **** case 0x8014:{ //L502_BF_USR_CMD_CODE_ECHO 899:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 900:src/l502_user_process.c **** break; 901:src/l502_user_process.c **** } 902:src/l502_user_process.c **** case 0x8015:{ //L502_BF_USR_CMD_CODE_ECHO 903:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 904:src/l502_user_process.c **** break; 905:src/l502_user_process.c **** } 906:src/l502_user_process.c **** 907:src/l502_user_process.c **** 908:src/l502_user_process.c **** 909:src/l502_user_process.c **** /* 910:src/l502_user_process.c **** case 0x8002:{ 911:src/l502_user_process.c **** cmd-> result = cmd->param * 2; 912:src/l502_user_process.c **** uint32_t data[] = {0,1,2,3,4,5,6,5,4,3,2,1,0}; 913:src/l502_user_process.c **** l502_cmd_done(cmd-> param*3, data, 13); 914:src/l502_user_process.c **** break;} 915:src/l502_user_process.c **** case 0x8001:{ 916:src/l502_user_process.c **** //cmd-> result = cmd->param * 2; 917:src/l502_user_process.c **** uint32_t data[] = {6,5,4,3,2,1,0,1,2,3,4,5,6}; 918:src/l502_user_process.c **** l502_cmd_done(cmd-> param*75, data, 13); 919:src/l502_user_process.c **** break;} 920:src/l502_user_process.c **** */ 921:src/l502_user_process.c **** 922:src/l502_user_process.c **** default: { 923:src/l502_user_process.c **** l502_cmd_done(1, NULL, 0); 924:src/l502_user_process.c **** } 925:src/l502_user_process.c **** } 926:src/l502_user_process.c **** //l502_cmd_done(1, 1, 1); 927:src/l502_user_process.c **** //l502_cmd_done(L502_BF_ERR_UNSUP_CMD, NULL, 0); 928:src/l502_user_process.c **** } 26 .loc 1 928 0 27 000c 7630 R6 = SP; 708:src/l502_user_process.c **** switch (cmd->code){ 28 .loc 1 708 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 A160 R1 = 20 (X); 34 0016 080A cc =R0<=R1 (iu); 35 0018 0B1C if cc jump .L51 (bp); 36 .L2: BFIN GAS /tmp/ccG6eBVz.s page 18 923:src/l502_user_process.c **** l502_cmd_done(1, NULL, 0); 37 .loc 1 923 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 .L45: 44 .loc 1 928 0 45 0024 3632 SP = R6; 46 0026 01E80000 UNLINK; 47 002a B405 ( r7:6, p5:4 ) = [sp++]; 48 49 .LCFI2: 50 .LVL3: 51 002c 1000 rts; 52 .LVL4: 53 .L51: 708:src/l502_user_process.c **** switch (cmd->code){ 54 .loc 1 708 0 55 002e 0832 P1 = R0; 56 0030 4AE10000 P2.H = .L19; 57 0034 0AE10000 P2.L = .L19; 58 0038 8A5E P2 = P2 + (P1 << 2); 59 003a 5291 P2 = [P2]; 60 003c 5200 jump (P2); 61 .section .rodata 62 .align 4 63 .align 4 64 .L19: 65 0000 3E000000 .dd .L18; 66 0004 6C000000 .dd .L4; 67 0008 98000000 .dd .L5; 68 000c 4A010000 .dd .L6; 69 0010 7C010000 .dd .L7; 70 0014 9C010000 .dd .L8; 71 0018 10020000 .dd .L9; 72 001c 92020000 .dd .L10; 73 0020 02030000 .dd .L11; 74 0024 16030000 .dd .L12; 75 0028 1A000000 .dd .L2; 76 002c 1A000000 .dd .L2; 77 0030 1A000000 .dd .L2; 78 0034 1A000000 .dd .L2; 79 0038 1A000000 .dd .L2; 80 003c 52000000 .dd .L13; 81 0040 3E000000 .dd .L18; 82 0044 3E000000 .dd .L18; 83 0048 3E000000 .dd .L18; 84 004c 3E000000 .dd .L18; 85 0050 3E000000 .dd .L18; 86 .text; 87 .L18: 903:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 88 .loc 1 903 0 89 003e 40A0 R0 = [P0+4]; 90 0040 0160 R1 = 0 (X); BFIN GAS /tmp/ccG6eBVz.s page 19 91 0042 0260 R2 = 0 (X); 92 0044 FFE3DEFF call _l502_cmd_done; 93 .LVL5: 94 .loc 1 928 0 95 0048 3632 SP = R6; 96 004a 01E80000 UNLINK; 97 004e B405 ( r7:6, p5:4 ) = [sp++]; 98 99 .LCFI3: 100 0050 1000 rts; 101 .LVL6: 102 .L13: 103 .LBB2: 880:src/l502_user_process.c **** int number_of_free_tx_descriptors = hdma_send_req_rdy(); 104 .loc 1 880 0 105 0052 FFE3D7FF call _hdma_send_req_rdy; 106 .LVL7: 107 0056 3830 R7 = R0; 108 .LVL8: 881:src/l502_user_process.c **** hdma_send_stop(); 109 .loc 1 881 0 110 0058 FFE3D4FF call _hdma_send_stop; 882:src/l502_user_process.c **** hdma_send_start(); 111 .loc 1 882 0 112 005c FFE3D2FF call _hdma_send_start; 883:src/l502_user_process.c **** l502_cmd_done(number_of_free_tx_descriptors, NULL, 0); 113 .loc 1 883 0 114 0060 0730 R0 = R7; 115 0062 0160 R1 = 0 (X); 116 0064 0260 R2 = 0 (X); 117 0066 FFE3CDFF call _l502_cmd_done; 118 006a DD2F jump.s .L45; 119 .LVL9: 120 .L4: 121 .LBE2: 122 .LBB3: 737:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 123 .loc 1 737 0 124 006c C1AC P1 = [P0+12]; 125 .LBE3: 733:src/l502_user_process.c **** break; 126 .loc 1 733 0 127 006e 7E30 R7 = SP; 128 .LBB6: 737:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 129 .loc 1 737 0 130 0070 4A44 P2 = P1 << 2; 131 0072 226C P2 += 4; 132 0074 1644 SP -= P2; 133 0076 4E30 R1 = SP; 134 .LBB4: 738:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 135 .loc 1 738 0 136 0078 5130 R2 = P1; 137 .LBE4: 737:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 138 .loc 1 737 0 BFIN GAS /tmp/ccG6eBVz.s page 20 139 007a C164 R1 += 24; 140 .LBB5: 738:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 141 .loc 1 738 0 142 007c 020C cc =R2==0; 143 007e 0818 if cc jump .L21; 144 0080 1132 P2 = R1; 145 0082 0060 R0 = 0 (X); 146 .LVL10: 147 .L22: 740:src/l502_user_process.c **** rcv_data[I] = I; 148 .loc 1 740 0 149 0084 1092 [P2++] = R0; 738:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 150 .loc 1 738 0 151 0086 0864 R0 += 1; 152 0088 C2A0 R2 = [P0+12]; 153 008a 020A cc =R2<=R0 (iu); 154 008c FC17 if !cc jump .L22 (bp); 155 .L21: 156 .LBE5: 742:src/l502_user_process.c **** l502_cmd_done(cmd-> param, rcv_data, cmd->data_size); 157 .loc 1 742 0 158 008e 40A0 R0 = [P0+4]; 159 .LVL11: 160 0090 FFE3B8FF call _l502_cmd_done; 161 .LVL12: 162 0094 3732 SP = R7; 163 0096 C72F jump.s .L45; 164 .LVL13: 165 .L5: 166 .LBE6: 167 .LBB7: 746:src/l502_user_process.c **** uint32_t err_codes[15] = {0,}; 168 .loc 1 746 0 169 0098 2AE1B0FF P2 = -80 (X); 170 009c 575B P5 = FP + P2; 171 009e 0160 R1 = 0 (X); 172 00a0 E261 R2 = 60 (X); 173 00a2 4530 R0 = P5; 174 00a4 FFE3AEFF call _memset; 175 .LVL14: 747:src/l502_user_process.c **** err_codes[0] = params_set_lch_cnt(1); 176 .loc 1 747 0 177 00a8 0860 R0 = 1 (X); 178 00aa FFE3ABFF call _params_set_lch_cnt; 179 00ae C0BA [FP+-80] = R0; 749: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, 180 .loc 1 749 0 181 00b0 0860 R0 = 1 (X); 182 00b2 F0B0 [SP+12] = R0; 183 00b4 30B1 [SP+16] = R0; 184 00b6 0060 R0 = 0 (X); 185 00b8 00CC09C2 R1 = R1 -|- R1 || 185 70B10000 186 [SP+20] = R0 || 187 nop; BFIN GAS /tmp/ccG6eBVz.s page 21 188 00c0 0260 R2 = 0 (X); 189 00c2 FFE39FFF call _params_set_lch; 190 00c6 D0BA [FP+-76] = R0; 750:src/l502_user_process.c **** err_codes[2] = params_set_adc_freq_div(1); 191 .loc 1 750 0 192 00c8 0860 R0 = 1 (X); 193 00ca FFE39BFF call _params_set_adc_freq_div; 194 00ce E0BA [FP+-72] = R0; 751:src/l502_user_process.c **** err_codes[3] = params_set_ref_freq(2000000); 195 .loc 1 751 0 196 00d0 20E1093D R0 = 15625 (X); 197 00d4 384F R0 <<= 7; 198 00d6 FFE395FF call _params_set_ref_freq; 199 00da F0BA [FP+-68] = R0; 752:src/l502_user_process.c **** err_codes[4] = params_set_adc_interframe_delay(0); 200 .loc 1 752 0 201 00dc 0060 R0 = 0 (X); 202 00de FFE391FF call _params_set_adc_interframe_delay; 203 00e2 00BB [FP+-64] = R0; 753:src/l502_user_process.c **** err_codes[5] = params_set_sync_mode (L502_SYNC_INTERNAL); 204 .loc 1 753 0 205 00e4 0060 R0 = 0 (X); 206 00e6 FFE38DFF call _params_set_sync_mode; 207 00ea 10BB [FP+-60] = R0; 754:src/l502_user_process.c **** err_codes[6] = params_set_sync_start_mode (L502_SYNC_INTERNAL); 208 .loc 1 754 0 209 00ec 0060 R0 = 0 (X); 210 00ee FFE389FF call _params_set_sync_start_mode; 211 00f2 20BB [FP+-56] = R0; 758:src/l502_user_process.c **** err_codes[9] = sport_in_set_step_size(1024); 212 .loc 1 758 0 213 00f4 20E10004 R0 = 1024 (X); 214 00f8 FFE384FF call _sport_in_set_step_size; 215 00fc 50BB [FP+-44] = R0; 763:src/l502_user_process.c **** err_codes[12] = configure(); 216 .loc 1 763 0 217 00fe FFE381FF call _configure; 218 .LBB8: 770:src/l502_user_process.c **** err_codes_sum += err_codes[i]; 219 .loc 1 770 0 220 0102 D2B8 R2 = [FP+-76]; 221 0104 C1B8 R1 = [FP+-80]; 222 0106 04CC0A02 R1 = R1 + R2 (NS) || 222 80BB0000 223 [FP+-32] = R0 || 224 nop; 225 .LVL15: 226 010e E2B8 R2 = [FP+-72]; 227 0110 5150 R1 = R1 + R2; 228 .LVL16: 229 0112 F2B8 R2 = [FP+-68]; 230 0114 5150 R1 = R1 + R2; 231 .LVL17: 232 0116 02B9 R2 = [FP+-64]; 233 0118 5150 R1 = R1 + R2; 234 .LVL18: 235 011a 12B9 R2 = [FP+-60]; BFIN GAS /tmp/ccG6eBVz.s page 22 236 011c 5150 R1 = R1 + R2; 237 .LVL19: 238 011e 22B9 R2 = [FP+-56]; 239 0120 5150 R1 = R1 + R2; 240 .LVL20: 241 0122 32B9 R2 = [FP+-52]; 242 0124 5150 R1 = R1 + R2; 243 .LVL21: 244 0126 42B9 R2 = [FP+-48]; 245 0128 5150 R1 = R1 + R2; 246 .LVL22: 247 012a 52B9 R2 = [FP+-44]; 248 012c 5150 R1 = R1 + R2; 249 .LVL23: 250 012e 62B9 R2 = [FP+-40]; 251 0130 5150 R1 = R1 + R2; 252 .LVL24: 253 0132 72B9 R2 = [FP+-36]; 254 0134 5150 R1 = R1 + R2; 255 .LVL25: 256 0136 0850 R0 = R0 + R1; 257 .LVL26: 258 0138 91B9 R1 = [FP+-28]; 259 013a 0850 R0 = R0 + R1; 260 .LVL27: 261 .LBE8: 772:src/l502_user_process.c **** l502_cmd_done(err_codes_sum, err_codes, 15); 262 .loc 1 772 0 263 013c A1B9 R1 = [FP+-24]; 264 013e 0850 R0 = R0 + R1; 265 .LVL28: 266 0140 4D30 R1 = P5; 267 0142 7A60 R2 = 15 (X); 268 0144 FFE35EFF call _l502_cmd_done; 269 0148 6E2F jump.s .L45; 270 .LVL29: 271 .L6: 272 .LBE7: 273 .LBB9: 776:src/l502_user_process.c **** uint32_t err_codes[5] = {0,}; 274 .loc 1 776 0 275 014a 0060 R0 = 0 (X); 276 014c B0BB [FP+-20] = R0; 277 014e C0BB [FP+-16] = R0; 278 0150 D0BB [FP+-12] = R0; 279 0152 E0BB [FP+-8] = R0; 280 0154 F0BB [FP+-4] = R0; 777:src/l502_user_process.c **** l502_stream_init(); 281 .loc 1 777 0 282 0156 FFE355FF call _l502_stream_init; 283 .LVL30: 778:src/l502_user_process.c **** err_codes[0] = stream_enable(L502_STREAM_ADC | L502_STREAM_DIN); //bitmask 284 .loc 1 778 0 285 015a 1860 R0 = 3 (X); 286 015c FFE352FF call _stream_enable; 287 0160 B0BB [FP+-20] = R0; 779:src/l502_user_process.c **** err_codes[1] = stream_out_preload(); BFIN GAS /tmp/ccG6eBVz.s page 23 288 .loc 1 779 0 289 0162 FFE34FFF call _stream_out_preload; 290 0166 C0BB [FP+-16] = R0; 780:src/l502_user_process.c **** err_codes[2] = streams_start(); 291 .loc 1 780 0 292 0168 FFE34CFF call _streams_start; 293 016c D0BB [FP+-12] = R0; 782:src/l502_user_process.c **** l502_cmd_done(0, err_codes, 5); 294 .loc 1 782 0 295 016e 4F30 R1 = FP; 296 0170 0060 R0 = 0 (X); 297 0172 6167 R1 += -20; 298 0174 2A60 R2 = 5 (X); 299 0176 FFE345FF call _l502_cmd_done; 300 017a 552F jump.s .L45; 301 .LVL31: 302 .L7: 303 .LBE9: 304 .LBB10: 788:src/l502_user_process.c **** l502_cmd_done(streams_sum, streams_cnt, 4); 305 .loc 1 788 0 306 017c 4AE10000 P2.H = _streams_cnt; 307 0180 0AE10000 P2.L = _streams_cnt; 308 0184 1191 R1 = [P2]; 309 0186 50A0 R0 = [P2+4]; 310 0188 0850 R0 = R0 + R1; 311 018a 91A0 R1 = [P2+8]; 312 018c 0850 R0 = R0 + R1; 313 018e D1A0 R1 = [P2+12]; 314 0190 0850 R0 = R0 + R1; 315 0192 4A30 R1 = P2; 316 0194 2260 R2 = 4 (X); 317 0196 FFE335FF call _l502_cmd_done; 318 .LVL32: 319 019a 452F jump.s .L45; 320 .LVL33: 321 .L8: 789:src/l502_user_process.c **** break; 322 .loc 1 789 0 323 019c 4AE10000 P2.H = _dbg_sport_rx_copy; 324 01a0 0AE12800 P2.L = _dbg_sport_rx_copy; 325 01a4 1091 R0 = [P2]; 326 01a6 0802 CC = R0; 327 01a8 0002 R0 = CC; 328 .LBE10: 329 .LBB11: 330 .LBB12: 797:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 331 .loc 1 797 0 332 01aa 51A0 R1 = [P2+4]; 333 01ac 1030 R2 = R0; 334 .LVL34: 335 01ae 010C cc =R1==0; 336 01b0 0A64 R2 += 1; 337 01b2 0206 if !cc R0 = R2; 338 .LVL35: 339 01b4 91A0 R1 = [P2+8]; BFIN GAS /tmp/ccG6eBVz.s page 24 340 01b6 1030 R2 = R0; 341 01b8 010C cc =R1==0; 342 01ba 0A64 R2 += 1; 343 .LVL36: 344 01bc 0206 if !cc R0 = R2; 345 .LVL37: 346 01be D1A0 R1 = [P2+12]; 347 01c0 1030 R2 = R0; 348 01c2 010C cc =R1==0; 349 01c4 0A64 R2 += 1; 350 .LVL38: 351 01c6 0206 if !cc R0 = R2; 352 .LVL39: 353 01c8 11A1 R1 = [P2+16]; 354 01ca 1030 R2 = R0; 355 01cc 010C cc =R1==0; 356 01ce 0A64 R2 += 1; 357 .LVL40: 358 01d0 0206 if !cc R0 = R2; 359 .LVL41: 360 01d2 51A1 R1 = [P2+20]; 361 01d4 1030 R2 = R0; 362 01d6 010C cc =R1==0; 363 01d8 0A64 R2 += 1; 364 .LVL42: 365 01da 0206 if !cc R0 = R2; 366 .LVL43: 367 01dc 91A1 R1 = [P2+24]; 368 01de 1030 R2 = R0; 369 01e0 010C cc =R1==0; 370 01e2 0A64 R2 += 1; 371 .LVL44: 372 01e4 0206 if !cc R0 = R2; 373 .LVL45: 374 01e6 D1A1 R1 = [P2+28]; 375 01e8 1030 R2 = R0; 376 01ea 010C cc =R1==0; 377 01ec 0A64 R2 += 1; 378 .LVL46: 379 01ee 0206 if !cc R0 = R2; 380 .LVL47: 381 01f0 11A2 R1 = [P2+32]; 382 01f2 1030 R2 = R0; 383 01f4 010C cc =R1==0; 384 01f6 0A64 R2 += 1; 385 .LVL48: 386 01f8 0206 if !cc R0 = R2; 387 .LVL49: 388 .LBE12: 800:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 389 .loc 1 800 0 390 01fa 51A2 R1 = [P2+36]; 391 .LBB13: 797:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 392 .loc 1 797 0 393 01fc 1030 R2 = R0; 394 .LBE13: BFIN GAS /tmp/ccG6eBVz.s page 25 800:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 395 .loc 1 800 0 396 01fe 010C cc =R1==0; 397 .LBB14: 797:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 398 .loc 1 797 0 399 0200 0A64 R2 += 1; 400 .LVL50: 401 .LBE14: 800:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 402 .loc 1 800 0 403 0202 0206 if !cc R0 = R2; 404 .LVL51: 405 0204 4A30 R1 = P2; 406 0206 22E10004 R2 = 1024 (X); 407 020a FFE3FBFE call _l502_cmd_done; 408 .LVL52: 409 020e 0B2F jump.s .L45; 410 .LVL53: 411 .L9: 412 .LBE11: 807:src/l502_user_process.c **** TX_buff_I = 0; 413 .loc 1 807 0 414 0210 4CE10000 P4.H = _TX_buff_I; 415 0214 0260 R2 = 0 (X); 416 0216 0CE11400 P4.L = _TX_buff_I; 809:src/l502_user_process.c **** Proc_state.mode = TRANSPARENT; 417 .loc 1 809 0 418 021a 4AE10000 P2.H = _Proc_state; 807:src/l502_user_process.c **** TX_buff_I = 0; 419 .loc 1 807 0 420 021e 2293 [P4] = R2; 809:src/l502_user_process.c **** Proc_state.mode = TRANSPARENT; 421 .loc 1 809 0 422 0220 0AE12C00 P2.L = _Proc_state; 423 0224 0860 R0 = 1 (X); 424 0226 109B B [P2] = R0; 810:src/l502_user_process.c **** Proc_state.mode_next = TRANSPARENT; 425 .loc 1 810 0 426 0228 90E60100 B [P2+1] = R0; 811:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_UNKNOWN; 427 .loc 1 811 0 428 022c 0160 R1 = 0 (X); 429 022e 91E60300 B [P2+3] = R1; 812:src/l502_user_process.c **** Proc_state.average_N_max = 10; 430 .loc 1 812 0 431 0232 5060 R0 = 10 (X); 432 0234 90B4 W [P2+4] = R0; 814:src/l502_user_process.c **** Proc_state.average_N = 1; 433 .loc 1 814 0 434 0236 0860 R0 = 1 (X); 435 0238 D0B4 W [P2+6] = R0; 815:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 436 .loc 1 815 0 437 023a 92B0 [P2+8] = R2; 816:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 438 .loc 1 816 0 BFIN GAS /tmp/ccG6eBVz.s page 26 439 023c 91E60C00 B [P2+12] = R1; 817:src/l502_user_process.c **** Proc_state.AVG_state = 0; 440 .loc 1 817 0 441 0240 91E61400 B [P2+20] = R1; 818:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 442 .loc 1 818 0 443 0244 12B1 [P2+16] = R2; 819:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 444 .loc 1 819 0 445 0246 91E61500 B [P2+21] = R1; 820:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; 446 .loc 1 820 0 447 024a 92B1 [P2+24] = R2; 821:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 448 .loc 1 821 0 449 024c 91E61C00 B [P2+28] = R1; 822:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 450 .loc 1 822 0 451 0250 12B2 [P2+32] = R2; 823:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 452 .loc 1 823 0 453 0252 52B2 [P2+36] = R2; 824:src/l502_user_process.c **** Proc_state.AVG_buff_active = A; 454 .loc 1 824 0 455 0254 91E61600 B [P2+22] = R1; 825:src/l502_user_process.c **** TX_buff_state = TX_DONE; 456 .loc 1 825 0 457 0258 4AE10000 P2.H = _TX_buff_state; 458 025c 1860 R0 = 3 (X); 459 025e 0AE13000 P2.L = _TX_buff_state; 460 0262 109B B [P2] = R0; 461 0264 4DE10000 P5.H = _TX_buff; 462 0268 0068 P0 = 0 (X); 463 .LVL54: 464 026a 0DE10000 P5.L = _TX_buff; 465 .LBB15: 829:src/l502_user_process.c **** TX_buff[i] = 0; 466 .loc 1 829 0 467 026e 0060 R0 = 0 (X); 468 0270 29E11027 P1 = 10000 (X); 469 0274 B2E00410 LSETUP (.L43, .L53) LC1 = P1; 470 .L43: 471 0278 855E P2 = P5 + (P0 << 2); 472 027a 1093 [P2] = R0; 473 .L53: 828:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 474 .loc 1 828 0 475 027c 086C P0 += 1; 476 .LVL55: 477 .L49: 478 .LBE15: 862:src/l502_user_process.c **** l502_cmd_done(TX_buff_I, NULL, 0); 479 .loc 1 862 0 480 027e 2091 R0 = [P4]; 481 0280 0160 R1 = 0 (X); 482 0282 0260 R2 = 0 (X); 483 0284 FFE3BEFE call _l502_cmd_done; BFIN GAS /tmp/ccG6eBVz.s page 27 484 .LVL56: 485 .loc 1 928 0 486 0288 3632 SP = R6; 487 028a 01E80000 UNLINK; 488 028e B405 ( r7:6, p5:4 ) = [sp++]; 489 490 .LCFI4: 491 0290 1000 rts; 492 .LVL57: 493 .L10: 837:src/l502_user_process.c **** TX_buff_I = 0; 494 .loc 1 837 0 495 0292 4CE10000 P4.H = _TX_buff_I; 496 0296 0260 R2 = 0 (X); 497 0298 0CE11400 P4.L = _TX_buff_I; 839:src/l502_user_process.c **** Proc_state.mode = AVG; 498 .loc 1 839 0 499 029c 4AE10000 P2.H = _Proc_state; 837:src/l502_user_process.c **** TX_buff_I = 0; 500 .loc 1 837 0 501 02a0 2293 [P4] = R2; 839:src/l502_user_process.c **** Proc_state.mode = AVG; 502 .loc 1 839 0 503 02a2 0AE12C00 P2.L = _Proc_state; 504 02a6 1060 R0 = 2 (X); 505 02a8 109B B [P2] = R0; 840:src/l502_user_process.c **** Proc_state.mode_next = AVG; 506 .loc 1 840 0 507 02aa 90E60100 B [P2+1] = R0; 841:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_UNKNOWN; 508 .loc 1 841 0 509 02ae 0160 R1 = 0 (X); 510 02b0 91E60300 B [P2+3] = R1; 842:src/l502_user_process.c **** Proc_state.average_N_max = 3; 511 .loc 1 842 0 512 02b4 1860 R0 = 3 (X); 513 02b6 90B4 W [P2+4] = R0; 844:src/l502_user_process.c **** Proc_state.average_N = 0; 514 .loc 1 844 0 515 02b8 0060 R0 = 0 (X); 516 02ba D0B4 W [P2+6] = R0; 845:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 517 .loc 1 845 0 518 02bc 92B0 [P2+8] = R2; 846:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 519 .loc 1 846 0 520 02be 91E60C00 B [P2+12] = R1; 847:src/l502_user_process.c **** Proc_state.AVG_state = 0; 521 .loc 1 847 0 522 02c2 91E61400 B [P2+20] = R1; 848:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 523 .loc 1 848 0 524 02c6 12B1 [P2+16] = R2; 849:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 525 .loc 1 849 0 526 02c8 91E61500 B [P2+21] = R1; 850:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; BFIN GAS /tmp/ccG6eBVz.s page 28 527 .loc 1 850 0 528 02cc 92B1 [P2+24] = R2; 851:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 529 .loc 1 851 0 530 02ce 91E61C00 B [P2+28] = R1; 852:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 531 .loc 1 852 0 532 02d2 12B2 [P2+32] = R2; 853:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 533 .loc 1 853 0 534 02d4 52B2 [P2+36] = R2; 854:src/l502_user_process.c **** Proc_state.AVG_buff_active = A; 535 .loc 1 854 0 536 02d6 91E61600 B [P2+22] = R1; 855:src/l502_user_process.c **** TX_buff_state = TX_DONE; 537 .loc 1 855 0 538 02da 4AE10000 P2.H = _TX_buff_state; 539 02de 1860 R0 = 3 (X); 540 02e0 0AE13000 P2.L = _TX_buff_state; 541 02e4 109B B [P2] = R0; 542 02e6 4DE10000 P5.H = _TX_buff; 543 02ea 0068 P0 = 0 (X); 544 .LVL58: 545 02ec 0DE10000 P5.L = _TX_buff; 546 .LBB16: 858:src/l502_user_process.c **** TX_buff[i] = 0; 547 .loc 1 858 0 548 02f0 0060 R0 = 0 (X); 549 02f2 29E11027 P1 = 10000 (X); 550 02f6 B2E00410 LSETUP (.L44, .L52) LC1 = P1; 551 .L44: 552 02fa 855E P2 = P5 + (P0 << 2); 553 02fc 1093 [P2] = R0; 554 .L52: 857:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 555 .loc 1 857 0 556 02fe 086C P0 += 1; 557 0300 BF2F jump.s .L49; 558 .LVL59: 559 .L11: 560 .LBE16: 867:src/l502_user_process.c **** l502_cmd_done(TX_buff_I_shadow, NULL, 0); 561 .loc 1 867 0 562 0302 4AE10000 P2.H = _TX_buff_I_shadow; 563 0306 0AE12C00 P2.L = _TX_buff_I_shadow; 564 030a 1091 R0 = [P2]; 565 030c 0160 R1 = 0 (X); 566 030e 0260 R2 = 0 (X); 567 0310 FFE378FE call _l502_cmd_done; 568 .LVL60: 569 0314 882E jump.s .L45; 570 .LVL61: 571 .L12: 871:src/l502_user_process.c **** l502_cmd_done(dbg_receive_value, NULL, 0); 572 .loc 1 871 0 573 0316 4AE10000 P2.H = _dbg_receive_value; 574 031a 0AE10000 P2.L = _dbg_receive_value; BFIN GAS /tmp/ccG6eBVz.s page 29 575 031e 1091 R0 = [P2]; 576 0320 0160 R1 = 0 (X); 577 0322 0260 R2 = 0 (X); 578 0324 FFE36EFE call _l502_cmd_done; 579 .LVL62: 580 0328 7E2E jump.s .L45; 581 .LFE6: 582 .size _usr_cmd_process, .-_usr_cmd_process 583 032a 0000 .align 4 584 .global _sport_tx_done; 585 .type _sport_tx_done, STT_FUNC; 586 _sport_tx_done: 587 .LFB5: 679:src/l502_user_process.c **** void sport_tx_done(uint32_t* addr, uint32_t size) { 588 .loc 1 679 0 589 .LVL63: 680:src/l502_user_process.c **** ++streams_cnt[1]; 590 .loc 1 680 0 591 032c 4AE10000 P2.H = _streams_cnt; 679:src/l502_user_process.c **** void sport_tx_done(uint32_t* addr, uint32_t size) { 592 .loc 1 679 0 593 0330 00E80000 LINK 0; 594 .LCFI5: 680:src/l502_user_process.c **** ++streams_cnt[1]; 595 .loc 1 680 0 596 0334 0AE10000 P2.L = _streams_cnt; 597 0338 50A0 R0 = [P2+4]; 598 .LVL64: 599 033a 0864 R0 += 1; 600 033c 50B0 [P2+4] = R0; 682:src/l502_user_process.c **** stream_out_buf_free(size); 601 .loc 1 682 0 602 033e 0130 R0 = R1; 683:src/l502_user_process.c **** } 603 .loc 1 683 0 604 0340 01E80000 UNLINK; 682:src/l502_user_process.c **** stream_out_buf_free(size); 605 .loc 1 682 0 606 0344 FFE25EFE jump.l _stream_out_buf_free; 607 .LVL65: 608 .LFE5: 609 .size _sport_tx_done, .-_sport_tx_done 610 .align 4 611 .global _hdma_send_done; 612 .type _hdma_send_done, STT_FUNC; 613 _hdma_send_done: 614 .LFB4: 659:src/l502_user_process.c **** void hdma_send_done(uint32_t* addr, uint32_t size) { 615 .loc 1 659 0 616 .LVL66: 661:src/l502_user_process.c **** TX_buff_state = TX_DONE; 617 .loc 1 661 0 618 0348 4AE10000 P2.H = _TX_buff_state; 659:src/l502_user_process.c **** void hdma_send_done(uint32_t* addr, uint32_t size) { 619 .loc 1 659 0 620 034c 00E80000 LINK 0; 621 .LCFI6: BFIN GAS /tmp/ccG6eBVz.s page 30 661:src/l502_user_process.c **** TX_buff_state = TX_DONE; 622 .loc 1 661 0 623 0350 1860 R0 = 3 (X); 624 .LVL67: 625 0352 0AE13000 P2.L = _TX_buff_state; 626 0356 109B B [P2] = R0; 662:src/l502_user_process.c **** ++streams_cnt[3]; 627 .loc 1 662 0 628 0358 4AE10000 P2.H = _streams_cnt; 629 035c 0AE10000 P2.L = _streams_cnt; 630 0360 D0A0 R0 = [P2+12]; 631 0362 0864 R0 += 1; 632 0364 D0B0 [P2+12] = R0; 664:src/l502_user_process.c **** stream_in_buf_free(size); 633 .loc 1 664 0 634 0366 0130 R0 = R1; 665:src/l502_user_process.c **** } 635 .loc 1 665 0 636 0368 01E80000 UNLINK; 664:src/l502_user_process.c **** stream_in_buf_free(size); 637 .loc 1 664 0 638 036c FFE24AFE jump.l _stream_in_buf_free; 639 .LVL68: 640 .LFE4: 641 .size _hdma_send_done, .-_hdma_send_done 642 .align 4 643 .global _usr_out_proc_data; 644 .type _usr_out_proc_data, STT_FUNC; 645 _usr_out_proc_data: 646 .LFB3: 623:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 647 .loc 1 623 0 648 .LVL69: 649 0370 7005 [--sp] = ( r7:6 ); 650 651 .LCFI7: 628:src/l502_user_process.c **** ++streams_cnt[2]; 652 .loc 1 628 0 653 0372 4AE10000 P2.H = _streams_cnt; 623:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 654 .loc 1 623 0 655 0376 00E80300 LINK 12; 656 .LCFI8: 628:src/l502_user_process.c **** ++streams_cnt[2]; 657 .loc 1 628 0 658 037a 0AE10000 P2.L = _streams_cnt; 623:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 659 .loc 1 623 0 660 037e 3030 R6 = R0; 628:src/l502_user_process.c **** ++streams_cnt[2]; 661 .loc 1 628 0 662 0380 90A0 R0 = [P2+8]; 663 .LVL70: 664 0382 0864 R0 += 1; 623:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 665 .loc 1 623 0 666 0384 82CE01CE R7 = ROT R1 BY 0 || BFIN GAS /tmp/ccG6eBVz.s page 31 666 90B00000 667 [P2+8] = R0 || 668 nop; 669 .LVL71: 630:src/l502_user_process.c **** if (sport_tx_req_rdy()) { 670 .loc 1 630 0 671 038c FFE33AFE call _sport_tx_req_rdy; 672 0390 000C cc =R0==0; 673 0392 0E18 if cc jump .L62; 674 0394 20E10040 R0 = 16384 (X); 675 0398 070A cc =R7<=R0 (iu); 676 039a 3806 if !cc R7 = R0; 677 .LVL72: 637:src/l502_user_process.c **** sport_tx_start_req(data, size); 678 .loc 1 637 0 679 039c 0630 R0 = R6; 680 039e 0F30 R1 = R7; 681 03a0 FFE330FE call _sport_tx_start_req; 642:src/l502_user_process.c **** } 682 .loc 1 642 0 683 03a4 0730 R0 = R7; 684 03a6 01E80000 UNLINK; 685 03aa 3005 ( r7:6 ) = [sp++]; 686 687 .LCFI9: 688 .LVL73: 689 03ac 1000 rts; 690 .LVL74: 691 .L62: 630:src/l502_user_process.c **** if (sport_tx_req_rdy()) { 692 .loc 1 630 0 693 03ae 0760 R7 = 0 (X); 694 .LVL75: 642:src/l502_user_process.c **** } 695 .loc 1 642 0 696 03b0 0730 R0 = R7; 697 03b2 01E80000 UNLINK; 698 03b6 3005 ( r7:6 ) = [sp++]; 699 700 .LCFI10: 701 .LVL76: 702 03b8 1000 rts; 703 .LFE3: 704 .size _usr_out_proc_data, .-_usr_out_proc_data 705 03ba 0000 .align 4 706 .global _usr_in_proc_data; 707 .type _usr_in_proc_data, STT_FUNC; 708 _usr_in_proc_data: 709 .LFB2: 159:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 710 .loc 1 159 0 711 .LVL77: 712 03bc E305 [--sp] = ( r7:4, p5:3 ); 713 714 .LCFI11: 715 03be 00E80400 LINK 16; 716 .LCFI12: BFIN GAS /tmp/ccG6eBVz.s page 32 163:src/l502_user_process.c **** ++streams_cnt[0]; 717 .loc 1 163 0 718 03c2 4AE10000 P2.H = _streams_cnt; 719 03c6 0AE10000 P2.L = _streams_cnt; 159:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 720 .loc 1 159 0 721 03ca 78B2 [FP+36] = R0; 163:src/l502_user_process.c **** ++streams_cnt[0]; 722 .loc 1 163 0 723 03cc 1091 R0 = [P2]; 724 .LVL78: 725 03ce 0864 R0 += 1; 168:src/l502_user_process.c **** if (TX_buff_state == TX_DONE){ 726 .loc 1 168 0 727 03d0 48E10000 P0.H = _TX_buff_state; 163:src/l502_user_process.c **** ++streams_cnt[0]; 728 .loc 1 163 0 729 03d4 1093 [P2] = R0; 168:src/l502_user_process.c **** if (TX_buff_state == TX_DONE){ 730 .loc 1 168 0 731 03d6 08E13000 P0.L = _TX_buff_state; 732 03da 4099 R0 = B [P0] (X); 733 03dc 4043 R0 = R0.B (Z); 159:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 734 .loc 1 159 0 735 03de 1930 R3 = R1; 168:src/l502_user_process.c **** if (TX_buff_state == TX_DONE){ 736 .loc 1 168 0 737 03e0 180C cc =R0==3; 738 03e2 3919 if cc jump .L95; 739 .LVL79: 740 .L64: 190:src/l502_user_process.c **** if (Proc_state.mode == TRANSPARENT){ 741 .loc 1 190 0 742 03e4 4AE10000 P2.H = _Proc_state; 743 03e8 0AE12C00 P2.L = _Proc_state; 744 03ec 5099 R0 = B [P2] (X); 745 03ee 4043 R0 = R0.B (Z); 746 03f0 080C cc =R0==1; 747 03f2 EC18 if cc jump .L96; 748 .L66: 209:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 749 .loc 1 209 0 750 03f4 49E10000 P1.H = _Proc_state; 751 03f8 09E12C00 P1.L = _Proc_state; 752 03fc 4899 R0 = B [P1] (X); 753 03fe 4043 R0 = R0.B (Z); 754 0400 100C cc =R0==2; 755 0402 1A18 if cc jump .L97; 756 .LVL80: 757 .L70: 526:src/l502_user_process.c **** if (hdma_send_req_rdy()) { 758 .loc 1 526 0 759 0404 F3BB [FP+-4] = R3; 760 .LVL81: 761 0406 FFE3FDFD call _hdma_send_req_rdy; 762 .LVL82: BFIN GAS /tmp/ccG6eBVz.s page 33 763 040a 000C cc =R0==0; 764 040c F3B9 R3 = [FP+-4]; 765 040e 0E18 if cc jump .L98; 574:src/l502_user_process.c **** if (TX_buff_state == TODO_TX){ 766 .loc 1 574 0 767 0410 49E10000 P1.H = _TX_buff_state; 768 0414 09E13000 P1.L = _TX_buff_state; 769 0418 4899 R0 = B [P1] (X); 770 041a 4043 R0 = R0.B (Z); 771 041c 080C cc =R0==1; 772 041e 3819 if cc jump .L99; 597:src/l502_user_process.c **** } 773 .loc 1 597 0 774 0420 01E80000 UNLINK; 775 0424 0330 R0 = R3; 776 .LVL83: 777 0426 A305 ( r7:4, p5:3 ) = [sp++]; 778 779 .LCFI13: 780 .LVL84: 781 0428 1000 rts; 782 .LVL85: 783 .L98: 526:src/l502_user_process.c **** if (hdma_send_req_rdy()) { 784 .loc 1 526 0 785 042a 0360 R3 = 0 (X); 786 .LVL86: 597:src/l502_user_process.c **** } 787 .loc 1 597 0 788 042c 01E80000 UNLINK; 789 0430 0330 R0 = R3; 790 0432 A305 ( r7:4, p5:3 ) = [sp++]; 791 792 .LCFI14: 793 .LVL87: 794 0434 1000 rts; 795 .LVL88: 796 .L97: 797 0436 47E10000 R7.H = _data_I; 798 .LBB17: 231:src/l502_user_process.c **** TX_buff_I = 0; 799 .loc 1 231 0 800 043a 46E10000 R6.H = _TX_buff_I; 801 .LBB19: 242:src/l502_user_process.c **** AVG_buff[i] = 0xC2321123; 802 .loc 1 242 0 803 043e 45E132C2 R5.H = 49714; 804 0442 44E10000 R4.H = _TX_buff_shadow; 805 0446 07E11800 R7.L = _data_I; 806 .LBE19: 231:src/l502_user_process.c **** TX_buff_I = 0; 807 .loc 1 231 0 808 044a 06E11400 R6.L = _TX_buff_I; 809 .LBB18: 242:src/l502_user_process.c **** AVG_buff[i] = 0xC2321123; 810 .loc 1 242 0 811 044e 05E12311 R5.L = 4387; BFIN GAS /tmp/ccG6eBVz.s page 34 812 0452 04E10000 R4.L = _TX_buff_shadow; 813 .LVL89: 814 .L93: 815 .LBE18: 816 .LBE17: 210:src/l502_user_process.c **** while(++data_I < size ){ 817 .loc 1 210 0 818 0456 0732 P0 = R7; 819 .LVL90: 820 0458 0091 R0 = [P0]; 821 .LVL91: 822 045a 0864 R0 += 1; 823 045c 0093 [P0] = R0; 824 045e 0091 R0 = [P0]; 825 0460 030A cc =R3<=R0 (iu); 826 0462 D11B if cc jump .L70; 827 .LBB23: 211:src/l502_user_process.c **** uint32_t word = data[data_I]; 828 .loc 1 211 0 829 0464 4BE10000 P3.H = _data_I; 830 0468 0BE11800 P3.L = _data_I; 831 046c 78AE P0 = [FP+36]; 832 046e 5A91 P2 = [P3]; 833 0470 905E P2 = P0 + (P2 << 2); 834 0472 1191 R1 = [P2]; 214:src/l502_user_process.c **** if (header == 0x00){ //digital_channel. switches LFSM state machine 835 .loc 1 214 0 836 0474 82C64181 R0 = R1 >> 24; 837 .LVL92: 838 0478 000C cc =R0==0; 839 047a 8014 if !cc jump .L71 (bp); 215:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 840 .loc 1 215 0 841 047c 49E10000 P1.H = _DY_SYN_2_value; 842 0480 09E12500 P1.L = _DY_SYN_2_value; 843 0484 4AE10000 P2.H = _DY_SYN_2_value_prev; 844 0488 4899 R0 = B [P1] (X); 845 .LVL93: 846 048a 0AE12600 P2.L = _DY_SYN_2_value_prev; 847 048e 109B B [P2] = R0; 216:src/l502_user_process.c **** if (word & 0b1 << 17){ 848 .loc 1 216 0 849 0490 8948 cc = !BITTST (R1,17); 850 0492 951C if cc jump .L72 (bp); 217:src/l502_user_process.c **** DY_SYN_2_value = 1; 851 .loc 1 217 0 852 0494 0A60 R2 = 1 (X); 222:src/l502_user_process.c **** if ((DY_SYN_2_value == 1)&& (DY_SYN_2_value_prev == 0)){ //new cycle started 853 .loc 1 222 0 854 0496 4043 R0 = R0.B (Z); 217:src/l502_user_process.c **** DY_SYN_2_value = 1; 855 .loc 1 217 0 856 0498 0A9B B [P1] = R2; 222:src/l502_user_process.c **** if ((DY_SYN_2_value == 1)&& (DY_SYN_2_value_prev == 0)){ //new cycle started 857 .loc 1 222 0 858 049a 000C cc =R0==0; 859 049c DD17 if !cc jump .L93 (bp); BFIN GAS /tmp/ccG6eBVz.s page 35 224:src/l502_user_process.c **** Proc_state.average_N ++; 860 .loc 1 224 0 861 049e 48E10000 P0.H = _Proc_state; 862 04a2 08E12C00 P0.L = _Proc_state; 863 04a6 C0A8 R0 = W [P0+6] (X); 864 04a8 0864 R0 += 1; 231:src/l502_user_process.c **** TX_buff_I = 0; 865 .loc 1 231 0 866 04aa 0E32 P1 = R6; 224:src/l502_user_process.c **** Proc_state.average_N ++; 867 .loc 1 224 0 868 04ac C0B4 W [P0+6] = R0; 225:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 869 .loc 1 225 0 870 04ae 0160 R1 = 0 (X); 871 .LVL94: 872 04b0 01B1 [P0+16] = R1; 226:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_STARTED; 873 .loc 1 226 0 874 04b2 82E60300 B [P0+3] = R2; 229:src/l502_user_process.c **** Proc_state.AVG_state = FULLY_COMPLETED; 875 .loc 1 229 0 876 04b6 1860 R0 = 3 (X); 877 04b8 80E61400 B [P0+20] = R0; 231:src/l502_user_process.c **** TX_buff_I = 0; 878 .loc 1 231 0 879 04bc 0993 [P1] = R1; 880 .LBB20: 232:src/l502_user_process.c **** for (uint32_t i = 0; ((TX_buff_I < TX_BUFF_SIZE) && (i < AVG_BUFF_SIZE)); i++){ 881 .loc 1 232 0 882 04be 0891 R0 = [P1]; 883 04c0 21E10F27 R1 = 9999 (X); 884 04c4 080A cc =R0<=R1 (iu); 885 04c6 1911 if !cc jump .L100; 886 04c8 4DE10000 P5.H = _TX_buff; 887 04cc 4BE10000 P3.H = _AVG_buff; 888 04d0 0468 P4 = 0 (X); 889 04d2 0DE10000 P5.L = _TX_buff; 890 04d6 0BE10000 P3.L = _AVG_buff; 891 04da 28E1E803 P0 = 1000 (X); 892 04de 21E10F27 R1 = 9999 (X); 893 04e2 B2E01600 LSETUP (.L75, .L106) LC1 = P0; 894 .L75: 235:src/l502_user_process.c **** TX_buff[TX_buff_I++] = AVG_buff[i]; 895 .loc 1 235 0 896 04e6 1632 P2 = R6; 897 04e8 5191 P1 = [P2]; 898 04ea 4AE10000 P2.H = _AVG_buff; 899 04ee 0AE10000 P2.L = _AVG_buff; 900 04f2 A25E P2 = P2 + (P4 << 2); 901 04f4 1091 R0 = [P2]; 902 04f6 4AE10000 P2.H = _TX_buff; 903 04fa 0AE10000 P2.L = _TX_buff; 904 04fe 8A5E P2 = P2 + (P1 << 2); 905 0500 1093 [P2] = R0; 906 0502 1632 P2 = R6; 907 0504 096C P1 += 1; BFIN GAS /tmp/ccG6eBVz.s page 36 908 0506 5193 [P2] = P1; 232:src/l502_user_process.c **** for (uint32_t i = 0; ((TX_buff_I < TX_BUFF_SIZE) && (i < AVG_BUFF_SIZE)); i++){ 909 .loc 1 232 0 910 0508 1091 R0 = [P2]; 911 050a 080A cc =R0<=R1 (iu); 912 050c 0210 if !cc jump .L74; 913 .L106: 914 050e 0C6C P4 += 1; 915 .L74: 916 0510 0068 P0 = 0 (X); 917 .LVL95: 918 .LBE20: 919 .LBB21: 242:src/l502_user_process.c **** AVG_buff[i] = 0xC2321123; 920 .loc 1 242 0 921 0512 29E1E803 P1 = 1000 (X); 922 0516 B2E00410 LSETUP (.L76, .L105) LC1 = P1; 923 .L76: 924 051a 835E P2 = P3 + (P0 << 2); 925 051c 1593 [P2] = R5; 926 .L105: 241:src/l502_user_process.c **** for (uint32_t i = 0; i < AVG_BUFF_SIZE; i++ ){ 927 .loc 1 241 0 928 051e 086C P0 += 1; 929 .LBE21: 245:src/l502_user_process.c **** TX_buff_state = TODO_TX; 930 .loc 1 245 0 931 0520 48E10000 P0.H = _TX_buff_state; 932 .LVL96: 933 0524 08E13000 P0.L = _TX_buff_state; 934 0528 0860 R0 = 1 (X); 935 052a 009B B [P0] = R0; 936 052c 0160 R1 = 0 (X); 937 .LVL97: 938 052e 28E11027 P0 = 10000 (X); 939 0532 B2E00900 LSETUP (.L77, .L104) LC1 = P0; 940 .L77: 941 .LBB22: 248:src/l502_user_process.c **** TX_buff_shadow[i] = TX_buff[i]; 942 .loc 1 248 0 943 0536 0932 P1 = R1; 944 0538 1C32 P3 = R4; 247:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 945 .loc 1 247 0 946 053a 0964 R1 += 1; 248:src/l502_user_process.c **** TX_buff_shadow[i] = TX_buff[i]; 947 .loc 1 248 0 948 053c 4A44 P2 = P1 << 2; 949 053e 555A P1 = P5 + P2; 950 0540 0891 R0 = [P1]; 951 0542 935A P2 = P3 + P2; 952 .L104: 953 0544 1093 [P2] = R0; 954 .LBE22: 250:src/l502_user_process.c **** hdma_send_req_start(TX_buff_shadow, TX_buff_I, 0); 955 .loc 1 250 0 956 0546 0632 P0 = R6; BFIN GAS /tmp/ccG6eBVz.s page 37 957 0548 40E10000 R0.H = _TX_buff_shadow; 958 054c F3BB [FP+-4] = R3; 959 .LVL98: 960 054e 0260 R2 = 0 (X); 961 0550 00E10000 R0.L = _TX_buff_shadow; 962 0554 0191 R1 = [P0]; 963 .LVL99: 964 0556 FFE355FD call _hdma_send_req_start; 251:src/l502_user_process.c **** hdma_send_req_start(TX_marker, 10, 0); 965 .loc 1 251 0 966 055a 40E10000 R0.H = _TX_marker; 967 055e 00E10400 R0.L = _TX_marker; 968 0562 5160 R1 = 10 (X); 969 0564 0260 R2 = 0 (X); 970 0566 FFE34DFD call _hdma_send_req_start; 256:src/l502_user_process.c **** TX_buff_state = TX_DONE; 971 .loc 1 256 0 972 056a 49E10000 P1.H = _TX_buff_state; 973 056e 1860 R0 = 3 (X); 974 0570 09E13000 P1.L = _TX_buff_state; 975 0574 089B B [P1] = R0; 976 0576 F3B9 R3 = [FP+-4]; 977 0578 6F2F jump.s .L93; 978 .LVL100: 979 .L71: 266:src/l502_user_process.c **** }else if(header == 0xD0){ //first phy channel 980 .loc 1 266 0 981 057a 22E1D000 R2 = 208 (X); 982 057e 1008 cc =R0==R2; 983 0580 6B17 if !cc jump .L93 (bp); 272:src/l502_user_process.c **** AVG_buff[Proc_state.AVG_buff_I++] = 0xC0000000 | val; 984 .loc 1 272 0 985 0582 48E10000 P0.H = _Proc_state; 986 0586 08E12C00 P0.L = _Proc_state; 987 058a F863 R0 = -1 (X); 988 .LVL101: 989 058c 01AD P1 = [P0+16]; 990 058e 40E1FF00 R0.H = 255; 991 0592 0154 R0 = R1 & R0; 992 0594 F963 R1 = -1 (X); 993 .LVL102: 994 0596 4BE10000 P3.H = _AVG_buff; 995 059a F14F R1 <<= 30; 996 059c 0BE10000 P3.L = _AVG_buff; 997 05a0 0856 R0 = R0 | R1; 998 05a2 8B5E P2 = P3 + (P1 << 2); 999 05a4 1093 [P2] = R0; 1000 05a6 096C P1 += 1; 1001 05a8 01BD [P0+16] = P1; 274:src/l502_user_process.c **** if (Proc_state.AVG_buff_I >= AVG_BUFF_SIZE){ 1002 .loc 1 274 0 1003 05aa 00A1 R0 = [P0+16]; 1004 05ac 21E1E703 R1 = 999 (X); 1005 05b0 080A cc =R0<=R1 (iu); 1006 05b2 521F if cc jump .L93 (bp); 275:src/l502_user_process.c **** Proc_state.AVG_state = STEP_COMPLETED; 1007 .loc 1 275 0 BFIN GAS /tmp/ccG6eBVz.s page 38 1008 05b4 1060 R0 = 2 (X); 1009 05b6 80E61400 B [P0+20] = R0; 1010 05ba 4E2F jump.s .L93; 1011 .LVL103: 1012 .L72: 219:src/l502_user_process.c **** DY_SYN_2_value = 0; 1013 .loc 1 219 0 1014 05bc 4BE10000 P3.H = _DY_SYN_2_value; 1015 05c0 0060 R0 = 0 (X); 1016 05c2 0BE12500 P3.L = _DY_SYN_2_value; 1017 05c6 189B B [P3] = R0; 1018 05c8 472F jump.s .L93; 1019 .LVL104: 1020 .L96: 1021 .LBE23: 193:src/l502_user_process.c **** if (TX_buff_state == FILLING){ 1022 .loc 1 193 0 1023 05ca 4BE10000 P3.H = _TX_buff_state; 1024 05ce 0BE13000 P3.L = _TX_buff_state; 1025 05d2 5899 R0 = B [P3] (X); 1026 05d4 4043 R0 = R0.B (Z); 1027 05d6 000C cc =R0==0; 1028 05d8 0E17 if !cc jump .L66 (bp); 194:src/l502_user_process.c **** data_I = 0; 1029 .loc 1 194 0 1030 05da 47E10000 R7.H = _data_I; 1031 05de 07E11800 R7.L = _data_I; 1032 05e2 0732 P0 = R7; 1033 .LVL105: 195:src/l502_user_process.c **** TX_buff_I = 0; 1034 .loc 1 195 0 1035 05e4 4CE10000 P4.H = _TX_buff_I; 1036 05e8 0CE11400 P4.L = _TX_buff_I; 194:src/l502_user_process.c **** data_I = 0; 1037 .loc 1 194 0 1038 05ec 0093 [P0] = R0; 195:src/l502_user_process.c **** TX_buff_I = 0; 1039 .loc 1 195 0 1040 05ee 2093 [P4] = R0; 196:src/l502_user_process.c **** while((++data_I < size )&& (++TX_buff_I < TX_BUFF_SIZE)){ 1041 .loc 1 196 0 1042 05f0 0091 R0 = [P0]; 1043 05f2 0864 R0 += 1; 1044 05f4 0093 [P0] = R0; 1045 05f6 0091 R0 = [P0]; 1046 05f8 030A cc =R3<=R0 (iu); 1047 05fa 2618 if cc jump .L67; 1048 05fc 21E10F27 R1 = 9999 (X); 1049 0600 2091 R0 = [P4]; 1050 0602 0864 R0 += 1; 1051 0604 2093 [P4] = R0; 1052 0606 2091 R0 = [P4]; 1053 0608 080A cc =R0<=R1 (iu); 1054 060a 1E10 if !cc jump .L67; 1055 060c 4DE10000 P5.H = _TX_buff; 1056 0610 0DE10000 P5.L = _TX_buff; 198:src/l502_user_process.c **** TX_buff[TX_buff_I] = data[data_I]; BFIN GAS /tmp/ccG6eBVz.s page 39 1057 .loc 1 198 0 1058 0614 4432 P0 = P4; 1059 0616 21E10F27 R1 = 9999 (X); 1060 061a 0720 jump.s .L68; 1061 .L101: 196:src/l502_user_process.c **** while((++data_I < size )&& (++TX_buff_I < TX_BUFF_SIZE)){ 1062 .loc 1 196 0 1063 061c 0091 R0 = [P0]; 1064 061e 0864 R0 += 1; 1065 0620 0093 [P0] = R0; 1066 0622 0091 R0 = [P0]; 1067 0624 080A cc =R0<=R1 (iu); 1068 0626 1010 if !cc jump .L67; 1069 .L68: 198:src/l502_user_process.c **** TX_buff[TX_buff_I] = data[data_I]; 1070 .loc 1 198 0 1071 0628 1F32 P3 = R7; 1072 062a 6191 P1 = [P4]; 1073 062c 5A91 P2 = [P3]; 1074 062e 7BAE P3 = [FP+36]; 1075 0630 4D5E P1 = P5 + (P1 << 2); 1076 0632 935E P2 = P3 + (P2 << 2); 1077 0634 1091 R0 = [P2]; 1078 0636 0893 [P1] = R0; 196:src/l502_user_process.c **** while((++data_I < size )&& (++TX_buff_I < TX_BUFF_SIZE)){ 1079 .loc 1 196 0 1080 0638 0F32 P1 = R7; 1081 063a 0891 R0 = [P1]; 1082 063c 0864 R0 += 1; 1083 063e 0893 [P1] = R0; 1084 0640 0891 R0 = [P1]; 1085 0642 9809 cc =R0