BFIN GAS /tmp/ccOIsXVY.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 B5010000 .text; 8 0200E900 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 **** #include "l502_stream.h" 13:src/l502_user_process.c **** #include "l502_hdma.h" 14:src/l502_user_process.c **** #include "l502_sport_tx.h" 15:src/l502_user_process.c **** #include "l502_cmd.h" 16:src/l502_user_process.c **** 17:src/l502_user_process.c **** #include 18:src/l502_user_process.c **** 19:src/l502_user_process.c **** #include "l502_defs.h" // import defines of constants 20:src/l502_user_process.c **** #include "l502_params.h" 21:src/l502_user_process.c **** #include "l502_stream.h" 22:src/l502_user_process.c **** 23:src/l502_user_process.c **** 24:src/l502_user_process.c **** 25:src/l502_user_process.c **** uint32_t streams_cnt[4] = {0,}; 26:src/l502_user_process.c **** 27:src/l502_user_process.c **** 28:src/l502_user_process.c **** 29:src/l502_user_process.c **** #define LFSM_val_ON 0b01100111 30:src/l502_user_process.c **** #define LFSM_val_OFF 0b01101000 31:src/l502_user_process.c **** #define LFSM_val_X 0b01101001 32:src/l502_user_process.c **** 33:src/l502_user_process.c **** //#define TX_BUFF_SIZE 1024*1024 34:src/l502_user_process.c **** #define TX_BUFF_SIZE 100 35:src/l502_user_process.c **** #define LFSM_DATALEN 1024 36:src/l502_user_process.c **** 37:src/l502_user_process.c **** #define dbg_sport_rx_copy_size 10 38:src/l502_user_process.c **** //#define LFSM_DATALEN 1024 BFIN GAS /tmp/ccOIsXVY.s page 2 39:src/l502_user_process.c **** 40:src/l502_user_process.c **** 41:src/l502_user_process.c **** 42:src/l502_user_process.c **** //#pragma section("sdram_noinit", NO_INIT) 43:src/l502_user_process.c **** //#include "l502_sdram_noinit.h" 44:src/l502_user_process.c **** //__attribute__((section(".sdram_noinit"), far)) 45:src/l502_user_process.c **** //static volatile uint32_t dbg_sport_rx_copy[TX_BUFF_SIZE]; 46:src/l502_user_process.c **** //uint32_t dbg_sport_rx_copy[TX_BUFF_SIZE];// = {0,}; 47:src/l502_user_process.c **** uint32_t dbg_sport_rx_copy[dbg_sport_rx_copy_size];// = {0,}; 48:src/l502_user_process.c **** //* 49:src/l502_user_process.c **** 50:src/l502_user_process.c **** //#include "l502_sdram_noinit.h" 51:src/l502_user_process.c **** //static volatile uint32_t LFSM_data[LFSM_DATALEN] = {0,}; 52:src/l502_user_process.c **** 53:src/l502_user_process.c **** #include "l502_sdram_noinit.h" 54:src/l502_user_process.c **** volatile uint32_t TX_buff[TX_BUFF_SIZE];// __attribute__((section(".sdram_noinit"))); 55:src/l502_user_process.c **** // = {0,}; 56:src/l502_user_process.c **** 57:src/l502_user_process.c **** uint32_t streams_succes_flag = 0; 58:src/l502_user_process.c **** 59:src/l502_user_process.c **** /* 60:src/l502_user_process.c **** struct dataprocess_typedef { 61:src/l502_user_process.c **** uint8_t config = 0; 62:src/l502_user_process.c **** uint32_t datapoints_max_N = 0; 63:src/l502_user_process.c **** uint32_t datapoint_curr_I = 0; 64:src/l502_user_process.c **** uint32_t data_raw; 65:src/l502_user_process.c **** }; 66:src/l502_user_process.c **** */ 67:src/l502_user_process.c **** 68:src/l502_user_process.c **** //int f_sport_test(void); 69:src/l502_user_process.c **** void l502_stream_init(void); 70:src/l502_user_process.c **** 71:src/l502_user_process.c **** 72:src/l502_user_process.c **** 73:src/l502_user_process.c **** /***************************************************************************//** 74:src/l502_user_process.c **** @brief Обработка принятого массива данных АЦП/DIN. 75:src/l502_user_process.c **** 76:src/l502_user_process.c **** Функция вызывается каждый раз, когда обнаружены нов 77:src/l502_user_process.c **** АЦП/цифровых входов, пришедшие по SPORT0. 78:src/l502_user_process.c **** 79:src/l502_user_process.c **** Функция должна обработать данные и вернуть количес 80:src/l502_user_process.c **** однако эти данные все еще считаются использованным 81:src/l502_user_process.c **** новыми пришедшими данными) до тех пор пока не будет 82:src/l502_user_process.c **** stream_in_buf_free()). 83:src/l502_user_process.c **** 84:src/l502_user_process.c **** Если функция вернет значение меньше чем size, то функц 85:src/l502_user_process.c **** следующем проходе еще раз с указателем на необработ 86:src/l502_user_process.c **** 87:src/l502_user_process.c **** В текущей реализации просто запускается передача д 88:src/l502_user_process.c **** 89:src/l502_user_process.c **** @param[in] data Указатель на массив с принятыми данными 90:src/l502_user_process.c **** @param[in] size Количество принятых данных в 32-битных сло 91:src/l502_user_process.c **** @return Функция возвращает количество обработанн 92:src/l502_user_process.c **** На эти данные не будет вызываться повторн 93:src/l502_user_process.c **** но они считаются еще используемыми 94:src/l502_user_process.c **** *******************************************************************************/ 95:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { BFIN GAS /tmp/ccOIsXVY.s page 3 96:src/l502_user_process.c **** /* если есть свободные дескрипторы на передачу по HDMA 97:src/l502_user_process.c **** передачу. Иначе возвращаем 0, чтобы на обработку эт 98:src/l502_user_process.c **** вызвали бы позже */ 99:src/l502_user_process.c **** ++streams_cnt[0]; 100:src/l502_user_process.c **** /* 101:src/l502_user_process.c **** for (int i = 0; i < TX_BUFF_SIZE; ++i){ 102:src/l502_user_process.c **** TX_buff[i] = 0x00000000; 103:src/l502_user_process.c **** } 104:src/l502_user_process.c **** */ 105:src/l502_user_process.c **** 106:src/l502_user_process.c **** //for (int i = 0; i < dbg_sport_rx_copy; ++i){ 107:src/l502_user_process.c **** // dbg_sport_rx_copy[i] = data[i]; 108:src/l502_user_process.c **** //} 109:src/l502_user_process.c **** 110:src/l502_user_process.c **** //* 111:src/l502_user_process.c **** uint32_t radar_word_I = 0; 112:src/l502_user_process.c **** 113:src/l502_user_process.c **** uint32_t TX_buff_I = 0; 114:src/l502_user_process.c **** 115:src/l502_user_process.c **** for (int data_I = 0; (data_I < size) && (TX_buff_I < TX_BUFF_SIZE); ++data_I){ 116:src/l502_user_process.c **** uint32_t word = data[data_I]; 117:src/l502_user_process.c **** uint32_t val = word & 0x00FFFFFF; 118:src/l502_user_process.c **** uint8_t header = (uint8_t)(word >> 24); 119:src/l502_user_process.c **** //11010000 120:src/l502_user_process.c **** if (((header & 0b10000000) == 0b10000000)){ //it`s ADC word 121:src/l502_user_process.c **** if (header == 0XD0){ //phy channel № 1 in common mode 122:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = ((0b01100000 & LFSM_val_ON) << 24) & val; 123:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0xD0ADEFEA; 124:src/l502_user_process.c **** 125:src/l502_user_process.c **** }else if (header == 0xD1){//phy channel № 2 in common mode 126:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = ((0b01100000 & LFSM_val_OFF) << 24) & val; 127:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0xD0ADEFEB; 128:src/l502_user_process.c **** }else{ 129:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 130:src/l502_user_process.c **** //TX_buff[TX_buff_I++] = 0xD0AAAAAA; 131:src/l502_user_process.c **** } 132:src/l502_user_process.c **** 133:src/l502_user_process.c **** 134:src/l502_user_process.c **** } else if ( header == 0b00000000){ //it`s digital 135:src/l502_user_process.c **** if (word & (0b11 << 16)){ 136:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0b01101010 << 24; 137:src/l502_user_process.c **** } 138:src/l502_user_process.c **** } else{ 139:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 140:src/l502_user_process.c **** } 141:src/l502_user_process.c **** 142:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 143:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 144:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 145:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 146:src/l502_user_process.c **** // }else if ((header & 0b00000000) == ){ 147:src/l502_user_process.c **** 148:src/l502_user_process.c **** } 149:src/l502_user_process.c **** 150:src/l502_user_process.c **** //stream_in_buf_free(size); 151:src/l502_user_process.c **** 152:src/l502_user_process.c **** /* BFIN GAS /tmp/ccOIsXVY.s page 4 153:src/l502_user_process.c **** 154:src/l502_user_process.c **** //int i = 0; 155:src/l502_user_process.c **** //uint8_t 156:src/l502_user_process.c **** //while 157:src/l502_user_process.c **** 158:src/l502_user_process.c **** for (int i = 0; i < LFSM_DATALEN; ++i){ 159:src/l502_user_process.c **** uint32_t msg; 160:src/l502_user_process.c **** if (i % 2){ 161:src/l502_user_process.c **** msg = (LFSM_val_ON << 24) + data[i]; 162:src/l502_user_process.c **** }else{ 163:src/l502_user_process.c **** msg = (LFSM_val_OFF << 24) + data[i]; 164:src/l502_user_process.c **** } 165:src/l502_user_process.c **** LFSM_data[i] = msg; 166:src/l502_user_process.c **** } 167:src/l502_user_process.c **** 168:src/l502_user_process.c **** */ 169:src/l502_user_process.c **** if (hdma_send_req_rdy()) { 170:src/l502_user_process.c **** 171:src/l502_user_process.c **** //streams_cnt[0] 172:src/l502_user_process.c **** hdma_send_req_start(TX_buff, TX_BUFF_SIZE, 0); 173:src/l502_user_process.c **** //hdma_send_req_start(data, size, 0); 174:src/l502_user_process.c **** //hdma_send_req_start(data, size, 0); 175:src/l502_user_process.c **** //streams_cnt[0] = hdma_send_req_start(LFSM_data, LFSM_DATALEN, 0); 176:src/l502_user_process.c **** return size; 177:src/l502_user_process.c **** } 178:src/l502_user_process.c **** return 0; 179:src/l502_user_process.c **** } 180:src/l502_user_process.c **** 181:src/l502_user_process.c **** 182:src/l502_user_process.c **** 183:src/l502_user_process.c **** /***************************************************************************//** 184:src/l502_user_process.c **** @brief Обработка принятого массива с данными ЦАП/DOUT 185:src/l502_user_process.c **** 186:src/l502_user_process.c **** Функция вызывается каждый раз, когда обнаружены нов 187:src/l502_user_process.c **** ПК по HDMA. 188:src/l502_user_process.c **** Функция должна обработать данные и вернуть количес 189:src/l502_user_process.c **** однако эти данные все еще считаются использованным 190:src/l502_user_process.c **** новыми пришедшими данными) до тех пор пока не будет 191:src/l502_user_process.c **** stream_out_buf_free()). 192:src/l502_user_process.c **** 193:src/l502_user_process.c **** Если функция вернет значение меньше чем size, то функц 194:src/l502_user_process.c **** вызвана после еще раз с указателем на необработанны 195:src/l502_user_process.c **** 196:src/l502_user_process.c **** В текущей реализации просто запускается передача д 197:src/l502_user_process.c **** для вывода на ЦАП/цифровые выходы. 198:src/l502_user_process.c **** 199:src/l502_user_process.c **** @param[in] data Указатель на массив с принятыми данными 200:src/l502_user_process.c **** @param[in] size Количество принятых данных в 32-битных сло 201:src/l502_user_process.c **** @return Функция возвращает количество обработанн 202:src/l502_user_process.c **** На эти данные не будет вызываться повторн 203:src/l502_user_process.c **** но они считаются еще используемыми 204:src/l502_user_process.c **** ******************************************************************************/ 205:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 206:src/l502_user_process.c **** 207:src/l502_user_process.c **** /* если есть свободные дескрипторы на передачу по HDMA 208:src/l502_user_process.c **** передачу. Иначе возвращаем 0, чтобы на обработку эт 209:src/l502_user_process.c **** вызвали бы позже */ BFIN GAS /tmp/ccOIsXVY.s page 5 210:src/l502_user_process.c **** ++streams_cnt[2]; 211:src/l502_user_process.c **** 212:src/l502_user_process.c **** if (sport_tx_req_rdy()) { 213:src/l502_user_process.c **** 214:src/l502_user_process.c **** /* за один раз можем передать в SPORT не более 215:src/l502_user_process.c **** SPORT_TX_REQ_SIZE_MAX слов */ 216:src/l502_user_process.c **** if (size > SPORT_TX_REQ_SIZE_MAX) 217:src/l502_user_process.c **** size = SPORT_TX_REQ_SIZE_MAX; 218:src/l502_user_process.c **** 219:src/l502_user_process.c **** sport_tx_start_req(data, size); 220:src/l502_user_process.c **** 221:src/l502_user_process.c **** return size; 222:src/l502_user_process.c **** } 223:src/l502_user_process.c **** return 0; 224:src/l502_user_process.c **** } 225:src/l502_user_process.c **** 226:src/l502_user_process.c **** 227:src/l502_user_process.c **** 228:src/l502_user_process.c **** 229:src/l502_user_process.c **** 230:src/l502_user_process.c **** 231:src/l502_user_process.c **** /****************************************************************************//** 232:src/l502_user_process.c **** @brief Обработка завершения передачи по HostDMA 233:src/l502_user_process.c **** 234:src/l502_user_process.c **** Функция вызывается из обработчика прерывания, когд 235:src/l502_user_process.c **** блока данных по HDMA в ПК, поставленного до этого на пе 236:src/l502_user_process.c **** помощью hdma_send_req_start(). 237:src/l502_user_process.c **** 238:src/l502_user_process.c **** @param[in] addr Адрес слова, сразу за последним переданны 239:src/l502_user_process.c **** @param[in] size Размер переданных данных в 32-битных слова 240:src/l502_user_process.c **** ****************************************************************************/ 241:src/l502_user_process.c **** void hdma_send_done(uint32_t* addr, uint32_t size) { 242:src/l502_user_process.c **** ++streams_cnt[3]; 243:src/l502_user_process.c **** 244:src/l502_user_process.c **** stream_in_buf_free(size); 245:src/l502_user_process.c **** } 246:src/l502_user_process.c **** 247:src/l502_user_process.c **** 248:src/l502_user_process.c **** 249:src/l502_user_process.c **** /***************************************************************************//** 250:src/l502_user_process.c **** @brief Обработка завершения передачи по SPORT 251:src/l502_user_process.c **** 252:src/l502_user_process.c **** Функция вызывается из обработчика прерывания при з 253:src/l502_user_process.c **** по SPORT'у на цифровые выходы/ЦАП, поставленного до это 254:src/l502_user_process.c **** помощью sport_tx_start_req(). 255:src/l502_user_process.c **** 256:src/l502_user_process.c **** 257:src/l502_user_process.c **** @param[in] addr Адрес слова, сразу за последним переданны 258:src/l502_user_process.c **** @param[in] size Размер переданных данных в 32-битных слова 259:src/l502_user_process.c **** void sport_tx_done(uint32_t* addr, uint32_t size) { 260:src/l502_user_process.c **** ++streams_cnt[1]; 261:src/l502_user_process.c **** 262:src/l502_user_process.c **** stream_out_buf_free(size); 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/ccOIsXVY.s page 6 267:src/l502_user_process.c **** 268:src/l502_user_process.c **** 269:src/l502_user_process.c **** 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 **** @brief Обработка пользовательских команд. 275:src/l502_user_process.c **** 276:src/l502_user_process.c **** Функция вызывается при приеме команды от ПК с кодом 277:src/l502_user_process.c **** #L502_BF_CMD_CODE_USER. 278:src/l502_user_process.c **** 279:src/l502_user_process.c **** По завершению обработки необходимо обязательно выз 280:src/l502_user_process.c **** l502_cmd_done(), указав код завершения команды и 281:src/l502_user_process.c **** при необходимости передать данные с результатом 282:src/l502_user_process.c **** 283:src/l502_user_process.c **** @param[in] cmd Структура с описанием принятой команды 284:src/l502_user_process.c **** ******************************************************************************/ 285:src/l502_user_process.c **** 286:src/l502_user_process.c **** 287:src/l502_user_process.c **** void usr_cmd_process(t_l502_bf_cmd *cmd) { 16 .loc 1 287 0 17 .LVL0: 18 0000 0032 P0 = R0; 19 0002 FD05 [--sp] = ( r7:7, p5:5 ); 20 21 .LCFI0: 22 0004 00E81A00 LINK 104; 23 .LCFI1: 288:src/l502_user_process.c **** switch (cmd->code){ 24 .loc 1 288 0 25 0008 21E1FF7F R1 = 32767 (X); 289:src/l502_user_process.c **** 290:src/l502_user_process.c **** 291:src/l502_user_process.c **** /* 292:src/l502_user_process.c **** Command template 293:src/l502_user_process.c **** case 0x800?:{ 294:src/l502_user_process.c **** 295:src/l502_user_process.c **** l502_cmd_done(rcv_code, rcv_data, rcv_data_length); //void l502_cmd_done (int32_t result, uint32_ 296:src/l502_user_process.c **** break; 297:src/l502_user_process.c **** } 298:src/l502_user_process.c **** */ 299:src/l502_user_process.c **** // typedef struct { 300:src/l502_user_process.c **** // uint16_t code; /**< Код команды из #t_l502_bf_cmd_code */ 301:src/l502_user_process.c **** // uint16_t status; /**< Статус выполнения - в обработчике не и 302:src/l502_user_process.c **** // uint32_t param; /**< Параметр команды */ 303:src/l502_user_process.c **** // int32_t result; /**< Код результата выполнения команды */ 304:src/l502_user_process.c **** // uint32_t data_size; /**< Количество данных, переданных с кома 305:src/l502_user_process.c **** // uint32_t data[L502_BF_CMD_DATA_SIZE_MAX]; /**< Данные, передаваемые с к 306:src/l502_user_process.c **** // } t_l502_bf_cmd; 307:src/l502_user_process.c **** 308:src/l502_user_process.c **** 309:src/l502_user_process.c **** 310:src/l502_user_process.c **** 311:src/l502_user_process.c **** case 0x8001:{ //L502_BF_USR_CMD_CODE_ECHO 312:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 313:src/l502_user_process.c **** break; BFIN GAS /tmp/ccOIsXVY.s page 7 314:src/l502_user_process.c **** } 315:src/l502_user_process.c **** 316:src/l502_user_process.c **** case 0x8002:{ //L502_BF_USR_CMD_CODE_DATA_ECHO 317:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 318:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 319:src/l502_user_process.c **** //rcv_data[I] = (cmd-> data)[I]; 320:src/l502_user_process.c **** rcv_data[I] = I; 321:src/l502_user_process.c **** } 322:src/l502_user_process.c **** l502_cmd_done(cmd-> param, rcv_data, cmd->data_size); 323:src/l502_user_process.c **** break; 324:src/l502_user_process.c **** } 325:src/l502_user_process.c **** case 0x8003:{ //configure ADC 326:src/l502_user_process.c **** uint32_t err_codes[15] = {0,}; 327:src/l502_user_process.c **** err_codes[0] = params_set_lch_cnt(1); 328: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 329: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, 330:src/l502_user_process.c **** err_codes[2] = params_set_adc_freq_div(1); 331:src/l502_user_process.c **** err_codes[3] = params_set_ref_freq(2000000); 332:src/l502_user_process.c **** err_codes[4] = params_set_adc_interframe_delay(0); 333:src/l502_user_process.c **** err_codes[5] = params_set_sync_mode (L502_SYNC_INTERNAL); 334:src/l502_user_process.c **** err_codes[6] = params_set_sync_start_mode (L502_SYNC_INTERNAL); 335:src/l502_user_process.c **** //err_codes[7] = params_set_din_freq_div; 336:src/l502_user_process.c **** //err_codes[8] = params_set_dac_freq_div; 337:src/l502_user_process.c **** 338:src/l502_user_process.c **** err_codes[9] = sport_in_set_step_size(1024); 339:src/l502_user_process.c **** 340:src/l502_user_process.c **** //L502_BF_PARAM_ADC_COEF 341:src/l502_user_process.c **** //err_codes[10] = fpga_reg_write(f_regaddr_k[range], ??); 342:src/l502_user_process.c **** //err_codes[11] = fpga_reg_write(f_regaddr_offs[range], ??); 343:src/l502_user_process.c **** err_codes[12] = configure(); 344:src/l502_user_process.c **** 345:src/l502_user_process.c **** 346:src/l502_user_process.c **** 347:src/l502_user_process.c **** 348:src/l502_user_process.c **** uint32_t err_codes_sum = 0; 349:src/l502_user_process.c **** for (int i = 0; i < 15; ++i){ 350:src/l502_user_process.c **** err_codes_sum += err_codes[i]; 351:src/l502_user_process.c **** } 352:src/l502_user_process.c **** l502_cmd_done(err_codes_sum, err_codes, 15); 353:src/l502_user_process.c **** break; 354:src/l502_user_process.c **** } 355:src/l502_user_process.c **** case 0x8004:{ //start streams 356:src/l502_user_process.c **** uint32_t err_codes[5] = {0,}; 357:src/l502_user_process.c **** l502_stream_init(); 358:src/l502_user_process.c **** err_codes[0] = stream_enable(L502_STREAM_ADC | L502_STREAM_DIN); //bitmask 359:src/l502_user_process.c **** err_codes[1] = stream_out_preload(); 360:src/l502_user_process.c **** err_codes[2] = streams_start(); 361:src/l502_user_process.c **** //hdma_send_start(); 362:src/l502_user_process.c **** l502_cmd_done(0, err_codes, 5); 363:src/l502_user_process.c **** break; 364:src/l502_user_process.c **** } 365:src/l502_user_process.c **** case 0x8005:{ //get some data from adc buff. Or simple flag, raised inside usr_in_proc_data() 366:src/l502_user_process.c **** 367:src/l502_user_process.c **** uint32_t streams_sum = streams_cnt[0] + streams_cnt[1] + streams_cnt[2] + streams_cnt[3]; 368:src/l502_user_process.c **** l502_cmd_done(streams_sum, streams_cnt, 4); 369:src/l502_user_process.c **** break; 370:src/l502_user_process.c **** } BFIN GAS /tmp/ccOIsXVY.s page 8 371:src/l502_user_process.c **** 372:src/l502_user_process.c **** case 0x8006:{ //get data from SPORT_RX copied arr 373:src/l502_user_process.c **** uint32_t sport_rx_nonzero_sum = 0; 374:src/l502_user_process.c **** 375:src/l502_user_process.c **** for (int i = 0; i < dbg_sport_rx_copy_size; ++i){ 376:src/l502_user_process.c **** if (dbg_sport_rx_copy[i]){ 377:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 378:src/l502_user_process.c **** } 379:src/l502_user_process.c **** } 380:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 381:src/l502_user_process.c **** break; 382:src/l502_user_process.c **** } 383:src/l502_user_process.c **** 384:src/l502_user_process.c **** 385:src/l502_user_process.c **** 386:src/l502_user_process.c **** case 0x8007:{ //start data processing 387:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 388:src/l502_user_process.c **** break; 389:src/l502_user_process.c **** } 390:src/l502_user_process.c **** case 0x8008:{ //get data from SPORT_RX copied arr 391:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 392:src/l502_user_process.c **** break; 393:src/l502_user_process.c **** } 394:src/l502_user_process.c **** case 0x8009:{ //get data from SPORT_RX copied arr 395:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 396:src/l502_user_process.c **** break; 397:src/l502_user_process.c **** } 398:src/l502_user_process.c **** case 0x800A:{ //get data from SPORT_RX copied arr 399:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 400:src/l502_user_process.c **** break; 401:src/l502_user_process.c **** } 402:src/l502_user_process.c **** 403:src/l502_user_process.c **** 404:src/l502_user_process.c **** 405:src/l502_user_process.c **** 406:src/l502_user_process.c **** 407:src/l502_user_process.c **** case 0x8010:{ //L502_BF_USR_CMD_CODE_ECHO 408:src/l502_user_process.c **** //uint32_t test_res = f_sport_test(); 409:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 410:src/l502_user_process.c **** break; 411:src/l502_user_process.c **** } 412:src/l502_user_process.c **** 413:src/l502_user_process.c **** 414:src/l502_user_process.c **** 415:src/l502_user_process.c **** /* 416:src/l502_user_process.c **** case 0x8002:{ 417:src/l502_user_process.c **** cmd-> result = cmd->param * 2; 418:src/l502_user_process.c **** uint32_t data[] = {0,1,2,3,4,5,6,5,4,3,2,1,0}; 419:src/l502_user_process.c **** l502_cmd_done(cmd-> param*3, data, 13); 420:src/l502_user_process.c **** break;} 421:src/l502_user_process.c **** case 0x8001:{ 422:src/l502_user_process.c **** //cmd-> result = cmd->param * 2; 423:src/l502_user_process.c **** uint32_t data[] = {6,5,4,3,2,1,0,1,2,3,4,5,6}; 424:src/l502_user_process.c **** l502_cmd_done(cmd-> param*75, data, 13); 425:src/l502_user_process.c **** break;} 426:src/l502_user_process.c **** */ 427:src/l502_user_process.c **** BFIN GAS /tmp/ccOIsXVY.s page 9 428:src/l502_user_process.c **** default: { 429:src/l502_user_process.c **** l502_cmd_done(1, NULL, 0); 430:src/l502_user_process.c **** } 431:src/l502_user_process.c **** } 432:src/l502_user_process.c **** //l502_cmd_done(1, 1, 1); 433:src/l502_user_process.c **** //l502_cmd_done(L502_BF_ERR_UNSUP_CMD, NULL, 0); 434:src/l502_user_process.c **** } 26 .loc 1 434 0 27 000c 7E30 R7 = SP; 288:src/l502_user_process.c **** switch (cmd->code){ 28 .loc 1 288 0 29 000e 0095 R0 = W [P0] (Z); 30 .LVL1: 31 0010 0850 R0 = R0 + R1; 32 0012 C042 R0 = R0.L (Z); 33 0014 7960 R1 = 15 (X); 34 0016 080A cc =R0<=R1 (iu); 35 0018 0B1C if cc jump .L41 (bp); 36 .L2: 429:src/l502_user_process.c **** l502_cmd_done(1, NULL, 0); 37 .loc 1 429 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 .L38: 44 .loc 1 434 0 45 0024 3732 SP = R7; 46 0026 01E80000 UNLINK; 47 002a BD05 ( r7:7, p5:5 ) = [sp++]; 48 49 .LCFI2: 50 002c 1000 rts; 51 .LVL3: 52 .L41: 288:src/l502_user_process.c **** switch (cmd->code){ 53 .loc 1 288 0 54 002e 0832 P1 = R0; 55 0030 4AE10000 P2.H = .L14; 56 0034 0AE10000 P2.L = .L14; 57 0038 8A5E P2 = P2 + (P1 << 2); 58 003a 5291 P2 = [P2]; 59 003c 5200 jump (P2); 60 .section .rodata 61 .align 4 62 .align 4 63 .L14: 64 0000 3E000000 .dd .L13; 65 0004 C6000000 .dd .L4; 66 0008 F2000000 .dd .L5; 67 000c A4010000 .dd .L6; 68 0010 D6010000 .dd .L7; 69 0014 52000000 .dd .L8; 70 0018 3E000000 .dd .L13; 71 001c 3E000000 .dd .L13; 72 0020 3E000000 .dd .L13; BFIN GAS /tmp/ccOIsXVY.s page 10 73 0024 3E000000 .dd .L13; 74 0028 1A000000 .dd .L2; 75 002c 1A000000 .dd .L2; 76 0030 1A000000 .dd .L2; 77 0034 1A000000 .dd .L2; 78 0038 1A000000 .dd .L2; 79 003c 3E000000 .dd .L13; 80 .text; 81 .L13: 409:src/l502_user_process.c **** l502_cmd_done(cmd-> param, NULL, 0); 82 .loc 1 409 0 83 003e 40A0 R0 = [P0+4]; 84 0040 0160 R1 = 0 (X); 85 0042 0260 R2 = 0 (X); 86 0044 FFE3DEFF call _l502_cmd_done; 87 .LVL4: 88 .loc 1 434 0 89 0048 3732 SP = R7; 90 004a 01E80000 UNLINK; 91 004e BD05 ( r7:7, p5:5 ) = [sp++]; 92 93 .LCFI3: 94 0050 1000 rts; 95 .LVL5: 96 .L8: 97 .LBB2: 369:src/l502_user_process.c **** break; 98 .loc 1 369 0 99 0052 4AE10000 P2.H = _dbg_sport_rx_copy; 100 0056 0AE12800 P2.L = _dbg_sport_rx_copy; 101 005a 1091 R0 = [P2]; 102 005c 0802 CC = R0; 103 005e 0002 R0 = CC; 104 .LBE2: 105 .LBB3: 106 .LBB4: 377:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 107 .loc 1 377 0 108 0060 51A0 R1 = [P2+4]; 109 0062 1030 R2 = R0; 110 .LVL6: 111 0064 010C cc =R1==0; 112 0066 0A64 R2 += 1; 113 0068 0206 if !cc R0 = R2; 114 .LVL7: 115 006a 91A0 R1 = [P2+8]; 116 006c 1030 R2 = R0; 117 006e 010C cc =R1==0; 118 0070 0A64 R2 += 1; 119 .LVL8: 120 0072 0206 if !cc R0 = R2; 121 .LVL9: 122 0074 D1A0 R1 = [P2+12]; 123 0076 1030 R2 = R0; 124 0078 010C cc =R1==0; 125 007a 0A64 R2 += 1; 126 .LVL10: BFIN GAS /tmp/ccOIsXVY.s page 11 127 007c 0206 if !cc R0 = R2; 128 .LVL11: 129 007e 11A1 R1 = [P2+16]; 130 0080 1030 R2 = R0; 131 0082 010C cc =R1==0; 132 0084 0A64 R2 += 1; 133 .LVL12: 134 0086 0206 if !cc R0 = R2; 135 .LVL13: 136 0088 51A1 R1 = [P2+20]; 137 008a 1030 R2 = R0; 138 008c 010C cc =R1==0; 139 008e 0A64 R2 += 1; 140 .LVL14: 141 0090 0206 if !cc R0 = R2; 142 .LVL15: 143 0092 91A1 R1 = [P2+24]; 144 0094 1030 R2 = R0; 145 0096 010C cc =R1==0; 146 0098 0A64 R2 += 1; 147 .LVL16: 148 009a 0206 if !cc R0 = R2; 149 .LVL17: 150 009c D1A1 R1 = [P2+28]; 151 009e 1030 R2 = R0; 152 00a0 010C cc =R1==0; 153 00a2 0A64 R2 += 1; 154 .LVL18: 155 00a4 0206 if !cc R0 = R2; 156 .LVL19: 157 00a6 11A2 R1 = [P2+32]; 158 00a8 1030 R2 = R0; 159 00aa 010C cc =R1==0; 160 00ac 0A64 R2 += 1; 161 .LVL20: 162 00ae 0206 if !cc R0 = R2; 163 .LVL21: 164 .LBE4: 380:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 165 .loc 1 380 0 166 00b0 51A2 R1 = [P2+36]; 167 .LBB5: 377:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 168 .loc 1 377 0 169 00b2 1030 R2 = R0; 170 .LBE5: 380:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 171 .loc 1 380 0 172 00b4 010C cc =R1==0; 173 .LBB6: 377:src/l502_user_process.c **** ++sport_rx_nonzero_sum; 174 .loc 1 377 0 175 00b6 0A64 R2 += 1; 176 .LVL22: 177 .LBE6: 380:src/l502_user_process.c **** l502_cmd_done(sport_rx_nonzero_sum, dbg_sport_rx_copy, 1024); 178 .loc 1 380 0 BFIN GAS /tmp/ccOIsXVY.s page 12 179 00b8 0206 if !cc R0 = R2; 180 .LVL23: 181 00ba 4A30 R1 = P2; 182 00bc 22E10004 R2 = 1024 (X); 183 00c0 FFE3A0FF call _l502_cmd_done; 184 .LVL24: 185 00c4 B02F jump.s .L38; 186 .LVL25: 187 .L4: 188 .LBE3: 189 .LBB7: 317:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 190 .loc 1 317 0 191 00c6 C1AC P1 = [P0+12]; 192 .LBE7: 313:src/l502_user_process.c **** break; 193 .loc 1 313 0 194 00c8 6E32 P5 = SP; 195 .LBB10: 317:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 196 .loc 1 317 0 197 00ca 4A44 P2 = P1 << 2; 198 00cc 226C P2 += 4; 199 00ce 1644 SP -= P2; 200 00d0 4E30 R1 = SP; 201 .LBB8: 318:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 202 .loc 1 318 0 203 00d2 5130 R2 = P1; 204 .LBE8: 317:src/l502_user_process.c **** uint32_t rcv_data[cmd->data_size]; 205 .loc 1 317 0 206 00d4 C164 R1 += 24; 207 .LBB9: 318:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 208 .loc 1 318 0 209 00d6 020C cc =R2==0; 210 00d8 0818 if cc jump .L16; 211 00da 1132 P2 = R1; 212 00dc 0060 R0 = 0 (X); 213 .LVL26: 214 .L17: 320:src/l502_user_process.c **** rcv_data[I] = I; 215 .loc 1 320 0 216 00de 1092 [P2++] = R0; 318:src/l502_user_process.c **** for (uint32_t I = 0; I < (cmd -> data_size); ++I){ 217 .loc 1 318 0 218 00e0 0864 R0 += 1; 219 00e2 C2A0 R2 = [P0+12]; 220 00e4 020A cc =R2<=R0 (iu); 221 00e6 FC17 if !cc jump .L17 (bp); 222 .L16: 223 .LBE9: 322:src/l502_user_process.c **** l502_cmd_done(cmd-> param, rcv_data, cmd->data_size); 224 .loc 1 322 0 225 00e8 40A0 R0 = [P0+4]; 226 .LVL27: BFIN GAS /tmp/ccOIsXVY.s page 13 227 00ea FFE38BFF call _l502_cmd_done; 228 .LVL28: 229 00ee 7532 SP = P5; 230 00f0 9A2F jump.s .L38; 231 .LVL29: 232 .L5: 233 .LBE10: 234 .LBB11: 326:src/l502_user_process.c **** uint32_t err_codes[15] = {0,}; 235 .loc 1 326 0 236 00f2 2AE1B0FF P2 = -80 (X); 237 00f6 575B P5 = FP + P2; 238 00f8 0160 R1 = 0 (X); 239 00fa E261 R2 = 60 (X); 240 00fc 4530 R0 = P5; 241 00fe FFE381FF call _memset; 242 .LVL30: 327:src/l502_user_process.c **** err_codes[0] = params_set_lch_cnt(1); 243 .loc 1 327 0 244 0102 0860 R0 = 1 (X); 245 0104 FFE37EFF call _params_set_lch_cnt; 246 0108 C0BA [FP+-80] = R0; 329: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, 247 .loc 1 329 0 248 010a 0860 R0 = 1 (X); 249 010c F0B0 [SP+12] = R0; 250 010e 30B1 [SP+16] = R0; 251 0110 0060 R0 = 0 (X); 252 0112 00CC09C2 R1 = R1 -|- R1 || 252 70B10000 253 [SP+20] = R0 || 254 nop; 255 011a 0260 R2 = 0 (X); 256 011c FFE372FF call _params_set_lch; 257 0120 D0BA [FP+-76] = R0; 330:src/l502_user_process.c **** err_codes[2] = params_set_adc_freq_div(1); 258 .loc 1 330 0 259 0122 0860 R0 = 1 (X); 260 0124 FFE36EFF call _params_set_adc_freq_div; 261 0128 E0BA [FP+-72] = R0; 331:src/l502_user_process.c **** err_codes[3] = params_set_ref_freq(2000000); 262 .loc 1 331 0 263 012a 20E1093D R0 = 15625 (X); 264 012e 384F R0 <<= 7; 265 0130 FFE368FF call _params_set_ref_freq; 266 0134 F0BA [FP+-68] = R0; 332:src/l502_user_process.c **** err_codes[4] = params_set_adc_interframe_delay(0); 267 .loc 1 332 0 268 0136 0060 R0 = 0 (X); 269 0138 FFE364FF call _params_set_adc_interframe_delay; 270 013c 00BB [FP+-64] = R0; 333:src/l502_user_process.c **** err_codes[5] = params_set_sync_mode (L502_SYNC_INTERNAL); 271 .loc 1 333 0 272 013e 0060 R0 = 0 (X); 273 0140 FFE360FF call _params_set_sync_mode; 274 0144 10BB [FP+-60] = R0; 334:src/l502_user_process.c **** err_codes[6] = params_set_sync_start_mode (L502_SYNC_INTERNAL); BFIN GAS /tmp/ccOIsXVY.s page 14 275 .loc 1 334 0 276 0146 0060 R0 = 0 (X); 277 0148 FFE35CFF call _params_set_sync_start_mode; 278 014c 20BB [FP+-56] = R0; 338:src/l502_user_process.c **** err_codes[9] = sport_in_set_step_size(1024); 279 .loc 1 338 0 280 014e 20E10004 R0 = 1024 (X); 281 0152 FFE357FF call _sport_in_set_step_size; 282 0156 50BB [FP+-44] = R0; 343:src/l502_user_process.c **** err_codes[12] = configure(); 283 .loc 1 343 0 284 0158 FFE354FF call _configure; 285 .LBB12: 350:src/l502_user_process.c **** err_codes_sum += err_codes[i]; 286 .loc 1 350 0 287 015c D2B8 R2 = [FP+-76]; 288 015e C1B8 R1 = [FP+-80]; 289 0160 04CC0A02 R1 = R1 + R2 (NS) || 289 80BB0000 290 [FP+-32] = R0 || 291 nop; 292 .LVL31: 293 0168 E2B8 R2 = [FP+-72]; 294 016a 5150 R1 = R1 + R2; 295 .LVL32: 296 016c F2B8 R2 = [FP+-68]; 297 016e 5150 R1 = R1 + R2; 298 .LVL33: 299 0170 02B9 R2 = [FP+-64]; 300 0172 5150 R1 = R1 + R2; 301 .LVL34: 302 0174 12B9 R2 = [FP+-60]; 303 0176 5150 R1 = R1 + R2; 304 .LVL35: 305 0178 22B9 R2 = [FP+-56]; 306 017a 5150 R1 = R1 + R2; 307 .LVL36: 308 017c 32B9 R2 = [FP+-52]; 309 017e 5150 R1 = R1 + R2; 310 .LVL37: 311 0180 42B9 R2 = [FP+-48]; 312 0182 5150 R1 = R1 + R2; 313 .LVL38: 314 0184 52B9 R2 = [FP+-44]; 315 0186 5150 R1 = R1 + R2; 316 .LVL39: 317 0188 62B9 R2 = [FP+-40]; 318 018a 5150 R1 = R1 + R2; 319 .LVL40: 320 018c 72B9 R2 = [FP+-36]; 321 018e 5150 R1 = R1 + R2; 322 .LVL41: 323 0190 0850 R0 = R0 + R1; 324 .LVL42: 325 0192 91B9 R1 = [FP+-28]; 326 0194 0850 R0 = R0 + R1; 327 .LVL43: BFIN GAS /tmp/ccOIsXVY.s page 15 328 .LBE12: 352:src/l502_user_process.c **** l502_cmd_done(err_codes_sum, err_codes, 15); 329 .loc 1 352 0 330 0196 A1B9 R1 = [FP+-24]; 331 0198 0850 R0 = R0 + R1; 332 .LVL44: 333 019a 4D30 R1 = P5; 334 019c 7A60 R2 = 15 (X); 335 019e FFE331FF call _l502_cmd_done; 336 01a2 412F jump.s .L38; 337 .LVL45: 338 .L6: 339 .LBE11: 340 .LBB13: 356:src/l502_user_process.c **** uint32_t err_codes[5] = {0,}; 341 .loc 1 356 0 342 01a4 0060 R0 = 0 (X); 343 01a6 B0BB [FP+-20] = R0; 344 01a8 C0BB [FP+-16] = R0; 345 01aa D0BB [FP+-12] = R0; 346 01ac E0BB [FP+-8] = R0; 347 01ae F0BB [FP+-4] = R0; 357:src/l502_user_process.c **** l502_stream_init(); 348 .loc 1 357 0 349 01b0 FFE328FF call _l502_stream_init; 350 .LVL46: 358:src/l502_user_process.c **** err_codes[0] = stream_enable(L502_STREAM_ADC | L502_STREAM_DIN); //bitmask 351 .loc 1 358 0 352 01b4 1860 R0 = 3 (X); 353 01b6 FFE325FF call _stream_enable; 354 01ba B0BB [FP+-20] = R0; 359:src/l502_user_process.c **** err_codes[1] = stream_out_preload(); 355 .loc 1 359 0 356 01bc FFE322FF call _stream_out_preload; 357 01c0 C0BB [FP+-16] = R0; 360:src/l502_user_process.c **** err_codes[2] = streams_start(); 358 .loc 1 360 0 359 01c2 FFE31FFF call _streams_start; 360 01c6 D0BB [FP+-12] = R0; 362:src/l502_user_process.c **** l502_cmd_done(0, err_codes, 5); 361 .loc 1 362 0 362 01c8 4F30 R1 = FP; 363 01ca 0060 R0 = 0 (X); 364 01cc 6167 R1 += -20; 365 01ce 2A60 R2 = 5 (X); 366 01d0 FFE318FF call _l502_cmd_done; 367 01d4 282F jump.s .L38; 368 .LVL47: 369 .L7: 370 .LBE13: 371 .LBB14: 368:src/l502_user_process.c **** l502_cmd_done(streams_sum, streams_cnt, 4); 372 .loc 1 368 0 373 01d6 4AE10000 P2.H = _streams_cnt; 374 01da 0AE10000 P2.L = _streams_cnt; 375 01de 1191 R1 = [P2]; 376 01e0 50A0 R0 = [P2+4]; BFIN GAS /tmp/ccOIsXVY.s page 16 377 01e2 0850 R0 = R0 + R1; 378 01e4 91A0 R1 = [P2+8]; 379 01e6 0850 R0 = R0 + R1; 380 01e8 D1A0 R1 = [P2+12]; 381 01ea 0850 R0 = R0 + R1; 382 01ec 4A30 R1 = P2; 383 01ee 2260 R2 = 4 (X); 384 01f0 FFE308FF call _l502_cmd_done; 385 .LVL48: 386 01f4 182F jump.s .L38; 387 .LBE14: 388 .LFE6: 389 .size _usr_cmd_process, .-_usr_cmd_process 390 01f6 0000 .align 4 391 .global _sport_tx_done; 392 .type _sport_tx_done, STT_FUNC; 393 _sport_tx_done: 394 .LFB5: 259:src/l502_user_process.c **** void sport_tx_done(uint32_t* addr, uint32_t size) { 395 .loc 1 259 0 396 .LVL49: 260:src/l502_user_process.c **** ++streams_cnt[1]; 397 .loc 1 260 0 398 01f8 4AE10000 P2.H = _streams_cnt; 259:src/l502_user_process.c **** void sport_tx_done(uint32_t* addr, uint32_t size) { 399 .loc 1 259 0 400 01fc 00E80000 LINK 0; 401 .LCFI4: 260:src/l502_user_process.c **** ++streams_cnt[1]; 402 .loc 1 260 0 403 0200 0AE10000 P2.L = _streams_cnt; 404 0204 50A0 R0 = [P2+4]; 405 .LVL50: 406 0206 0864 R0 += 1; 407 0208 50B0 [P2+4] = R0; 262:src/l502_user_process.c **** stream_out_buf_free(size); 408 .loc 1 262 0 409 020a 0130 R0 = R1; 263:src/l502_user_process.c **** } 410 .loc 1 263 0 411 020c 01E80000 UNLINK; 262:src/l502_user_process.c **** stream_out_buf_free(size); 412 .loc 1 262 0 413 0210 FFE2F8FE jump.l _stream_out_buf_free; 414 .LVL51: 415 .LFE5: 416 .size _sport_tx_done, .-_sport_tx_done 417 .align 4 418 .global _hdma_send_done; 419 .type _hdma_send_done, STT_FUNC; 420 _hdma_send_done: 421 .LFB4: 241:src/l502_user_process.c **** void hdma_send_done(uint32_t* addr, uint32_t size) { 422 .loc 1 241 0 423 .LVL52: 242:src/l502_user_process.c **** ++streams_cnt[3]; 424 .loc 1 242 0 BFIN GAS /tmp/ccOIsXVY.s page 17 425 0214 4AE10000 P2.H = _streams_cnt; 241:src/l502_user_process.c **** void hdma_send_done(uint32_t* addr, uint32_t size) { 426 .loc 1 241 0 427 0218 00E80000 LINK 0; 428 .LCFI5: 242:src/l502_user_process.c **** ++streams_cnt[3]; 429 .loc 1 242 0 430 021c 0AE10000 P2.L = _streams_cnt; 431 0220 D0A0 R0 = [P2+12]; 432 .LVL53: 433 0222 0864 R0 += 1; 434 0224 D0B0 [P2+12] = R0; 244:src/l502_user_process.c **** stream_in_buf_free(size); 435 .loc 1 244 0 436 0226 0130 R0 = R1; 245:src/l502_user_process.c **** } 437 .loc 1 245 0 438 0228 01E80000 UNLINK; 244:src/l502_user_process.c **** stream_in_buf_free(size); 439 .loc 1 244 0 440 022c FFE2EAFE jump.l _stream_in_buf_free; 441 .LVL54: 442 .LFE4: 443 .size _hdma_send_done, .-_hdma_send_done 444 .align 4 445 .global _usr_out_proc_data; 446 .type _usr_out_proc_data, STT_FUNC; 447 _usr_out_proc_data: 448 .LFB3: 205:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 449 .loc 1 205 0 450 .LVL55: 451 0230 7005 [--sp] = ( r7:6 ); 452 453 .LCFI6: 210:src/l502_user_process.c **** ++streams_cnt[2]; 454 .loc 1 210 0 455 0232 4AE10000 P2.H = _streams_cnt; 205:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 456 .loc 1 205 0 457 0236 00E80300 LINK 12; 458 .LCFI7: 210:src/l502_user_process.c **** ++streams_cnt[2]; 459 .loc 1 210 0 460 023a 0AE10000 P2.L = _streams_cnt; 205:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 461 .loc 1 205 0 462 023e 3030 R6 = R0; 210:src/l502_user_process.c **** ++streams_cnt[2]; 463 .loc 1 210 0 464 0240 90A0 R0 = [P2+8]; 465 .LVL56: 466 0242 0864 R0 += 1; 205:src/l502_user_process.c **** uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { 467 .loc 1 205 0 468 0244 82CE01CE R7 = ROT R1 BY 0 || 468 90B00000 BFIN GAS /tmp/ccOIsXVY.s page 18 469 [P2+8] = R0 || 470 nop; 471 .LVL57: 212:src/l502_user_process.c **** if (sport_tx_req_rdy()) { 472 .loc 1 212 0 473 024c FFE3DAFE call _sport_tx_req_rdy; 474 0250 000C cc =R0==0; 475 0252 0E18 if cc jump .L50; 476 0254 20E10040 R0 = 16384 (X); 477 0258 070A cc =R7<=R0 (iu); 478 025a 3806 if !cc R7 = R0; 479 .LVL58: 219:src/l502_user_process.c **** sport_tx_start_req(data, size); 480 .loc 1 219 0 481 025c 0630 R0 = R6; 482 025e 0F30 R1 = R7; 483 0260 FFE3D0FE call _sport_tx_start_req; 224:src/l502_user_process.c **** } 484 .loc 1 224 0 485 0264 0730 R0 = R7; 486 0266 01E80000 UNLINK; 487 026a 3005 ( r7:6 ) = [sp++]; 488 489 .LCFI8: 490 .LVL59: 491 026c 1000 rts; 492 .LVL60: 493 .L50: 212:src/l502_user_process.c **** if (sport_tx_req_rdy()) { 494 .loc 1 212 0 495 026e 0760 R7 = 0 (X); 496 .LVL61: 224:src/l502_user_process.c **** } 497 .loc 1 224 0 498 0270 0730 R0 = R7; 499 0272 01E80000 UNLINK; 500 0276 3005 ( r7:6 ) = [sp++]; 501 502 .LCFI9: 503 .LVL62: 504 0278 1000 rts; 505 .LFE3: 506 .size _usr_out_proc_data, .-_usr_out_proc_data 507 027a 0000 .align 4 508 .global _usr_in_proc_data; 509 .type _usr_in_proc_data, STT_FUNC; 510 _usr_in_proc_data: 511 .LFB2: 95:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 512 .loc 1 95 0 513 .LVL63: 514 027c E305 [--sp] = ( r7:4, p5:3 ); 515 516 .LCFI10: 99:src/l502_user_process.c **** ++streams_cnt[0]; 517 .loc 1 99 0 518 027e 4AE10000 P2.H = _streams_cnt; BFIN GAS /tmp/ccOIsXVY.s page 19 95:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 519 .loc 1 95 0 520 0282 00E80300 LINK 12; 521 .LCFI11: 99:src/l502_user_process.c **** ++streams_cnt[0]; 522 .loc 1 99 0 523 0286 0AE10000 P2.L = _streams_cnt; 95:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 524 .loc 1 95 0 525 028a 2832 P5 = R0; 99:src/l502_user_process.c **** ++streams_cnt[0]; 526 .loc 1 99 0 527 028c 1091 R0 = [P2]; 528 .LVL64: 529 028e 0864 R0 += 1; 95:src/l502_user_process.c **** uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { 530 .loc 1 95 0 531 0290 82CE01CE R7 = ROT R1 BY 0 || 531 10930000 532 [P2] = R0 || 533 nop; 534 .LVL65: 535 .LBB15: 115:src/l502_user_process.c **** for (int data_I = 0; (data_I < size) && (TX_buff_I < TX_BUFF_SIZE); ++data_I){ 536 .loc 1 115 0 537 0298 010C cc =R1==0; 538 029a 3518 if cc jump .L52; 539 .LVL66: 540 .LBB19: 139:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 541 .loc 1 139 0 542 029c 48E10000 P0.H = _TX_buff; 135:src/l502_user_process.c **** if (word & (0b11 << 16)){ 543 .loc 1 135 0 544 02a0 1B60 R3 = 3 (X); 136:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0b01101010 << 24; 545 .loc 1 136 0 546 02a2 AE61 R6 = 53 (X); 127:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0xD0ADEFEB; 547 .loc 1 127 0 548 02a4 4BE1ADD0 P3.H = 53421; 123:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0xD0ADEFEA; 549 .loc 1 123 0 550 02a8 45E1ADD0 R5.H = 53421; 551 .LBE19: 115:src/l502_user_process.c **** for (int data_I = 0; (data_I < size) && (TX_buff_I < TX_BUFF_SIZE); ++data_I){ 552 .loc 1 115 0 553 02ac 0168 P1 = 0 (X); 554 .LVL67: 555 02ae 0260 R2 = 0 (X); 556 .LVL68: 557 02b0 0268 P2 = 0 (X); 558 .LBB18: 139:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 559 .loc 1 139 0 560 02b2 08E10000 P0.L = _TX_buff; 135:src/l502_user_process.c **** if (word & (0b11 << 16)){ BFIN GAS /tmp/ccOIsXVY.s page 20 561 .loc 1 135 0 562 02b6 834F R3 <<= 16; 136:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0b01101010 << 24; 563 .loc 1 136 0 564 02b8 CE4F R6 <<= 25; 127:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0xD0ADEFEB; 565 .loc 1 127 0 566 02ba 0BE1EBEF P3.L = 61419; 123:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0xD0ADEFEA; 567 .loc 1 123 0 568 02be 05E1EAEF R5.L = 61418; 569 02c2 2CE16300 P4 = 99 (X); 570 02c6 0F20 jump.s .L58; 571 .LVL69: 572 .L65: 135:src/l502_user_process.c **** if (word & (0b11 << 16)){ 573 .loc 1 135 0 574 02c8 1954 R0 = R1 & R3; 575 .LVL70: 576 02ca 000C cc =R0==0; 577 02cc 041C if cc jump .L55 (bp); 136:src/l502_user_process.c **** TX_buff[TX_buff_I++] = 0b01101010 << 24; 578 .loc 1 136 0 579 02ce 885E P2 = P0 + (P1 << 2); 580 02d0 1693 [P2] = R6; 581 02d2 096C P1 += 1; 582 .LVL71: 583 .L55: 584 .LBE18: 115:src/l502_user_process.c **** for (int data_I = 0; (data_I < size) && (TX_buff_I < TX_BUFF_SIZE); ++data_I){ 585 .loc 1 115 0 586 02d4 0A64 R2 += 1; 587 02d6 1232 P2 = R2; 588 02d8 BA09 cc =R2> 24; 603 .LVL73: 604 02ec 810C cc =R1<0; 605 02ee 1518 if cc jump .L64; 134:src/l502_user_process.c **** } else if ( header == 0b00000000){ //it`s digital 606 .loc 1 134 0 607 02f0 4043 R0 = R0.B (Z); 608 .LVL74: BFIN GAS /tmp/ccOIsXVY.s page 21 609 02f2 000C cc =R0==0; 610 02f4 EA1F if cc jump .L65 (bp); 611 .L57: 139:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 612 .loc 1 139 0 613 02f6 885E P2 = P0 + (P1 << 2); 614 .LBE17: 115:src/l502_user_process.c **** for (int data_I = 0; (data_I < size) && (TX_buff_I < TX_BUFF_SIZE); ++data_I){ 615 .loc 1 115 0 616 02f8 0A64 R2 += 1; 617 .LBB16: 139:src/l502_user_process.c **** TX_buff[TX_buff_I++] = word; 618 .loc 1 139 0 619 02fa 1193 [P2] = R1; 620 02fc 096C P1 += 1; 621 .LBE16: 115:src/l502_user_process.c **** for (int data_I = 0; (data_I < size) && (TX_buff_I < TX_BUFF_SIZE); ++data_I){ 622 .loc 1 115 0 623 02fe 1232 P2 = R2; 624 0300 BA09 cc =R2