BFIN GAS /tmp/cc5lGgSv.s page 1 1 .file "src/l502_tests.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 8A020000 .text; 8 0200D300 8 00000101 8 FB0E0D00 8 01010101 9 .Ltext0: 10 .align 4 11 .global _l502_cmd_test; 12 .type _l502_cmd_test, STT_FUNC; 13 _l502_cmd_test: 14 .LFB2: 15 .file 1 "src/l502_tests.c" 1:src/l502_tests.c **** /** @file l502_test.c 2:src/l502_tests.c **** Данный файл содержит реализацию тестов аппаратуры. 3:src/l502_tests.c **** Эти тесты используется при наладке прибора и не вып 4:src/l502_tests.c **** однако включение их в прошивку позволяет выполнять 5:src/l502_tests.c **** (однако не во время сбора данных и т.п.) 6:src/l502_tests.c **** 7:src/l502_tests.c **** Для управления тестами предназначена специальная к 8:src/l502_tests.c **** Параметр этой каоманды определяет действие: 9:src/l502_tests.c **** - запустить тест с заданным номером 10:src/l502_tests.c **** - остановить текущий тест 11:src/l502_tests.c **** - получить результаты выполняемого в данных момен 12:src/l502_tests.c **** последнего выполняемого теста (если тест остан 13:src/l502_tests.c **** 14:src/l502_tests.c **** По какого-либо теста модуль переходит в етстовый ре 15:src/l502_tests.c **** и выполняет функцию, соответствующую заданному тес 16:src/l502_tests.c **** должен переодически проверять приход других команд 17:src/l502_tests.c **** Тест выполняется либо до ошибки, либо до прихода ком 18:src/l502_tests.c **** Узнать результат теста можно командой с параметром 19:src/l502_tests.c **** 20:src/l502_tests.c **** Доступны следующие тесты: 21:src/l502_tests.c **** - Проверка SDRAM 22:src/l502_tests.c **** - Проверка SPI 23:src/l502_tests.c **** - Проверка SPORT 24:src/l502_tests.c **** 25:src/l502_tests.c **** **************************************************************************************************/ 26:src/l502_tests.c **** 27:src/l502_tests.c **** 28:src/l502_tests.c **** #include 29:src/l502_tests.c **** #include 30:src/l502_tests.c **** #include 31:src/l502_tests.c **** 32:src/l502_tests.c **** #include "l502_cmd.h" 33:src/l502_tests.c **** #include "l502_fpga.h" 34:src/l502_tests.c **** #include "l502_sport_tx.h" 35:src/l502_tests.c **** 36:src/l502_tests.c **** #include 37:src/l502_tests.c **** 38:src/l502_tests.c **** BFIN GAS /tmp/cc5lGgSv.s page 2 39:src/l502_tests.c **** 40:src/l502_tests.c **** extern int g_mode; 41:src/l502_tests.c **** 42:src/l502_tests.c **** /* модуль счетчика, используемого для тестов SDRAM и SPORT */ 43:src/l502_tests.c **** #define L502_TEST_CNTR_MODULE 35317 44:src/l502_tests.c **** 45:src/l502_tests.c **** /* размер одного банка SDRAM */ 46:src/l502_tests.c **** #define SDRAM_BANK_SIZE (4UL*1024*1024*2) 47:src/l502_tests.c **** 48:src/l502_tests.c **** /* адреса банков SDRAM */ 49:src/l502_tests.c **** static volatile uint16_t* bank1 = NULL; 50:src/l502_tests.c **** static volatile uint16_t* bank2 = (uint16_t*)(SDRAM_BANK_SIZE); 51:src/l502_tests.c **** static volatile uint16_t* bank3 = (uint16_t*)(2*SDRAM_BANK_SIZE); 52:src/l502_tests.c **** static volatile uint16_t* bank4 = (uint16_t*)(3*SDRAM_BANK_SIZE); 53:src/l502_tests.c **** 54:src/l502_tests.c **** 55:src/l502_tests.c **** #define SPORT_TEST_START_ADDR 0xFF900000 56:src/l502_tests.c **** #define SPORT_TEST_BUF_SIZE 4096 57:src/l502_tests.c **** 58:src/l502_tests.c **** /* результат последнего теста */ 59:src/l502_tests.c **** static t_l502_bf_test_res f_test_res; 60:src/l502_tests.c **** /* номер последнего выполняемого теста */ 61:src/l502_tests.c **** static int32_t f_cur_test_ind = -1; 62:src/l502_tests.c **** 63:src/l502_tests.c **** /* объявление функций запуска тестов */ 64:src/l502_tests.c **** static int f_sdram_test(void); 65:src/l502_tests.c **** static int f_spi_test(void); 66:src/l502_tests.c **** static int f_sport_test(void); 67:src/l502_tests.c **** 68:src/l502_tests.c **** 69:src/l502_tests.c **** /* стркутура, описывающая соответствия кода теста и фу 70:src/l502_tests.c **** typedef struct { 71:src/l502_tests.c **** uint32_t test_code; 72:src/l502_tests.c **** int (*start)(void); 73:src/l502_tests.c **** void (*get_result)(t_l502_bf_cmd *cmd); 74:src/l502_tests.c **** } t_test_pars; 75:src/l502_tests.c **** /* теблица соответствий функций и кодов тестов */ 76:src/l502_tests.c **** static t_test_pars f_test_pars[] = { 77:src/l502_tests.c **** { L502_BF_CMD_TEST_ECHO, NULL, NULL}, 78:src/l502_tests.c **** { L502_BF_CMD_TEST_SPORT, f_sport_test, NULL}, 79:src/l502_tests.c **** { L502_BF_CMD_TEST_SDRAM, f_sdram_test, NULL}, 80:src/l502_tests.c **** { L502_BF_CMD_TEST_SPI, f_spi_test, NULL} 81:src/l502_tests.c **** }; 82:src/l502_tests.c **** 83:src/l502_tests.c **** 84:src/l502_tests.c **** 85:src/l502_tests.c **** 86:src/l502_tests.c **** 87:src/l502_tests.c **** void l502_cmd_test(t_l502_bf_cmd *cmd) { 16 .loc 1 87 0 17 .LVL0: 18 0000 EB05 [--sp] = ( r7:5, p5:3 ); 19 20 .LCFI0: 21 0002 2832 P5 = R0; 22 0004 00E80300 LINK 12; 23 .LCFI1: BFIN GAS /tmp/cc5lGgSv.s page 3 88:src/l502_tests.c **** /* получение результата теста */ 89:src/l502_tests.c **** if (cmd->param == L502_BF_CMD_TEST_GET_RESULT) { 24 .loc 1 89 0 25 0008 69A0 R1 = [P5+4]; 26 000a 090C cc =R1==1; 27 000c 3E18 if cc jump .L20; 28 .LVL1: 90:src/l502_tests.c **** /* если не было никакого теста - возвращаем ошибку * 91:src/l502_tests.c **** if (f_cur_test_ind == -1) { 92:src/l502_tests.c **** l502_cmd_done(L502_BF_ERR_INVALID_CMD_PARAMS, NULL, 0); 93:src/l502_tests.c **** } else { 94:src/l502_tests.c **** f_test_res.run = (g_mode == L502_BF_MODE_TEST) ? 1 : 0; 95:src/l502_tests.c **** 96:src/l502_tests.c **** 97:src/l502_tests.c **** if (f_test_pars[f_cur_test_ind].get_result != NULL) { 98:src/l502_tests.c **** /* если есть у теста спец функция для получени 99:src/l502_tests.c **** вызываем ее */ 100:src/l502_tests.c **** f_test_pars[f_cur_test_ind].get_result(cmd); 101:src/l502_tests.c **** } else { 102:src/l502_tests.c **** /* иначе просто устанавливаем резульатат без 103:src/l502_tests.c **** l502_cmd_done(0, (uint32_t*)&f_test_res, 104:src/l502_tests.c **** sizeof(t_l502_bf_test_res)/sizeof(uint32_t)); 105:src/l502_tests.c **** } 106:src/l502_tests.c **** } 107:src/l502_tests.c **** } else if (cmd->param == L502_BF_CMD_TEST_STOP) { 29 .loc 1 107 0 30 000e 010C cc =R1==0; 31 0010 1114 if !cc jump .L5 (bp); 108:src/l502_tests.c **** /* останов теста => если тест запущен - возвращаем е 109:src/l502_tests.c **** иначе возвращаем ошибку что и так теста нету */ 110:src/l502_tests.c **** if (g_mode == L502_BF_MODE_TEST) { 32 .loc 1 110 0 33 0012 4AE10000 P2.H = _g_mode; 34 0016 0AE10000 P2.L = _g_mode; 35 001a 1091 R0 = [P2]; 36 001c 100C cc =R0==2; 37 001e 5618 if cc jump .L21; 111:src/l502_tests.c **** g_mode = L502_BF_MODE_IDLE; 112:src/l502_tests.c **** l502_cmd_done(0, NULL, 0); 113:src/l502_tests.c **** } else { 114:src/l502_tests.c **** l502_cmd_done(L502_BF_ERR_NO_TEST_IN_PROGR, NULL, 0); 38 .loc 1 114 0 39 0020 20E1FAFD R0 = -518 (X); 40 .L18: 115:src/l502_tests.c **** } 116:src/l502_tests.c **** } else { 117:src/l502_tests.c **** /* запуск теста - проходим по таблице и ищем нужный 118:src/l502_tests.c **** if (g_mode == L502_BF_MODE_IDLE) { 119:src/l502_tests.c **** uint32_t i; 120:src/l502_tests.c **** 121:src/l502_tests.c **** for (i=0, f_cur_test_ind=-1; (iparam) { 124:src/l502_tests.c **** f_cur_test_ind = i; 125:src/l502_tests.c **** memset(&f_test_res, 0, sizeof(f_test_res)); 126:src/l502_tests.c **** f_test_res.test = cmd->param; 127:src/l502_tests.c **** l502_cmd_done(0, 0, NULL); BFIN GAS /tmp/cc5lGgSv.s page 4 128:src/l502_tests.c **** 129:src/l502_tests.c **** if (f_test_pars[i].start != NULL) { 130:src/l502_tests.c **** g_mode = L502_BF_MODE_TEST; 131:src/l502_tests.c **** f_test_pars[i].start(); 132:src/l502_tests.c **** g_mode = L502_BF_MODE_IDLE; 133:src/l502_tests.c **** } 134:src/l502_tests.c **** } 135:src/l502_tests.c **** } 136:src/l502_tests.c **** 137:src/l502_tests.c **** if (f_cur_test_ind == -1) 138:src/l502_tests.c **** l502_cmd_done(L502_BF_ERR_INVALID_CMD_PARAMS, NULL, 0); 139:src/l502_tests.c **** } 140:src/l502_tests.c **** else 141:src/l502_tests.c **** { 142:src/l502_tests.c **** l502_cmd_done(L502_BF_ERR_STREAM_RUNNING, NULL, 0); 143:src/l502_tests.c **** } 144:src/l502_tests.c **** } 145:src/l502_tests.c **** } 41 .loc 1 145 0 42 0024 01E80000 UNLINK; 142:src/l502_tests.c **** l502_cmd_done(L502_BF_ERR_STREAM_RUNNING, NULL, 0); 43 .loc 1 142 0 44 0028 0160 R1 = 0 (X); 45 002a 0260 R2 = 0 (X); 46 .loc 1 145 0 47 002c AB05 ( r7:5, p5:3 ) = [sp++]; 48 49 .LCFI2: 50 .LVL2: 142:src/l502_tests.c **** l502_cmd_done(L502_BF_ERR_STREAM_RUNNING, NULL, 0); 51 .loc 1 142 0 52 002e FFE2E9FF jump.l _l502_cmd_done; 53 .LVL3: 54 .L5: 118:src/l502_tests.c **** if (g_mode == L502_BF_MODE_IDLE) { 55 .loc 1 118 0 56 0032 4BE10000 P3.H = _g_mode; 57 0036 0BE10000 P3.L = _g_mode; 58 003a 1891 R0 = [P3]; 59 003c 000C cc =R0==0; 60 003e 4E10 if !cc jump .L7; 61 .LBB2: 121:src/l502_tests.c **** for (i=0, f_cur_test_ind=-1; (iparam) { 67 .loc 1 123 0 68 004c 4CE10000 P4.H = _f_test_pars; 69 0050 0CE10000 P4.L = _f_test_pars; 121:src/l502_tests.c **** for (i=0, f_cur_test_ind=-1; (iparam) { 72 .loc 1 123 0 BFIN GAS /tmp/cc5lGgSv.s page 5 73 0056 2091 R0 = [P4]; 74 0058 0108 cc =R1==R0; 75 005a 4918 if cc jump .L22; 76 005c 0000 nop; 77 005e 0000 nop; 78 .L8: 79 0060 0000 nop; 80 0062 69A0 R1 = [P5+4]; 81 0064 E0A0 R0 = [P4+12]; 82 0066 0108 cc =R1==R0; 83 0068 6618 if cc jump .L23; 84 006a 0000 nop; 85 006c 0000 nop; 86 006e 0000 nop; 87 .L11: 88 0070 A0A1 R0 = [P4+24]; 89 0072 0108 cc =R1==R0; 90 0074 8B18 if cc jump .L24; 91 0076 0000 nop; 92 0078 0000 nop; 93 007a 0000 nop; 94 .L13: 95 007c 60A2 R0 = [P4+36]; 96 007e 0808 cc =R0==R1; 97 0080 AF18 if cc jump .L25; 98 .LVL4: 99 .L15: 138:src/l502_tests.c **** l502_cmd_done(L502_BF_ERR_INVALID_CMD_PARAMS, NULL, 0); 100 .loc 1 138 0 101 0082 20E1FEFD R0 = -514 (X); 102 0086 CF2F jump.s .L18; 103 .LVL5: 104 .L20: 105 .LBE2: 91:src/l502_tests.c **** if (f_cur_test_ind == -1) { 106 .loc 1 91 0 107 0088 4AE10000 P2.H = _f_cur_test_ind; 108 008c 0AE10000 P2.L = _f_cur_test_ind; 109 0090 5191 P1 = [P2]; 110 0092 790C cc =P1==-1; 111 0094 F71B if cc jump .L15; 94:src/l502_tests.c **** f_test_res.run = (g_mode == L502_BF_MODE_TEST) ? 1 : 0; 112 .loc 1 94 0 113 0096 4AE10000 P2.H = _g_mode; 114 009a 0AE10000 P2.L = _g_mode; 115 009e 48E10000 P0.H = _f_test_res; 116 00a2 1091 R0 = [P2]; 97:src/l502_tests.c **** if (f_test_pars[f_cur_test_ind].get_result != NULL) { 117 .loc 1 97 0 118 00a4 895C P2 = P1 + (P1 << 1); 119 00a6 49E10000 P1.H = _f_test_pars; 120 00aa 09E10000 P1.L = _f_test_pars; 121 00ae 915E P2 = P1 + (P2 << 2); 122 00b0 92AC P2 = [P2+8]; 94:src/l502_tests.c **** f_test_res.run = (g_mode == L502_BF_MODE_TEST) ? 1 : 0; 123 .loc 1 94 0 124 00b2 100C cc =R0==2; BFIN GAS /tmp/cc5lGgSv.s page 6 125 00b4 0002 R0 = CC; 126 00b6 08E10010 P0.L = _f_test_res; 127 00ba 40B0 [P0+4] = R0; 97:src/l502_tests.c **** if (f_test_pars[f_cur_test_ind].get_result != NULL) { 128 .loc 1 97 0 129 00bc 420C cc =P2==0; 130 00be B718 if cc jump .L4; 100:src/l502_tests.c **** f_test_pars[f_cur_test_ind].get_result(cmd); 131 .loc 1 100 0 132 00c0 4530 R0 = P5; 133 .loc 1 145 0 134 00c2 01E80000 UNLINK; 135 00c6 AB05 ( r7:5, p5:3 ) = [sp++]; 136 137 .LCFI3: 138 .LVL6: 100:src/l502_tests.c **** f_test_pars[f_cur_test_ind].get_result(cmd); 139 .loc 1 100 0 140 00c8 5200 jump (P2); 141 .LVL7: 142 .L21: 111:src/l502_tests.c **** g_mode = L502_BF_MODE_IDLE; 143 .loc 1 111 0 144 00ca 0060 R0 = 0 (X); 145 00cc 1093 [P2] = R0; 146 .loc 1 145 0 147 00ce 01E80000 UNLINK; 112:src/l502_tests.c **** l502_cmd_done(0, NULL, 0); 148 .loc 1 112 0 149 00d2 0260 R2 = 0 (X); 150 .loc 1 145 0 151 00d4 AB05 ( r7:5, p5:3 ) = [sp++]; 152 153 .LCFI4: 154 .LVL8: 112:src/l502_tests.c **** l502_cmd_done(0, NULL, 0); 155 .loc 1 112 0 156 00d6 FFE295FF jump.l _l502_cmd_done; 157 .LVL9: 158 .L7: 159 .loc 1 145 0 160 00da 01E80000 UNLINK; 142:src/l502_tests.c **** l502_cmd_done(L502_BF_ERR_STREAM_RUNNING, NULL, 0); 161 .loc 1 142 0 162 00de 20E1FCFD R0 = -516 (X); 163 00e2 0160 R1 = 0 (X); 164 00e4 0260 R2 = 0 (X); 165 .loc 1 145 0 166 00e6 AB05 ( r7:5, p5:3 ) = [sp++]; 167 168 .LCFI5: 169 .LVL10: 142:src/l502_tests.c **** l502_cmd_done(L502_BF_ERR_STREAM_RUNNING, NULL, 0); 170 .loc 1 142 0 171 00e8 FFE28CFF jump.l _l502_cmd_done; 172 .LVL11: 173 .L22: BFIN GAS /tmp/cc5lGgSv.s page 7 174 .LBB3: 124:src/l502_tests.c **** f_cur_test_ind = i; 175 .loc 1 124 0 176 00ec 0760 R7 = 0 (X); 177 00ee 1793 [P2] = R7; 125:src/l502_tests.c **** memset(&f_test_res, 0, sizeof(f_test_res)); 178 .loc 1 125 0 179 00f0 4AE10000 P2.H = _f_test_res; 180 00f4 0AE10010 P2.L = _f_test_res; 181 00f8 1793 [P2] = R7; 182 00fa 57B0 [P2+4] = R7; 183 00fc 97B0 [P2+8] = R7; 184 00fe D7B0 [P2+12] = R7; 185 0100 17B1 [P2+16] = R7; 186 0102 57B1 [P2+20] = R7; 187 0104 97B1 [P2+24] = R7; 188 0106 D7B1 [P2+28] = R7; 126:src/l502_tests.c **** f_test_res.test = cmd->param; 189 .loc 1 126 0 190 0108 68A0 R0 = [P5+4]; 191 010a 1093 [P2] = R0; 127:src/l502_tests.c **** l502_cmd_done(0, 0, NULL); 192 .loc 1 127 0 193 010c 0060 R0 = 0 (X); 194 010e 0160 R1 = 0 (X); 195 0110 0260 R2 = 0 (X); 196 0112 FFE377FF call _l502_cmd_done; 129:src/l502_tests.c **** if (f_test_pars[i].start != NULL) { 197 .loc 1 129 0 198 0116 62AC P2 = [P4+4]; 199 0118 420C cc =P2==0; 200 011a 0518 if cc jump .L9; 130:src/l502_tests.c **** g_mode = L502_BF_MODE_TEST; 201 .loc 1 130 0 202 011c 1060 R0 = 2 (X); 203 011e 1893 [P3] = R0; 131:src/l502_tests.c **** f_test_pars[i].start(); 204 .loc 1 131 0 205 0120 6200 call (P2); 132:src/l502_tests.c **** g_mode = L502_BF_MODE_IDLE; 206 .loc 1 132 0 207 0122 1F93 [P3] = R7; 208 .L9: 121:src/l502_tests.c **** for (i=0, f_cur_test_ind=-1; (iparam; 247 .loc 1 126 0 248 0158 68A0 R0 = [P5+4]; 249 015a 1093 [P2] = R0; 127:src/l502_tests.c **** l502_cmd_done(0, 0, NULL); 250 .loc 1 127 0 251 015c 0060 R0 = 0 (X); 252 015e FFE351FF call _l502_cmd_done; 129:src/l502_tests.c **** if (f_test_pars[i].start != NULL) { 253 .loc 1 129 0 254 0162 4AE10000 P2.H = _f_test_pars; 255 0166 0AE10000 P2.L = _f_test_pars; 256 016a 12AD P2 = [P2+16]; 257 016c 420C cc =P2==0; 258 016e 0518 if cc jump .L12; 130:src/l502_tests.c **** g_mode = L502_BF_MODE_TEST; 259 .loc 1 130 0 260 0170 1060 R0 = 2 (X); 261 0172 1893 [P3] = R0; 131:src/l502_tests.c **** f_test_pars[i].start(); 262 .loc 1 131 0 263 0174 6200 call (P2); 132:src/l502_tests.c **** g_mode = L502_BF_MODE_IDLE; 264 .loc 1 132 0 265 0176 1F93 [P3] = R7; 266 .L12: 121:src/l502_tests.c **** for (i=0, f_cur_test_ind=-1; (iparam; 299 .loc 1 126 0 300 01ae 68A0 R0 = [P5+4]; 301 01b0 1093 [P2] = R0; 127:src/l502_tests.c **** l502_cmd_done(0, 0, NULL); 302 .loc 1 127 0 303 01b2 0060 R0 = 0 (X); 304 01b4 FFE326FF call _l502_cmd_done; 129:src/l502_tests.c **** if (f_test_pars[i].start != NULL) { 305 .loc 1 129 0 306 01b8 4AE10000 P2.H = _f_test_pars; 307 01bc 0AE10000 P2.L = _f_test_pars; 308 01c0 D2AD P2 = [P2+28]; 309 01c2 420C cc =P2==0; 310 01c4 0418 if cc jump .L14; 130:src/l502_tests.c **** g_mode = L502_BF_MODE_TEST; 311 .loc 1 130 0 312 01c6 1D93 [P3] = R5; 131:src/l502_tests.c **** f_test_pars[i].start(); 313 .loc 1 131 0 BFIN GAS /tmp/cc5lGgSv.s page 10 314 01c8 6200 call (P2); 132:src/l502_tests.c **** g_mode = L502_BF_MODE_IDLE; 315 .loc 1 132 0 316 01ca 1F93 [P3] = R7; 317 .L14: 121:src/l502_tests.c **** for (i=0, f_cur_test_ind=-1; (iparam; 350 .loc 1 126 0 351 0202 68A0 R0 = [P5+4]; 352 0204 1093 [P2] = R0; 127:src/l502_tests.c **** l502_cmd_done(0, 0, NULL); 353 .loc 1 127 0 354 0206 0060 R0 = 0 (X); 355 0208 FFE3FCFE call _l502_cmd_done; 129:src/l502_tests.c **** if (f_test_pars[i].start != NULL) { 356 .loc 1 129 0 357 020c 4AE10000 P2.H = _f_test_pars; 358 0210 0AE10000 P2.L = _f_test_pars; 359 0214 92AE P2 = [P2+40]; 360 0216 420C cc =P2==0; BFIN GAS /tmp/cc5lGgSv.s page 11 361 0218 0518 if cc jump .L16; 130:src/l502_tests.c **** g_mode = L502_BF_MODE_TEST; 362 .loc 1 130 0 363 021a 1060 R0 = 2 (X); 364 021c 1893 [P3] = R0; 131:src/l502_tests.c **** f_test_pars[i].start(); 365 .loc 1 131 0 366 021e 6200 call (P2); 132:src/l502_tests.c **** g_mode = L502_BF_MODE_IDLE; 367 .loc 1 132 0 368 0220 1F93 [P3] = R7; 369 .L16: 137:src/l502_tests.c **** if (f_cur_test_ind == -1) 370 .loc 1 137 0 371 0222 1632 P2 = R6; 372 0224 1091 R0 = [P2]; 373 0226 380C cc =R0==-1; 374 0228 8217 if !cc jump .L17 (bp); 375 022a 2C2F jump.s .L15; 376 .L4: 377 .LBE4: 378 .loc 1 145 0 379 022c 01E80000 UNLINK; 103:src/l502_tests.c **** l502_cmd_done(0, (uint32_t*)&f_test_res, 380 .loc 1 103 0 381 0230 0060 R0 = 0 (X); 382 0232 4830 R1 = P0; 383 0234 4260 R2 = 8 (X); 384 .loc 1 145 0 385 0236 AB05 ( r7:5, p5:3 ) = [sp++]; 386 387 .LCFI7: 388 .LVL14: 103:src/l502_tests.c **** l502_cmd_done(0, (uint32_t*)&f_test_res, 389 .loc 1 103 0 390 0238 FFE2E4FE jump.l _l502_cmd_done; 391 .LFE2: 392 .size _l502_cmd_test, .-_l502_cmd_test 393 .align 4 394 .type _f_spi_test, STT_FUNC; 395 _f_spi_test: 396 .LFB4: 146:src/l502_tests.c **** 147:src/l502_tests.c **** 148:src/l502_tests.c **** #define SPORT_CNTR_INC 0x1 149:src/l502_tests.c **** 150:src/l502_tests.c **** 151:src/l502_tests.c **** #define TEST_CHECK_OUT(label) \ 152:src/l502_tests.c **** do { \ 153:src/l502_tests.c **** l502_cmd_check_req(); \ 154:src/l502_tests.c **** if ((g_mode!= L502_BF_MODE_TEST) || f_test_res.err) \ 155:src/l502_tests.c **** goto label; \ 156:src/l502_tests.c **** } while (0); 157:src/l502_tests.c **** 158:src/l502_tests.c **** 159:src/l502_tests.c **** /* тестирование SPORT'а, служащего для передачи потоков А 160:src/l502_tests.c **** от BlackFin'а к ПЛИС. Устанавливается циклический сквозн BFIN GAS /tmp/cc5lGgSv.s page 12 161:src/l502_tests.c **** и передается счетчик, который проверяется при прием 162:src/l502_tests.c **** 163:src/l502_tests.c **** static int f_sport_test(void) { 164:src/l502_tests.c **** //int f_sport_test(void) { 165:src/l502_tests.c **** #define RX_BUF_SIZE 2048 166:src/l502_tests.c **** static uint16_t rx_buf[RX_BUF_SIZE]; 167:src/l502_tests.c **** uint16_t stat=*pSPORT0_STAT; 168:src/l502_tests.c **** 169:src/l502_tests.c **** 170:src/l502_tests.c **** uint16_t rx_cntr=0, tx_cntr=0; 171:src/l502_tests.c **** uint16_t rx_val; 172:src/l502_tests.c **** int err = 0, i; 173:src/l502_tests.c **** 174:src/l502_tests.c **** /* разрешаем прием и передачу по SPORT'у */ 175:src/l502_tests.c **** *pSPORT0_TCR1 |= TSPEN; 176:src/l502_tests.c **** *pSPORT0_RCR1 |= RSPEN; 177:src/l502_tests.c **** 178:src/l502_tests.c **** while (stat & RXNE) { 179:src/l502_tests.c **** rx_buf[0] = *pSPORT0_RX16; 180:src/l502_tests.c **** stat=*pSPORT0_STAT; 181:src/l502_tests.c **** } 182:src/l502_tests.c **** 183:src/l502_tests.c **** /* вначале полностью заполняем очередь SPORT'а */ 184:src/l502_tests.c **** for (i = 0; i < 8; i++) { 185:src/l502_tests.c **** *pSPORT0_TX16 = tx_cntr++; 186:src/l502_tests.c **** //tx_cntr+=SPORT_CNTR_INC; 187:src/l502_tests.c **** } 188:src/l502_tests.c **** 189:src/l502_tests.c **** /* устанавливаем в ПЛИС сквозной режим работы SPORT */ 190:src/l502_tests.c **** fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, 0xE); 191:src/l502_tests.c **** 192:src/l502_tests.c **** 193:src/l502_tests.c **** while (!f_test_res.err) {// && (g_mode==L502_BF_MODE_TEST)) 194:src/l502_tests.c **** stat = *pSPORT0_STAT; 195:src/l502_tests.c **** if (!(stat & TXF)) { 196:src/l502_tests.c **** *pSPORT0_TX16 = tx_cntr++; 197:src/l502_tests.c **** } 198:src/l502_tests.c **** 199:src/l502_tests.c **** if (stat & RXNE) { 200:src/l502_tests.c **** rx_val = *pSPORT0_RX16; 201:src/l502_tests.c **** 202:src/l502_tests.c **** if ((rx_val != rx_cntr)) { 203:src/l502_tests.c **** f_test_res.err = L502_BF_ERR_TEST_VALUE; 204:src/l502_tests.c **** f_test_res.last_rd = rx_val; 205:src/l502_tests.c **** f_test_res.last_wr = rx_cntr; 206:src/l502_tests.c **** err = rx_val - rx_cntr; 207:src/l502_tests.c **** } 208:src/l502_tests.c **** 209:src/l502_tests.c **** 210:src/l502_tests.c **** if (!(rx_cntr & 0xFFFF)) { 211:src/l502_tests.c **** TEST_CHECK_OUT(sport_test_end); 212:src/l502_tests.c **** if (!rx_cntr) 213:src/l502_tests.c **** f_test_res.cntr++; 214:src/l502_tests.c **** } 215:src/l502_tests.c **** rx_cntr++; 216:src/l502_tests.c **** } 217:src/l502_tests.c **** } BFIN GAS /tmp/cc5lGgSv.s page 13 218:src/l502_tests.c **** 219:src/l502_tests.c **** sport_test_end: 220:src/l502_tests.c **** /* запрещаем прием и передачу по SPORT'у */ 221:src/l502_tests.c **** *pSPORT0_TCR1 = 0; 222:src/l502_tests.c **** *pSPORT0_RCR1 = 0; 223:src/l502_tests.c **** /* возвращаем штатный режим работы SPORT'а */ 224:src/l502_tests.c **** fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, 0); 225:src/l502_tests.c **** 226:src/l502_tests.c **** return err; 227:src/l502_tests.c **** } 228:src/l502_tests.c **** 229:src/l502_tests.c **** 230:src/l502_tests.c **** 231:src/l502_tests.c **** 232:src/l502_tests.c **** 233:src/l502_tests.c **** /* тест SPI - записываем бегущую единицу в регистр ПЛИС, с 234:src/l502_tests.c **** значение этого регистра и сверяем результаты */ 235:src/l502_tests.c **** static int f_spi_test(void) { 397 .loc 1 235 0 398 023c EB05 [--sp] = ( r7:5, p5:3 ); 399 400 .LCFI8: 236:src/l502_tests.c **** f_test_res.last_addr = L502_REGS_IOHARD_ADC_FRAME_DELAY; 401 .loc 1 236 0 402 023e 4DE10000 P5.H = _f_test_res; 403 0242 0DE10010 P5.L = _f_test_res; 404 0246 20E10403 R0 = 772 (X); 237:src/l502_tests.c **** while (!f_test_res.err && (g_mode==L502_BF_MODE_TEST)) { 405 .loc 1 237 0 406 024a 29A1 R1 = [P5+16]; 235:src/l502_tests.c **** static int f_spi_test(void) { 407 .loc 1 235 0 408 024c 00E80300 LINK 12; 409 .LCFI9: 236:src/l502_tests.c **** f_test_res.last_addr = L502_REGS_IOHARD_ADC_FRAME_DELAY; 410 .loc 1 236 0 411 0250 68B1 [P5+20] = R0; 412 .loc 1 237 0 413 0252 010C cc =R1==0; 414 0254 2A10 if !cc jump .L27; 415 0256 4BE10000 P3.H = _g_mode; 416 025a 0BE10000 P3.L = _g_mode; 417 025e 1891 R0 = [P3]; 418 0260 100C cc =R0==2; 419 0262 2310 if !cc jump .L27; 420 .LBB5: 238:src/l502_tests.c **** int i; 239:src/l502_tests.c **** for (i = 0; (i < 32) && !f_test_res.err; i++) { 240:src/l502_tests.c **** f_test_res.last_wr = (1<