BFIN GAS /tmp/ccBtsGqv.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 5F020000 .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/ccBtsGqv.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/ccBtsGqv.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/ccBtsGqv.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/ccBtsGqv.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 **** Proc_state.average_N = 0; 229:src/l502_user_process.c **** //if (1){ 230:src/l502_user_process.c **** Proc_state.AVG_state = FULLY_COMPLETED; 231:src/l502_user_process.c **** //averaging completed => copy average results to TX_buff and start avg again 232:src/l502_user_process.c **** TX_buff_I = 0; 233:src/l502_user_process.c **** for (uint32_t i = 0; ((TX_buff_I < TX_BUFF_SIZE) && (i < AVG_BUFF_SIZE)); i++){ 234:src/l502_user_process.c **** // uint32_t i = 0; 235:src/l502_user_process.c **** // while ((TX_buff_I < TX_BUFF_SIZE) && (i < AVG_BUFF_SIZE)){ 236:src/l502_user_process.c **** TX_buff[TX_buff_I++] = AVG_buff[i]; 237:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xB0000000 + Proc_state.average_N; 238:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xC1000000; 239:src/l502_user_process.c **** } 240:src/l502_user_process.c **** 241:src/l502_user_process.c **** //clear AVG_buff: 242:src/l502_user_process.c **** for (uint32_t i = 0; i < AVG_BUFF_SIZE; i++ ){ 243:src/l502_user_process.c **** AVG_buff[i] = 0xC2321123; 244:src/l502_user_process.c **** } 245:src/l502_user_process.c **** 246:src/l502_user_process.c **** TX_buff_state = TODO_TX; 247:src/l502_user_process.c **** /* 248:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 249:src/l502_user_process.c **** TX_buff_shadow[i] = TX_buff[i]; 250:src/l502_user_process.c **** } 251:src/l502_user_process.c **** hdma_send_req_start(TX_buff_shadow, TX_buff_I, 0); 252:src/l502_user_process.c **** hdma_send_req_start(TX_marker, 10, 0); 253:src/l502_user_process.c **** 254:src/l502_user_process.c **** 255:src/l502_user_process.c **** // hdma_send_req_start(TX_buff, TX_BUFF_SIZE, 0); 256:src/l502_user_process.c **** //TX_buff_state = TRANSMITTING; 257:src/l502_user_process.c **** TX_buff_state = TX_DONE; 258:src/l502_user_process.c **** */ 259:src/l502_user_process.c **** 260:src/l502_user_process.c **** }else{ // 261:src/l502_user_process.c **** Proc_state.AVG_state = STEP_RUNNING; 262:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 263:src/l502_user_process.c **** 264:src/l502_user_process.c **** } 265:src/l502_user_process.c **** } 266:src/l502_user_process.c **** BFIN GAS /tmp/ccBtsGqv.s page 6 267:src/l502_user_process.c **** }else if(header == 0xD0){ //first phy channel 268:src/l502_user_process.c **** // if (Proc_state.AVG_state == STEP_RUNNING){ 269:src/l502_user_process.c **** // if (Proc_state.LFSM_state == CYCLE_STARTED){ 270:src/l502_user_process.c **** if (1){ 271:src/l502_user_process.c **** if (1){ 272:src/l502_user_process.c **** // AVG_buff[Proc_state.AVG_buff_I++] = 0xC0000000 | (0x00FFFFFF & (AVG_buff[Proc_state.AVG 273:src/l502_user_process.c **** AVG_buff[Proc_state.AVG_buff_I] = 0xC0000000 | ((val + AVG_buff[Proc_state.AVG_buff_I]) & 0x 274:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I++] = 0xC0000000; 275:src/l502_user_process.c **** Proc_state.AVG_buff_I++; 276:src/l502_user_process.c **** if (Proc_state.AVG_buff_I >= AVG_BUFF_SIZE){ 277:src/l502_user_process.c **** Proc_state.AVG_state = STEP_COMPLETED; 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 **** 288:src/l502_user_process.c **** /* 289:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 290:src/l502_user_process.c **** data_I = 0; 291:src/l502_user_process.c **** //TX_buff_I = 0; 292:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 293:src/l502_user_process.c **** if (Proc_state.AVG_buff_active == A){ 294:src/l502_user_process.c **** while((data_I < size )&& (Proc_state.AVG_buff_I < (AVG_BUFF_SIZE - 10))){ 295:src/l502_user_process.c **** uint32_t word = data[data_I]; 296:src/l502_user_process.c **** //uint32_t avg_word = AVG_buff_A[Proc_state.AVG_buff_I++]; 297:src/l502_user_process.c **** //AVG_buff_A[Proc_state.AVG_buff_I] = (avg_word & 0x007FFFFF) + (word & 0x007FFFFF); 298:src/l502_user_process.c **** //AVG_buff_A[Proc_state.AVG_buff_I] = 0xDD000000 | (word & 0x00FFFFFF); 299:src/l502_user_process.c **** AVG_buff_A[Proc_state.AVG_buff_I] = word; 300:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I++] = data[data_I++]; 301:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I] = data[data_I]; 302:src/l502_user_process.c **** //uint32_t word = data[data_I]; 303:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I] = word; 304:src/l502_user_process.c **** //AVG_buff_A[Proc_state.AVG_buff_I] = 0xDD000000 | (Proc_state.AVG_buff_I & 0x00FFFFFF); 305:src/l502_user_process.c **** 306:src/l502_user_process.c **** Proc_state.AVG_buff_I++; 307:src/l502_user_process.c **** data_I++; 308:src/l502_user_process.c **** } 309:src/l502_user_process.c **** //Proc_state.AVG_buff_I++; 310:src/l502_user_process.c **** //AVG_buff_A[Proc_state.AVG_buff_I] = 0xDD000000 | (Proc_state.AVG_buff_I & 0x00FFFFFF); 311:src/l502_user_process.c **** //data_I++; 312:src/l502_user_process.c **** //Proc_state.AVG_buff_I = 0; 313:src/l502_user_process.c **** }else{ 314:src/l502_user_process.c **** while((data_I < size )&& (Proc_state.AVG_buff_I < (AVG_BUFF_SIZE - 10))){ 315:src/l502_user_process.c **** //uint32_t word = data[data_I]; 316:src/l502_user_process.c **** AVG_buff_B[Proc_state.AVG_buff_I] = 0xDE000000 | (Proc_state.AVG_buff_I & 0x00FFFFFF); 317:src/l502_user_process.c **** Proc_state.AVG_buff_I++; 318:src/l502_user_process.c **** data_I++; 319:src/l502_user_process.c **** } 320:src/l502_user_process.c **** // Proc_state.AVG_buff_I++; 321:src/l502_user_process.c **** // AVG_buff_B[Proc_state.AVG_buff_I] = 0xDD000000 | (Proc_state.AVG_buff_I & 0x00FFFFFF); 322:src/l502_user_process.c **** 323:src/l502_user_process.c **** } BFIN GAS /tmp/ccBtsGqv.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 **** /*/ 330:src/l502_user_process.c **** 331:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 332:src/l502_user_process.c **** uint32_t data_I = 0; 333:src/l502_user_process.c **** while((data_I < size )&& (TX_buff_I < (TX_BUFF_SIZE - 1))){ 334:src/l502_user_process.c **** // TX_buff[TX_buff_I++] = data[data_I++]; 335:src/l502_user_process.c **** uint32_t word = data[data_I++]; 336:src/l502_user_process.c **** TX_buff[TX_buff_I++] = (word & 0x00FFFFFF);// | 0xDE000000; 337:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = ((word & 0x00FFFFFF) | 0xDE000000); 338:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xADEFDEED; 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 **** 345:src/l502_user_process.c **** 346:src/l502_user_process.c **** // if (Proc_state.mode == AVG){ 347:src/l502_user_process.c **** //TX_buff_I = 10; 348:src/l502_user_process.c **** /* 349:src/l502_user_process.c **** uint32_t data_I = 0; 350:src/l502_user_process.c **** uint8_t new_cycle_started = 0; 351:src/l502_user_process.c **** uint8_t cycle_cont = 1; 352:src/l502_user_process.c **** while ((data_I < size) && (Proc_state.AVG_buff_I < AVG_BUFF_SIZE) && cycle_cont ){ 353:src/l502_user_process.c **** uint32_t word = data[data_I]; 354:src/l502_user_process.c **** uint32_t val = word & 0x00FFFFFF; 355:src/l502_user_process.c **** uint8_t header = (uint8_t)(word >> 24); 356:src/l502_user_process.c **** */ 357:src/l502_user_process.c **** /* 358:src/l502_user_process.c **** if (header == 0x00){ 359:src/l502_user_process.c **** Proc_state.digital_word_prev = Proc_state.digital_word_curr; 360:src/l502_user_process.c **** Proc_state.digital_word_curr = word; 361:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 362:src/l502_user_process.c **** if (word & 0b1 << 17){ 363:src/l502_user_process.c **** DY_SYN_2_value = 1; 364:src/l502_user_process.c **** }else{ 365:src/l502_user_process.c **** DY_SYN_2_value = 0; 366:src/l502_user_process.c **** } 367:src/l502_user_process.c **** 368:src/l502_user_process.c **** if ((DY_SYN_2_value == 1)&& (DY_SYN_2_value_prev == 0)){ //new cycle started 369:src/l502_user_process.c **** new_cycle_started = 1; 370:src/l502_user_process.c **** } 371:src/l502_user_process.c **** } 372:src/l502_user_process.c **** //*/ 373:src/l502_user_process.c **** /* 374:src/l502_user_process.c **** if (header == 0xD0){ //it`s first channel 375:src/l502_user_process.c **** if (new_cycle_started){ 376:src/l502_user_process.c **** new_cycle_started = 0; 377:src/l502_user_process.c **** ++Proc_state.average_N; 378:src/l502_user_process.c **** if (Proc_state.average_N >= Proc_state.average_N_max){ 379:src/l502_user_process.c **** Proc_state.mode == AVG_DONE; 380:src/l502_user_process.c **** cycle_cont = 0; //break averaging cycle BFIN GAS /tmp/ccBtsGqv.s page 8 381:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 382:src/l502_user_process.c **** } 383:src/l502_user_process.c **** }else{ 384:src/l502_user_process.c **** if (Proc_state.AVG_buff_I < AVG_BUFF_SIZE){ 385:src/l502_user_process.c **** AVG_buff[Proc_state.AVG_buff_I] =(word & 0x00FFFFFF);// | 0xDE000000; 386:src/l502_user_process.c **** //uint32_t tmp = AVG_buff[Proc_state.AVG_buff_I]; 387:src/l502_user_process.c **** //tmp += val; 388:src/l502_user_process.c **** //tmp &= 0x0FFFFFFF; 389:src/l502_user_process.c **** //AVG_buff[Proc_state.AVG_buff_I] = tmp | (0x40000000 & 0xF0000000); //set header (first 4 bit 390:src/l502_user_process.c **** 391:src/l502_user_process.c **** Proc_state.AVG_buff_I++; 392:src/l502_user_process.c **** } 393:src/l502_user_process.c **** } 394:src/l502_user_process.c **** } 395:src/l502_user_process.c **** data_I++; 396:src/l502_user_process.c **** //*/ 397:src/l502_user_process.c **** 398:src/l502_user_process.c **** // AVG_buff[Proc_state.AVG_buff_I] = 0xDDDDDDDD; 399:src/l502_user_process.c **** 400:src/l502_user_process.c **** 401:src/l502_user_process.c **** 402:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = data[data_I]; 403:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xEEEEEEEE; 404:src/l502_user_process.c **** // data_I++; 405:src/l502_user_process.c **** // Proc_state.AVG_buff_I++; 406:src/l502_user_process.c **** 407:src/l502_user_process.c **** //} 408:src/l502_user_process.c **** 409:src/l502_user_process.c **** 410:src/l502_user_process.c **** // if (Proc_state.AVG_buff_I == AVG_BUFF_SIZE){ 411:src/l502_user_process.c **** /* if (Proc_state.AVG_buff_I >= 10){ 412:src/l502_user_process.c **** Proc_state.AVG_buff_I = 10; 413:src/l502_user_process.c **** Proc_state.mode == AVG_DONE; 414:src/l502_user_process.c **** } 415:src/l502_user_process.c **** */ 416:src/l502_user_process.c **** // } 417:src/l502_user_process.c **** /* 418:src/l502_user_process.c **** if(Proc_state.mode == AVG_DONE){ //TODO: 419:src/l502_user_process.c **** if (Proc_state.TX_buff_state == 0){ 420:src/l502_user_process.c **** Proc_state.TX_buff_state = 1; //0 --ready, 1 -- filling, 2 -- ready to send 421:src/l502_user_process.c **** // Proc_state.AVG_buff_state = 1; //0 -- ready, 1 -- blocked, 422:src/l502_user_process.c **** uint32_t max_I = TX_BUFF_SIZE; 423:src/l502_user_process.c **** if (max_I > AVG_BUFF_SIZE){ 424:src/l502_user_process.c **** max_I = AVG_BUFF_SIZE; 425:src/l502_user_process.c **** } 426:src/l502_user_process.c **** for (uint32_t I = 0; I < max_I; ++I){ 427:src/l502_user_process.c **** if (TX_buff_I < TX_BUFF_SIZE){ 428:src/l502_user_process.c **** ++TX_buff_I; 429:src/l502_user_process.c **** } 430:src/l502_user_process.c **** TX_buff[TX_buff_I] = AVG_buff[I]; 431:src/l502_user_process.c **** AVG_buff[I] = 0; 432:src/l502_user_process.c **** } 433:src/l502_user_process.c **** Proc_state.TX_buff_state = 2; //0 --ready, 1 -- filling, 2 -- ready to send 434:src/l502_user_process.c **** } 435:src/l502_user_process.c **** Proc_state.mode = Proc_state.mode_next; 436:src/l502_user_process.c **** } 437:src/l502_user_process.c **** //*/ BFIN GAS /tmp/ccBtsGqv.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 **** 443:src/l502_user_process.c **** /* 444:src/l502_user_process.c **** uint32_t radar_word_I = 0; 445:src/l502_user_process.c **** 446:src/l502_user_process.c **** //uint32_t TX_buff_I = 0; 447:src/l502_user_process.c **** uint32_t word_prev = 0; 448:src/l502_user_process.c **** uint32_t digital_word_prev = 0; 449:src/l502_user_process.c **** 450:src/l502_user_process.c **** 451:src/l502_user_process.c **** 452:src/l502_user_process.c **** 453:src/l502_user_process.c **** for (int data_I = 0; (data_I < size) && (TX_buff_I < TX_BUFF_SIZE); ++data_I){ 454:src/l502_user_process.c **** uint32_t word = data[data_I]; 455:src/l502_user_process.c **** uint32_t val = word & 0x00FFFFFF; 456:src/l502_user_process.c **** uint8_t header = (uint8_t)(word >> 24); 457:src/l502_user_process.c **** //11010000 458:src/l502_user_process.c **** if (((header & 0b10000000) == 0b10000000)){ //it`s ADC word 459:src/l502_user_process.c **** if (header == 0XD0){ //phy channel № 1 in common mode 460:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = ((0b01100000 & LFSM_val_ON) << 24) & val; 461:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0xD0ADEFEA; 462:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = word; 463:src/l502_user_process.c **** 464:src/l502_user_process.c **** }else if (header == 0xD1){//phy channel № 2 in common mode 465:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 466:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = ((0b01100000 & LFSM_val_OFF) << 24) & val; 467:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xD0ADEFEB; 468:src/l502_user_process.c **** }else{ 469:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = word; 470:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 471:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xD0AAAAAA; 472:src/l502_user_process.c **** } 473:src/l502_user_process.c **** 474:src/l502_user_process.c **** 475:src/l502_user_process.c **** } else if ( header == 0b00000000){ //it`s digital 476:src/l502_user_process.c **** //if ((word & 0x2200) == 0x2200){ 477:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 478:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xAD000000; 479:src/l502_user_process.c **** 480:src/l502_user_process.c **** 481:src/l502_user_process.c **** 482:src/l502_user_process.c **** //detect rise on DI_SYN2 -- start of chirp 483:src/l502_user_process.c **** if (word & 0b1 << 17){ 484:src/l502_user_process.c **** DY_SYN_2_value = 1; 485:src/l502_user_process.c **** }else{ 486:src/l502_user_process.c **** DY_SYN_2_value = 0; 487:src/l502_user_process.c **** } 488:src/l502_user_process.c **** 489:src/l502_user_process.c **** if ((DY_SYN_2_value == 1)&& (DY_SYN_2_value_prev == 0)){ 490:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0xAD000000; 491:src/l502_user_process.c **** } 492:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 493:src/l502_user_process.c **** 494:src/l502_user_process.c **** digital_word_prev = word; BFIN GAS /tmp/ccBtsGqv.s page 10 495:src/l502_user_process.c **** } else{ 496:src/l502_user_process.c **** // TX_buff[TX_buff_I++] = word; 497:src/l502_user_process.c **** } 498:src/l502_user_process.c **** word_prev = word; 499:src/l502_user_process.c **** 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 **** // }else if ((header & 0b00000000) == ){ 504:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 505:src/l502_user_process.c **** 506:src/l502_user_process.c **** } 507:src/l502_user_process.c **** */ 508:src/l502_user_process.c **** 509:src/l502_user_process.c **** //stream_in_buf_free(size); 510:src/l502_user_process.c **** 511:src/l502_user_process.c **** /* 512:src/l502_user_process.c **** 513:src/l502_user_process.c **** //int i = 0; 514:src/l502_user_process.c **** //uint8_t 515:src/l502_user_process.c **** //while 516:src/l502_user_process.c **** 517:src/l502_user_process.c **** for (int i = 0; i < LFSM_DATALEN; ++i){ 518:src/l502_user_process.c **** uint32_t msg; 519:src/l502_user_process.c **** if (i % 2){ 520:src/l502_user_process.c **** msg = (LFSM_val_ON << 24) + data[i]; 521:src/l502_user_process.c **** }else{ 522:src/l502_user_process.c **** msg = (LFSM_val_OFF << 24) + data[i]; 523:src/l502_user_process.c **** } 524:src/l502_user_process.c **** LFSM_data[i] = msg; 525:src/l502_user_process.c **** } 526:src/l502_user_process.c **** 527:src/l502_user_process.c **** */ 528:src/l502_user_process.c **** if (hdma_send_req_rdy()) { 529:src/l502_user_process.c **** 530:src/l502_user_process.c **** //streams_cnt[0] 531:src/l502_user_process.c **** /* 532:src/l502_user_process.c **** if (Proc_state.TX_buff_state == 2){ 533:src/l502_user_process.c **** hdma_send_req_start(TX_buff, TX_BUFF_SIZE, 0); 534:src/l502_user_process.c **** }else if(0){ 535:src/l502_user_process.c **** 536:src/l502_user_process.c **** }else{ 537:src/l502_user_process.c **** hdma_send_req_start(TX_buff, TX_buff_I, 0); 538:src/l502_user_process.c **** TX_buff_I = 0; 539:src/l502_user_process.c **** //hdma_send_req_start(data, size, 0); 540:src/l502_user_process.c **** } 541:src/l502_user_process.c **** */ 542:src/l502_user_process.c **** 543:src/l502_user_process.c **** /* 544:src/l502_user_process.c **** if (Proc_state.mode == AVG_DONE){ 545:src/l502_user_process.c **** 546:src/l502_user_process.c **** uint32_t send_size = Proc_state.AVG_buff_I; 547:src/l502_user_process.c **** // uint32_t send_size = AVG_BUFF_SIZE; 548:src/l502_user_process.c **** hdma_send_req_start(AVG_buff, send_size, 0); 549:src/l502_user_process.c **** Proc_state.mode = AVG; 550:src/l502_user_process.c **** return send_size; 551:src/l502_user_process.c **** } BFIN GAS /tmp/ccBtsGqv.s page 11 552:src/l502_user_process.c **** //*/ 553:src/l502_user_process.c **** /* 554:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 555:src/l502_user_process.c **** send_size = Proc_state.AVG_buff_I; 556:src/l502_user_process.c **** //send_size = TX_buff_I; 557:src/l502_user_process.c **** //send_size = AVG_BUFF_SIZE - 500; 558:src/l502_user_process.c **** dbg_receive_value = send_size; 559:src/l502_user_process.c **** if (Proc_state.AVG_buff_active == A){ 560:src/l502_user_process.c **** hdma_send_req_start(AVG_buff_A, send_size, 0); 561:src/l502_user_process.c **** Proc_state.AVG_buff_active == B; 562:src/l502_user_process.c **** }else{ 563:src/l502_user_process.c **** hdma_send_req_start(AVG_buff_B, send_size, 0); 564:src/l502_user_process.c **** Proc_state.AVG_buff_active = A; 565:src/l502_user_process.c **** } 566:src/l502_user_process.c **** return send_size; 567:src/l502_user_process.c **** }else{ 568:src/l502_user_process.c **** hdma_send_req_start(TX_buff, TX_buff_I, 0); 569:src/l502_user_process.c **** TX_buff_I_shadow = TX_buff_I; 570:src/l502_user_process.c **** dbg_receive_value = TX_buff_I; 571:src/l502_user_process.c **** TX_buff_I = 0; 572:src/l502_user_process.c **** return TX_buff_I_shadow; 573:src/l502_user_process.c **** } 574:src/l502_user_process.c **** */ 575:src/l502_user_process.c **** 576:src/l502_user_process.c **** if (TX_buff_state == TODO_TX){ 577:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 578:src/l502_user_process.c **** TX_buff_shadow[i] = TX_buff[i]; 579:src/l502_user_process.c **** } 580:src/l502_user_process.c **** hdma_send_req_start(TX_buff_shadow, TX_buff_I, 0); 581:src/l502_user_process.c **** hdma_send_req_start(TX_marker, 10, 0); 582:src/l502_user_process.c **** 583:src/l502_user_process.c **** 584:src/l502_user_process.c **** // hdma_send_req_start(TX_buff, TX_BUFF_SIZE, 0); 585:src/l502_user_process.c **** //TX_buff_state = TRANSMITTING; 586:src/l502_user_process.c **** TX_buff_state = TX_DONE; 587:src/l502_user_process.c **** //}else{ 588:src/l502_user_process.c **** // hdma_send_req_start(data, size, 0); 589:src/l502_user_process.c **** } 590:src/l502_user_process.c **** 591:src/l502_user_process.c **** //hdma_send_req_start(data, size, 0); 592:src/l502_user_process.c **** //streams_cnt[0] = hdma_send_req_start(LFSM_data, LFSM_DATALEN, 0); 593:src/l502_user_process.c **** return size; 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 data_I; //number of really processed words 597:src/l502_user_process.c **** 598:src/l502_user_process.c **** return 0; 599:src/l502_user_process.c **** } 600:src/l502_user_process.c **** 601:src/l502_user_process.c **** 602:src/l502_user_process.c **** 603:src/l502_user_process.c **** /***************************************************************************//** 604:src/l502_user_process.c **** @brief Обработка принятого массива с данными ЦАП/DOUT 605:src/l502_user_process.c **** 606:src/l502_user_process.c **** Функция вызывается каждый раз, когда обнаружены нов 607:src/l502_user_process.c **** ПК по HDMA. 608:src/l502_user_process.c **** Функция должна обработать данные и вернуть количес BFIN GAS /tmp/ccBtsGqv.s page 12 609:src/l502_user_process.c **** однако эти данные все еще считаются использованным 610:src/l502_user_process.c **** новыми пришедшими данными) до тех пор пока не будет 611:src/l502_user_process.c **** stream_out_buf_free()). 612:src/l502_user_process.c **** 613:src/l502_user_process.c **** Если функция вернет значение меньше чем size, то функц 614:src/l502_user_process.c **** вызвана после еще раз с указателем на необработанны 615:src/l502_user_process.c **** 616:src/l502_user_process.c **** В текущей реализации просто запускается передача д 617:src/l502_user_process.c **** для вывода на ЦАП/цифровые выходы. 618:src/l502_user_process.c **** 619:src/l502_user_process.c **** @param[in] data Указатель на массив с принятыми данными 620:src/l502_user_process.c **** @param[in] size Количество принятых данных в 32-битных сло 621:src/l502_user_process.c **** @return Функция возвращает количество обработанн 622:src/l502_user_process.c **** На эти данные не будет вызываться повторн 623:src/l502_user_process.c **** но они считаются еще используемыми 624:src/l502_user_process.c **** ******************************************************************************/ 625:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 626:src/l502_user_process.c **** 627:src/l502_user_process.c **** /* если есть свободные дескрипторы на передачу по HDMA 628:src/l502_user_process.c **** передачу. Иначе возвращаем 0, чтобы на обработку эт 629:src/l502_user_process.c **** вызвали бы позже */ 630:src/l502_user_process.c **** ++streams_cnt[2]; 631:src/l502_user_process.c **** 632:src/l502_user_process.c **** if (sport_tx_req_rdy()) { 633:src/l502_user_process.c **** 634:src/l502_user_process.c **** /* за один раз можем передать в SPORT не более 635:src/l502_user_process.c **** SPORT_TX_REQ_SIZE_MAX слов */ 636:src/l502_user_process.c **** if (size > SPORT_TX_REQ_SIZE_MAX) 637:src/l502_user_process.c **** size = SPORT_TX_REQ_SIZE_MAX; 638:src/l502_user_process.c **** 639:src/l502_user_process.c **** sport_tx_start_req(data, size); 640:src/l502_user_process.c **** 641:src/l502_user_process.c **** return size; 642:src/l502_user_process.c **** } 643:src/l502_user_process.c **** return 0; 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 **** 651:src/l502_user_process.c **** /****************************************************************************//** 652:src/l502_user_process.c **** @brief Обработка завершения передачи по HostDMA 653:src/l502_user_process.c **** 654:src/l502_user_process.c **** Функция вызывается из обработчика прерывания, когд 655:src/l502_user_process.c **** блока данных по HDMA в ПК, поставленного до этого на пе 656:src/l502_user_process.c **** помощью hdma_send_req_start(). 657:src/l502_user_process.c **** 658:src/l502_user_process.c **** @param[in] addr Адрес слова, сразу за последним переданны 659:src/l502_user_process.c **** @param[in] size Размер переданных данных в 32-битных слова 660:src/l502_user_process.c **** ****************************************************************************/ 661:src/l502_user_process.c **** void hdma_send_done(uint32_t* addr, uint32_t size) { 662:src/l502_user_process.c **** 663:src/l502_user_process.c **** TX_buff_state = TX_DONE; 664:src/l502_user_process.c **** ++streams_cnt[3]; 665:src/l502_user_process.c **** BFIN GAS /tmp/ccBtsGqv.s page 13 666:src/l502_user_process.c **** stream_in_buf_free(size); 667:src/l502_user_process.c **** } 668:src/l502_user_process.c **** 669:src/l502_user_process.c **** 670:src/l502_user_process.c **** 671:src/l502_user_process.c **** /***************************************************************************//** 672:src/l502_user_process.c **** @brief Обработка завершения передачи по SPORT 673:src/l502_user_process.c **** 674:src/l502_user_process.c **** Функция вызывается из обработчика прерывания при з 675:src/l502_user_process.c **** по SPORT'у на цифровые выходы/ЦАП, поставленного до это 676:src/l502_user_process.c **** помощью sport_tx_start_req(). 677:src/l502_user_process.c **** 678:src/l502_user_process.c **** 679:src/l502_user_process.c **** @param[in] addr Адрес слова, сразу за последним переданны 680:src/l502_user_process.c **** @param[in] size Размер переданных данных в 32-битных слова 681:src/l502_user_process.c **** void sport_tx_done(uint32_t* addr, uint32_t size) { 682:src/l502_user_process.c **** ++streams_cnt[1]; 683:src/l502_user_process.c **** 684:src/l502_user_process.c **** stream_out_buf_free(size); 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 **** 695:src/l502_user_process.c **** /****************************************************************************//** 696:src/l502_user_process.c **** @brief Обработка пользовательских команд. 697:src/l502_user_process.c **** 698:src/l502_user_process.c **** Функция вызывается при приеме команды от ПК с кодом 699:src/l502_user_process.c **** #L502_BF_CMD_CODE_USER. 700:src/l502_user_process.c **** 701:src/l502_user_process.c **** По завершению обработки необходимо обязательно выз 702:src/l502_user_process.c **** l502_cmd_done(), указав код завершения команды и 703:src/l502_user_process.c **** при необходимости передать данные с результатом 704:src/l502_user_process.c **** 705:src/l502_user_process.c **** @param[in] cmd Структура с описанием принятой команды 706:src/l502_user_process.c **** ******************************************************************************/ 707:src/l502_user_process.c **** 708:src/l502_user_process.c **** 709:src/l502_user_process.c **** void usr_cmd_process(t_l502_bf_cmd *cmd) { 16 .loc 1 709 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: 710:src/l502_user_process.c **** switch (cmd->code){ 24 .loc 1 710 0 25 0008 21E1FF7F R1 = 32767 (X); 711:src/l502_user_process.c **** 712:src/l502_user_process.c **** BFIN GAS /tmp/ccBtsGqv.s page 14 713:src/l502_user_process.c **** /* 714:src/l502_user_process.c **** Command template 715:src/l502_user_process.c **** case 0x800?:{ 716:src/l502_user_process.c **** 717:src/l502_user_process.c **** l502_cmd_done(rcv_code, rcv_data, rcv_data_length); //void l502_cmd_done (int32_t result, uint32_ 718:src/l502_user_process.c **** break; 719:src/l502_user_process.c **** } 720:src/l502_user_process.c **** */ 721:src/l502_user_process.c **** // typedef struct { 722:src/l502_user_process.c **** // uint16_t code; /**< Код команды из #t_l502_bf_cmd_code */ 723:src/l502_user_process.c **** // uint16_t status; /**< Статус выполнения - в обработчике не и 724:src/l502_user_process.c **** // uint32_t param; /**< Параметр команды */ 725:src/l502_user_process.c **** // int32_t result; /**< Код результата выполнения команды */ 726:src/l502_user_process.c **** // uint32_t data_size; /**< Количество данных, переданных с кома 727:src/l502_user_process.c **** // uint32_t data[L502_BF_CMD_DATA_SIZE_MAX]; /**< Данные, передаваемые с к 728:src/l502_user_process.c **** // } t_l502_bf_cmd; 729:src/l502_user_process.c **** 730:src/l502_user_process.c **** 731:src/l502_user_process.c **** 732:src/l502_user_process.c **** 733:src/l502_user_process.c **** case 0x8001:{ //L502_BF_USR_CMD_CODE_ECHO 734:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 735:src/l502_user_process.c **** break; 736:src/l502_user_process.c **** } 737:src/l502_user_process.c **** 738:src/l502_user_process.c **** case 0x8002:{ //L502_BF_USR_CMD_CODE_DATA_ECHO 739:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 740:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 741:src/l502_user_process.c **** //rcv_data[I] = (cmd-> data)[I]; 742:src/l502_user_process.c **** rcv_data[I] = I; 743:src/l502_user_process.c **** } 744:src/l502_user_process.c **** l502_cmd_done(cmd-> param, rcv_data, cmd->data_size); 745:src/l502_user_process.c **** break; 746:src/l502_user_process.c **** } 747:src/l502_user_process.c **** case 0x8003:{ //configure ADC 748:src/l502_user_process.c **** uint32_t err_codes[15] = {0,}; 749:src/l502_user_process.c **** err_codes[0] = params_set_lch_cnt(1); 750: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 751: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, 752:src/l502_user_process.c **** err_codes[2] = params_set_adc_freq_div(1); 753:src/l502_user_process.c **** err_codes[3] = params_set_ref_freq(2000000); 754:src/l502_user_process.c **** err_codes[4] = params_set_adc_interframe_delay(0); 755:src/l502_user_process.c **** err_codes[5] = params_set_sync_mode (L502_SYNC_INTERNAL); 756:src/l502_user_process.c **** err_codes[6] = params_set_sync_start_mode (L502_SYNC_INTERNAL); 757:src/l502_user_process.c **** //err_codes[7] = params_set_din_freq_div; 758:src/l502_user_process.c **** //err_codes[8] = params_set_dac_freq_div; 759:src/l502_user_process.c **** 760:src/l502_user_process.c **** err_codes[9] = sport_in_set_step_size(1024); 761:src/l502_user_process.c **** 762:src/l502_user_process.c **** //L502_BF_PARAM_ADC_COEF 763:src/l502_user_process.c **** //err_codes[10] = fpga_reg_write(f_regaddr_k[range], ??); 764:src/l502_user_process.c **** //err_codes[11] = fpga_reg_write(f_regaddr_offs[range], ??); 765:src/l502_user_process.c **** err_codes[12] = configure(); 766:src/l502_user_process.c **** 767:src/l502_user_process.c **** 768:src/l502_user_process.c **** 769:src/l502_user_process.c **** BFIN GAS /tmp/ccBtsGqv.s page 15 770:src/l502_user_process.c **** uint32_t err_codes_sum = 0; 771:src/l502_user_process.c **** for (int i = 0; i < 15; ++i){ 772:src/l502_user_process.c **** err_codes_sum += err_codes[i]; 773:src/l502_user_process.c **** } 774:src/l502_user_process.c **** l502_cmd_done(err_codes_sum, err_codes, 15); 775:src/l502_user_process.c **** break; 776:src/l502_user_process.c **** } 777:src/l502_user_process.c **** case 0x8004:{ //start streams 778:src/l502_user_process.c **** uint32_t err_codes[5] = {0,}; 779:src/l502_user_process.c **** l502_stream_init(); 780:src/l502_user_process.c **** err_codes[0] = stream_enable(L502_STREAM_ADC | L502_STREAM_DIN); //bitmask 781:src/l502_user_process.c **** err_codes[1] = stream_out_preload(); 782:src/l502_user_process.c **** err_codes[2] = streams_start(); 783:src/l502_user_process.c **** //hdma_send_start(); 784:src/l502_user_process.c **** l502_cmd_done(0, err_codes, 5); 785:src/l502_user_process.c **** break; 786:src/l502_user_process.c **** } 787:src/l502_user_process.c **** case 0x8005:{ //get some data from adc buff. Or simple flag, raised inside usr_in_proc_data() 788:src/l502_user_process.c **** 789:src/l502_user_process.c **** uint32_t streams_sum = streams_cnt[0] + streams_cnt[1] + streams_cnt[2] + streams_cnt[3]; 790:src/l502_user_process.c **** l502_cmd_done(streams_sum, streams_cnt, 4); 791:src/l502_user_process.c **** break; 792:src/l502_user_process.c **** } 793:src/l502_user_process.c **** 794:src/l502_user_process.c **** case 0x8006:{ //get data from SPORT_RX copied arr 795:src/l502_user_process.c **** uint32_t sport_rx_nonzero_sum = 0; 796:src/l502_user_process.c **** 797:src/l502_user_process.c **** for (int i = 0; i < dbg_sport_rx_copy_size; ++i){ 798:src/l502_user_process.c **** if (dbg_sport_rx_copy[i]){ 799:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 800:src/l502_user_process.c **** } 801:src/l502_user_process.c **** } 802:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 803:src/l502_user_process.c **** break; 804:src/l502_user_process.c **** } 805:src/l502_user_process.c **** 806:src/l502_user_process.c **** 807:src/l502_user_process.c **** 808:src/l502_user_process.c **** case 0x8007:{ //start data processing: No dataprocessing. Just copy data to output buffer 809:src/l502_user_process.c **** TX_buff_I = 0; 810:src/l502_user_process.c **** 811:src/l502_user_process.c **** Proc_state.mode = TRANSPARENT; 812:src/l502_user_process.c **** Proc_state.mode_next = TRANSPARENT; 813:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_UNKNOWN; 814:src/l502_user_process.c **** Proc_state.average_N_max = 10; 815:src/l502_user_process.c **** // Proc_state.average_N_max = cmd->param; 816:src/l502_user_process.c **** Proc_state.average_N = 1; 817:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 818:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 819:src/l502_user_process.c **** Proc_state.AVG_state = 0; 820:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 821:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 822:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; 823:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 824:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 825:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 826:src/l502_user_process.c **** Proc_state.AVG_buff_active = A; BFIN GAS /tmp/ccBtsGqv.s page 16 827:src/l502_user_process.c **** TX_buff_state = TX_DONE; 828:src/l502_user_process.c **** 829:src/l502_user_process.c **** 830:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 831:src/l502_user_process.c **** TX_buff[i] = 0; 832:src/l502_user_process.c **** } 833:src/l502_user_process.c **** 834:src/l502_user_process.c **** // l502_cmd_done(cmd-> param, NULL, 0); 835:src/l502_user_process.c **** l502_cmd_done(TX_buff_I, NULL, 0); 836:src/l502_user_process.c **** break; 837:src/l502_user_process.c **** } 838:src/l502_user_process.c **** case 0x8008:{ //AVG mode 839:src/l502_user_process.c **** TX_buff_I = 0; 840:src/l502_user_process.c **** 841:src/l502_user_process.c **** Proc_state.mode = AVG; 842:src/l502_user_process.c **** Proc_state.mode_next = AVG; 843:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_UNKNOWN; 844:src/l502_user_process.c **** Proc_state.average_N_max = 30; 845:src/l502_user_process.c **** // Proc_state.average_N_max = cmd->param; 846:src/l502_user_process.c **** Proc_state.average_N = 0; 847:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 848:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 849:src/l502_user_process.c **** Proc_state.AVG_state = 0; 850:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 851:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 852:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; 853:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 854:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 855:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 856:src/l502_user_process.c **** Proc_state.AVG_buff_active = A; 857:src/l502_user_process.c **** TX_buff_state = TX_DONE; 858:src/l502_user_process.c **** 859:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 860:src/l502_user_process.c **** TX_buff[i] = 0; 861:src/l502_user_process.c **** } 862:src/l502_user_process.c **** 863:src/l502_user_process.c **** // l502_cmd_done(cmd-> param, NULL, 0); 864:src/l502_user_process.c **** l502_cmd_done(TX_buff_I, NULL, 0); 865:src/l502_user_process.c **** 866:src/l502_user_process.c **** break; 867:src/l502_user_process.c **** } 868:src/l502_user_process.c **** case 0x8009:{ //request TX_buff_I_shadow value (last size of TX_buff transferred to pc ) 869:src/l502_user_process.c **** l502_cmd_done(TX_buff_I_shadow, NULL, 0); 870:src/l502_user_process.c **** break; 871:src/l502_user_process.c **** } 872:src/l502_user_process.c **** case 0x800A:{ //return uint32_t value stored in dbg_receive_value 873:src/l502_user_process.c **** l502_cmd_done(dbg_receive_value, NULL, 0); 874:src/l502_user_process.c **** break; 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 **** 880:src/l502_user_process.c **** 881:src/l502_user_process.c **** case 0x8010:{ //flush HDMA TX buffer 882:src/l502_user_process.c **** int number_of_free_tx_descriptors = hdma_send_req_rdy(); 883:src/l502_user_process.c **** hdma_send_stop(); BFIN GAS /tmp/ccBtsGqv.s page 17 884:src/l502_user_process.c **** hdma_send_start(); 885:src/l502_user_process.c **** l502_cmd_done(number_of_free_tx_descriptors, NULL, 0); 886:src/l502_user_process.c **** break; 887:src/l502_user_process.c **** } 888:src/l502_user_process.c **** case 0x8011:{ //L502_BF_USR_CMD_CODE_ECHO 889:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 890:src/l502_user_process.c **** break; 891:src/l502_user_process.c **** } 892:src/l502_user_process.c **** case 0x8012:{ //L502_BF_USR_CMD_CODE_ECHO 893:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 894:src/l502_user_process.c **** break; 895:src/l502_user_process.c **** } 896:src/l502_user_process.c **** case 0x8013:{ //L502_BF_USR_CMD_CODE_ECHO 897:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 898:src/l502_user_process.c **** break; 899:src/l502_user_process.c **** } 900:src/l502_user_process.c **** case 0x8014:{ //L502_BF_USR_CMD_CODE_ECHO 901:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 902:src/l502_user_process.c **** break; 903:src/l502_user_process.c **** } 904:src/l502_user_process.c **** case 0x8015:{ //L502_BF_USR_CMD_CODE_ECHO 905:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 906:src/l502_user_process.c **** break; 907:src/l502_user_process.c **** } 908:src/l502_user_process.c **** 909:src/l502_user_process.c **** 910:src/l502_user_process.c **** 911:src/l502_user_process.c **** /* 912:src/l502_user_process.c **** case 0x8002:{ 913:src/l502_user_process.c **** cmd-> result = cmd->param * 2; 914:src/l502_user_process.c **** uint32_t data[] = {0,1,2,3,4,5,6,5,4,3,2,1,0}; 915:src/l502_user_process.c **** l502_cmd_done(cmd-> param*3, data, 13); 916:src/l502_user_process.c **** break;} 917:src/l502_user_process.c **** case 0x8001:{ 918:src/l502_user_process.c **** //cmd-> result = cmd->param * 2; 919:src/l502_user_process.c **** uint32_t data[] = {6,5,4,3,2,1,0,1,2,3,4,5,6}; 920:src/l502_user_process.c **** l502_cmd_done(cmd-> param*75, data, 13); 921:src/l502_user_process.c **** break;} 922:src/l502_user_process.c **** */ 923:src/l502_user_process.c **** 924:src/l502_user_process.c **** default: { 925:src/l502_user_process.c **** l502_cmd_done(1, NULL, 0); 926:src/l502_user_process.c **** } 927:src/l502_user_process.c **** } 928:src/l502_user_process.c **** //l502_cmd_done(1, 1, 1); 929:src/l502_user_process.c **** //l502_cmd_done(L502_BF_ERR_UNSUP_CMD, NULL, 0); 930:src/l502_user_process.c **** } 26 .loc 1 930 0 27 000c 7630 R6 = SP; 710:src/l502_user_process.c **** switch (cmd->code){ 28 .loc 1 710 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); BFIN GAS /tmp/ccBtsGqv.s page 18 35 0018 0B1C if cc jump .L51 (bp); 36 .L2: 925:src/l502_user_process.c **** l502_cmd_done(1, NULL, 0); 37 .loc 1 925 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 930 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: 710:src/l502_user_process.c **** switch (cmd->code){ 54 .loc 1 710 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: 905:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 88 .loc 1 905 0 BFIN GAS /tmp/ccBtsGqv.s page 19 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 930 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: 882:src/l502_user_process.c **** int number_of_free_tx_descriptors = hdma_send_req_rdy(); 104 .loc 1 882 0 105 0052 FFE3D7FF call _hdma_send_req_rdy; 106 .LVL7: 107 0056 3830 R7 = R0; 108 .LVL8: 883:src/l502_user_process.c **** hdma_send_stop(); 109 .loc 1 883 0 110 0058 FFE3D4FF call _hdma_send_stop; 884:src/l502_user_process.c **** hdma_send_start(); 111 .loc 1 884 0 112 005c FFE3D2FF call _hdma_send_start; 885:src/l502_user_process.c **** l502_cmd_done(number_of_free_tx_descriptors, NULL, 0); 113 .loc 1 885 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: 739:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 123 .loc 1 739 0 124 006c C1AC P1 = [P0+12]; 125 .LBE3: 735:src/l502_user_process.c **** break; 126 .loc 1 735 0 127 006e 7E30 R7 = SP; 128 .LBB6: 739:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 129 .loc 1 739 0 130 0070 4A44 P2 = P1 << 2; 131 0072 226C P2 += 4; 132 0074 1644 SP -= P2; 133 0076 4E30 R1 = SP; 134 .LBB4: 740:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 135 .loc 1 740 0 136 0078 5130 R2 = P1; 137 .LBE4: BFIN GAS /tmp/ccBtsGqv.s page 20 739:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 138 .loc 1 739 0 139 007a C164 R1 += 24; 140 .LBB5: 740:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 141 .loc 1 740 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: 742:src/l502_user_process.c **** rcv_data[I] = I; 148 .loc 1 742 0 149 0084 1092 [P2++] = R0; 740:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 150 .loc 1 740 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: 744:src/l502_user_process.c **** l502_cmd_done(cmd-> param, rcv_data, cmd->data_size); 157 .loc 1 744 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: 748:src/l502_user_process.c **** uint32_t err_codes[15] = {0,}; 168 .loc 1 748 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: 749:src/l502_user_process.c **** err_codes[0] = params_set_lch_cnt(1); 176 .loc 1 749 0 177 00a8 0860 R0 = 1 (X); 178 00aa FFE3ABFF call _params_set_lch_cnt; 179 00ae C0BA [FP+-80] = R0; 751: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 751 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 BFIN GAS /tmp/ccBtsGqv.s page 21 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; 752:src/l502_user_process.c **** err_codes[2] = params_set_adc_freq_div(1); 191 .loc 1 752 0 192 00c8 0860 R0 = 1 (X); 193 00ca FFE39BFF call _params_set_adc_freq_div; 194 00ce E0BA [FP+-72] = R0; 753:src/l502_user_process.c **** err_codes[3] = params_set_ref_freq(2000000); 195 .loc 1 753 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; 754:src/l502_user_process.c **** err_codes[4] = params_set_adc_interframe_delay(0); 200 .loc 1 754 0 201 00dc 0060 R0 = 0 (X); 202 00de FFE391FF call _params_set_adc_interframe_delay; 203 00e2 00BB [FP+-64] = R0; 755:src/l502_user_process.c **** err_codes[5] = params_set_sync_mode (L502_SYNC_INTERNAL); 204 .loc 1 755 0 205 00e4 0060 R0 = 0 (X); 206 00e6 FFE38DFF call _params_set_sync_mode; 207 00ea 10BB [FP+-60] = R0; 756:src/l502_user_process.c **** err_codes[6] = params_set_sync_start_mode (L502_SYNC_INTERNAL); 208 .loc 1 756 0 209 00ec 0060 R0 = 0 (X); 210 00ee FFE389FF call _params_set_sync_start_mode; 211 00f2 20BB [FP+-56] = R0; 760:src/l502_user_process.c **** err_codes[9] = sport_in_set_step_size(1024); 212 .loc 1 760 0 213 00f4 20E10004 R0 = 1024 (X); 214 00f8 FFE384FF call _sport_in_set_step_size; 215 00fc 50BB [FP+-44] = R0; 765:src/l502_user_process.c **** err_codes[12] = configure(); 216 .loc 1 765 0 217 00fe FFE381FF call _configure; 218 .LBB8: 772:src/l502_user_process.c **** err_codes_sum += err_codes[i]; 219 .loc 1 772 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; BFIN GAS /tmp/ccBtsGqv.s page 22 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: 774:src/l502_user_process.c **** l502_cmd_done(err_codes_sum, err_codes, 15); 262 .loc 1 774 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: 778:src/l502_user_process.c **** uint32_t err_codes[5] = {0,}; 274 .loc 1 778 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; 779:src/l502_user_process.c **** l502_stream_init(); 281 .loc 1 779 0 282 0156 FFE355FF call _l502_stream_init; 283 .LVL30: 780:src/l502_user_process.c **** err_codes[0] = stream_enable(L502_STREAM_ADC | L502_STREAM_DIN); //bitmask 284 .loc 1 780 0 285 015a 1860 R0 = 3 (X); 286 015c FFE352FF call _stream_enable; BFIN GAS /tmp/ccBtsGqv.s page 23 287 0160 B0BB [FP+-20] = R0; 781:src/l502_user_process.c **** err_codes[1] = stream_out_preload(); 288 .loc 1 781 0 289 0162 FFE34FFF call _stream_out_preload; 290 0166 C0BB [FP+-16] = R0; 782:src/l502_user_process.c **** err_codes[2] = streams_start(); 291 .loc 1 782 0 292 0168 FFE34CFF call _streams_start; 293 016c D0BB [FP+-12] = R0; 784:src/l502_user_process.c **** l502_cmd_done(0, err_codes, 5); 294 .loc 1 784 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: 790:src/l502_user_process.c **** l502_cmd_done(streams_sum, streams_cnt, 4); 305 .loc 1 790 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: 791:src/l502_user_process.c **** break; 322 .loc 1 791 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: 799:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 331 .loc 1 799 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; BFIN GAS /tmp/ccBtsGqv.s page 24 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; 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: 802:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 389 .loc 1 802 0 390 01fa 51A2 R1 = [P2+36]; 391 .LBB13: 799:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 392 .loc 1 799 0 BFIN GAS /tmp/ccBtsGqv.s page 25 393 01fc 1030 R2 = R0; 394 .LBE13: 802:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 395 .loc 1 802 0 396 01fe 010C cc =R1==0; 397 .LBB14: 799:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 398 .loc 1 799 0 399 0200 0A64 R2 += 1; 400 .LVL50: 401 .LBE14: 802:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 402 .loc 1 802 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: 809:src/l502_user_process.c **** TX_buff_I = 0; 413 .loc 1 809 0 414 0210 4CE10000 P4.H = _TX_buff_I; 415 0214 0260 R2 = 0 (X); 416 0216 0CE11400 P4.L = _TX_buff_I; 811:src/l502_user_process.c **** Proc_state.mode = TRANSPARENT; 417 .loc 1 811 0 418 021a 4AE10000 P2.H = _Proc_state; 809:src/l502_user_process.c **** TX_buff_I = 0; 419 .loc 1 809 0 420 021e 2293 [P4] = R2; 811:src/l502_user_process.c **** Proc_state.mode = TRANSPARENT; 421 .loc 1 811 0 422 0220 0AE12C00 P2.L = _Proc_state; 423 0224 0860 R0 = 1 (X); 424 0226 109B B [P2] = R0; 812:src/l502_user_process.c **** Proc_state.mode_next = TRANSPARENT; 425 .loc 1 812 0 426 0228 90E60100 B [P2+1] = R0; 813:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_UNKNOWN; 427 .loc 1 813 0 428 022c 0160 R1 = 0 (X); 429 022e 91E60300 B [P2+3] = R1; 814:src/l502_user_process.c **** Proc_state.average_N_max = 10; 430 .loc 1 814 0 431 0232 5060 R0 = 10 (X); 432 0234 90B4 W [P2+4] = R0; 816:src/l502_user_process.c **** Proc_state.average_N = 1; 433 .loc 1 816 0 434 0236 0860 R0 = 1 (X); 435 0238 D0B4 W [P2+6] = R0; 817:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 436 .loc 1 817 0 437 023a 92B0 [P2+8] = R2; BFIN GAS /tmp/ccBtsGqv.s page 26 818:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 438 .loc 1 818 0 439 023c 91E60C00 B [P2+12] = R1; 819:src/l502_user_process.c **** Proc_state.AVG_state = 0; 440 .loc 1 819 0 441 0240 91E61400 B [P2+20] = R1; 820:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 442 .loc 1 820 0 443 0244 12B1 [P2+16] = R2; 821:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 444 .loc 1 821 0 445 0246 91E61500 B [P2+21] = R1; 822:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; 446 .loc 1 822 0 447 024a 92B1 [P2+24] = R2; 823:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 448 .loc 1 823 0 449 024c 91E61C00 B [P2+28] = R1; 824:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 450 .loc 1 824 0 451 0250 12B2 [P2+32] = R2; 825:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 452 .loc 1 825 0 453 0252 52B2 [P2+36] = R2; 826:src/l502_user_process.c **** Proc_state.AVG_buff_active = A; 454 .loc 1 826 0 455 0254 91E61600 B [P2+22] = R1; 827:src/l502_user_process.c **** TX_buff_state = TX_DONE; 456 .loc 1 827 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: 831:src/l502_user_process.c **** TX_buff[i] = 0; 466 .loc 1 831 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: 830:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 474 .loc 1 830 0 475 027c 086C P0 += 1; 476 .LVL55: 477 .L49: 478 .LBE15: 864:src/l502_user_process.c **** l502_cmd_done(TX_buff_I, NULL, 0); 479 .loc 1 864 0 480 027e 2091 R0 = [P4]; 481 0280 0160 R1 = 0 (X); BFIN GAS /tmp/ccBtsGqv.s page 27 482 0282 0260 R2 = 0 (X); 483 0284 FFE3BEFE call _l502_cmd_done; 484 .LVL56: 485 .loc 1 930 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: 839:src/l502_user_process.c **** TX_buff_I = 0; 494 .loc 1 839 0 495 0292 4CE10000 P4.H = _TX_buff_I; 496 0296 0260 R2 = 0 (X); 497 0298 0CE11400 P4.L = _TX_buff_I; 841:src/l502_user_process.c **** Proc_state.mode = AVG; 498 .loc 1 841 0 499 029c 4AE10000 P2.H = _Proc_state; 839:src/l502_user_process.c **** TX_buff_I = 0; 500 .loc 1 839 0 501 02a0 2293 [P4] = R2; 841:src/l502_user_process.c **** Proc_state.mode = AVG; 502 .loc 1 841 0 503 02a2 0AE12C00 P2.L = _Proc_state; 504 02a6 1060 R0 = 2 (X); 505 02a8 109B B [P2] = R0; 842:src/l502_user_process.c **** Proc_state.mode_next = AVG; 506 .loc 1 842 0 507 02aa 90E60100 B [P2+1] = R0; 843:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_UNKNOWN; 508 .loc 1 843 0 509 02ae 0160 R1 = 0 (X); 510 02b0 91E60300 B [P2+3] = R1; 844:src/l502_user_process.c **** Proc_state.average_N_max = 30; 511 .loc 1 844 0 512 02b4 F060 R0 = 30 (X); 513 02b6 90B4 W [P2+4] = R0; 846:src/l502_user_process.c **** Proc_state.average_N = 0; 514 .loc 1 846 0 515 02b8 0060 R0 = 0 (X); 516 02ba D0B4 W [P2+6] = R0; 847:src/l502_user_process.c **** Proc_state.TX_buff_I = 0; 517 .loc 1 847 0 518 02bc 92B0 [P2+8] = R2; 848:src/l502_user_process.c **** Proc_state.TX_buff_state = 0; 519 .loc 1 848 0 520 02be 91E60C00 B [P2+12] = R1; 849:src/l502_user_process.c **** Proc_state.AVG_state = 0; 521 .loc 1 849 0 522 02c2 91E61400 B [P2+20] = R1; 850:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 523 .loc 1 850 0 524 02c6 12B1 [P2+16] = R2; 851:src/l502_user_process.c **** Proc_state.AVG_buff_state = 0; 525 .loc 1 851 0 BFIN GAS /tmp/ccBtsGqv.s page 28 526 02c8 91E61500 B [P2+21] = R1; 852:src/l502_user_process.c **** Proc_state.FFT_buff_I = 0; 527 .loc 1 852 0 528 02cc 92B1 [P2+24] = R2; 853:src/l502_user_process.c **** Proc_state.FFT_buff_state = 0; 529 .loc 1 853 0 530 02ce 91E61C00 B [P2+28] = R1; 854:src/l502_user_process.c **** Proc_state.digital_word_prev = 0; 531 .loc 1 854 0 532 02d2 12B2 [P2+32] = R2; 855:src/l502_user_process.c **** Proc_state.digital_word_curr = 0; 533 .loc 1 855 0 534 02d4 52B2 [P2+36] = R2; 856:src/l502_user_process.c **** Proc_state.AVG_buff_active = A; 535 .loc 1 856 0 536 02d6 91E61600 B [P2+22] = R1; 857:src/l502_user_process.c **** TX_buff_state = TX_DONE; 537 .loc 1 857 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: 860:src/l502_user_process.c **** TX_buff[i] = 0; 547 .loc 1 860 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: 859:src/l502_user_process.c **** for (uint32_t i = 0; i < TX_BUFF_SIZE; ++i){ 555 .loc 1 859 0 556 02fe 086C P0 += 1; 557 0300 BF2F jump.s .L49; 558 .LVL59: 559 .L11: 560 .LBE16: 869:src/l502_user_process.c **** l502_cmd_done(TX_buff_I_shadow, NULL, 0); 561 .loc 1 869 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: 873:src/l502_user_process.c **** l502_cmd_done(dbg_receive_value, NULL, 0); 572 .loc 1 873 0 BFIN GAS /tmp/ccBtsGqv.s page 29 573 0316 4AE10000 P2.H = _dbg_receive_value; 574 031a 0AE10000 P2.L = _dbg_receive_value; 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: 681:src/l502_user_process.c **** void sport_tx_done(uint32_t* addr, uint32_t size) { 588 .loc 1 681 0 589 .LVL63: 682:src/l502_user_process.c **** ++streams_cnt[1]; 590 .loc 1 682 0 591 032c 4AE10000 P2.H = _streams_cnt; 681:src/l502_user_process.c **** void sport_tx_done(uint32_t* addr, uint32_t size) { 592 .loc 1 681 0 593 0330 00E80000 LINK 0; 594 .LCFI5: 682:src/l502_user_process.c **** ++streams_cnt[1]; 595 .loc 1 682 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; 684:src/l502_user_process.c **** stream_out_buf_free(size); 601 .loc 1 684 0 602 033e 0130 R0 = R1; 685:src/l502_user_process.c **** } 603 .loc 1 685 0 604 0340 01E80000 UNLINK; 684:src/l502_user_process.c **** stream_out_buf_free(size); 605 .loc 1 684 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: 661:src/l502_user_process.c **** void hdma_send_done(uint32_t* addr, uint32_t size) { 615 .loc 1 661 0 616 .LVL66: 663:src/l502_user_process.c **** TX_buff_state = TX_DONE; 617 .loc 1 663 0 618 0348 4AE10000 P2.H = _TX_buff_state; 661:src/l502_user_process.c **** void hdma_send_done(uint32_t* addr, uint32_t size) { 619 .loc 1 661 0 BFIN GAS /tmp/ccBtsGqv.s page 30 620 034c 00E80000 LINK 0; 621 .LCFI6: 663:src/l502_user_process.c **** TX_buff_state = TX_DONE; 622 .loc 1 663 0 623 0350 1860 R0 = 3 (X); 624 .LVL67: 625 0352 0AE13000 P2.L = _TX_buff_state; 626 0356 109B B [P2] = R0; 664:src/l502_user_process.c **** ++streams_cnt[3]; 627 .loc 1 664 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; 666:src/l502_user_process.c **** stream_in_buf_free(size); 633 .loc 1 666 0 634 0366 0130 R0 = R1; 667:src/l502_user_process.c **** } 635 .loc 1 667 0 636 0368 01E80000 UNLINK; 666:src/l502_user_process.c **** stream_in_buf_free(size); 637 .loc 1 666 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: 625:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 647 .loc 1 625 0 648 .LVL69: 649 0370 7005 [--sp] = ( r7:6 ); 650 651 .LCFI7: 630:src/l502_user_process.c **** ++streams_cnt[2]; 652 .loc 1 630 0 653 0372 4AE10000 P2.H = _streams_cnt; 625:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 654 .loc 1 625 0 655 0376 00E80300 LINK 12; 656 .LCFI8: 630:src/l502_user_process.c **** ++streams_cnt[2]; 657 .loc 1 630 0 658 037a 0AE10000 P2.L = _streams_cnt; 625:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 659 .loc 1 625 0 660 037e 3030 R6 = R0; 630:src/l502_user_process.c **** ++streams_cnt[2]; 661 .loc 1 630 0 662 0380 90A0 R0 = [P2+8]; 663 .LVL70: 664 0382 0864 R0 += 1; 625:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { BFIN GAS /tmp/ccBtsGqv.s page 31 665 .loc 1 625 0 666 0384 82CE01CE R7 = ROT R1 BY 0 || 666 90B00000 667 [P2+8] = R0 || 668 nop; 669 .LVL71: 632:src/l502_user_process.c **** if (sport_tx_req_rdy()) { 670 .loc 1 632 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: 639:src/l502_user_process.c **** sport_tx_start_req(data, size); 678 .loc 1 639 0 679 039c 0630 R0 = R6; 680 039e 0F30 R1 = R7; 681 03a0 FFE330FE call _sport_tx_start_req; 644:src/l502_user_process.c **** } 682 .loc 1 644 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: 632:src/l502_user_process.c **** if (sport_tx_req_rdy()) { 692 .loc 1 632 0 693 03ae 0760 R7 = 0 (X); 694 .LVL75: 644:src/l502_user_process.c **** } 695 .loc 1 644 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: BFIN GAS /tmp/ccBtsGqv.s page 32 168:src/l502_user_process.c **** if (TX_buff_state == TX_DONE){ 715 .loc 1 168 0 716 03be 45E10000 R5.H = _TX_buff_state; 717 03c2 05E13000 R5.L = _TX_buff_state; 163:src/l502_user_process.c **** ++streams_cnt[0]; 718 .loc 1 163 0 719 03c6 4AE10000 P2.H = _streams_cnt; 168:src/l502_user_process.c **** if (TX_buff_state == TX_DONE){ 720 .loc 1 168 0 721 03ca 0532 P0 = R5; 159:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 722 .loc 1 159 0 723 03cc 00E80300 LINK 12; 724 .LCFI12: 163:src/l502_user_process.c **** ++streams_cnt[0]; 725 .loc 1 163 0 726 03d0 0AE10000 P2.L = _streams_cnt; 159:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 727 .loc 1 159 0 728 03d4 1834 I3 = R0; 163:src/l502_user_process.c **** ++streams_cnt[0]; 729 .loc 1 163 0 730 03d6 1091 R0 = [P2]; 731 .LVL78: 732 03d8 0864 R0 += 1; 733 03da 1093 [P2] = R0; 168:src/l502_user_process.c **** if (TX_buff_state == TX_DONE){ 734 .loc 1 168 0 735 03dc 4099 R0 = B [P0] (X); 736 03de 4043 R0 = R0.B (Z); 159:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 737 .loc 1 159 0 738 03e0 3930 R7 = R1; 168:src/l502_user_process.c **** if (TX_buff_state == TX_DONE){ 739 .loc 1 168 0 740 03e2 180C cc =R0==3; 741 03e4 0219 if cc jump .L94; 742 .LVL79: 743 .L64: 190:src/l502_user_process.c **** if (Proc_state.mode == TRANSPARENT){ 744 .loc 1 190 0 745 03e6 50E10000 I0.H = _Proc_state; 746 03ea 10E12C00 I0.L = _Proc_state; 747 03ee 9032 P2 = I0; 748 03f0 5099 R0 = B [P2] (X); 749 03f2 4043 R0 = R0.B (Z); 750 03f4 080C cc =R0==1; 751 03f6 BC18 if cc jump .L95; 752 .L66: 209:src/l502_user_process.c **** if (Proc_state.mode == AVG){ 753 .loc 1 209 0 754 03f8 8832 P1 = I0; 755 03fa 4899 R0 = B [P1] (X); 756 03fc 4043 R0 = R0.B (Z); 757 03fe 100C cc =R0==2; 758 0400 1518 if cc jump .L96; 759 .LVL80: BFIN GAS /tmp/ccBtsGqv.s page 33 760 .L70: 528:src/l502_user_process.c **** if (hdma_send_req_rdy()) { 761 .loc 1 528 0 762 0402 FFE3FFFD call _hdma_send_req_rdy; 763 .LVL81: 764 0406 000C cc =R0==0; 765 0408 0B18 if cc jump .L97; 576:src/l502_user_process.c **** if (TX_buff_state == TODO_TX){ 766 .loc 1 576 0 767 040a 0D32 P1 = R5; 768 040c 4899 R0 = B [P1] (X); 769 040e 4043 R0 = R0.B (Z); 770 0410 080C cc =R0==1; 771 0412 0519 if cc jump .L98; 599:src/l502_user_process.c **** } 772 .loc 1 599 0 773 0414 0730 R0 = R7; 774 0416 01E80000 UNLINK; 775 041a A305 ( r7:4, p5:3 ) = [sp++]; 776 777 .LCFI13: 778 .LVL82: 779 041c 1000 rts; 780 .LVL83: 781 .L97: 528:src/l502_user_process.c **** if (hdma_send_req_rdy()) { 782 .loc 1 528 0 783 041e 0760 R7 = 0 (X); 599:src/l502_user_process.c **** } 784 .loc 1 599 0 785 0420 0730 R0 = R7; 786 0422 01E80000 UNLINK; 787 0426 A305 ( r7:4, p5:3 ) = [sp++]; 788 789 .LCFI14: 790 .LVL84: 791 0428 1000 rts; 792 .LVL85: 793 .L96: 794 042a 4BE10000 P3.H = _data_I; 795 042e 0BE11800 P3.L = _data_I; 796 .LBB17: 273:src/l502_user_process.c **** AVG_buff[Proc_state.AVG_buff_I] = 0xC0000000 | ((val + AVG_buff[Proc_state.AVG_buff_I]) & 0x 797 .loc 1 273 0 798 0432 5BE10000 B3.H = _Proc_state; 799 0436 51E10000 I1.H = _AVG_buff; 800 043a FC63 R4 = -1 (X); 215:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 801 .loc 1 215 0 802 043c 52E10000 I2.H = _DY_SYN_2_value; 803 0440 59E10000 B1.H = _DY_SYN_2_value_prev; 232:src/l502_user_process.c **** TX_buff_I = 0; 804 .loc 1 232 0 805 0444 43E10000 R3.H = _TX_buff_I; 806 .LBB20: 243:src/l502_user_process.c **** AVG_buff[i] = 0xC2321123; 807 .loc 1 243 0 BFIN GAS /tmp/ccBtsGqv.s page 34 808 0448 46E132C2 R6.H = 49714; 809 044c 5AE10000 B2.H = _TX_buff; 810 .LBE20: 811 .LBE17: 210:src/l502_user_process.c **** while(++data_I < size ){ 812 .loc 1 210 0 813 0450 4336 B0 = P3; 814 .LBB22: 273:src/l502_user_process.c **** AVG_buff[Proc_state.AVG_buff_I] = 0xC0000000 | ((val + AVG_buff[Proc_state.AVG_buff_I]) & 0x 815 .loc 1 273 0 816 0452 1BE12C00 B3.L = _Proc_state; 817 0456 11E10000 I1.L = _AVG_buff; 818 045a 44E1FF00 R4.H = 255; 215:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 819 .loc 1 215 0 820 045e 12E12500 I2.L = _DY_SYN_2_value; 821 0462 19E12600 B1.L = _DY_SYN_2_value_prev; 232:src/l502_user_process.c **** TX_buff_I = 0; 822 .loc 1 232 0 823 0466 03E11400 R3.L = _TX_buff_I; 824 .LBB21: 243:src/l502_user_process.c **** AVG_buff[i] = 0xC2321123; 825 .loc 1 243 0 826 046a 06E12311 R6.L = 4387; 827 046e 1AE10000 B2.L = _TX_buff; 828 .LVL86: 829 .L92: 830 .LBE21: 831 .LBE22: 210:src/l502_user_process.c **** while(++data_I < size ){ 832 .loc 1 210 0 833 0472 1891 R0 = [P3]; 834 .LVL87: 835 0474 0864 R0 += 1; 836 0476 1893 [P3] = R0; 837 0478 1891 R0 = [P3]; 838 047a 070A cc =R7<=R0 (iu); 839 047c C31B if cc jump .L70; 840 .LBB23: 211:src/l502_user_process.c **** uint32_t word = data[data_I]; 841 .loc 1 211 0 842 047e E832 P5 = B0; 843 .LVL88: 844 0480 8332 P0 = I3; 845 .LVL89: 846 0482 6A91 P2 = [P5]; 847 0484 905E P2 = P0 + (P2 << 2); 848 0486 1091 R0 = [P2]; 849 .LVL90: 214:src/l502_user_process.c **** if (header == 0x00){ //digital_channel. switches LFSM state machine 850 .loc 1 214 0 851 0488 82C64083 R1 = R0 >> 24; 852 048c 010C cc =R1==0; 853 048e 4D14 if !cc jump .L71 (bp); 215:src/l502_user_process.c **** DY_SYN_2_value_prev = DY_SYN_2_value; 854 .loc 1 215 0 855 0490 8A32 P1 = I2; BFIN GAS /tmp/ccBtsGqv.s page 35 856 0492 4999 R1 = B [P1] (X); 857 .LVL91: 858 0494 D132 P2 = B1; 859 0496 119B B [P2] = R1; 216:src/l502_user_process.c **** if (word & (0b1 << 17)){ 860 .loc 1 216 0 861 0498 8848 cc = !BITTST (R0,17); 862 049a 661C if cc jump .L72 (bp); 217:src/l502_user_process.c **** DY_SYN_2_value = 1; 863 .loc 1 217 0 864 049c 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 865 .loc 1 222 0 866 049e 4843 R0 = R1.B (Z); 867 .LVL92: 217:src/l502_user_process.c **** DY_SYN_2_value = 1; 868 .loc 1 217 0 869 04a0 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 870 .loc 1 222 0 871 04a2 000C cc =R0==0; 872 04a4 E717 if !cc jump .L92 (bp); 224:src/l502_user_process.c **** Proc_state.average_N ++; 873 .loc 1 224 0 874 04a6 8032 P0 = I0; 875 04a8 C0A8 R0 = W [P0+6] (X); 876 04aa 0864 R0 += 1; 877 04ac C0B4 W [P0+6] = R0; 225:src/l502_user_process.c **** Proc_state.AVG_buff_I = 0; 878 .loc 1 225 0 879 04ae 0268 P2 = 0 (X); 880 04b0 02BD [P0+16] = P2; 226:src/l502_user_process.c **** Proc_state.LFSM_state = CYCLE_STARTED; 881 .loc 1 226 0 882 04b2 82E60300 B [P0+3] = R2; 227:src/l502_user_process.c **** if (Proc_state.average_N >= Proc_state.average_N_max){ //whole average ended 883 .loc 1 227 0 884 04b6 C1A8 R1 = W [P0+6] (X); 885 04b8 80A8 R0 = W [P0+4] (X); 886 04ba C942 R1 = R1.L (Z); 887 04bc C042 R0 = R0.L (Z); 888 04be 8109 cc =R1= AVG_BUFF_SIZE){ 981 .loc 1 276 0 982 0552 00A1 R0 = [P0+16]; 983 0554 21E1E703 R1 = 999 (X); 984 0558 080A cc =R0<=R1 (iu); 985 055a 8C1F if cc jump .L92 (bp); 277:src/l502_user_process.c **** Proc_state.AVG_state = STEP_COMPLETED; 986 .loc 1 277 0 987 055c 1060 R0 = 2 (X); 988 055e C332 P0 = B3; 989 0560 80E61400 B [P0+20] = R0; 990 0564 872F jump.s .L92; 991 .LVL99: 992 .L72: 219:src/l502_user_process.c **** DY_SYN_2_value = 0; 993 .loc 1 219 0 994 0566 0060 R0 = 0 (X); 995 .LVL100: 996 0568 AA32 P5 = I2; 997 056a 289B B [P5] = R0; 998 056c 832F jump.s .L92; 999 .LVL101: 1000 .L95: 1001 .LBE23: BFIN GAS /tmp/ccBtsGqv.s page 38 193:src/l502_user_process.c **** if (TX_buff_state == FILLING){ 1002 .loc 1 193 0 1003 056e 2D32 P5 = R5; 1004 0570 6899 R0 = B [P5] (X); 1005 0572 4043 R0 = R0.B (Z); 1006 0574 000C cc =R0==0; 1007 0576 4117 if !cc jump .L66 (bp); 195:src/l502_user_process.c **** TX_buff_I = 0; 1008 .loc 1 195 0 1009 0578 42E10000 R2.H = _TX_buff_I; 1010 057c 02E11400 R2.L = _TX_buff_I; 1011 0580 0232 P0 = R2; 1012 .LVL102: 194:src/l502_user_process.c **** data_I = 0; 1013 .loc 1 194 0 1014 0582 4BE10000 P3.H = _data_I; 1015 0586 0BE11800 P3.L = _data_I; 1016 058a 1893 [P3] = R0; 195:src/l502_user_process.c **** TX_buff_I = 0; 1017 .loc 1 195 0 1018 058c 0093 [P0] = R0; 196:src/l502_user_process.c **** while((++data_I < size )&& (++TX_buff_I < TX_BUFF_SIZE)){ 1019 .loc 1 196 0 1020 058e 1891 R0 = [P3]; 1021 0590 0864 R0 += 1; 1022 0592 1893 [P3] = R0; 1023 0594 1891 R0 = [P3]; 1024 0596 070A cc =R7<=R0 (iu); 1025 0598 2418 if cc jump .L67; 1026 059a 21E10F27 R1 = 9999 (X); 1027 059e 0091 R0 = [P0]; 1028 05a0 0864 R0 += 1; 1029 05a2 0093 [P0] = R0; 1030 05a4 0091 R0 = [P0]; 1031 05a6 080A cc =R0<=R1 (iu); 1032 05a8 1C10 if !cc jump .L67; 1033 05aa 4CE10000 P4.H = _TX_buff; 1034 05ae 0CE10000 P4.L = _TX_buff; 1035 05b2 21E10F27 R1 = 9999 (X); 1036 05b6 0720 jump.s .L68; 1037 .L100: 1038 05b8 0091 R0 = [P0]; 1039 05ba 0864 R0 += 1; 1040 05bc 0093 [P0] = R0; 1041 05be 0091 R0 = [P0]; 1042 05c0 080A cc =R0<=R1 (iu); 1043 05c2 0F10 if !cc jump .L67; 1044 .L68: 198:src/l502_user_process.c **** TX_buff[TX_buff_I] = data[data_I]; 1045 .loc 1 198 0 1046 05c4 1232 P2 = R2; 1047 05c6 AB32 P5 = I3; 1048 05c8 5191 P1 = [P2]; 1049 05ca 5A91 P2 = [P3]; 1050 05cc 4C5E P1 = P4 + (P1 << 2); 1051 05ce 955E P2 = P5 + (P2 << 2); 1052 05d0 1091 R0 = [P2]; BFIN GAS /tmp/ccBtsGqv.s page 39 1053 05d2 0893 [P1] = R0; 196:src/l502_user_process.c **** while((++data_I < size )&& (++TX_buff_I < TX_BUFF_SIZE)){ 1054 .loc 1 196 0 1055 05d4 1891 R0 = [P3]; 1056 05d6 0864 R0 += 1; 1057 05d8 1893 [P3] = R0; 1058 05da 1891 R0 = [P3]; 1059 05dc B809 cc =R0