BFIN GAS /tmp/ccYZl5FJ.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 6C020000 .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/ccYZl5FJ.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/ccYZl5FJ.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 flood_I = 0; 117:src/l502_user_process.c **** 118:src/l502_user_process.c **** volatile uint32_t TX_buff_I = 0; 119:src/l502_user_process.c **** volatile uint32_t TX_buff_I_shadow = 123321; 120:src/l502_user_process.c **** 121:src/l502_user_process.c **** volatile uint32_t data_I = 0; 122:src/l502_user_process.c **** volatile uint32_t send_size = 0; 123:src/l502_user_process.c **** 124:src/l502_user_process.c **** volatile uint8_t TX_buff_state = TX_DONE; //FILLING, TODO_TX, TRANSMITTING, TX_DONE, BUFF_READY, 125:src/l502_user_process.c **** volatile uint32_t tx_val = 0; 126:src/l502_user_process.c **** 127:src/l502_user_process.c **** //int f_sport_test(void); 128:src/l502_user_process.c **** void l502_stream_init(void); 129:src/l502_user_process.c **** 130:src/l502_user_process.c **** //struct LFSM_typedef{ 131:src/l502_user_process.c **** // uint8_t 132:src/l502_user_process.c **** //}; 133:src/l502_user_process.c **** 134:src/l502_user_process.c **** uint8_t LFSM_started = 0; 135:src/l502_user_process.c **** 136:src/l502_user_process.c **** 137:src/l502_user_process.c **** uint8_t DY_SYN_2_value = 0; 138:src/l502_user_process.c **** uint8_t DY_SYN_2_value_prev = 0; 139:src/l502_user_process.c **** /***************************************************************************//** 140:src/l502_user_process.c **** @brief Обработка принятого массива данных АЦП/DIN. 141:src/l502_user_process.c **** 142:src/l502_user_process.c **** Функция вызывается каждый раз, когда обнаружены нов 143:src/l502_user_process.c **** АЦП/цифровых входов, пришедшие по SPORT0. 144:src/l502_user_process.c **** 145:src/l502_user_process.c **** Функция должна обработать данные и вернуть количес 146:src/l502_user_process.c **** однако эти данные все еще считаются использованным 147:src/l502_user_process.c **** новыми пришедшими данными) до тех пор пока не будет 148:src/l502_user_process.c **** stream_in_buf_free()). 149:src/l502_user_process.c **** 150:src/l502_user_process.c **** Если функция вернет значение меньше чем size, то функц 151:src/l502_user_process.c **** следующем проходе еще раз с указателем на необработ 152:src/l502_user_process.c **** BFIN GAS /tmp/ccYZl5FJ.s page 4 153:src/l502_user_process.c **** В текущей реализации просто запускается передача д 154:src/l502_user_process.c **** 155:src/l502_user_process.c **** @param[in] data Указатель на массив с принятыми данными 156:src/l502_user_process.c **** @param[in] size Количество принятых данных в 32-битных сло 157:src/l502_user_process.c **** @return Функция возвращает количество обработанн 158:src/l502_user_process.c **** На эти данные не будет вызываться повторн 159:src/l502_user_process.c **** но они считаются еще используемыми 160:src/l502_user_process.c **** *******************************************************************************/ 161:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 162:src/l502_user_process.c **** /* если есть свободные дескрипторы на передачу по HDMA 163:src/l502_user_process.c **** передачу. Иначе возвращаем 0, чтобы на обработку эт 164:src/l502_user_process.c **** вызвали бы позже */ 165:src/l502_user_process.c **** ++streams_cnt[0]; 166:src/l502_user_process.c **** 167:src/l502_user_process.c **** if (Proc_state.mode == FLOOD){ 168:src/l502_user_process.c **** for (int i = 0; i < TX_BUFF_SIZE; ++i){ 169:src/l502_user_process.c **** TX_buff[i] = flood_I++; 170:src/l502_user_process.c **** } 171:src/l502_user_process.c **** } 172:src/l502_user_process.c **** 173:src/l502_user_process.c **** 174:src/l502_user_process.c **** //clear TX_buff 175:src/l502_user_process.c **** if (TX_buff_state == TX_DONE){ 176:src/l502_user_process.c **** for (int i = 0; i < TX_BUFF_SIZE; ++i){ 177:src/l502_user_process.c **** //TX_buff[i] = 0x00000123; 178:src/l502_user_process.c **** TX_buff[i] = tx_val++ | 0xEE000000; 179:src/l502_user_process.c **** //TX_buff[i] = size; 180:src/l502_user_process.c **** } 181:src/l502_user_process.c **** TX_buff_state = FILLING; 182:src/l502_user_process.c **** } 183:src/l502_user_process.c **** /* 184:src/l502_user_process.c **** for (int i = 0; i < TX_BUFF_SIZE; ++i){ 185:src/l502_user_process.c **** TX_buff[i] = 0x00000000; 186:src/l502_user_process.c **** } 187:src/l502_user_process.c **** */ 188:src/l502_user_process.c **** 189:src/l502_user_process.c **** //for (int i = 0; i < dbg_sport_rx_copy; ++i){ 190:src/l502_user_process.c **** // dbg_sport_rx_copy[i] = data[i]; 191:src/l502_user_process.c **** //} 192:src/l502_user_process.c **** 193:src/l502_user_process.c **** 194:src/l502_user_process.c **** 195:src/l502_user_process.c **** //* 196:src/l502_user_process.c **** //simple transparent mode 197:src/l502_user_process.c **** if (Proc_state.mode == TRANSPARENT){ 198:src/l502_user_process.c **** //++Proc_state.average_N; 199:src/l502_user_process.c **** 200:src/l502_user_process.c **** if (TX_buff_state == FILLING){ 201:src/l502_user_process.c **** data_I = 0; 202:src/l502_user_process.c **** TX_buff_I = 0; 203:src/l502_user_process.c **** while((++data_I < size )&& (++TX_buff_I < TX_BUFF_SIZE)){ 204:src/l502_user_process.c **** //; 205:src/l502_user_process.c **** TX_buff[TX_buff_I] = data[data_I]; 206:src/l502_user_process.c **** } 207:src/l502_user_process.c **** 208:src/l502_user_process.c **** TX_buff_state = TODO_TX; 209:src/l502_user_process.c **** //tx_val = 0; BFIN GAS /tmp/ccYZl5FJ.s page 5 210:src/l502_user_process.c **** } 211:src/l502_user_process.c **** //TX_buff_state = DUMMY; 212:src/l502_user_process.c **** 213:src/l502_user_process.c **** } 214:src/l502_user_process.c **** //TX_buff_I = TX_BUFF_SIZE; 215:src/l502_user_process.c **** 216:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 217:src/l502_user_process.c **** while(++data_I < size ){ 218:src/l502_user_process.c **** uint32_t word = data[data_I]; 219:src/l502_user_process.c **** uint32_t val = word & 0x00FFFFFF; 220:src/l502_user_process.c **** uint8_t header = (uint8_t)(word >> 24); 221:src/l502_user_process.c **** if (header == 0x00){ //digital_channel. switches LFSM state machine 222:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 223:src/l502_user_process.c **** if (word & (0b1 << 17)){ 224:src/l502_user_process.c **** DY_SYN_2_value = 1; 225:src/l502_user_process.c **** }else{ 226:src/l502_user_process.c **** DY_SYN_2_value = 0; 227:src/l502_user_process.c **** } 228:src/l502_user_process.c **** 229:src/l502_user_process.c **** if ((DY_SYN_2_value == 1)&& (DY_SYN_2_value_prev == 0)){ //new cycle started 230:src/l502_user_process.c **** //data[data_I] = 0xB00000000; 231:src/l502_user_process.c **** Proc_state.average_N ++; 232:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 233:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_STARTED; 234:src/l502_user_process.c **** if (Proc_state.average_N >= Proc_state.average_N_max){ //whole average ended 235:src/l502_user_process.c **** Proc_state.average_N = 0; 236:src/l502_user_process.c **** //if (1){ 237:src/l502_user_process.c **** Proc_state.AVG_state = FULLY_COMPLETED; 238:src/l502_user_process.c **** //averaging completed => copy average results to TX_buff and start avg again 239:src/l502_user_process.c **** TX_buff_I = 0; 240:src/l502_user_process.c **** for (uint32_t i = 0; ((TX_buff_I < TX_BUFF_SIZE) && (i < AVG_BUFF_SIZE)); i++){ 241:src/l502_user_process.c **** // uint32_t i = 0; 242:src/l502_user_process.c **** // while ((TX_buff_I < TX_BUFF_SIZE) && (i < AVG_BUFF_SIZE)){ 243:src/l502_user_process.c **** TX_buff[TX_buff_I++] = AVG_buff[i]; 244:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xB0000000 + Proc_state.average_N; 245:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xC1000000; 246:src/l502_user_process.c **** } 247:src/l502_user_process.c **** 248:src/l502_user_process.c **** //clear AVG_buff: 249:src/l502_user_process.c **** for (uint32_t i = 0; i < AVG_BUFF_SIZE; i++ ){ 250:src/l502_user_process.c **** AVG_buff[i] = 0xC2321123; 251:src/l502_user_process.c **** } 252:src/l502_user_process.c **** 253:src/l502_user_process.c **** TX_buff_state = TODO_TX; 254:src/l502_user_process.c **** /* 255:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 256:src/l502_user_process.c **** TX_buff_shadow[i] = TX_buff[i]; 257:src/l502_user_process.c **** } 258:src/l502_user_process.c **** hdma_send_req_start(TX_buff_shadow, TX_buff_I, 0); 259:src/l502_user_process.c **** hdma_send_req_start(TX_marker, 10, 0); 260:src/l502_user_process.c **** 261:src/l502_user_process.c **** 262:src/l502_user_process.c **** // hdma_send_req_start(TX_buff, TX_BUFF_SIZE, 0); 263:src/l502_user_process.c **** //TX_buff_state = TRANSMITTING; 264:src/l502_user_process.c **** TX_buff_state = TX_DONE; 265:src/l502_user_process.c **** */ 266:src/l502_user_process.c **** BFIN GAS /tmp/ccYZl5FJ.s page 6 267:src/l502_user_process.c **** }else{ // 268:src/l502_user_process.c **** Proc_state.AVG_state = STEP_RUNNING; 269:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 270:src/l502_user_process.c **** 271:src/l502_user_process.c **** } 272:src/l502_user_process.c **** } 273:src/l502_user_process.c **** 274:src/l502_user_process.c **** }else if(header == 0xD0){ //first phy channel 275:src/l502_user_process.c **** // if (Proc_state.AVG_state == STEP_RUNNING){ 276:src/l502_user_process.c **** // if (Proc_state.LFSM_state == CYCLE_STARTED){ 277:src/l502_user_process.c **** if (1){ 278:src/l502_user_process.c **** if (1){ 279:src/l502_user_process.c **** // AVG_buff[Proc_state.AVG_buff_I++] = 0xC0000000 | (0x00FFFFFF & (AVG_buff[Proc_state.AVG 280:src/l502_user_process.c **** AVG_buff[Proc_state.AVG_buff_I] = 0xC0000000 | ((val + AVG_buff[Proc_state.AVG_buff_I]) & 0x 281:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I++] = 0xC0000000; 282:src/l502_user_process.c **** Proc_state.AVG_buff_I++; 283:src/l502_user_process.c **** if (Proc_state.AVG_buff_I >= AVG_BUFF_SIZE){ 284:src/l502_user_process.c **** Proc_state.AVG_state = STEP_COMPLETED; 285:src/l502_user_process.c **** } 286:src/l502_user_process.c **** } 287:src/l502_user_process.c **** } 288:src/l502_user_process.c **** } 289:src/l502_user_process.c **** } 290:src/l502_user_process.c **** } 291:src/l502_user_process.c **** 292:src/l502_user_process.c **** 293:src/l502_user_process.c **** 294:src/l502_user_process.c **** 295:src/l502_user_process.c **** /* 296:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 297:src/l502_user_process.c **** data_I = 0; 298:src/l502_user_process.c **** //TX_buff_I = 0; 299:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 300:src/l502_user_process.c **** if (Proc_state.AVG_buff_active == A){ 301:src/l502_user_process.c **** while((data_I < size )&& (Proc_state.AVG_buff_I < (AVG_BUFF_SIZE - 10))){ 302:src/l502_user_process.c **** uint32_t word = data[data_I]; 303:src/l502_user_process.c **** //uint32_t avg_word = AVG_buff_A[Proc_state.AVG_buff_I++]; 304:src/l502_user_process.c **** //AVG_buff_A[Proc_state.AVG_buff_I] = (avg_word & 0x007FFFFF) + (word & 0x007FFFFF); 305:src/l502_user_process.c **** //AVG_buff_A[Proc_state.AVG_buff_I] = 0xDD000000 | (word & 0x00FFFFFF); 306:src/l502_user_process.c **** AVG_buff_A[Proc_state.AVG_buff_I] = word; 307:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I++] = data[data_I++]; 308:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I] = data[data_I]; 309:src/l502_user_process.c **** //uint32_t word = data[data_I]; 310:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I] = word; 311:src/l502_user_process.c **** //AVG_buff_A[Proc_state.AVG_buff_I] = 0xDD000000 | (Proc_state.AVG_buff_I & 0x00FFFFFF); 312:src/l502_user_process.c **** 313:src/l502_user_process.c **** Proc_state.AVG_buff_I++; 314:src/l502_user_process.c **** data_I++; 315:src/l502_user_process.c **** } 316:src/l502_user_process.c **** //Proc_state.AVG_buff_I++; 317:src/l502_user_process.c **** //AVG_buff_A[Proc_state.AVG_buff_I] = 0xDD000000 | (Proc_state.AVG_buff_I & 0x00FFFFFF); 318:src/l502_user_process.c **** //data_I++; 319:src/l502_user_process.c **** //Proc_state.AVG_buff_I = 0; 320:src/l502_user_process.c **** }else{ 321:src/l502_user_process.c **** while((data_I < size )&& (Proc_state.AVG_buff_I < (AVG_BUFF_SIZE - 10))){ 322:src/l502_user_process.c **** //uint32_t word = data[data_I]; 323:src/l502_user_process.c **** AVG_buff_B[Proc_state.AVG_buff_I] = 0xDE000000 | (Proc_state.AVG_buff_I & 0x00FFFFFF); BFIN GAS /tmp/ccYZl5FJ.s page 7 324:src/l502_user_process.c **** Proc_state.AVG_buff_I++; 325:src/l502_user_process.c **** data_I++; 326:src/l502_user_process.c **** } 327:src/l502_user_process.c **** // Proc_state.AVG_buff_I++; 328:src/l502_user_process.c **** // AVG_buff_B[Proc_state.AVG_buff_I] = 0xDD000000 | (Proc_state.AVG_buff_I & 0x00FFFFFF); 329:src/l502_user_process.c **** 330:src/l502_user_process.c **** } 331:src/l502_user_process.c **** 332:src/l502_user_process.c **** 333:src/l502_user_process.c **** } 334:src/l502_user_process.c **** */ 335:src/l502_user_process.c **** 336:src/l502_user_process.c **** /*/ 337:src/l502_user_process.c **** 338:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 339:src/l502_user_process.c **** uint32_t data_I = 0; 340:src/l502_user_process.c **** while((data_I < size )&& (TX_buff_I < (TX_BUFF_SIZE - 1))){ 341:src/l502_user_process.c **** // TX_buff[TX_buff_I++] = data[data_I++]; 342:src/l502_user_process.c **** uint32_t word = data[data_I++]; 343:src/l502_user_process.c **** TX_buff[TX_buff_I++] = (word & 0x00FFFFFF);// | 0xDE000000; 344:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = ((word & 0x00FFFFFF) | 0xDE000000); 345:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xADEFDEED; 346:src/l502_user_process.c **** } 347:src/l502_user_process.c **** } 348:src/l502_user_process.c **** //*/ 349:src/l502_user_process.c **** 350:src/l502_user_process.c **** //* 351:src/l502_user_process.c **** 352:src/l502_user_process.c **** 353:src/l502_user_process.c **** // if (Proc_state.mode == AVG){ 354:src/l502_user_process.c **** //TX_buff_I = 10; 355:src/l502_user_process.c **** /* 356:src/l502_user_process.c **** uint32_t data_I = 0; 357:src/l502_user_process.c **** uint8_t new_cycle_started = 0; 358:src/l502_user_process.c **** uint8_t cycle_cont = 1; 359:src/l502_user_process.c **** while ((data_I < size) && (Proc_state.AVG_buff_I < AVG_BUFF_SIZE) && cycle_cont ){ 360:src/l502_user_process.c **** uint32_t word = data[data_I]; 361:src/l502_user_process.c **** uint32_t val = word & 0x00FFFFFF; 362:src/l502_user_process.c **** uint8_t header = (uint8_t)(word >> 24); 363:src/l502_user_process.c **** */ 364:src/l502_user_process.c **** /* 365:src/l502_user_process.c **** if (header == 0x00){ 366:src/l502_user_process.c **** Proc_state.digital_word_prev = Proc_state.digital_word_curr; 367:src/l502_user_process.c **** Proc_state.digital_word_curr = word; 368:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 369:src/l502_user_process.c **** if (word & 0b1 << 17){ 370:src/l502_user_process.c **** DY_SYN_2_value = 1; 371:src/l502_user_process.c **** }else{ 372:src/l502_user_process.c **** DY_SYN_2_value = 0; 373:src/l502_user_process.c **** } 374:src/l502_user_process.c **** 375:src/l502_user_process.c **** if ((DY_SYN_2_value == 1)&& (DY_SYN_2_value_prev == 0)){ //new cycle started 376:src/l502_user_process.c **** new_cycle_started = 1; 377:src/l502_user_process.c **** } 378:src/l502_user_process.c **** } 379:src/l502_user_process.c **** //*/ 380:src/l502_user_process.c **** /* BFIN GAS /tmp/ccYZl5FJ.s page 8 381:src/l502_user_process.c **** if (header == 0xD0){ //it`s first channel 382:src/l502_user_process.c **** if (new_cycle_started){ 383:src/l502_user_process.c **** new_cycle_started = 0; 384:src/l502_user_process.c **** ++Proc_state.average_N; 385:src/l502_user_process.c **** if (Proc_state.average_N >= Proc_state.average_N_max){ 386:src/l502_user_process.c **** Proc_state.mode == AVG_DONE; 387:src/l502_user_process.c **** cycle_cont = 0; //break averaging cycle 388:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 389:src/l502_user_process.c **** } 390:src/l502_user_process.c **** }else{ 391:src/l502_user_process.c **** if (Proc_state.AVG_buff_I < AVG_BUFF_SIZE){ 392:src/l502_user_process.c **** AVG_buff[Proc_state.AVG_buff_I] =(word & 0x00FFFFFF);// | 0xDE000000; 393:src/l502_user_process.c **** //uint32_t tmp = AVG_buff[Proc_state.AVG_buff_I]; 394:src/l502_user_process.c **** //tmp += val; 395:src/l502_user_process.c **** //tmp &= 0x0FFFFFFF; 396:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I] = tmp | (0x40000000 & 0xF0000000); //set header (first 4 bit 397:src/l502_user_process.c **** 398:src/l502_user_process.c **** Proc_state.AVG_buff_I++; 399:src/l502_user_process.c **** } 400:src/l502_user_process.c **** } 401:src/l502_user_process.c **** } 402:src/l502_user_process.c **** data_I++; 403:src/l502_user_process.c **** //*/ 404:src/l502_user_process.c **** 405:src/l502_user_process.c **** // AVG_buff[Proc_state.AVG_buff_I] = 0xDDDDDDDD; 406:src/l502_user_process.c **** 407:src/l502_user_process.c **** 408:src/l502_user_process.c **** 409:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = data[data_I]; 410:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xEEEEEEEE; 411:src/l502_user_process.c **** // data_I++; 412:src/l502_user_process.c **** // Proc_state.AVG_buff_I++; 413:src/l502_user_process.c **** 414:src/l502_user_process.c **** //} 415:src/l502_user_process.c **** 416:src/l502_user_process.c **** 417:src/l502_user_process.c **** // if (Proc_state.AVG_buff_I == AVG_BUFF_SIZE){ 418:src/l502_user_process.c **** /* if (Proc_state.AVG_buff_I >= 10){ 419:src/l502_user_process.c **** Proc_state.AVG_buff_I = 10; 420:src/l502_user_process.c **** Proc_state.mode == AVG_DONE; 421:src/l502_user_process.c **** } 422:src/l502_user_process.c **** */ 423:src/l502_user_process.c **** // } 424:src/l502_user_process.c **** /* 425:src/l502_user_process.c **** if(Proc_state.mode == AVG_DONE){ //TODO: 426:src/l502_user_process.c **** if (Proc_state.TX_buff_state == 0){ 427:src/l502_user_process.c **** Proc_state.TX_buff_state = 1; //0 --ready, 1 -- filling, 2 -- ready to send 428:src/l502_user_process.c **** // Proc_state.AVG_buff_state = 1; //0 -- ready, 1 -- blocked, 429:src/l502_user_process.c **** uint32_t max_I = TX_BUFF_SIZE; 430:src/l502_user_process.c **** if (max_I > AVG_BUFF_SIZE){ 431:src/l502_user_process.c **** max_I = AVG_BUFF_SIZE; 432:src/l502_user_process.c **** } 433:src/l502_user_process.c **** for (uint32_t I = 0; I < max_I; ++I){ 434:src/l502_user_process.c **** if (TX_buff_I < TX_BUFF_SIZE){ 435:src/l502_user_process.c **** ++TX_buff_I; 436:src/l502_user_process.c **** } 437:src/l502_user_process.c **** TX_buff[TX_buff_I] = AVG_buff[I]; BFIN GAS /tmp/ccYZl5FJ.s page 9 438:src/l502_user_process.c **** AVG_buff[I] = 0; 439:src/l502_user_process.c **** } 440:src/l502_user_process.c **** Proc_state.TX_buff_state = 2; //0 --ready, 1 -- filling, 2 -- ready to send 441:src/l502_user_process.c **** } 442:src/l502_user_process.c **** Proc_state.mode = Proc_state.mode_next; 443:src/l502_user_process.c **** } 444:src/l502_user_process.c **** //*/ 445:src/l502_user_process.c **** 446:src/l502_user_process.c **** 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 **** uint32_t radar_word_I = 0; 452:src/l502_user_process.c **** 453:src/l502_user_process.c **** //uint32_t TX_buff_I = 0; 454:src/l502_user_process.c **** uint32_t word_prev = 0; 455:src/l502_user_process.c **** uint32_t digital_word_prev = 0; 456:src/l502_user_process.c **** 457:src/l502_user_process.c **** 458:src/l502_user_process.c **** 459:src/l502_user_process.c **** 460:src/l502_user_process.c **** for (int data_I = 0; (data_I < size) && (TX_buff_I < TX_BUFF_SIZE); ++data_I){ 461:src/l502_user_process.c **** uint32_t word = data[data_I]; 462:src/l502_user_process.c **** uint32_t val = word & 0x00FFFFFF; 463:src/l502_user_process.c **** uint8_t header = (uint8_t)(word >> 24); 464:src/l502_user_process.c **** //11010000 465:src/l502_user_process.c **** if (((header & 0b10000000) == 0b10000000)){ //it`s ADC word 466:src/l502_user_process.c **** if (header == 0XD0){ //phy channel № 1 in common mode 467:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = ((0b01100000 & LFSM_val_ON) << 24) & val; 468:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0xD0ADEFEA; 469:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = word; 470:src/l502_user_process.c **** 471:src/l502_user_process.c **** }else if (header == 0xD1){//phy channel № 2 in common mode 472:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 473:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = ((0b01100000 & LFSM_val_OFF) << 24) & val; 474:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xD0ADEFEB; 475:src/l502_user_process.c **** }else{ 476:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = word; 477:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 478:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xD0AAAAAA; 479:src/l502_user_process.c **** } 480:src/l502_user_process.c **** 481:src/l502_user_process.c **** 482:src/l502_user_process.c **** } else if ( header == 0b00000000){ //it`s digital 483:src/l502_user_process.c **** //if ((word & 0x2200) == 0x2200){ 484:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 485:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xAD000000; 486:src/l502_user_process.c **** 487:src/l502_user_process.c **** 488:src/l502_user_process.c **** 489:src/l502_user_process.c **** //detect rise on DI_SYN2 -- start of chirp 490:src/l502_user_process.c **** if (word & 0b1 << 17){ 491:src/l502_user_process.c **** DY_SYN_2_value = 1; 492:src/l502_user_process.c **** }else{ 493:src/l502_user_process.c **** DY_SYN_2_value = 0; 494:src/l502_user_process.c **** } BFIN GAS /tmp/ccYZl5FJ.s page 10 495:src/l502_user_process.c **** 496:src/l502_user_process.c **** if ((DY_SYN_2_value == 1)&& (DY_SYN_2_value_prev == 0)){ 497:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0xAD000000; 498:src/l502_user_process.c **** } 499:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 500:src/l502_user_process.c **** 501:src/l502_user_process.c **** digital_word_prev = word; 502:src/l502_user_process.c **** } else{ 503:src/l502_user_process.c **** // TX_buff[TX_buff_I++] = word; 504:src/l502_user_process.c **** } 505:src/l502_user_process.c **** word_prev = word; 506:src/l502_user_process.c **** 507:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 508:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 509:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 510:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 511:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 512:src/l502_user_process.c **** 513:src/l502_user_process.c **** } 514:src/l502_user_process.c **** */ 515:src/l502_user_process.c **** 516:src/l502_user_process.c **** //stream_in_buf_free(size); 517:src/l502_user_process.c **** 518:src/l502_user_process.c **** /* 519:src/l502_user_process.c **** 520:src/l502_user_process.c **** //int i = 0; 521:src/l502_user_process.c **** //uint8_t 522:src/l502_user_process.c **** //while 523:src/l502_user_process.c **** 524:src/l502_user_process.c **** for (int i = 0; i < LFSM_DATALEN; ++i){ 525:src/l502_user_process.c **** uint32_t msg; 526:src/l502_user_process.c **** if (i % 2){ 527:src/l502_user_process.c **** msg = (LFSM_val_ON << 24) + data[i]; 528:src/l502_user_process.c **** }else{ 529:src/l502_user_process.c **** msg = (LFSM_val_OFF << 24) + data[i]; 530:src/l502_user_process.c **** } 531:src/l502_user_process.c **** LFSM_data[i] = msg; 532:src/l502_user_process.c **** } 533:src/l502_user_process.c **** 534:src/l502_user_process.c **** */ 535:src/l502_user_process.c **** if (hdma_send_req_rdy()) { 536:src/l502_user_process.c **** 537:src/l502_user_process.c **** //streams_cnt[0] 538:src/l502_user_process.c **** /* 539:src/l502_user_process.c **** if (Proc_state.TX_buff_state == 2){ 540:src/l502_user_process.c **** hdma_send_req_start(TX_buff, TX_BUFF_SIZE, 0); 541:src/l502_user_process.c **** }else if(0){ 542:src/l502_user_process.c **** 543:src/l502_user_process.c **** }else{ 544:src/l502_user_process.c **** hdma_send_req_start(TX_buff, TX_buff_I, 0); 545:src/l502_user_process.c **** TX_buff_I = 0; 546:src/l502_user_process.c **** //hdma_send_req_start(data, size, 0); 547:src/l502_user_process.c **** } 548:src/l502_user_process.c **** */ 549:src/l502_user_process.c **** 550:src/l502_user_process.c **** /* 551:src/l502_user_process.c **** if (Proc_state.mode == AVG_DONE){ BFIN GAS /tmp/ccYZl5FJ.s page 11 552:src/l502_user_process.c **** 553:src/l502_user_process.c **** uint32_t send_size = Proc_state.AVG_buff_I; 554:src/l502_user_process.c **** // uint32_t send_size = AVG_BUFF_SIZE; 555:src/l502_user_process.c **** hdma_send_req_start(AVG_buff, send_size, 0); 556:src/l502_user_process.c **** Proc_state.mode = AVG; 557:src/l502_user_process.c **** return send_size; 558:src/l502_user_process.c **** } 559:src/l502_user_process.c **** //*/ 560:src/l502_user_process.c **** /* 561:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 562:src/l502_user_process.c **** send_size = Proc_state.AVG_buff_I; 563:src/l502_user_process.c **** //send_size = TX_buff_I; 564:src/l502_user_process.c **** //send_size = AVG_BUFF_SIZE - 500; 565:src/l502_user_process.c **** dbg_receive_value = send_size; 566:src/l502_user_process.c **** if (Proc_state.AVG_buff_active == A){ 567:src/l502_user_process.c **** hdma_send_req_start(AVG_buff_A, send_size, 0); 568:src/l502_user_process.c **** Proc_state.AVG_buff_active == B; 569:src/l502_user_process.c **** }else{ 570:src/l502_user_process.c **** hdma_send_req_start(AVG_buff_B, send_size, 0); 571:src/l502_user_process.c **** Proc_state.AVG_buff_active = A; 572:src/l502_user_process.c **** } 573:src/l502_user_process.c **** return send_size; 574:src/l502_user_process.c **** }else{ 575:src/l502_user_process.c **** hdma_send_req_start(TX_buff, TX_buff_I, 0); 576:src/l502_user_process.c **** TX_buff_I_shadow = TX_buff_I; 577:src/l502_user_process.c **** dbg_receive_value = TX_buff_I; 578:src/l502_user_process.c **** TX_buff_I = 0; 579:src/l502_user_process.c **** return TX_buff_I_shadow; 580:src/l502_user_process.c **** } 581:src/l502_user_process.c **** */ 582:src/l502_user_process.c **** 583:src/l502_user_process.c **** 584:src/l502_user_process.c **** if (Proc_state.mode == FLOOD){ 585:src/l502_user_process.c **** hdma_send_req_start(TX_buff, TX_BUFF_SIZE, 0); 586:src/l502_user_process.c **** return size; 587:src/l502_user_process.c **** } 588:src/l502_user_process.c **** 589:src/l502_user_process.c **** if (TX_buff_state == TODO_TX){ 590:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 591:src/l502_user_process.c **** TX_buff_shadow[i] = TX_buff[i]; 592:src/l502_user_process.c **** } 593:src/l502_user_process.c **** hdma_send_req_start(TX_buff_shadow, TX_buff_I, 0); 594:src/l502_user_process.c **** hdma_send_req_start(TX_marker, 10, 0); 595:src/l502_user_process.c **** 596:src/l502_user_process.c **** 597:src/l502_user_process.c **** // hdma_send_req_start(TX_buff, TX_BUFF_SIZE, 0); 598:src/l502_user_process.c **** //TX_buff_state = TRANSMITTING; 599:src/l502_user_process.c **** TX_buff_state = TX_DONE; 600:src/l502_user_process.c **** //}else{ 601:src/l502_user_process.c **** // hdma_send_req_start(data, size, 0); 602:src/l502_user_process.c **** } 603:src/l502_user_process.c **** 604:src/l502_user_process.c **** //hdma_send_req_start(data, size, 0); 605:src/l502_user_process.c **** //streams_cnt[0] = hdma_send_req_start(LFSM_data, LFSM_DATALEN, 0); 606:src/l502_user_process.c **** return size; 607:src/l502_user_process.c **** //return data_I; //number of really processed words 608:src/l502_user_process.c **** } BFIN GAS /tmp/ccYZl5FJ.s page 12 609:src/l502_user_process.c **** //return data_I; //number of really processed words 610:src/l502_user_process.c **** 611:src/l502_user_process.c **** return 0; 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 **** @brief Обработка принятого массива с данными ЦАП/DOUT 618:src/l502_user_process.c **** 619:src/l502_user_process.c **** Функция вызывается каждый раз, когда обнаружены нов 620:src/l502_user_process.c **** ПК по HDMA. 621:src/l502_user_process.c **** Функция должна обработать данные и вернуть количес 622:src/l502_user_process.c **** однако эти данные все еще считаются использованным 623:src/l502_user_process.c **** новыми пришедшими данными) до тех пор пока не будет 624:src/l502_user_process.c **** stream_out_buf_free()). 625:src/l502_user_process.c **** 626:src/l502_user_process.c **** Если функция вернет значение меньше чем size, то функц 627:src/l502_user_process.c **** вызвана после еще раз с указателем на необработанны 628:src/l502_user_process.c **** 629:src/l502_user_process.c **** В текущей реализации просто запускается передача д 630:src/l502_user_process.c **** для вывода на ЦАП/цифровые выходы. 631:src/l502_user_process.c **** 632:src/l502_user_process.c **** @param[in] data Указатель на массив с принятыми данными 633:src/l502_user_process.c **** @param[in] size Количество принятых данных в 32-битных сло 634:src/l502_user_process.c **** @return Функция возвращает количество обработанн 635:src/l502_user_process.c **** На эти данные не будет вызываться повторн 636:src/l502_user_process.c **** но они считаются еще используемыми 637:src/l502_user_process.c **** ******************************************************************************/ 638:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 639:src/l502_user_process.c **** 640:src/l502_user_process.c **** /* если есть свободные дескрипторы на передачу по HDMA 641:src/l502_user_process.c **** передачу. Иначе возвращаем 0, чтобы на обработку эт 642:src/l502_user_process.c **** вызвали бы позже */ 643:src/l502_user_process.c **** ++streams_cnt[2]; 644:src/l502_user_process.c **** 645:src/l502_user_process.c **** if (sport_tx_req_rdy()) { 646:src/l502_user_process.c **** 647:src/l502_user_process.c **** /* за один раз можем передать в SPORT не более 648:src/l502_user_process.c **** SPORT_TX_REQ_SIZE_MAX слов */ 649:src/l502_user_process.c **** if (size > SPORT_TX_REQ_SIZE_MAX) 650:src/l502_user_process.c **** size = SPORT_TX_REQ_SIZE_MAX; 651:src/l502_user_process.c **** 652:src/l502_user_process.c **** sport_tx_start_req(data, size); 653:src/l502_user_process.c **** 654:src/l502_user_process.c **** return size; 655:src/l502_user_process.c **** } 656:src/l502_user_process.c **** return 0; 657:src/l502_user_process.c **** } 658:src/l502_user_process.c **** 659:src/l502_user_process.c **** 660:src/l502_user_process.c **** 661:src/l502_user_process.c **** 662:src/l502_user_process.c **** 663:src/l502_user_process.c **** 664:src/l502_user_process.c **** /****************************************************************************//** 665:src/l502_user_process.c **** @brief Обработка завершения передачи по HostDMA BFIN GAS /tmp/ccYZl5FJ.s page 13 666:src/l502_user_process.c **** 667:src/l502_user_process.c **** Функция вызывается из обработчика прерывания, когд 668:src/l502_user_process.c **** блока данных по HDMA в ПК, поставленного до этого на пе 669:src/l502_user_process.c **** помощью hdma_send_req_start(). 670:src/l502_user_process.c **** 671:src/l502_user_process.c **** @param[in] addr Адрес слова, сразу за последним переданны 672:src/l502_user_process.c **** @param[in] size Размер переданных данных в 32-битных слова 673:src/l502_user_process.c **** ****************************************************************************/ 674:src/l502_user_process.c **** void hdma_send_done(uint32_t* addr, uint32_t size) { 675:src/l502_user_process.c **** 676:src/l502_user_process.c **** TX_buff_state = TX_DONE; 677:src/l502_user_process.c **** ++streams_cnt[3]; 678:src/l502_user_process.c **** 679:src/l502_user_process.c **** stream_in_buf_free(size); 680:src/l502_user_process.c **** } 681:src/l502_user_process.c **** 682:src/l502_user_process.c **** 683:src/l502_user_process.c **** 684:src/l502_user_process.c **** /***************************************************************************//** 685:src/l502_user_process.c **** @brief Обработка завершения передачи по SPORT 686:src/l502_user_process.c **** 687:src/l502_user_process.c **** Функция вызывается из обработчика прерывания при з 688:src/l502_user_process.c **** по SPORT'у на цифровые выходы/ЦАП, поставленного до это 689:src/l502_user_process.c **** помощью sport_tx_start_req(). 690:src/l502_user_process.c **** 691:src/l502_user_process.c **** 692:src/l502_user_process.c **** @param[in] addr Адрес слова, сразу за последним переданны 693:src/l502_user_process.c **** @param[in] size Размер переданных данных в 32-битных слова 694:src/l502_user_process.c **** void sport_tx_done(uint32_t* addr, uint32_t size) { 695:src/l502_user_process.c **** ++streams_cnt[1]; 696:src/l502_user_process.c **** 697:src/l502_user_process.c **** stream_out_buf_free(size); 698:src/l502_user_process.c **** } 699:src/l502_user_process.c **** 700:src/l502_user_process.c **** 701:src/l502_user_process.c **** 702:src/l502_user_process.c **** 703:src/l502_user_process.c **** 704:src/l502_user_process.c **** 705:src/l502_user_process.c **** 706:src/l502_user_process.c **** 707:src/l502_user_process.c **** 708:src/l502_user_process.c **** /****************************************************************************//** 709:src/l502_user_process.c **** @brief Обработка пользовательских команд. 710:src/l502_user_process.c **** 711:src/l502_user_process.c **** Функция вызывается при приеме команды от ПК с кодом 712:src/l502_user_process.c **** #L502_BF_CMD_CODE_USER. 713:src/l502_user_process.c **** 714:src/l502_user_process.c **** По завершению обработки необходимо обязательно выз 715:src/l502_user_process.c **** l502_cmd_done(), указав код завершения команды и 716:src/l502_user_process.c **** при необходимости передать данные с результатом 717:src/l502_user_process.c **** 718:src/l502_user_process.c **** @param[in] cmd Структура с описанием принятой команды 719:src/l502_user_process.c **** ******************************************************************************/ 720:src/l502_user_process.c **** 721:src/l502_user_process.c **** 722:src/l502_user_process.c **** void usr_cmd_process(t_l502_bf_cmd *cmd) { BFIN GAS /tmp/ccYZl5FJ.s page 14 16 .loc 1 722 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: 723:src/l502_user_process.c **** switch (cmd->code){ 24 .loc 1 723 0 25 0008 21E1FF7F R1 = 32767 (X); 724:src/l502_user_process.c **** 725:src/l502_user_process.c **** 726:src/l502_user_process.c **** /* 727:src/l502_user_process.c **** Command template 728:src/l502_user_process.c **** case 0x800?:{ 729:src/l502_user_process.c **** 730:src/l502_user_process.c **** l502_cmd_done(rcv_code, rcv_data, rcv_data_length); //void l502_cmd_done (int32_t result, uint32_ 731:src/l502_user_process.c **** break; 732:src/l502_user_process.c **** } 733:src/l502_user_process.c **** */ 734:src/l502_user_process.c **** // typedef struct { 735:src/l502_user_process.c **** // uint16_t code; /**< Код команды из #t_l502_bf_cmd_code */ 736:src/l502_user_process.c **** // uint16_t status; /**< Статус выполнения - в обработчике не и 737:src/l502_user_process.c **** // uint32_t param; /**< Параметр команды */ 738:src/l502_user_process.c **** // int32_t result; /**< Код результата выполнения команды */ 739:src/l502_user_process.c **** // uint32_t data_size; /**< Количество данных, переданных с кома 740:src/l502_user_process.c **** // uint32_t data[L502_BF_CMD_DATA_SIZE_MAX]; /**< Данные, передаваемые с к 741:src/l502_user_process.c **** // } t_l502_bf_cmd; 742:src/l502_user_process.c **** 743:src/l502_user_process.c **** 744:src/l502_user_process.c **** 745:src/l502_user_process.c **** 746:src/l502_user_process.c **** case 0x8001:{ //L502_BF_USR_CMD_CODE_ECHO 747:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 748:src/l502_user_process.c **** break; 749:src/l502_user_process.c **** } 750:src/l502_user_process.c **** 751:src/l502_user_process.c **** case 0x8002:{ //L502_BF_USR_CMD_CODE_DATA_ECHO 752:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 753:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 754:src/l502_user_process.c **** //rcv_data[I] = (cmd-> data)[I]; 755:src/l502_user_process.c **** rcv_data[I] = I; 756:src/l502_user_process.c **** } 757:src/l502_user_process.c **** l502_cmd_done(cmd-> param, rcv_data, cmd->data_size); 758:src/l502_user_process.c **** break; 759:src/l502_user_process.c **** } 760:src/l502_user_process.c **** case 0x8003:{ //configure ADC 761:src/l502_user_process.c **** uint32_t err_codes[15] = {0,}; 762:src/l502_user_process.c **** err_codes[0] = params_set_lch_cnt(1); 763: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 764: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, 765:src/l502_user_process.c **** err_codes[2] = params_set_adc_freq_div(1); 766:src/l502_user_process.c **** err_codes[3] = params_set_ref_freq(2000000); 767:src/l502_user_process.c **** err_codes[4] = params_set_adc_interframe_delay(0); 768:src/l502_user_process.c **** err_codes[5] = params_set_sync_mode (L502_SYNC_INTERNAL); 769:src/l502_user_process.c **** err_codes[6] = params_set_sync_start_mode (L502_SYNC_INTERNAL); BFIN GAS /tmp/ccYZl5FJ.s page 15 770:src/l502_user_process.c **** //err_codes[7] = params_set_din_freq_div; 771:src/l502_user_process.c **** //err_codes[8] = params_set_dac_freq_div; 772:src/l502_user_process.c **** 773:src/l502_user_process.c **** err_codes[9] = sport_in_set_step_size(1024); 774:src/l502_user_process.c **** 775:src/l502_user_process.c **** //L502_BF_PARAM_ADC_COEF 776:src/l502_user_process.c **** //err_codes[10] = fpga_reg_write(f_regaddr_k[range], ??); 777:src/l502_user_process.c **** //err_codes[11] = fpga_reg_write(f_regaddr_offs[range], ??); 778:src/l502_user_process.c **** err_codes[12] = configure(); 779:src/l502_user_process.c **** 780:src/l502_user_process.c **** 781:src/l502_user_process.c **** 782:src/l502_user_process.c **** 783:src/l502_user_process.c **** uint32_t err_codes_sum = 0; 784:src/l502_user_process.c **** for (int i = 0; i < 15; ++i){ 785:src/l502_user_process.c **** err_codes_sum += err_codes[i]; 786:src/l502_user_process.c **** } 787:src/l502_user_process.c **** l502_cmd_done(err_codes_sum, err_codes, 15); 788:src/l502_user_process.c **** break; 789:src/l502_user_process.c **** } 790:src/l502_user_process.c **** case 0x8004:{ //start streams 791:src/l502_user_process.c **** uint32_t err_codes[5] = {0,}; 792:src/l502_user_process.c **** l502_stream_init(); 793:src/l502_user_process.c **** err_codes[0] = stream_enable(L502_STREAM_ADC | L502_STREAM_DIN); //bitmask 794:src/l502_user_process.c **** err_codes[1] = stream_out_preload(); 795:src/l502_user_process.c **** err_codes[2] = streams_start(); 796:src/l502_user_process.c **** //hdma_send_start(); 797:src/l502_user_process.c **** l502_cmd_done(0, err_codes, 5); 798:src/l502_user_process.c **** break; 799:src/l502_user_process.c **** } 800:src/l502_user_process.c **** case 0x8005:{ //get some data from adc buff. Or simple flag, raised inside usr_in_proc_data() 801:src/l502_user_process.c **** 802:src/l502_user_process.c **** uint32_t streams_sum = streams_cnt[0] + streams_cnt[1] + streams_cnt[2] + streams_cnt[3]; 803:src/l502_user_process.c **** l502_cmd_done(streams_sum, streams_cnt, 4); 804:src/l502_user_process.c **** break; 805:src/l502_user_process.c **** } 806:src/l502_user_process.c **** 807:src/l502_user_process.c **** case 0x8006:{ //get data from SPORT_RX copied arr 808:src/l502_user_process.c **** uint32_t sport_rx_nonzero_sum = 0; 809:src/l502_user_process.c **** 810:src/l502_user_process.c **** for (int i = 0; i < dbg_sport_rx_copy_size; ++i){ 811:src/l502_user_process.c **** if (dbg_sport_rx_copy[i]){ 812:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 813:src/l502_user_process.c **** } 814:src/l502_user_process.c **** } 815:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 816:src/l502_user_process.c **** break; 817:src/l502_user_process.c **** } 818:src/l502_user_process.c **** 819:src/l502_user_process.c **** 820:src/l502_user_process.c **** 821:src/l502_user_process.c **** case 0x8007:{ //start data processing: No dataprocessing. Just copy data to output buffer 822:src/l502_user_process.c **** TX_buff_I = 0; 823:src/l502_user_process.c **** 824:src/l502_user_process.c **** Proc_state.mode = TRANSPARENT; 825:src/l502_user_process.c **** Proc_state.mode_next = TRANSPARENT; 826:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_UNKNOWN; BFIN GAS /tmp/ccYZl5FJ.s page 16 827:src/l502_user_process.c **** Proc_state.average_N_max = 10; 828:src/l502_user_process.c **** // Proc_state.average_N_max = cmd->param; 829:src/l502_user_process.c **** Proc_state.average_N = 1; 830:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 831:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 832:src/l502_user_process.c **** Proc_state.AVG_state = 0; 833:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 834:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 835:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; 836:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 837:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 838:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 839:src/l502_user_process.c **** Proc_state.AVG_buff_active = A; 840:src/l502_user_process.c **** TX_buff_state = TX_DONE; 841:src/l502_user_process.c **** 842:src/l502_user_process.c **** 843:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 844:src/l502_user_process.c **** TX_buff[i] = 0; 845:src/l502_user_process.c **** } 846:src/l502_user_process.c **** 847:src/l502_user_process.c **** // l502_cmd_done(cmd-> param, NULL, 0); 848:src/l502_user_process.c **** l502_cmd_done(TX_buff_I, NULL, 0); 849:src/l502_user_process.c **** break; 850:src/l502_user_process.c **** } 851:src/l502_user_process.c **** case 0x8008:{ //AVG mode 852:src/l502_user_process.c **** TX_buff_I = 0; 853:src/l502_user_process.c **** 854:src/l502_user_process.c **** Proc_state.mode = AVG; 855:src/l502_user_process.c **** Proc_state.mode_next = AVG; 856:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_UNKNOWN; 857:src/l502_user_process.c **** Proc_state.average_N_max = 30; 858:src/l502_user_process.c **** // Proc_state.average_N_max = cmd->param; 859:src/l502_user_process.c **** Proc_state.average_N = 0; 860:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 861:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 862:src/l502_user_process.c **** Proc_state.AVG_state = 0; 863:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 864:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 865:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; 866:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 867:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 868:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 869:src/l502_user_process.c **** Proc_state.AVG_buff_active = A; 870:src/l502_user_process.c **** TX_buff_state = TX_DONE; 871:src/l502_user_process.c **** 872:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 873:src/l502_user_process.c **** TX_buff[i] = 0; 874:src/l502_user_process.c **** } 875:src/l502_user_process.c **** 876:src/l502_user_process.c **** // l502_cmd_done(cmd-> param, NULL, 0); 877:src/l502_user_process.c **** l502_cmd_done(TX_buff_I, NULL, 0); 878:src/l502_user_process.c **** 879:src/l502_user_process.c **** break; 880:src/l502_user_process.c **** } 881:src/l502_user_process.c **** case 0x8009:{ //request TX_buff_I_shadow value (last size of TX_buff transferred to pc ) 882:src/l502_user_process.c **** l502_cmd_done(TX_buff_I_shadow, NULL, 0); 883:src/l502_user_process.c **** break; BFIN GAS /tmp/ccYZl5FJ.s page 17 884:src/l502_user_process.c **** } 885:src/l502_user_process.c **** case 0x800A:{ //return uint32_t value stored in dbg_receive_value 886:src/l502_user_process.c **** l502_cmd_done(dbg_receive_value, NULL, 0); 887:src/l502_user_process.c **** break; 888:src/l502_user_process.c **** } 889:src/l502_user_process.c **** 890:src/l502_user_process.c **** case 0x800B:{ //return uint32_t value stored in dbg_receive_value 891:src/l502_user_process.c **** Proc_state.mode = FLOOD; 892:src/l502_user_process.c **** l502_cmd_done(0, NULL, 0); 893:src/l502_user_process.c **** break; 894:src/l502_user_process.c **** } 895:src/l502_user_process.c **** 896:src/l502_user_process.c **** 897:src/l502_user_process.c **** 898:src/l502_user_process.c **** 899:src/l502_user_process.c **** case 0x8010:{ //flush HDMA TX buffer 900:src/l502_user_process.c **** int number_of_free_tx_descriptors = hdma_send_req_rdy(); 901:src/l502_user_process.c **** hdma_send_stop(); 902:src/l502_user_process.c **** hdma_send_start(); 903:src/l502_user_process.c **** l502_cmd_done(number_of_free_tx_descriptors, NULL, 0); 904:src/l502_user_process.c **** break; 905:src/l502_user_process.c **** } 906:src/l502_user_process.c **** case 0x8011:{ //L502_BF_USR_CMD_CODE_ECHO 907:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 908:src/l502_user_process.c **** break; 909:src/l502_user_process.c **** } 910:src/l502_user_process.c **** case 0x8012:{ //L502_BF_USR_CMD_CODE_ECHO 911:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 912:src/l502_user_process.c **** break; 913:src/l502_user_process.c **** } 914:src/l502_user_process.c **** case 0x8013:{ //L502_BF_USR_CMD_CODE_ECHO 915:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 916:src/l502_user_process.c **** break; 917:src/l502_user_process.c **** } 918:src/l502_user_process.c **** case 0x8014:{ //L502_BF_USR_CMD_CODE_ECHO 919:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 920:src/l502_user_process.c **** break; 921:src/l502_user_process.c **** } 922:src/l502_user_process.c **** case 0x8015:{ //L502_BF_USR_CMD_CODE_ECHO 923:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 924:src/l502_user_process.c **** break; 925:src/l502_user_process.c **** } 926:src/l502_user_process.c **** 927:src/l502_user_process.c **** 928:src/l502_user_process.c **** 929:src/l502_user_process.c **** /* 930:src/l502_user_process.c **** case 0x8002:{ 931:src/l502_user_process.c **** cmd-> result = cmd->param * 2; 932:src/l502_user_process.c **** uint32_t data[] = {0,1,2,3,4,5,6,5,4,3,2,1,0}; 933:src/l502_user_process.c **** l502_cmd_done(cmd-> param*3, data, 13); 934:src/l502_user_process.c **** break;} 935:src/l502_user_process.c **** case 0x8001:{ 936:src/l502_user_process.c **** //cmd-> result = cmd->param * 2; 937:src/l502_user_process.c **** uint32_t data[] = {6,5,4,3,2,1,0,1,2,3,4,5,6}; 938:src/l502_user_process.c **** l502_cmd_done(cmd-> param*75, data, 13); 939:src/l502_user_process.c **** break;} 940:src/l502_user_process.c **** */ BFIN GAS /tmp/ccYZl5FJ.s page 18 941:src/l502_user_process.c **** 942:src/l502_user_process.c **** default: { 943:src/l502_user_process.c **** l502_cmd_done(1, NULL, 0); 944:src/l502_user_process.c **** } 945:src/l502_user_process.c **** } 946:src/l502_user_process.c **** //l502_cmd_done(1, 1, 1); 947:src/l502_user_process.c **** //l502_cmd_done(L502_BF_ERR_UNSUP_CMD, NULL, 0); 948:src/l502_user_process.c **** } 26 .loc 1 948 0 27 000c 7630 R6 = SP; 723:src/l502_user_process.c **** switch (cmd->code){ 28 .loc 1 723 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 .L52 (bp); 36 .L2: 943:src/l502_user_process.c **** l502_cmd_done(1, NULL, 0); 37 .loc 1 943 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 .L46: 44 .loc 1 948 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 .L52: 723:src/l502_user_process.c **** switch (cmd->code){ 54 .loc 1 723 0 55 002e 0832 P1 = R0; 56 0030 4AE10000 P2.H = .L20; 57 0034 0AE10000 P2.L = .L20; 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 .L20: 65 0000 3E000000 .dd .L19; 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; BFIN GAS /tmp/ccYZl5FJ.s page 19 72 001c 96020000 .dd .L10; 73 0020 0A030000 .dd .L11; 74 0024 1E030000 .dd .L12; 75 0028 32030000 .dd .L13; 76 002c 1A000000 .dd .L2; 77 0030 1A000000 .dd .L2; 78 0034 1A000000 .dd .L2; 79 0038 1A000000 .dd .L2; 80 003c 52000000 .dd .L14; 81 0040 3E000000 .dd .L19; 82 0044 3E000000 .dd .L19; 83 0048 3E000000 .dd .L19; 84 004c 3E000000 .dd .L19; 85 0050 3E000000 .dd .L19; 86 .text; 87 .L19: 923:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 88 .loc 1 923 0 89 003e 40A0 R0 = [P0+4]; 90 0040 0160 R1 = 0 (X); 91 0042 0260 R2 = 0 (X); 92 0044 FFE3DEFF call _l502_cmd_done; 93 .LVL5: 94 .loc 1 948 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 .L14: 103 .LBB2: 900:src/l502_user_process.c **** int number_of_free_tx_descriptors = hdma_send_req_rdy(); 104 .loc 1 900 0 105 0052 FFE3D7FF call _hdma_send_req_rdy; 106 .LVL7: 107 0056 3830 R7 = R0; 108 .LVL8: 901:src/l502_user_process.c **** hdma_send_stop(); 109 .loc 1 901 0 110 0058 FFE3D4FF call _hdma_send_stop; 902:src/l502_user_process.c **** hdma_send_start(); 111 .loc 1 902 0 112 005c FFE3D2FF call _hdma_send_start; 903:src/l502_user_process.c **** l502_cmd_done(number_of_free_tx_descriptors, NULL, 0); 113 .loc 1 903 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 .L46; 119 .LVL9: 120 .L4: 121 .LBE2: 122 .LBB3: 752:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; BFIN GAS /tmp/ccYZl5FJ.s page 20 123 .loc 1 752 0 124 006c C1AC P1 = [P0+12]; 125 .LBE3: 748:src/l502_user_process.c **** break; 126 .loc 1 748 0 127 006e 7E30 R7 = SP; 128 .LBB6: 752:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 129 .loc 1 752 0 130 0070 4A44 P2 = P1 << 2; 131 0072 226C P2 += 4; 132 0074 1644 SP -= P2; 133 0076 4E30 R1 = SP; 134 .LBB4: 753:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 135 .loc 1 753 0 136 0078 5130 R2 = P1; 137 .LBE4: 752:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 138 .loc 1 752 0 139 007a C164 R1 += 24; 140 .LBB5: 753:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 141 .loc 1 753 0 142 007c 020C cc =R2==0; 143 007e 0818 if cc jump .L22; 144 0080 1132 P2 = R1; 145 0082 0060 R0 = 0 (X); 146 .LVL10: 147 .L23: 755:src/l502_user_process.c **** rcv_data[I] = I; 148 .loc 1 755 0 149 0084 1092 [P2++] = R0; 753:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 150 .loc 1 753 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 .L23 (bp); 155 .L22: 156 .LBE5: 757:src/l502_user_process.c **** l502_cmd_done(cmd-> param, rcv_data, cmd->data_size); 157 .loc 1 757 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 .L46; 164 .LVL13: 165 .L5: 166 .LBE6: 167 .LBB7: 761:src/l502_user_process.c **** uint32_t err_codes[15] = {0,}; 168 .loc 1 761 0 169 0098 2AE1B0FF P2 = -80 (X); 170 009c 575B P5 = FP + P2; BFIN GAS /tmp/ccYZl5FJ.s page 21 171 009e 0160 R1 = 0 (X); 172 00a0 E261 R2 = 60 (X); 173 00a2 4530 R0 = P5; 174 00a4 FFE3AEFF call _memset; 175 .LVL14: 762:src/l502_user_process.c **** err_codes[0] = params_set_lch_cnt(1); 176 .loc 1 762 0 177 00a8 0860 R0 = 1 (X); 178 00aa FFE3ABFF call _params_set_lch_cnt; 179 00ae C0BA [FP+-80] = R0; 764: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 764 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; 188 00c0 0260 R2 = 0 (X); 189 00c2 FFE39FFF call _params_set_lch; 190 00c6 D0BA [FP+-76] = R0; 765:src/l502_user_process.c **** err_codes[2] = params_set_adc_freq_div(1); 191 .loc 1 765 0 192 00c8 0860 R0 = 1 (X); 193 00ca FFE39BFF call _params_set_adc_freq_div; 194 00ce E0BA [FP+-72] = R0; 766:src/l502_user_process.c **** err_codes[3] = params_set_ref_freq(2000000); 195 .loc 1 766 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; 767:src/l502_user_process.c **** err_codes[4] = params_set_adc_interframe_delay(0); 200 .loc 1 767 0 201 00dc 0060 R0 = 0 (X); 202 00de FFE391FF call _params_set_adc_interframe_delay; 203 00e2 00BB [FP+-64] = R0; 768:src/l502_user_process.c **** err_codes[5] = params_set_sync_mode (L502_SYNC_INTERNAL); 204 .loc 1 768 0 205 00e4 0060 R0 = 0 (X); 206 00e6 FFE38DFF call _params_set_sync_mode; 207 00ea 10BB [FP+-60] = R0; 769:src/l502_user_process.c **** err_codes[6] = params_set_sync_start_mode (L502_SYNC_INTERNAL); 208 .loc 1 769 0 209 00ec 0060 R0 = 0 (X); 210 00ee FFE389FF call _params_set_sync_start_mode; 211 00f2 20BB [FP+-56] = R0; 773:src/l502_user_process.c **** err_codes[9] = sport_in_set_step_size(1024); 212 .loc 1 773 0 213 00f4 20E10004 R0 = 1024 (X); 214 00f8 FFE384FF call _sport_in_set_step_size; 215 00fc 50BB [FP+-44] = R0; 778:src/l502_user_process.c **** err_codes[12] = configure(); 216 .loc 1 778 0 217 00fe FFE381FF call _configure; BFIN GAS /tmp/ccYZl5FJ.s page 22 218 .LBB8: 785:src/l502_user_process.c **** err_codes_sum += err_codes[i]; 219 .loc 1 785 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]; 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: 787:src/l502_user_process.c **** l502_cmd_done(err_codes_sum, err_codes, 15); 262 .loc 1 787 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 .L46; 270 .LVL29: 271 .L6: BFIN GAS /tmp/ccYZl5FJ.s page 23 272 .LBE7: 273 .LBB9: 791:src/l502_user_process.c **** uint32_t err_codes[5] = {0,}; 274 .loc 1 791 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; 792:src/l502_user_process.c **** l502_stream_init(); 281 .loc 1 792 0 282 0156 FFE355FF call _l502_stream_init; 283 .LVL30: 793:src/l502_user_process.c **** err_codes[0] = stream_enable(L502_STREAM_ADC | L502_STREAM_DIN); //bitmask 284 .loc 1 793 0 285 015a 1860 R0 = 3 (X); 286 015c FFE352FF call _stream_enable; 287 0160 B0BB [FP+-20] = R0; 794:src/l502_user_process.c **** err_codes[1] = stream_out_preload(); 288 .loc 1 794 0 289 0162 FFE34FFF call _stream_out_preload; 290 0166 C0BB [FP+-16] = R0; 795:src/l502_user_process.c **** err_codes[2] = streams_start(); 291 .loc 1 795 0 292 0168 FFE34CFF call _streams_start; 293 016c D0BB [FP+-12] = R0; 797:src/l502_user_process.c **** l502_cmd_done(0, err_codes, 5); 294 .loc 1 797 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 .L46; 301 .LVL31: 302 .L7: 303 .LBE9: 304 .LBB10: 803:src/l502_user_process.c **** l502_cmd_done(streams_sum, streams_cnt, 4); 305 .loc 1 803 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 .L46; 320 .LVL33: 321 .L8: BFIN GAS /tmp/ccYZl5FJ.s page 24 804:src/l502_user_process.c **** break; 322 .loc 1 804 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: 812:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 331 .loc 1 812 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]; 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; BFIN GAS /tmp/ccYZl5FJ.s page 25 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: 815:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 389 .loc 1 815 0 390 01fa 51A2 R1 = [P2+36]; 391 .LBB13: 812:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 392 .loc 1 812 0 393 01fc 1030 R2 = R0; 394 .LBE13: 815:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 395 .loc 1 815 0 396 01fe 010C cc =R1==0; 397 .LBB14: 812:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 398 .loc 1 812 0 399 0200 0A64 R2 += 1; 400 .LVL50: 401 .LBE14: 815:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 402 .loc 1 815 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 .L46; 410 .LVL53: 411 .L9: 412 .LBE11: 822:src/l502_user_process.c **** TX_buff_I = 0; 413 .loc 1 822 0 414 0210 4CE10000 P4.H = _TX_buff_I; 415 0214 0260 R2 = 0 (X); 416 0216 0CE11800 P4.L = _TX_buff_I; 824:src/l502_user_process.c **** Proc_state.mode = TRANSPARENT; 417 .loc 1 824 0 418 021a 4AE10000 P2.H = _Proc_state; 822:src/l502_user_process.c **** TX_buff_I = 0; 419 .loc 1 822 0 420 021e 2293 [P4] = R2; 824:src/l502_user_process.c **** Proc_state.mode = TRANSPARENT; 421 .loc 1 824 0 422 0220 0AE12C00 P2.L = _Proc_state; 423 0224 0860 R0 = 1 (X); 424 0226 109B B [P2] = R0; BFIN GAS /tmp/ccYZl5FJ.s page 26 825:src/l502_user_process.c **** Proc_state.mode_next = TRANSPARENT; 425 .loc 1 825 0 426 0228 90E60100 B [P2+1] = R0; 826:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_UNKNOWN; 427 .loc 1 826 0 428 022c 0160 R1 = 0 (X); 429 022e 91E60300 B [P2+3] = R1; 827:src/l502_user_process.c **** Proc_state.average_N_max = 10; 430 .loc 1 827 0 431 0232 5060 R0 = 10 (X); 432 0234 90B4 W [P2+4] = R0; 829:src/l502_user_process.c **** Proc_state.average_N = 1; 433 .loc 1 829 0 434 0236 0860 R0 = 1 (X); 435 0238 D0B4 W [P2+6] = R0; 830:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 436 .loc 1 830 0 437 023a 92B0 [P2+8] = R2; 831:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 438 .loc 1 831 0 439 023c 91E60C00 B [P2+12] = R1; 832:src/l502_user_process.c **** Proc_state.AVG_state = 0; 440 .loc 1 832 0 441 0240 91E61400 B [P2+20] = R1; 833:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 442 .loc 1 833 0 443 0244 12B1 [P2+16] = R2; 834:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 444 .loc 1 834 0 445 0246 91E61500 B [P2+21] = R1; 835:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; 446 .loc 1 835 0 447 024a 92B1 [P2+24] = R2; 836:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 448 .loc 1 836 0 449 024c 91E61C00 B [P2+28] = R1; 837:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 450 .loc 1 837 0 451 0250 12B2 [P2+32] = R2; 838:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 452 .loc 1 838 0 453 0252 52B2 [P2+36] = R2; 839:src/l502_user_process.c **** Proc_state.AVG_buff_active = A; 454 .loc 1 839 0 455 0254 91E61600 B [P2+22] = R1; 840:src/l502_user_process.c **** TX_buff_state = TX_DONE; 456 .loc 1 840 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 .LBB15: 844:src/l502_user_process.c **** TX_buff[i] = 0; 463 .loc 1 844 0 464 0268 49E10100 P1.H = 1; 465 .LBE15: BFIN GAS /tmp/ccYZl5FJ.s page 27 840:src/l502_user_process.c **** TX_buff_state = TX_DONE; 466 .loc 1 840 0 467 026c 0068 P0 = 0 (X); 468 .LVL54: 469 026e 0DE10000 P5.L = _TX_buff; 470 .LBB16: 844:src/l502_user_process.c **** TX_buff[i] = 0; 471 .loc 1 844 0 472 0272 0060 R0 = 0 (X); 473 0274 09E1A086 P1.L = 34464; 474 0278 B2E00410 LSETUP (.L44, .L54) LC1 = P1; 475 .L44: 476 027c 855E P2 = P5 + (P0 << 2); 477 027e 1093 [P2] = R0; 478 .L54: 843:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 479 .loc 1 843 0 480 0280 086C P0 += 1; 481 .LVL55: 482 .L50: 483 .LBE16: 877:src/l502_user_process.c **** l502_cmd_done(TX_buff_I, NULL, 0); 484 .loc 1 877 0 485 0282 2091 R0 = [P4]; 486 0284 0160 R1 = 0 (X); 487 0286 0260 R2 = 0 (X); 488 0288 FFE3BCFE call _l502_cmd_done; 489 .LVL56: 490 .loc 1 948 0 491 028c 3632 SP = R6; 492 028e 01E80000 UNLINK; 493 0292 B405 ( r7:6, p5:4 ) = [sp++]; 494 495 .LCFI4: 496 0294 1000 rts; 497 .LVL57: 498 .L10: 852:src/l502_user_process.c **** TX_buff_I = 0; 499 .loc 1 852 0 500 0296 4CE10000 P4.H = _TX_buff_I; 501 029a 0260 R2 = 0 (X); 502 029c 0CE11800 P4.L = _TX_buff_I; 854:src/l502_user_process.c **** Proc_state.mode = AVG; 503 .loc 1 854 0 504 02a0 4AE10000 P2.H = _Proc_state; 852:src/l502_user_process.c **** TX_buff_I = 0; 505 .loc 1 852 0 506 02a4 2293 [P4] = R2; 854:src/l502_user_process.c **** Proc_state.mode = AVG; 507 .loc 1 854 0 508 02a6 0AE12C00 P2.L = _Proc_state; 509 02aa 1060 R0 = 2 (X); 510 02ac 109B B [P2] = R0; 855:src/l502_user_process.c **** Proc_state.mode_next = AVG; 511 .loc 1 855 0 512 02ae 90E60100 B [P2+1] = R0; 856:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_UNKNOWN; BFIN GAS /tmp/ccYZl5FJ.s page 28 513 .loc 1 856 0 514 02b2 0160 R1 = 0 (X); 515 02b4 91E60300 B [P2+3] = R1; 857:src/l502_user_process.c **** Proc_state.average_N_max = 30; 516 .loc 1 857 0 517 02b8 F060 R0 = 30 (X); 518 02ba 90B4 W [P2+4] = R0; 859:src/l502_user_process.c **** Proc_state.average_N = 0; 519 .loc 1 859 0 520 02bc 0060 R0 = 0 (X); 521 02be D0B4 W [P2+6] = R0; 860:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 522 .loc 1 860 0 523 02c0 92B0 [P2+8] = R2; 861:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 524 .loc 1 861 0 525 02c2 91E60C00 B [P2+12] = R1; 862:src/l502_user_process.c **** Proc_state.AVG_state = 0; 526 .loc 1 862 0 527 02c6 91E61400 B [P2+20] = R1; 863:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 528 .loc 1 863 0 529 02ca 12B1 [P2+16] = R2; 864:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 530 .loc 1 864 0 531 02cc 91E61500 B [P2+21] = R1; 865:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; 532 .loc 1 865 0 533 02d0 92B1 [P2+24] = R2; 866:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 534 .loc 1 866 0 535 02d2 91E61C00 B [P2+28] = R1; 867:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 536 .loc 1 867 0 537 02d6 12B2 [P2+32] = R2; 868:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 538 .loc 1 868 0 539 02d8 52B2 [P2+36] = R2; 869:src/l502_user_process.c **** Proc_state.AVG_buff_active = A; 540 .loc 1 869 0 541 02da 91E61600 B [P2+22] = R1; 870:src/l502_user_process.c **** TX_buff_state = TX_DONE; 542 .loc 1 870 0 543 02de 4AE10000 P2.H = _TX_buff_state; 544 02e2 1860 R0 = 3 (X); 545 02e4 0AE13000 P2.L = _TX_buff_state; 546 02e8 109B B [P2] = R0; 547 02ea 4DE10000 P5.H = _TX_buff; 548 .LBB17: 873:src/l502_user_process.c **** TX_buff[i] = 0; 549 .loc 1 873 0 550 02ee 49E10100 P1.H = 1; 551 .LBE17: 870:src/l502_user_process.c **** TX_buff_state = TX_DONE; 552 .loc 1 870 0 553 02f2 0068 P0 = 0 (X); 554 .LVL58: BFIN GAS /tmp/ccYZl5FJ.s page 29 555 02f4 0DE10000 P5.L = _TX_buff; 556 .LBB18: 873:src/l502_user_process.c **** TX_buff[i] = 0; 557 .loc 1 873 0 558 02f8 0060 R0 = 0 (X); 559 02fa 09E1A086 P1.L = 34464; 560 02fe B2E00410 LSETUP (.L45, .L53) LC1 = P1; 561 .L45: 562 0302 855E P2 = P5 + (P0 << 2); 563 0304 1093 [P2] = R0; 564 .L53: 872:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 565 .loc 1 872 0 566 0306 086C P0 += 1; 567 0308 BD2F jump.s .L50; 568 .LVL59: 569 .L11: 570 .LBE18: 882:src/l502_user_process.c **** l502_cmd_done(TX_buff_I_shadow, NULL, 0); 571 .loc 1 882 0 572 030a 4AE10000 P2.H = _TX_buff_I_shadow; 573 030e 0AE12C00 P2.L = _TX_buff_I_shadow; 574 0312 1091 R0 = [P2]; 575 0314 0160 R1 = 0 (X); 576 0316 0260 R2 = 0 (X); 577 0318 FFE374FE call _l502_cmd_done; 578 .LVL60: 579 031c 842E jump.s .L46; 580 .LVL61: 581 .L12: 886:src/l502_user_process.c **** l502_cmd_done(dbg_receive_value, NULL, 0); 582 .loc 1 886 0 583 031e 4AE10000 P2.H = _dbg_receive_value; 584 0322 0AE10000 P2.L = _dbg_receive_value; 585 0326 1091 R0 = [P2]; 586 0328 0160 R1 = 0 (X); 587 032a 0260 R2 = 0 (X); 588 032c FFE36AFE call _l502_cmd_done; 589 .LVL62: 590 0330 7A2E jump.s .L46; 591 .LVL63: 592 .L13: 891:src/l502_user_process.c **** Proc_state.mode = FLOOD; 593 .loc 1 891 0 594 0332 4AE10000 P2.H = _Proc_state; 595 0336 3060 R0 = 6 (X); 596 0338 0AE12C00 P2.L = _Proc_state; 597 033c 109B B [P2] = R0; 892:src/l502_user_process.c **** l502_cmd_done(0, NULL, 0); 598 .loc 1 892 0 599 033e 0060 R0 = 0 (X); 600 0340 0160 R1 = 0 (X); 601 0342 0260 R2 = 0 (X); 602 0344 FFE35EFE call _l502_cmd_done; 603 .LVL64: 604 0348 6E2E jump.s .L46; 605 .LFE6: BFIN GAS /tmp/ccYZl5FJ.s page 30 606 .size _usr_cmd_process, .-_usr_cmd_process 607 034a 0000 .align 4 608 .global _sport_tx_done; 609 .type _sport_tx_done, STT_FUNC; 610 _sport_tx_done: 611 .LFB5: 694:src/l502_user_process.c **** void sport_tx_done(uint32_t* addr, uint32_t size) { 612 .loc 1 694 0 613 .LVL65: 695:src/l502_user_process.c **** ++streams_cnt[1]; 614 .loc 1 695 0 615 034c 4AE10000 P2.H = _streams_cnt; 694:src/l502_user_process.c **** void sport_tx_done(uint32_t* addr, uint32_t size) { 616 .loc 1 694 0 617 0350 00E80000 LINK 0; 618 .LCFI5: 695:src/l502_user_process.c **** ++streams_cnt[1]; 619 .loc 1 695 0 620 0354 0AE10000 P2.L = _streams_cnt; 621 0358 50A0 R0 = [P2+4]; 622 .LVL66: 623 035a 0864 R0 += 1; 624 035c 50B0 [P2+4] = R0; 697:src/l502_user_process.c **** stream_out_buf_free(size); 625 .loc 1 697 0 626 035e 0130 R0 = R1; 698:src/l502_user_process.c **** } 627 .loc 1 698 0 628 0360 01E80000 UNLINK; 697:src/l502_user_process.c **** stream_out_buf_free(size); 629 .loc 1 697 0 630 0364 FFE24EFE jump.l _stream_out_buf_free; 631 .LVL67: 632 .LFE5: 633 .size _sport_tx_done, .-_sport_tx_done 634 .align 4 635 .global _hdma_send_done; 636 .type _hdma_send_done, STT_FUNC; 637 _hdma_send_done: 638 .LFB4: 674:src/l502_user_process.c **** void hdma_send_done(uint32_t* addr, uint32_t size) { 639 .loc 1 674 0 640 .LVL68: 676:src/l502_user_process.c **** TX_buff_state = TX_DONE; 641 .loc 1 676 0 642 0368 4AE10000 P2.H = _TX_buff_state; 674:src/l502_user_process.c **** void hdma_send_done(uint32_t* addr, uint32_t size) { 643 .loc 1 674 0 644 036c 00E80000 LINK 0; 645 .LCFI6: 676:src/l502_user_process.c **** TX_buff_state = TX_DONE; 646 .loc 1 676 0 647 0370 1860 R0 = 3 (X); 648 .LVL69: 649 0372 0AE13000 P2.L = _TX_buff_state; 650 0376 109B B [P2] = R0; 677:src/l502_user_process.c **** ++streams_cnt[3]; BFIN GAS /tmp/ccYZl5FJ.s page 31 651 .loc 1 677 0 652 0378 4AE10000 P2.H = _streams_cnt; 653 037c 0AE10000 P2.L = _streams_cnt; 654 0380 D0A0 R0 = [P2+12]; 655 0382 0864 R0 += 1; 656 0384 D0B0 [P2+12] = R0; 679:src/l502_user_process.c **** stream_in_buf_free(size); 657 .loc 1 679 0 658 0386 0130 R0 = R1; 680:src/l502_user_process.c **** } 659 .loc 1 680 0 660 0388 01E80000 UNLINK; 679:src/l502_user_process.c **** stream_in_buf_free(size); 661 .loc 1 679 0 662 038c FFE23AFE jump.l _stream_in_buf_free; 663 .LVL70: 664 .LFE4: 665 .size _hdma_send_done, .-_hdma_send_done 666 .align 4 667 .global _usr_out_proc_data; 668 .type _usr_out_proc_data, STT_FUNC; 669 _usr_out_proc_data: 670 .LFB3: 638:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 671 .loc 1 638 0 672 .LVL71: 673 0390 7005 [--sp] = ( r7:6 ); 674 675 .LCFI7: 643:src/l502_user_process.c **** ++streams_cnt[2]; 676 .loc 1 643 0 677 0392 4AE10000 P2.H = _streams_cnt; 638:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 678 .loc 1 638 0 679 0396 00E80300 LINK 12; 680 .LCFI8: 643:src/l502_user_process.c **** ++streams_cnt[2]; 681 .loc 1 643 0 682 039a 0AE10000 P2.L = _streams_cnt; 638:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 683 .loc 1 638 0 684 039e 3030 R6 = R0; 643:src/l502_user_process.c **** ++streams_cnt[2]; 685 .loc 1 643 0 686 03a0 90A0 R0 = [P2+8]; 687 .LVL72: 688 03a2 0864 R0 += 1; 638:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 689 .loc 1 638 0 690 03a4 82CE01CE R7 = ROT R1 BY 0 || 690 90B00000 691 [P2+8] = R0 || 692 nop; 693 .LVL73: 645:src/l502_user_process.c **** if (sport_tx_req_rdy()) { 694 .loc 1 645 0 695 03ac FFE32AFE call _sport_tx_req_rdy; BFIN GAS /tmp/ccYZl5FJ.s page 32 696 03b0 000C cc =R0==0; 697 03b2 0E18 if cc jump .L63; 698 03b4 20E10040 R0 = 16384 (X); 699 03b8 070A cc =R7<=R0 (iu); 700 03ba 3806 if !cc R7 = R0; 701 .LVL74: 652:src/l502_user_process.c **** sport_tx_start_req(data, size); 702 .loc 1 652 0 703 03bc 0630 R0 = R6; 704 03be 0F30 R1 = R7; 705 03c0 FFE320FE call _sport_tx_start_req; 657:src/l502_user_process.c **** } 706 .loc 1 657 0 707 03c4 0730 R0 = R7; 708 03c6 01E80000 UNLINK; 709 03ca 3005 ( r7:6 ) = [sp++]; 710 711 .LCFI9: 712 .LVL75: 713 03cc 1000 rts; 714 .LVL76: 715 .L63: 645:src/l502_user_process.c **** if (sport_tx_req_rdy()) { 716 .loc 1 645 0 717 03ce 0760 R7 = 0 (X); 718 .LVL77: 657:src/l502_user_process.c **** } 719 .loc 1 657 0 720 03d0 0730 R0 = R7; 721 03d2 01E80000 UNLINK; 722 03d6 3005 ( r7:6 ) = [sp++]; 723 724 .LCFI10: 725 .LVL78: 726 03d8 1000 rts; 727 .LFE3: 728 .size _usr_out_proc_data, .-_usr_out_proc_data 729 03da 0000 .align 4 730 .global _usr_in_proc_data; 731 .type _usr_in_proc_data, STT_FUNC; 732 _usr_in_proc_data: 733 .LFB2: 161:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 734 .loc 1 161 0 735 .LVL79: 736 03dc E305 [--sp] = ( r7:4, p5:3 ); 737 738 .LCFI11: 167:src/l502_user_process.c **** if (Proc_state.mode == FLOOD){ 739 .loc 1 167 0 740 03de 47E10000 R7.H = _Proc_state; 741 03e2 07E12C00 R7.L = _Proc_state; 165:src/l502_user_process.c **** ++streams_cnt[0]; 742 .loc 1 165 0 743 03e6 4AE10000 P2.H = _streams_cnt; 167:src/l502_user_process.c **** if (Proc_state.mode == FLOOD){ 744 .loc 1 167 0 BFIN GAS /tmp/ccYZl5FJ.s page 33 745 03ea 0732 P0 = R7; 161:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 746 .loc 1 161 0 747 03ec 00E80300 LINK 12; 748 .LCFI12: 165:src/l502_user_process.c **** ++streams_cnt[0]; 749 .loc 1 165 0 750 03f0 0AE10000 P2.L = _streams_cnt; 161:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 751 .loc 1 161 0 752 03f4 1834 I3 = R0; 165:src/l502_user_process.c **** ++streams_cnt[0]; 753 .loc 1 165 0 754 03f6 1091 R0 = [P2]; 755 .LVL80: 756 03f8 0864 R0 += 1; 757 03fa 1093 [P2] = R0; 161:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 758 .loc 1 161 0 759 03fc 82CE01CC R6 = ROT R1 BY 0 || 759 40990000 760 R0 = B [P0] (X) || 761 nop; 762 .LVL81: 167:src/l502_user_process.c **** if (Proc_state.mode == FLOOD){ 763 .loc 1 167 0 764 0404 4043 R0 = R0.B (Z); 765 0406 3160 R1 = 6 (X); 766 0408 0808 cc =R0==R1; 767 040a 2F19 if cc jump .L99; 768 .LVL82: 769 .L65: 175:src/l502_user_process.c **** if (TX_buff_state == TX_DONE){ 770 .loc 1 175 0 771 040c 44E10000 R4.H = _TX_buff_state; 772 0410 04E13000 R4.L = _TX_buff_state; 773 0414 0432 P0 = R4; 774 .LVL83: 775 0416 4099 R0 = B [P0] (X); 776 0418 4043 R0 = R0.B (Z); 777 041a 180C cc =R0==3; 778 041c 0A19 if cc jump .L100; 779 .LVL84: 780 .L67: 197:src/l502_user_process.c **** if (Proc_state.mode == TRANSPARENT){ 781 .loc 1 197 0 782 041e 1732 P2 = R7; 783 0420 5099 R0 = B [P2] (X); 784 0422 4043 R0 = R0.B (Z); 785 0424 080C cc =R0==1; 786 0426 C618 if cc jump .L101; 787 .L69: 216:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 788 .loc 1 216 0 789 0428 0F32 P1 = R7; 790 042a 4899 R0 = B [P1] (X); 791 042c 4043 R0 = R0.B (Z); BFIN GAS /tmp/ccYZl5FJ.s page 34 792 042e 100C cc =R0==2; 793 0430 1B18 if cc jump .L102; 794 .LVL85: 795 .L73: 535:src/l502_user_process.c **** if (hdma_send_req_rdy()) { 796 .loc 1 535 0 797 0432 FFE3E7FD call _hdma_send_req_rdy; 798 .LVL86: 799 0436 000C cc =R0==0; 800 0438 1118 if cc jump .L103; 584:src/l502_user_process.c **** if (Proc_state.mode == FLOOD){ 801 .loc 1 584 0 802 043a 0F32 P1 = R7; 803 043c 3160 R1 = 6 (X); 804 043e 4899 R0 = B [P1] (X); 805 0440 4043 R0 = R0.B (Z); 806 0442 0808 cc =R0==R1; 807 0444 2D19 if cc jump .L104; 589:src/l502_user_process.c **** if (TX_buff_state == TODO_TX){ 808 .loc 1 589 0 809 0446 0432 P0 = R4; 810 0448 4099 R0 = B [P0] (X); 811 044a 4043 R0 = R0.B (Z); 812 044c 080C cc =R0==1; 813 044e 3319 if cc jump .L105; 814 .L83: 612:src/l502_user_process.c **** } 815 .loc 1 612 0 816 0450 0630 R0 = R6; 817 0452 01E80000 UNLINK; 818 0456 A305 ( r7:4, p5:3 ) = [sp++]; 819 820 .LCFI13: 821 .LVL87: 822 0458 1000 rts; 823 .LVL88: 824 .L103: 535:src/l502_user_process.c **** if (hdma_send_req_rdy()) { 825 .loc 1 535 0 826 045a 0660 R6 = 0 (X); 612:src/l502_user_process.c **** } 827 .loc 1 612 0 828 045c 0630 R0 = R6; 829 045e 01E80000 UNLINK; 830 0462 A305 ( r7:4, p5:3 ) = [sp++]; 831 832 .LCFI14: 833 .LVL89: 834 0464 1000 rts; 835 .LVL90: 836 .L102: 837 0466 4BE10000 P3.H = _data_I; 838 046a 0BE11C00 P3.L = _data_I; 839 .LBB19: 280:src/l502_user_process.c **** AVG_buff[Proc_state.AVG_buff_I] = 0xC0000000 | ((val + AVG_buff[Proc_state.AVG_buff_I]) & 0x 840 .loc 1 280 0 841 046e 5AE10000 B2.H = _Proc_state; BFIN GAS /tmp/ccYZl5FJ.s page 35 842 0472 50E10000 I0.H = _AVG_buff; 843 0476 5BE1FF00 B3.H = 255; 222:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 844 .loc 1 222 0 845 047a 51E10000 I1.H = _DY_SYN_2_value; 846 047e 58E10000 B0.H = _DY_SYN_2_value_prev; 239:src/l502_user_process.c **** TX_buff_I = 0; 847 .loc 1 239 0 848 0482 43E10000 R3.H = _TX_buff_I; 849 .LBB22: 250:src/l502_user_process.c **** AVG_buff[i] = 0xC2321123; 850 .loc 1 250 0 851 0486 45E132C2 R5.H = 49714; 852 048a 59E10000 B1.H = _TX_buff; 853 .LBE22: 854 .LBE19: 217:src/l502_user_process.c **** while(++data_I < size ){ 855 .loc 1 217 0 856 048e 5334 I2 = P3; 857 .LBB24: 280:src/l502_user_process.c **** AVG_buff[Proc_state.AVG_buff_I] = 0xC0000000 | ((val + AVG_buff[Proc_state.AVG_buff_I]) & 0x 858 .loc 1 280 0 859 0490 1AE12C00 B2.L = _Proc_state; 860 0494 10E10000 I0.L = _AVG_buff; 861 0498 1BE1FFFF B3.L = 65535; 222:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 862 .loc 1 222 0 863 049c 11E12900 I1.L = _DY_SYN_2_value; 864 04a0 18E12A00 B0.L = _DY_SYN_2_value_prev; 239:src/l502_user_process.c **** TX_buff_I = 0; 865 .loc 1 239 0 866 04a4 03E11800 R3.L = _TX_buff_I; 867 .LBB23: 250:src/l502_user_process.c **** AVG_buff[i] = 0xC2321123; 868 .loc 1 250 0 869 04a8 05E12311 R5.L = 4387; 870 04ac 19E10000 B1.L = _TX_buff; 871 .LVL91: 872 .L97: 873 .LBE23: 874 .LBE24: 217:src/l502_user_process.c **** while(++data_I < size ){ 875 .loc 1 217 0 876 04b0 1891 R0 = [P3]; 877 .LVL92: 878 04b2 0864 R0 += 1; 879 04b4 1893 [P3] = R0; 880 04b6 1891 R0 = [P3]; 881 04b8 060A cc =R6<=R0 (iu); 882 04ba BC1B if cc jump .L73; 883 .LBB25: 218:src/l502_user_process.c **** uint32_t word = data[data_I]; 884 .loc 1 218 0 885 04bc A232 P4 = I2; 886 04be 8332 P0 = I3; 887 .LVL93: 888 04c0 6291 P2 = [P4]; BFIN GAS /tmp/ccYZl5FJ.s page 36 889 04c2 905E P2 = P0 + (P2 << 2); 890 04c4 1091 R0 = [P2]; 891 .LVL94: 221:src/l502_user_process.c **** if (header == 0x00){ //digital_channel. switches LFSM state machine 892 .loc 1 221 0 893 04c6 82C64083 R1 = R0 >> 24; 894 04ca 010C cc =R1==0; 895 04cc 4F14 if !cc jump .L74 (bp); 222:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 896 .loc 1 222 0 897 04ce 8932 P1 = I1; 898 04d0 4999 R1 = B [P1] (X); 899 .LVL95: 900 04d2 D032 P2 = B0; 901 04d4 119B B [P2] = R1; 223:src/l502_user_process.c **** if (word & (0b1 << 17)){ 902 .loc 1 223 0 903 04d6 8848 cc = !BITTST (R0,17); 904 04d8 691C if cc jump .L75 (bp); 224:src/l502_user_process.c **** DY_SYN_2_value = 1; 905 .loc 1 224 0 906 04da 0A60 R2 = 1 (X); 229:src/l502_user_process.c **** if ((DY_SYN_2_value == 1)&& (DY_SYN_2_value_prev == 0)){ //new cycle started 907 .loc 1 229 0 908 04dc 4843 R0 = R1.B (Z); 909 .LVL96: 224:src/l502_user_process.c **** DY_SYN_2_value = 1; 910 .loc 1 224 0 911 04de 0A9B B [P1] = R2; 229:src/l502_user_process.c **** if ((DY_SYN_2_value == 1)&& (DY_SYN_2_value_prev == 0)){ //new cycle started 912 .loc 1 229 0 913 04e0 000C cc =R0==0; 914 04e2 E717 if !cc jump .L97 (bp); 231:src/l502_user_process.c **** Proc_state.average_N ++; 915 .loc 1 231 0 916 04e4 0732 P0 = R7; 232:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 917 .loc 1 232 0 918 04e6 0268 P2 = 0 (X); 231:src/l502_user_process.c **** Proc_state.average_N ++; 919 .loc 1 231 0 920 04e8 C0A8 R0 = W [P0+6] (X); 921 04ea 0864 R0 += 1; 922 04ec C0B4 W [P0+6] = R0; 232:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 923 .loc 1 232 0 924 04ee 02BD [P0+16] = P2; 233:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_STARTED; 925 .loc 1 233 0 926 04f0 82E60300 B [P0+3] = R2; 234:src/l502_user_process.c **** if (Proc_state.average_N >= Proc_state.average_N_max){ //whole average ended 927 .loc 1 234 0 928 04f4 C1A8 R1 = W [P0+6] (X); 929 04f6 80A8 R0 = W [P0+4] (X); 930 04f8 C942 R1 = R1.L (Z); 931 04fa C042 R0 = R0.L (Z); 932 04fc 8109 cc =R1= AVG_BUFF_SIZE){ 1029 .loc 1 283 0 1030 0596 00A1 R0 = [P0+16]; BFIN GAS /tmp/ccYZl5FJ.s page 39 1031 0598 21E1E703 R1 = 999 (X); 1032 059c 080A cc =R0<=R1 (iu); 1033 059e 891F if cc jump .L97 (bp); 284:src/l502_user_process.c **** Proc_state.AVG_state = STEP_COMPLETED; 1034 .loc 1 284 0 1035 05a0 1060 R0 = 2 (X); 1036 05a2 C232 P0 = B2; 1037 05a4 80E61400 B [P0+20] = R0; 1038 05a8 842F jump.s .L97; 1039 .LVL102: 1040 .L75: 226:src/l502_user_process.c **** DY_SYN_2_value = 0; 1041 .loc 1 226 0 1042 05aa 0060 R0 = 0 (X); 1043 .LVL103: 1044 05ac A132 P4 = I1; 1045 05ae 209B B [P4] = R0; 1046 05b0 802F jump.s .L97; 1047 .LVL104: 1048 .L101: 1049 .LBE25: 200:src/l502_user_process.c **** if (TX_buff_state == FILLING){ 1050 .loc 1 200 0 1051 05b2 2432 P4 = R4; 1052 05b4 6099 R0 = B [P4] (X); 1053 05b6 4043 R0 = R0.B (Z); 1054 05b8 000C cc =R0==0; 1055 05ba 3717 if !cc jump .L69 (bp); 202:src/l502_user_process.c **** TX_buff_I = 0; 1056 .loc 1 202 0 1057 05bc 42E10000 R2.H = _TX_buff_I; 1058 05c0 02E11800 R2.L = _TX_buff_I; 1059 05c4 0232 P0 = R2; 1060 .LVL105: 201:src/l502_user_process.c **** data_I = 0; 1061 .loc 1 201 0 1062 05c6 4BE10000 P3.H = _data_I; 1063 05ca 0BE11C00 P3.L = _data_I; 1064 05ce 1893 [P3] = R0; 202:src/l502_user_process.c **** TX_buff_I = 0; 1065 .loc 1 202 0 1066 05d0 0093 [P0] = R0; 203:src/l502_user_process.c **** while((++data_I < size )&& (++TX_buff_I < TX_BUFF_SIZE)){ 1067 .loc 1 203 0 1068 05d2 1891 R0 = [P3]; 1069 05d4 0864 R0 += 1; 1070 05d6 1893 [P3] = R0; 1071 05d8 1891 R0 = [P3]; 1072 05da 060A cc =R6<=R0 (iu); 1073 05dc 2618 if cc jump .L70; 1074 05de 81E19F86 R1 = 34463 (Z); 1075 05e2 814A BITSET (R1, 16); 1076 05e4 0091 R0 = [P0]; 1077 05e6 0864 R0 += 1; 1078 05e8 0093 [P0] = R0; 1079 05ea 0091 R0 = [P0]; 1080 05ec 080A cc =R0<=R1 (iu); BFIN GAS /tmp/ccYZl5FJ.s page 40 1081 05ee 1D10 if !cc jump .L70; 1082 05f0 4DE10000 P5.H = _TX_buff; 1083 05f4 0DE10000 P5.L = _TX_buff; 1084 05f8 0A20 jump.s .L71; 1085 .L107: 1086 05fa 81E19F86 R1 = 34463 (Z); 1087 05fe 0091 R0 = [P0]; 1088 0600 0864 R0 += 1; 1089 0602 0093 [P0] = R0; 1090 0604 0091 R0 = [P0]; 1091 0606 814A BITSET (R1, 16); 1092 0608 080A cc =R0<=R1 (iu); 1093 060a 0F10 if !cc jump .L70; 1094 .L71: 205:src/l502_user_process.c **** TX_buff[TX_buff_I] = data[data_I]; 1095 .loc 1 205 0 1096 060c 1232 P2 = R2; 1097 060e A332 P4 = I3; 1098 0610 5191 P1 = [P2]; 1099 0612 5A91 P2 = [P3]; 1100 0614 4D5E P1 = P5 + (P1 << 2); 1101 0616 945E P2 = P4 + (P2 << 2); 1102 0618 1091 R0 = [P2]; 1103 061a 0893 [P1] = R0; 203:src/l502_user_process.c **** while((++data_I < size )&& (++TX_buff_I < TX_BUFF_SIZE)){ 1104 .loc 1 203 0 1105 061c 1891 R0 = [P3]; 1106 061e 0864 R0 += 1; 1107 0620 1893 [P3] = R0; 1108 0622 1891 R0 = [P3]; 1109 0624 B009 cc =R0