firmware is working and compiling! modified cmd L502_BF_CMD_CODE_GET_PARAM (aka f_cmd_get_param()). Added param 87, which returns specific number 0xADEF (decimal 44527).

This commit is contained in:
2025-06-27 17:50:46 +03:00
parent c73ead2643
commit 63d839924e
46 changed files with 8715 additions and 8561 deletions

View File

@ -223,7 +223,7 @@ LOAD /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-
.iplt .iplt
*(.iplt) *(.iplt)
.text 0x00000000ffa00090 0x31b0 .text 0x00000000ffa00090 0x31f0
*(.text.unlikely .text.*_unlikely) *(.text.unlikely .text.*_unlikely)
*(.text.exit .text.exit.*) *(.text.exit .text.exit.*)
*(.text.startup .text.startup.*) *(.text.startup .text.startup.*)
@ -232,93 +232,93 @@ LOAD /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-
.text 0x00000000ffa00090 0x68 build/release/objs/l502_async.o .text 0x00000000ffa00090 0x68 build/release/objs/l502_async.o
0x00000000ffa00090 _async_dout 0x00000000ffa00090 _async_dout
0x00000000ffa000d0 _async_dac_out 0x00000000ffa000d0 _async_dac_out
.text 0x00000000ffa000f8 0x8a8 build/release/objs/l502_cmd.o .text 0x00000000ffa000f8 0x8b4 build/release/objs/l502_cmd.o
0x00000000ffa000f8 _l502_cmd_set_req 0x00000000ffa000f8 _l502_cmd_set_req
0x00000000ffa00120 _l502_cmd_done 0x00000000ffa00120 _l502_cmd_done
0x00000000ffa006e4 _l502_cmd_start 0x00000000ffa006f0 _l502_cmd_start
0x00000000ffa0082c _l502_cmd_check_req 0x00000000ffa00838 _l502_cmd_check_req
.text 0x00000000ffa009a0 0x418 build/release/objs/l502_fpga.o .text 0x00000000ffa009ac 0x418 build/release/objs/l502_fpga.o
0x00000000ffa009a0 _fpga_reg_write 0x00000000ffa009ac _fpga_reg_write
0x00000000ffa00af0 _fpga_reg_read 0x00000000ffa00afc _fpga_reg_read
0x00000000ffa00c44 _fpga_spi_init 0x00000000ffa00c50 _fpga_spi_init
.text 0x00000000ffa00db8 0x5c8 build/release/objs/l502_hdma.o .text 0x00000000ffa00dc4 0x5c8 build/release/objs/l502_hdma.o
0x00000000ffa00db8 _hdma_send_start 0x00000000ffa00dc4 _hdma_send_start
0x00000000ffa00dfc _hdma_send_stop 0x00000000ffa00e08 _hdma_send_stop
0x00000000ffa00e14 _hdma_recv_start 0x00000000ffa00e20 _hdma_recv_start
0x00000000ffa00e64 _hdma_recv_stop 0x00000000ffa00e70 _hdma_recv_stop
0x00000000ffa00e7c _hdma_send_req_rdy 0x00000000ffa00e88 _hdma_send_req_rdy
0x00000000ffa00ea4 _hdma_recv_req_rdy 0x00000000ffa00eb0 _hdma_recv_req_rdy
0x00000000ffa00ecc _hdma_send_req_start 0x00000000ffa00ed8 _hdma_send_req_start
0x00000000ffa00f6c _hdma_recv_req_start 0x00000000ffa00f78 _hdma_recv_req_start
0x00000000ffa01010 _hdma_rd_isr 0x00000000ffa0101c _hdma_rd_isr
0x00000000ffa01054 _hdma_init 0x00000000ffa01060 _hdma_init
0x00000000ffa01210 _hdma_isr 0x00000000ffa0121c _hdma_isr
.text 0x00000000ffa01380 0x388 build/release/objs/l502_init.o .text 0x00000000ffa0138c 0x388 build/release/objs/l502_init.o
0x00000000ffa01380 _l502_otp_make_invalid 0x00000000ffa0138c _l502_otp_make_invalid
0x00000000ffa013c4 _l502_setup_pll 0x00000000ffa013d0 _l502_setup_pll
0x00000000ffa013ec _l502_otp_write_cfg 0x00000000ffa013f8 _l502_otp_write_cfg
0x00000000ffa014a8 _l502_otp_init 0x00000000ffa014b4 _l502_otp_init
0x00000000ffa0160c _l502_init 0x00000000ffa01618 _l502_init
.text 0x00000000ffa01708 0x2ec build/release/objs/l502_params.o .text 0x00000000ffa01714 0x2ec build/release/objs/l502_params.o
0x00000000ffa01708 _params_set_lch_cnt 0x00000000ffa01714 _params_set_lch_cnt
0x00000000ffa01734 _params_set_lch 0x00000000ffa01740 _params_set_lch
0x00000000ffa01794 _params_set_adc_freq_div 0x00000000ffa017a0 _params_set_adc_freq_div
0x00000000ffa017c4 _params_set_ref_freq 0x00000000ffa017d0 _params_set_ref_freq
0x00000000ffa017dc _params_set_adc_interframe_delay 0x00000000ffa017e8 _params_set_adc_interframe_delay
0x00000000ffa01808 _params_set_sync_mode 0x00000000ffa01814 _params_set_sync_mode
0x00000000ffa01838 _params_set_sync_start_mode 0x00000000ffa01844 _params_set_sync_start_mode
0x00000000ffa01868 _params_set_din_freq_div 0x00000000ffa01874 _params_set_din_freq_div
0x00000000ffa01898 _params_set_dac_freq_div 0x00000000ffa018a4 _params_set_dac_freq_div
0x00000000ffa018c8 _configure 0x00000000ffa018d4 _configure
.text 0x00000000ffa019f4 0x550 build/release/objs/l502_sport_tx.o .text 0x00000000ffa01a00 0x550 build/release/objs/l502_sport_tx.o
0x00000000ffa019f4 _sport_tx_out_status 0x00000000ffa01a00 _sport_tx_out_status
0x00000000ffa01a2c _sport_tx_init 0x00000000ffa01a38 _sport_tx_init
0x00000000ffa01b5c _sport_tx_req_rdy 0x00000000ffa01b68 _sport_tx_req_rdy
0x00000000ffa01b80 _isr_sport_dma_tx 0x00000000ffa01b8c _isr_sport_dma_tx
0x00000000ffa01cec _sport_tx_start_req 0x00000000ffa01cf8 _sport_tx_start_req
0x00000000ffa01dd8 _sport_tx_stop 0x00000000ffa01de4 _sport_tx_stop
.text 0x00000000ffa01f44 0x8f0 build/release/objs/l502_stream.o .text 0x00000000ffa01f50 0x8f0 build/release/objs/l502_stream.o
0x00000000ffa01f44 _stream_in_buf_free 0x00000000ffa01f50 _stream_in_buf_free
0x00000000ffa01f6c _stream_out_buf_free 0x00000000ffa01f78 _stream_out_buf_free
0x00000000ffa01f94 _hdma_recv_done 0x00000000ffa01fa0 _hdma_recv_done
0x00000000ffa01fb8 _sport_in_buffer_size 0x00000000ffa01fc4 _sport_in_buffer_size
0x00000000ffa01fc8 _sport_in_set_step_size 0x00000000ffa01fd4 _sport_in_set_step_size
0x00000000ffa02018 _sport_rx_stop 0x00000000ffa02024 _sport_rx_stop
0x00000000ffa02064 _sport_rx_start 0x00000000ffa02070 _sport_rx_start
0x00000000ffa0214c _stream_proc 0x00000000ffa02158 _stream_proc
0x00000000ffa022dc _stream_out_preload 0x00000000ffa022e8 _stream_out_preload
0x00000000ffa02350 _l502_stream_init 0x00000000ffa0235c _l502_stream_init
0x00000000ffa02370 _streams_stop 0x00000000ffa0237c _streams_stop
0x00000000ffa02418 _isr_sport_dma_rx 0x00000000ffa02424 _isr_sport_dma_rx
0x00000000ffa02564 _stream_disable 0x00000000ffa02570 _stream_disable
0x00000000ffa025c8 _stream_enable 0x00000000ffa025d4 _stream_enable
0x00000000ffa02628 _streams_start 0x00000000ffa02634 _streams_start
.text 0x00000000ffa02834 0x728 build/release/objs/l502_tests.o .text 0x00000000ffa02840 0x728 build/release/objs/l502_tests.o
0x00000000ffa02834 _l502_cmd_test 0x00000000ffa02840 _l502_cmd_test
.text 0x00000000ffa02f5c 0xa0 build/release/objs/l502_user_process.o .text 0x00000000ffa02f68 0xcc build/release/objs/l502_user_process.o
0x00000000ffa02f5c _usr_cmd_process 0x00000000ffa02f68 _usr_cmd_process
0x00000000ffa02f70 _sport_tx_done 0x00000000ffa02fa8 _sport_tx_done
0x00000000ffa02f80 _hdma_send_done 0x00000000ffa02fb8 _hdma_send_done
0x00000000ffa02f90 _usr_out_proc_data 0x00000000ffa02fc8 _usr_out_proc_data
0x00000000ffa02fc8 _usr_in_proc_data 0x00000000ffa03000 _usr_in_proc_data
.text 0x00000000ffa02ffc 0x14 build/release/objs/main.o .text 0x00000000ffa03034 0x14 build/release/objs/main.o
0x00000000ffa02ffc _main 0x00000000ffa03034 _main
.text 0x00000000ffa03010 0x9c /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/libgcc.a(_udivsi3.o) .text 0x00000000ffa03048 0x9c /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/libgcc.a(_udivsi3.o)
0x00000000ffa03010 ___udivsi3 0x00000000ffa03048 ___udivsi3
.text 0x00000000ffa030ac 0xd4 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memmove.o) .text 0x00000000ffa030e4 0xd4 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memmove.o)
0x00000000ffa030ac _memmove 0x00000000ffa030e4 _memmove
.text 0x00000000ffa03180 0xb8 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memset.o) .text 0x00000000ffa031b8 0xb8 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memset.o)
0x00000000ffa03180 _memset 0x00000000ffa031b8 _memset
*(.gnu.warning) *(.gnu.warning)
0x00000000ffa03240 . = ALIGN (0x40) 0x00000000ffa03280 . = ALIGN (0x40)
*fill* 0x00000000ffa03238 0x8 00 *fill* 0x00000000ffa03270 0x10 00
.fini .fini
*(.fini) *(.fini)
0x00000000ffa03240 . = ALIGN (0x40) 0x00000000ffa03280 . = ALIGN (0x40)
0x00000000ffa03240 PROVIDE (___etext, .) 0x00000000ffa03280 PROVIDE (___etext, .)
0x00000000ffa03240 PROVIDE (__etext, .) 0x00000000ffa03280 PROVIDE (__etext, .)
0x00000000ffa03240 PROVIDE (_etext, .) 0x00000000ffa03280 PROVIDE (_etext, .)
.board_state 0x00000000ff800000 0x2004 .board_state 0x00000000ff800000 0x2004
0x00000000ff800000 _startfix_sect = . 0x00000000ff800000 _startfix_sect = .
@ -328,11 +328,11 @@ LOAD /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-
0x00000000ff802004 . = (_startfix_sect + 0x2004) 0x00000000ff802004 . = (_startfix_sect + 0x2004)
*fill* 0x00000000ff801810 0x7f4 00 *fill* 0x00000000ff801810 0x7f4 00
.rodata 0x00000000ff802004 0x254 .rodata 0x00000000ff802004 0x2ec
*(.rodata .rodata.* .gnu.linkonce.r.*) *(.rodata .rodata.* .gnu.linkonce.r.*)
.rodata 0x00000000ff802004 0x220 build/release/objs/l502_cmd.o .rodata 0x00000000ff802004 0x2b8 build/release/objs/l502_cmd.o
.rodata 0x00000000ff802224 0x4 build/release/objs/l502_stream.o .rodata 0x00000000ff8022bc 0x4 build/release/objs/l502_stream.o
.rodata 0x00000000ff802228 0x30 build/release/objs/l502_tests.o .rodata 0x00000000ff8022c0 0x30 build/release/objs/l502_tests.o
.rodata1 .rodata1
*(.rodata1) *(.rodata1)
@ -351,7 +351,7 @@ LOAD /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-
.gcc_except_table .gcc_except_table
*(.gcc_except_table .gcc_except_table.*) *(.gcc_except_table .gcc_except_table.*)
0x00000000ff803258 . = (ALIGN (0x1000) + (. & 0xfff)) 0x00000000ff8032f0 . = (ALIGN (0x1000) + (. & 0xfff))
.eh_frame .eh_frame
*(.eh_frame) *(.eh_frame)
@ -366,22 +366,22 @@ LOAD /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-
*(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tbss .tbss.* .gnu.linkonce.tb.*)
*(.tcommon) *(.tcommon)
.preinit_array 0x00000000ff803258 0x0 .preinit_array 0x00000000ff8032f0 0x0
0x00000000ff803258 PROVIDE (___preinit_array_start, .) 0x00000000ff8032f0 PROVIDE (___preinit_array_start, .)
*(.preinit_array) *(.preinit_array)
0x00000000ff803258 PROVIDE (___preinit_array_end, .) 0x00000000ff8032f0 PROVIDE (___preinit_array_end, .)
.init_array 0x00000000ff803258 0x0 .init_array 0x00000000ff8032f0 0x0
0x00000000ff803258 PROVIDE (___init_array_start, .) 0x00000000ff8032f0 PROVIDE (___init_array_start, .)
*(SORT(.init_array.*)) *(SORT(.init_array.*))
*(.init_array) *(.init_array)
0x00000000ff803258 PROVIDE (___init_array_end, .) 0x00000000ff8032f0 PROVIDE (___init_array_end, .)
.fini_array 0x00000000ff803258 0x0 .fini_array 0x00000000ff8032f0 0x0
0x00000000ff803258 PROVIDE (___fini_array_start, .) 0x00000000ff8032f0 PROVIDE (___fini_array_start, .)
*(SORT(.fini_array.*)) *(SORT(.fini_array.*))
*(.fini_array) *(.fini_array)
0x00000000ff803258 PROVIDE (___fini_array_end, .) 0x00000000ff8032f0 PROVIDE (___fini_array_end, .)
.ctors .ctors
*crtbegin.o(.ctors) *crtbegin.o(.ctors)
@ -407,16 +407,16 @@ LOAD /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-
.dynamic .dynamic
*(.dynamic) *(.dynamic)
.data 0x00000000ff802258 0x868 .data 0x00000000ff8022f0 0x850
*(.data .data.* .gnu.linkonce.d.*) *(.data .data.* .gnu.linkonce.d.*)
.data 0x00000000ff802258 0x4 build/release/objs/l502_async.o .data 0x00000000ff8022f0 0x4 build/release/objs/l502_async.o
.data 0x00000000ff80225c 0x818 build/release/objs/l502_params.o .data 0x00000000ff8022f4 0x818 build/release/objs/l502_params.o
0x00000000ff80225c _g_set 0x00000000ff8022f4 _g_set
.data 0x00000000ff802a74 0xc build/release/objs/l502_stream.o .data 0x00000000ff802b0c 0xc build/release/objs/l502_stream.o
0x00000000ff802a74 _g_streams 0x00000000ff802b0c _g_streams
.data 0x00000000ff802a80 0x4 build/release/objs/l502_tests.o .data 0x00000000ff802b18 0x4 build/release/objs/l502_tests.o
0x00000000ff802ac0 . = ALIGN (0x40) 0x00000000ff802b40 . = ALIGN (0x40)
*fill* 0x00000000ff802a84 0x3c 00 *fill* 0x00000000ff802b1c 0x24 00
.data1 .data1
*(.data1) *(.data1)
@ -429,36 +429,36 @@ LOAD /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-
.sdata .sdata
*(.sdata .sdata.* .gnu.linkonce.s.*) *(.sdata .sdata.* .gnu.linkonce.s.*)
0x00000000ff802ac0 __edata = . 0x00000000ff802b40 __edata = .
0x00000000ff802ac0 PROVIDE (_edata, .) 0x00000000ff802b40 PROVIDE (_edata, .)
0x00000000ff802ac0 ___bss_start = . 0x00000000ff802b40 ___bss_start = .
.sbss .sbss
*(.dynsbss) *(.dynsbss)
*(.sbss .sbss.* .gnu.linkonce.sb.*) *(.sbss .sbss.* .gnu.linkonce.sb.*)
*(.scommon) *(.scommon)
.bss 0x00000000ff802ac0 0x1140 .bss 0x00000000ff802b40 0x1140
0x00000000ff802ac0 __bss_start = . 0x00000000ff802b40 __bss_start = .
*(.dynbss) *(.dynbss)
*(.bss .bss.* .gnu.linkonce.b.*) *(.bss .bss.* .gnu.linkonce.b.*)
.bss 0x00000000ff802ac0 0x4 build/release/objs/l502_cmd.o .bss 0x00000000ff802b40 0x4 build/release/objs/l502_cmd.o
.bss 0x00000000ff802ac4 0xc build/release/objs/l502_hdma.o .bss 0x00000000ff802b44 0xc build/release/objs/l502_hdma.o
.bss 0x00000000ff802ad0 0xb4 build/release/objs/l502_sport_tx.o .bss 0x00000000ff802b50 0xb4 build/release/objs/l502_sport_tx.o
.bss 0x00000000ff802b84 0x34 build/release/objs/l502_stream.o .bss 0x00000000ff802c04 0x34 build/release/objs/l502_stream.o
0x00000000ff802b84 _g_stream_in_state 0x00000000ff802c04 _g_stream_in_state
0x00000000ff802b88 _g_stream_out_state 0x00000000ff802c08 _g_stream_out_state
0x00000000ff802b8c _g_mode 0x00000000ff802c0c _g_mode
.bss 0x00000000ff802bb8 0x1020 build/release/objs/l502_tests.o .bss 0x00000000ff802c38 0x1020 build/release/objs/l502_tests.o
*(COMMON) *(COMMON)
COMMON 0x00000000ff803bd8 0x18 build/release/objs/l502_params.o COMMON 0x00000000ff803c58 0x18 build/release/objs/l502_params.o
0x00000000ff803bd8 _g_module_info 0x00000000ff803c58 _g_module_info
0x00000000ff803c00 . = ALIGN (0x40) 0x00000000ff803c80 . = ALIGN (0x40)
*fill* 0x00000000ff803bf0 0x10 00 *fill* 0x00000000ff803c70 0x10 00
0x00000000ff803c00 __bss_end = . 0x00000000ff803c80 __bss_end = .
0x00000000ff803c00 . = ALIGN (0x40) 0x00000000ff803c80 . = ALIGN (0x40)
0x00000000ff803c00 __end = . 0x00000000ff803c80 __end = .
0x00000000ff803c00 PROVIDE (_end, .) 0x00000000ff803c80 PROVIDE (_end, .)
.sdram_noinit 0x0000000000000000 0xc00000 .sdram_noinit 0x0000000000000000 0xc00000
*(.sdram_noinit, .sdram_noinit.*) *(.sdram_noinit, .sdram_noinit.*)
@ -574,7 +574,7 @@ LOAD /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-
.debug_pubnames .debug_pubnames
0x0000000000000664 0x1d /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memset.o) 0x0000000000000664 0x1d /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memset.o)
.debug_info 0x0000000000000000 0x3b83 .debug_info 0x0000000000000000 0x3b98
*(.debug_info .gnu.linkonce.wi.* .zdebug_info) *(.debug_info .gnu.linkonce.wi.* .zdebug_info)
.debug_info 0x0000000000000000 0x12c build/release/objs/l502_async.o .debug_info 0x0000000000000000 0x12c build/release/objs/l502_async.o
.debug_info 0x000000000000012c 0xc51 build/release/objs/l502_cmd.o .debug_info 0x000000000000012c 0xc51 build/release/objs/l502_cmd.o
@ -585,14 +585,14 @@ LOAD /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-
.debug_info 0x0000000000002243 0x3aa build/release/objs/l502_sport_tx.o .debug_info 0x0000000000002243 0x3aa build/release/objs/l502_sport_tx.o
.debug_info 0x00000000000025ed 0x810 build/release/objs/l502_stream.o .debug_info 0x00000000000025ed 0x810 build/release/objs/l502_stream.o
.debug_info 0x0000000000002dfd 0x4ea build/release/objs/l502_tests.o .debug_info 0x0000000000002dfd 0x4ea build/release/objs/l502_tests.o
.debug_info 0x00000000000032e7 0x278 build/release/objs/l502_user_process.o .debug_info 0x00000000000032e7 0x28d build/release/objs/l502_user_process.o
.debug_info 0x000000000000355f 0x279 build/release/objs/main.o .debug_info 0x0000000000003574 0x279 build/release/objs/main.o
.debug_info 0x00000000000037d8 0x87 build/release/objs/l502-bf_basiccrt.o .debug_info 0x00000000000037ed 0x87 build/release/objs/l502-bf_basiccrt.o
.debug_info 0x000000000000385f 0xe4 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/libgcc.a(_udivsi3.o) .debug_info 0x0000000000003874 0xe4 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/libgcc.a(_udivsi3.o)
.debug_info 0x0000000000003943 0x12f /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memmove.o) .debug_info 0x0000000000003958 0x12f /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memmove.o)
.debug_info 0x0000000000003a72 0x111 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memset.o) .debug_info 0x0000000000003a87 0x111 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memset.o)
.debug_abbrev 0x0000000000000000 0x130b .debug_abbrev 0x0000000000000000 0x1321
*(.debug_abbrev .zdebug_abbrev) *(.debug_abbrev .zdebug_abbrev)
.debug_abbrev 0x0000000000000000 0xa0 build/release/objs/l502_async.o .debug_abbrev 0x0000000000000000 0xa0 build/release/objs/l502_async.o
.debug_abbrev 0x00000000000000a0 0x277 build/release/objs/l502_cmd.o .debug_abbrev 0x00000000000000a0 0x277 build/release/objs/l502_cmd.o
@ -603,30 +603,30 @@ LOAD /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-
.debug_abbrev 0x0000000000000991 0x1de build/release/objs/l502_sport_tx.o .debug_abbrev 0x0000000000000991 0x1de build/release/objs/l502_sport_tx.o
.debug_abbrev 0x0000000000000b6f 0x28d build/release/objs/l502_stream.o .debug_abbrev 0x0000000000000b6f 0x28d build/release/objs/l502_stream.o
.debug_abbrev 0x0000000000000dfc 0x1eb build/release/objs/l502_tests.o .debug_abbrev 0x0000000000000dfc 0x1eb build/release/objs/l502_tests.o
.debug_abbrev 0x0000000000000fe7 0xf2 build/release/objs/l502_user_process.o .debug_abbrev 0x0000000000000fe7 0x108 build/release/objs/l502_user_process.o
.debug_abbrev 0x00000000000010d9 0xc9 build/release/objs/main.o .debug_abbrev 0x00000000000010ef 0xc9 build/release/objs/main.o
.debug_abbrev 0x00000000000011a2 0x14 build/release/objs/l502-bf_basiccrt.o .debug_abbrev 0x00000000000011b8 0x14 build/release/objs/l502-bf_basiccrt.o
.debug_abbrev 0x00000000000011b6 0x14 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/libgcc.a(_udivsi3.o) .debug_abbrev 0x00000000000011cc 0x14 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/libgcc.a(_udivsi3.o)
.debug_abbrev 0x00000000000011ca 0xa0 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memmove.o) .debug_abbrev 0x00000000000011e0 0xa0 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memmove.o)
.debug_abbrev 0x000000000000126a 0xa1 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memset.o) .debug_abbrev 0x0000000000001280 0xa1 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memset.o)
.debug_line 0x0000000000000000 0x18d8 .debug_line 0x0000000000000000 0x18df
*(.debug_line .zdebug_line) *(.debug_line .zdebug_line)
.debug_line 0x0000000000000000 0xff build/release/objs/l502_async.o .debug_line 0x0000000000000000 0xff build/release/objs/l502_async.o
.debug_line 0x00000000000000ff 0x2dd build/release/objs/l502_cmd.o .debug_line 0x00000000000000ff 0x2de build/release/objs/l502_cmd.o
.debug_line 0x00000000000003dc 0x1d2 build/release/objs/l502_fpga.o .debug_line 0x00000000000003dd 0x1d2 build/release/objs/l502_fpga.o
.debug_line 0x00000000000005ae 0x26a build/release/objs/l502_hdma.o .debug_line 0x00000000000005af 0x26a build/release/objs/l502_hdma.o
.debug_line 0x0000000000000818 0x1c2 build/release/objs/l502_init.o .debug_line 0x0000000000000819 0x1c2 build/release/objs/l502_init.o
.debug_line 0x00000000000009da 0x1a2 build/release/objs/l502_params.o .debug_line 0x00000000000009db 0x1a2 build/release/objs/l502_params.o
.debug_line 0x0000000000000b7c 0x1d0 build/release/objs/l502_sport_tx.o .debug_line 0x0000000000000b7d 0x1d0 build/release/objs/l502_sport_tx.o
.debug_line 0x0000000000000d4c 0x376 build/release/objs/l502_stream.o .debug_line 0x0000000000000d4d 0x376 build/release/objs/l502_stream.o
.debug_line 0x00000000000010c2 0x28e build/release/objs/l502_tests.o .debug_line 0x00000000000010c3 0x28e build/release/objs/l502_tests.o
.debug_line 0x0000000000001350 0x118 build/release/objs/l502_user_process.o .debug_line 0x0000000000001351 0x11e build/release/objs/l502_user_process.o
.debug_line 0x0000000000001468 0xfa build/release/objs/main.o .debug_line 0x000000000000146f 0xfa build/release/objs/main.o
.debug_line 0x0000000000001562 0x78 build/release/objs/l502-bf_basiccrt.o .debug_line 0x0000000000001569 0x78 build/release/objs/l502-bf_basiccrt.o
.debug_line 0x00000000000015da 0xcd /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/libgcc.a(_udivsi3.o) .debug_line 0x00000000000015e1 0xcd /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/libgcc.a(_udivsi3.o)
.debug_line 0x00000000000016a7 0x117 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memmove.o) .debug_line 0x00000000000016ae 0x117 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memmove.o)
.debug_line 0x00000000000017be 0x11a /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memset.o) .debug_line 0x00000000000017c5 0x11a /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memset.o)
.debug_frame 0x0000000000000000 0xbc8 .debug_frame 0x0000000000000000 0xbc8
*(.debug_frame .zdebug_frame) *(.debug_frame .zdebug_frame)
@ -673,21 +673,21 @@ LOAD /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-
.debug_str 0x0000000000001491 0x77 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memset.o) .debug_str 0x0000000000001491 0x77 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memset.o)
0x113 (size before relaxing) 0x113 (size before relaxing)
.debug_loc 0x0000000000000000 0x251f .debug_loc 0x0000000000000000 0x2540
*(.debug_loc .zdebug_loc) *(.debug_loc .zdebug_loc)
.debug_loc 0x0000000000000000 0xee build/release/objs/l502_async.o .debug_loc 0x0000000000000000 0xee build/release/objs/l502_async.o
.debug_loc 0x00000000000000ee 0x7a5 build/release/objs/l502_cmd.o .debug_loc 0x00000000000000ee 0x7b0 build/release/objs/l502_cmd.o
.debug_loc 0x0000000000000893 0x103 build/release/objs/l502_fpga.o .debug_loc 0x000000000000089e 0x103 build/release/objs/l502_fpga.o
.debug_loc 0x0000000000000996 0x443 build/release/objs/l502_hdma.o .debug_loc 0x00000000000009a1 0x443 build/release/objs/l502_hdma.o
.debug_loc 0x0000000000000dd9 0x32e build/release/objs/l502_init.o .debug_loc 0x0000000000000de4 0x32e build/release/objs/l502_init.o
.debug_loc 0x0000000000001107 0x2d0 build/release/objs/l502_params.o .debug_loc 0x0000000000001112 0x2d0 build/release/objs/l502_params.o
.debug_loc 0x00000000000013d7 0x258 build/release/objs/l502_sport_tx.o .debug_loc 0x00000000000013e2 0x258 build/release/objs/l502_sport_tx.o
.debug_loc 0x000000000000162f 0x5fd build/release/objs/l502_stream.o .debug_loc 0x000000000000163a 0x5fd build/release/objs/l502_stream.o
.debug_loc 0x0000000000001c2c 0x43d build/release/objs/l502_tests.o .debug_loc 0x0000000000001c37 0x43d build/release/objs/l502_tests.o
.debug_loc 0x0000000000002069 0x1b6 build/release/objs/l502_user_process.o .debug_loc 0x0000000000002074 0x1cc build/release/objs/l502_user_process.o
.debug_loc 0x000000000000221f 0x1f build/release/objs/main.o .debug_loc 0x0000000000002240 0x1f build/release/objs/main.o
.debug_loc 0x000000000000223e 0x18c /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memmove.o) .debug_loc 0x000000000000225f 0x18c /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memmove.o)
.debug_loc 0x00000000000023ca 0x155 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memset.o) .debug_loc 0x00000000000023eb 0x155 /home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/lib/libc.a(lib_a-memset.o)
.debug_macinfo .debug_macinfo
*(.debug_macinfo .zdebug_macinfo) *(.debug_macinfo .zdebug_macinfo)

View File

@ -1,4 +1,4 @@
BFIN GAS /tmp/ccCtLplV.s page 1 BFIN GAS /tmp/ccPZWCwW.s page 1
1 .file "src/l502_async.c"; 1 .file "src/l502_async.c";
@ -24,8 +24,8 @@ BFIN GAS /tmp/ccCtLplV.s page 1
2:src/l502_async.c **** @addtogroup async_io 2:src/l502_async.c **** @addtogroup async_io
3:src/l502_async.c **** @{ 3:src/l502_async.c **** @{
4:src/l502_async.c **** @file l502_async.c 4:src/l502_async.c **** @file l502_async.c
5:src/l502_async.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5:src/l502_async.c **** Файл содержит реализацию функций для асинхронного <EFBFBD>
6:src/l502_async.c **** (<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) 6:src/l502_async.c **** (пока только вывода)
7:src/l502_async.c **** ******************************************************************************/ 7:src/l502_async.c **** ******************************************************************************/
8:src/l502_async.c **** #include <stdlib.h> 8:src/l502_async.c **** #include <stdlib.h>
9:src/l502_async.c **** 9:src/l502_async.c ****
@ -58,7 +58,7 @@ BFIN GAS /tmp/ccCtLplV.s page 1
20 .LCFI0: 20 .LCFI0:
21 0002 00E80300 LINK 12; 21 0002 00E80300 LINK 12;
22 .LCFI1: 22 .LCFI1:
BFIN GAS /tmp/ccCtLplV.s page 2 BFIN GAS /tmp/ccPZWCwW.s page 2
23 .loc 1 31 0 23 .loc 1 31 0
@ -118,7 +118,7 @@ BFIN GAS /tmp/ccCtLplV.s page 1
66 .size _async_dout, .-_async_dout 66 .size _async_dout, .-_async_dout
67 003e 0000 .align 4 67 003e 0000 .align 4
68 .global _async_dac_out; 68 .global _async_dac_out;
BFIN GAS /tmp/ccCtLplV.s page 3 BFIN GAS /tmp/ccPZWCwW.s page 3
69 .type _async_dac_out, STT_FUNC; 69 .type _async_dac_out, STT_FUNC;
@ -178,7 +178,7 @@ BFIN GAS /tmp/ccCtLplV.s page 1
110 .size _async_dac_out, .-_async_dac_out 110 .size _async_dac_out, .-_async_dac_out
111 .data; 111 .data;
112 .align 4 112 .align 4
BFIN GAS /tmp/ccCtLplV.s page 4 BFIN GAS /tmp/ccPZWCwW.s page 4
113 .type _last_out.2066, @object 113 .type _last_out.2066, @object
@ -238,7 +238,7 @@ BFIN GAS /tmp/ccCtLplV.s page 1
167 0043 08 .uleb128 0x8 167 0043 08 .uleb128 0x8
168 0044 8F .byte 0x8f 168 0044 8F .byte 0x8f
169 0045 02 .uleb128 0x2 169 0045 02 .uleb128 0x2
BFIN GAS /tmp/ccCtLplV.s page 5 BFIN GAS /tmp/ccPZWCwW.s page 5
170 0046 A3 .byte 0xa3 170 0046 A3 .byte 0xa3
@ -298,7 +298,7 @@ BFIN GAS /tmp/ccCtLplV.s page 1
224 0079 2A000000 .4byte .LVL5-.Ltext0 224 0079 2A000000 .4byte .LVL5-.Ltext0
225 007d 0100 .2byte 0x1 225 007d 0100 .2byte 0x1
226 007f 52 .byte 0x52 226 007f 52 .byte 0x52
BFIN GAS /tmp/ccCtLplV.s page 6 BFIN GAS /tmp/ccPZWCwW.s page 6
227 0080 34000000 .4byte .LVL7-.Ltext0 227 0080 34000000 .4byte .LVL7-.Ltext0
@ -358,7 +358,7 @@ BFIN GAS /tmp/ccCtLplV.s page 1
281 0021 00000000 .4byte .Ldebug_line0 281 0021 00000000 .4byte .Ldebug_line0
282 0025 02 .uleb128 0x2 282 0025 02 .uleb128 0x2
283 0026 04 .byte 0x4 283 0026 04 .byte 0x4
BFIN GAS /tmp/ccCtLplV.s page 7 BFIN GAS /tmp/ccPZWCwW.s page 7
284 0027 07 .byte 0x7 284 0027 07 .byte 0x7
@ -418,7 +418,7 @@ BFIN GAS /tmp/ccCtLplV.s page 1
338 0087 64000000 .4byte 0x64 338 0087 64000000 .4byte 0x64
339 008b 05 .uleb128 0x5 339 008b 05 .uleb128 0x5
340 008c E8000000 .4byte .LASF12 340 008c E8000000 .4byte .LASF12
BFIN GAS /tmp/ccCtLplV.s page 8 BFIN GAS /tmp/ccPZWCwW.s page 8
341 0090 02 .byte 0x2 341 0090 02 .byte 0x2
@ -478,7 +478,7 @@ BFIN GAS /tmp/ccCtLplV.s page 1
395 0109 93000000 .4byte .LLST3 395 0109 93000000 .4byte .LLST3
396 010d 09 .uleb128 0x9 396 010d 09 .uleb128 0x9
397 010e 636800 .string "ch" 397 010e 636800 .string "ch"
BFIN GAS /tmp/ccCtLplV.s page 9 BFIN GAS /tmp/ccPZWCwW.s page 9
398 0111 01 .byte 0x1 398 0111 01 .byte 0x1
@ -538,7 +538,7 @@ BFIN GAS /tmp/ccCtLplV.s page 1
452 0029 04 .uleb128 0x4 452 0029 04 .uleb128 0x4
453 002a 24 .uleb128 0x24 453 002a 24 .uleb128 0x24
454 002b 00 .byte 0x0 454 002b 00 .byte 0x0
BFIN GAS /tmp/ccCtLplV.s page 10 BFIN GAS /tmp/ccPZWCwW.s page 10
455 002c 0B .uleb128 0xb 455 002c 0B .uleb128 0xb
@ -598,7 +598,7 @@ BFIN GAS /tmp/ccCtLplV.s page 1
509 0062 11 .uleb128 0x11 509 0062 11 .uleb128 0x11
510 0063 01 .uleb128 0x1 510 0063 01 .uleb128 0x1
511 0064 12 .uleb128 0x12 511 0064 12 .uleb128 0x12
BFIN GAS /tmp/ccCtLplV.s page 11 BFIN GAS /tmp/ccPZWCwW.s page 11
512 0065 01 .uleb128 0x1 512 0065 01 .uleb128 0x1
@ -658,7 +658,7 @@ BFIN GAS /tmp/ccCtLplV.s page 1
566 009b 40 .uleb128 0x40 566 009b 40 .uleb128 0x40
567 009c 06 .uleb128 0x6 567 009c 06 .uleb128 0x6
568 009d 00 .byte 0x0 568 009d 00 .byte 0x0
BFIN GAS /tmp/ccCtLplV.s page 12 BFIN GAS /tmp/ccPZWCwW.s page 12
569 009e 00 .byte 0x0 569 009e 00 .byte 0x0
@ -718,7 +718,7 @@ BFIN GAS /tmp/ccCtLplV.s page 1
605 003e 6C6F6E67 .string "long long unsigned int" 605 003e 6C6F6E67 .string "long long unsigned int"
605 206C6F6E 605 206C6F6E
605 6720756E 605 6720756E
BFIN GAS /tmp/ccCtLplV.s page 13 BFIN GAS /tmp/ccPZWCwW.s page 13
605 7369676E 605 7369676E
@ -778,7 +778,7 @@ BFIN GAS /tmp/ccCtLplV.s page 1
627 65642063 627 65642063
627 68617200 627 68617200
628 .LASF20: 628 .LASF20:
BFIN GAS /tmp/ccCtLplV.s page 14 BFIN GAS /tmp/ccPZWCwW.s page 14
629 0130 6173796E .string "async_dac_out" 629 0130 6173796E .string "async_dac_out"
@ -797,14 +797,14 @@ BFIN GAS /tmp/ccCtLplV.s page 1
635 0154 63686172 .string "char" 635 0154 63686172 .string "char"
635 00 635 00
636 .ident "GCC: (ADI-2014R1-RC2) 4.3.5" 636 .ident "GCC: (ADI-2014R1-RC2) 4.3.5"
BFIN GAS /tmp/ccCtLplV.s page 15 BFIN GAS /tmp/ccPZWCwW.s page 15
DEFINED SYMBOLS DEFINED SYMBOLS
*ABS*:0000000000000000 src/l502_async.c *ABS*:0000000000000000 src/l502_async.c
/tmp/ccCtLplV.s:13 .text:0000000000000000 _async_dout /tmp/ccPZWCwW.s:13 .text:0000000000000000 _async_dout
/tmp/ccCtLplV.s:115 .data:0000000000000000 _last_out.2066 /tmp/ccPZWCwW.s:115 .data:0000000000000000 _last_out.2066
/tmp/ccCtLplV.s:70 .text:0000000000000040 _async_dac_out /tmp/ccPZWCwW.s:70 .text:0000000000000040 _async_dac_out
UNDEFINED SYMBOLS UNDEFINED SYMBOLS
_fpga_reg_write _fpga_reg_write

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
BFIN GAS /tmp/ccUsc9gL.s page 1 BFIN GAS /tmp/ccd5i8hx.s page 1
1 .file "src/l502_fpga.c"; 1 .file "src/l502_fpga.c";
@ -23,11 +23,11 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1:src/l502_fpga.c **** /** @addtogroup fpga_regs 1:src/l502_fpga.c **** /** @addtogroup fpga_regs
2:src/l502_fpga.c **** @{ 2:src/l502_fpga.c **** @{
3:src/l502_fpga.c **** @file l502_fpga.c 3:src/l502_fpga.c **** @file l502_fpga.c
4:src/l502_fpga.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4:src/l502_fpga.c **** Файл содержит логику передачи команд для чтения/зап
5:src/l502_fpga.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPI. 5:src/l502_fpga.c **** ПЛИС по SPI.
6:src/l502_fpga.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fpga_spi_init(). 6:src/l502_fpga.c **** Изначально SPI должен быть проинициализирован с помо
7:src/l502_fpga.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fpga_reg_write(), <20> 7:src/l502_fpga.c **** После этого можно осуществлять запись с помощью fpga_r
8:src/l502_fpga.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fpga_reg_read(). */ 8:src/l502_fpga.c **** чтение с помощью fpga_reg_read(). */
9:src/l502_fpga.c **** 9:src/l502_fpga.c ****
10:src/l502_fpga.c **** #include <cdefBF523.h> 10:src/l502_fpga.c **** #include <cdefBF523.h>
11:src/l502_fpga.c **** 11:src/l502_fpga.c ****
@ -39,14 +39,14 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
17:src/l502_fpga.c **** 17:src/l502_fpga.c ****
18:src/l502_fpga.c **** 18:src/l502_fpga.c ****
19:src/l502_fpga.c **** static uint16_t f_spi_rw(uint16_t word) { 19:src/l502_fpga.c **** static uint16_t f_spi_rw(uint16_t word) {
20:src/l502_fpga.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 20:src/l502_fpga.c **** /* если в было принято уже слово - то читаем его, чтобы
21:src/l502_fpga.c **** if (*pSPI_STAT & RXS) { 21:src/l502_fpga.c **** if (*pSPI_STAT & RXS) {
22:src/l502_fpga.c **** volatile uint16_t dummy; 22:src/l502_fpga.c **** volatile uint16_t dummy;
23:src/l502_fpga.c **** dummy = *pSPI_RDBR; 23:src/l502_fpga.c **** dummy = *pSPI_RDBR;
24:src/l502_fpga.c **** } 24:src/l502_fpga.c **** }
25:src/l502_fpga.c **** 25:src/l502_fpga.c ****
26:src/l502_fpga.c **** *pSPI_TDBR = word; 26:src/l502_fpga.c **** *pSPI_TDBR = word;
27:src/l502_fpga.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ 27:src/l502_fpga.c **** /* ждем пока примем новое слово */
28:src/l502_fpga.c **** while (!(*pSPI_STAT&RXS)) { 28:src/l502_fpga.c **** while (!(*pSPI_STAT&RXS)) {
29:src/l502_fpga.c **** continue; 29:src/l502_fpga.c **** continue;
30:src/l502_fpga.c **** } 30:src/l502_fpga.c **** }
@ -56,12 +56,12 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
34:src/l502_fpga.c **** 34:src/l502_fpga.c ****
35:src/l502_fpga.c **** 35:src/l502_fpga.c ****
36:src/l502_fpga.c **** void fpga_spi_init(void) { 36:src/l502_fpga.c **** void fpga_spi_init(void) {
37:src/l502_fpga.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPI */ 37:src/l502_fpga.c **** /* настройка SPI */
38:src/l502_fpga.c **** *pSPI_BAUD = 2; /* SPI CLK = 132.5/(2*2) = 33.125 */ 38:src/l502_fpga.c **** *pSPI_BAUD = 2; /* SPI CLK = 132.5/(2*2) = 33.125 */
BFIN GAS /tmp/ccUsc9gL.s page 2 BFIN GAS /tmp/ccd5i8hx.s page 2
39:src/l502_fpga.c **** *pSPI_CTL = SPE | MSTR | SIZE | GM | TDBR_CORE; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, MSB first, 16-bit, CPHA=0, CPOL=0 */ 39:src/l502_fpga.c **** *pSPI_CTL = SPE | MSTR | SIZE | GM | TDBR_CORE; /* Мастер, MSB first, 16-bit, CPHA=0, CPO
40:src/l502_fpga.c **** *pSPI_FLG = FLS1; 40:src/l502_fpga.c **** *pSPI_FLG = FLS1;
41:src/l502_fpga.c **** 41:src/l502_fpga.c ****
42:src/l502_fpga.c **** *pPORTG_MUX = (*pPORTG_MUX & 0xFFFC) | 2; 42:src/l502_fpga.c **** *pPORTG_MUX = (*pPORTG_MUX & 0xFFFC) | 2;
@ -118,7 +118,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
50:src/l502_fpga.c **** f_spi_rw((addr&L502_SPI_MSK_ADDR) | L502_SPI_BIT_START | L502_SPI_BIT_WR); 50:src/l502_fpga.c **** f_spi_rw((addr&L502_SPI_MSK_ADDR) | L502_SPI_BIT_START | L502_SPI_BIT_WR);
55 .loc 1 50 0 55 .loc 1 50 0
56 001e 20E100C0 R0 = -16384 (X); 56 001e 20E100C0 R0 = -16384 (X);
BFIN GAS /tmp/ccUsc9gL.s page 3 BFIN GAS /tmp/ccd5i8hx.s page 3
57 .LBB72: 57 .LBB72:
@ -178,7 +178,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
104 0056 000C cc =R0==0; 104 0056 000C cc =R0==0;
105 0058 041C if cc jump .L4 (bp); 105 0058 041C if cc jump .L4 (bp);
106 .LBB77: 106 .LBB77:
BFIN GAS /tmp/ccUsc9gL.s page 4 BFIN GAS /tmp/ccd5i8hx.s page 4
23:src/l502_fpga.c **** dummy = *pSPI_RDBR; 23:src/l502_fpga.c **** dummy = *pSPI_RDBR;
@ -238,7 +238,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
21:src/l502_fpga.c **** if (*pSPI_STAT & RXS) { 21:src/l502_fpga.c **** if (*pSPI_STAT & RXS) {
153 .loc 1 21 0 153 .loc 1 21 0
154 008c 0AE10805 P2.L = 1288; 154 008c 0AE10805 P2.L = 1288;
BFIN GAS /tmp/ccUsc9gL.s page 5 BFIN GAS /tmp/ccd5i8hx.s page 5
155 0090 1195 R1 = W [P2] (Z); 155 0090 1195 R1 = W [P2] (Z);
@ -298,7 +298,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
32:src/l502_fpga.c **** return *pSPI_RDBR; 32:src/l502_fpga.c **** return *pSPI_RDBR;
202 .loc 1 32 0 202 .loc 1 32 0
203 00cc 0895 R0 = W [P1] (Z); 203 00cc 0895 R0 = W [P1] (Z);
BFIN GAS /tmp/ccUsc9gL.s page 6 BFIN GAS /tmp/ccd5i8hx.s page 6
204 .LBE88: 204 .LBE88:
@ -358,7 +358,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
21:src/l502_fpga.c **** if (*pSPI_STAT & RXS) { 21:src/l502_fpga.c **** if (*pSPI_STAT & RXS) {
251 .loc 1 21 0 251 .loc 1 21 0
252 010a 4AE1C0FF P2.H = 65472; 252 010a 4AE1C0FF P2.H = 65472;
BFIN GAS /tmp/ccUsc9gL.s page 7 BFIN GAS /tmp/ccd5i8hx.s page 7
253 .LBE100: 253 .LBE100:
@ -418,7 +418,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
299 0140 4AE1C0FF P2.H = 65472; 299 0140 4AE1C0FF P2.H = 65472;
300 0144 0AE11005 P2.L = 1296; 300 0144 0AE11005 P2.L = 1296;
301 0148 1095 R0 = W [P2] (Z); 301 0148 1095 R0 = W [P2] (Z);
BFIN GAS /tmp/ccUsc9gL.s page 8 BFIN GAS /tmp/ccd5i8hx.s page 8
302 .LBE103: 302 .LBE103:
@ -478,7 +478,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
60:src/l502_fpga.c **** f_spi_rw((addr&L502_SPI_MSK_ADDR) | L502_SPI_BIT_START); 60:src/l502_fpga.c **** f_spi_rw((addr&L502_SPI_MSK_ADDR) | L502_SPI_BIT_START);
345 .loc 1 60 0 345 .loc 1 60 0
346 016c 20E1FF3F R0 = 16383 (X); 346 016c 20E1FF3F R0 = 16383 (X);
BFIN GAS /tmp/ccUsc9gL.s page 9 BFIN GAS /tmp/ccd5i8hx.s page 9
347 0170 0154 R0 = R1 & R0; 347 0170 0154 R0 = R1 & R0;
@ -538,7 +538,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
394 01a4 1195 R1 = W [P2] (Z); 394 01a4 1195 R1 = W [P2] (Z);
395 01a6 0061 R0 = 32 (X); 395 01a6 0061 R0 = 32 (X);
396 01a8 0854 R0 = R0 & R1; 396 01a8 0854 R0 = R0 & R1;
BFIN GAS /tmp/ccUsc9gL.s page 10 BFIN GAS /tmp/ccd5i8hx.s page 10
397 01aa 000C cc =R0==0; 397 01aa 000C cc =R0==0;
@ -598,7 +598,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
444 01e6 0854 R0 = R0 & R1; 444 01e6 0854 R0 = R0 & R1;
445 01e8 000C cc =R0==0; 445 01e8 000C cc =R0==0;
446 01ea 041C if cc jump .L24 (bp); 446 01ea 041C if cc jump .L24 (bp);
BFIN GAS /tmp/ccUsc9gL.s page 11 BFIN GAS /tmp/ccd5i8hx.s page 11
447 .LBB126: 447 .LBB126:
@ -658,7 +658,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
494 0228 041C if cc jump .L26 (bp); 494 0228 041C if cc jump .L26 (bp);
495 .LBB133: 495 .LBB133:
23:src/l502_fpga.c **** dummy = *pSPI_RDBR; 23:src/l502_fpga.c **** dummy = *pSPI_RDBR;
BFIN GAS /tmp/ccUsc9gL.s page 12 BFIN GAS /tmp/ccd5i8hx.s page 12
496 .loc 1 23 0 496 .loc 1 23 0
@ -718,7 +718,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
23:src/l502_fpga.c **** dummy = *pSPI_RDBR; 23:src/l502_fpga.c **** dummy = *pSPI_RDBR;
544 .loc 1 23 0 544 .loc 1 23 0
545 0268 0895 R0 = W [P1] (Z); 545 0268 0895 R0 = W [P1] (Z);
BFIN GAS /tmp/ccUsc9gL.s page 13 BFIN GAS /tmp/ccd5i8hx.s page 13
546 026a 78E6FEFF W [FP+-4] = R0; 546 026a 78E6FEFF W [FP+-4] = R0;
@ -778,7 +778,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
588 .loc 1 38 0 588 .loc 1 38 0
589 02a4 4AE1C0FF P2.H = 65472; 589 02a4 4AE1C0FF P2.H = 65472;
36:src/l502_fpga.c **** void fpga_spi_init(void) { 36:src/l502_fpga.c **** void fpga_spi_init(void) {
BFIN GAS /tmp/ccUsc9gL.s page 14 BFIN GAS /tmp/ccd5i8hx.s page 14
590 .loc 1 36 0 590 .loc 1 36 0
@ -789,7 +789,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
594 02ac 1160 R1 = 2 (X); 594 02ac 1160 R1 = 2 (X);
595 02ae 0AE11405 P2.L = 1300; 595 02ae 0AE11405 P2.L = 1300;
596 02b2 1197 W [P2] = R1; 596 02b2 1197 W [P2] = R1;
39:src/l502_fpga.c **** *pSPI_CTL = SPE | MSTR | SIZE | GM | TDBR_CORE; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, MSB first, 16-bit, CPHA=0, CPOL=0 */ 39:src/l502_fpga.c **** *pSPI_CTL = SPE | MSTR | SIZE | GM | TDBR_CORE; /* Мастер, MSB first, 16-bit, CPHA=0, CPO
597 .loc 1 39 0 597 .loc 1 39 0
598 02b4 20E10951 R0 = 20745 (X); 598 02b4 20E10951 R0 = 20745 (X);
599 02b8 626F P2 += -20; 599 02b8 626F P2 += -20;
@ -838,7 +838,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
636 .loc 1 26 0 636 .loc 1 26 0
637 02f2 4AE1C0FF P2.H = 65472; 637 02f2 4AE1C0FF P2.H = 65472;
638 02f6 0AE10C05 P2.L = 1292; 638 02f6 0AE10C05 P2.L = 1292;
BFIN GAS /tmp/ccUsc9gL.s page 15 BFIN GAS /tmp/ccd5i8hx.s page 15
639 02fa 20E118C3 R0 = -15592 (X); 639 02fa 20E118C3 R0 = -15592 (X);
@ -898,7 +898,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
686 0336 0AE10C05 P2.L = 1292; 686 0336 0AE10C05 P2.L = 1292;
687 033a 0060 R0 = 0 (X); 687 033a 0060 R0 = 0 (X);
688 033c 1097 W [P2] = R0; 688 033c 1097 W [P2] = R0;
BFIN GAS /tmp/ccUsc9gL.s page 16 BFIN GAS /tmp/ccd5i8hx.s page 16
28:src/l502_fpga.c **** while (!(*pSPI_STAT&RXS)) { 28:src/l502_fpga.c **** while (!(*pSPI_STAT&RXS)) {
@ -958,7 +958,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
736 037a 1097 W [P2] = R0; 736 037a 1097 W [P2] = R0;
28:src/l502_fpga.c **** while (!(*pSPI_STAT&RXS)) { 28:src/l502_fpga.c **** while (!(*pSPI_STAT&RXS)) {
737 .loc 1 28 0 737 .loc 1 28 0
BFIN GAS /tmp/ccUsc9gL.s page 17 BFIN GAS /tmp/ccd5i8hx.s page 17
738 037c E26F P2 += -4; 738 037c E26F P2 += -4;
@ -1018,7 +1018,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
785 .loc 1 28 0 785 .loc 1 28 0
786 03ba E26F P2 += -4; 786 03ba E26F P2 += -4;
787 03bc 0161 R1 = 32 (X); 787 03bc 0161 R1 = 32 (X);
BFIN GAS /tmp/ccUsc9gL.s page 18 BFIN GAS /tmp/ccd5i8hx.s page 18
788 03be 4234 I0 = P2; 788 03be 4234 I0 = P2;
@ -1078,7 +1078,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
835 03fa 0161 R1 = 32 (X); 835 03fa 0161 R1 = 32 (X);
836 03fc 4234 I0 = P2; 836 03fc 4234 I0 = P2;
837 .L46: 837 .L46:
BFIN GAS /tmp/ccUsc9gL.s page 19 BFIN GAS /tmp/ccd5i8hx.s page 19
838 03fe 0000 nop; 838 03fe 0000 nop;
@ -1138,7 +1138,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
890 .LASFDE2: 890 .LASFDE2:
891 002c 00000000 .4byte .Lframe0 891 002c 00000000 .4byte .Lframe0
892 0030 50010000 .4byte .LFB5 892 0030 50010000 .4byte .LFB5
BFIN GAS /tmp/ccUsc9gL.s page 20 BFIN GAS /tmp/ccd5i8hx.s page 20
893 0034 52010000 .4byte .LFE5-.LFB5 893 0034 52010000 .4byte .LFE5-.LFB5
@ -1198,7 +1198,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
947 0035 00000000 .4byte 0x0 947 0035 00000000 .4byte 0x0
948 0039 00000000 .4byte 0x0 948 0039 00000000 .4byte 0x0
949 .LLST2: 949 .LLST2:
BFIN GAS /tmp/ccUsc9gL.s page 21 BFIN GAS /tmp/ccd5i8hx.s page 21
950 003d 00000000 .4byte .LVL0-.Ltext0 950 003d 00000000 .4byte .LVL0-.Ltext0
@ -1258,7 +1258,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1004 .LLST8: 1004 .LLST8:
1005 00d1 98020000 .4byte .LVL22-.Ltext0 1005 00d1 98020000 .4byte .LVL22-.Ltext0
1006 00d5 9C020000 .4byte .LVL23-.Ltext0 1006 00d5 9C020000 .4byte .LVL23-.Ltext0
BFIN GAS /tmp/ccUsc9gL.s page 22 BFIN GAS /tmp/ccd5i8hx.s page 22
1007 00d9 0100 .2byte 0x1 1007 00d9 0100 .2byte 0x1
@ -1318,7 +1318,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1061 004f 22010000 .4byte .LASF4 1061 004f 22010000 .4byte .LASF4
1062 0053 03 .uleb128 0x3 1062 0053 03 .uleb128 0x3
1063 0054 19010000 .4byte .LASF6 1063 0054 19010000 .4byte .LASF6
BFIN GAS /tmp/ccUsc9gL.s page 23 BFIN GAS /tmp/ccd5i8hx.s page 23
1064 0058 02 .byte 0x2 1064 0058 02 .byte 0x2
@ -1378,7 +1378,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1118 00be 06 .uleb128 0x6 1118 00be 06 .uleb128 0x6
1119 00bf 29000000 .4byte .LASF12 1119 00bf 29000000 .4byte .LASF12
1120 00c3 01 .byte 0x1 1120 00c3 01 .byte 0x1
BFIN GAS /tmp/ccUsc9gL.s page 24 BFIN GAS /tmp/ccd5i8hx.s page 24
1121 00c4 31 .byte 0x31 1121 00c4 31 .byte 0x31
@ -1438,7 +1438,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1175 0130 00000000 .4byte .LFB4 1175 0130 00000000 .4byte .LFB4
1176 0134 50010000 .4byte .LFE4 1176 0134 50010000 .4byte .LFE4
1177 0138 00000000 .4byte .LLST0 1177 0138 00000000 .4byte .LLST0
BFIN GAS /tmp/ccUsc9gL.s page 25 BFIN GAS /tmp/ccd5i8hx.s page 25
1178 013c 12020000 .4byte 0x212 1178 013c 12020000 .4byte 0x212
@ -1498,7 +1498,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1232 01bd 12 .uleb128 0x12 1232 01bd 12 .uleb128 0x12
1233 01be 9E000000 .4byte 0x9e 1233 01be 9E000000 .4byte 0x9e
1234 01c2 02 .byte 0x2 1234 01c2 02 .byte 0x2
BFIN GAS /tmp/ccUsc9gL.s page 26 BFIN GAS /tmp/ccd5i8hx.s page 26
1235 01c3 7F .byte 0x7f 1235 01c3 7F .byte 0x7f
@ -1558,7 +1558,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1289 0235 3A .byte 0x3a 1289 0235 3A .byte 0x3a
1290 0236 3A000000 .4byte 0x3a 1290 0236 3A000000 .4byte 0x3a
1291 023a B3000000 .4byte .LLST7 1291 023a B3000000 .4byte .LLST7
BFIN GAS /tmp/ccUsc9gL.s page 27 BFIN GAS /tmp/ccd5i8hx.s page 27
1292 023e 17 .uleb128 0x17 1292 023e 17 .uleb128 0x17
@ -1618,7 +1618,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1346 02b9 9E000000 .4byte 0x9e 1346 02b9 9E000000 .4byte 0x9e
1347 02bd 02 .byte 0x2 1347 02bd 02 .byte 0x2
1348 02be 7F .byte 0x7f 1348 02be 7F .byte 0x7f
BFIN GAS /tmp/ccUsc9gL.s page 28 BFIN GAS /tmp/ccd5i8hx.s page 28
1349 02bf 7C .sleb128 -4 1349 02bf 7C .sleb128 -4
@ -1678,7 +1678,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1403 0331 0C .uleb128 0xc 1403 0331 0C .uleb128 0xc
1404 0332 49010000 .4byte 0x149 1404 0332 49010000 .4byte 0x149
1405 0336 0C .uleb128 0xc 1405 0336 0C .uleb128 0xc
BFIN GAS /tmp/ccUsc9gL.s page 29 BFIN GAS /tmp/ccd5i8hx.s page 29
1406 0337 40010000 .4byte 0x140 1406 0337 40010000 .4byte 0x140
@ -1738,7 +1738,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1460 03af 00 .byte 0x0 1460 03af 00 .byte 0x0
1461 03b0 10 .uleb128 0x10 1461 03b0 10 .uleb128 0x10
1462 03b1 81000000 .4byte 0x81 1462 03b1 81000000 .4byte 0x81
BFIN GAS /tmp/ccUsc9gL.s page 30 BFIN GAS /tmp/ccd5i8hx.s page 30
1463 03b5 00020000 .4byte .Ldebug_ranges0+0x200 1463 03b5 00020000 .4byte .Ldebug_ranges0+0x200
@ -1798,7 +1798,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1517 0011 00 .byte 0x0 1517 0011 00 .byte 0x0
1518 0012 00 .byte 0x0 1518 0012 00 .byte 0x0
1519 0013 02 .uleb128 0x2 1519 0013 02 .uleb128 0x2
BFIN GAS /tmp/ccUsc9gL.s page 31 BFIN GAS /tmp/ccd5i8hx.s page 31
1520 0014 24 .uleb128 0x24 1520 0014 24 .uleb128 0x24
@ -1858,7 +1858,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1574 004a 05 .uleb128 0x5 1574 004a 05 .uleb128 0x5
1575 004b 00 .byte 0x0 1575 004b 00 .byte 0x0
1576 004c 03 .uleb128 0x3 1576 004c 03 .uleb128 0x3
BFIN GAS /tmp/ccUsc9gL.s page 32 BFIN GAS /tmp/ccd5i8hx.s page 32
1577 004d 0E .uleb128 0xe 1577 004d 0E .uleb128 0xe
@ -1918,7 +1918,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1631 0083 0B .uleb128 0xb 1631 0083 0B .uleb128 0xb
1632 0084 01 .byte 0x1 1632 0084 01 .byte 0x1
1633 0085 01 .uleb128 0x1 1633 0085 01 .uleb128 0x1
BFIN GAS /tmp/ccUsc9gL.s page 33 BFIN GAS /tmp/ccd5i8hx.s page 33
1634 0086 13 .uleb128 0x13 1634 0086 13 .uleb128 0x13
@ -1978,7 +1978,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1688 00bc 00 .byte 0x0 1688 00bc 00 .byte 0x0
1689 00bd 00 .byte 0x0 1689 00bd 00 .byte 0x0
1690 00be 11 .uleb128 0x11 1690 00be 11 .uleb128 0x11
BFIN GAS /tmp/ccUsc9gL.s page 34 BFIN GAS /tmp/ccd5i8hx.s page 34
1691 00bf 0B .uleb128 0xb 1691 00bf 0B .uleb128 0xb
@ -2038,7 +2038,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1745 00f5 12 .uleb128 0x12 1745 00f5 12 .uleb128 0x12
1746 00f6 01 .uleb128 0x1 1746 00f6 01 .uleb128 0x1
1747 00f7 40 .uleb128 0x40 1747 00f7 40 .uleb128 0x40
BFIN GAS /tmp/ccUsc9gL.s page 35 BFIN GAS /tmp/ccd5i8hx.s page 35
1748 00f8 06 .uleb128 0x6 1748 00f8 06 .uleb128 0x6
@ -2098,7 +2098,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1802 012e 00 .byte 0x0 1802 012e 00 .byte 0x0
1803 012f 00 .byte 0x0 1803 012f 00 .byte 0x0
1804 0130 19 .uleb128 0x19 1804 0130 19 .uleb128 0x19
BFIN GAS /tmp/ccUsc9gL.s page 36 BFIN GAS /tmp/ccd5i8hx.s page 36
1805 0131 1D .uleb128 0x1d 1805 0131 1D .uleb128 0x1d
@ -2158,7 +2158,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1850 0010 2C000000 .4byte .LBB73-.Ltext0 1850 0010 2C000000 .4byte .LBB73-.Ltext0
1851 0014 46000000 .4byte .LBE73-.Ltext0 1851 0014 46000000 .4byte .LBE73-.Ltext0
1852 0018 22000000 .4byte .LBB72-.Ltext0 1852 0018 22000000 .4byte .LBB72-.Ltext0
BFIN GAS /tmp/ccUsc9gL.s page 37 BFIN GAS /tmp/ccd5i8hx.s page 37
1853 001c 2A000000 .4byte .LBE72-.Ltext0 1853 001c 2A000000 .4byte .LBE72-.Ltext0
@ -2218,7 +2218,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1907 00f4 2E010000 .4byte .LBE102-.Ltext0 1907 00f4 2E010000 .4byte .LBE102-.Ltext0
1908 00f8 00000000 .4byte 0x0 1908 00f8 00000000 .4byte 0x0
1909 00fc 00000000 .4byte 0x0 1909 00fc 00000000 .4byte 0x0
BFIN GAS /tmp/ccUsc9gL.s page 38 BFIN GAS /tmp/ccd5i8hx.s page 38
1910 0100 50010000 .4byte .LBB106-.Ltext0 1910 0100 50010000 .4byte .LBB106-.Ltext0
@ -2278,7 +2278,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
1964 01d8 00000000 .4byte 0x0 1964 01d8 00000000 .4byte 0x0
1965 01dc 00000000 .4byte 0x0 1965 01dc 00000000 .4byte 0x0
1966 01e0 56030000 .4byte .LBB173-.Ltext0 1966 01e0 56030000 .4byte .LBB173-.Ltext0
BFIN GAS /tmp/ccUsc9gL.s page 39 BFIN GAS /tmp/ccd5i8hx.s page 39
1967 01e4 5A030000 .4byte .LBE173-.Ltext0 1967 01e4 5A030000 .4byte .LBE173-.Ltext0
@ -2338,7 +2338,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
2004 69676E65 2004 69676E65
2004 6420696E 2004 6420696E
2004 7400 2004 7400
BFIN GAS /tmp/ccUsc9gL.s page 40 BFIN GAS /tmp/ccd5i8hx.s page 40
2005 .LASF3: 2005 .LASF3:
@ -2398,7 +2398,7 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
2028 00 2028 00
2029 .LASF0: 2029 .LASF0:
2030 012b 7369676E .string "signed char" 2030 012b 7369676E .string "signed char"
BFIN GAS /tmp/ccUsc9gL.s page 41 BFIN GAS /tmp/ccd5i8hx.s page 41
2030 65642063 2030 65642063
@ -2409,13 +2409,13 @@ BFIN GAS /tmp/ccUsc9gL.s page 1
2032 5F777269 2032 5F777269
2032 746500 2032 746500
2033 .ident "GCC: (ADI-2014R1-RC2) 4.3.5" 2033 .ident "GCC: (ADI-2014R1-RC2) 4.3.5"
BFIN GAS /tmp/ccUsc9gL.s page 42 BFIN GAS /tmp/ccd5i8hx.s page 42
DEFINED SYMBOLS DEFINED SYMBOLS
*ABS*:0000000000000000 src/l502_fpga.c *ABS*:0000000000000000 src/l502_fpga.c
/tmp/ccUsc9gL.s:13 .text:0000000000000000 _fpga_reg_write /tmp/ccd5i8hx.s:13 .text:0000000000000000 _fpga_reg_write
/tmp/ccUsc9gL.s:312 .text:0000000000000150 _fpga_reg_read /tmp/ccd5i8hx.s:312 .text:0000000000000150 _fpga_reg_read
/tmp/ccUsc9gL.s:585 .text:00000000000002a4 _fpga_spi_init /tmp/ccd5i8hx.s:585 .text:00000000000002a4 _fpga_spi_init
NO UNDEFINED SYMBOLS NO UNDEFINED SYMBOLS

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
BFIN GAS /tmp/cc0bhzXF.s page 1 BFIN GAS /tmp/ccq8enAs.s page 1
1 .file "src/l502_init.c"; 1 .file "src/l502_init.c";
@ -44,30 +44,30 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
22:src/l502_init.c **** #define L502_PLL_CTL (SET_MSEL(53) | DF) 22:src/l502_init.c **** #define L502_PLL_CTL (SET_MSEL(53) | DF)
23:src/l502_init.c **** #define L502_PLL_DIV (SET_SSEL(4) | CSEL_DIV1) 23:src/l502_init.c **** #define L502_PLL_DIV (SET_SSEL(4) | CSEL_DIV1)
24:src/l502_init.c **** 24:src/l502_init.c ****
25:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM 25:src/l502_init.c **** /* конфигурим SDRAM
26:src/l502_init.c **** * RDIV=((117964,8*64ms)/8192)-(6+3)=912 // <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 26:src/l502_init.c **** * RDIV=((117964,8*64ms)/8192)-(6+3)=912 // по логике - это последняя конф<EFBFBD>
27:src/l502_init.c **** * <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 8192, <EFBFBD> 4096, <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1834 27:src/l502_init.c **** * кстати - возможно не 8192, а 4096, в таком случае 1834
28:src/l502_init.c **** */ 28:src/l502_init.c **** */
29:src/l502_init.c **** #define L502_SDRAM_SDRRC (((132500000 / 1000) * 64) / 8192 - (6 + 3)) 29:src/l502_init.c **** #define L502_SDRAM_SDRRC (((132500000 / 1000) * 64) / 8192 - (6 + 3))
30:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 32 <EFBFBD><EFBFBD>, 9 <EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 30:src/l502_init.c **** /* размер памяти - 32 Мб, 9 бит - под адрес колонки */
31:src/l502_init.c **** #define L502_SDRAM_SDBCTL (EBE | EBSZ_32 | EBCAW_9) 31:src/l502_init.c **** #define L502_SDRAM_SDBCTL (EBE | EBSZ_32 | EBCAW_9)
32:src/l502_init.c **** /* CAS latency=3, <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> 2 - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!) 32:src/l502_init.c **** /* CAS latency=3, хотя можно и 2 - чем меньше тем лучше (правда п
33:src/l502_init.c **** * PASR_ALL - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> SDRAM <EFBFBD> 2.5 <EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 33:src/l502_init.c **** * PASR_ALL - тоже для SDRAM с 2.5 В - экономия энергии, поэтому р<EFBFBD>
34:src/l502_init.c **** * tRAS(min)=45 <EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 120 <EFBFBD><EFBFBD><EFBFBD> - 6 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) 34:src/l502_init.c **** * tRAS(min)=45 нс (при частоте 120 Мгц - 6 тактов)
35:src/l502_init.c **** * tRP(min)=20 <EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 120 <EFBFBD><EFBFBD><EFBFBD> - 3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) 35:src/l502_init.c **** * tRP(min)=20 нс (при частоте 120 Мгц - 3 тактов)
36:src/l502_init.c **** * tRCD(min)=20 <EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 120 <EFBFBD><EFBFBD><EFBFBD> - 3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) 36:src/l502_init.c **** * tRCD(min)=20 нс (при частоте 120 Мгц - 3 тактов)
37:src/l502_init.c **** * tWR - <EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 37:src/l502_init.c **** * tWR - хз, на вскидку 2
38:src/l502_init.c **** * POWER startup delay - <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 38:src/l502_init.c **** * POWER startup delay - не нужна
BFIN GAS /tmp/cc0bhzXF.s page 2 BFIN GAS /tmp/ccq8enAs.s page 2
39:src/l502_init.c **** * PSS - power SDRAM - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 39:src/l502_init.c **** * PSS - power SDRAM - должно быть
40:src/l502_init.c **** * SRFS - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 <20><> <20><><EFBFBD><EFBFBD><EFBFBD> 40:src/l502_init.c **** * SRFS - нужна для перевода SDRAM в режим пониженного энерг<EFBFBD>
41:src/l502_init.c **** * EBUFE=0 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> SDRAM 41:src/l502_init.c **** * EBUFE=0 - только один чип SDRAM
42:src/l502_init.c **** * FBBRW=0 - <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 42:src/l502_init.c **** * FBBRW=0 - для того, чтобы чтение сразу шло за записью, мож
43:src/l502_init.c **** * EMREN=0 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> SDRAM <EFBFBD> 2.5 <EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 43:src/l502_init.c **** * EMREN=0 - тоже для SDRAM с 2.5 В - экономия энергии
44:src/l502_init.c **** * TCSR=0 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> SDRAM <EFBFBD> 2.5 <EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 44:src/l502_init.c **** * TCSR=0 - тоже для SDRAM с 2.5 В - экономия энергии
45:src/l502_init.c **** * CDDBG=0 - <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> signals <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 45:src/l502_init.c **** * CDDBG=0 - по моему сотекщд signals не расшарены
46:src/l502_init.c **** */ 46:src/l502_init.c **** */
47:src/l502_init.c **** #define L502_SDRAM_SDGCTL (SCTLE | CL_2 | PASR_ALL | TRAS_6 | TRP_3 | TRCD_3 | TWR_2 | PSS) 47:src/l502_init.c **** #define L502_SDRAM_SDGCTL (SCTLE | CL_2 | PASR_ALL | TRAS_6 | TRP_3 | TRCD_3 | TWR_2 | PSS)
48:src/l502_init.c **** 48:src/l502_init.c ****
@ -118,7 +118,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
53 0034 C267 R2 += -8; 53 0034 C267 R2 += -8;
54 0036 0AE11C00 P2.L = 28; 54 0036 0AE11C00 P2.L = 28;
55 003a 6200 call (P2); 55 003a 6200 call (P2);
BFIN GAS /tmp/cc0bhzXF.s page 3 BFIN GAS /tmp/ccq8enAs.s page 3
56 .LVL6: 56 .LVL6:
@ -143,7 +143,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
72 _l502_setup_pll: 72 _l502_setup_pll:
73 .LFB18: 73 .LFB18:
58:src/l502_init.c **** 58:src/l502_init.c ****
59:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BlackFin'a */ 59:src/l502_init.c **** /* Настройка частоты BlackFin'a */
60:src/l502_init.c **** void l502_setup_pll(void) { 60:src/l502_init.c **** void l502_setup_pll(void) {
74 .loc 1 60 0 74 .loc 1 60 0
75 0044 00E80600 LINK 24; 75 0044 00E80600 LINK 24;
@ -174,11 +174,11 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
96 _l502_otp_write_cfg: 96 _l502_otp_write_cfg:
97 .LFB19: 97 .LFB19:
65:src/l502_init.c **** 65:src/l502_init.c ****
66:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PLL <EFBFBD> SDRAM <EFBFBD> <20><><EFBFBD><EFBFBD> OTP, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 66:src/l502_init.c **** /* Запись настроек PLL и SDRAM в блок OTP, начиная с заданной <20>
67:src/l502_init.c **** uint32_t l502_otp_write_cfg(uint32_t first_page) { 67:src/l502_init.c **** uint32_t l502_otp_write_cfg(uint32_t first_page) {
98 .loc 1 67 0 98 .loc 1 67 0
99 .LVL9: 99 .LVL9:
BFIN GAS /tmp/cc0bhzXF.s page 4 BFIN GAS /tmp/ccq8enAs.s page 4
100 006c ED05 [--sp] = ( r7:5, p5:5 ); 100 006c ED05 [--sp] = ( r7:5, p5:5 );
@ -218,7 +218,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
78:src/l502_init.c **** | OTP_CHECK_FOR_PREV_WRITE, &val); 78:src/l502_init.c **** | OTP_CHECK_FOR_PREV_WRITE, &val);
79:src/l502_init.c **** } 79:src/l502_init.c **** }
80:src/l502_init.c **** 80:src/l502_init.c ****
81:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */ 81:src/l502_init.c **** /* если была ошибка - делаем недействительным весь
82:src/l502_init.c **** if (err) 82:src/l502_init.c **** if (err)
83:src/l502_init.c **** l502_otp_make_invalid(first_page); 83:src/l502_init.c **** l502_otp_make_invalid(first_page);
84:src/l502_init.c **** } 84:src/l502_init.c **** }
@ -238,7 +238,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
133 .L12: 133 .L12:
71:src/l502_init.c **** val = ((uint64_t)L502_PLL_DIV << OTP_PLL_DIV_P) | ((uint64_t)L502_PLL_CTL << OTP_PLL_CTL_P) 71:src/l502_init.c **** val = ((uint64_t)L502_PLL_DIV << OTP_PLL_DIV_P) | ((uint64_t)L502_PLL_CTL << OTP_PLL_CTL_P)
134 .loc 1 71 0 134 .loc 1 71 0
BFIN GAS /tmp/cc0bhzXF.s page 5 BFIN GAS /tmp/ccq8enAs.s page 5
135 0098 20E1016A R0 = 27137 (X); 135 0098 20E1016A R0 = 27137 (X);
@ -298,7 +298,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
182 .LVL23: 182 .LVL23:
183 00e4 D1BB [FP+-12] = R1; 183 00e4 D1BB [FP+-12] = R1;
184 .LVL24: 184 .LVL24:
BFIN GAS /tmp/cc0bhzXF.s page 6 BFIN GAS /tmp/ccq8enAs.s page 6
54:src/l502_init.c **** err = bfrom_OtpWrite(page, OTP_LOWER_HALF | OTP_NO_ECC, &val); 54:src/l502_init.c **** err = bfrom_OtpWrite(page, OTP_LOWER_HALF | OTP_NO_ECC, &val);
@ -358,12 +358,12 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
235 .LFB20: 235 .LFB20:
88:src/l502_init.c **** 88:src/l502_init.c ****
89:src/l502_init.c **** 89:src/l502_init.c ****
BFIN GAS /tmp/cc0bhzXF.s page 7 BFIN GAS /tmp/ccq8enAs.s page 7
90:src/l502_init.c **** 90:src/l502_init.c ****
91:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PLL <EFBFBD> SDRAM <20> OTP. <20><><EFBFBD><EFBFBD> <20><><EFBFBD>, 91:src/l502_init.c **** /* Проверяем, есть ли действтиельные настройки PLL и SDRAM <20>
92:src/l502_init.c **** <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20> OTP <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PLL <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 92:src/l502_init.c **** то записываем их в OTP и инициализируем PLL вручную */
93:src/l502_init.c **** void l502_otp_init(void) { 93:src/l502_init.c **** void l502_otp_init(void) {
236 .loc 1 93 0 236 .loc 1 93 0
237 0128 E305 [--sp] = ( r7:4, p5:3 ); 237 0128 E305 [--sp] = ( r7:4, p5:3 );
@ -377,7 +377,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
95:src/l502_init.c **** 95:src/l502_init.c ****
96:src/l502_init.c **** //err = l502_otp_make_invalid(PBS00); 96:src/l502_init.c **** //err = l502_otp_make_invalid(PBS00);
97:src/l502_init.c **** 97:src/l502_init.c ****
98:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 98:src/l502_init.c **** /* ищем первый действительный блок настройки загруз<D183>
99:src/l502_init.c **** for (page = PBS00; !(fnd && !err) && (page < 0xD8); page += 4) { 99:src/l502_init.c **** for (page = PBS00; !(fnd && !err) && (page < 0xD8); page += 4) {
100:src/l502_init.c **** uint64_t val; 100:src/l502_init.c **** uint64_t val;
101:src/l502_init.c **** err = bfrom_OtpRead(page, OTP_LOWER_HALF, &val); 101:src/l502_init.c **** err = bfrom_OtpRead(page, OTP_LOWER_HALF, &val);
@ -418,7 +418,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
102:src/l502_init.c **** if (!err && !((val>>OTP_INVALID_P)&0x3)) { 102:src/l502_init.c **** if (!err && !((val>>OTP_INVALID_P)&0x3)) {
275 .loc 1 102 0 275 .loc 1 102 0
276 0152 000C cc =R0==0; 276 0152 000C cc =R0==0;
BFIN GAS /tmp/cc0bhzXF.s page 8 BFIN GAS /tmp/ccq8enAs.s page 8
277 0154 5914 if !cc jump .L15 (bp); 277 0154 5914 if !cc jump .L15 (bp);
@ -437,9 +437,9 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
287 0164 0A56 R0 = R2 | R1; 287 0164 0A56 R0 = R2 | R1;
288 0166 000C cc =R0==0; 288 0166 000C cc =R0==0;
289 0168 1714 if !cc jump .L16 (bp); 289 0168 1714 if !cc jump .L16 (bp);
105:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> => PLL <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 105:src/l502_init.c **** /* если блок с настройками не был записан => PLL з
106:src/l502_init.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 106:src/l502_init.c **** вручную и записываем настройки для коррект<EFBFBD>
107:src/l502_init.c **** <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 107:src/l502_init.c **** в дальнейшем */
108:src/l502_init.c **** if (!pll_setup) { 108:src/l502_init.c **** if (!pll_setup) {
290 .loc 1 108 0 290 .loc 1 108 0
291 016a 040C cc =R4==0; 291 016a 040C cc =R4==0;
@ -478,7 +478,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
110:src/l502_init.c **** pll_setup = 1; 110:src/l502_init.c **** pll_setup = 1;
111:src/l502_init.c **** } 111:src/l502_init.c **** }
112:src/l502_init.c **** err = l502_otp_write_cfg(page); 112:src/l502_init.c **** err = l502_otp_write_cfg(page);
BFIN GAS /tmp/cc0bhzXF.s page 9 BFIN GAS /tmp/ccq8enAs.s page 9
113:src/l502_init.c **** page+=4; 113:src/l502_init.c **** page+=4;
@ -499,17 +499,17 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
332 01a2 0E0A cc =R6<=R1 (iu); 332 01a2 0E0A cc =R6<=R1 (iu);
333 01a4 D21F if cc jump .L24 (bp); 333 01a4 D21F if cc jump .L24 (bp);
114:src/l502_init.c **** if (!err && (page< 0xD8)) { 114:src/l502_init.c **** if (!err && (page< 0xD8)) {
115:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 115:src/l502_init.c **** /* если есть место - то дописываем вторую коп
116:src/l502_init.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 116:src/l502_init.c **** быть уверенным, что если даже при первом ч
117:src/l502_init.c **** <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 117:src/l502_init.c **** все загрузится нормально */
118:src/l502_init.c **** err = l502_otp_write_cfg(page); 118:src/l502_init.c **** err = l502_otp_write_cfg(page);
119:src/l502_init.c **** } 119:src/l502_init.c **** }
120:src/l502_init.c **** } 120:src/l502_init.c **** }
121:src/l502_init.c **** } 121:src/l502_init.c **** }
122:src/l502_init.c **** } 122:src/l502_init.c **** }
123:src/l502_init.c **** 123:src/l502_init.c ****
124:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PLL, 124:src/l502_init.c **** /* если все страницы настроек испорчены, то инициали<D0BB>
125:src/l502_init.c **** <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 125:src/l502_init.c **** так как скорее всего его система не проинициализи
126:src/l502_init.c **** if (!fnd && !pll_setup) { 126:src/l502_init.c **** if (!fnd && !pll_setup) {
334 .loc 1 126 0 334 .loc 1 126 0
335 01a6 050C cc =R5==0; 335 01a6 050C cc =R5==0;
@ -538,7 +538,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
353 01b6 20E1016A R0 = 27137 (X); 353 01b6 20E1016A R0 = 27137 (X);
354 01ba 2160 R1 = 4 (X); 354 01ba 2160 R1 = 4 (X);
355 01bc 804F R0 <<= 16; 355 01bc 804F R0 <<= 16;
BFIN GAS /tmp/cc0bhzXF.s page 10 BFIN GAS /tmp/ccq8enAs.s page 10
356 01be 41E10404 R1.H = 1028; 356 01be 41E10404 R1.H = 1028;
@ -598,7 +598,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
404 0202 6300 call (P3); 404 0202 6300 call (P3);
405 0204 C82F jump.s .L21; 405 0204 C82F jump.s .L21;
406 .LVL53: 406 .LVL53:
BFIN GAS /tmp/cc0bhzXF.s page 11 BFIN GAS /tmp/ccq8enAs.s page 11
407 .L15: 407 .L15:
@ -658,7 +658,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
456 0242 5730 R2 = FP; 456 0242 5730 R2 = FP;
457 0244 1064 R0 += 2; 457 0244 1064 R0 += 2;
458 0246 21E18000 R1 = 128 (X); 458 0246 21E18000 R1 = 128 (X);
BFIN GAS /tmp/cc0bhzXF.s page 12 BFIN GAS /tmp/ccq8enAs.s page 12
459 024a 8267 R2 += -16; 459 024a 8267 R2 += -16;
@ -718,7 +718,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
507 .LFE20: 507 .LFE20:
508 .size _l502_otp_init, .-_l502_otp_init 508 .size _l502_otp_init, .-_l502_otp_init
509 .align 4 509 .align 4
BFIN GAS /tmp/cc0bhzXF.s page 13 BFIN GAS /tmp/ccq8enAs.s page 13
510 .global _l502_init; 510 .global _l502_init;
@ -733,20 +733,20 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
517 .LCFI12: 517 .LCFI12:
518 028e 00E80300 LINK 12; 518 028e 00E80300 LINK 12;
519 .LCFI13: 519 .LCFI13:
133:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OTP-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> PLL, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> 133:src/l502_init.c **** /* инициализация OTP-памяти и PLL, если эти значения не б
134:src/l502_init.c **** * <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20> OTP <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> 134:src/l502_init.c **** * проинициализированны до этого. Если в OTP уже были н
135:src/l502_init.c **** * SDRAM <EFBFBD> PLL <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> BlackFin */ 135:src/l502_init.c **** * SDRAM и PLL проинициализированы уже загрузочным кодом
136:src/l502_init.c **** l502_otp_init(); 136:src/l502_init.c **** l502_otp_init();
520 .loc 1 136 0 520 .loc 1 136 0
521 0292 FFE34BFF call _l502_otp_init; 521 0292 FFE34BFF call _l502_otp_init;
137:src/l502_init.c **** 137:src/l502_init.c ****
138:src/l502_init.c **** 138:src/l502_init.c ****
139:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPI */ 139:src/l502_init.c **** /* настройка SPI */
140:src/l502_init.c **** fpga_spi_init(); 140:src/l502_init.c **** fpga_spi_init();
522 .loc 1 140 0 522 .loc 1 140 0
523 0296 FFE3B5FE call _fpga_spi_init; 523 0296 FFE3B5FE call _fpga_spi_init;
141:src/l502_init.c **** 141:src/l502_init.c ****
142:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT0 */ 142:src/l502_init.c **** /* настройки SPORT0 */
143:src/l502_init.c **** *pSPORT0_TCLKDIV = 0; 143:src/l502_init.c **** *pSPORT0_TCLKDIV = 0;
524 .loc 1 143 0 524 .loc 1 143 0
525 029a 4AE1C0FF P2.H = 65472; 525 029a 4AE1C0FF P2.H = 65472;
@ -778,7 +778,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
151:src/l502_init.c **** *pSPORT0_RCR2 = SLEN(15) | RXSE; 151:src/l502_init.c **** *pSPORT0_RCR2 = SLEN(15) | RXSE;
544 .loc 1 151 0 544 .loc 1 151 0
545 02c2 026D P2 += 32; 545 02c2 026D P2 += 32;
BFIN GAS /tmp/cc0bhzXF.s page 14 BFIN GAS /tmp/ccq8enAs.s page 14
546 02c4 1097 W [P2] = R0; 546 02c4 1097 W [P2] = R0;
@ -800,7 +800,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
559 02e0 0856 R0 = R0 | R1; 559 02e0 0856 R0 = R0 | R1;
560 02e2 1097 W [P2] = R0; 560 02e2 1097 W [P2] = R0;
155:src/l502_init.c **** 155:src/l502_init.c ****
156:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT RX <EFBFBD><EFBFBD> IVG7 */ 156:src/l502_init.c **** /* назначение SPORT RX на IVG7 */
157:src/l502_init.c **** *pSIC_IAR2 = (*pSIC_IAR2 & 0xFFFFFFF0UL) | P16_IVG(7); 157:src/l502_init.c **** *pSIC_IAR2 = (*pSIC_IAR2 & 0xFFFFFFF0UL) | P16_IVG(7);
561 .loc 1 157 0 561 .loc 1 157 0
562 02e4 4AE1C0FF P2.H = 65472; 562 02e4 4AE1C0FF P2.H = 65472;
@ -838,7 +838,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
23:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #endif 23:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #endif
24:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** 24:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h ****
25:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #if !defined(__NO_BUILTIN) 25:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #if !defined(__NO_BUILTIN)
BFIN GAS /tmp/cc0bhzXF.s page 15 BFIN GAS /tmp/ccq8enAs.s page 15
26:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** 26:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h ****
@ -898,7 +898,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
80:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #endif /* __DEFINED_CLI */ 80:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #endif /* __DEFINED_CLI */
81:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** 81:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h ****
82:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #if (!defined(__DEFINED_STI) && \ 82:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #if (!defined(__DEFINED_STI) && \
BFIN GAS /tmp/cc0bhzXF.s page 16 BFIN GAS /tmp/ccq8enAs.s page 16
83:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** ((defined(__SPECIFIC_NAMES) && defined(__ENABLE_STI)) || \ 83:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** ((defined(__SPECIFIC_NAMES) && defined(__ENABLE_STI)) || \
@ -958,7 +958,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
137:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma always_inline 137:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma always_inline
138:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** static void prefetch(void * __a) { 138:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** static void prefetch(void * __a) {
139:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** __builtin_prefetch(__a); 139:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** __builtin_prefetch(__a);
BFIN GAS /tmp/cc0bhzXF.s page 17 BFIN GAS /tmp/ccq8enAs.s page 17
140:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** } 140:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** }
@ -1018,7 +1018,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
194:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma inline 194:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma inline
195:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma always_inline 195:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma always_inline
196:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** static void flush(void * __a) { 196:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** static void flush(void * __a) {
BFIN GAS /tmp/cc0bhzXF.s page 18 BFIN GAS /tmp/ccq8enAs.s page 18
197:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** __builtin_flush(__a); 197:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** __builtin_flush(__a);
@ -1078,7 +1078,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
251:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** 251:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h ****
252:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** /* generate a csync instruction protected by CLI/STI for anomaly 05-00-0312; 252:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** /* generate a csync instruction protected by CLI/STI for anomaly 05-00-0312;
253:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** ** you can generate an unprotected csync by using csync_int 253:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** ** you can generate an unprotected csync by using csync_int
BFIN GAS /tmp/cc0bhzXF.s page 19 BFIN GAS /tmp/ccq8enAs.s page 19
254:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** */ 254:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** */
@ -1138,10 +1138,10 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
600 0316 2400 ssync; 600 0316 2400 ssync;
601 .LBE62: 601 .LBE62:
602 .LBE61: 602 .LBE61:
BFIN GAS /tmp/cc0bhzXF.s page 20 BFIN GAS /tmp/ccq8enAs.s page 20
159:src/l502_init.c **** /* SPORT TX <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> IVG9 */ 159:src/l502_init.c **** /* SPORT TX оставляем на IVG9 */
160:src/l502_init.c **** REGISTER_ISR(9, isr_sport_dma_tx); 160:src/l502_init.c **** REGISTER_ISR(9, isr_sport_dma_tx);
603 .loc 1 160 0 603 .loc 1 160 0
604 0318 40E10000 R0.H = _isr_sport_dma_tx; 604 0318 40E10000 R0.H = _isr_sport_dma_tx;
@ -1164,14 +1164,14 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
620 // 0 "" 2 620 // 0 "" 2
621 .LBE60: 621 .LBE60:
161:src/l502_init.c **** 161:src/l502_init.c ****
162:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HostDMA-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 162:src/l502_init.c **** /* настройка HostDMA-интерфейса */
163:src/l502_init.c **** hdma_init(); 163:src/l502_init.c **** hdma_init();
622 .loc 1 163 0 622 .loc 1 163 0
623 0330 FFE368FE call _hdma_init; 623 0330 FFE368FE call _hdma_init;
624 .LVL67: 624 .LVL67:
164:src/l502_init.c **** 164:src/l502_init.c ****
165:src/l502_init.c **** 165:src/l502_init.c ****
166:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> */ 166:src/l502_init.c **** /* если SDRAM не настроена, то инициализируем ее */
167:src/l502_init.c **** if (*pEBIU_SDSTAT & SDRS) { 167:src/l502_init.c **** if (*pEBIU_SDSTAT & SDRS) {
625 .loc 1 167 0 625 .loc 1 167 0
626 0334 49E1C0FF P1.H = 65472; 626 0334 49E1C0FF P1.H = 65472;
@ -1185,12 +1185,12 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
171:src/l502_init.c **** *pEBIU_SDGCTL = L502_SDRAM_SDGCTL; 171:src/l502_init.c **** *pEBIU_SDGCTL = L502_SDRAM_SDGCTL;
172:src/l502_init.c **** ssync(); 172:src/l502_init.c **** ssync();
173:src/l502_init.c **** 173:src/l502_init.c ****
174:src/l502_init.c **** *a = 0; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 174:src/l502_init.c **** *a = 0; /* записываем по нулевому адресу произвольное
175:src/l502_init.c **** 175:src/l502_init.c ****
176:src/l502_init.c **** while (*pEBIU_SDSTAT & SDRS) {} 176:src/l502_init.c **** while (*pEBIU_SDSTAT & SDRS) {}
177:src/l502_init.c **** } 177:src/l502_init.c **** }
178:src/l502_init.c **** 178:src/l502_init.c ****
179:src/l502_init.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 179:src/l502_init.c **** /* инициализируем параметры для потоков ввода/вывод<D0BE>
180:src/l502_init.c **** l502_stream_init(); 180:src/l502_init.c **** l502_stream_init();
181:src/l502_init.c **** 181:src/l502_init.c ****
182:src/l502_init.c **** 182:src/l502_init.c ****
@ -1198,7 +1198,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
631 .loc 1 183 0 631 .loc 1 183 0
632 0342 01E80000 UNLINK; 632 0342 01E80000 UNLINK;
633 0346 BD05 ( r7:7, p5:5 ) = [sp++]; 633 0346 BD05 ( r7:7, p5:5 ) = [sp++];
BFIN GAS /tmp/cc0bhzXF.s page 21 BFIN GAS /tmp/ccq8enAs.s page 21
634 634
@ -1233,7 +1233,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
176:src/l502_init.c **** while (*pEBIU_SDSTAT & SDRS) {} 176:src/l502_init.c **** while (*pEBIU_SDSTAT & SDRS) {}
659 .loc 1 176 0 659 .loc 1 176 0
660 036a 5132 P2 = P1; 660 036a 5132 P2 = P1;
174:src/l502_init.c **** *a = 0; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 174:src/l502_init.c **** *a = 0; /* записываем по нулевому адресу произвольное
661 .loc 1 174 0 661 .loc 1 174 0
662 036c 6D93 [P5] = P5; 662 036c 6D93 [P5] = P5;
176:src/l502_init.c **** while (*pEBIU_SDSTAT & SDRS) {} 176:src/l502_init.c **** while (*pEBIU_SDSTAT & SDRS) {}
@ -1258,7 +1258,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
680 .LFE21: 680 .LFE21:
681 .size _l502_init, .-_l502_init 681 .size _l502_init, .-_l502_init
682 .section .debug_frame,"",@progbits 682 .section .debug_frame,"",@progbits
BFIN GAS /tmp/cc0bhzXF.s page 22 BFIN GAS /tmp/ccq8enAs.s page 22
683 .Lframe0: 683 .Lframe0:
@ -1318,7 +1318,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
737 .LSFDE4: 737 .LSFDE4:
738 0048 20000000 .4byte .LEFDE4-.LASFDE4 738 0048 20000000 .4byte .LEFDE4-.LASFDE4
739 .LASFDE4: 739 .LASFDE4:
BFIN GAS /tmp/cc0bhzXF.s page 23 BFIN GAS /tmp/ccq8enAs.s page 23
740 004c 00000000 .4byte .Lframe0 740 004c 00000000 .4byte .Lframe0
@ -1378,7 +1378,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
794 0090 03 .uleb128 0x3 794 0090 03 .uleb128 0x3
795 0091 85 .byte 0x85 795 0091 85 .byte 0x85
796 0092 02 .uleb128 0x2 796 0092 02 .uleb128 0x2
BFIN GAS /tmp/cc0bhzXF.s page 24 BFIN GAS /tmp/ccq8enAs.s page 24
797 0093 84 .byte 0x84 797 0093 84 .byte 0x84
@ -1438,7 +1438,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
851 0035 50 .byte 0x50 851 0035 50 .byte 0x50
852 0036 12000000 .4byte .LVL1-.Ltext0 852 0036 12000000 .4byte .LVL1-.Ltext0
853 003a 42000000 .4byte .LVL8-.Ltext0 853 003a 42000000 .4byte .LVL8-.Ltext0
BFIN GAS /tmp/cc0bhzXF.s page 25 BFIN GAS /tmp/ccq8enAs.s page 25
854 003e 0100 .2byte 0x1 854 003e 0100 .2byte 0x1
@ -1498,7 +1498,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
908 00cb 26010000 .4byte .LVL31-.Ltext0 908 00cb 26010000 .4byte .LVL31-.Ltext0
909 00cf 0100 .2byte 0x1 909 00cf 0100 .2byte 0x1
910 00d1 56 .byte 0x56 910 00d1 56 .byte 0x56
BFIN GAS /tmp/cc0bhzXF.s page 26 BFIN GAS /tmp/ccq8enAs.s page 26
911 00d2 00000000 .4byte 0x0 911 00d2 00000000 .4byte 0x0
@ -1558,7 +1558,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
965 .LLST8: 965 .LLST8:
966 0165 8E000000 .4byte .LVL12-.Ltext0 966 0165 8E000000 .4byte .LVL12-.Ltext0
967 0169 90000000 .4byte .LVL13-.Ltext0 967 0169 90000000 .4byte .LVL13-.Ltext0
BFIN GAS /tmp/cc0bhzXF.s page 27 BFIN GAS /tmp/ccq8enAs.s page 27
968 016d 0100 .2byte 0x1 968 016d 0100 .2byte 0x1
@ -1618,7 +1618,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1022 01f9 50 .byte 0x50 1022 01f9 50 .byte 0x50
1023 01fa B6010000 .4byte .LVL44-.Ltext0 1023 01fa B6010000 .4byte .LVL44-.Ltext0
1024 01fe D8010000 .4byte .LVL47-.Ltext0 1024 01fe D8010000 .4byte .LVL47-.Ltext0
BFIN GAS /tmp/cc0bhzXF.s page 28 BFIN GAS /tmp/ccq8enAs.s page 28
1025 0202 0100 .2byte 0x1 1025 0202 0100 .2byte 0x1
@ -1678,7 +1678,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1079 0295 54 .byte 0x54 1079 0295 54 .byte 0x54
1080 0296 B6010000 .4byte .LVL44-.Ltext0 1080 0296 B6010000 .4byte .LVL44-.Ltext0
1081 029a 8A020000 .4byte .LVL63-.Ltext0 1081 029a 8A020000 .4byte .LVL63-.Ltext0
BFIN GAS /tmp/cc0bhzXF.s page 29 BFIN GAS /tmp/ccq8enAs.s page 29
1082 029e 0100 .2byte 0x1 1082 029e 0100 .2byte 0x1
@ -1738,7 +1738,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1136 .file 3 "/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib 1136 .file 3 "/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib
1137 .file 4 "gcc/bfrom.h" 1137 .file 4 "gcc/bfrom.h"
1138 .section .debug_info 1138 .section .debug_info
BFIN GAS /tmp/cc0bhzXF.s page 30 BFIN GAS /tmp/ccq8enAs.s page 30
1139 0000 D8040000 .4byte 0x4d8 1139 0000 D8040000 .4byte 0x4d8
@ -1798,7 +1798,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1193 006d 07 .byte 0x7 1193 006d 07 .byte 0x7
1194 006e 05 .uleb128 0x5 1194 006e 05 .uleb128 0x5
1195 006f 04 .byte 0x4 1195 006f 04 .byte 0x4
BFIN GAS /tmp/cc0bhzXF.s page 31 BFIN GAS /tmp/ccq8enAs.s page 31
1196 0070 02 .uleb128 0x2 1196 0070 02 .uleb128 0x2
@ -1858,7 +1858,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1250 00d9 02 .byte 0x2 1250 00d9 02 .byte 0x2
1251 00da 23 .byte 0x23 1251 00da 23 .byte 0x23
1252 00db 06 .uleb128 0x6 1252 00db 06 .uleb128 0x6
BFIN GAS /tmp/cc0bhzXF.s page 32 BFIN GAS /tmp/ccq8enAs.s page 32
1253 00dc 08 .uleb128 0x8 1253 00dc 08 .uleb128 0x8
@ -1918,7 +1918,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1307 014c 12010000 .4byte 0x112 1307 014c 12010000 .4byte 0x112
1308 0150 2B000000 .4byte .LLST1 1308 0150 2B000000 .4byte .LLST1
1309 0154 10 .uleb128 0x10 1309 0154 10 .uleb128 0x10
BFIN GAS /tmp/cc0bhzXF.s page 33 BFIN GAS /tmp/ccq8enAs.s page 33
1310 0155 1D010000 .4byte 0x11d 1310 0155 1D010000 .4byte 0x11d
@ -1978,7 +1978,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1364 01ca 01 .byte 0x1 1364 01ca 01 .byte 0x1
1365 01cb 44 .byte 0x44 1365 01cb 44 .byte 0x44
1366 01cc 82000000 .4byte 0x82 1366 01cc 82000000 .4byte 0x82
BFIN GAS /tmp/cc0bhzXF.s page 34 BFIN GAS /tmp/ccq8enAs.s page 34
1367 01d0 0C .uleb128 0xc 1367 01d0 0C .uleb128 0xc
@ -2038,7 +2038,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1421 025a 00 .byte 0x0 1421 025a 00 .byte 0x0
1422 025b 00 .byte 0x0 1422 025b 00 .byte 0x0
1423 025c 00 .byte 0x0 1423 025c 00 .byte 0x0
BFIN GAS /tmp/cc0bhzXF.s page 35 BFIN GAS /tmp/ccq8enAs.s page 35
1424 025d 18 .uleb128 0x18 1424 025d 18 .uleb128 0x18
@ -2098,7 +2098,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1478 02de 58000000 .4byte .Ldebug_ranges0+0x58 1478 02de 58000000 .4byte .Ldebug_ranges0+0x58
1479 02e2 16 .uleb128 0x16 1479 02e2 16 .uleb128 0x16
1480 02e3 C5010000 .4byte 0x1c5 1480 02e3 C5010000 .4byte 0x1c5
BFIN GAS /tmp/cc0bhzXF.s page 36 BFIN GAS /tmp/ccq8enAs.s page 36
1481 02e7 12 .uleb128 0x12 1481 02e7 12 .uleb128 0x12
@ -2158,7 +2158,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1535 035c 7F .byte 0x7f 1535 035c 7F .byte 0x7f
1536 035d 11 .uleb128 0x11 1536 035d 11 .uleb128 0x11
1537 035e 68020000 .4byte .LBB54 1537 035e 68020000 .4byte .LBB54
BFIN GAS /tmp/cc0bhzXF.s page 37 BFIN GAS /tmp/ccq8enAs.s page 37
1538 0362 84020000 .4byte .LBE54 1538 0362 84020000 .4byte .LBE54
@ -2218,7 +2218,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1592 03e2 16030000 .4byte .LBB61 1592 03e2 16030000 .4byte .LBB61
1593 03e6 18030000 .4byte .LBE61 1593 03e6 18030000 .4byte .LBE61
1594 03ea 01 .byte 0x1 1594 03ea 01 .byte 0x1
BFIN GAS /tmp/cc0bhzXF.s page 38 BFIN GAS /tmp/ccq8enAs.s page 38
1595 03eb A0 .byte 0xa0 1595 03eb A0 .byte 0xa0
@ -2278,7 +2278,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1648 0461 01 .byte 0x1 1648 0461 01 .byte 0x1
1649 0462 82000000 .4byte 0x82 1649 0462 82000000 .4byte 0x82
1650 0466 75040000 .4byte 0x475 1650 0466 75040000 .4byte 0x475
BFIN GAS /tmp/cc0bhzXF.s page 39 BFIN GAS /tmp/ccq8enAs.s page 39
1651 046a 23 .uleb128 0x23 1651 046a 23 .uleb128 0x23
@ -2338,7 +2338,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1702 0002 01 .byte 0x1 1702 0002 01 .byte 0x1
1703 0003 25 .uleb128 0x25 1703 0003 25 .uleb128 0x25
1704 0004 0E .uleb128 0xe 1704 0004 0E .uleb128 0xe
BFIN GAS /tmp/cc0bhzXF.s page 40 BFIN GAS /tmp/ccq8enAs.s page 40
1705 0005 13 .uleb128 0x13 1705 0005 13 .uleb128 0x13
@ -2398,7 +2398,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1759 003b 00 .byte 0x0 1759 003b 00 .byte 0x0
1760 003c 03 .uleb128 0x3 1760 003c 03 .uleb128 0x3
1761 003d 0E .uleb128 0xe 1761 003d 0E .uleb128 0xe
BFIN GAS /tmp/cc0bhzXF.s page 41 BFIN GAS /tmp/ccq8enAs.s page 41
1762 003e 3A .uleb128 0x3a 1762 003e 3A .uleb128 0x3a
@ -2458,7 +2458,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1816 0074 2E .uleb128 0x2e 1816 0074 2E .uleb128 0x2e
1817 0075 01 .byte 0x1 1817 0075 01 .byte 0x1
1818 0076 3F .uleb128 0x3f 1818 0076 3F .uleb128 0x3f
BFIN GAS /tmp/cc0bhzXF.s page 42 BFIN GAS /tmp/ccq8enAs.s page 42
1819 0077 0C .uleb128 0xc 1819 0077 0C .uleb128 0xc
@ -2518,7 +2518,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1873 00ad 01 .uleb128 0x1 1873 00ad 01 .uleb128 0x1
1874 00ae 12 .uleb128 0x12 1874 00ae 12 .uleb128 0x12
1875 00af 01 .uleb128 0x1 1875 00af 01 .uleb128 0x1
BFIN GAS /tmp/cc0bhzXF.s page 43 BFIN GAS /tmp/ccq8enAs.s page 43
1876 00b0 40 .uleb128 0x40 1876 00b0 40 .uleb128 0x40
@ -2578,7 +2578,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1930 00e6 0C .uleb128 0xc 1930 00e6 0C .uleb128 0xc
1931 00e7 20 .uleb128 0x20 1931 00e7 20 .uleb128 0x20
1932 00e8 0B .uleb128 0xb 1932 00e8 0B .uleb128 0xb
BFIN GAS /tmp/cc0bhzXF.s page 44 BFIN GAS /tmp/ccq8enAs.s page 44
1933 00e9 01 .uleb128 0x1 1933 00e9 01 .uleb128 0x1
@ -2638,7 +2638,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
1987 011f 0B .uleb128 0xb 1987 011f 0B .uleb128 0xb
1988 0120 3B .uleb128 0x3b 1988 0120 3B .uleb128 0x3b
1989 0121 0B .uleb128 0xb 1989 0121 0B .uleb128 0xb
BFIN GAS /tmp/cc0bhzXF.s page 45 BFIN GAS /tmp/ccq8enAs.s page 45
1990 0122 27 .uleb128 0x27 1990 0122 27 .uleb128 0x27
@ -2698,7 +2698,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
2044 0158 03 .uleb128 0x3 2044 0158 03 .uleb128 0x3
2045 0159 08 .uleb128 0x8 2045 0159 08 .uleb128 0x8
2046 015a 3A .uleb128 0x3a 2046 015a 3A .uleb128 0x3a
BFIN GAS /tmp/cc0bhzXF.s page 46 BFIN GAS /tmp/ccq8enAs.s page 46
2047 015b 0B .uleb128 0xb 2047 015b 0B .uleb128 0xb
@ -2758,7 +2758,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
2101 0191 0B .uleb128 0xb 2101 0191 0B .uleb128 0xb
2102 0192 00 .byte 0x0 2102 0192 00 .byte 0x0
2103 0193 00 .byte 0x0 2103 0193 00 .byte 0x0
BFIN GAS /tmp/cc0bhzXF.s page 47 BFIN GAS /tmp/ccq8enAs.s page 47
2104 0194 21 .uleb128 0x21 2104 0194 21 .uleb128 0x21
@ -2818,7 +2818,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
2158 000a DC040000 .4byte 0x4dc 2158 000a DC040000 .4byte 0x4dc
2159 000e 36010000 .4byte 0x136 2159 000e 36010000 .4byte 0x136
2160 0012 6C353032 .string "l502_otp_make_invalid" 2160 0012 6C353032 .string "l502_otp_make_invalid"
BFIN GAS /tmp/cc0bhzXF.s page 48 BFIN GAS /tmp/ccq8enAs.s page 48
2160 5F6F7470 2160 5F6F7470
@ -2878,7 +2878,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
2199 003c 06020000 .4byte .LBE35-.Ltext0 2199 003c 06020000 .4byte .LBE35-.Ltext0
2200 0040 6E010000 .4byte .LBB46-.Ltext0 2200 0040 6E010000 .4byte .LBB46-.Ltext0
2201 0044 94010000 .4byte .LBE46-.Ltext0 2201 0044 94010000 .4byte .LBE46-.Ltext0
BFIN GAS /tmp/cc0bhzXF.s page 49 BFIN GAS /tmp/ccq8enAs.s page 49
2202 0048 44010000 .4byte .LBB45-.Ltext0 2202 0048 44010000 .4byte .LBB45-.Ltext0
@ -2938,7 +2938,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
2234 70526561 2234 70526561
2234 6400 2234 6400
2235 .LASF2: 2235 .LASF2:
BFIN GAS /tmp/cc0bhzXF.s page 50 BFIN GAS /tmp/ccq8enAs.s page 50
2236 00a5 756E7369 .string "unsigned char" 2236 00a5 756E7369 .string "unsigned char"
@ -2998,7 +2998,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
2258 6720756E 2258 6720756E
2258 7369676E 2258 7369676E
2258 65642069 2258 65642069
BFIN GAS /tmp/cc0bhzXF.s page 51 BFIN GAS /tmp/ccq8enAs.s page 51
2259 .LASF26: 2259 .LASF26:
@ -3058,7 +3058,7 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
2284 5F6F7470 2284 5F6F7470
2284 5F6D616B 2284 5F6D616B
2284 655F696E 2284 655F696E
BFIN GAS /tmp/cc0bhzXF.s page 52 BFIN GAS /tmp/ccq8enAs.s page 52
2284 76616C69 2284 76616C69
@ -3074,16 +3074,16 @@ BFIN GAS /tmp/cc0bhzXF.s page 1
2290 01fe 7373796E .string "ssync" 2290 01fe 7373796E .string "ssync"
2290 6300 2290 6300
2291 .ident "GCC: (ADI-2014R1-RC2) 4.3.5" 2291 .ident "GCC: (ADI-2014R1-RC2) 4.3.5"
BFIN GAS /tmp/cc0bhzXF.s page 53 BFIN GAS /tmp/ccq8enAs.s page 53
DEFINED SYMBOLS DEFINED SYMBOLS
*ABS*:0000000000000000 src/l502_init.c *ABS*:0000000000000000 src/l502_init.c
/tmp/cc0bhzXF.s:13 .text:0000000000000000 _l502_otp_make_invalid /tmp/ccq8enAs.s:13 .text:0000000000000000 _l502_otp_make_invalid
/tmp/cc0bhzXF.s:72 .text:0000000000000044 _l502_setup_pll /tmp/ccq8enAs.s:72 .text:0000000000000044 _l502_setup_pll
/tmp/cc0bhzXF.s:96 .text:000000000000006c _l502_otp_write_cfg /tmp/ccq8enAs.s:96 .text:000000000000006c _l502_otp_write_cfg
/tmp/cc0bhzXF.s:234 .text:0000000000000128 _l502_otp_init /tmp/ccq8enAs.s:234 .text:0000000000000128 _l502_otp_init
/tmp/cc0bhzXF.s:512 .text:000000000000028c _l502_init /tmp/ccq8enAs.s:512 .text:000000000000028c _l502_init
UNDEFINED SYMBOLS UNDEFINED SYMBOLS
_fpga_spi_init _fpga_spi_init

View File

@ -1,4 +1,4 @@
BFIN GAS /tmp/ccAbtljy.s page 1 BFIN GAS /tmp/ccUgH5eo.s page 1
1 .file "src/l502_params.c"; 1 .file "src/l502_params.c";
@ -23,11 +23,11 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1:src/l502_params.c **** /** @addtogroup config_params 1:src/l502_params.c **** /** @addtogroup config_params
2:src/l502_params.c **** @{ 2:src/l502_params.c **** @{
3:src/l502_params.c **** @file l502_params.c 3:src/l502_params.c **** @file l502_params.c
4:src/l502_params.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4:src/l502_params.c **** Файл содержит функции по обработке команд от ПК на у
5:src/l502_params.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 5:src/l502_params.c **** конфигурации сбора данных и других параметров.
6:src/l502_params.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 6:src/l502_params.c **** Только в данном файле должны быть изменения полей с<EFBFBD>
7:src/l502_params.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - g_set. 7:src/l502_params.c **** настроек - g_set.
8:src/l502_params.c **** <EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> */ 8:src/l502_params.c **** Так же здесь */
9:src/l502_params.c **** 9:src/l502_params.c ****
10:src/l502_params.c **** 10:src/l502_params.c ****
11:src/l502_params.c **** #include <stdint.h> 11:src/l502_params.c **** #include <stdint.h>
@ -41,7 +41,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
19:src/l502_params.c **** 19:src/l502_params.c ****
20:src/l502_params.c **** 20:src/l502_params.c ****
21:src/l502_params.c **** 21:src/l502_params.c ****
22:src/l502_params.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 22:src/l502_params.c **** /* проверка правильного режима синхронизации */
23:src/l502_params.c **** #define CHECK_SYNC_MODE(cmd) (((cmd) != L502_SYNC_INTERNAL) \ 23:src/l502_params.c **** #define CHECK_SYNC_MODE(cmd) (((cmd) != L502_SYNC_INTERNAL) \
24:src/l502_params.c **** && ((cmd) !=L502_SYNC_EXTERNAL_MASTER) \ 24:src/l502_params.c **** && ((cmd) !=L502_SYNC_EXTERNAL_MASTER) \
25:src/l502_params.c **** && ((cmd) != L502_SYNC_DI_SYN1_RISE) \ 25:src/l502_params.c **** && ((cmd) != L502_SYNC_DI_SYN1_RISE) \
@ -58,7 +58,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
36:src/l502_params.c **** .ref_freq = L502_REF_FREQ_2000KHZ, 36:src/l502_params.c **** .ref_freq = L502_REF_FREQ_2000KHZ,
37:src/l502_params.c **** .out_freq_div = X502_OUT_FREQ_DIV_DEFAULT, 37:src/l502_params.c **** .out_freq_div = X502_OUT_FREQ_DIV_DEFAULT,
38:src/l502_params.c **** .sync_mode = L502_SYNC_INTERNAL, 38:src/l502_params.c **** .sync_mode = L502_SYNC_INTERNAL,
BFIN GAS /tmp/ccAbtljy.s page 2 BFIN GAS /tmp/ccUgH5eo.s page 2
39:src/l502_params.c **** .sync_start_mode = L502_SYNC_INTERNAL 39:src/l502_params.c **** .sync_start_mode = L502_SYNC_INTERNAL
@ -69,13 +69,13 @@ BFIN GAS /tmp/ccAbtljy.s page 1
44:src/l502_params.c **** 44:src/l502_params.c ****
45:src/l502_params.c **** 45:src/l502_params.c ****
46:src/l502_params.c **** 46:src/l502_params.c ****
47:src/l502_params.c **** /** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 47:src/l502_params.c **** /** @brief Установка количества логических каналов
48:src/l502_params.c **** 48:src/l502_params.c ****
49:src/l502_params.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> g_set.lch_cnt <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 49:src/l502_params.c **** Проверка и запись в поле g_set.lch_cnt значение кол-ва кан<EFBFBD>
50:src/l502_params.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>. 50:src/l502_params.c **** таблице АЦП.
51:src/l502_params.c **** 51:src/l502_params.c ****
52:src/l502_params.c **** @param[in] lch_cnt <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> 1 <EFBFBD><EFBFBD> #L502_LTABLE_MAX_CH_CNT) 52:src/l502_params.c **** @param[in] lch_cnt Количество логических каналов (от 1 до #L50
53:src/l502_params.c **** @return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 53:src/l502_params.c **** @return Код ошибки */
54:src/l502_params.c **** int32_t params_set_lch_cnt(uint32_t lch_cnt) { 54:src/l502_params.c **** int32_t params_set_lch_cnt(uint32_t lch_cnt) {
16 .loc 1 54 0 16 .loc 1 54 0
17 .LVL0: 17 .LVL0:
@ -118,22 +118,22 @@ BFIN GAS /tmp/ccAbtljy.s page 1
47 .type _params_set_lch, STT_FUNC; 47 .type _params_set_lch, STT_FUNC;
48 _params_set_lch: 48 _params_set_lch:
49 .LFB3: 49 .LFB3:
BFIN GAS /tmp/ccAbtljy.s page 3 BFIN GAS /tmp/ccUgH5eo.s page 3
60:src/l502_params.c **** 60:src/l502_params.c ****
61:src/l502_params.c **** /** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 61:src/l502_params.c **** /** @brief Установить параметры логического канала
62:src/l502_params.c **** 62:src/l502_params.c ****
63:src/l502_params.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 63:src/l502_params.c **** Функция проверяет входные параметры и записывает и<EFBFBD>
64:src/l502_params.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> g_set.lch[] 64:src/l502_params.c **** таблицы g_set.lch[]
65:src/l502_params.c **** 65:src/l502_params.c ****
66:src/l502_params.c **** @param[in] index <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [0, L502_LTABLE_MAX_CH_CNT-1] 66:src/l502_params.c **** @param[in] index Номер логического канала [0, L502_LTABLE_MAX_CH_CNT-1]
67:src/l502_params.c **** @param[in] ch <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> 0 <EFBFBD><EFBFBD> 15 <EFBFBD><EFBFBD><EFBFBD> 31) 67:src/l502_params.c **** @param[in] ch Номер физического канала (от 0 до 15 или 31)
68:src/l502_params.c **** @param[in] mode <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 68:src/l502_params.c **** @param[in] mode Режим измерения для данного лог. канала
69:src/l502_params.c **** @param[in] range <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 69:src/l502_params.c **** @param[in] range Диапазон измерения для данного лог. канал
70:src/l502_params.c **** @param[in] avg <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 70:src/l502_params.c **** @param[in] avg Коэф. усреднения по данному лог. каналу
71:src/l502_params.c **** @param[in] flags <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 71:src/l502_params.c **** @param[in] flags Дополнительные флаги
72:src/l502_params.c **** @return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 72:src/l502_params.c **** @return Код ошибки */
73:src/l502_params.c **** int32_t params_set_lch(uint32_t index, uint32_t ch, t_l502_lch_mode mode, 73:src/l502_params.c **** int32_t params_set_lch(uint32_t index, uint32_t ch, t_l502_lch_mode mode,
74:src/l502_params.c **** t_l502_adc_range range, uint32_t avg, uint32_t flags) { 74:src/l502_params.c **** t_l502_adc_range range, uint32_t avg, uint32_t flags) {
50 .loc 1 74 0 50 .loc 1 74 0
@ -178,7 +178,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
77:src/l502_params.c **** if ((mode!=L502_LCH_MODE_COMM) && (mode != L502_LCH_MODE_DIFF) && 77:src/l502_params.c **** if ((mode!=L502_LCH_MODE_COMM) && (mode != L502_LCH_MODE_DIFF) &&
72 .loc 1 77 0 72 .loc 1 77 0
73 0044 120E cc =R2<=2 (iu); 73 0044 120E cc =R2<=2 (iu);
BFIN GAS /tmp/ccAbtljy.s page 4 BFIN GAS /tmp/ccUgH5eo.s page 4
74 0046 FA17 if !cc jump .L8 (bp); 74 0046 FA17 if !cc jump .L8 (bp);
@ -232,13 +232,13 @@ BFIN GAS /tmp/ccAbtljy.s page 1
115 _params_set_adc_freq_div: 115 _params_set_adc_freq_div:
116 .LFB4: 116 .LFB4:
91:src/l502_params.c **** 91:src/l502_params.c ****
92:src/l502_params.c **** /** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 92:src/l502_params.c **** /** Установка делителя частоты АЦП
93:src/l502_params.c **** @param[in] div <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 93:src/l502_params.c **** @param[in] div Значение делителя
94:src/l502_params.c **** @return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 94:src/l502_params.c **** @return Код ошибки */
95:src/l502_params.c **** int32_t params_set_adc_freq_div(uint32_t div) { 95:src/l502_params.c **** int32_t params_set_adc_freq_div(uint32_t div) {
117 .loc 1 95 0 117 .loc 1 95 0
118 .LVL9: 118 .LVL9:
BFIN GAS /tmp/ccAbtljy.s page 5 BFIN GAS /tmp/ccUgH5eo.s page 5
119 008c 0830 R1 = R0; 119 008c 0830 R1 = R0;
@ -282,10 +282,10 @@ BFIN GAS /tmp/ccAbtljy.s page 1
150 _params_set_ref_freq: 150 _params_set_ref_freq:
151 .LFB5: 151 .LFB5:
101:src/l502_params.c **** 101:src/l502_params.c ****
102:src/l502_params.c **** /** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 102:src/l502_params.c **** /** Установка значения опорной частоты
103:src/l502_params.c **** @param[in] freq_code <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 103:src/l502_params.c **** @param[in] freq_code Значение частоты. Для внутренней может
104:src/l502_params.c **** #L502_REF_FREQ_2000KHZ <EFBFBD><EFBFBD><EFBFBD> #L502_REF_FREQ_1500KHZ 104:src/l502_params.c **** #L502_REF_FREQ_2000KHZ или #L502_REF_FREQ_1500KHZ
105:src/l502_params.c **** @return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 105:src/l502_params.c **** @return Код ошибки */
106:src/l502_params.c **** int32_t params_set_ref_freq(uint32_t freq_code) { 106:src/l502_params.c **** int32_t params_set_ref_freq(uint32_t freq_code) {
152 .loc 1 106 0 152 .loc 1 106 0
153 .LVL11: 153 .LVL11:
@ -298,7 +298,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
158 00c4 00E80000 LINK 0; 158 00c4 00E80000 LINK 0;
159 .LCFI3: 159 .LCFI3:
160 .loc 1 107 0 160 .loc 1 107 0
BFIN GAS /tmp/ccAbtljy.s page 6 BFIN GAS /tmp/ccUgH5eo.s page 6
161 00c8 10E60402 [P2+2064] = R0; 161 00c8 10E60402 [P2+2064] = R0;
@ -316,9 +316,9 @@ BFIN GAS /tmp/ccAbtljy.s page 1
171 .type _params_set_adc_interframe_delay, STT_FUNC; 171 .type _params_set_adc_interframe_delay, STT_FUNC;
172 _params_set_adc_interframe_delay: 172 _params_set_adc_interframe_delay:
173 .LFB6: 173 .LFB6:
110:src/l502_params.c **** /** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 110:src/l502_params.c **** /** Установка значения межкадровой задержки
111:src/l502_params.c **** @param[in] delay <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> 0 <EFBFBD><EFBFBD> L502_ADC_INTERFRAME_DELAY_MAX) 111:src/l502_params.c **** @param[in] delay Значение межкадровой задержки (от 0 до L502_
112:src/l502_params.c **** @return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 112:src/l502_params.c **** @return Код ошибки */
113:src/l502_params.c **** int32_t params_set_adc_interframe_delay(uint32_t delay) { 113:src/l502_params.c **** int32_t params_set_adc_interframe_delay(uint32_t delay) {
174 .loc 1 113 0 174 .loc 1 113 0
175 .LVL13: 175 .LVL13:
@ -358,7 +358,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
202 .LFE6: 202 .LFE6:
203 .size _params_set_adc_interframe_delay, .-_params_set_adc_interframe_delay 203 .size _params_set_adc_interframe_delay, .-_params_set_adc_interframe_delay
204 .align 4 204 .align 4
BFIN GAS /tmp/ccAbtljy.s page 7 BFIN GAS /tmp/ccUgH5eo.s page 7
205 .global _params_set_sync_mode; 205 .global _params_set_sync_mode;
@ -366,9 +366,9 @@ BFIN GAS /tmp/ccAbtljy.s page 1
207 _params_set_sync_mode: 207 _params_set_sync_mode:
208 .LFB7: 208 .LFB7:
119:src/l502_params.c **** 119:src/l502_params.c ****
120:src/l502_params.c **** /** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 120:src/l502_params.c **** /** Установка источника опроной частоты синхронизации
121:src/l502_params.c **** @param[in] sync_mode <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> #t_l502_sync_mode 121:src/l502_params.c **** @param[in] sync_mode Значение из #t_l502_sync_mode
122:src/l502_params.c **** @return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 122:src/l502_params.c **** @return Код ошибки */
123:src/l502_params.c **** int32_t params_set_sync_mode(t_l502_sync_mode sync_mode) { 123:src/l502_params.c **** int32_t params_set_sync_mode(t_l502_sync_mode sync_mode) {
209 .loc 1 123 0 209 .loc 1 123 0
210 .LVL17: 210 .LVL17:
@ -415,10 +415,10 @@ BFIN GAS /tmp/ccAbtljy.s page 1
245 _params_set_sync_start_mode: 245 _params_set_sync_start_mode:
246 .LFB8: 246 .LFB8:
129:src/l502_params.c **** 129:src/l502_params.c ****
130:src/l502_params.c **** /** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 130:src/l502_params.c **** /** Установка источника синхронизации старта сбора дан
131:src/l502_params.c **** @param[in] sync_mode <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> #t_l502_sync_mode 131:src/l502_params.c **** @param[in] sync_mode Значение из #t_l502_sync_mode
132:src/l502_params.c **** @return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 132:src/l502_params.c **** @return Код ошибки */
BFIN GAS /tmp/ccAbtljy.s page 8 BFIN GAS /tmp/ccUgH5eo.s page 8
133:src/l502_params.c **** int32_t params_set_sync_start_mode(t_l502_sync_mode sync_mode) { 133:src/l502_params.c **** int32_t params_set_sync_start_mode(t_l502_sync_mode sync_mode) {
@ -468,9 +468,9 @@ BFIN GAS /tmp/ccAbtljy.s page 1
284 .LFB9: 284 .LFB9:
139:src/l502_params.c **** 139:src/l502_params.c ****
140:src/l502_params.c **** 140:src/l502_params.c ****
141:src/l502_params.c **** /** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 141:src/l502_params.c **** /** Установка делителя частоты синхронного ввода цифро
142:src/l502_params.c **** @param[in] div <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 142:src/l502_params.c **** @param[in] div Значение делителя
143:src/l502_params.c **** @return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 143:src/l502_params.c **** @return Код ошибки */
144:src/l502_params.c **** int32_t params_set_din_freq_div(uint32_t div) { 144:src/l502_params.c **** int32_t params_set_din_freq_div(uint32_t div) {
285 .loc 1 144 0 285 .loc 1 144 0
286 .LVL27: 286 .LVL27:
@ -478,7 +478,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
145:src/l502_params.c **** if ((div==0) || (div > L502_DIN_FREQ_DIV_MAX)) 145:src/l502_params.c **** if ((div==0) || (div > L502_DIN_FREQ_DIV_MAX))
288 .loc 1 145 0 288 .loc 1 145 0
289 0162 FA63 R2 = -1 (X); 289 0162 FA63 R2 = -1 (X);
BFIN GAS /tmp/ccAbtljy.s page 9 BFIN GAS /tmp/ccUgH5eo.s page 9
290 0164 F867 R0 += -1; 290 0164 F867 R0 += -1;
@ -518,9 +518,9 @@ BFIN GAS /tmp/ccAbtljy.s page 1
318 _params_set_dac_freq_div: 318 _params_set_dac_freq_div:
319 .LFB10: 319 .LFB10:
150:src/l502_params.c **** 150:src/l502_params.c ****
151:src/l502_params.c **** /** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> 151:src/l502_params.c **** /** Установка делителя частоты вывода на ЦАП
152:src/l502_params.c **** @param[in] div <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (1 <EFBFBD><EFBFBD><EFBFBD> 2) 152:src/l502_params.c **** @param[in] div Значение делителя (1 или 2)
153:src/l502_params.c **** @return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 153:src/l502_params.c **** @return Код ошибки */
154:src/l502_params.c **** int32_t params_set_dac_freq_div(uint32_t div) { 154:src/l502_params.c **** int32_t params_set_dac_freq_div(uint32_t div) {
320 .loc 1 154 0 320 .loc 1 154 0
321 .LVL29: 321 .LVL29:
@ -538,7 +538,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
331 019c 100A cc =R0<=R2 (iu); 331 019c 100A cc =R0<=R2 (iu);
332 019e 0B10 if !cc jump .L45; 332 019e 0B10 if !cc jump .L45;
156:src/l502_params.c **** return L502_BF_ERR_INVALID_CMD_PARAMS; 156:src/l502_params.c **** return L502_BF_ERR_INVALID_CMD_PARAMS;
BFIN GAS /tmp/ccAbtljy.s page 10 BFIN GAS /tmp/ccUgH5eo.s page 10
157:src/l502_params.c **** g_set.out_freq_div = div; 157:src/l502_params.c **** g_set.out_freq_div = div;
@ -570,12 +570,12 @@ BFIN GAS /tmp/ccAbtljy.s page 1
161:src/l502_params.c **** 161:src/l502_params.c ****
162:src/l502_params.c **** 162:src/l502_params.c ****
163:src/l502_params.c **** 163:src/l502_params.c ****
164:src/l502_params.c **** /** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 164:src/l502_params.c **** /** @brief Запись параметров сбора в регистры ПЛИС
165:src/l502_params.c **** 165:src/l502_params.c ****
166:src/l502_params.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #g_set <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 166:src/l502_params.c **** Функция выполняет запись всех параметров из структ<EFBFBD>
167:src/l502_params.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 167:src/l502_params.c **** ПЛИС. Функция может вызываться только когда сбор да<D0B4>
168:src/l502_params.c **** 168:src/l502_params.c ****
169:src/l502_params.c **** @return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 169:src/l502_params.c **** @return Код ошибки */
170:src/l502_params.c **** int32_t configure(void) { 170:src/l502_params.c **** int32_t configure(void) {
354 .loc 1 170 0 354 .loc 1 170 0
355 01c0 E305 [--sp] = ( r7:4, p5:3 ); 355 01c0 E305 [--sp] = ( r7:4, p5:3 );
@ -596,9 +596,9 @@ BFIN GAS /tmp/ccAbtljy.s page 1
366 01d0 000C cc =R0==0; 366 01d0 000C cc =R0==0;
367 01d2 071C if cc jump .L47 (bp); 367 01d2 071C if cc jump .L47 (bp);
174:src/l502_params.c **** if (!err) { 174:src/l502_params.c **** if (!err) {
175:src/l502_params.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 175:src/l502_params.c **** /* записываем логическую таблицу */
176:src/l502_params.c **** for (ch = 0; ch < g_set.lch_cnt; ch++) { 176:src/l502_params.c **** for (ch = 0; ch < g_set.lch_cnt; ch++) {
BFIN GAS /tmp/ccAbtljy.s page 11 BFIN GAS /tmp/ccUgH5eo.s page 11
177:src/l502_params.c **** uint32_t wrd = ((g_set.lch[ch].phy_ch & 0xF) << 3) | (g_set.lch[ch].range & 0x7); 177:src/l502_params.c **** uint32_t wrd = ((g_set.lch[ch].phy_ch & 0xF) << 3) | (g_set.lch[ch].range & 0x7);
@ -658,7 +658,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
390 .LBB2: 390 .LBB2:
177:src/l502_params.c **** uint32_t wrd = ((g_set.lch[ch].phy_ch & 0xF) << 3) | (g_set.lch[ch].range & 0x7); 177:src/l502_params.c **** uint32_t wrd = ((g_set.lch[ch].phy_ch & 0xF) << 3) | (g_set.lch[ch].range & 0x7);
391 .loc 1 177 0 391 .loc 1 177 0
BFIN GAS /tmp/ccAbtljy.s page 12 BFIN GAS /tmp/ccUgH5eo.s page 12
392 01f6 7C60 R4 = 15 (X); 392 01f6 7C60 R4 = 15 (X);
@ -718,7 +718,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
177:src/l502_params.c **** uint32_t wrd = ((g_set.lch[ch].phy_ch & 0xF) << 3) | (g_set.lch[ch].range & 0x7); 177:src/l502_params.c **** uint32_t wrd = ((g_set.lch[ch].phy_ch & 0xF) << 3) | (g_set.lch[ch].range & 0x7);
438 .loc 1 177 0 438 .loc 1 177 0
439 023e 184F R0 <<= 3; 439 023e 184F R0 <<= 3;
BFIN GAS /tmp/ccAbtljy.s page 13 BFIN GAS /tmp/ccUgH5eo.s page 13
440 0240 0832 P1 = R0; 440 0240 0832 P1 = R0;
@ -778,7 +778,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
487 02ac 3A60 R2 = 7 (X); 487 02ac 3A60 R2 = 7 (X);
488 02ae A8E41608 R0 = B [P5+2070] (Z); 488 02ae A8E41608 R0 = B [P5+2070] (Z);
489 02b2 5154 R1 = R1 & R2; 489 02b2 5154 R1 = R1 & R2;
BFIN GAS /tmp/ccAbtljy.s page 14 BFIN GAS /tmp/ccUgH5eo.s page 14
490 02b4 1054 R0 = R0 & R2; 490 02b4 1054 R0 = R0 & R2;
@ -838,7 +838,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
538 .section .debug_frame,"",@progbits 538 .section .debug_frame,"",@progbits
539 .Lframe0: 539 .Lframe0:
540 0000 0C000000 .4byte .LECIE0-.LSCIE0 540 0000 0C000000 .4byte .LECIE0-.LSCIE0
BFIN GAS /tmp/ccAbtljy.s page 15 BFIN GAS /tmp/ccUgH5eo.s page 15
541 .LSCIE0: 541 .LSCIE0:
@ -898,7 +898,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
595 0051 0C .byte 0xc 595 0051 0C .byte 0xc
596 0052 0F .uleb128 0xf 596 0052 0F .uleb128 0xf
597 0053 08 .uleb128 0x8 597 0053 08 .uleb128 0x8
BFIN GAS /tmp/ccAbtljy.s page 16 BFIN GAS /tmp/ccUgH5eo.s page 16
598 0054 8F .byte 0x8f 598 0054 8F .byte 0x8f
@ -958,7 +958,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
652 009f 01 .uleb128 0x1 652 009f 01 .uleb128 0x1
653 .align 4 653 .align 4
654 .LEFDE10: 654 .LEFDE10:
BFIN GAS /tmp/ccAbtljy.s page 17 BFIN GAS /tmp/ccUgH5eo.s page 17
655 .LSFDE12: 655 .LSFDE12:
@ -1018,7 +1018,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
709 00ec 00000000 .4byte .Lframe0 709 00ec 00000000 .4byte .Lframe0
710 00f0 C0010000 .4byte .LFB11 710 00f0 C0010000 .4byte .LFB11
711 00f4 2C010000 .4byte .LFE11-.LFB11 711 00f4 2C010000 .4byte .LFE11-.LFB11
BFIN GAS /tmp/ccAbtljy.s page 18 BFIN GAS /tmp/ccUgH5eo.s page 18
712 00f8 42 .byte 0x4 712 00f8 42 .byte 0x4
@ -1078,7 +1078,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
766 0035 00000000 .4byte 0x0 766 0035 00000000 .4byte 0x0
767 0039 00000000 .4byte 0x0 767 0039 00000000 .4byte 0x0
768 .LLST2: 768 .LLST2:
BFIN GAS /tmp/ccAbtljy.s page 19 BFIN GAS /tmp/ccUgH5eo.s page 19
769 003d 2C000000 .4byte .LFB3-.Ltext0 769 003d 2C000000 .4byte .LFB3-.Ltext0
@ -1138,7 +1138,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
823 00cd 08 .sleb128 8 823 00cd 08 .sleb128 8
824 00ce 00000000 .4byte 0x0 824 00ce 00000000 .4byte 0x0
825 00d2 00000000 .4byte 0x0 825 00d2 00000000 .4byte 0x0
BFIN GAS /tmp/ccAbtljy.s page 20 BFIN GAS /tmp/ccUgH5eo.s page 20
826 .LLST7: 826 .LLST7:
@ -1198,7 +1198,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
880 0163 1C010000 .4byte .LVL18-.Ltext0 880 0163 1C010000 .4byte .LVL18-.Ltext0
881 0167 1C010000 .4byte .LVL19-.Ltext0 881 0167 1C010000 .4byte .LVL19-.Ltext0
882 016b 0100 .2byte 0x1 882 016b 0100 .2byte 0x1
BFIN GAS /tmp/ccAbtljy.s page 21 BFIN GAS /tmp/ccUgH5eo.s page 21
883 016d 50 .byte 0x50 883 016d 50 .byte 0x50
@ -1258,7 +1258,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
937 01fb 60010000 .4byte .LVL27-.Ltext0 937 01fb 60010000 .4byte .LVL27-.Ltext0
938 01ff 66010000 .4byte .LVL28-.Ltext0 938 01ff 66010000 .4byte .LVL28-.Ltext0
939 0203 0100 .2byte 0x1 939 0203 0100 .2byte 0x1
BFIN GAS /tmp/ccAbtljy.s page 22 BFIN GAS /tmp/ccUgH5eo.s page 22
940 0205 50 .byte 0x50 940 0205 50 .byte 0x50
@ -1318,7 +1318,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
994 .LLST22: 994 .LLST22:
995 0294 DC010000 .4byte .LVL31-.Ltext0 995 0294 DC010000 .4byte .LVL31-.Ltext0
996 0298 DE010000 .4byte .LVL32-.Ltext0 996 0298 DE010000 .4byte .LVL32-.Ltext0
BFIN GAS /tmp/ccAbtljy.s page 23 BFIN GAS /tmp/ccUgH5eo.s page 23
997 029c 0100 .2byte 0x1 997 029c 0100 .2byte 0x1
@ -1378,7 +1378,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1051 0045 03 .uleb128 0x3 1051 0045 03 .uleb128 0x3
1052 0046 39030000 .4byte .LASF4 1052 0046 39030000 .4byte .LASF4
1053 004a 02 .byte 0x2 1053 004a 02 .byte 0x2
BFIN GAS /tmp/ccAbtljy.s page 24 BFIN GAS /tmp/ccUgH5eo.s page 24
1054 004b 36 .byte 0x36 1054 004b 36 .byte 0x36
@ -1431,14 +1431,14 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1101 00a1 06 .uleb128 0x6 1101 00a1 06 .uleb128 0x6
1102 00a2 04 .byte 0x4 1102 00a2 04 .byte 0x4
1103 00a3 03 .byte 0x3 1103 00a3 03 .byte 0x3
1104 00a4 68 .byte 0x68 1104 00a4 69 .byte 0x69
1105 00a5 EF000000 .4byte 0xef 1105 00a5 EF000000 .4byte 0xef
1106 00a9 07 .uleb128 0x7 1106 00a9 07 .uleb128 0x7
1107 00aa 43050000 .4byte .LASF14 1107 00aa 43050000 .4byte .LASF14
1108 00ae 00 .sleb128 0 1108 00ae 00 .sleb128 0
1109 00af 07 .uleb128 0x7 1109 00af 07 .uleb128 0x7
1110 00b0 10050000 .4byte .LASF15 1110 00b0 10050000 .4byte .LASF15
BFIN GAS /tmp/ccAbtljy.s page 25 BFIN GAS /tmp/ccUgH5eo.s page 25
1111 00b4 807C .sleb128 -512 1111 00b4 807C .sleb128 -512
@ -1470,7 +1470,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1137 00ef 06 .uleb128 0x6 1137 00ef 06 .uleb128 0x6
1138 00f0 04 .byte 0x4 1138 00f0 04 .byte 0x4
1139 00f1 03 .byte 0x3 1139 00f1 03 .byte 0x3
1140 00f2 79 .byte 0x79 1140 00f2 7A .byte 0x7a
1141 00f3 0A010000 .4byte 0x10a 1141 00f3 0A010000 .4byte 0x10a
1142 00f7 07 .uleb128 0x7 1142 00f7 07 .uleb128 0x7
1143 00f8 85050000 .4byte .LASF24 1143 00f8 85050000 .4byte .LASF24
@ -1498,7 +1498,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1165 0126 04 .byte 0x4 1165 0126 04 .byte 0x4
1166 0127 04 .byte 0x4 1166 0127 04 .byte 0x4
1167 0128 55 .byte 0x55 1167 0128 55 .byte 0x55
BFIN GAS /tmp/ccAbtljy.s page 26 BFIN GAS /tmp/ccUgH5eo.s page 26
1168 0129 52010000 .4byte 0x152 1168 0129 52010000 .4byte 0x152
@ -1558,7 +1558,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1222 0192 A7010000 .4byte .LASF41 1222 0192 A7010000 .4byte .LASF41
1223 0196 01 .sleb128 1 1223 0196 01 .sleb128 1
1224 0197 07 .uleb128 0x7 1224 0197 07 .uleb128 0x7
BFIN GAS /tmp/ccAbtljy.s page 27 BFIN GAS /tmp/ccUgH5eo.s page 27
1225 0198 C9000000 .4byte .LASF42 1225 0198 C9000000 .4byte .LASF42
@ -1618,7 +1618,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1279 01f9 E0000000 .4byte .LASF50 1279 01f9 E0000000 .4byte .LASF50
1280 01fd 05 .byte 0x5 1280 01fd 05 .byte 0x5
1281 01fe 1A .byte 0x1a 1281 01fe 1A .byte 0x1a
BFIN GAS /tmp/ccAbtljy.s page 28 BFIN GAS /tmp/ccUgH5eo.s page 28
1282 01ff 69000000 .4byte 0x69 1282 01ff 69000000 .4byte 0x69
@ -1678,7 +1678,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1336 0262 09 .uleb128 0x9 1336 0262 09 .uleb128 0x9
1337 0263 18010000 .4byte .LASF56 1337 0263 18010000 .4byte .LASF56
1338 0267 05 .byte 0x5 1338 0267 05 .byte 0x5
BFIN GAS /tmp/ccAbtljy.s page 29 BFIN GAS /tmp/ccUgH5eo.s page 29
1339 0268 24 .byte 0x24 1339 0268 24 .byte 0x24
@ -1738,7 +1738,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1393 02c9 23 .byte 0x23 1393 02c9 23 .byte 0x23
1394 02ca 8010 .uleb128 0x800 1394 02ca 8010 .uleb128 0x800
1395 02cc 09 .uleb128 0x9 1395 02cc 09 .uleb128 0x9
BFIN GAS /tmp/ccAbtljy.s page 30 BFIN GAS /tmp/ccUgH5eo.s page 30
1396 02cd D9020000 .4byte .LASF61 1396 02cd D9020000 .4byte .LASF61
@ -1798,7 +1798,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1450 0333 9710 .uleb128 0x817 1450 0333 9710 .uleb128 0x817
1451 0335 00 .byte 0x0 1451 0335 00 .byte 0x0
1452 0336 0B .uleb128 0xb 1452 0336 0B .uleb128 0xb
BFIN GAS /tmp/ccAbtljy.s page 31 BFIN GAS /tmp/ccUgH5eo.s page 31
1453 0337 9B020000 .4byte 0x29b 1453 0337 9B020000 .4byte 0x29b
@ -1858,7 +1858,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1507 03b7 18010000 .4byte .LASF56 1507 03b7 18010000 .4byte .LASF56
1508 03bb 01 .byte 0x1 1508 03bb 01 .byte 0x1
1509 03bc 49 .byte 0x49 1509 03bc 49 .byte 0x49
BFIN GAS /tmp/ccAbtljy.s page 32 BFIN GAS /tmp/ccUgH5eo.s page 32
1510 03bd 78010000 .4byte 0x178 1510 03bd 78010000 .4byte 0x178
@ -1918,7 +1918,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1564 042c D4000000 .4byte .LFE5 1564 042c D4000000 .4byte .LFE5
1565 0430 B7000000 .4byte .LLST6 1565 0430 B7000000 .4byte .LLST6
1566 0434 48040000 .4byte 0x448 1566 0434 48040000 .4byte 0x448
BFIN GAS /tmp/ccAbtljy.s page 33 BFIN GAS /tmp/ccUgH5eo.s page 33
1567 0438 0F .uleb128 0xf 1567 0438 0F .uleb128 0xf
@ -1978,7 +1978,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1621 04b9 01 .byte 0x1 1621 04b9 01 .byte 0x1
1622 04ba 57000000 .4byte 0x57 1622 04ba 57000000 .4byte 0x57
1623 04be 30010000 .4byte .LFB8 1623 04be 30010000 .4byte .LFB8
BFIN GAS /tmp/ccAbtljy.s page 34 BFIN GAS /tmp/ccUgH5eo.s page 34
1624 04c2 5E010000 .4byte .LFE8 1624 04c2 5E010000 .4byte .LFE8
@ -2038,7 +2038,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1678 0549 BF000000 .4byte .LASF81 1678 0549 BF000000 .4byte .LASF81
1679 054d 01 .byte 0x1 1679 054d 01 .byte 0x1
1680 054e AA .byte 0xaa 1680 054e AA .byte 0xaa
BFIN GAS /tmp/ccAbtljy.s page 35 BFIN GAS /tmp/ccUgH5eo.s page 35
1681 054f 01 .byte 0x1 1681 054f 01 .byte 0x1
@ -2098,7 +2098,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1735 05c9 89000000 .4byte 0x89 1735 05c9 89000000 .4byte 0x89
1736 05cd 00 .byte 0x0 1736 05cd 00 .byte 0x0
1737 .section .debug_abbrev 1737 .section .debug_abbrev
BFIN GAS /tmp/ccAbtljy.s page 36 BFIN GAS /tmp/ccUgH5eo.s page 36
1738 0000 01 .uleb128 0x1 1738 0000 01 .uleb128 0x1
@ -2158,7 +2158,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1792 0036 05 .uleb128 0x5 1792 0036 05 .uleb128 0x5
1793 0037 24 .uleb128 0x24 1793 0037 24 .uleb128 0x24
1794 0038 00 .byte 0x0 1794 0038 00 .byte 0x0
BFIN GAS /tmp/ccAbtljy.s page 37 BFIN GAS /tmp/ccUgH5eo.s page 37
1795 0039 0B .uleb128 0xb 1795 0039 0B .uleb128 0xb
@ -2218,7 +2218,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1849 006f 00 .byte 0x0 1849 006f 00 .byte 0x0
1850 0070 00 .byte 0x0 1850 0070 00 .byte 0x0
1851 0071 0A .uleb128 0xa 1851 0071 0A .uleb128 0xa
BFIN GAS /tmp/ccAbtljy.s page 38 BFIN GAS /tmp/ccUgH5eo.s page 38
1852 0072 0D .uleb128 0xd 1852 0072 0D .uleb128 0xd
@ -2278,7 +2278,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1906 00a8 3B .uleb128 0x3b 1906 00a8 3B .uleb128 0x3b
1907 00a9 0B .uleb128 0xb 1907 00a9 0B .uleb128 0xb
1908 00aa 27 .uleb128 0x27 1908 00aa 27 .uleb128 0x27
BFIN GAS /tmp/ccAbtljy.s page 39 BFIN GAS /tmp/ccUgH5eo.s page 39
1909 00ab 0C .uleb128 0xc 1909 00ab 0C .uleb128 0xc
@ -2338,7 +2338,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
1963 00e1 02 .uleb128 0x2 1963 00e1 02 .uleb128 0x2
1964 00e2 0A .uleb128 0xa 1964 00e2 0A .uleb128 0xa
1965 00e3 00 .byte 0x0 1965 00e3 00 .byte 0x0
BFIN GAS /tmp/ccAbtljy.s page 40 BFIN GAS /tmp/ccUgH5eo.s page 40
1966 00e4 00 .byte 0x0 1966 00e4 00 .byte 0x0
@ -2398,7 +2398,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
2020 011a 00 .byte 0x0 2020 011a 00 .byte 0x0
2021 011b 16 .uleb128 0x16 2021 011b 16 .uleb128 0x16
2022 011c 34 .uleb128 0x34 2022 011c 34 .uleb128 0x34
BFIN GAS /tmp/ccAbtljy.s page 41 BFIN GAS /tmp/ccUgH5eo.s page 41
2023 011d 00 .byte 0x0 2023 011d 00 .byte 0x0
@ -2458,7 +2458,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
2060 65745F61 2060 65745F61
2060 64635F69 2060 64635F69
2060 6E746572 2060 6E746572
BFIN GAS /tmp/ccAbtljy.s page 42 BFIN GAS /tmp/ccUgH5eo.s page 42
2061 0090 75040000 .4byte 0x475 2061 0090 75040000 .4byte 0x475
@ -2518,7 +2518,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
2093 000c 62020000 .4byte .LBE3-.Ltext0 2093 000c 62020000 .4byte .LBE3-.Ltext0
2094 0010 00000000 .4byte 0x0 2094 0010 00000000 .4byte 0x0
2095 0014 00000000 .4byte 0x0 2095 0014 00000000 .4byte 0x0
BFIN GAS /tmp/ccAbtljy.s page 43 BFIN GAS /tmp/ccUgH5eo.s page 43
2096 .section .debug_str,"MS",@progbits,1 2096 .section .debug_str,"MS",@progbits,1
@ -2578,7 +2578,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
2117 .LASF2: 2117 .LASF2:
2118 00a7 73686F72 .string "short int" 2118 00a7 73686F72 .string "short int"
2118 7420696E 2118 7420696E
BFIN GAS /tmp/ccAbtljy.s page 44 BFIN GAS /tmp/ccUgH5eo.s page 44
2118 7400 2118 7400
@ -2638,7 +2638,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
2142 5F42465F 2142 5F42465F
2142 4552525F 2142 4552525F
2142 53545245 2142 53545245
BFIN GAS /tmp/ccAbtljy.s page 45 BFIN GAS /tmp/ccUgH5eo.s page 45
2142 414D5F53 2142 414D5F53
@ -2698,7 +2698,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
2166 54455354 2166 54455354
2166 5F56414C 2166 5F56414C
2167 .LASF7: 2167 .LASF7:
BFIN GAS /tmp/ccAbtljy.s page 46 BFIN GAS /tmp/ccUgH5eo.s page 46
2168 0209 6C6F6E67 .string "long int" 2168 0209 6C6F6E67 .string "long int"
@ -2758,7 +2758,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
2188 02c7 4C353032 .string "L502_ADC_RANGE_02" 2188 02c7 4C353032 .string "L502_ADC_RANGE_02"
2188 5F414443 2188 5F414443
2188 5F52414E 2188 5F52414E
BFIN GAS /tmp/ccAbtljy.s page 47 BFIN GAS /tmp/ccUgH5eo.s page 47
2188 47455F30 2188 47455F30
@ -2818,7 +2818,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
2210 65745F6C 2210 65745F6C
2210 636800 2210 636800
2211 .LASF67: 2211 .LASF67:
BFIN GAS /tmp/ccAbtljy.s page 48 BFIN GAS /tmp/ccUgH5eo.s page 48
2212 0374 73796E63 .string "sync_start_mode" 2212 0374 73796E63 .string "sync_start_mode"
@ -2878,7 +2878,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
2233 .LASF74: 2233 .LASF74:
2234 0433 66726571 .string "freq_code" 2234 0433 66726571 .string "freq_code"
2234 5F636F64 2234 5F636F64
BFIN GAS /tmp/ccAbtljy.s page 49 BFIN GAS /tmp/ccUgH5eo.s page 49
2234 6500 2234 6500
@ -2938,7 +2938,7 @@ BFIN GAS /tmp/ccAbtljy.s page 1
2254 545F434F 2254 545F434F
2255 .LASF68: 2255 .LASF68:
2256 0527 745F7365 .string "t_settings" 2256 0527 745F7365 .string "t_settings"
BFIN GAS /tmp/ccAbtljy.s page 50 BFIN GAS /tmp/ccUgH5eo.s page 50
2256 7474696E 2256 7474696E
@ -2983,22 +2983,22 @@ BFIN GAS /tmp/ccAbtljy.s page 1
2272 5F766572 2272 5F766572
2272 00 2272 00
2273 .ident "GCC: (ADI-2014R1-RC2) 4.3.5" 2273 .ident "GCC: (ADI-2014R1-RC2) 4.3.5"
BFIN GAS /tmp/ccAbtljy.s page 51 BFIN GAS /tmp/ccUgH5eo.s page 51
DEFINED SYMBOLS DEFINED SYMBOLS
*ABS*:0000000000000000 src/l502_params.c *ABS*:0000000000000000 src/l502_params.c
/tmp/ccAbtljy.s:13 .text:0000000000000000 _params_set_lch_cnt /tmp/ccUgH5eo.s:13 .text:0000000000000000 _params_set_lch_cnt
/tmp/ccAbtljy.s:526 .data:0000000000000000 _g_set /tmp/ccUgH5eo.s:526 .data:0000000000000000 _g_set
/tmp/ccAbtljy.s:48 .text:000000000000002c _params_set_lch /tmp/ccUgH5eo.s:48 .text:000000000000002c _params_set_lch
/tmp/ccAbtljy.s:115 .text:000000000000008c _params_set_adc_freq_div /tmp/ccUgH5eo.s:115 .text:000000000000008c _params_set_adc_freq_div
/tmp/ccAbtljy.s:150 .text:00000000000000bc _params_set_ref_freq /tmp/ccUgH5eo.s:150 .text:00000000000000bc _params_set_ref_freq
/tmp/ccAbtljy.s:172 .text:00000000000000d4 _params_set_adc_interframe_delay /tmp/ccUgH5eo.s:172 .text:00000000000000d4 _params_set_adc_interframe_delay
/tmp/ccAbtljy.s:207 .text:0000000000000100 _params_set_sync_mode /tmp/ccUgH5eo.s:207 .text:0000000000000100 _params_set_sync_mode
/tmp/ccAbtljy.s:245 .text:0000000000000130 _params_set_sync_start_mode /tmp/ccUgH5eo.s:245 .text:0000000000000130 _params_set_sync_start_mode
/tmp/ccAbtljy.s:283 .text:0000000000000160 _params_set_din_freq_div /tmp/ccUgH5eo.s:283 .text:0000000000000160 _params_set_din_freq_div
/tmp/ccAbtljy.s:318 .text:0000000000000190 _params_set_dac_freq_div /tmp/ccUgH5eo.s:318 .text:0000000000000190 _params_set_dac_freq_div
/tmp/ccAbtljy.s:352 .text:00000000000001c0 _configure /tmp/ccUgH5eo.s:352 .text:00000000000001c0 _configure
*COM*:0000000000000018 _g_module_info *COM*:0000000000000018 _g_module_info
UNDEFINED SYMBOLS UNDEFINED SYMBOLS

View File

@ -1,4 +1,4 @@
BFIN GAS /tmp/ccAC6MSl.s page 1 BFIN GAS /tmp/ccBCKWZt.s page 1
1 .file "src/l502_sport_tx.c"; 1 .file "src/l502_sport_tx.c";
@ -23,11 +23,11 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1:src/l502_sport_tx.c **** /** @addtogroup sport_tx 1:src/l502_sport_tx.c **** /** @addtogroup sport_tx
2:src/l502_sport_tx.c **** @{ 2:src/l502_sport_tx.c **** @{
3:src/l502_sport_tx.c **** @file l502_sport_tx.c 3:src/l502_sport_tx.c **** @file l502_sport_tx.c
4:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0. 4:src/l502_sport_tx.c **** Файл содержит логику для управления передачей по SPOR
5:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sport_tx_init(), 5:src/l502_sport_tx.c **** Изначально DMA должен быть проинициализирован с помо
6:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sport_tx_start_req(). <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 16 6:src/l502_sport_tx.c **** Передача начинается с помщью sport_tx_start_req(). Можно пост
7:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 7:src/l502_sport_tx.c **** запросов одновременно.
8:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sport_tx_stop(). 8:src/l502_sport_tx.c **** Останвить все текущие передачи можно с помощью sport_tx
9:src/l502_sport_tx.c **** ***********************************************************************/ 9:src/l502_sport_tx.c **** ***********************************************************************/
10:src/l502_sport_tx.c **** 10:src/l502_sport_tx.c ****
11:src/l502_sport_tx.c **** 11:src/l502_sport_tx.c ****
@ -54,11 +54,11 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
32:src/l502_sport_tx.c **** 32:src/l502_sport_tx.c ****
33:src/l502_sport_tx.c **** 33:src/l502_sport_tx.c ****
34:src/l502_sport_tx.c **** 34:src/l502_sport_tx.c ****
35:src/l502_sport_tx.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5 16-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */ 35:src/l502_sport_tx.c **** /* дескриптор DMA размера 5 16-битных слов */
36:src/l502_sport_tx.c **** typedef struct { 36:src/l502_sport_tx.c **** typedef struct {
37:src/l502_sport_tx.c **** uint16_t ndpl; 37:src/l502_sport_tx.c **** uint16_t ndpl;
38:src/l502_sport_tx.c **** uint16_t sal; 38:src/l502_sport_tx.c **** uint16_t sal;
BFIN GAS /tmp/ccAC6MSl.s page 2 BFIN GAS /tmp/ccBCKWZt.s page 2
39:src/l502_sport_tx.c **** uint16_t sah; 39:src/l502_sport_tx.c **** uint16_t sah;
@ -77,9 +77,9 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
52:src/l502_sport_tx.c **** void sport_tx_done(uint32_t* addr, uint32_t size); 52:src/l502_sport_tx.c **** void sport_tx_done(uint32_t* addr, uint32_t size);
53:src/l502_sport_tx.c **** 53:src/l502_sport_tx.c ****
54:src/l502_sport_tx.c **** /***************************************************************************//** 54:src/l502_sport_tx.c **** /***************************************************************************//**
55:src/l502_sport_tx.c **** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 55:src/l502_sport_tx.c **** @brief Чтение флагов статуса вывода
56:src/l502_sport_tx.c **** @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> #t_x502_out_status_flags, 56:src/l502_sport_tx.c **** @return Флаги статуса --- набор битов из #t_x502_out_statu
57:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ȕ. 57:src/l502_sport_tx.c **** объединенных через логическое “ИЛИ”.
58:src/l502_sport_tx.c **** ******************************************************************************/ 58:src/l502_sport_tx.c **** ******************************************************************************/
59:src/l502_sport_tx.c **** uint32_t sport_tx_out_status(void) { 59:src/l502_sport_tx.c **** uint32_t sport_tx_out_status(void) {
16 .loc 1 59 0 16 .loc 1 59 0
@ -118,7 +118,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
65:src/l502_sport_tx.c **** f_tx_was_empty = 0; 65:src/l502_sport_tx.c **** f_tx_was_empty = 0;
41 .loc 1 65 0 41 .loc 1 65 0
42 002a 0060 R0 = 0 (X); 42 002a 0060 R0 = 0 (X);
BFIN GAS /tmp/ccAC6MSl.s page 3 BFIN GAS /tmp/ccBCKWZt.s page 3
64:src/l502_sport_tx.c **** ret |= X502_OUT_STATUS_FLAG_BUF_WAS_EMPTY; 64:src/l502_sport_tx.c **** ret |= X502_OUT_STATUS_FLAG_BUF_WAS_EMPTY;
@ -144,10 +144,10 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
69:src/l502_sport_tx.c **** 69:src/l502_sport_tx.c ****
70:src/l502_sport_tx.c **** 70:src/l502_sport_tx.c ****
71:src/l502_sport_tx.c **** 71:src/l502_sport_tx.c ****
72:src/l502_sport_tx.c **** /** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT. 72:src/l502_sport_tx.c **** /** @brief Начальная инициализация канала DMA на передачу п<>
73:src/l502_sport_tx.c **** 73:src/l502_sport_tx.c ****
74:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 74:src/l502_sport_tx.c **** Функция устанавливает параметры DMA которые не меняю
75:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 75:src/l502_sport_tx.c **** прошивки */
76:src/l502_sport_tx.c **** void sport_tx_init(void) { 76:src/l502_sport_tx.c **** void sport_tx_init(void) {
59 .loc 1 76 0 59 .loc 1 76 0
77:src/l502_sport_tx.c **** int i; 77:src/l502_sport_tx.c **** int i;
@ -178,7 +178,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
80 005e 50E61900 W [P2+50] = R0; 80 005e 50E61900 W [P2+50] = R0;
81 0062 40E10000 R0.H = _f_descrs+70; 81 0062 40E10000 R0.H = _f_descrs+70;
82 0066 00E14A00 R0.L = _f_descrs+70; 82 0066 00E14A00 R0.L = _f_descrs+70;
BFIN GAS /tmp/ccAC6MSl.s page 4 BFIN GAS /tmp/ccBCKWZt.s page 4
83 006a 50E61E00 W [P2+60] = R0; 83 006a 50E61E00 W [P2+60] = R0;
@ -238,7 +238,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
80:src/l502_sport_tx.c **** f_descrs[i].ndpl = i==(SPORT_TX_DESCR_CNT-1) ? (uint32_t)&f_descrs[0]&0xFFFF : 80:src/l502_sport_tx.c **** f_descrs[i].ndpl = i==(SPORT_TX_DESCR_CNT-1) ? (uint32_t)&f_descrs[0]&0xFFFF :
131 .loc 1 80 0 131 .loc 1 80 0
132 0112 50E64B00 W [P2+150] = R0; 132 0112 50E64B00 W [P2+150] = R0;
BFIN GAS /tmp/ccAC6MSl.s page 5 BFIN GAS /tmp/ccBCKWZt.s page 5
133 .loc 1 84 0 133 .loc 1 84 0
@ -288,45 +288,45 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
172 .LFB20: 172 .LFB20:
90:src/l502_sport_tx.c **** 90:src/l502_sport_tx.c ****
91:src/l502_sport_tx.c **** 91:src/l502_sport_tx.c ****
92:src/l502_sport_tx.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> DMA <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> SPORT0 <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 92:src/l502_sport_tx.c **** /* Функция разрешает канал DMA для передачи данных в SPORT0
93:src/l502_sport_tx.c **** * <EFBFBD><EFBFBD><EFBFBD> SPORT 0 */ 93:src/l502_sport_tx.c **** * для SPORT 0 */
94:src/l502_sport_tx.c **** static void f_sport_tx_start(void) { 94:src/l502_sport_tx.c **** static void f_sport_tx_start(void) {
95:src/l502_sport_tx.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT'<EFBFBD> */ 95:src/l502_sport_tx.c **** /* разрешаем передачу по SPORT'у */
96:src/l502_sport_tx.c **** *pSPORT0_TCR1 |= TSPEN; 96:src/l502_sport_tx.c **** *pSPORT0_TCR1 |= TSPEN;
97:src/l502_sport_tx.c **** f_first = 0; 97:src/l502_sport_tx.c **** f_first = 0;
98:src/l502_sport_tx.c **** f_tx_was_empty = 0; 98:src/l502_sport_tx.c **** f_tx_was_empty = 0;
99:src/l502_sport_tx.c **** } 99:src/l502_sport_tx.c **** }
100:src/l502_sport_tx.c **** 100:src/l502_sport_tx.c ****
101:src/l502_sport_tx.c **** 101:src/l502_sport_tx.c ****
BFIN GAS /tmp/ccAC6MSl.s page 6 BFIN GAS /tmp/ccBCKWZt.s page 6
102:src/l502_sport_tx.c **** /** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0. 102:src/l502_sport_tx.c **** /** @brief Останов сбора по SPORT0.
103:src/l502_sport_tx.c **** * 103:src/l502_sport_tx.c **** *
104:src/l502_sport_tx.c **** * <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> DMA <20><> <20><><EFBFBD><EFBFBD> */ 104:src/l502_sport_tx.c **** * Функция запрещает прием по SPORT0 и соответствующий ка
105:src/l502_sport_tx.c **** void sport_tx_stop(void) { 105:src/l502_sport_tx.c **** void sport_tx_stop(void) {
106:src/l502_sport_tx.c **** *pSIC_IMASK0 &= ~IRQ_DMA4; 106:src/l502_sport_tx.c **** *pSIC_IMASK0 &= ~IRQ_DMA4;
107:src/l502_sport_tx.c **** 107:src/l502_sport_tx.c ****
108:src/l502_sport_tx.c **** *pDMA4_CONFIG = 0; 108:src/l502_sport_tx.c **** *pDMA4_CONFIG = 0;
109:src/l502_sport_tx.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 3-<2D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> DMA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 109:src/l502_sport_tx.c **** /* нужно подождать до 3-х циклов, чтобы DMA действитель<D0BB>
110:src/l502_sport_tx.c **** ssync(); 110:src/l502_sport_tx.c **** ssync();
111:src/l502_sport_tx.c **** ssync(); 111:src/l502_sport_tx.c **** ssync();
112:src/l502_sport_tx.c **** ssync(); 112:src/l502_sport_tx.c **** ssync();
113:src/l502_sport_tx.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT */ 113:src/l502_sport_tx.c **** /* запрет передачи по SPORT */
114:src/l502_sport_tx.c **** *pSPORT0_TCR1 &= ~TSPEN; 114:src/l502_sport_tx.c **** *pSPORT0_TCR1 &= ~TSPEN;
115:src/l502_sport_tx.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> DMA */ 115:src/l502_sport_tx.c **** /* сбрасываем признаки прерываний от DMA */
116:src/l502_sport_tx.c **** *pDMA4_IRQ_STATUS = DMA_DONE | DMA_ERR; 116:src/l502_sport_tx.c **** *pDMA4_IRQ_STATUS = DMA_DONE | DMA_ERR;
117:src/l502_sport_tx.c **** 117:src/l502_sport_tx.c ****
118:src/l502_sport_tx.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 118:src/l502_sport_tx.c **** /* заново инициализируем все дескрипторы */
119:src/l502_sport_tx.c **** sport_tx_init(); 119:src/l502_sport_tx.c **** sport_tx_init();
120:src/l502_sport_tx.c **** } 120:src/l502_sport_tx.c **** }
121:src/l502_sport_tx.c **** 121:src/l502_sport_tx.c ****
122:src/l502_sport_tx.c **** /**************************************************************************//** 122:src/l502_sport_tx.c **** /**************************************************************************//**
123:src/l502_sport_tx.c **** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 123:src/l502_sport_tx.c **** @brief Получить количество свободных дескрипторов на <EFBFBD>
124:src/l502_sport_tx.c **** 124:src/l502_sport_tx.c ****
125:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 125:src/l502_sport_tx.c **** Функция возвращает количество запросов, которое мо<EFBFBD>
126:src/l502_sport_tx.c **** <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sport_tx_start_req(). 126:src/l502_sport_tx.c **** на передачу с помощью sport_tx_start_req().
127:src/l502_sport_tx.c **** @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 127:src/l502_sport_tx.c **** @return Количество запросов на передачу, которое можно
128:src/l502_sport_tx.c **** ******************************************************************************/ 128:src/l502_sport_tx.c **** ******************************************************************************/
129:src/l502_sport_tx.c **** int sport_tx_req_rdy(void) { 129:src/l502_sport_tx.c **** int sport_tx_req_rdy(void) {
173 .loc 1 129 0 173 .loc 1 129 0
@ -358,38 +358,38 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
196 _isr_sport_dma_tx: 196 _isr_sport_dma_tx:
197 .LFB22: 197 .LFB22:
132:src/l502_sport_tx.c **** 132:src/l502_sport_tx.c ****
BFIN GAS /tmp/ccAC6MSl.s page 7 BFIN GAS /tmp/ccBCKWZt.s page 7
133:src/l502_sport_tx.c **** 133:src/l502_sport_tx.c ****
134:src/l502_sport_tx.c **** /**************************************************************************//** 134:src/l502_sport_tx.c **** /**************************************************************************//**
135:src/l502_sport_tx.c **** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 135:src/l502_sport_tx.c **** @brief Поставить запрос на передачу по SPORT0
136:src/l502_sport_tx.c **** 136:src/l502_sport_tx.c ****
137:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 137:src/l502_sport_tx.c **** Функция ставит запрос на передачу указанных данных.
138:src/l502_sport_tx.c **** <EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! 138:src/l502_sport_tx.c **** т.е. буфер нельзя будет использовать до того, как дан
139:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD> 139:src/l502_sport_tx.c **** Для постановки запроса необходимо, чтобы был свобод
140:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> sport_tx_req_rdy()). 140:src/l502_sport_tx.c **** узнать через sport_tx_req_rdy()).
141:src/l502_sport_tx.c **** 141:src/l502_sport_tx.c ****
142:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #SPORT_TX_REQ_SIZE_MAX 142:src/l502_sport_tx.c **** Количество слов в запросе не должно превышать #SPORT_TX_
143:src/l502_sport_tx.c **** 143:src/l502_sport_tx.c ****
144:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 144:src/l502_sport_tx.c **** При добавление первого дескриптора автомтически ра
145:src/l502_sport_tx.c **** DMA <EFBFBD> SPORT0. 145:src/l502_sport_tx.c **** DMA и SPORT0.
146:src/l502_sport_tx.c **** 146:src/l502_sport_tx.c ****
147:src/l502_sport_tx.c **** @param[in] buf <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 147:src/l502_sport_tx.c **** @param[in] buf Указатель на массив на передачу.
148:src/l502_sport_tx.c **** @param[in] size <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 148:src/l502_sport_tx.c **** @param[in] size Количество 32-битных слов на передачу
149:src/l502_sport_tx.c **** *******************************************************************************/ 149:src/l502_sport_tx.c **** *******************************************************************************/
150:src/l502_sport_tx.c **** void sport_tx_start_req(uint32_t* buf, uint32_t size) { 150:src/l502_sport_tx.c **** void sport_tx_start_req(uint32_t* buf, uint32_t size) {
151:src/l502_sport_tx.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> DMA <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 151:src/l502_sport_tx.c **** /* запрещаем прерывание от DMA на случай гонок с измен<D0B5>
152:src/l502_sport_tx.c **** *pSIC_IMASK0 &= ~IRQ_DMA4; 152:src/l502_sport_tx.c **** *pSIC_IMASK0 &= ~IRQ_DMA4;
153:src/l502_sport_tx.c **** 153:src/l502_sport_tx.c ****
154:src/l502_sport_tx.c **** f_descrs[f_put_descr].sal = (uint32_t)buf & 0xFFFF; 154:src/l502_sport_tx.c **** f_descrs[f_put_descr].sal = (uint32_t)buf & 0xFFFF;
155:src/l502_sport_tx.c **** f_descrs[f_put_descr].sah = ((uint32_t)buf >> 16) & 0xFFFF; 155:src/l502_sport_tx.c **** f_descrs[f_put_descr].sah = ((uint32_t)buf >> 16) & 0xFFFF;
156:src/l502_sport_tx.c **** f_descrs[f_put_descr].xcnt = size*2; 156:src/l502_sport_tx.c **** f_descrs[f_put_descr].xcnt = size*2;
157:src/l502_sport_tx.c **** f_descrs[f_put_descr].cfg = SPORT_TX_DMA_CFG_WAIT; 157:src/l502_sport_tx.c **** f_descrs[f_put_descr].cfg = SPORT_TX_DMA_CFG_WAIT;
158:src/l502_sport_tx.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA */ 158:src/l502_sport_tx.c **** /* убеждаемся, что данные будут уже записаны в память
159:src/l502_sport_tx.c **** ssync(); 159:src/l502_sport_tx.c **** ssync();
160:src/l502_sport_tx.c **** 160:src/l502_sport_tx.c ****
161:src/l502_sport_tx.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> => <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ 161:src/l502_sport_tx.c **** /* если DMA сейчас остановлен => запускаем его */
162:src/l502_sport_tx.c **** if (f_put_cnt==f_done_cnt) { 162:src/l502_sport_tx.c **** if (f_put_cnt==f_done_cnt) {
163:src/l502_sport_tx.c **** uint32_t cfg_wrd = SPORT_TX_DMA_CFG_START; 163:src/l502_sport_tx.c **** uint32_t cfg_wrd = SPORT_TX_DMA_CFG_START;
164:src/l502_sport_tx.c **** *pDMA4_CONFIG = cfg_wrd; 164:src/l502_sport_tx.c **** *pDMA4_CONFIG = cfg_wrd;
@ -410,15 +410,15 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
179:src/l502_sport_tx.c **** } 179:src/l502_sport_tx.c **** }
180:src/l502_sport_tx.c **** 180:src/l502_sport_tx.c ****
181:src/l502_sport_tx.c **** 181:src/l502_sport_tx.c ****
182:src/l502_sport_tx.c **** /** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 182:src/l502_sport_tx.c **** /** @brief Обработчик прерывания по SPORT0 на завершение пере
183:src/l502_sport_tx.c **** 183:src/l502_sport_tx.c ****
184:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 184:src/l502_sport_tx.c **** Прерывание возникает, когда был передан блок данных
185:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 185:src/l502_sport_tx.c **** одному дескриптору.
186:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sport_tx_done(). 186:src/l502_sport_tx.c **** Функция рассчитывает количество переданных данных
187:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 187:src/l502_sport_tx.c **** Также функция помечает дескриптор как свободный и п
188:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA (<28><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 188:src/l502_sport_tx.c **** снова запускает DMA (если он был остановлен, но при эт<EFBFBD>
189:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */ 189:src/l502_sport_tx.c **** дескриптор на передачу) */
BFIN GAS /tmp/ccAC6MSl.s page 8 BFIN GAS /tmp/ccBCKWZt.s page 8
190:src/l502_sport_tx.c **** ISR( isr_sport_dma_tx) { 190:src/l502_sport_tx.c **** ISR( isr_sport_dma_tx) {
@ -478,7 +478,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
250 .loc 1 191 0 250 .loc 1 191 0
251 01c0 4AE1C0FF P2.H = 65472; 251 01c0 4AE1C0FF P2.H = 65472;
190:src/l502_sport_tx.c **** ISR( isr_sport_dma_tx) { 190:src/l502_sport_tx.c **** ISR( isr_sport_dma_tx) {
BFIN GAS /tmp/ccAC6MSl.s page 9 BFIN GAS /tmp/ccBCKWZt.s page 9
252 .loc 1 190 0 252 .loc 1 190 0
@ -505,8 +505,8 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
267 .loc 1 196 0 267 .loc 1 196 0
268 01d8 0860 R0 = 1 (X); 268 01d8 0860 R0 = 1 (X);
197:src/l502_sport_tx.c **** 197:src/l502_sport_tx.c ****
198:src/l502_sport_tx.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 198:src/l502_sport_tx.c **** /* обработку выполняем только в случае, если есть н
199:src/l502_sport_tx.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 199:src/l502_sport_tx.c **** дескрипторы */
200:src/l502_sport_tx.c **** if (f_done_cnt != f_put_cnt) { 200:src/l502_sport_tx.c **** if (f_done_cnt != f_put_cnt) {
269 .loc 1 200 0 269 .loc 1 200 0
270 01da 4CE10000 P4.H = _f_done_cnt; 270 01da 4CE10000 P4.H = _f_done_cnt;
@ -538,7 +538,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
291 0208 1032 P2 = R0; 291 0208 1032 P2 = R0;
292 020a 09E10400 P1.L = _f_descrs; 292 020a 09E10400 P1.L = _f_descrs;
293 020e 20E1A500 R0 = 165 (X); 293 020e 20E1A500 R0 = 165 (X);
BFIN GAS /tmp/ccAC6MSl.s page 10 BFIN GAS /tmp/ccBCKWZt.s page 10
294 0212 925E P2 = P2 + (P2 << 2); 294 0212 925E P2 = P2 + (P2 << 2);
@ -598,7 +598,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
9:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma diag(push) 9:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma diag(push)
10:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma diag(suppress:misra_rule_2_4) 10:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma diag(suppress:misra_rule_2_4)
11:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma diag(suppress:misra_rule_5_3) 11:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma diag(suppress:misra_rule_5_3)
BFIN GAS /tmp/ccAC6MSl.s page 11 BFIN GAS /tmp/ccBCKWZt.s page 11
12:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma diag(suppress:misra_rule_6_3) 12:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma diag(suppress:misra_rule_6_3)
@ -658,7 +658,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
66:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** 66:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h ****
67:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #if (!defined(__DEFINED_CLI) && \ 67:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #if (!defined(__DEFINED_CLI) && \
68:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** ((defined(__SPECIFIC_NAMES) && defined(__ENABLE_CLI)) || \ 68:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** ((defined(__SPECIFIC_NAMES) && defined(__ENABLE_CLI)) || \
BFIN GAS /tmp/ccAC6MSl.s page 12 BFIN GAS /tmp/ccBCKWZt.s page 12
69:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** (!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_CLI)))) 69:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** (!defined(__SPECIFIC_NAMES) && !defined(__DISABLE_CLI))))
@ -718,7 +718,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
123:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** 123:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h ****
124:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #define __DEFINED_EXCPT 124:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #define __DEFINED_EXCPT
125:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** 125:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h ****
BFIN GAS /tmp/ccAC6MSl.s page 13 BFIN GAS /tmp/ccBCKWZt.s page 13
126:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #define excpt(A) (__builtin_excpt((A))) 126:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #define excpt(A) (__builtin_excpt((A)))
@ -778,7 +778,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
180:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma always_inline 180:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma always_inline
181:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** static void * flushinvmodup(void * __a) { 181:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** static void * flushinvmodup(void * __a) {
182:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** void * __rval = __builtin_flushinvmodup(__a); 182:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** void * __rval = __builtin_flushinvmodup(__a);
BFIN GAS /tmp/ccAC6MSl.s page 14 BFIN GAS /tmp/ccBCKWZt.s page 14
183:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** return __rval; 183:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** return __rval;
@ -838,7 +838,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
237:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma inline 237:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma inline
238:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma always_inline 238:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** #pragma always_inline
239:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** static void * iflushmodup(void * __a) { 239:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** static void * iflushmodup(void * __a) {
BFIN GAS /tmp/ccAC6MSl.s page 15 BFIN GAS /tmp/ccBCKWZt.s page 15
240:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** void * __rval = __builtin_iflushmodup(__a); 240:/home/feda/MIPT/RadioPhotonic_Subserface_radar/BlackFin/toolchain_off/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/builtins.h **** void * __rval = __builtin_iflushmodup(__a);
@ -892,13 +892,13 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
335 024e 4AE1C0FF P2.H = 65472; 335 024e 4AE1C0FF P2.H = 65472;
336 0252 0AE1280D P2.L = 3368; 336 0252 0AE1280D P2.L = 3368;
337 0256 1295 R2 = W [P2] (Z); 337 0256 1295 R2 = W [P2] (Z);
218:src/l502_sport_tx.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> => <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ 218:src/l502_sport_tx.c **** /* если DMA остановлен, а дескрипторы на передачу <20>
219:src/l502_sport_tx.c **** if ((f_done_cnt != f_put_cnt) && !(status & DMA_RUN)) { 219:src/l502_sport_tx.c **** if ((f_done_cnt != f_put_cnt) && !(status & DMA_RUN)) {
338 .loc 1 219 0 338 .loc 1 219 0
339 0258 2191 R1 = [P4]; 339 0258 2191 R1 = [P4];
340 025a 1891 R0 = [P3]; 340 025a 1891 R0 = [P3];
341 025c 0108 cc =R1==R0; 341 025c 0108 cc =R1==R0;
BFIN GAS /tmp/ccAC6MSl.s page 16 BFIN GAS /tmp/ccBCKWZt.s page 16
342 025e 0318 if cc jump .L13; 342 025e 0318 if cc jump .L13;
@ -958,7 +958,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
379 02a2 1401 M0 = [SP++]; 379 02a2 1401 M0 = [SP++];
380 02a4 1F01 L3 = [SP++]; 380 02a4 1F01 L3 = [SP++];
381 02a6 1E01 L2 = [SP++]; 381 02a6 1E01 L2 = [SP++];
BFIN GAS /tmp/ccAC6MSl.s page 17 BFIN GAS /tmp/ccBCKWZt.s page 17
382 02a8 1D01 L1 = [SP++]; 382 02a8 1D01 L1 = [SP++];
@ -1018,7 +1018,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
432 02f6 BB2F jump.s .L14; 432 02f6 BB2F jump.s .L14;
433 .LBE23: 433 .LBE23:
434 .LBE22: 434 .LBE22:
BFIN GAS /tmp/ccAC6MSl.s page 18 BFIN GAS /tmp/ccBCKWZt.s page 18
435 .LBE24: 435 .LBE24:
@ -1078,7 +1078,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
478 .loc 1 157 0 478 .loc 1 157 0
479 032c 20E1A500 R0 = 165 (X); 479 032c 20E1A500 R0 = 165 (X);
156:src/l502_sport_tx.c **** f_descrs[f_put_descr].xcnt = size*2; 156:src/l502_sport_tx.c **** f_descrs[f_put_descr].xcnt = size*2;
BFIN GAS /tmp/ccAC6MSl.s page 19 BFIN GAS /tmp/ccBCKWZt.s page 19
480 .loc 1 156 0 480 .loc 1 156 0
@ -1138,7 +1138,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
175:src/l502_sport_tx.c **** f_put_descr=0; 175:src/l502_sport_tx.c **** f_put_descr=0;
528 .loc 1 175 0 528 .loc 1 175 0
529 0378 4AE10000 P2.H = _f_put_descr; 529 0378 4AE10000 P2.H = _f_put_descr;
BFIN GAS /tmp/ccAC6MSl.s page 20 BFIN GAS /tmp/ccBCKWZt.s page 20
530 037c 0060 R0 = 0 (X); 530 037c 0060 R0 = 0 (X);
@ -1198,7 +1198,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
575 .LBB30: 575 .LBB30:
576 .LBB31: 576 .LBB31:
96:src/l502_sport_tx.c **** *pSPORT0_TCR1 |= TSPEN; 96:src/l502_sport_tx.c **** *pSPORT0_TCR1 |= TSPEN;
BFIN GAS /tmp/ccAC6MSl.s page 21 BFIN GAS /tmp/ccBCKWZt.s page 21
577 .loc 1 96 0 577 .loc 1 96 0
@ -1258,7 +1258,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
621 .LBB41: 621 .LBB41:
622 .loc 2 277 0 622 .loc 2 277 0
623 0402 2400 ssync; 623 0402 2400 ssync;
BFIN GAS /tmp/ccAC6MSl.s page 22 BFIN GAS /tmp/ccBCKWZt.s page 22
624 .LBE41: 624 .LBE41:
@ -1318,7 +1318,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
674 0468 50E62800 W [P2+80] = R0; 674 0468 50E62800 W [P2+80] = R0;
675 046c 40E10000 R0.H = _f_descrs+100; 675 046c 40E10000 R0.H = _f_descrs+100;
676 0470 00E16800 R0.L = _f_descrs+100; 676 0470 00E16800 R0.L = _f_descrs+100;
BFIN GAS /tmp/ccAC6MSl.s page 23 BFIN GAS /tmp/ccBCKWZt.s page 23
677 0474 50E62D00 W [P2+90] = R0; 677 0474 50E62D00 W [P2+90] = R0;
@ -1378,7 +1378,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
85:src/l502_sport_tx.c **** *pDMA4_X_MODIFY = 2; 85:src/l502_sport_tx.c **** *pDMA4_X_MODIFY = 2;
723 .loc 1 85 0 723 .loc 1 85 0
724 0502 4AE1C0FF P2.H = 65472; 724 0502 4AE1C0FF P2.H = 65472;
BFIN GAS /tmp/ccAC6MSl.s page 24 BFIN GAS /tmp/ccBCKWZt.s page 24
725 0506 1060 R0 = 2 (X); 725 0506 1060 R0 = 2 (X);
@ -1438,7 +1438,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
775 0004 FFFFFFFF .4byte 0xffffffff 775 0004 FFFFFFFF .4byte 0xffffffff
776 0008 01 .byte 0x1 776 0008 01 .byte 0x1
777 0009 00 .string "" 777 0009 00 .string ""
BFIN GAS /tmp/ccAC6MSl.s page 25 BFIN GAS /tmp/ccBCKWZt.s page 25
778 000a 01 .uleb128 0x1 778 000a 01 .uleb128 0x1
@ -1498,7 +1498,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
832 0055 02 .uleb128 0x2 832 0055 02 .uleb128 0x2
833 0056 A3 .byte 0xa3 833 0056 A3 .byte 0xa3
834 0057 01 .uleb128 0x1 834 0057 01 .uleb128 0x1
BFIN GAS /tmp/ccAC6MSl.s page 26 BFIN GAS /tmp/ccBCKWZt.s page 26
835 .align 4 835 .align 4
@ -1558,7 +1558,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
889 008a 0E .byte 0xe 889 008a 0E .byte 0xe
890 008b 64 .uleb128 0x64 890 008b 64 .uleb128 0x64
891 008c 42 .byte 0x4 891 008c 42 .byte 0x4
BFIN GAS /tmp/ccAC6MSl.s page 27 BFIN GAS /tmp/ccBCKWZt.s page 27
892 .4byte .LCFI15-.LCFI14 892 .4byte .LCFI15-.LCFI14
@ -1618,7 +1618,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
946 00bd 25 .uleb128 0x25 946 00bd 25 .uleb128 0x25
947 00be 9E .byte 0x9e 947 00be 9E .byte 0x9e
948 00bf 24 .uleb128 0x24 948 00bf 24 .uleb128 0x24
BFIN GAS /tmp/ccAC6MSl.s page 28 BFIN GAS /tmp/ccBCKWZt.s page 28
949 00c0 9D .byte 0x9d 949 00c0 9D .byte 0x9d
@ -1678,7 +1678,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1003 00f6 80 .byte 0x80 1003 00f6 80 .byte 0x80
1004 00f7 08 .uleb128 0x8 1004 00f7 08 .uleb128 0x8
1005 00f8 B1 .byte 0xb1 1005 00f8 B1 .byte 0xb1
BFIN GAS /tmp/ccAC6MSl.s page 29 BFIN GAS /tmp/ccBCKWZt.s page 29
1006 00f9 07 .uleb128 0x7 1006 00f9 07 .uleb128 0x7
@ -1738,7 +1738,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1060 0136 04 .uleb128 0x4 1060 0136 04 .uleb128 0x4
1061 0137 8D .byte 0x8d 1061 0137 8D .byte 0x8d
1062 0138 03 .uleb128 0x3 1062 0138 03 .uleb128 0x3
BFIN GAS /tmp/ccAC6MSl.s page 30 BFIN GAS /tmp/ccBCKWZt.s page 30
1063 0139 8C .byte 0x8c 1063 0139 8C .byte 0x8c
@ -1798,7 +1798,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1117 0046 0100 .2byte 0x1 1117 0046 0100 .2byte 0x1
1118 0048 5E .byte 0x5e 1118 0048 5E .byte 0x5e
1119 0049 70010000 .4byte .LCFI2-.Ltext0 1119 0049 70010000 .4byte .LCFI2-.Ltext0
BFIN GAS /tmp/ccAC6MSl.s page 31 BFIN GAS /tmp/ccBCKWZt.s page 31
1120 004d 8C010000 .4byte .LFE20-.Ltext0 1120 004d 8C010000 .4byte .LFE20-.Ltext0
@ -1858,7 +1858,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1174 00d3 7E .byte 0x7e 1174 00d3 7E .byte 0x7e
1175 00d4 D800 .sleb128 88 1175 00d4 D800 .sleb128 88
1176 00d6 A0010000 .4byte .LCFI12-.Ltext0 1176 00d6 A0010000 .4byte .LCFI12-.Ltext0
BFIN GAS /tmp/ccAC6MSl.s page 32 BFIN GAS /tmp/ccBCKWZt.s page 32
1177 00da A2010000 .4byte .LCFI13-.Ltext0 1177 00da A2010000 .4byte .LCFI13-.Ltext0
@ -1918,7 +1918,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1231 0165 B6010000 .4byte .LCFI23-.Ltext0 1231 0165 B6010000 .4byte .LCFI23-.Ltext0
1232 0169 B8010000 .4byte .LCFI24-.Ltext0 1232 0169 B8010000 .4byte .LCFI24-.Ltext0
1233 016d 0300 .2byte 0x3 1233 016d 0300 .2byte 0x3
BFIN GAS /tmp/ccAC6MSl.s page 33 BFIN GAS /tmp/ccBCKWZt.s page 33
1234 016f 7E .byte 0x7e 1234 016f 7E .byte 0x7e
@ -1978,7 +1978,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1288 01fd 7E .byte 0x7e 1288 01fd 7E .byte 0x7e
1289 01fe 0C .sleb128 12 1289 01fe 0C .sleb128 12
1290 01ff 02030000 .4byte .LCFI33-.Ltext0 1290 01ff 02030000 .4byte .LCFI33-.Ltext0
BFIN GAS /tmp/ccAC6MSl.s page 34 BFIN GAS /tmp/ccBCKWZt.s page 34
1291 0203 E4030000 .4byte .LFE21-.Ltext0 1291 0203 E4030000 .4byte .LFE21-.Ltext0
@ -2038,7 +2038,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1345 0031 03 .byte 0x3 1345 0031 03 .byte 0x3
1346 0032 2A .byte 0x2a 1346 0032 2A .byte 0x2a
1347 0033 37000000 .4byte 0x37 1347 0033 37000000 .4byte 0x37
BFIN GAS /tmp/ccAC6MSl.s page 35 BFIN GAS /tmp/ccBCKWZt.s page 35
1348 0037 02 .uleb128 0x2 1348 0037 02 .uleb128 0x2
@ -2098,7 +2098,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1402 0097 04 .byte 0x4 1402 0097 04 .byte 0x4
1403 0098 04 .byte 0x4 1403 0098 04 .byte 0x4
1404 0099 37 .byte 0x37 1404 0099 37 .byte 0x37
BFIN GAS /tmp/ccAC6MSl.s page 36 BFIN GAS /tmp/ccBCKWZt.s page 36
1405 009a AB000000 .4byte 0xab 1405 009a AB000000 .4byte 0xab
@ -2158,7 +2158,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1459 0100 02 .uleb128 0x2 1459 0100 02 .uleb128 0x2
1460 0101 0A .uleb128 0xa 1460 0101 0A .uleb128 0xa
1461 0102 73616800 .string "sah" 1461 0102 73616800 .string "sah"
BFIN GAS /tmp/ccAC6MSl.s page 37 BFIN GAS /tmp/ccBCKWZt.s page 37
1462 0106 01 .byte 0x1 1462 0106 01 .byte 0x1
@ -2218,7 +2218,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1516 016d 3C .byte 0x3c 1516 016d 3C .byte 0x3c
1517 016e 5E000000 .4byte 0x5e 1517 016e 5E000000 .4byte 0x5e
1518 0172 01 .byte 0x1 1518 0172 01 .byte 0x1
BFIN GAS /tmp/ccAC6MSl.s page 38 BFIN GAS /tmp/ccBCKWZt.s page 38
1519 0173 51 .byte 0x51 1519 0173 51 .byte 0x51
@ -2278,7 +2278,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1573 01ef 01 .byte 0x1 1573 01ef 01 .byte 0x1
1574 01f0 C1 .byte 0xc1 1574 01f0 C1 .byte 0xc1
1575 01f1 5E000000 .4byte 0x5e 1575 01f1 5E000000 .4byte 0x5e
BFIN GAS /tmp/ccAC6MSl.s page 39 BFIN GAS /tmp/ccBCKWZt.s page 39
1576 01f5 D5010000 .4byte .LLST4 1576 01f5 D5010000 .4byte .LLST4
@ -2338,7 +2338,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1630 0279 16 .uleb128 0x16 1630 0279 16 .uleb128 0x16
1631 027a 95000000 .4byte .LASF31 1631 027a 95000000 .4byte .LASF31
1632 027e 01 .byte 0x1 1632 027e 01 .byte 0x1
BFIN GAS /tmp/ccAC6MSl.s page 40 BFIN GAS /tmp/ccBCKWZt.s page 40
1633 027f AA .byte 0xaa 1633 027f AA .byte 0xaa
@ -2398,7 +2398,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1687 0300 22040000 .4byte .LBB47 1687 0300 22040000 .4byte .LBB47
1688 0304 48050000 .4byte .LBE47 1688 0304 48050000 .4byte .LBE47
1689 0308 12 .uleb128 0x12 1689 0308 12 .uleb128 0x12
BFIN GAS /tmp/ccAC6MSl.s page 41 BFIN GAS /tmp/ccBCKWZt.s page 41
1690 0309 83010000 .4byte 0x183 1690 0309 83010000 .4byte 0x183
@ -2458,7 +2458,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1744 037b 88010000 .4byte .LASF39 1744 037b 88010000 .4byte .LASF39
1745 037f 01 .byte 0x1 1745 037f 01 .byte 0x1
1746 0380 30 .byte 0x30 1746 0380 30 .byte 0x30
BFIN GAS /tmp/ccAC6MSl.s page 42 BFIN GAS /tmp/ccBCKWZt.s page 42
1747 0381 7E000000 .4byte 0x7e 1747 0381 7E000000 .4byte 0x7e
@ -2518,7 +2518,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1801 0021 03 .uleb128 0x3 1801 0021 03 .uleb128 0x3
1802 0022 0E .uleb128 0xe 1802 0022 0E .uleb128 0xe
1803 0023 3A .uleb128 0x3a 1803 0023 3A .uleb128 0x3a
BFIN GAS /tmp/ccAC6MSl.s page 43 BFIN GAS /tmp/ccBCKWZt.s page 43
1804 0024 0B .uleb128 0xb 1804 0024 0B .uleb128 0xb
@ -2578,7 +2578,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1858 005a 3A .uleb128 0x3a 1858 005a 3A .uleb128 0x3a
1859 005b 0B .uleb128 0xb 1859 005b 0B .uleb128 0xb
1860 005c 3B .uleb128 0x3b 1860 005c 3B .uleb128 0x3b
BFIN GAS /tmp/ccAC6MSl.s page 44 BFIN GAS /tmp/ccBCKWZt.s page 44
1861 005d 0B .uleb128 0xb 1861 005d 0B .uleb128 0xb
@ -2638,7 +2638,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1915 0093 0E .uleb128 0xe 1915 0093 0E .uleb128 0xe
1916 0094 3A .uleb128 0x3a 1916 0094 3A .uleb128 0x3a
1917 0095 0B .uleb128 0xb 1917 0095 0B .uleb128 0xb
BFIN GAS /tmp/ccAC6MSl.s page 45 BFIN GAS /tmp/ccBCKWZt.s page 45
1918 0096 3B .uleb128 0x3b 1918 0096 3B .uleb128 0x3b
@ -2698,7 +2698,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
1972 00cc 0E .uleb128 0xe 1972 00cc 0E .uleb128 0xe
1973 00cd 3A .uleb128 0x3a 1973 00cd 3A .uleb128 0x3a
1974 00ce 0B .uleb128 0xb 1974 00ce 0B .uleb128 0xb
BFIN GAS /tmp/ccAC6MSl.s page 46 BFIN GAS /tmp/ccBCKWZt.s page 46
1975 00cf 3B .uleb128 0x3b 1975 00cf 3B .uleb128 0x3b
@ -2758,7 +2758,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
2029 0105 3B .uleb128 0x3b 2029 0105 3B .uleb128 0x3b
2030 0106 0B .uleb128 0xb 2030 0106 0B .uleb128 0xb
2031 0107 27 .uleb128 0x27 2031 0107 27 .uleb128 0x27
BFIN GAS /tmp/ccAC6MSl.s page 47 BFIN GAS /tmp/ccBCKWZt.s page 47
2032 0108 0C .uleb128 0xc 2032 0108 0C .uleb128 0xc
@ -2818,7 +2818,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
2086 013e 17 .uleb128 0x17 2086 013e 17 .uleb128 0x17
2087 013f 34 .uleb128 0x34 2087 013f 34 .uleb128 0x34
2088 0140 00 .byte 0x0 2088 0140 00 .byte 0x0
BFIN GAS /tmp/ccAC6MSl.s page 48 BFIN GAS /tmp/ccBCKWZt.s page 48
2089 0141 03 .uleb128 0x3 2089 0141 03 .uleb128 0x3
@ -2878,7 +2878,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
2143 0177 03 .uleb128 0x3 2143 0177 03 .uleb128 0x3
2144 0178 0E .uleb128 0xe 2144 0178 0E .uleb128 0xe
2145 0179 3A .uleb128 0x3a 2145 0179 3A .uleb128 0x3a
BFIN GAS /tmp/ccAC6MSl.s page 49 BFIN GAS /tmp/ccBCKWZt.s page 49
2146 017a 0B .uleb128 0xb 2146 017a 0B .uleb128 0xb
@ -2938,7 +2938,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
2200 01b0 49 .uleb128 0x49 2200 01b0 49 .uleb128 0x49
2201 01b1 13 .uleb128 0x13 2201 01b1 13 .uleb128 0x13
2202 01b2 2F .uleb128 0x2f 2202 01b2 2F .uleb128 0x2f
BFIN GAS /tmp/ccAC6MSl.s page 50 BFIN GAS /tmp/ccBCKWZt.s page 50
2203 01b3 0B .uleb128 0xb 2203 01b3 0B .uleb128 0xb
@ -2998,7 +2998,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
2253 0026 8D010000 .4byte 0x18d 2253 0026 8D010000 .4byte 0x18d
2254 002a 73706F72 .string "sport_tx_init" 2254 002a 73706F72 .string "sport_tx_init"
2254 745F7478 2254 745F7478
BFIN GAS /tmp/ccAC6MSl.s page 51 BFIN GAS /tmp/ccBCKWZt.s page 51
2254 5F696E69 2254 5F696E69
@ -3058,7 +3058,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
2292 0000 73706F72 .string "sport_tx_init" 2292 0000 73706F72 .string "sport_tx_init"
2292 745F7478 2292 745F7478
2292 5F696E69 2292 5F696E69
BFIN GAS /tmp/ccAC6MSl.s page 52 BFIN GAS /tmp/ccBCKWZt.s page 52
2292 7400 2292 7400
@ -3118,7 +3118,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
2314 53545245 2314 53545245
2314 414D5F43 2314 414D5F43
2314 59434C45 2314 59434C45
BFIN GAS /tmp/ccAC6MSl.s page 53 BFIN GAS /tmp/ccBCKWZt.s page 53
2314 00 2314 00
@ -3178,7 +3178,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
2338 72737400 2338 72737400
2339 .LASF11: 2339 .LASF11:
2340 0190 756E7369 .string "unsigned int" 2340 0190 756E7369 .string "unsigned int"
BFIN GAS /tmp/ccAC6MSl.s page 54 BFIN GAS /tmp/ccBCKWZt.s page 54
2340 676E6564 2340 676E6564
@ -3238,7 +3238,7 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
2362 657100 2362 657100
2363 .LASF2: 2363 .LASF2:
2364 0234 73686F72 .string "short int" 2364 0234 73686F72 .string "short int"
BFIN GAS /tmp/ccAC6MSl.s page 55 BFIN GAS /tmp/ccBCKWZt.s page 55
2364 7420696E 2364 7420696E
@ -3293,24 +3293,24 @@ BFIN GAS /tmp/ccAC6MSl.s page 1
2386 02ce 7373796E .string "ssync" 2386 02ce 7373796E .string "ssync"
2386 6300 2386 6300
2387 .ident "GCC: (ADI-2014R1-RC2) 4.3.5" 2387 .ident "GCC: (ADI-2014R1-RC2) 4.3.5"
BFIN GAS /tmp/ccAC6MSl.s page 56 BFIN GAS /tmp/ccBCKWZt.s page 56
DEFINED SYMBOLS DEFINED SYMBOLS
*ABS*:0000000000000000 src/l502_sport_tx.c *ABS*:0000000000000000 src/l502_sport_tx.c
/tmp/ccAC6MSl.s:13 .text:0000000000000000 _sport_tx_out_status /tmp/ccBCKWZt.s:13 .text:0000000000000000 _sport_tx_out_status
/tmp/ccAC6MSl.s:766 .bss:00000000000000a8 _f_put_cnt /tmp/ccBCKWZt.s:766 .bss:00000000000000a8 _f_put_cnt
/tmp/ccAC6MSl.s:768 .bss:00000000000000ac _f_done_cnt /tmp/ccBCKWZt.s:768 .bss:00000000000000ac _f_done_cnt
/tmp/ccAC6MSl.s:758 .bss:0000000000000000 _f_tx_was_empty /tmp/ccBCKWZt.s:758 .bss:0000000000000000 _f_tx_was_empty
/tmp/ccAC6MSl.s:57 .text:0000000000000038 _sport_tx_init /tmp/ccBCKWZt.s:57 .text:0000000000000038 _sport_tx_init
/tmp/ccAC6MSl.s:760 .bss:0000000000000004 _f_descrs /tmp/ccBCKWZt.s:760 .bss:0000000000000004 _f_descrs
/tmp/ccAC6MSl.s:762 .bss:00000000000000a5 _f_done_descr /tmp/ccBCKWZt.s:762 .bss:00000000000000a5 _f_done_descr
/tmp/ccAC6MSl.s:760 .bss:00000000000000a4 _f_put_descr /tmp/ccBCKWZt.s:760 .bss:00000000000000a4 _f_put_descr
/tmp/ccAC6MSl.s:770 .bss:00000000000000b0 _f_first /tmp/ccBCKWZt.s:770 .bss:00000000000000b0 _f_first
/tmp/ccAC6MSl.s:171 .text:0000000000000168 _sport_tx_req_rdy /tmp/ccBCKWZt.s:171 .text:0000000000000168 _sport_tx_req_rdy
/tmp/ccAC6MSl.s:196 .text:000000000000018c _isr_sport_dma_tx /tmp/ccBCKWZt.s:196 .text:000000000000018c _isr_sport_dma_tx
/tmp/ccAC6MSl.s:441 .text:00000000000002f8 _sport_tx_start_req /tmp/ccBCKWZt.s:441 .text:00000000000002f8 _sport_tx_start_req
/tmp/ccAC6MSl.s:602 .text:00000000000003e4 _sport_tx_stop /tmp/ccBCKWZt.s:602 .text:00000000000003e4 _sport_tx_stop
UNDEFINED SYMBOLS UNDEFINED SYMBOLS
_sport_tx_done _sport_tx_done

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
BFIN GAS /tmp/cc0Jz34x.s page 1 BFIN GAS /tmp/cckPfsBl.s page 1
1 .file "src/l502_tests.c"; 1 .file "src/l502_tests.c";
@ -21,28 +21,28 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
14 .LFB2: 14 .LFB2:
15 .file 1 "src/l502_tests.c" 15 .file 1 "src/l502_tests.c"
1:src/l502_tests.c **** /** @file l502_test.c 1:src/l502_tests.c **** /** @file l502_test.c
2:src/l502_tests.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2:src/l502_tests.c **** Данный файл содержит реализацию тестов аппаратуры.
3:src/l502_tests.c **** <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 3:src/l502_tests.c **** Эти тесты используется при наладке прибора и не вып<D18B>
4:src/l502_tests.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4:src/l502_tests.c **** однако включение их в прошивку позволяет выполнять
5:src/l502_tests.c **** (<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20>.<2E>.) 5:src/l502_tests.c **** (однако не во время сбора данных и т.п.)
6:src/l502_tests.c **** 6:src/l502_tests.c ****
7:src/l502_tests.c **** <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> PC <20> BlackFin: L502_BF_CMD_CODE_TES 7:src/l502_tests.c **** Для управления тестами предназначена специальная к
8:src/l502_tests.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 8:src/l502_tests.c **** Параметр этой каоманды определяет действие:
9:src/l502_tests.c **** - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 9:src/l502_tests.c **** - запустить тест с заданным номером
10:src/l502_tests.c **** - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 10:src/l502_tests.c **** - остановить текущий тест
11:src/l502_tests.c **** - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 11:src/l502_tests.c **** - получить результаты выполняемого в данных момен
12:src/l502_tests.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>). 12:src/l502_tests.c **** последнего выполняемого теста (если тест остан<D0B0>
13:src/l502_tests.c **** 13:src/l502_tests.c ****
14:src/l502_tests.c **** <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> g_mode) 14:src/l502_tests.c **** По какого-либо теста модуль переходит в етстовый ре<D180>
15:src/l502_tests.c **** <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 15:src/l502_tests.c **** и выполняет функцию, соответствующую заданному тес<D0B5>
16:src/l502_tests.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> PC). 16:src/l502_tests.c **** должен переодически проверять приход других команд
17:src/l502_tests.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>). 17:src/l502_tests.c **** Тест выполняется либо до ошибки, либо до прихода ком
18:src/l502_tests.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> L502_BF_CMD_TEST_GET_RESULT. 18:src/l502_tests.c **** Узнать результат теста можно командой с параметром
19:src/l502_tests.c **** 19:src/l502_tests.c ****
20:src/l502_tests.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>: 20:src/l502_tests.c **** Доступны следующие тесты:
21:src/l502_tests.c **** - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM 21:src/l502_tests.c **** - Проверка SDRAM
22:src/l502_tests.c **** - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPI 22:src/l502_tests.c **** - Проверка SPI
23:src/l502_tests.c **** - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT 23:src/l502_tests.c **** - Проверка SPORT
24:src/l502_tests.c **** 24:src/l502_tests.c ****
25:src/l502_tests.c **** **************************************************************************************************/ 25:src/l502_tests.c **** **************************************************************************************************/
26:src/l502_tests.c **** 26:src/l502_tests.c ****
@ -58,19 +58,19 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
36:src/l502_tests.c **** #include <string.h> 36:src/l502_tests.c **** #include <string.h>
37:src/l502_tests.c **** 37:src/l502_tests.c ****
38:src/l502_tests.c **** 38:src/l502_tests.c ****
BFIN GAS /tmp/cc0Jz34x.s page 2 BFIN GAS /tmp/cckPfsBl.s page 2
39:src/l502_tests.c **** 39:src/l502_tests.c ****
40:src/l502_tests.c **** extern int g_mode; 40:src/l502_tests.c **** extern int g_mode;
41:src/l502_tests.c **** 41:src/l502_tests.c ****
42:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM <EFBFBD> SPORT */ 42:src/l502_tests.c **** /* модуль счетчика, используемого для тестов SDRAM и SPORT */
43:src/l502_tests.c **** #define L502_TEST_CNTR_MODULE 35317 43:src/l502_tests.c **** #define L502_TEST_CNTR_MODULE 35317
44:src/l502_tests.c **** 44:src/l502_tests.c ****
45:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> SDRAM */ 45:src/l502_tests.c **** /* размер одного банка SDRAM */
46:src/l502_tests.c **** #define SDRAM_BANK_SIZE (4UL*1024*1024*2) 46:src/l502_tests.c **** #define SDRAM_BANK_SIZE (4UL*1024*1024*2)
47:src/l502_tests.c **** 47:src/l502_tests.c ****
48:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM */ 48:src/l502_tests.c **** /* адреса банков SDRAM */
49:src/l502_tests.c **** static volatile uint16_t* bank1 = NULL; 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); 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); 51:src/l502_tests.c **** static volatile uint16_t* bank3 = (uint16_t*)(2*SDRAM_BANK_SIZE);
@ -80,24 +80,24 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
55:src/l502_tests.c **** #define SPORT_TEST_START_ADDR 0xFF900000 55:src/l502_tests.c **** #define SPORT_TEST_START_ADDR 0xFF900000
56:src/l502_tests.c **** #define SPORT_TEST_BUF_SIZE 4096 56:src/l502_tests.c **** #define SPORT_TEST_BUF_SIZE 4096
57:src/l502_tests.c **** 57:src/l502_tests.c ****
58:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ 58:src/l502_tests.c **** /* результат последнего теста */
59:src/l502_tests.c **** static t_l502_bf_test_res f_test_res; 59:src/l502_tests.c **** static t_l502_bf_test_res f_test_res;
60:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ 60:src/l502_tests.c **** /* номер последнего выполняемого теста */
61:src/l502_tests.c **** static int32_t f_cur_test_ind = -1; 61:src/l502_tests.c **** static int32_t f_cur_test_ind = -1;
62:src/l502_tests.c **** 62:src/l502_tests.c ****
63:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 63:src/l502_tests.c **** /* объявление функций запуска тестов */
64:src/l502_tests.c **** static int f_sdram_test(void); 64:src/l502_tests.c **** static int f_sdram_test(void);
65:src/l502_tests.c **** static int f_spi_test(void); 65:src/l502_tests.c **** static int f_spi_test(void);
66:src/l502_tests.c **** static int f_sport_test(void); 66:src/l502_tests.c **** static int f_sport_test(void);
67:src/l502_tests.c **** 67:src/l502_tests.c ****
68:src/l502_tests.c **** 68:src/l502_tests.c ****
69:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ 69:src/l502_tests.c **** /* стркутура, описывающая соответствия кода теста и фу<D184>
70:src/l502_tests.c **** typedef struct { 70:src/l502_tests.c **** typedef struct {
71:src/l502_tests.c **** uint32_t test_code; 71:src/l502_tests.c **** uint32_t test_code;
72:src/l502_tests.c **** int (*start)(void); 72:src/l502_tests.c **** int (*start)(void);
73:src/l502_tests.c **** void (*get_result)(t_l502_bf_cmd *cmd); 73:src/l502_tests.c **** void (*get_result)(t_l502_bf_cmd *cmd);
74:src/l502_tests.c **** } t_test_pars; 74:src/l502_tests.c **** } t_test_pars;
75:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 75:src/l502_tests.c **** /* теблица соответствий функций и кодов тестов */
76:src/l502_tests.c **** static t_test_pars f_test_pars[] = { 76:src/l502_tests.c **** static t_test_pars f_test_pars[] = {
77:src/l502_tests.c **** { L502_BF_CMD_TEST_ECHO, NULL, NULL}, 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}, 78:src/l502_tests.c **** { L502_BF_CMD_TEST_SPORT, f_sport_test, NULL},
@ -118,17 +118,17 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
21 0002 2832 P5 = R0; 21 0002 2832 P5 = R0;
22 0004 00E80300 LINK 12; 22 0004 00E80300 LINK 12;
23 .LCFI1: 23 .LCFI1:
BFIN GAS /tmp/cc0Jz34x.s page 3 BFIN GAS /tmp/cckPfsBl.s page 3
88:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ 88:src/l502_tests.c **** /* получение результата теста */
89:src/l502_tests.c **** if (cmd->param == L502_BF_CMD_TEST_GET_RESULT) { 89:src/l502_tests.c **** if (cmd->param == L502_BF_CMD_TEST_GET_RESULT) {
24 .loc 1 89 0 24 .loc 1 89 0
25 0008 69A0 R1 = [P5+4]; 25 0008 69A0 R1 = [P5+4];
26 000a 090C cc =R1==1; 26 000a 090C cc =R1==1;
27 000c 3E18 if cc jump .L20; 27 000c 3E18 if cc jump .L20;
28 .LVL1: 28 .LVL1:
90:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 90:src/l502_tests.c **** /* если не было никакого теста - возвращаем ошибку *
91:src/l502_tests.c **** if (f_cur_test_ind == -1) { 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); 92:src/l502_tests.c **** l502_cmd_done(L502_BF_ERR_INVALID_CMD_PARAMS, NULL, 0);
93:src/l502_tests.c **** } else { 93:src/l502_tests.c **** } else {
@ -136,11 +136,11 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
95:src/l502_tests.c **** 95:src/l502_tests.c ****
96: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) { 97:src/l502_tests.c **** if (f_test_pars[f_cur_test_ind].get_result != NULL) {
98:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> => 98:src/l502_tests.c **** /* если есть у теста спец функция для получени<D0BD>
99:src/l502_tests.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> */ 99:src/l502_tests.c **** вызываем ее */
100:src/l502_tests.c **** f_test_pars[f_cur_test_ind].get_result(cmd); 100:src/l502_tests.c **** f_test_pars[f_cur_test_ind].get_result(cmd);
101:src/l502_tests.c **** } else { 101:src/l502_tests.c **** } else {
102:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 102:src/l502_tests.c **** /* иначе просто устанавливаем резульатат без <20>
103:src/l502_tests.c **** l502_cmd_done(0, (uint32_t*)&f_test_res, 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)); 104:src/l502_tests.c **** sizeof(t_l502_bf_test_res)/sizeof(uint32_t));
105:src/l502_tests.c **** } 105:src/l502_tests.c **** }
@ -149,8 +149,8 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
29 .loc 1 107 0 29 .loc 1 107 0
30 000e 010C cc =R1==0; 30 000e 010C cc =R1==0;
31 0010 1114 if !cc jump .L5 (bp); 31 0010 1114 if !cc jump .L5 (bp);
108:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> => <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 108:src/l502_tests.c **** /* останов теста => если тест запущен - возвращаем е<>
109:src/l502_tests.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */ 109:src/l502_tests.c **** иначе возвращаем ошибку что и так теста нету */
110:src/l502_tests.c **** if (g_mode == L502_BF_MODE_TEST) { 110:src/l502_tests.c **** if (g_mode == L502_BF_MODE_TEST) {
32 .loc 1 110 0 32 .loc 1 110 0
33 0012 4AE10000 P2.H = _g_mode; 33 0012 4AE10000 P2.H = _g_mode;
@ -167,7 +167,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
40 .L18: 40 .L18:
115:src/l502_tests.c **** } 115:src/l502_tests.c **** }
116:src/l502_tests.c **** } else { 116:src/l502_tests.c **** } else {
117:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */ 117:src/l502_tests.c **** /* запуск теста - проходим по таблице и ищем нужный
118:src/l502_tests.c **** if (g_mode == L502_BF_MODE_IDLE) { 118:src/l502_tests.c **** if (g_mode == L502_BF_MODE_IDLE) {
119:src/l502_tests.c **** uint32_t i; 119:src/l502_tests.c **** uint32_t i;
120:src/l502_tests.c **** 120:src/l502_tests.c ****
@ -178,7 +178,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
125:src/l502_tests.c **** memset(&f_test_res, 0, sizeof(f_test_res)); 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; 126:src/l502_tests.c **** f_test_res.test = cmd->param;
127:src/l502_tests.c **** l502_cmd_done(0, 0, NULL); 127:src/l502_tests.c **** l502_cmd_done(0, 0, NULL);
BFIN GAS /tmp/cc0Jz34x.s page 4 BFIN GAS /tmp/cckPfsBl.s page 4
128:src/l502_tests.c **** 128:src/l502_tests.c ****
@ -238,7 +238,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
71 0054 1093 [P2] = R0; 71 0054 1093 [P2] = R0;
123:src/l502_tests.c **** if (f_test_pars[i].test_code == cmd->param) { 123:src/l502_tests.c **** if (f_test_pars[i].test_code == cmd->param) {
72 .loc 1 123 0 72 .loc 1 123 0
BFIN GAS /tmp/cc0Jz34x.s page 5 BFIN GAS /tmp/cckPfsBl.s page 5
73 0056 2091 R0 = [P4]; 73 0056 2091 R0 = [P4];
@ -298,7 +298,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
94:src/l502_tests.c **** f_test_res.run = (g_mode == L502_BF_MODE_TEST) ? 1 : 0; 94:src/l502_tests.c **** f_test_res.run = (g_mode == L502_BF_MODE_TEST) ? 1 : 0;
123 .loc 1 94 0 123 .loc 1 94 0
124 00b2 100C cc =R0==2; 124 00b2 100C cc =R0==2;
BFIN GAS /tmp/cc0Jz34x.s page 6 BFIN GAS /tmp/cckPfsBl.s page 6
125 00b4 0002 R0 = CC; 125 00b4 0002 R0 = CC;
@ -358,7 +358,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
171 00e8 FFE28CFF jump.l _l502_cmd_done; 171 00e8 FFE28CFF jump.l _l502_cmd_done;
172 .LVL11: 172 .LVL11:
173 .L22: 173 .L22:
BFIN GAS /tmp/cc0Jz34x.s page 7 BFIN GAS /tmp/cckPfsBl.s page 7
174 .LBB3: 174 .LBB3:
@ -418,7 +418,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
219 219
220 .LCFI6: 220 .LCFI6:
221 .LVL12: 221 .LVL12:
BFIN GAS /tmp/cc0Jz34x.s page 8 BFIN GAS /tmp/cckPfsBl.s page 8
222 0132 1000 rts; 222 0132 1000 rts;
@ -478,7 +478,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
265 0176 1F93 [P3] = R7; 265 0176 1F93 [P3] = R7;
266 .L12: 266 .L12:
121:src/l502_tests.c **** for (i=0, f_cur_test_ind=-1; (i<sizeof(f_test_pars)/sizeof(f_test_pars[0])) && 121:src/l502_tests.c **** for (i=0, f_cur_test_ind=-1; (i<sizeof(f_test_pars)/sizeof(f_test_pars[0])) &&
BFIN GAS /tmp/cc0Jz34x.s page 9 BFIN GAS /tmp/cckPfsBl.s page 9
267 .loc 1 121 0 267 .loc 1 121 0
@ -538,7 +538,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
312 01c6 1D93 [P3] = R5; 312 01c6 1D93 [P3] = R5;
131:src/l502_tests.c **** f_test_pars[i].start(); 131:src/l502_tests.c **** f_test_pars[i].start();
313 .loc 1 131 0 313 .loc 1 131 0
BFIN GAS /tmp/cc0Jz34x.s page 10 BFIN GAS /tmp/cckPfsBl.s page 10
314 01c8 6200 call (P2); 314 01c8 6200 call (P2);
@ -598,7 +598,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
358 0210 0AE10000 P2.L = _f_test_pars; 358 0210 0AE10000 P2.L = _f_test_pars;
359 0214 92AE P2 = [P2+40]; 359 0214 92AE P2 = [P2+40];
360 0216 420C cc =P2==0; 360 0216 420C cc =P2==0;
BFIN GAS /tmp/cc0Jz34x.s page 11 BFIN GAS /tmp/cckPfsBl.s page 11
361 0218 0518 if cc jump .L16; 361 0218 0518 if cc jump .L16;
@ -656,12 +656,12 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
156:src/l502_tests.c **** } while (0); 156:src/l502_tests.c **** } while (0);
157:src/l502_tests.c **** 157:src/l502_tests.c ****
158:src/l502_tests.c **** 158:src/l502_tests.c ****
159:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT'<EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>/<2F><><EFBFBD> 159:src/l502_tests.c **** /* тестирование SPORT'а, служащего для передачи потоков А<>
160:src/l502_tests.c **** <EFBFBD><EFBFBD> BlackFin'<EFBFBD> <20> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 160:src/l502_tests.c **** от BlackFin'а к ПЛИС. Устанавливается циклический сквозн
BFIN GAS /tmp/cc0Jz34x.s page 12 BFIN GAS /tmp/cckPfsBl.s page 12
161:src/l502_tests.c **** <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 161:src/l502_tests.c **** и передается счетчик, который проверяется при прием<D0B5>
162:src/l502_tests.c **** static int f_sport_test(void) { 162:src/l502_tests.c **** static int f_sport_test(void) {
163:src/l502_tests.c **** #define RX_BUF_SIZE 2048 163:src/l502_tests.c **** #define RX_BUF_SIZE 2048
164:src/l502_tests.c **** static uint16_t rx_buf[RX_BUF_SIZE]; 164:src/l502_tests.c **** static uint16_t rx_buf[RX_BUF_SIZE];
@ -672,7 +672,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
169:src/l502_tests.c **** uint16_t rx_val; 169:src/l502_tests.c **** uint16_t rx_val;
170:src/l502_tests.c **** int err = 0, i; 170:src/l502_tests.c **** int err = 0, i;
171:src/l502_tests.c **** 171:src/l502_tests.c ****
172:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT'<EFBFBD> */ 172:src/l502_tests.c **** /* разрешаем прием и передачу по SPORT'у */
173:src/l502_tests.c **** *pSPORT0_TCR1 |= TSPEN; 173:src/l502_tests.c **** *pSPORT0_TCR1 |= TSPEN;
174:src/l502_tests.c **** *pSPORT0_RCR1 |= RSPEN; 174:src/l502_tests.c **** *pSPORT0_RCR1 |= RSPEN;
175:src/l502_tests.c **** 175:src/l502_tests.c ****
@ -681,13 +681,13 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
178:src/l502_tests.c **** stat=*pSPORT0_STAT; 178:src/l502_tests.c **** stat=*pSPORT0_STAT;
179:src/l502_tests.c **** } 179:src/l502_tests.c **** }
180:src/l502_tests.c **** 180:src/l502_tests.c ****
181:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT'<EFBFBD> */ 181:src/l502_tests.c **** /* вначале полностью заполняем очередь SPORT'а */
182:src/l502_tests.c **** for (i = 0; i < 8; i++) { 182:src/l502_tests.c **** for (i = 0; i < 8; i++) {
183:src/l502_tests.c **** *pSPORT0_TX16 = tx_cntr++; 183:src/l502_tests.c **** *pSPORT0_TX16 = tx_cntr++;
184:src/l502_tests.c **** //tx_cntr+=SPORT_CNTR_INC; 184:src/l502_tests.c **** //tx_cntr+=SPORT_CNTR_INC;
185:src/l502_tests.c **** } 185:src/l502_tests.c **** }
186:src/l502_tests.c **** 186:src/l502_tests.c ****
187:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT */ 187:src/l502_tests.c **** /* устанавливаем в ПЛИС сквозной режим работы SPORT */
188:src/l502_tests.c **** fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, 0xE); 188:src/l502_tests.c **** fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, 0xE);
189:src/l502_tests.c **** 189:src/l502_tests.c ****
190:src/l502_tests.c **** 190:src/l502_tests.c ****
@ -718,13 +718,13 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
215:src/l502_tests.c **** } 215:src/l502_tests.c **** }
216:src/l502_tests.c **** 216:src/l502_tests.c ****
217:src/l502_tests.c **** sport_test_end: 217:src/l502_tests.c **** sport_test_end:
BFIN GAS /tmp/cc0Jz34x.s page 13 BFIN GAS /tmp/cckPfsBl.s page 13
218:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT'<EFBFBD> */ 218:src/l502_tests.c **** /* запрещаем прием и передачу по SPORT'у */
219:src/l502_tests.c **** *pSPORT0_TCR1 = 0; 219:src/l502_tests.c **** *pSPORT0_TCR1 = 0;
220:src/l502_tests.c **** *pSPORT0_RCR1 = 0; 220:src/l502_tests.c **** *pSPORT0_RCR1 = 0;
221:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT'<EFBFBD> */ 221:src/l502_tests.c **** /* возвращаем штатный режим работы SPORT'а */
222:src/l502_tests.c **** fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, 0); 222:src/l502_tests.c **** fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, 0);
223:src/l502_tests.c **** 223:src/l502_tests.c ****
224:src/l502_tests.c **** return err; 224:src/l502_tests.c **** return err;
@ -734,8 +734,8 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
228:src/l502_tests.c **** 228:src/l502_tests.c ****
229:src/l502_tests.c **** 229:src/l502_tests.c ****
230:src/l502_tests.c **** 230:src/l502_tests.c ****
231:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPI - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 231:src/l502_tests.c **** /* тест SPI - записываем бегущую единицу в регистр ПЛИС, с
232:src/l502_tests.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 232:src/l502_tests.c **** значение этого регистра и сверяем результаты */
233:src/l502_tests.c **** static int f_spi_test(void) { 233:src/l502_tests.c **** static int f_spi_test(void) {
397 .loc 1 233 0 397 .loc 1 233 0
398 023c EB05 [--sp] = ( r7:5, p5:3 ); 398 023c EB05 [--sp] = ( r7:5, p5:3 );
@ -778,7 +778,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
243:src/l502_tests.c **** f_test_res.err = L502_BF_ERR_TEST_VALUE; 243:src/l502_tests.c **** f_test_res.err = L502_BF_ERR_TEST_VALUE;
424 .loc 1 243 0 424 .loc 1 243 0
425 0268 25E1F9FD R5 = -519 (X); 425 0268 25E1F9FD R5 = -519 (X);
BFIN GAS /tmp/cc0Jz34x.s page 14 BFIN GAS /tmp/cckPfsBl.s page 14
426 .LVL15: 426 .LVL15:
@ -838,7 +838,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
465 .loc 1 235 0 465 .loc 1 235 0
466 029c 29A1 R1 = [P5+16]; 466 029c 29A1 R1 = [P5+16];
467 029e 010C cc =R1==0; 467 029e 010C cc =R1==0;
BFIN GAS /tmp/cc0Jz34x.s page 15 BFIN GAS /tmp/cckPfsBl.s page 15
468 02a0 0410 if !cc jump .L27; 468 02a0 0410 if !cc jump .L27;
@ -883,7 +883,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
255:src/l502_tests.c **** 255:src/l502_tests.c ****
256:src/l502_tests.c **** 256:src/l502_tests.c ****
257:src/l502_tests.c **** 257:src/l502_tests.c ****
258:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 258:src/l502_tests.c **** /* тест SDRAM памяти */
259:src/l502_tests.c **** static int f_sdram_test(void) { 259:src/l502_tests.c **** static int f_sdram_test(void) {
500 .loc 1 259 0 500 .loc 1 259 0
501 02c0 E305 [--sp] = ( r7:4, p5:3 ); 501 02c0 E305 [--sp] = ( r7:4, p5:3 );
@ -898,7 +898,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
504 .loc 1 265 0 504 .loc 1 265 0
505 02c2 4CE10000 P4.H = _f_test_res; 505 02c2 4CE10000 P4.H = _f_test_res;
259:src/l502_tests.c **** static int f_sdram_test(void) { 259:src/l502_tests.c **** static int f_sdram_test(void) {
BFIN GAS /tmp/cc0Jz34x.s page 16 BFIN GAS /tmp/cckPfsBl.s page 16
506 .loc 1 259 0 506 .loc 1 259 0
@ -929,7 +929,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
530 .LVL21: 530 .LVL21:
531 .L39: 531 .L39:
267:src/l502_tests.c **** 267:src/l502_tests.c ****
268:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 268:src/l502_tests.c **** /* заполняем всю память счетчиком */
269:src/l502_tests.c **** for (i = 0, cntr = 0; i < (16UL*1024*1024); i++) { 269:src/l502_tests.c **** for (i = 0, cntr = 0; i < (16UL*1024*1024); i++) {
532 .loc 1 269 0 532 .loc 1 269 0
533 02ee 0B60 R3 = 1 (X); 533 02ee 0B60 R3 = 1 (X);
@ -958,7 +958,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
552 .loc 1 273 0 552 .loc 1 273 0
553 030a FFE37BFE call _l502_cmd_check_req; 553 030a FFE37BFE call _l502_cmd_check_req;
554 .LVL25: 554 .LVL25:
BFIN GAS /tmp/cc0Jz34x.s page 17 BFIN GAS /tmp/cckPfsBl.s page 17
555 030e 1891 R0 = [P3]; 555 030e 1891 R0 = [P3];
@ -975,7 +975,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
277:src/l502_tests.c **** TEST_CHECK_OUT(sdram_test_end); 277:src/l502_tests.c **** TEST_CHECK_OUT(sdram_test_end);
278:src/l502_tests.c **** 278:src/l502_tests.c ****
279:src/l502_tests.c **** 279:src/l502_tests.c ****
280:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 280:src/l502_tests.c **** /* читаем последовательно и сверяем результат */
281:src/l502_tests.c **** for (i = 0, cntr = 0; i < (16UL*1024*1024); i++) { 281:src/l502_tests.c **** for (i = 0, cntr = 0; i < (16UL*1024*1024); i++) {
282:src/l502_tests.c **** uint16_t word = bank1[i]; 282:src/l502_tests.c **** uint16_t word = bank1[i];
283:src/l502_tests.c **** if (word != cntr) { 283:src/l502_tests.c **** if (word != cntr) {
@ -996,8 +996,8 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
298:src/l502_tests.c **** f_test_res.stage++; 298:src/l502_tests.c **** f_test_res.stage++;
299:src/l502_tests.c **** 299:src/l502_tests.c ****
300:src/l502_tests.c **** 300:src/l502_tests.c ****
301:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 301:src/l502_tests.c **** /* записываем по слову в каждый банк для проверки п
302:src/l502_tests.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 302:src/l502_tests.c **** записи по разным банкам */
303:src/l502_tests.c **** for (i = 0, cntr = 0; i < (4UL*1024*1024); i++) { 303:src/l502_tests.c **** for (i = 0, cntr = 0; i < (4UL*1024*1024); i++) {
304:src/l502_tests.c **** bank1[i] = cntr; 304:src/l502_tests.c **** bank1[i] = cntr;
305:src/l502_tests.c **** bank2[i] = ~cntr; 305:src/l502_tests.c **** bank2[i] = ~cntr;
@ -1018,7 +1018,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
320:src/l502_tests.c **** f_test_res.err = L502_BF_ERR_TEST_VALUE; 320:src/l502_tests.c **** f_test_res.err = L502_BF_ERR_TEST_VALUE;
321:src/l502_tests.c **** f_test_res.last_addr = (uint32_t)&bank1[i]; 321:src/l502_tests.c **** f_test_res.last_addr = (uint32_t)&bank1[i];
322:src/l502_tests.c **** f_test_res.last_wr = cntr; 322:src/l502_tests.c **** f_test_res.last_wr = cntr;
BFIN GAS /tmp/cc0Jz34x.s page 18 BFIN GAS /tmp/cckPfsBl.s page 18
323:src/l502_tests.c **** f_test_res.last_rd = word; 323:src/l502_tests.c **** f_test_res.last_rd = word;
@ -1060,7 +1060,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
359:src/l502_tests.c **** 359:src/l502_tests.c ****
360:src/l502_tests.c **** TEST_CHECK_OUT(sdram_test_end); 360:src/l502_tests.c **** TEST_CHECK_OUT(sdram_test_end);
361:src/l502_tests.c **** 361:src/l502_tests.c ****
362:src/l502_tests.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 4 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 362:src/l502_tests.c **** /* запись в 4 разных банка с последующим чтением */
363:src/l502_tests.c **** f_test_res.stage++; 363:src/l502_tests.c **** f_test_res.stage++;
364:src/l502_tests.c **** 364:src/l502_tests.c ****
365:src/l502_tests.c **** for (i = 0, cntr=0; i < (4UL*1024*1024); i++) { 365:src/l502_tests.c **** for (i = 0, cntr=0; i < (4UL*1024*1024); i++) {
@ -1078,7 +1078,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
377:src/l502_tests.c **** 377:src/l502_tests.c ****
378:src/l502_tests.c **** 378:src/l502_tests.c ****
379:src/l502_tests.c **** if (word[0] != wr_val[0]) { 379:src/l502_tests.c **** if (word[0] != wr_val[0]) {
BFIN GAS /tmp/cc0Jz34x.s page 19 BFIN GAS /tmp/cckPfsBl.s page 19
380:src/l502_tests.c **** f_test_res.err = L502_BF_ERR_TEST_VALUE; 380:src/l502_tests.c **** f_test_res.err = L502_BF_ERR_TEST_VALUE;
@ -1138,7 +1138,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
575 .LVL29: 575 .LVL29:
576 0328 1891 R0 = [P3]; 576 0328 1891 R0 = [P3];
577 032a 100C cc =R0==2; 577 032a 100C cc =R0==2;
BFIN GAS /tmp/cc0Jz34x.s page 20 BFIN GAS /tmp/cckPfsBl.s page 20
578 032c BE10 if !cc jump .L81; 578 032c BE10 if !cc jump .L81;
@ -1198,7 +1198,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
625 0368 100C cc =R0==2; 625 0368 100C cc =R0==2;
626 036a 9F10 if !cc jump .L81; 626 036a 9F10 if !cc jump .L81;
627 036c 21A1 R1 = [P4+16]; 627 036c 21A1 R1 = [P4+16];
BFIN GAS /tmp/cc0Jz34x.s page 21 BFIN GAS /tmp/cckPfsBl.s page 21
628 036e 010C cc =R1==0; 628 036e 010C cc =R1==0;
@ -1258,7 +1258,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
305:src/l502_tests.c **** bank2[i] = ~cntr; 305:src/l502_tests.c **** bank2[i] = ~cntr;
675 .loc 1 305 0 675 .loc 1 305 0
676 03b8 0DE10000 P5.L = 0; 676 03b8 0DE10000 P5.L = 0;
BFIN GAS /tmp/cc0Jz34x.s page 22 BFIN GAS /tmp/cckPfsBl.s page 22
304:src/l502_tests.c **** bank1[i] = cntr; 304:src/l502_tests.c **** bank1[i] = cntr;
@ -1318,7 +1318,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
720 0402 0F64 R7 += 1; 720 0402 0F64 R7 += 1;
721 0404 B34F R3 <<= 22; 721 0404 B34F R3 <<= 22;
722 0406 1732 P2 = R7; 722 0406 1732 P2 = R7;
BFIN GAS /tmp/cc0Jz34x.s page 23 BFIN GAS /tmp/cckPfsBl.s page 23
723 0408 1F08 cc =R7==R3; 723 0408 1F08 cc =R7==R3;
@ -1378,7 +1378,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
770 043e 1908 cc =R1==R3; 770 043e 1908 cc =R1==R3;
771 0440 4110 if !cc jump .L79; 771 0440 4110 if !cc jump .L79;
327:src/l502_tests.c **** word = bank2[i]; 327:src/l502_tests.c **** word = bank2[i];
BFIN GAS /tmp/cc0Jz34x.s page 24 BFIN GAS /tmp/cckPfsBl.s page 24
772 .loc 1 327 0 772 .loc 1 327 0
@ -1438,7 +1438,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
818 .LVL64: 818 .LVL64:
819 048a D042 R0 = R2.L (Z); 819 048a D042 R0 = R2.L (Z);
820 .LVL65: 820 .LVL65:
BFIN GAS /tmp/cc0Jz34x.s page 25 BFIN GAS /tmp/cckPfsBl.s page 25
821 048c 81E1F589 R1 = 35317 (Z); 821 048c 81E1F589 R1 = 35317 (Z);
@ -1498,7 +1498,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
868 04c2 20E1F9FD R0 = -519 (X); 868 04c2 20E1F9FD R0 = -519 (X);
869 04c6 20B1 [P4+16] = R0; 869 04c6 20B1 [P4+16] = R0;
347:src/l502_tests.c **** f_test_res.last_addr = (uint32_t)&bank4[i]; 347:src/l502_tests.c **** f_test_res.last_addr = (uint32_t)&bank4[i];
BFIN GAS /tmp/cc0Jz34x.s page 26 BFIN GAS /tmp/cckPfsBl.s page 26
870 .loc 1 347 0 870 .loc 1 347 0
@ -1558,7 +1558,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
916 .loc 1 370 0 916 .loc 1 370 0
917 0506 09E10000 P1.L = 0; 917 0506 09E10000 P1.L = 0;
369:src/l502_tests.c **** bank2[i] = wr_val[1]; 369:src/l502_tests.c **** bank2[i] = wr_val[1];
BFIN GAS /tmp/cc0Jz34x.s page 27 BFIN GAS /tmp/cckPfsBl.s page 27
918 .loc 1 369 0 918 .loc 1 369 0
@ -1618,7 +1618,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
955 .loc 1 375 0 955 .loc 1 375 0
956 053e 2B95 R3 = W [P5] (Z); 956 053e 2B95 R3 = W [P5] (Z);
957 0540 0334 I0 = R3; 957 0540 0334 I0 = R3;
BFIN GAS /tmp/cc0Jz34x.s page 28 BFIN GAS /tmp/cckPfsBl.s page 28
379:src/l502_tests.c **** if (word[0] != wr_val[0]) { 379:src/l502_tests.c **** if (word[0] != wr_val[0]) {
@ -1678,7 +1678,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1004 0586 B72F jump.s .L67; 1004 0586 B72F jump.s .L67;
1005 .L87: 1005 .L87:
380:src/l502_tests.c **** f_test_res.err = L502_BF_ERR_TEST_VALUE; 380:src/l502_tests.c **** f_test_res.err = L502_BF_ERR_TEST_VALUE;
BFIN GAS /tmp/cc0Jz34x.s page 29 BFIN GAS /tmp/cckPfsBl.s page 29
1006 .loc 1 380 0 1006 .loc 1 380 0
@ -1738,7 +1738,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1050 05c2 20E1F9FD R0 = -519 (X); 1050 05c2 20E1F9FD R0 = -519 (X);
1051 05c6 20B1 [P4+16] = R0; 1051 05c6 20B1 [P4+16] = R0;
338:src/l502_tests.c **** f_test_res.last_addr = (uint32_t)&bank3[i]; 338:src/l502_tests.c **** f_test_res.last_addr = (uint32_t)&bank3[i];
BFIN GAS /tmp/cc0Jz34x.s page 30 BFIN GAS /tmp/cckPfsBl.s page 30
1052 .loc 1 338 0 1052 .loc 1 338 0
@ -1798,7 +1798,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1092 .loc 1 388 0 1092 .loc 1 388 0
1093 05f4 60BD [P4+20] = P0; 1093 05f4 60BD [P4+20] = P0;
389:src/l502_tests.c **** f_test_res.last_wr = wr_val[1]; 389:src/l502_tests.c **** f_test_res.last_wr = wr_val[1];
BFIN GAS /tmp/cc0Jz34x.s page 31 BFIN GAS /tmp/cckPfsBl.s page 31
1094 .loc 1 389 0 1094 .loc 1 389 0
@ -1858,7 +1858,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1137 062a 09E11808 P1.L = 2072; 1137 062a 09E11808 P1.L = 2072;
178:src/l502_tests.c **** stat=*pSPORT0_STAT; 178:src/l502_tests.c **** stat=*pSPORT0_STAT;
1138 .loc 1 178 0 1138 .loc 1 178 0
BFIN GAS /tmp/cc0Jz34x.s page 32 BFIN GAS /tmp/cckPfsBl.s page 32
1139 062e 5032 P2 = P0; 1139 062e 5032 P2 = P0;
@ -1918,7 +1918,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1187 0682 0CE10010 P4.L = _f_test_res; 1187 0682 0CE10010 P4.L = _f_test_res;
1188 0686 20A1 R0 = [P4+16]; 1188 0686 20A1 R0 = [P4+16];
192:src/l502_tests.c **** stat = *pSPORT0_STAT; 192:src/l502_tests.c **** stat = *pSPORT0_STAT;
BFIN GAS /tmp/cc0Jz34x.s page 33 BFIN GAS /tmp/cckPfsBl.s page 33
1189 .loc 1 192 0 1189 .loc 1 192 0
@ -1978,7 +1978,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
200:src/l502_tests.c **** if ((rx_val != rx_cntr)) { 200:src/l502_tests.c **** if ((rx_val != rx_cntr)) {
1233 .loc 1 200 0 1233 .loc 1 200 0
1234 06c2 C242 R2 = R0.L (Z); 1234 06c2 C242 R2 = R0.L (Z);
BFIN GAS /tmp/cc0Jz34x.s page 34 BFIN GAS /tmp/cckPfsBl.s page 34
1235 .LVL105: 1235 .LVL105:
@ -2038,7 +2038,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1278 0702 A305 ( r7:4, p5:3 ) = [sp++]; 1278 0702 A305 ( r7:4, p5:3 ) = [sp++];
1279 1279
1280 .LCFI17: 1280 .LCFI17:
BFIN GAS /tmp/cc0Jz34x.s page 35 BFIN GAS /tmp/cckPfsBl.s page 35
1281 .LVL109: 1281 .LVL109:
@ -2098,7 +2098,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1333 0000 0C000000 .4byte .LECIE0-.LSCIE0 1333 0000 0C000000 .4byte .LECIE0-.LSCIE0
1334 .LSCIE0: 1334 .LSCIE0:
1335 0004 FFFFFFFF .4byte 0xffffffff 1335 0004 FFFFFFFF .4byte 0xffffffff
BFIN GAS /tmp/cc0Jz34x.s page 36 BFIN GAS /tmp/cckPfsBl.s page 36
1336 0008 01 .byte 0x1 1336 0008 01 .byte 0x1
@ -2158,7 +2158,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1390 004c 06 .uleb128 0x6 1390 004c 06 .uleb128 0x6
1391 004d 8C .byte 0x8c 1391 004d 8C .byte 0x8c
1392 004e 05 .uleb128 0x5 1392 004e 05 .uleb128 0x5
BFIN GAS /tmp/cc0Jz34x.s page 37 BFIN GAS /tmp/cckPfsBl.s page 37
1393 004f 8B .byte 0x8b 1393 004f 8B .byte 0x8b
@ -2218,7 +2218,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1447 .LSFDE6: 1447 .LSFDE6:
1448 008c 28000000 .4byte .LEFDE6-.LASFDE6 1448 008c 28000000 .4byte .LEFDE6-.LASFDE6
1449 .LASFDE6: 1449 .LASFDE6:
BFIN GAS /tmp/cc0Jz34x.s page 38 BFIN GAS /tmp/cckPfsBl.s page 38
1450 0090 00000000 .4byte .Lframe0 1450 0090 00000000 .4byte .Lframe0
@ -2278,7 +2278,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1504 002b 00000000 .4byte .LVL0-.Ltext0 1504 002b 00000000 .4byte .LVL0-.Ltext0
1505 002f 0E000000 .4byte .LVL1-.Ltext0 1505 002f 0E000000 .4byte .LVL1-.Ltext0
1506 0033 0100 .2byte 0x1 1506 0033 0100 .2byte 0x1
BFIN GAS /tmp/cc0Jz34x.s page 39 BFIN GAS /tmp/cckPfsBl.s page 39
1507 0035 50 .byte 0x50 1507 0035 50 .byte 0x50
@ -2338,7 +2338,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1561 00c5 00000000 .4byte 0x0 1561 00c5 00000000 .4byte 0x0
1562 .LLST4: 1562 .LLST4:
1563 00c9 C0020000 .4byte .LFB5-.Ltext0 1563 00c9 C0020000 .4byte .LFB5-.Ltext0
BFIN GAS /tmp/cc0Jz34x.s page 40 BFIN GAS /tmp/cckPfsBl.s page 40
1564 00cd C2020000 .4byte .LCFI11-.Ltext0 1564 00cd C2020000 .4byte .LCFI11-.Ltext0
@ -2398,7 +2398,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1618 015e 50 .byte 0x50 1618 015e 50 .byte 0x50
1619 015f 00030000 .4byte .LVL23-.Ltext0 1619 015f 00030000 .4byte .LVL23-.Ltext0
1620 0163 02030000 .4byte .LVL24-.Ltext0 1620 0163 02030000 .4byte .LVL24-.Ltext0
BFIN GAS /tmp/cc0Jz34x.s page 41 BFIN GAS /tmp/cckPfsBl.s page 41
1621 0167 0100 .2byte 0x1 1621 0167 0100 .2byte 0x1
@ -2458,7 +2458,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1675 01f9 3A040000 .4byte .LVL53-.Ltext0 1675 01f9 3A040000 .4byte .LVL53-.Ltext0
1676 01fd 52040000 .4byte .LVL57-.Ltext0 1676 01fd 52040000 .4byte .LVL57-.Ltext0
1677 0201 0100 .2byte 0x1 1677 0201 0100 .2byte 0x1
BFIN GAS /tmp/cc0Jz34x.s page 42 BFIN GAS /tmp/cckPfsBl.s page 42
1678 0203 53 .byte 0x53 1678 0203 53 .byte 0x53
@ -2518,7 +2518,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1732 0297 FC050000 .4byte .LFE5-.Ltext0 1732 0297 FC050000 .4byte .LFE5-.Ltext0
1733 029b 0100 .2byte 0x1 1733 029b 0100 .2byte 0x1
1734 029d 51 .byte 0x51 1734 029d 51 .byte 0x51
BFIN GAS /tmp/cc0Jz34x.s page 43 BFIN GAS /tmp/cckPfsBl.s page 43
1735 029e 00000000 .4byte 0x0 1735 029e 00000000 .4byte 0x0
@ -2578,7 +2578,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1789 0332 00000000 .4byte 0x0 1789 0332 00000000 .4byte 0x0
1790 0336 00000000 .4byte 0x0 1790 0336 00000000 .4byte 0x0
1791 .LLST9: 1791 .LLST9:
BFIN GAS /tmp/cc0Jz34x.s page 44 BFIN GAS /tmp/cckPfsBl.s page 44
1792 033a FC050000 .4byte .LFB3-.Ltext0 1792 033a FC050000 .4byte .LFB3-.Ltext0
@ -2638,7 +2638,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1846 .LLST12: 1846 .LLST12:
1847 03cd 94060000 .4byte .LVL98-.Ltext0 1847 03cd 94060000 .4byte .LVL98-.Ltext0
1848 03d1 04070000 .4byte .LVL109-.Ltext0 1848 03d1 04070000 .4byte .LVL109-.Ltext0
BFIN GAS /tmp/cc0Jz34x.s page 45 BFIN GAS /tmp/cckPfsBl.s page 45
1849 03d5 0100 .2byte 0x1 1849 03d5 0100 .2byte 0x1
@ -2698,7 +2698,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1903 0026 04 .byte 0x4 1903 0026 04 .byte 0x4
1904 0027 07 .byte 0x7 1904 0027 07 .byte 0x7
1905 0028 6B010000 .4byte .LASF0 1905 0028 6B010000 .4byte .LASF0
BFIN GAS /tmp/cc0Jz34x.s page 46 BFIN GAS /tmp/cckPfsBl.s page 46
1906 002c 03 .uleb128 0x3 1906 002c 03 .uleb128 0x3
@ -2758,14 +2758,14 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1960 008c CB020000 .4byte .LASF12 1960 008c CB020000 .4byte .LASF12
1961 0090 02 .byte 0x2 1961 0090 02 .byte 0x2
1962 0091 50 .byte 0x50 1962 0091 50 .byte 0x50
BFIN GAS /tmp/cc0Jz34x.s page 47 BFIN GAS /tmp/cckPfsBl.s page 47
1963 0092 25000000 .4byte 0x25 1963 0092 25000000 .4byte 0x25
1964 0096 06 .uleb128 0x6 1964 0096 06 .uleb128 0x6
1965 0097 04 .byte 0x4 1965 0097 04 .byte 0x4
1966 0098 03 .byte 0x3 1966 0098 03 .byte 0x3
1967 0099 35 .byte 0x35 1967 0099 36 .byte 0x36
1968 009a C3000000 .4byte 0xc3 1968 009a C3000000 .4byte 0xc3
1969 009e 07 .uleb128 0x7 1969 009e 07 .uleb128 0x7
1970 009f 6C030000 .4byte .LASF13 1970 009f 6C030000 .4byte .LASF13
@ -2789,7 +2789,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
1988 00c3 06 .uleb128 0x6 1988 00c3 06 .uleb128 0x6
1989 00c4 04 .byte 0x4 1989 00c4 04 .byte 0x4
1990 00c5 03 .byte 0x3 1990 00c5 03 .byte 0x3
1991 00c6 68 .byte 0x68 1991 00c6 69 .byte 0x69
1992 00c7 11010000 .4byte 0x111 1992 00c7 11010000 .4byte 0x111
1993 00cb 07 .uleb128 0x7 1993 00cb 07 .uleb128 0x7
1994 00cc 57010000 .4byte .LASF19 1994 00cc 57010000 .4byte .LASF19
@ -2818,7 +2818,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2017 0102 07 .uleb128 0x7 2017 0102 07 .uleb128 0x7
2018 0103 BA030000 .4byte .LASF27 2018 0103 BA030000 .4byte .LASF27
2019 0107 FA7B .sleb128 -518 2019 0107 FA7B .sleb128 -518
BFIN GAS /tmp/cc0Jz34x.s page 48 BFIN GAS /tmp/cckPfsBl.s page 48
2020 0109 07 .uleb128 0x7 2020 0109 07 .uleb128 0x7
@ -2828,7 +2828,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2024 0111 06 .uleb128 0x6 2024 0111 06 .uleb128 0x6
2025 0112 04 .byte 0x4 2025 0112 04 .byte 0x4
2026 0113 03 .byte 0x3 2026 0113 03 .byte 0x3
2027 0114 79 .byte 0x79 2027 0114 7A .byte 0x7a
2028 0115 2C010000 .4byte 0x12c 2028 0115 2C010000 .4byte 0x12c
2029 0119 07 .uleb128 0x7 2029 0119 07 .uleb128 0x7
2030 011a EF010000 .4byte .LASF29 2030 011a EF010000 .4byte .LASF29
@ -2843,12 +2843,12 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2039 012c 08 .uleb128 0x8 2039 012c 08 .uleb128 0x8
2040 012d 1010 .2byte 0x1010 2040 012d 1010 .2byte 0x1010
2041 012f 03 .byte 0x3 2041 012f 03 .byte 0x3
2042 0130 8B .byte 0x8b 2042 0130 8C .byte 0x8c
2043 0131 8A010000 .4byte 0x18a 2043 0131 8A010000 .4byte 0x18a
2044 0135 09 .uleb128 0x9 2044 0135 09 .uleb128 0x9
2045 0136 60030000 .4byte .LASF32 2045 0136 60030000 .4byte .LASF32
2046 013a 03 .byte 0x3 2046 013a 03 .byte 0x3
2047 013b 8C .byte 0x8c 2047 013b 8D .byte 0x8d
2048 013c 75000000 .4byte 0x75 2048 013c 75000000 .4byte 0x75
2049 0140 02 .byte 0x2 2049 0140 02 .byte 0x2
2050 0141 23 .byte 0x23 2050 0141 23 .byte 0x23
@ -2856,7 +2856,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2052 0143 09 .uleb128 0x9 2052 0143 09 .uleb128 0x9
2053 0144 65030000 .4byte .LASF33 2053 0144 65030000 .4byte .LASF33
2054 0148 03 .byte 0x3 2054 0148 03 .byte 0x3
2055 0149 8D .byte 0x8d 2055 0149 8E .byte 0x8e
2056 014a 75000000 .4byte 0x75 2056 014a 75000000 .4byte 0x75
2057 014e 02 .byte 0x2 2057 014e 02 .byte 0x2
2058 014f 23 .byte 0x23 2058 014f 23 .byte 0x23
@ -2864,7 +2864,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2060 0151 09 .uleb128 0x9 2060 0151 09 .uleb128 0x9
2061 0152 E9010000 .4byte .LASF34 2061 0152 E9010000 .4byte .LASF34
2062 0156 03 .byte 0x3 2062 0156 03 .byte 0x3
2063 0157 8E .byte 0x8e 2063 0157 8F .byte 0x8f
2064 0158 8B000000 .4byte 0x8b 2064 0158 8B000000 .4byte 0x8b
2065 015c 02 .byte 0x2 2065 015c 02 .byte 0x2
2066 015d 23 .byte 0x23 2066 015d 23 .byte 0x23
@ -2872,18 +2872,18 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2068 015f 09 .uleb128 0x9 2068 015f 09 .uleb128 0x9
2069 0160 0A040000 .4byte .LASF35 2069 0160 0A040000 .4byte .LASF35
2070 0164 03 .byte 0x3 2070 0164 03 .byte 0x3
2071 0165 8F .byte 0x8f 2071 0165 90 .byte 0x90
2072 0166 80000000 .4byte 0x80 2072 0166 80000000 .4byte 0x80
2073 016a 02 .byte 0x2 2073 016a 02 .byte 0x2
2074 016b 23 .byte 0x23 2074 016b 23 .byte 0x23
2075 016c 08 .uleb128 0x8 2075 016c 08 .uleb128 0x8
2076 016d 09 .uleb128 0x9 2076 016d 09 .uleb128 0x9
BFIN GAS /tmp/cc0Jz34x.s page 49 BFIN GAS /tmp/cckPfsBl.s page 49
2077 016e D2010000 .4byte .LASF36 2077 016e D2010000 .4byte .LASF36
2078 0172 03 .byte 0x3 2078 0172 03 .byte 0x3
2079 0173 90 .byte 0x90 2079 0173 91 .byte 0x91
2080 0174 8B000000 .4byte 0x8b 2080 0174 8B000000 .4byte 0x8b
2081 0178 02 .byte 0x2 2081 0178 02 .byte 0x2
2082 0179 23 .byte 0x23 2082 0179 23 .byte 0x23
@ -2891,7 +2891,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2084 017b 09 .uleb128 0x9 2084 017b 09 .uleb128 0x9
2085 017c 88010000 .4byte .LASF37 2085 017c 88010000 .4byte .LASF37
2086 0180 03 .byte 0x3 2086 0180 03 .byte 0x3
2087 0181 91 .byte 0x91 2087 0181 92 .byte 0x92
2088 0182 8A010000 .4byte 0x18a 2088 0182 8A010000 .4byte 0x18a
2089 0186 02 .byte 0x2 2089 0186 02 .byte 0x2
2090 0187 23 .byte 0x23 2090 0187 23 .byte 0x23
@ -2907,17 +2907,17 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2100 019b 05 .uleb128 0x5 2100 019b 05 .uleb128 0x5
2101 019c 8A000000 .4byte .LASF38 2101 019c 8A000000 .4byte .LASF38
2102 01a0 03 .byte 0x3 2102 01a0 03 .byte 0x3
2103 01a1 92 .byte 0x92 2103 01a1 93 .byte 0x93
2104 01a2 2C010000 .4byte 0x12c 2104 01a2 2C010000 .4byte 0x12c
2105 01a6 0C .uleb128 0xc 2105 01a6 0C .uleb128 0xc
2106 01a7 20 .byte 0x20 2106 01a7 20 .byte 0x20
2107 01a8 03 .byte 0x3 2107 01a8 03 .byte 0x3
2108 01a9 9A .byte 0x9a 2108 01a9 9B .byte 0x9b
2109 01aa 1F020000 .4byte 0x21f 2109 01aa 1F020000 .4byte 0x21f
2110 01ae 09 .uleb128 0x9 2110 01ae 09 .uleb128 0x9
2111 01af FB020000 .4byte .LASF39 2111 01af FB020000 .4byte .LASF39
2112 01b3 03 .byte 0x3 2112 01b3 03 .byte 0x3
2113 01b4 9B .byte 0x9b 2113 01b4 9C .byte 0x9c
2114 01b5 8B000000 .4byte 0x8b 2114 01b5 8B000000 .4byte 0x8b
2115 01b9 02 .byte 0x2 2115 01b9 02 .byte 0x2
2116 01ba 23 .byte 0x23 2116 01ba 23 .byte 0x23
@ -2925,7 +2925,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2118 01bc 0D .uleb128 0xd 2118 01bc 0D .uleb128 0xd
2119 01bd 72756E00 .string "run" 2119 01bd 72756E00 .string "run"
2120 01c1 03 .byte 0x3 2120 01c1 03 .byte 0x3
2121 01c2 9C .byte 0x9c 2121 01c2 9D .byte 0x9d
2122 01c3 8B000000 .4byte 0x8b 2122 01c3 8B000000 .4byte 0x8b
2123 01c7 02 .byte 0x2 2123 01c7 02 .byte 0x2
2124 01c8 23 .byte 0x23 2124 01c8 23 .byte 0x23
@ -2933,18 +2933,18 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2126 01ca 09 .uleb128 0x9 2126 01ca 09 .uleb128 0x9
2127 01cb DC010000 .4byte .LASF40 2127 01cb DC010000 .4byte .LASF40
2128 01cf 03 .byte 0x3 2128 01cf 03 .byte 0x3
2129 01d0 9D .byte 0x9d 2129 01d0 9E .byte 0x9e
2130 01d1 8B000000 .4byte 0x8b 2130 01d1 8B000000 .4byte 0x8b
2131 01d5 02 .byte 0x2 2131 01d5 02 .byte 0x2
2132 01d6 23 .byte 0x23 2132 01d6 23 .byte 0x23
2133 01d7 08 .uleb128 0x8 2133 01d7 08 .uleb128 0x8
BFIN GAS /tmp/cc0Jz34x.s page 50 BFIN GAS /tmp/cckPfsBl.s page 50
2134 01d8 09 .uleb128 0x9 2134 01d8 09 .uleb128 0x9
2135 01d9 85000000 .4byte .LASF41 2135 01d9 85000000 .4byte .LASF41
2136 01dd 03 .byte 0x3 2136 01dd 03 .byte 0x3
2137 01de 9E .byte 0x9e 2137 01de 9F .byte 0x9f
2138 01df 8B000000 .4byte 0x8b 2138 01df 8B000000 .4byte 0x8b
2139 01e3 02 .byte 0x2 2139 01e3 02 .byte 0x2
2140 01e4 23 .byte 0x23 2140 01e4 23 .byte 0x23
@ -2952,7 +2952,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2142 01e6 0D .uleb128 0xd 2142 01e6 0D .uleb128 0xd
2143 01e7 65727200 .string "err" 2143 01e7 65727200 .string "err"
2144 01eb 03 .byte 0x3 2144 01eb 03 .byte 0x3
2145 01ec 9F .byte 0x9f 2145 01ec A0 .byte 0xa0
2146 01ed 80000000 .4byte 0x80 2146 01ed 80000000 .4byte 0x80
2147 01f1 02 .byte 0x2 2147 01f1 02 .byte 0x2
2148 01f2 23 .byte 0x23 2148 01f2 23 .byte 0x23
@ -2960,7 +2960,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2150 01f4 09 .uleb128 0x9 2150 01f4 09 .uleb128 0x9
2151 01f5 C0000000 .4byte .LASF42 2151 01f5 C0000000 .4byte .LASF42
2152 01f9 03 .byte 0x3 2152 01f9 03 .byte 0x3
2153 01fa A0 .byte 0xa0 2153 01fa A1 .byte 0xa1
2154 01fb 8B000000 .4byte 0x8b 2154 01fb 8B000000 .4byte 0x8b
2155 01ff 02 .byte 0x2 2155 01ff 02 .byte 0x2
2156 0200 23 .byte 0x23 2156 0200 23 .byte 0x23
@ -2968,7 +2968,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2158 0202 09 .uleb128 0x9 2158 0202 09 .uleb128 0x9
2159 0203 75020000 .4byte .LASF43 2159 0203 75020000 .4byte .LASF43
2160 0207 03 .byte 0x3 2160 0207 03 .byte 0x3
2161 0208 A1 .byte 0xa1 2161 0208 A2 .byte 0xa2
2162 0209 8B000000 .4byte 0x8b 2162 0209 8B000000 .4byte 0x8b
2163 020d 02 .byte 0x2 2163 020d 02 .byte 0x2
2164 020e 23 .byte 0x23 2164 020e 23 .byte 0x23
@ -2976,7 +2976,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2166 0210 09 .uleb128 0x9 2166 0210 09 .uleb128 0x9
2167 0211 B2030000 .4byte .LASF44 2167 0211 B2030000 .4byte .LASF44
2168 0215 03 .byte 0x3 2168 0215 03 .byte 0x3
2169 0216 A2 .byte 0xa2 2169 0216 A3 .byte 0xa3
2170 0217 8B000000 .4byte 0x8b 2170 0217 8B000000 .4byte 0x8b
2171 021b 02 .byte 0x2 2171 021b 02 .byte 0x2
2172 021c 23 .byte 0x23 2172 021c 23 .byte 0x23
@ -2985,7 +2985,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2175 021f 05 .uleb128 0x5 2175 021f 05 .uleb128 0x5
2176 0220 EC030000 .4byte .LASF45 2176 0220 EC030000 .4byte .LASF45
2177 0224 03 .byte 0x3 2177 0224 03 .byte 0x3
2178 0225 A3 .byte 0xa3 2178 0225 A4 .byte 0xa4
2179 0226 A6010000 .4byte 0x1a6 2179 0226 A6010000 .4byte 0x1a6
2180 022a 0C .uleb128 0xc 2180 022a 0C .uleb128 0xc
2181 022b 0C .byte 0xc 2181 022b 0C .byte 0xc
@ -2998,7 +2998,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2188 0238 47 .byte 0x47 2188 0238 47 .byte 0x47
2189 0239 8B000000 .4byte 0x8b 2189 0239 8B000000 .4byte 0x8b
2190 023d 02 .byte 0x2 2190 023d 02 .byte 0x2
BFIN GAS /tmp/cc0Jz34x.s page 51 BFIN GAS /tmp/cckPfsBl.s page 51
2191 023e 23 .byte 0x23 2191 023e 23 .byte 0x23
@ -3058,7 +3058,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2245 02aa 01 .byte 0x1 2245 02aa 01 .byte 0x1
2246 02ab 57 .byte 0x57 2246 02ab 57 .byte 0x57
2247 02ac 75020000 .4byte 0x275 2247 02ac 75020000 .4byte 0x275
BFIN GAS /tmp/cc0Jz34x.s page 52 BFIN GAS /tmp/cckPfsBl.s page 52
2248 02b0 2B000000 .4byte .LLST1 2248 02b0 2B000000 .4byte .LLST1
@ -3118,7 +3118,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2302 0334 01 .byte 0x1 2302 0334 01 .byte 0x1
2303 0335 A101 .2byte 0x1a1 2303 0335 A101 .2byte 0x1a1
2304 0337 1A030000 .4byte .L38 2304 0337 1A030000 .4byte .L38
BFIN GAS /tmp/cc0Jz34x.s page 53 BFIN GAS /tmp/cckPfsBl.s page 53
2305 033b 1C .uleb128 0x1c 2305 033b 1C .uleb128 0x1c
@ -3178,7 +3178,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2359 03c0 A5 .byte 0xa5 2359 03c0 A5 .byte 0xa5
2360 03c1 75000000 .4byte 0x75 2360 03c1 75000000 .4byte 0x75
2361 03c5 65030000 .4byte .LLST10 2361 03c5 65030000 .4byte .LLST10
BFIN GAS /tmp/cc0Jz34x.s page 54 BFIN GAS /tmp/cckPfsBl.s page 54
2362 03c9 1F .uleb128 0x1f 2362 03c9 1F .uleb128 0x1f
@ -3238,7 +3238,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2416 0443 48040000 .4byte 0x448 2416 0443 48040000 .4byte 0x448
2417 0447 00 .byte 0x0 2417 0447 00 .byte 0x0
2418 0448 23 .uleb128 0x23 2418 0448 23 .uleb128 0x23
BFIN GAS /tmp/cc0Jz34x.s page 55 BFIN GAS /tmp/cckPfsBl.s page 55
2419 0449 4D040000 .4byte 0x44d 2419 0449 4D040000 .4byte 0x44d
@ -3298,7 +3298,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2473 04c7 82030000 .4byte .LASF68 2473 04c7 82030000 .4byte .LASF68
2474 04cb 01 .byte 0x1 2474 04cb 01 .byte 0x1
2475 04cc 4C .byte 0x4c 2475 04cc 4C .byte 0x4c
BFIN GAS /tmp/cc0Jz34x.s page 56 BFIN GAS /tmp/cckPfsBl.s page 56
2476 04cd D7040000 .4byte 0x4d7 2476 04cd D7040000 .4byte 0x4d7
@ -3358,7 +3358,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2530 0027 00 .byte 0x0 2530 0027 00 .byte 0x0
2531 0028 00 .byte 0x0 2531 0028 00 .byte 0x0
2532 0029 04 .uleb128 0x4 2532 0029 04 .uleb128 0x4
BFIN GAS /tmp/cc0Jz34x.s page 57 BFIN GAS /tmp/cckPfsBl.s page 57
2533 002a 24 .uleb128 0x24 2533 002a 24 .uleb128 0x24
@ -3418,7 +3418,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2587 0060 00 .byte 0x0 2587 0060 00 .byte 0x0
2588 0061 00 .byte 0x0 2588 0061 00 .byte 0x0
2589 0062 09 .uleb128 0x9 2589 0062 09 .uleb128 0x9
BFIN GAS /tmp/cc0Jz34x.s page 58 BFIN GAS /tmp/cckPfsBl.s page 58
2590 0063 0D .uleb128 0xd 2590 0063 0D .uleb128 0xd
@ -3478,7 +3478,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2644 0099 49 .uleb128 0x49 2644 0099 49 .uleb128 0x49
2645 009a 13 .uleb128 0x13 2645 009a 13 .uleb128 0x13
2646 009b 38 .uleb128 0x38 2646 009b 38 .uleb128 0x38
BFIN GAS /tmp/cc0Jz34x.s page 59 BFIN GAS /tmp/cckPfsBl.s page 59
2647 009c 0A .uleb128 0xa 2647 009c 0A .uleb128 0xa
@ -3538,7 +3538,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2701 00d2 40 .uleb128 0x40 2701 00d2 40 .uleb128 0x40
2702 00d3 06 .uleb128 0x6 2702 00d3 06 .uleb128 0x6
2703 00d4 01 .uleb128 0x1 2703 00d4 01 .uleb128 0x1
BFIN GAS /tmp/cc0Jz34x.s page 60 BFIN GAS /tmp/cckPfsBl.s page 60
2704 00d5 13 .uleb128 0x13 2704 00d5 13 .uleb128 0x13
@ -3598,7 +3598,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2758 010b 01 .uleb128 0x1 2758 010b 01 .uleb128 0x1
2759 010c 40 .uleb128 0x40 2759 010c 40 .uleb128 0x40
2760 010d 06 .uleb128 0x6 2760 010d 06 .uleb128 0x6
BFIN GAS /tmp/cc0Jz34x.s page 61 BFIN GAS /tmp/cckPfsBl.s page 61
2761 010e 01 .uleb128 0x1 2761 010e 01 .uleb128 0x1
@ -3658,7 +3658,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2815 0144 06 .uleb128 0x6 2815 0144 06 .uleb128 0x6
2816 0145 00 .byte 0x0 2816 0145 00 .byte 0x0
2817 0146 00 .byte 0x0 2817 0146 00 .byte 0x0
BFIN GAS /tmp/cc0Jz34x.s page 62 BFIN GAS /tmp/cckPfsBl.s page 62
2818 0147 1A .uleb128 0x1a 2818 0147 1A .uleb128 0x1a
@ -3718,7 +3718,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2872 017d 13 .uleb128 0x13 2872 017d 13 .uleb128 0x13
2873 017e 2F .uleb128 0x2f 2873 017e 2F .uleb128 0x2f
2874 017f 0B .uleb128 0xb 2874 017f 0B .uleb128 0xb
BFIN GAS /tmp/cc0Jz34x.s page 63 BFIN GAS /tmp/cckPfsBl.s page 63
2875 0180 00 .byte 0x0 2875 0180 00 .byte 0x0
@ -3778,7 +3778,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2929 01b6 49 .uleb128 0x49 2929 01b6 49 .uleb128 0x49
2930 01b7 13 .uleb128 0x13 2930 01b7 13 .uleb128 0x13
2931 01b8 1C .uleb128 0x1c 2931 01b8 1C .uleb128 0x1c
BFIN GAS /tmp/cc0Jz34x.s page 64 BFIN GAS /tmp/cckPfsBl.s page 64
2932 01b9 0B .uleb128 0xb 2932 01b9 0B .uleb128 0xb
@ -3838,7 +3838,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
2986 000a EA040000 .4byte 0x4ea 2986 000a EA040000 .4byte 0x4ea
2987 000e 8C020000 .4byte 0x28c 2987 000e 8C020000 .4byte 0x28c
2988 0012 6C353032 .string "l502_cmd_test" 2988 0012 6C353032 .string "l502_cmd_test"
BFIN GAS /tmp/cc0Jz34x.s page 65 BFIN GAS /tmp/cckPfsBl.s page 65
2988 5F636D64 2988 5F636D64
@ -3898,7 +3898,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
3040 0090 00000000 .4byte 0x0 3040 0090 00000000 .4byte 0x0
3041 0094 00000000 .4byte 0x0 3041 0094 00000000 .4byte 0x0
3042 .section .debug_str,"MS",@progbits,1 3042 .section .debug_str,"MS",@progbits,1
BFIN GAS /tmp/cc0Jz34x.s page 66 BFIN GAS /tmp/cckPfsBl.s page 66
3043 .LASF46: 3043 .LASF46:
@ -3958,7 +3958,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
3068 20696E74 3068 20696E74
3068 00 3068 00
3069 .LASF21: 3069 .LASF21:
BFIN GAS /tmp/cc0Jz34x.s page 67 BFIN GAS /tmp/cckPfsBl.s page 67
3070 00a1 4C353032 .string "L502_BF_ERR_UNSUP_CMD" 3070 00a1 4C353032 .string "L502_BF_ERR_UNSUP_CMD"
@ -4018,7 +4018,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
3091 .LASF50: 3091 .LASF50:
3092 017d 665F7370 .string "f_spi_test" 3092 017d 665F7370 .string "f_spi_test"
3092 695F7465 3092 695F7465
BFIN GAS /tmp/cc0Jz34x.s page 68 BFIN GAS /tmp/cckPfsBl.s page 68
3092 737400 3092 737400
@ -4078,7 +4078,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
3116 0236 4C353032 .string "L502_BF_CMD_TEST_GET_RESULT" 3116 0236 4C353032 .string "L502_BF_CMD_TEST_GET_RESULT"
3116 5F42465F 3116 5F42465F
3116 434D445F 3116 434D445F
BFIN GAS /tmp/cc0Jz34x.s page 69 BFIN GAS /tmp/cckPfsBl.s page 69
3116 54455354 3116 54455354
@ -4138,7 +4138,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
3145 .LASF54: 3145 .LASF54:
3146 02d4 665F7370 .string "f_sport_test" 3146 02d4 665F7370 .string "f_sport_test"
3146 6F72745F 3146 6F72745F
BFIN GAS /tmp/cc0Jz34x.s page 70 BFIN GAS /tmp/cckPfsBl.s page 70
3146 74657374 3146 74657374
@ -4198,7 +4198,7 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
3170 73745F70 3170 73745F70
3170 61727300 3170 61727300
3171 .LASF16: 3171 .LASF16:
BFIN GAS /tmp/cc0Jz34x.s page 71 BFIN GAS /tmp/cckPfsBl.s page 71
3172 038e 4C353032 .string "L502_BF_CMD_TEST_SPORT" 3172 038e 4C353032 .string "L502_BF_CMD_TEST_SPORT"
@ -4248,19 +4248,19 @@ BFIN GAS /tmp/cc0Jz34x.s page 1
3190 434D445F 3190 434D445F
3190 4F564552 3190 4F564552
3191 .ident "GCC: (ADI-2014R1-RC2) 4.3.5" 3191 .ident "GCC: (ADI-2014R1-RC2) 4.3.5"
BFIN GAS /tmp/cc0Jz34x.s page 72 BFIN GAS /tmp/cckPfsBl.s page 72
DEFINED SYMBOLS DEFINED SYMBOLS
*ABS*:0000000000000000 src/l502_tests.c *ABS*:0000000000000000 src/l502_tests.c
/tmp/cc0Jz34x.s:13 .text:0000000000000000 _l502_cmd_test /tmp/cckPfsBl.s:13 .text:0000000000000000 _l502_cmd_test
/tmp/cc0Jz34x.s:1308 .data:0000000000000000 _f_cur_test_ind /tmp/cckPfsBl.s:1308 .data:0000000000000000 _f_cur_test_ind
/tmp/cc0Jz34x.s:1314 .rodata:0000000000000000 _f_test_pars /tmp/cckPfsBl.s:1314 .rodata:0000000000000000 _f_test_pars
/tmp/cc0Jz34x.s:1330 .bss:0000000000001000 _f_test_res /tmp/cckPfsBl.s:1330 .bss:0000000000001000 _f_test_res
/tmp/cc0Jz34x.s:395 .text:000000000000023c _f_spi_test /tmp/cckPfsBl.s:395 .text:000000000000023c _f_spi_test
/tmp/cc0Jz34x.s:498 .text:00000000000002c0 _f_sdram_test /tmp/cckPfsBl.s:498 .text:00000000000002c0 _f_sdram_test
/tmp/cc0Jz34x.s:1104 .text:00000000000005fc _f_sport_test /tmp/cckPfsBl.s:1104 .text:00000000000005fc _f_sport_test
/tmp/cc0Jz34x.s:1328 .bss:0000000000000000 _rx_buf.2224 /tmp/cckPfsBl.s:1328 .bss:0000000000000000 _rx_buf.2224
UNDEFINED SYMBOLS UNDEFINED SYMBOLS
_g_mode _g_mode

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
BFIN GAS /tmp/ccQKVwPF.s page 1 BFIN GAS /tmp/ccaL3Mci.s page 1
1 .file "src/main.c"; 1 .file "src/main.c";
@ -31,8 +31,8 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
9:src/main.c **** 9:src/main.c ****
10:src/main.c **** void stream_proc(void); 10:src/main.c **** void stream_proc(void);
11:src/main.c **** 11:src/main.c ****
12:src/main.c **** /* g_state <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 12:src/main.c **** /* g_state описывает область памяти, расположенную по фикс
13:src/main.c **** * <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> A <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 13:src/main.c **** * Для расположения в начало банка A данных используем <20>
14:src/main.c **** SECTION("board_state", volatile t_l502_board_state g_state); 14:src/main.c **** SECTION("board_state", volatile t_l502_board_state g_state);
15:src/main.c **** 15:src/main.c ****
16:src/main.c **** 16:src/main.c ****
@ -40,25 +40,25 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
16 .loc 1 17 0 16 .loc 1 17 0
17 0000 00E80300 LINK 12; 17 0000 00E80300 LINK 12;
18 .LCFI0: 18 .LCFI0:
18:src/main.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 18:src/main.c **** /* Инициализация интерфейсов */
19:src/main.c **** l502_init(); 19:src/main.c **** l502_init();
19 .loc 1 19 0 19 .loc 1 19 0
20 0004 FFE3FEFF call _l502_init; 20 0004 FFE3FEFF call _l502_init;
21 .L2: 21 .L2:
20:src/main.c **** 20:src/main.c ****
21:src/main.c **** for (;;) { 21:src/main.c **** for (;;) {
22:src/main.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 22:src/main.c **** /* проверяем наличие команды от ПК и начинаяем
23:src/main.c **** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> */ 23:src/main.c **** обработку, если она есть */
24:src/main.c **** l502_cmd_check_req(); 24:src/main.c **** l502_cmd_check_req();
22 .loc 1 24 0 22 .loc 1 24 0
23 0008 FFE3FCFF call _l502_cmd_check_req; 23 0008 FFE3FCFF call _l502_cmd_check_req;
25:src/main.c **** /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ 25:src/main.c **** /* обработка потоков данных */
26:src/main.c **** stream_proc(); 26:src/main.c **** stream_proc();
24 .loc 1 26 0 24 .loc 1 26 0
25 000c FFE3FAFF call _stream_proc; 25 000c FFE3FAFF call _stream_proc;
26 0010 FC2F jump.s .L2; 26 0010 FC2F jump.s .L2;
27 .LFE2: 27 .LFE2:
BFIN GAS /tmp/ccQKVwPF.s page 2 BFIN GAS /tmp/ccaL3Mci.s page 2
28 .size _main, .-_main 28 .size _main, .-_main
@ -118,7 +118,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
78 000f 12000000 .4byte .LFE2-.Ltext0 78 000f 12000000 .4byte .LFE2-.Ltext0
79 0013 0200 .2byte 0x2 79 0013 0200 .2byte 0x2
80 0015 7F .byte 0x7f 80 0015 7F .byte 0x7f
BFIN GAS /tmp/ccQKVwPF.s page 3 BFIN GAS /tmp/ccaL3Mci.s page 3
81 0016 08 .sleb128 8 81 0016 08 .sleb128 8
@ -178,7 +178,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
135 0069 02 .uleb128 0x2 135 0069 02 .uleb128 0x2
136 006a 04 .byte 0x4 136 006a 04 .byte 0x4
137 006b 07 .byte 0x7 137 006b 07 .byte 0x7
BFIN GAS /tmp/ccQKVwPF.s page 4 BFIN GAS /tmp/ccaL3Mci.s page 4
138 006c 92010000 .4byte .LASF8 138 006c 92010000 .4byte .LASF8
@ -201,12 +201,12 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
155 008c 05 .uleb128 0x5 155 008c 05 .uleb128 0x5
156 008d 1010 .2byte 0x1010 156 008d 1010 .2byte 0x1010
157 008f 03 .byte 0x3 157 008f 03 .byte 0x3
158 0090 8B .byte 0x8b 158 0090 8C .byte 0x8c
159 0091 EA000000 .4byte 0xea 159 0091 EA000000 .4byte 0xea
160 0095 06 .uleb128 0x6 160 0095 06 .uleb128 0x6
161 0096 ED000000 .4byte .LASF12 161 0096 ED000000 .4byte .LASF12
162 009a 03 .byte 0x3 162 009a 03 .byte 0x3
163 009b 8C .byte 0x8c 163 009b 8D .byte 0x8d
164 009c 3A000000 .4byte 0x3a 164 009c 3A000000 .4byte 0x3a
165 00a0 02 .byte 0x2 165 00a0 02 .byte 0x2
166 00a1 23 .byte 0x23 166 00a1 23 .byte 0x23
@ -214,7 +214,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
168 00a3 06 .uleb128 0x6 168 00a3 06 .uleb128 0x6
169 00a4 0B010000 .4byte .LASF13 169 00a4 0B010000 .4byte .LASF13
170 00a8 03 .byte 0x3 170 00a8 03 .byte 0x3
171 00a9 8D .byte 0x8d 171 00a9 8E .byte 0x8e
172 00aa 3A000000 .4byte 0x3a 172 00aa 3A000000 .4byte 0x3a
173 00ae 02 .byte 0x2 173 00ae 02 .byte 0x2
174 00af 23 .byte 0x23 174 00af 23 .byte 0x23
@ -222,7 +222,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
176 00b1 06 .uleb128 0x6 176 00b1 06 .uleb128 0x6
177 00b2 F2000000 .4byte .LASF14 177 00b2 F2000000 .4byte .LASF14
178 00b6 03 .byte 0x3 178 00b6 03 .byte 0x3
179 00b7 8E .byte 0x8e 179 00b7 8F .byte 0x8f
180 00b8 5E000000 .4byte 0x5e 180 00b8 5E000000 .4byte 0x5e
181 00bc 02 .byte 0x2 181 00bc 02 .byte 0x2
182 00bd 23 .byte 0x23 182 00bd 23 .byte 0x23
@ -230,7 +230,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
184 00bf 06 .uleb128 0x6 184 00bf 06 .uleb128 0x6
185 00c0 06000000 .4byte .LASF15 185 00c0 06000000 .4byte .LASF15
186 00c4 03 .byte 0x3 186 00c4 03 .byte 0x3
187 00c5 8F .byte 0x8f 187 00c5 90 .byte 0x90
188 00c6 4C000000 .4byte 0x4c 188 00c6 4C000000 .4byte 0x4c
189 00ca 02 .byte 0x2 189 00ca 02 .byte 0x2
190 00cb 23 .byte 0x23 190 00cb 23 .byte 0x23
@ -238,10 +238,10 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
192 00cd 06 .uleb128 0x6 192 00cd 06 .uleb128 0x6
193 00ce 7C000000 .4byte .LASF16 193 00ce 7C000000 .4byte .LASF16
194 00d2 03 .byte 0x3 194 00d2 03 .byte 0x3
BFIN GAS /tmp/ccQKVwPF.s page 5 BFIN GAS /tmp/ccaL3Mci.s page 5
195 00d3 90 .byte 0x90 195 00d3 91 .byte 0x91
196 00d4 5E000000 .4byte 0x5e 196 00d4 5E000000 .4byte 0x5e
197 00d8 02 .byte 0x2 197 00d8 02 .byte 0x2
198 00d9 23 .byte 0x23 198 00d9 23 .byte 0x23
@ -249,7 +249,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
200 00db 06 .uleb128 0x6 200 00db 06 .uleb128 0x6
201 00dc 2A010000 .4byte .LASF17 201 00dc 2A010000 .4byte .LASF17
202 00e0 03 .byte 0x3 202 00e0 03 .byte 0x3
203 00e1 91 .byte 0x91 203 00e1 92 .byte 0x92
204 00e2 EA000000 .4byte 0xea 204 00e2 EA000000 .4byte 0xea
205 00e6 02 .byte 0x2 205 00e6 02 .byte 0x2
206 00e7 23 .byte 0x23 206 00e7 23 .byte 0x23
@ -268,7 +268,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
219 00fe 03 .uleb128 0x3 219 00fe 03 .uleb128 0x3
220 00ff 6E000000 .4byte .LASF18 220 00ff 6E000000 .4byte .LASF18
221 0103 03 .byte 0x3 221 0103 03 .byte 0x3
222 0104 92 .byte 0x92 222 0104 93 .byte 0x93
223 0105 8C000000 .4byte 0x8c 223 0105 8C000000 .4byte 0x8c
224 0109 0A .uleb128 0xa 224 0109 0A .uleb128 0xa
225 010a 20 .byte 0x20 225 010a 20 .byte 0x20
@ -298,7 +298,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
249 0134 AB010000 .4byte 0x1ab 249 0134 AB010000 .4byte 0x1ab
250 0138 02 .byte 0x2 250 0138 02 .byte 0x2
251 0139 23 .byte 0x23 251 0139 23 .byte 0x23
BFIN GAS /tmp/ccQKVwPF.s page 6 BFIN GAS /tmp/ccaL3Mci.s page 6
252 013a 08 .uleb128 0x8 252 013a 08 .uleb128 0x8
@ -358,7 +358,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
306 0199 02 .byte 0x2 306 0199 02 .byte 0x2
307 019a 23 .byte 0x23 307 019a 23 .byte 0x23
308 019b 1A .uleb128 0x1a 308 019b 1A .uleb128 0x1a
BFIN GAS /tmp/ccQKVwPF.s page 7 BFIN GAS /tmp/ccaL3Mci.s page 7
309 019c 06 .uleb128 0x6 309 019c 06 .uleb128 0x6
@ -418,7 +418,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
363 01fb 07 .uleb128 0x7 363 01fb 07 .uleb128 0x7
364 01fc AD010000 .4byte 0x1ad 364 01fc AD010000 .4byte 0x1ad
365 0200 0B020000 .4byte 0x20b 365 0200 0B020000 .4byte 0x20b
BFIN GAS /tmp/ccQKVwPF.s page 8 BFIN GAS /tmp/ccaL3Mci.s page 8
366 0204 0D .uleb128 0xd 366 0204 0D .uleb128 0xd
@ -478,7 +478,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
420 026f 00000000 .4byte _g_state 420 026f 00000000 .4byte _g_state
421 0273 10 .uleb128 0x10 421 0273 10 .uleb128 0x10
422 0274 3D020000 .4byte 0x23d 422 0274 3D020000 .4byte 0x23d
BFIN GAS /tmp/ccQKVwPF.s page 9 BFIN GAS /tmp/ccaL3Mci.s page 9
423 0278 00 .byte 0x0 423 0278 00 .byte 0x0
@ -538,7 +538,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
477 0034 00 .byte 0x0 477 0034 00 .byte 0x0
478 0035 00 .byte 0x0 478 0035 00 .byte 0x0
479 0036 05 .uleb128 0x5 479 0036 05 .uleb128 0x5
BFIN GAS /tmp/ccQKVwPF.s page 10 BFIN GAS /tmp/ccaL3Mci.s page 10
480 0037 13 .uleb128 0x13 480 0037 13 .uleb128 0x13
@ -598,7 +598,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
534 006d 0A .uleb128 0xa 534 006d 0A .uleb128 0xa
535 006e 13 .uleb128 0x13 535 006e 13 .uleb128 0x13
536 006f 01 .byte 0x1 536 006f 01 .byte 0x1
BFIN GAS /tmp/ccQKVwPF.s page 11 BFIN GAS /tmp/ccaL3Mci.s page 11
537 0070 0B .uleb128 0xb 537 0070 0B .uleb128 0xb
@ -658,7 +658,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
591 00a6 49 .uleb128 0x49 591 00a6 49 .uleb128 0x49
592 00a7 13 .uleb128 0x13 592 00a7 13 .uleb128 0x13
593 00a8 11 .uleb128 0x11 593 00a8 11 .uleb128 0x11
BFIN GAS /tmp/ccQKVwPF.s page 12 BFIN GAS /tmp/ccaL3Mci.s page 12
594 00a9 01 .uleb128 0x1 594 00a9 01 .uleb128 0x1
@ -718,7 +718,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
646 0018 00000000 .4byte 0x0 646 0018 00000000 .4byte 0x0
647 001c 00000000 .4byte 0x0 647 001c 00000000 .4byte 0x0
648 .section .debug_str,"MS",@progbits,1 648 .section .debug_str,"MS",@progbits,1
BFIN GAS /tmp/ccQKVwPF.s page 13 BFIN GAS /tmp/ccaL3Mci.s page 13
649 .LASF27: 649 .LASF27:
@ -778,7 +778,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
678 6500 678 6500
679 .LASF1: 679 .LASF1:
680 0086 756E7369 .string "unsigned char" 680 0086 756E7369 .string "unsigned char"
BFIN GAS /tmp/ccQKVwPF.s page 14 BFIN GAS /tmp/ccaL3Mci.s page 14
680 676E6564 680 676E6564
@ -838,7 +838,7 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
706 0118 78636E74 .string "xcnt" 706 0118 78636E74 .string "xcnt"
706 00 706 00
707 .LASF5: 707 .LASF5:
BFIN GAS /tmp/ccQKVwPF.s page 15 BFIN GAS /tmp/ccaL3Mci.s page 15
708 011d 696E7433 .string "int32_t" 708 011d 696E7433 .string "int32_t"
@ -887,13 +887,13 @@ BFIN GAS /tmp/ccQKVwPF.s page 1
728 6D61696E 728 6D61696E
728 2E6300 728 2E6300
729 .ident "GCC: (ADI-2014R1-RC2) 4.3.5" 729 .ident "GCC: (ADI-2014R1-RC2) 4.3.5"
BFIN GAS /tmp/ccQKVwPF.s page 16 BFIN GAS /tmp/ccaL3Mci.s page 16
DEFINED SYMBOLS DEFINED SYMBOLS
*ABS*:0000000000000000 src/main.c *ABS*:0000000000000000 src/main.c
/tmp/ccQKVwPF.s:13 .text:0000000000000000 _main /tmp/ccaL3Mci.s:13 .text:0000000000000000 _main
/tmp/ccQKVwPF.s:34 board_state:0000000000000000 _g_state /tmp/ccaL3Mci.s:34 board_state:0000000000000000 _g_state
UNDEFINED SYMBOLS UNDEFINED SYMBOLS
_l502_init _l502_init

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -2,8 +2,8 @@
@addtogroup async_io @addtogroup async_io
@{ @{
@file l502_async.c @file l502_async.c
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Файл содержит реализацию функций для асинхронного ввода/вывода
(<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (пока только вывода)
******************************************************************************/ ******************************************************************************/
#include <stdlib.h> #include <stdlib.h>

View File

@ -1,11 +1,11 @@
/** @defgroup async_io <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD> */ /** @defgroup async_io Асинхронный ввод-вывод */
/***************************************************************************//** /***************************************************************************//**
@addtogroup async_io @addtogroup async_io
@{ @{
@file l502_async.h @file l502_async.h
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Файл содержит описания функций асинхронного ввода-вывода
******************************************************************************/ ******************************************************************************/
#ifndef L502_ASYNC_H_ #ifndef L502_ASYNC_H_
@ -13,30 +13,30 @@
#include <stdint.h> #include <stdint.h>
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> async_dac_out() */ /** Первый канал ЦАП при выводе через async_dac_out() */
#define L502_DAC_CH1 0 #define L502_DAC_CH1 0
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> async_dac_out() */ /** Второй канал ЦАП при выводе через async_dac_out() */
#define L502_DAC_CH2 1 #define L502_DAC_CH2 1
/***************************************************************************//** /***************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> @brief Асинхронный вывод на один из каналов ЦАП
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> Функция выполняет асинхронный вывод кода на ЦАП
@param[in] ch <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> (#L502_DAC_CH1 <EFBFBD><EFBFBD><EFBFBD> #L502_DAC_CH2) @param[in] ch Канал ЦАП (#L502_DAC_CH1 или #L502_DAC_CH2)
@param[in] val <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 16 <EFBFBD><EFBFBD><EFBFBD>) @param[in] val Код ЦАП (действительны только младшие 16 бит)
******************************************************************************/ ******************************************************************************/
void async_dac_out(uint8_t ch, int32_t val); void async_dac_out(uint8_t ch, int32_t val);
/***************************************************************************//** /***************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> @brief Асинхронный вывод на цифровые линии
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Функция выполняет асинхронный вывод кода на цифровые линии с возможностью указать
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> линии, которые не должны изменяться
@param[in] val <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0-15 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] val биты 0-15 - значения линий на вывод + возможно перевести
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 3-<2D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> половину портов в 3-е состояние с помощью флагов из
#t_l502_digout_word_flags #t_l502_digout_word_flags
@param[in] msk <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] msk Если в маске установлены некоторые биты, то соответствующие
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> val <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> биты из val не влияют, а сохраняются предыдущие значения
******************************************************************************/ ******************************************************************************/
void async_dout(uint32_t val, uint32_t msk); void async_dout(uint32_t val, uint32_t msk);

View File

@ -1,165 +1,166 @@
/*********************************************************************//** /*********************************************************************//**
@addtogroup cmd_process @addtogroup cmd_process
@{ @{
@file l502_bf_cmd_defs.h <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, @file l502_bf_cmd_defs.h Файл содержит определения,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20> DSP которые используются для передачи команд от ПК в DSP
(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) (определения команд, их параметров, результатов выполнения)
@date 28.03.2012 @date 28.03.2012
@author Borisov Alexey <borisov@lcard.ru> @author Borisov Alexey <borisov@lcard.ru>
*************************************************************************/ *************************************************************************/
#ifndef L502_BF_CMD_DEFS_H_ #ifndef L502_BF_CMD_DEFS_H_
#define L502_BF_CMD_DEFS_H_ #define L502_BF_CMD_DEFS_H_
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Максимальный размер данных, передавемых с командой в 32-битных словах */
#define L502_BF_CMD_DATA_SIZE_MAX (1024) #define L502_BF_CMD_DATA_SIZE_MAX (1024)
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Статус команд управления сигнальным процессором */
typedef enum { typedef enum {
L502_BF_CMD_STATUS_IDLE = 0x0, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */ L502_BF_CMD_STATUS_IDLE = 0x0, /**< Начальное состояние (команда вообщен не выполнялась) */
L502_BF_CMD_STATUS_REQ = 0x5A01, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>*/ L502_BF_CMD_STATUS_REQ = 0x5A01, /**< Передан запрос на обработку команды от ПК*/
L502_BF_CMD_STATUS_PROGRESS = 0x5A02, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_CMD_STATUS_PROGRESS = 0x5A02, /**< Сигнальный процессор начал обработку команды */
L502_BF_CMD_STATUS_DONE = 0x5A03 /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> ret_code */ L502_BF_CMD_STATUS_DONE = 0x5A03 /**< Команда выполнена. Результат выполнения в поле ret_code */
} t_l502_bf_cmd_status; } t_l502_bf_cmd_status;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Коды команд управления сигнальным процессором */
typedef enum { typedef enum {
L502_BF_CMD_CODE_TEST = 0x01, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>) */ L502_BF_CMD_CODE_TEST = 0x01, /**< Запуск теста (параметр определяет тип теста) */
L502_BF_CMD_CODE_SET_PARAM = 0x02, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> param) */ L502_BF_CMD_CODE_SET_PARAM = 0x02, /**< Установить параметр (код параметра в поле param) */
L502_BF_CMD_CODE_GET_PARAM = 0x03, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_CMD_CODE_GET_PARAM = 0x03, /**< Прочитать текущее значение параметра */
L502_BF_CMD_CODE_CONFIGURE = 0x04, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_CMD_CODE_CONFIGURE = 0x04, /**< Сконфигурировать модуль в соответствии с ранее установленными параметрами */
L502_BF_CMD_CODE_STREAM_EN = 0x05, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_CMD_CODE_STREAM_EN = 0x05, /**< Разрешение потоков ввода/вывода */
L502_BF_CMD_CODE_STREAM_DIS = 0x06, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_CMD_CODE_STREAM_DIS = 0x06, /**< Запрещение потоков ввода/вывода */
L502_BF_CMD_CODE_STREAM_START = 0x07, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_CMD_CODE_STREAM_START = 0x07, /**< Запуск потоков ввода/вывода */
L502_BF_CMD_CODE_STREAM_STOP = 0x08, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_CMD_CODE_STREAM_STOP = 0x08, /**< Останов потоков ввода/вывода */
L502_BF_CMD_CODE_PRELOAD = 0x09, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> */ L502_BF_CMD_CODE_PRELOAD = 0x09, /**< Предзагрузка данных на ЦАП */
L502_BF_CMD_CODE_ASYNC_OUT = 0x10, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */ L502_BF_CMD_CODE_ASYNC_OUT = 0x10, /**< Асинхронный вывод (куда - зависит от параметра) */
L502_BF_CMD_CODE_ASYNC_DIG_IN = 0x11, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_CMD_CODE_ASYNC_DIG_IN = 0x11, /**< Асинхронный ввод с цифровых линий */
L502_BF_CMD_CODE_ADC_GET_FRAME = 0x12, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ L502_BF_CMD_CODE_ADC_GET_FRAME = 0x12, /**< Асинхронный ввод карда АЦП */
L502_BF_CMD_CODE_FPGA_REG_WR = 0x13, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FPGA (param --- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, data0 --- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */ L502_BF_CMD_CODE_FPGA_REG_WR = 0x13, /**< Запись в регистр FPGA (param --- адрес регистра, data0 --- значение) */
L502_BF_CMD_CODE_FPGA_REG_RD = 0x14, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FPGA (param --- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>: resp0 --- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */ L502_BF_CMD_CODE_FPGA_REG_RD = 0x14, /**< Чтение из регистра FPGA (param --- адрес регистра, ответ: resp0 --- значение) */
L502_BF_CMD_CODE_GET_OUT_STATUS= 0x15, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_CMD_CODE_GET_OUT_STATUS= 0x15, /**< Получение флагов статуса вывода */
} t_l502_bf_cmd_code; } t_l502_bf_cmd_code;
#define L502_BF_CMD_CODE_USER 0x8000U /**< <EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ #define L502_BF_CMD_CODE_USER 0x8000U /**< Код, с которого начинаются пользовательские команды */
#define BF_CMD_USER_MULT 0x8001U
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** @brief Варианты тестов
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #L502_BF_CMD_CODE_TEST */ Коды тестов, передающиеся в параметре команды #L502_BF_CMD_CODE_TEST */
typedef enum { typedef enum {
L502_BF_CMD_TEST_STOP = 0x00, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_CMD_TEST_STOP = 0x00, /**< Останов выполняемого теста */
L502_BF_CMD_TEST_GET_RESULT = 0x01, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_CMD_TEST_GET_RESULT = 0x01, /**< Получение результата теста */
L502_BF_CMD_TEST_ECHO = 0x10, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_CMD_TEST_ECHO = 0x10, /**< Тест эхо - возвращает те же данные что передавались */
L502_BF_CMD_TEST_SPORT = 0x11, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_CMD_TEST_SPORT = 0x11, /**< Тест интерфейса SPORT в кольцевом режиме */
L502_BF_CMD_TEST_SDRAM = 0x12, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_CMD_TEST_SDRAM = 0x12, /**< Тест SDRAM памяти */
L502_BF_CMD_TEST_SPI = 0x13 /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPI */ L502_BF_CMD_TEST_SPI = 0x13 /**< Тест интерфейса SPI */
} t_l502_bf_test_code; } t_l502_bf_test_code;
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** @brief Устанавливаемые параметры
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #L502_BF_CMD_CODE_SET_PARAM <EFBFBD><EFBFBD><EFBFBD> Коды пареметров, устанавливаемых командой #L502_BF_CMD_CODE_SET_PARAM или
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #L502_BF_CMD_CODE_GET_PARAM */ получаемых с помщью команды #L502_BF_CMD_CODE_GET_PARAM */
typedef enum { typedef enum {
L502_BF_PARAM_FIRM_VERSION = 0x00, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 4 <20><><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_PARAM_FIRM_VERSION = 0x00, /**< Версия прошивки - 4 байта */
L502_BF_PARAM_STREAM_MODE = 0x01, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>) */ L502_BF_PARAM_STREAM_MODE = 0x01, /**< Режим работы (запущен поток или нет) */
L502_BF_PARAM_ENABLED_STREAMS = 0x02, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_PARAM_ENABLED_STREAMS = 0x02, /**< Какие потоки разрешены */
L502_BF_PARAM_MODULE_INFO = 0x03, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_PARAM_MODULE_INFO = 0x03, /**< Запись информации о модуле */
L502_BF_PARAM_IN_BUF_SIZE = 0x10, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_PARAM_IN_BUF_SIZE = 0x10, /**< Размер буфера на преием */
L502_BF_PARAM_CYCLE_BUF_SIZE = 0x11, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_PARAM_CYCLE_BUF_SIZE = 0x11, /**< Размер буфера для записи циклического сигнала */
L502_BF_PARAM_LCH_CNT = 0x20, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_PARAM_LCH_CNT = 0x20, /**< Количество логических каналов в таблице */
L502_BF_PARAM_LCH = 0x21, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_PARAM_LCH = 0x21, /**< Параметры логического канала */
L502_BF_PARAM_ADC_FREQ_DIV = 0x22, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ L502_BF_PARAM_ADC_FREQ_DIV = 0x22, /**< Делитель частоты АЦП */
L502_BF_PARAM_REF_FREQ_SRC = 0x23, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_PARAM_REF_FREQ_SRC = 0x23, /**< Выбор опорной частоты */
L502_BF_PARAM_ADC_FRAME_DELAY = 0x24, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_PARAM_ADC_FRAME_DELAY = 0x24, /**< Значение межкадровой задержки */
L502_BF_PARAM_SYNC_MODE = 0x25, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_PARAM_SYNC_MODE = 0x25, /**< Режим синхронизации */
L502_BF_PARAM_SYNC_START_MODE = 0x26, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_PARAM_SYNC_START_MODE = 0x26, /**< Условие запуска синхронных потоков сбора данных */
L502_BF_PARAM_ADC_COEF = 0x27, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ L502_BF_PARAM_ADC_COEF = 0x27, /**< Установка коэффициентов для заданного диапазона АЦП */
L502_BF_PARAM_DAC_COEF = 0x28, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ L502_BF_PARAM_DAC_COEF = 0x28, /**< Установка коэффициентов для заданного канала ЦАП */
L502_BF_PARAM_DIN_FREQ_DIV = 0x30, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_PARAM_DIN_FREQ_DIV = 0x30, /**< Делитель частоты цифрового ввода */
L502_BF_PARAM_DAC_FREQ_DIV = 0x31, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> */ L502_BF_PARAM_DAC_FREQ_DIV = 0x31, /**< Делитель частоты вывода на ЦАП */
L502_BF_PARAM_IN_STEP_SIZE = 0x32, /**< <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_PARAM_IN_STEP_SIZE = 0x32, /**< Шаг для обработки входных данных */
L502_BF_PARAM_IN_STREAM_MODE = 0x100 /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> */ L502_BF_PARAM_IN_STREAM_MODE = 0x100 /**< Режим работы потока на ввод */
} t_l502_bf_params; } t_l502_bf_params;
/** @brief <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** @brief Тип асинхронного вывода
<EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #L502_BF_CMD_CODE_ASYNC_OUT, Код, задающий в параметре команды команды #L502_BF_CMD_CODE_ASYNC_OUT,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ куда должно выводится передаваемое значение */
typedef enum { typedef enum {
L502_BF_CMD_ASYNC_TYPE_DOUT = 0x0, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_CMD_ASYNC_TYPE_DOUT = 0x0, /**< Вывод на цифровые линии */
L502_BF_CMD_ASYNC_TYPE_DAC1 = 0x1, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ L502_BF_CMD_ASYNC_TYPE_DAC1 = 0x1, /**< Вывод на первый канал ЦАП */
L502_BF_CMD_ASYNC_TYPE_DAC2 = 0x2 /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ L502_BF_CMD_ASYNC_TYPE_DAC2 = 0x2 /**< Вывод на второй канал ЦАП */
} t_l502_bf_cmd_async_type; } t_l502_bf_cmd_async_type;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Коды завершения команд */
typedef enum { typedef enum {
L502_BF_ERR_SUCCESS = 0, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_ERR_SUCCESS = 0, /**< Команда выполнена успешно */
L502_BF_ERR_FIRST_CODE = -512, /**< <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. L502_BF_ERR_FIRST_CODE = -512, /**< Код ошибки, с которого начинаются отсальные коды.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> Используется, чтобы разделить на верхнем уровне ошибки библиотеки и
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ возвращенные сигнальным процессором */
L502_BF_ERR_UNSUP_CMD = -512, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_ERR_UNSUP_CMD = -512, /**< Неизвестный код команды */
L502_BF_ERR_CMD_OVERRUN = -513, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_ERR_CMD_OVERRUN = -513, /**< Пришла команда до того, как была завершена предыдущая */
L502_BF_ERR_INVALID_CMD_PARAMS = -514, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_ERR_INVALID_CMD_PARAMS = -514, /**< Неверное значение параметра команды */
L502_BF_ERR_INSUF_CMD_DATA = -515, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_ERR_INSUF_CMD_DATA = -515, /**< Недостаточное кол-во данных передано с командой */
L502_BF_ERR_STREAM_RUNNING = -516, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_ERR_STREAM_RUNNING = -516, /**< Команда не допустима при запущеном сборе, а сбор запущен */
L502_BF_ERR_STREAM_STOPPED = -517, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_ERR_STREAM_STOPPED = -517, /**< Команда допустима только при запущеном сборе, а сбор остановлен */
L502_BF_ERR_NO_TEST_IN_PROGR = -518, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_ERR_NO_TEST_IN_PROGR = -518, /**< Сейчас не выполняется никакого теста */
L502_BF_ERR_TEST_VALUE = -519 /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_ERR_TEST_VALUE = -519 /**< Считано неверное значение при выполнении теста */
} t_l502_bf_err_code; } t_l502_bf_err_code;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Режим работы сигнального процессора */
typedef enum { typedef enum {
L502_BF_MODE_IDLE = 0, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_MODE_IDLE = 0, /**< Ждущий режим, поток не запущен */
L502_BF_MODE_STREAM = 1, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_MODE_STREAM = 1, /**< Запущены потоки ввода-вывода */
L502_BF_MODE_TEST = 2 /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ L502_BF_MODE_TEST = 2 /**< Тестовый режим */
} t_l502_bf_mode; } t_l502_bf_mode;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> blackfin */ /** Возможности, поддерживаемые прошивкой blackfin */
typedef enum { typedef enum {
L502_BF_FEATURE_FPGA_REG_ACCESS = 0x1, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> L502_BF_FEATURE_FPGA_REG_ACCESS = 0x1, /**< Признак, что реализованы команды
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FPGA */ прямого доступа к регистрам FPGA */
L502_BF_FEATURE_OUT_STATUS_FLAGS = 0x2 /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> L502_BF_FEATURE_OUT_STATUS_FLAGS = 0x2 /**< Признак, что реализована команда
#L502_BF_CMD_CODE_GET_OUT_STATUS */ #L502_BF_CMD_CODE_GET_OUT_STATUS */
} t_l502_bf_features; } t_l502_bf_features;
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** @brief Параметры команды
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BlackFin, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Структура описывает расположение полей в области памяти BlackFin, используемой
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ для передачи команд между персональным компьютером и сигнальным процессором */
typedef struct { typedef struct {
uint16_t code; /**< <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> #t_l502_bf_cmd_code */ uint16_t code; /**< Код команды из #t_l502_bf_cmd_code */
uint16_t status; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint16_t status; /**< Статус выполнения - в обработчике не изменяется */
uint32_t param; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint32_t param; /**< Параметр команды */
int32_t result; /**< <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ int32_t result; /**< Код результата выполнения команды */
uint32_t data_size; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint32_t data_size; /**< Количество данных, переданных с командой или возвращенных с ответом в 32-битных словах */
uint32_t data[L502_BF_CMD_DATA_SIZE_MAX]; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>/<2F><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint32_t data[L502_BF_CMD_DATA_SIZE_MAX]; /**< Данные, передаваемые с командой и/или в качестве результата */
} t_l502_bf_cmd; } t_l502_bf_cmd;
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> /** @brief Результат выполнения теста
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Структура описывает параметры выполняемого теста, возвращаемые в качестве
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #L502_BF_CMD_CODE_TEST <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> данных на команду #L502_BF_CMD_CODE_TEST с параметром
#L502_BF_CMD_TEST_GET_RESULT */ #L502_BF_CMD_TEST_GET_RESULT */
typedef struct { typedef struct {
uint32_t test; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ uint32_t test; /**< Номер выполняемого теста */
uint32_t run; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */ uint32_t run; /**< Признак, запущен ли сейчас тест */
uint32_t stage; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ uint32_t stage; /**< Этап выполнения теста */
uint32_t cntr; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */ uint32_t cntr; /**< Счетчик - сколько раз прошел тест */
int32_t err; /**< <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ int32_t err; /**< Код ошибки выполнения теста */
uint32_t last_addr; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ uint32_t last_addr; /**< Последний используемый адрес */
uint32_t last_wr; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint32_t last_wr; /**< Последнее записанное значение */
uint32_t last_rd; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint32_t last_rd; /**< Последнее считанное значение */
} t_l502_bf_test_res; } t_l502_bf_test_res;
/** @} */ /** @} */

View File

@ -1,32 +1,32 @@
/** @file l502_cdefs.h /** @file l502_cdefs.h
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Файл определяет набор макросов для выполнения операций, зависящий от
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (VisualDSP <EFBFBD><EFBFBD><EFBFBD> GCC) */ компилятора (VisualDSP или GCC) */
#ifndef L502_CDEFS_H #ifndef L502_CDEFS_H
#define L502_CDEFS_H #define L502_CDEFS_H
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Макрос для помещения переменной или функции в определенную секцию */
#ifdef __GNUC__ #ifdef __GNUC__
#define SECTION(sect, member) member __attribute__((section(sect))) #define SECTION(sect, member) member __attribute__((section(sect)))
#else #else
#define SECTION(sect, member) section(sect) member #define SECTION(sect, member) section(sect) member
#endif #endif
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM */ /** Марос для помещения переменной в неинициализируемую область SDRAM */
#ifdef __GNUC__ #ifdef __GNUC__
#define MEM_SDRAM_NOINIT(variable) SECTION(".sdram_noinit", variable) #define MEM_SDRAM_NOINIT(variable) SECTION(".sdram_noinit", variable)
#else #else
#define MEM_SDRAM_NOINIT(variable) section("sdram_noinit", NO_INIT) variable #define MEM_SDRAM_NOINIT(variable) section("sdram_noinit", NO_INIT) variable
#endif #endif
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Макрос для описания обработчика прерываний */
#ifdef __GNUC__ #ifdef __GNUC__
#define ISR(handler) __attribute__((interrupt_handler,nesting)) void handler(void) #define ISR(handler) __attribute__((interrupt_handler,nesting)) void handler(void)
#else #else
#define ISR(handler) EX_INTERRUPT_HANDLER(handler) #define ISR(handler) EX_INTERRUPT_HANDLER(handler)
#endif #endif
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Макрос для регистрации обработчика прерываний */
#ifdef __GNUC__ #ifdef __GNUC__
#define REGISTER_ISR(ivg, isr) do { \ #define REGISTER_ISR(ivg, isr) do { \
int i=0; \ int i=0; \

View File

@ -2,12 +2,12 @@
@addtogroup cmd_process @addtogroup cmd_process
@{ @{
@file l502_cmd.c @file l502_cmd.c
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> Файл содержит логику обработки команд от ПК, переданных через
HostDMA <EFBFBD> BlackFin. HostDMA в BlackFin.
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> f_cmd_tbl <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> Для каждого кода команды в таблице f_cmd_tbl задана функция для
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, обработки команды. Если в таблице код команды не найден,
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> то возвращается ошибка. Для пользовательских команд
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> usr_cmd_process(). всегда вызывается usr_cmd_process().
*******************************************************************************/ *******************************************************************************/
#include "l502_global.h" #include "l502_global.h"
@ -41,7 +41,7 @@ static void f_cmd_fpga_reg_rd(t_l502_bf_cmd *cmd);
static void f_cmd_get_out_status(t_l502_bf_cmd *cmd); static void f_cmd_get_out_status(t_l502_bf_cmd *cmd);
/* <EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* Тип, описывающий функцию обработки конкретной команды */
typedef void (*t_cmd_func)(t_l502_bf_cmd* cmd); typedef void (*t_cmd_func)(t_l502_bf_cmd* cmd);
static const uint32_t f_regaddr_k[L502_ADC_RANGE_CNT] = {L502_REGS_IOARITH_K10, static const uint32_t f_regaddr_k[L502_ADC_RANGE_CNT] = {L502_REGS_IOARITH_K10,
@ -61,7 +61,7 @@ static const uint32_t f_regaddr_offs[L502_ADC_RANGE_CNT] = {L502_REGS_IOARITH_B1
static volatile uint8_t f_cmd_req=0; static volatile uint8_t f_cmd_req=0;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* таблица с соответствием кодов команд и функций для их выполнения */
static const struct { static const struct {
uint32_t cmd_code; uint32_t cmd_code;
t_cmd_func start; t_cmd_func start;
@ -205,9 +205,9 @@ static void f_cmd_get_out_status(t_l502_bf_cmd *cmd) {
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. /* Установка различных параметров.
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> cmd->param, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> cmd->data Код параметра определяется по cmd->param, значение берется из cmd->data
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ в соответствии с параметром */
static void f_cmd_set_param(t_l502_bf_cmd *cmd) { static void f_cmd_set_param(t_l502_bf_cmd *cmd) {
int32_t err = g_mode != L502_BF_MODE_IDLE ? L502_BF_ERR_STREAM_RUNNING : int32_t err = g_mode != L502_BF_MODE_IDLE ? L502_BF_ERR_STREAM_RUNNING :
cmd->data_size < 1 ? L502_BF_ERR_INSUF_CMD_DATA : 0; cmd->data_size < 1 ? L502_BF_ERR_INSUF_CMD_DATA : 0;
@ -227,7 +227,7 @@ static void f_cmd_set_param(t_l502_bf_cmd *cmd) {
err = params_set_lch_cnt(cmd->data[0]); err = params_set_lch_cnt(cmd->data[0]);
break; break;
case L502_BF_PARAM_LCH: case L502_BF_PARAM_LCH:
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 0 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1 - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, 2 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 3 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 4 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* параметры: 0 - индекс, 1 - физ канал, 2 - режим, 3 - диапазон, 4 - усреденение */
if (cmd->data_size < 5) { if (cmd->data_size < 5) {
err = L502_BF_ERR_INSUF_CMD_DATA; err = L502_BF_ERR_INSUF_CMD_DATA;
} else { } else {
@ -369,6 +369,11 @@ static void f_cmd_get_param(t_l502_bf_cmd *cmd) {
cmd->data[0] = g_set.out_freq_div; cmd->data[0] = g_set.out_freq_div;
ret_size = 1; ret_size = 1;
break; break;
case 87: //for test purposes only!
cmd->data[0] = 0xADEF;
ret_size = 1;
break;
default: default:
err = L502_BF_ERR_INVALID_CMD_PARAMS; err = L502_BF_ERR_INVALID_CMD_PARAMS;
break; break;

View File

@ -1,12 +1,12 @@
/** @defgroup cmd_process <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> */ /** @defgroup cmd_process Обработка команд от ПК */
/***************************************************************************//** /***************************************************************************//**
@addtogroup cmd_process @addtogroup cmd_process
@{ @{
@file l502_cmd.h @file l502_cmd.h
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Файл содержит описания функций, которые используются для обработки команд
<EFBFBD><EFBFBD> <20><>. от ПК.
******************************************************************************/ ******************************************************************************/
@ -18,51 +18,51 @@
/***************************************************************************//** /***************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>. @brief Запуск обработки команды от ПК.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HDMA, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Функция начинает обработку команды от ПК, переданной по HDMA, вызывая нужный
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. обработчик по коду команды.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> l502_cmd_check_req() <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Вызывается из l502_cmd_check_req() при наличии запроса, но можно запустить
<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> g_state.cmd и из самой прошивки выполнение команды, заполнив поля в g_state.cmd
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> l502_cmd_start(). и вызвав l502_cmd_start().
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> l502_cmd_done(), <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Команда считается завершенной, когда будет вызвана l502_cmd_done(), которая
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> l502_cmd_start(), <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. может быть вызвана как из l502_cmd_start(), так и позже из другого места.
@param[in] cmd <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] cmd Структура, описывающая команду
******************************************************************************/ ******************************************************************************/
void l502_cmd_start(t_l502_bf_cmd* cmd); void l502_cmd_start(t_l502_bf_cmd* cmd);
/***************************************************************************//** /***************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> @brief Завершение выполнения команды от ПК
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Пометить комнду как завершенную, записав ее реультат и возвращаемые данные
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> data <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> g_state.cmd.data, <EFBFBD>.<2E>. в фиксированную область. Если data уже указывает на g_state.cmd.data, т.е.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> данные уже находятся в нужной памяти, то они копироваться не будут
@param[in] result <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] result Код завершения команды
@param[in] data <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] data Данные для ПК, возвращаемые командой
@param[in] size <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD> 32-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) @param[in] size Размер данных, возвращаемых командой (в 32-битных словах)
*******************************************************************************/ *******************************************************************************/
void l502_cmd_done(int32_t result, uint32_t* data, uint32_t size); void l502_cmd_done(int32_t result, uint32_t* data, uint32_t size);
/***************************************************************************//** /***************************************************************************//**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> * @brief Проверка наличия команды от ПК
* *
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * Функция проверяет, есть ли команда от ПК для которой не была начата обработка
* (<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> l502_cmd_set_req(), <EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> * (был вызов l502_cmd_set_req(), но еще не был соответствующий вызов
* l502_cmd_start()). * l502_cmd_start()).
* *
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> l502_cmd_start(). * Если есть необработанная команда, то для нее вызывается l502_cmd_start().
*******************************************************************************/ *******************************************************************************/
void l502_cmd_check_req(void); void l502_cmd_check_req(void);
/***************************************************************************//** /***************************************************************************//**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * @brief Установка флага, что есть необработанная команда
* *
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * Функция вызвается из прерывания от HostDMA в случае, если при этой операции
* HostDMA <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> * HostDMA была записана команда. Функция устанавливает флаг, который будет
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> l502_cmd_check_req(). * проверен уже из основной программы с помощью l502_cmd_check_req().
******************************************************************************/ ******************************************************************************/
void l502_cmd_set_req(void); void l502_cmd_set_req(void);

View File

@ -1,9 +1,9 @@
/*********************************************************************//** /*********************************************************************//**
@addtogroup config_params @addtogroup config_params
@{ @{
@file l502_defs.h <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, @file l502_defs.h Файл содержит определения,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BF, <20><><EFBFBD> <20> l502api, которые используются как программой BF, так и l502api,
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> l502api и кроме того видны программам, которые используют l502api
@date 28.03.2012 @date 28.03.2012
@author Borisov Alexey <borisov@lcard.ru> @author Borisov Alexey <borisov@lcard.ru>
*************************************************************************/ *************************************************************************/
@ -12,158 +12,158 @@
#define L502_GLOBAL_DEFS_H_ #define L502_GLOBAL_DEFS_H_
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/ /** Максимальное количество логических каналов в таблице*/
#define L502_LTABLE_MAX_CH_CNT 256 #define L502_LTABLE_MAX_CH_CNT 256
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Количество диапазон для измерения напряжений */
#define L502_ADC_RANGE_CNT 6 #define L502_ADC_RANGE_CNT 6
/** <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ /** Код АЦП, соответствующий максимальному значению шкалы */
#define L502_ADC_SCALE_CODE_MAX 6000000 #define L502_ADC_SCALE_CODE_MAX 6000000
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Минимальное значение делителя частоты синхронного вывода */
#define X502_OUT_FREQ_DIV_MIN 2 #define X502_OUT_FREQ_DIV_MIN 2
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Максимальное значение делителя частоты синхронного вывода */
#define X502_OUT_FREQ_DIV_MAX 1024 #define X502_OUT_FREQ_DIV_MAX 1024
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** Значение делителя частоты вывода по умолчанию (которое также всегда
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> L502 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 0.5) */ используется в L502 с версией прошивки ПЛИС ниже 0.5) */
#define X502_OUT_FREQ_DIV_DEFAULT 2 #define X502_OUT_FREQ_DIV_DEFAULT 2
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Максимальное значение для аппаратного устреднения по логическому каналу */
#define L502_LCH_AVG_SIZE_MAX 128 #define L502_LCH_AVG_SIZE_MAX 128
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ /** Максимальное значения делителя частоты АЦП */
#define L502_ADC_FREQ_DIV_MAX (1024*1024) #define L502_ADC_FREQ_DIV_MAX (1024*1024)
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ /** Максимальное значение делителя частоты синхронного цифрового ввода */
#define L502_DIN_FREQ_DIV_MAX (1024*1024) #define L502_DIN_FREQ_DIV_MAX (1024*1024)
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> */ /** Максимальное значение межкадровой задержки для АЦП */
#define L502_ADC_INTERFRAME_DELAY_MAX (0x1FFFFF) #define L502_ADC_INTERFRAME_DELAY_MAX (0x1FFFFF)
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Диапазон ЦАП в вольтах */
#define L502_DAC_RANGE 5. #define L502_DAC_RANGE 5.
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ /** Количество каналов ЦАП */
#define L502_DAC_CH_CNT 2 #define L502_DAC_CH_CNT 2
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Слово в потоке, означающее, что произошло переполнение */
#define L502_STREAM_IN_MSG_OVERFLOW 0x01010000 #define L502_STREAM_IN_MSG_OVERFLOW 0x01010000
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Флаги состояния для синхронного вывода */
typedef enum { typedef enum {
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */ /** Флаг указывает, что в настоящее время буфер в модуле на передачу пуст */
X502_OUT_STATUS_FLAG_BUF_IS_EMPTY = 0x01, X502_OUT_STATUS_FLAG_BUF_IS_EMPTY = 0x01,
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** Флаг указывает, что было опустошение буфера на вывод с начала старта синхронного
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ввода-вывода или с момента последнего чтения статуса с помощью
X502_OutGetStatusFlags() (<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */ X502_OutGetStatusFlags() (в зависимости от того, что было последним) */
X502_OUT_STATUS_FLAG_BUF_WAS_EMPTY = 0x02 X502_OUT_STATUS_FLAG_BUF_WAS_EMPTY = 0x02
} t_x502_out_status_flags; } t_x502_out_status_flags;
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. /** @brief Флаги для управления цифровыми выходами.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Флаги управления цифровыми выходами. Могут быть объединены через логическое
<EFBFBD><EFBFBD><EFBFBD>Ȕ <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> “ИЛИ” со значениями цифровых выходов при асинхронном выводе с помощью
L502_AsyncOutDig() <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> L502_PrepareData() <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.*/ L502_AsyncOutDig() или переданы в L502_PrepareData() при синхронном выводе.*/
typedef enum { typedef enum {
L502_DIGOUT_WORD_DIS_H = 0x00020000, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) L502_DIGOUT_WORD_DIS_H = 0x00020000, /**< Запрещение (перевод в третье состояние)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ старшей половины цифровых выходов */
L502_DIGOUT_WORD_DIS_L = 0x00010000 /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> L502_DIGOUT_WORD_DIS_L = 0x00010000 /**< Запрещение младшей половины
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ цифровых выходов */
} t_l502_digout_word_flags; } t_l502_digout_word_flags;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Константы для выбора опорной частоты */
typedef enum { typedef enum {
L502_REF_FREQ_2000KHZ = 2000000, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2<><32><EFBFBD> */ L502_REF_FREQ_2000KHZ = 2000000, /**< Частота 2МГц */
L502_REF_FREQ_1500KHZ = 1500000 /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1.5<EFBFBD><EFBFBD><EFBFBD> */ L502_REF_FREQ_1500KHZ = 1500000 /**< Частота 1.5МГц */
} t_l502_ref_freq; } t_l502_ref_freq;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ /** Диапазоны измерения для канала АЦП */
typedef enum { typedef enum {
L502_ADC_RANGE_10 = 0, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +/-10V */ L502_ADC_RANGE_10 = 0, /**< Диапазон +/-10V */
L502_ADC_RANGE_5 = 1, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +/-5V */ L502_ADC_RANGE_5 = 1, /**< Диапазон +/-5V */
L502_ADC_RANGE_2 = 2, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +/-2V */ L502_ADC_RANGE_2 = 2, /**< Диапазон +/-2V */
L502_ADC_RANGE_1 = 3, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +/-1V */ L502_ADC_RANGE_1 = 3, /**< Диапазон +/-1V */
L502_ADC_RANGE_05 = 4, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +/-0.5V */ L502_ADC_RANGE_05 = 4, /**< Диапазон +/-0.5V */
L502_ADC_RANGE_02 = 5 /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +/-0.2V */ L502_ADC_RANGE_02 = 5 /**< Диапазон +/-0.2V */
} t_l502_adc_range; } t_l502_adc_range;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Режим измерения для логического канала */
typedef enum { typedef enum {
L502_LCH_MODE_COMM = 0, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ L502_LCH_MODE_COMM = 0, /**< Измерение напряжения относительно общей земли */
L502_LCH_MODE_DIFF = 1, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_LCH_MODE_DIFF = 1, /**< Дифференциальное измерение напряжения */
L502_LCH_MODE_ZERO = 2 /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */ L502_LCH_MODE_ZERO = 2 /**< Измерение собственного нуля */
} t_l502_lch_mode; } t_l502_lch_mode;
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. /** @brief Режимы синхронизации.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Режимы задания источника частоты синхронизации и признака начала
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ синхронного ввода-вывода */
typedef enum { typedef enum {
L502_SYNC_INTERNAL = 0, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_SYNC_INTERNAL = 0, /**< Внутренний сигнал */
L502_SYNC_EXTERNAL_MASTER = 1, /**< <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_SYNC_EXTERNAL_MASTER = 1, /**< От внешнего мастера по разъему синхронизации */
L502_SYNC_DI_SYN1_RISE = 2, /**< <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DI_SYN1 */ L502_SYNC_DI_SYN1_RISE = 2, /**< По фронту сигнала DI_SYN1 */
L502_SYNC_DI_SYN2_RISE = 3, /**< <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DI_SYN2 */ L502_SYNC_DI_SYN2_RISE = 3, /**< По фронту сигнала DI_SYN2 */
L502_SYNC_DI_SYN1_FALL = 6, /**< <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DI_SYN1 */ L502_SYNC_DI_SYN1_FALL = 6, /**< По спаду сигнала DI_SYN1 */
L502_SYNC_DI_SYN2_FALL = 7 /**< <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DI_SYN2 */ L502_SYNC_DI_SYN2_FALL = 7 /**< По спаду сигнала DI_SYN2 */
} t_l502_sync_mode; } t_l502_sync_mode;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Флаги для обозначения синхронных потоков данных */
typedef enum { typedef enum {
L502_STREAM_ADC = 0x01, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> */ L502_STREAM_ADC = 0x01, /**< Поток данных от АЦП */
L502_STREAM_DIN = 0x02, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_STREAM_DIN = 0x02, /**< Поток данных с цифровых входов */
L502_STREAM_DAC1 = 0x10, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ L502_STREAM_DAC1 = 0x10, /**< Поток данных первого канала ЦАП */
L502_STREAM_DAC2 = 0x20, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ L502_STREAM_DAC2 = 0x20, /**< Поток данных второго канала ЦАП */
L502_STREAM_DOUT = 0x40, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ L502_STREAM_DOUT = 0x40, /**< Поток данных на цифровые выводы */
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> */ /** Объединение всех флагов, обозначающих потоки данных на ввод */
L502_STREAM_ALL_IN = L502_STREAM_ADC | L502_STREAM_DIN, L502_STREAM_ALL_IN = L502_STREAM_ADC | L502_STREAM_DIN,
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> */ /** Объединение всех флагов, обозначающих потоки данных на вывод */
L502_STREAM_ALL_OUT = L502_STREAM_DAC1 | L502_STREAM_DAC2 | L502_STREAM_DOUT L502_STREAM_ALL_OUT = L502_STREAM_DAC1 | L502_STREAM_DAC2 | L502_STREAM_DOUT
} t_l502_streams; } t_l502_streams;
#define L502_STREAM_OUT_WORD_TYPE_DOUT 0x0 /**< <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ #define L502_STREAM_OUT_WORD_TYPE_DOUT 0x0 /**< Тип передаваемого отсчета - цифровой вывод */
#define L502_STREAM_OUT_WORD_TYPE_DAC1 0x40000000 /**< <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD> 1-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ #define L502_STREAM_OUT_WORD_TYPE_DAC1 0x40000000 /**< Тип передаваемого отсчета - Код для 1-го канала ЦАП */
#define L502_STREAM_OUT_WORD_TYPE_DAC2 0x80000000 /**< <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD> 2-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ #define L502_STREAM_OUT_WORD_TYPE_DAC2 0x80000000 /**< Тип передаваемого отсчета - Код для 2-го канала ЦАП */
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> L502 */ /** Режим работы модуля L502 */
typedef enum { typedef enum {
L502_MODE_FPGA = 0, /**< <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> L502_MODE_FPGA = 0, /**< Все потоки данных передаются через ПЛИС минуя
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BlackFin */ сигнальный процессор BlackFin */
L502_MODE_DSP = 1, /**< <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> L502_MODE_DSP = 1, /**< Все потоки данных передаются через сигнальный
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> процессор, который должен быть загружен
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ прошивкой для обработки этих потоков */
L502_MODE_DEBUG = 2 /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ L502_MODE_DEBUG = 2 /**< Отладочный режим */
} t_l502_mode; } t_l502_mode;
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>. /** @brief Номера каналов ЦАП.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> L502_AsyncOutDac() */ Номер каналов ЦАП для указания в L502_AsyncOutDac() */
typedef enum { typedef enum {
L502_DAC_CH1 = 0, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ L502_DAC_CH1 = 0, /**< Первый канал ЦАП */
L502_DAC_CH2 = 1 /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ L502_DAC_CH2 = 1 /**< Второй канал ЦАП */
} t_l502_dac_ch; } t_l502_dac_ch;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Флаги, описывающие модуль */
typedef enum { typedef enum {
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ /** Признак наличия ЦАП */
L502_DEVFLAGS_DAC_PRESENT = 0x0001, L502_DEVFLAGS_DAC_PRESENT = 0x0001,
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Признак наличия гальваноразвязки */
L502_DEVFLAGS_GAL_PRESENT = 0x0002, L502_DEVFLAGS_GAL_PRESENT = 0x0002,
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Признак наличия сигнального процессора */
L502_DEVFLAGS_BF_PRESENT = 0x0004, L502_DEVFLAGS_BF_PRESENT = 0x0004,
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><> Flash-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Признак, что во Flash-памяти присутствует информация о модуле */
L502_DEVFLAGS_FLASH_DATA_VALID = 0x00010000, L502_DEVFLAGS_FLASH_DATA_VALID = 0x00010000,
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><> Flash-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** Признак, что во Flash-памяти присутствуют действительные калибровочные
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ коэффициенты АЦП */
L502_DEVFLAGS_FLASH_ADC_CALIBR_VALID = 0x00020000, L502_DEVFLAGS_FLASH_ADC_CALIBR_VALID = 0x00020000,
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><> Flash-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** Признак, что во Flash-памяти присутствуют действительные калибровочные
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ коэффициенты ЦАП */
L502_DEVFLAGS_FLASH_DAC_CALIBR_VALID = 0x00040000 L502_DEVFLAGS_FLASH_DAC_CALIBR_VALID = 0x00040000
} t_l502_devinfo_flags; } t_l502_devinfo_flags;

View File

@ -1,11 +1,11 @@
/** @addtogroup fpga_regs /** @addtogroup fpga_regs
@{ @{
@file l502_fpga.c @file l502_fpga.c
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Файл содержит логику передачи команд для чтения/записи регистров
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPI. ПЛИС по SPI.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fpga_spi_init(). Изначально SPI должен быть проинициализирован с помощью fpga_spi_init().
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fpga_reg_write(), <EFBFBD> После этого можно осуществлять запись с помощью fpga_reg_write(), а
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> fpga_reg_read(). */ чтение с помощью fpga_reg_read(). */
#include <cdefBF523.h> #include <cdefBF523.h>
@ -17,14 +17,14 @@
static uint16_t f_spi_rw(uint16_t word) { static uint16_t f_spi_rw(uint16_t word) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* если в было принято уже слово - то читаем его, чтобы освободить буфер приема */
if (*pSPI_STAT & RXS) { if (*pSPI_STAT & RXS) {
volatile uint16_t dummy; volatile uint16_t dummy;
dummy = *pSPI_RDBR; dummy = *pSPI_RDBR;
} }
*pSPI_TDBR = word; *pSPI_TDBR = word;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ /* ждем пока примем новое слово */
while (!(*pSPI_STAT&RXS)) { while (!(*pSPI_STAT&RXS)) {
continue; continue;
} }
@ -34,9 +34,9 @@ static uint16_t f_spi_rw(uint16_t word) {
void fpga_spi_init(void) { void fpga_spi_init(void) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPI */ /* настройка SPI */
*pSPI_BAUD = 2; /* SPI CLK = 132.5/(2*2) = 33.125 */ *pSPI_BAUD = 2; /* SPI CLK = 132.5/(2*2) = 33.125 */
*pSPI_CTL = SPE | MSTR | SIZE | GM | TDBR_CORE; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, MSB first, 16-bit, CPHA=0, CPOL=0 */ *pSPI_CTL = SPE | MSTR | SIZE | GM | TDBR_CORE; /* Мастер, MSB first, 16-bit, CPHA=0, CPOL=0 */
*pSPI_FLG = FLS1; *pSPI_FLG = FLS1;
*pPORTG_MUX = (*pPORTG_MUX & 0xFFFC) | 2; *pPORTG_MUX = (*pPORTG_MUX & 0xFFFC) | 2;

View File

@ -1,10 +1,10 @@
/** @defgroup fpga_regs <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */ /** @defgroup fpga_regs Доступ к регистрам ПЛИС */
/***************************************************************************//** /***************************************************************************//**
@addtogroup fpga_regs @addtogroup fpga_regs
@{ @{
@file l502_fpga.h @file l502_fpga.h
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> Файл содержит функции для записи и чтения регистров ПЛИС по интерфейсу АЦП
*******************************************************************************/ *******************************************************************************/
@ -14,16 +14,16 @@
#include <stdint.h> #include <stdint.h>
#include "l502_fpga_regs.h" #include "l502_fpga_regs.h"
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Инициализация SPI интерфейса */
void fpga_spi_init(void); void fpga_spi_init(void);
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPI /** Запись регистра в регистр ПЛИС значения по интерфейсу SPI
@param[in] addr <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> @param[in] addr Адрес регистра ПЛИС
@param[in] value <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @param[in] value Записываемое значение */
void fpga_reg_write(uint16_t addr, uint32_t value); void fpga_reg_write(uint16_t addr, uint32_t value);
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPI /** Чтение значения из регистра ПЛИС по интерфейсу SPI
@param[in] addr <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> @param[in] addr Адрес регистра ПЛИС
@return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Прочитанное значение */
uint32_t fpga_reg_read(uint16_t addr); uint32_t fpga_reg_read(uint16_t addr);
#endif #endif

View File

@ -17,7 +17,7 @@
#define L502_BF_CMD_HDMA_RST 0x0008 #define L502_BF_CMD_HDMA_RST 0x0008
/********************* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> EEPROM *************************/ /********************* Адреса регистров блока EEPROM *************************/
#define L502_REGS_EEPROM_BLOCK 0x0100 #define L502_REGS_EEPROM_BLOCK 0x0100
#define L502_REGS_EEPROM_SET_RD_ADDR (L502_REGS_EEPROM_BLOCK + 0) #define L502_REGS_EEPROM_SET_RD_ADDR (L502_REGS_EEPROM_BLOCK + 0)
@ -34,18 +34,18 @@
#define L502_REGS_HARD_ID (L502_REGS_EEPROM_BLOCK + 0xA) #define L502_REGS_HARD_ID (L502_REGS_EEPROM_BLOCK + 0xA)
#define L502_REGS_JEDEC_RD_ID (L502_REGS_EEPROM_BLOCK + 0xB) #define L502_REGS_JEDEC_RD_ID (L502_REGS_EEPROM_BLOCK + 0xB)
/********************* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> **************/ /********************* Адреса регистров с отладочной информацией **************/
#define L502_REGS_DBG_BLOCK 0x0140 #define L502_REGS_DBG_BLOCK 0x0140
#define L502_REGS_DBG_EVENTS (L502_REGS_DBG_BLOCK + 0) #define L502_REGS_DBG_EVENTS (L502_REGS_DBG_BLOCK + 0)
#define L502_REGS_DBG_LAST_ABORT_ADDR (L502_REGS_DBG_BLOCK + 8) #define L502_REGS_DBG_LAST_ABORT_ADDR (L502_REGS_DBG_BLOCK + 8)
#define L502_REGS_DBG_LAST_NACK_ADDR (L502_REGS_DBG_BLOCK + 9) #define L502_REGS_DBG_LAST_NACK_ADDR (L502_REGS_DBG_BLOCK + 9)
#define L502_REGS_DBG_LINK_REPLAY_CNT (L502_REGS_DBG_BLOCK + 10) #define L502_REGS_DBG_LINK_REPLAY_CNT (L502_REGS_DBG_BLOCK + 10)
/********************* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> IOHARD **************************/ /********************* Адреса регистров блока IOHARD **************************/
#define L502_REGS_IOHARD_BLOCK 0x0200 #define L502_REGS_IOHARD_BLOCK 0x0200
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Control Table //Адрес Control Table
#define L502_REGS_IOHARD_LTABLE (L502_REGS_IOHARD_BLOCK+0) #define L502_REGS_IOHARD_LTABLE (L502_REGS_IOHARD_BLOCK+0)
#define L502_REGS_IOHARD_LTABLE_MAX_SIZE 0x100 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Control Table #define L502_REGS_IOHARD_LTABLE_MAX_SIZE 0x100 // Максимальный размер Control Table
#define L502_REGS_IOHARD_LCH_CNT (L502_REGS_IOHARD_BLOCK+0x100) #define L502_REGS_IOHARD_LCH_CNT (L502_REGS_IOHARD_BLOCK+0x100)
#define L502_REGS_IOHARD_ADC_FREQ_DIV (L502_REGS_IOHARD_BLOCK+0x102) #define L502_REGS_IOHARD_ADC_FREQ_DIV (L502_REGS_IOHARD_BLOCK+0x102)
@ -62,7 +62,7 @@
/********************* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> IOARITH **************************/ /********************* Адреса регистров блока IOARITH **************************/
#define L502_REGS_IOARITH_BLOCK 0x0400 #define L502_REGS_IOARITH_BLOCK 0x0400
#define L502_REGS_IOARITH_B10 L502_REGS_IOARITH_BLOCK #define L502_REGS_IOARITH_B10 L502_REGS_IOARITH_BLOCK
#define L502_REGS_IOARITH_B5 (L502_REGS_IOARITH_BLOCK+0x01) #define L502_REGS_IOARITH_B5 (L502_REGS_IOARITH_BLOCK+0x01)
@ -81,7 +81,7 @@
#define L502_REGS_IOARITH_DIN_ASYNC (L502_REGS_IOARITH_BLOCK+0x1A) #define L502_REGS_IOARITH_DIN_ASYNC (L502_REGS_IOARITH_BLOCK+0x1A)
/********************* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BlackFin'<EFBFBD><EFBFBD> **********/ /********************* Адреса регистров блока управления BlackFin'ом **********/
#define L502_REGS_BF_CTL_BLOCK 0 #define L502_REGS_BF_CTL_BLOCK 0
#define L502_REGS_BF_CTL (L502_REGS_BF_CTL_BLOCK+0) #define L502_REGS_BF_CTL (L502_REGS_BF_CTL_BLOCK+0)
#define L502_REGS_BF_CMD (L502_REGS_BF_CTL_BLOCK+1) #define L502_REGS_BF_CMD (L502_REGS_BF_CTL_BLOCK+1)
@ -96,7 +96,7 @@
#define L502_BF_REQ_DATA_SIZE_MIN 8 #define L502_BF_REQ_DATA_SIZE_MIN 8
/********************* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> DMA *****************************/ /********************* Адреса регистров блока DMA *****************************/
#define L502_REGS_DMA_CTL_BLOCK 0x700 #define L502_REGS_DMA_CTL_BLOCK 0x700
#define L502_REGS_DMA_CAP (L502_REGS_DMA_CTL_BLOCK) #define L502_REGS_DMA_CAP (L502_REGS_DMA_CTL_BLOCK)
#define L502_REGS_DMA_EN (L502_REGS_DMA_CTL_BLOCK+1) #define L502_REGS_DMA_EN (L502_REGS_DMA_CTL_BLOCK+1)
@ -110,7 +110,7 @@
#define L502_DMA_CHNUM_IN 0 #define L502_DMA_CHNUM_IN 0
#define L502_DMA_CHNUM_OUT 1 #define L502_DMA_CHNUM_OUT 1
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA */ /* номер регистра, с которого начинаются параметры канала DMA */
#define L502_REGS_DMA_CH_PARAMS(ch) (0x800 + L502_REGS_DMA_CH_PARAMS_SIZE*ch) #define L502_REGS_DMA_CH_PARAMS(ch) (0x800 + L502_REGS_DMA_CH_PARAMS_SIZE*ch)
#define L502_REGS_DMA_CH_CTL(ch) (L502_REGS_DMA_CH_PARAMS(ch) + 0) #define L502_REGS_DMA_CH_CTL(ch) (L502_REGS_DMA_CH_PARAMS(ch) + 0)
#define L502_REGS_DMA_CH_CMP_CNTR(ch) (L502_REGS_DMA_CH_PARAMS(ch) + 1) #define L502_REGS_DMA_CH_CMP_CNTR(ch) (L502_REGS_DMA_CH_PARAMS(ch) + 1)
@ -119,7 +119,7 @@
#define L502_REGS_DMA_CH_PC_POS(ch) (L502_REGS_DMA_CH_PARAMS(ch) + 4) #define L502_REGS_DMA_CH_PC_POS(ch) (L502_REGS_DMA_CH_PARAMS(ch) + 4)
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <EFBFBD><EFBFBD><EFBFBD> */ /* адреса для регистров страниц DMA АЦП */
#define L502_REGS_DMA_CH_PAGES(ch) (L502_REGS_DMA_CH_PARAMS(ch) + 16) #define L502_REGS_DMA_CH_PAGES(ch) (L502_REGS_DMA_CH_PARAMS(ch) + 16)
#define L502_REGS_DMA_CH_PAGE_ADDRL(ch,n) (L502_REGS_DMA_CH_PAGES(ch) + 4*(n)) #define L502_REGS_DMA_CH_PAGE_ADDRL(ch,n) (L502_REGS_DMA_CH_PAGES(ch) + 4*(n))
#define L502_REGS_DMA_CH_PAGE_ADDRH(ch,n) (L502_REGS_DMA_CH_PAGES(ch) + 4*(n)+1) #define L502_REGS_DMA_CH_PAGE_ADDRH(ch,n) (L502_REGS_DMA_CH_PAGES(ch) + 4*(n)+1)
@ -136,7 +136,7 @@
#define L502_REGBIT_BF_STATUS_BUSY_Msk (1UL << L502_REGBIT_BF_STATUS_BUSY_Pos) #define L502_REGBIT_BF_STATUS_BUSY_Msk (1UL << L502_REGBIT_BF_STATUS_BUSY_Pos)
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* описание отдельных битов регистров */
#define L502_REGBIT_DMA_CTL_PACK_SIZE_Pos 0 #define L502_REGBIT_DMA_CTL_PACK_SIZE_Pos 0
#define L502_REGBIT_DMA_CTL_PACK_SIZE_Msk (0xFFUL << L502_REGBIT_DMA_CTL_PACK_SIZE_Pos) #define L502_REGBIT_DMA_CTL_PACK_SIZE_Msk (0xFFUL << L502_REGBIT_DMA_CTL_PACK_SIZE_Pos)

View File

@ -1,13 +1,13 @@
/** @defgroup global_defs <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** @defgroup global_defs Фиксированная область памяти */
/***************************************************************************//** /***************************************************************************//**
@addtogroup global_defs @addtogroup global_defs
@{ @{
@file l502_global.h @file l502_global.h
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Файл содержит определение структур, описывающих область памяти
BlackFin <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: BlackFin с фиксированными адресами:
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA - Структуры дескрипторов для передачи потоков данных по HostDMA
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20> BlackFin - Структру для передачи команд от ПК к BlackFin
*******************************************************************************/ *******************************************************************************/
#ifndef L502_GLOBAL_H_ #ifndef L502_GLOBAL_H_
@ -17,58 +17,58 @@
#include "l502_bf_cmd_defs.h" #include "l502_bf_cmd_defs.h"
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BlackFin */ /** Версия прошивки BlackFin */
#define L502_BF_FIRM_VERSION 0x00000002 #define L502_BF_FIRM_VERSION 0x00000002
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Дополнительные возможности, реализованные в прошивке */
#define L502_BF_FIRM_FEATURES (L502_BF_FEATURE_FPGA_REG_ACCESS | L502_BF_FEATURE_OUT_STATUS_FLAGS) #define L502_BF_FIRM_FEATURES (L502_BF_FEATURE_FPGA_REG_ACCESS | L502_BF_FEATURE_OUT_STATUS_FLAGS)
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA */ /** Структура дескриптора для передачи потока по HostDMA */
typedef struct { typedef struct {
uint32_t flags; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint32_t flags; /**< Флаги */
uint32_t full_size; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint32_t full_size; /**< Полный размер передачи */
void* addr; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ void* addr; /**< Начальный адрес данных для передачи */
uint16_t xcnt; /**< <EFBFBD><EFBFBD><EFBFBD>-<2D><> 16-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ uint16_t xcnt; /**< Кол-во 16-разрядных слов в одном передаваемом блоке */
uint16_t xmod; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint16_t xmod; /**< Модификатор указателя */
uint16_t ycnt; /**< <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint16_t ycnt; /**< Не используется */
uint16_t ymod; /**< <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint16_t ymod; /**< Не используется */
void* next_descr; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ void* next_descr; /**< Указатель на следующий дескриптор */
uint16_t id; /**< id-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint16_t id; /**< id-номер дескриптора */
uint16_t valid; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint16_t valid; /**< Признак действительности */
uint32_t udata; /**< <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint32_t udata; /**< Доп данные */
} t_hdma_stream_descr; } t_hdma_stream_descr;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (Bf-><EFBFBD><EFBFBD>) */ /** Максимальное количество дескрипторов на передачу данных (Bf->ПК) */
#define L502_IN_HDMA_DESCR_CNT (31) #define L502_IN_HDMA_DESCR_CNT (31)
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>->Bf) */ /** Максимальное количество дескрипторов на прием данных (ПК->Bf) */
#define L502_OUT_HDMA_DESCR_CNT (31) #define L502_OUT_HDMA_DESCR_CNT (31)
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HDMA /** @brief Описание массива дескрипторов HDMA
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HostDMA <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Структура описывает расположение дескрипторов HostDMA для организации
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> BlackFin <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, потока данных между BlackFin и персональным компьютером как на передачу,
<EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> */ так и на прием */
typedef struct { typedef struct {
t_hdma_stream_descr in_lb; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> */ t_hdma_stream_descr in_lb; /**< Последний выполненный дескриптор на ввод */
t_hdma_stream_descr in[L502_IN_HDMA_DESCR_CNT]; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> */ t_hdma_stream_descr in[L502_IN_HDMA_DESCR_CNT]; /**< Список дескрипторов на ввод */
t_hdma_stream_descr out_lb; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> */ t_hdma_stream_descr out_lb; /**< Последний выполненный дескриптор на вывод */
t_hdma_stream_descr out[L502_OUT_HDMA_DESCR_CNT]; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> */ t_hdma_stream_descr out[L502_OUT_HDMA_DESCR_CNT]; /**< Список дескрипторов на вывод */
} t_hdma_descr_arr; } t_hdma_descr_arr;
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** @brief Описание фиксированной области памяти
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Структура описывает данные в памяти сигнального процессора, которые должны
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ быть расположены по фиксированным адресам */
typedef struct { typedef struct {
t_hdma_descr_arr hdma; /**< 0xFF800000 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HDMA*/ t_hdma_descr_arr hdma; /**< 0xFF800000 - дескрипторы для обмена потоком по HDMA*/
t_l502_bf_cmd cmd; /**< 0xFF800800 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> PC*/ t_l502_bf_cmd cmd; /**< 0xFF800800 - команда обмена с PC*/
} t_l502_board_state; } t_l502_board_state;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Структура, содержащая данные фиксированной памяти */
extern volatile t_l502_board_state g_state; extern volatile t_l502_board_state g_state;
#endif #endif

View File

@ -2,27 +2,27 @@
@addtogroup hdma @addtogroup hdma
@{ @{
@file l502_hdma.c @file l502_hdma.c
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> hdma <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Файл содержит логику работы с hdma на прием и на передачу данных
<EFBFBD><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD> <20> <20> BlackFin. как из, так и в BlackFin.
***************************************************************************/ ***************************************************************************/
/****************************************************************************** /******************************************************************************
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> hdma_stream_init(). При запуске должно вызываться один раз hdma_stream_init().
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> hdma_xxx_start() <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD> hdma_xxx_stop() Вызов hdma_xxx_start() инициализирует прием или передачу, а hdma_xxx_stop()
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. останавливает все текущие передачи.
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Для запуска обмена блоком данных нужно проверить готовность
(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> hdma_xxx_req_rdy() (наличие свободных дескрипторов) с помощью hdma_xxx_req_rdy()
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> hdma_xxx_req_start(), <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> и вызвать hdma_xxx_req_start(), указав массив для передачи или приема
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. данных и его размер.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 31 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. Можно устанавливать до 31 запроса в очередь.
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> hdma_xxx_done(), <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> По завершению обмена будет вызвана функция hdma_xxx_done(), которая
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BF->PC должна быть реализована в другом файле. Для передачи BF->PC
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, функция вызывается один раз на каждый поставленный запрос,
<EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PC->BF <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> а при приеме PC->BF может вызываться по несколько раз - при приеме
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> PC <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) части запроса (в случае, если от PC пока нет больше данных)
*******************************************************************************/ *******************************************************************************/
@ -81,42 +81,42 @@ inline static void hdma_set_descr(t_hdma_stream_descr* descr_arr, uint8_t* pos,
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HostDMA /** @brief Инициализация интерфейса HostDMA
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HostDMA <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Настройка параметров HostDMA и инициализация неизменяемых полей дескрипторов
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA */ для организации потока по данных по HostDMA */
void hdma_init(void) { void hdma_init(void) {
int d; int d;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> HDMA */ /* запрещаем ПЛИС отслеживать запросы на обмен по HDMA */
STREAM_IN_DIS(); STREAM_IN_DIS();
STREAM_OUT_DIS(); STREAM_OUT_DIS();
*pPORTGIO_DIR |= PG5 | PG6; *pPORTGIO_DIR |= PG5 | PG6;
*pPORTFIO_DIR |= PF14 | PF15; *pPORTFIO_DIR |= PF14 | PF15;
/***************** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HOST DMA ***********************/ /***************** настройка HOST DMA ***********************/
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //настройка портов
*pPORTG_MUX |= 0x2800; *pPORTG_MUX |= 0x2800;
*pPORTG_FER |= 0xF800; *pPORTG_FER |= 0xF800;
*pPORTH_MUX = 0x2A; *pPORTH_MUX = 0x2A;
*pPORTH_FER = 0xFFFF; *pPORTH_FER = 0xFFFF;
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //настройка прерываний
REGISTER_ISR(11, hdma_isr); REGISTER_ISR(11, hdma_isr);
//*pSIC_IAR3 = (*pSIC_IAR6 & 0xFFF0FFFFUL) | (3 << 16); //*pSIC_IAR3 = (*pSIC_IAR6 & 0xFFF0FFFFUL) | (3 << 16);
*pSIC_IAR6 = (*pSIC_IAR6 & 0xFFFFF0FFUL) | P50_IVG(10); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HDMARD <EFBFBD><EFBFBD> IVG10 *pSIC_IAR6 = (*pSIC_IAR6 & 0xFFFFF0FFUL) | P50_IVG(10); //назначение HDMARD на IVG10
REGISTER_ISR(10, hdma_rd_isr); REGISTER_ISR(10, hdma_rd_isr);
*pSIC_IMASK0 |= IRQ_DMA1; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HOSTDP <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *pSIC_IMASK0 |= IRQ_DMA1; //разрешение прерывания HOSTDP на запись
*pSIC_IMASK1 |= IRQ_HOSTRD_DONE; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HOSTDP <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; *pSIC_IMASK1 |= IRQ_HOSTRD_DONE; //разрешение прерывания HOSTDP на чтение;
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HDMA //разрешение HDMA
*pHOST_CONTROL = BDR | EHR | EHW | HOSTDP_EN | HOSTDP_DATA_SIZE; //burst, ehr, ehw, en *pHOST_CONTROL = BDR | EHR | EHW | HOSTDP_EN | HOSTDP_DATA_SIZE; //burst, ehr, ehw, en
//g_state.cmd.data[100] = L502_BF_CMD_STATUS_DONE; //g_state.cmd.data[100] = L502_BF_CMD_STATUS_DONE;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /* инициалзация полей дескрипторов, которые не будут изменяться
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ во время работы */
for (d=0; d < L502_IN_HDMA_DESCR_CNT; d++) { for (d=0; d < L502_IN_HDMA_DESCR_CNT; d++) {
g_state.hdma.in[d].xmod = 2; g_state.hdma.in[d].xmod = 2;
g_state.hdma.in[d].valid = 1; g_state.hdma.in[d].valid = 1;
@ -134,10 +134,10 @@ void hdma_init(void) {
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA. /** @brief Запуск потока на передачу по HostDMA.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA Функция сбрасывает логику обработки заданий на передачу данных по HostDMA
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> и разрешает передачу. Должна вызываться до добавления первого задания с помощью
hdma_send_req_start() */ hdma_send_req_start() */
void hdma_send_start(void) { void hdma_send_start(void) {
f_snd_start_id = 0; f_snd_start_id = 0;
@ -149,17 +149,17 @@ void hdma_send_start(void) {
STREAM_IN_EN(); STREAM_IN_EN();
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA. /** @brief Останов потока на передачу по HostDMA.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ Запрет передачи по HostDMA с остановом всех текущих заданий */
void hdma_send_stop(void) { void hdma_send_stop(void) {
STREAM_IN_DIS(); STREAM_IN_DIS();
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA /** @brief Запуск потока на прием по HostDMA
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA Функция сбрасывает логику обработки заданий на прием данных по HostDMA
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> и разрешает прием. Должна вызываться до добавления первого задания с помощью
hdma_recv_req_start() */ hdma_recv_req_start() */
void hdma_recv_start(void) { void hdma_recv_start(void) {
f_rcv_start_id = 0; f_rcv_start_id = 0;
@ -171,9 +171,9 @@ void hdma_recv_start(void) {
STREAM_OUT_EN(); STREAM_OUT_EN();
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA /** @brief Останов потока на прием по HostDMA
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ Запрет приема по HostDMA с остановом всех текущих заданий */
void hdma_recv_stop(void) { void hdma_recv_stop(void) {
STREAM_OUT_DIS(); STREAM_OUT_DIS();
} }
@ -181,39 +181,39 @@ void hdma_recv_stop(void) {
/**************************************************************************//** /**************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. @brief Получить количество свободных запросов на передачу.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Фунция позволяет узнать, сколько запросов можно еще поставить в очередь на
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> hdma_send_start(). передачу с помощью hdma_send_start().
@return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @return Количество запросов на передачу, которое можно поставить в очередь
******************************************************************************/ ******************************************************************************/
int hdma_send_req_rdy(void) { int hdma_send_req_rdy(void) {
return L502_IN_HDMA_DESCR_CNT - (uint16_t)(f_snd_start_id - f_snd_done_id); return L502_IN_HDMA_DESCR_CNT - (uint16_t)(f_snd_start_id - f_snd_done_id);
} }
/**************************************************************************//** /**************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> @brief Получить количество свободных запросов на прием
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Фунция позволяет узнать, сколько запросов можно еще поставить в очередь на
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> hdma_recv_start(). прием с помощью hdma_recv_start().
@return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @return Количество запросов на прием, которое можно поставить в очередь
******************************************************************************/ ******************************************************************************/
int hdma_recv_req_rdy(void) { int hdma_recv_req_rdy(void) {
return L502_OUT_HDMA_DESCR_CNT - (uint16_t)(f_rcv_start_id - f_rcv_done_id); return L502_OUT_HDMA_DESCR_CNT - (uint16_t)(f_rcv_start_id - f_rcv_done_id);
} }
/**************************************************************************//** /**************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA @brief Поставить запрос на передачу по HostDMA
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Функция ставит запрос на передачу указанных данных. Сами данные не копируются,
<EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! т.е. буфер нельзя будет использовать до того, как данные не будут переданы!
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD> Для постановки запроса необходимо, чтобы был свободный дескриптор (можно
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> hdma_send_req_rdy()) узнать через hdma_send_req_rdy())
@param[in] buf <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. @param[in] buf Указатель на массив на передачу.
@param[in] size <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] size Количество 32-битных слов на передачу
@param[in] flags <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> #t_hdma_send_flags @param[in] flags Флаги из #t_hdma_send_flags
@return < 0 <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, >= 0 - id <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @return < 0 при ошибке, >= 0 - id передачи при успехе
*******************************************************************************/ *******************************************************************************/
int hdma_send_req_start(const uint32_t* buf, uint32_t size, uint32_t flags) { int hdma_send_req_start(const uint32_t* buf, uint32_t size, uint32_t flags) {
if (hdma_send_req_rdy() > 0) { if (hdma_send_req_rdy() > 0) {
@ -226,16 +226,16 @@ int hdma_send_req_start(const uint32_t* buf, uint32_t size, uint32_t flags) {
} }
/**************************************************************************//** /**************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA @brief Поставить запрос на передачу по HostDMA
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. Функция ставит запрос на прием данных в указанный буфер.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. Сами данные будут в буфере только по завершению запроса.
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD> Для постановки запроса необходимо, чтобы был свободный дескриптор (можно
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> hdma_recv_req_rdy()) узнать через hdma_recv_req_rdy())
@param[in] buf <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. @param[in] buf Указатель на массив на передачу.
@param[in] size <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] size Количество 32-битных слов на передачу
@return < 0 <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, >= 0 - id <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @return < 0 при ошибке, >= 0 - id передачи при успехе
*******************************************************************************/ *******************************************************************************/
int hdma_recv_req_start(uint32_t* buf, uint32_t size) { int hdma_recv_req_start(uint32_t* buf, uint32_t size) {
if (hdma_recv_req_rdy() > 0) { if (hdma_recv_req_rdy() > 0) {
@ -248,31 +248,31 @@ int hdma_recv_req_start(uint32_t* buf, uint32_t size) {
/** /**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BF <EFBFBD><EFBFBD> HDMA @brief Обработчик прерывания на завершения записи в память BF по HDMA
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Обработчик вызывается по завершению приема блока по HostDMA. Обработчик
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> выполняет установку необходимых флагов для разрешения приема следующего блока
<EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> и, кроме того, проверяет наличие новой команды и завершения передачи или приема
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ блока из потока данных */
ISR(hdma_isr) { ISR(hdma_isr) {
if ((*pDMA1_IRQ_STATUS & DMA_DONE) != 0) { if ((*pDMA1_IRQ_STATUS & DMA_DONE) != 0) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* проверяем, не была ли записана команда */
if (g_state.cmd.status == L502_BF_CMD_STATUS_REQ) { if (g_state.cmd.status == L502_BF_CMD_STATUS_REQ) {
l502_cmd_set_req(); l502_cmd_set_req();
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /* проверяем, не был ли записан результат передачи
<EFBFBD><EFBFBD> HDMA <EFBFBD><EFBFBD> BF <EFBFBD> PC */ по HDMA из BF в PC */
if (g_state.hdma.in_lb.valid) { if (g_state.hdma.in_lb.valid) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> id <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> callback */ /* обновляем id завершенной передачи и вызываем callback */
f_snd_done_id = g_state.hdma.in_lb.id; f_snd_done_id = g_state.hdma.in_lb.id;
g_state.hdma.in_lb.valid = 0; g_state.hdma.in_lb.valid = 0;
hdma_send_done(g_state.hdma.in_lb.addr, g_state.hdma.in_lb.udata); hdma_send_done(g_state.hdma.in_lb.addr, g_state.hdma.in_lb.udata);
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> /* проверяем, не был ли записан результат приема данных по
HDMA <EFBFBD><EFBFBD> PC <EFBFBD> BF */ HDMA из PC в BF */
if (g_state.hdma.out_lb.valid) { if (g_state.hdma.out_lb.valid) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. /* может быть записан и при не полностью завершенном запросе.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ определяем сперва резмер, сколько было реально принято */
uint32_t size = (g_state.hdma.out[f_rcv_done_descr].full_size - uint32_t size = (g_state.hdma.out[f_rcv_done_descr].full_size -
g_state.hdma.out_lb.full_size)/2; g_state.hdma.out_lb.full_size)/2;
@ -281,14 +281,14 @@ ISR(hdma_isr) {
hdma_recv_done(g_state.hdma.out_lb.addr, size); hdma_recv_done(g_state.hdma.out_lb.addr, size);
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - /* если была завершена только часть дескриптора -
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ обновляем оставшийся размер для приема */
if (g_state.hdma.out_lb.full_size) { if (g_state.hdma.out_lb.full_size) {
g_state.hdma.out[f_rcv_done_descr].full_size = g_state.hdma.out[f_rcv_done_descr].full_size =
g_state.hdma.out_lb.full_size; g_state.hdma.out_lb.full_size;
} else { } else {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /* если завершен весь дескриптор - переходим
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ к следующему */
if (++f_rcv_done_descr== L502_OUT_HDMA_DESCR_CNT) if (++f_rcv_done_descr== L502_OUT_HDMA_DESCR_CNT)
f_rcv_done_descr = 0; f_rcv_done_descr = 0;
f_rcv_done_id = g_state.hdma.out_lb.id; f_rcv_done_id = g_state.hdma.out_lb.id;
@ -303,11 +303,11 @@ ISR(hdma_isr) {
} }
/** /**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HDMA. @brief Обработчик прерывания на завершение чтения по HDMA.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA. Данный обработчик вызывается по завершению передачи блока данных по HostDMA.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Выполняет только установку необходимых флагов для разрешения следующей
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ передачи */
ISR(hdma_rd_isr) { ISR(hdma_rd_isr) {
if ((*pHOST_STATUS & HOSTRD_DONE) != 0) { if ((*pHOST_STATUS & HOSTRD_DONE) != 0) {
*pHOST_STATUS &= ~((unsigned short)HOSTRD_DONE); *pHOST_STATUS &= ~((unsigned short)HOSTRD_DONE);

View File

@ -1,11 +1,11 @@
/** @defgroup hdma <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HostDMA */ /** @defgroup hdma Работа с интерфейсом HostDMA */
/***************************************************************************//** /***************************************************************************//**
@addtogroup hdma @addtogroup hdma
@{ @{
@file l502_hdma.h @file l502_hdma.h
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HostDMA Файл содержит описания функций для работы с интерфейсом HostDMA
******************************************************************************/ ******************************************************************************/
#ifndef L502_HDMA_H_ #ifndef L502_HDMA_H_
@ -14,10 +14,10 @@
void hdma_init(void); void hdma_init(void);
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> #t_hdma_send_flags */ /** Флаги для передачи по #t_hdma_send_flags */
typedef enum { typedef enum {
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** Флаг, указывающий, что передается последний пакет данных. По завершению
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> */ передачи будет остановлен поток и сгенерировано прерывания для ПК */
L502_HDMA_FLAGS_SEND_LAST = 0x1 L502_HDMA_FLAGS_SEND_LAST = 0x1
} t_hdma_send_flags; } t_hdma_send_flags;

View File

@ -22,27 +22,27 @@ void l502_stream_init(void);
#define L502_PLL_CTL (SET_MSEL(53) | DF) #define L502_PLL_CTL (SET_MSEL(53) | DF)
#define L502_PLL_DIV (SET_SSEL(4) | CSEL_DIV1) #define L502_PLL_DIV (SET_SSEL(4) | CSEL_DIV1)
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM /* конфигурим SDRAM
* RDIV=((117964,8*64ms)/8192)-(6+3)=912 // <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * RDIV=((117964,8*64ms)/8192)-(6+3)=912 // по логике - это последняя конфигурация
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 8192, <EFBFBD> 4096, <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1834 * кстати - возможно не 8192, а 4096, в таком случае 1834
*/ */
#define L502_SDRAM_SDRRC (((132500000 / 1000) * 64) / 8192 - (6 + 3)) #define L502_SDRAM_SDRRC (((132500000 / 1000) * 64) / 8192 - (6 + 3))
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 32 <EFBFBD><EFBFBD>, 9 <EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* размер памяти - 32 Мб, 9 бит - под адрес колонки */
#define L502_SDRAM_SDBCTL (EBE | EBSZ_32 | EBCAW_9) #define L502_SDRAM_SDBCTL (EBE | EBSZ_32 | EBCAW_9)
/* CAS latency=3, <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> 2 - <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!!) /* CAS latency=3, хотя можно и 2 - чем меньше тем лучше (правда при этом глюки появляются!!!!)
* PASR_ALL - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> SDRAM <EFBFBD> 2.5 <EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> * PASR_ALL - тоже для SDRAM с 2.5 В - экономия энергии, поэтому рефрешим все
* tRAS(min)=45 <EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 120 <EFBFBD><EFBFBD><EFBFBD> - 6 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * tRAS(min)=45 нс (при частоте 120 Мгц - 6 тактов)
* tRP(min)=20 <EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 120 <EFBFBD><EFBFBD><EFBFBD> - 3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * tRP(min)=20 нс (при частоте 120 Мгц - 3 тактов)
* tRCD(min)=20 <EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 120 <EFBFBD><EFBFBD><EFBFBD> - 3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) * tRCD(min)=20 нс (при частоте 120 Мгц - 3 тактов)
* tWR - <EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 * tWR - хз, на вскидку 2
* POWER startup delay - <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> * POWER startup delay - не нужна
* PSS - power SDRAM - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> * PSS - power SDRAM - должно быть
* SRFS - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 <20><> <20><><EFBFBD><EFBFBD><EFBFBD> * SRFS - нужна для перевода SDRAM в режим пониженного энергопотребления 0 не нужно
* EBUFE=0 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> SDRAM * EBUFE=0 - только один чип SDRAM
* FBBRW=0 - <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> * FBBRW=0 - для того, чтобы чтение сразу шло за записью, может не работать - попробовать позже
* EMREN=0 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> SDRAM <EFBFBD> 2.5 <EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * EMREN=0 - тоже для SDRAM с 2.5 В - экономия энергии
* TCSR=0 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> SDRAM <EFBFBD> 2.5 <EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * TCSR=0 - тоже для SDRAM с 2.5 В - экономия энергии
* CDDBG=0 - <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> signals <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * CDDBG=0 - по моему сотекщд signals не расшарены
*/ */
#define L502_SDRAM_SDGCTL (SCTLE | CL_2 | PASR_ALL | TRAS_6 | TRP_3 | TRCD_3 | TWR_2 | PSS) #define L502_SDRAM_SDGCTL (SCTLE | CL_2 | PASR_ALL | TRAS_6 | TRP_3 | TRCD_3 | TWR_2 | PSS)
@ -56,14 +56,14 @@ uint32_t l502_otp_make_invalid(uint32_t page) {
return err; return err;
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BlackFin'a */ /* Настройка частоты BlackFin'a */
void l502_setup_pll(void) { void l502_setup_pll(void) {
ADI_SYSCTRL_VALUES sysctl; ADI_SYSCTRL_VALUES sysctl;
sysctl.uwPllCtl = L502_PLL_CTL; sysctl.uwPllCtl = L502_PLL_CTL;
bfrom_SysControl(SYSCTRL_WRITE | SYSCTRL_PLLCTL, &sysctl, 0); bfrom_SysControl(SYSCTRL_WRITE | SYSCTRL_PLLCTL, &sysctl, 0);
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PLL <EFBFBD> SDRAM <EFBFBD> <20><><EFBFBD><EFBFBD> OTP, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* Запись настроек PLL и SDRAM в блок OTP, начиная с заданной страницы */
uint32_t l502_otp_write_cfg(uint32_t first_page) { uint32_t l502_otp_write_cfg(uint32_t first_page) {
uint32_t err = bfrom_OtpCommand(OTP_INIT, (0x0A548800 | 133)); uint32_t err = bfrom_OtpCommand(OTP_INIT, (0x0A548800 | 133));
uint64_t val = 0; uint64_t val = 0;
@ -78,7 +78,7 @@ uint32_t l502_otp_write_cfg(uint32_t first_page) {
| OTP_CHECK_FOR_PREV_WRITE, &val); | OTP_CHECK_FOR_PREV_WRITE, &val);
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */ /* если была ошибка - делаем недействительным весь блок */
if (err) if (err)
l502_otp_make_invalid(first_page); l502_otp_make_invalid(first_page);
} }
@ -88,23 +88,23 @@ uint32_t l502_otp_write_cfg(uint32_t first_page) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PLL <EFBFBD> SDRAM <EFBFBD> OTP. <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, /* Проверяем, есть ли действтиельные настройки PLL и SDRAM в OTP. Если нет,
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20> OTP <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PLL <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ то записываем их в OTP и инициализируем PLL вручную */
void l502_otp_init(void) { void l502_otp_init(void) {
uint32_t err=0, page, fnd=0, pll_setup=0; uint32_t err=0, page, fnd=0, pll_setup=0;
//err = l502_otp_make_invalid(PBS00); //err = l502_otp_make_invalid(PBS00);
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* ищем первый действительный блок настройки загрузки */
for (page = PBS00; !(fnd && !err) && (page < 0xD8); page += 4) { for (page = PBS00; !(fnd && !err) && (page < 0xD8); page += 4) {
uint64_t val; uint64_t val;
err = bfrom_OtpRead(page, OTP_LOWER_HALF, &val); err = bfrom_OtpRead(page, OTP_LOWER_HALF, &val);
if (!err && !((val>>OTP_INVALID_P)&0x3)) { if (!err && !((val>>OTP_INVALID_P)&0x3)) {
fnd = 1; fnd = 1;
if (!val) { if (!val) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> => PLL <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /* если блок с настройками не был записан => PLL записываем
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> вручную и записываем настройки для корректной инициализации
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ в дальнейшем */
if (!pll_setup) { if (!pll_setup) {
l502_setup_pll(); l502_setup_pll();
pll_setup = 1; pll_setup = 1;
@ -112,17 +112,17 @@ void l502_otp_init(void) {
err = l502_otp_write_cfg(page); err = l502_otp_write_cfg(page);
page+=4; page+=4;
if (!err && (page< 0xD8)) { if (!err && (page< 0xD8)) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /* если есть место - то дописываем вторую копию, чтобы всегда
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, быть уверенным, что если даже при первом чтении была ошибка,
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ все загрузится нормально */
err = l502_otp_write_cfg(page); err = l502_otp_write_cfg(page);
} }
} }
} }
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PLL, /* если все страницы настроек испорчены, то инициализируем PLL,
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ так как скорее всего его система не проинициализировала */
if (!fnd && !pll_setup) { if (!fnd && !pll_setup) {
l502_setup_pll(); l502_setup_pll();
} }
@ -130,16 +130,16 @@ void l502_otp_init(void) {
} }
void l502_init(void) { void l502_init(void) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OTP-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> PLL, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> /* инициализация OTP-памяти и PLL, если эти значения не были уже
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20> OTP <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> * проинициализированны до этого. Если в OTP уже были нужные значения, то
* SDRAM <EFBFBD> PLL <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> BlackFin */ * SDRAM и PLL проинициализированы уже загрузочным кодом BlackFin */
l502_otp_init(); l502_otp_init();
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPI */ /* настройка SPI */
fpga_spi_init(); fpga_spi_init();
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT0 */ /* настройки SPORT0 */
*pSPORT0_TCLKDIV = 0; *pSPORT0_TCLKDIV = 0;
*pSPORT0_RCLKDIV = 0; *pSPORT0_RCLKDIV = 0;
@ -153,17 +153,17 @@ void l502_init(void) {
*pPORTF_MUX = (*pPORTF_MUX & 0xFFFC) | 1; *pPORTF_MUX = (*pPORTF_MUX & 0xFFFC) | 1;
*pPORTF_FER |= PF0 | PF1 | PF2 | PF3 | PF4 | PF5 | PF6 | PF7; *pPORTF_FER |= PF0 | PF1 | PF2 | PF3 | PF4 | PF5 | PF6 | PF7;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT RX <EFBFBD><EFBFBD> IVG7 */ /* назначение SPORT RX на IVG7 */
*pSIC_IAR2 = (*pSIC_IAR2 & 0xFFFFFFF0UL) | P16_IVG(7); *pSIC_IAR2 = (*pSIC_IAR2 & 0xFFFFFFF0UL) | P16_IVG(7);
REGISTER_ISR(7, isr_sport_dma_rx); REGISTER_ISR(7, isr_sport_dma_rx);
/* SPORT TX <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> IVG9 */ /* SPORT TX оставляем на IVG9 */
REGISTER_ISR(9, isr_sport_dma_tx); REGISTER_ISR(9, isr_sport_dma_tx);
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HostDMA-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* настройка HostDMA-интерфейса */
hdma_init(); hdma_init();
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> */ /* если SDRAM не настроена, то инициализируем ее */
if (*pEBIU_SDSTAT & SDRS) { if (*pEBIU_SDSTAT & SDRS) {
uint32_t* a=0; uint32_t* a=0;
*pEBIU_SDRRC = L502_SDRAM_SDRRC; *pEBIU_SDRRC = L502_SDRAM_SDRRC;
@ -171,12 +171,12 @@ void l502_init(void) {
*pEBIU_SDGCTL = L502_SDRAM_SDGCTL; *pEBIU_SDGCTL = L502_SDRAM_SDGCTL;
ssync(); ssync();
*a = 0; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ *a = 0; /* записываем по нулевому адресу произвольное слово, чтобы активировать память */
while (*pEBIU_SDSTAT & SDRS) {} while (*pEBIU_SDSTAT & SDRS) {}
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* инициализируем параметры для потоков ввода/вывода */
l502_stream_init(); l502_stream_init();

View File

@ -1,11 +1,11 @@
/** @addtogroup config_params /** @addtogroup config_params
@{ @{
@file l502_params.c @file l502_params.c
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Файл содержит функции по обработке команд от ПК на установку параметров
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. конфигурации сбора данных и других параметров.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> Только в данном файле должны быть изменения полей структуры общих
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - g_set. настроек - g_set.
<EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> */ Так же здесь */
#include <stdint.h> #include <stdint.h>
@ -19,7 +19,7 @@
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* проверка правильного режима синхронизации */
#define CHECK_SYNC_MODE(cmd) (((cmd) != L502_SYNC_INTERNAL) \ #define CHECK_SYNC_MODE(cmd) (((cmd) != L502_SYNC_INTERNAL) \
&& ((cmd) !=L502_SYNC_EXTERNAL_MASTER) \ && ((cmd) !=L502_SYNC_EXTERNAL_MASTER) \
&& ((cmd) != L502_SYNC_DI_SYN1_RISE) \ && ((cmd) != L502_SYNC_DI_SYN1_RISE) \
@ -44,13 +44,13 @@ t_module_info g_module_info;
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** @brief Установка количества логических каналов
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> g_set.lch_cnt <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Проверка и запись в поле g_set.lch_cnt значение кол-ва каналов в логической
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>. таблице АЦП.
@param[in] lch_cnt <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> 1 <EFBFBD><EFBFBD> #L502_LTABLE_MAX_CH_CNT) @param[in] lch_cnt Количество логических каналов (от 1 до #L502_LTABLE_MAX_CH_CNT)
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Код ошибки */
int32_t params_set_lch_cnt(uint32_t lch_cnt) { int32_t params_set_lch_cnt(uint32_t lch_cnt) {
if (lch_cnt > L502_LTABLE_MAX_CH_CNT) if (lch_cnt > L502_LTABLE_MAX_CH_CNT)
return L502_BF_ERR_INVALID_CMD_PARAMS; return L502_BF_ERR_INVALID_CMD_PARAMS;
@ -58,18 +58,18 @@ int32_t params_set_lch_cnt(uint32_t lch_cnt) {
return 0; return 0;
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** @brief Установить параметры логического канала
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Функция проверяет входные параметры и записывает их в соответствующее поле
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> g_set.lch[] таблицы g_set.lch[]
@param[in] index <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [0, L502_LTABLE_MAX_CH_CNT-1] @param[in] index Номер логического канала [0, L502_LTABLE_MAX_CH_CNT-1]
@param[in] ch <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> 0 <EFBFBD><EFBFBD> 15 <EFBFBD><EFBFBD><EFBFBD> 31) @param[in] ch Номер физического канала (от 0 до 15 или 31)
@param[in] mode <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] mode Режим измерения для данного лог. канала
@param[in] range <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] range Диапазон измерения для данного лог. канала
@param[in] avg <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] avg Коэф. усреднения по данному лог. каналу
@param[in] flags <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> @param[in] flags Дополнительные флаги
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Код ошибки */
int32_t params_set_lch(uint32_t index, uint32_t ch, t_l502_lch_mode mode, int32_t params_set_lch(uint32_t index, uint32_t ch, t_l502_lch_mode mode,
t_l502_adc_range range, uint32_t avg, uint32_t flags) { t_l502_adc_range range, uint32_t avg, uint32_t flags) {
if (index >= L502_LTABLE_MAX_CH_CNT) if (index >= L502_LTABLE_MAX_CH_CNT)
@ -89,9 +89,9 @@ int32_t params_set_lch(uint32_t index, uint32_t ch, t_l502_lch_mode mode,
return 0; return 0;
} }
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> /** Установка делителя частоты АЦП
@param[in] div <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] div Значение делителя
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Код ошибки */
int32_t params_set_adc_freq_div(uint32_t div) { int32_t params_set_adc_freq_div(uint32_t div) {
if ((div==0) || (div > L502_ADC_FREQ_DIV_MAX)) if ((div==0) || (div > L502_ADC_FREQ_DIV_MAX))
return L502_BF_ERR_INVALID_CMD_PARAMS; return L502_BF_ERR_INVALID_CMD_PARAMS;
@ -99,17 +99,17 @@ int32_t params_set_adc_freq_div(uint32_t div) {
return 0; return 0;
} }
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** Установка значения опорной частоты
@param[in] freq_code <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] freq_code Значение частоты. Для внутренней может быть только
#L502_REF_FREQ_2000KHZ <EFBFBD><EFBFBD><EFBFBD> #L502_REF_FREQ_1500KHZ #L502_REF_FREQ_2000KHZ или #L502_REF_FREQ_1500KHZ
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Код ошибки */
int32_t params_set_ref_freq(uint32_t freq_code) { int32_t params_set_ref_freq(uint32_t freq_code) {
g_set.ref_freq = freq_code; g_set.ref_freq = freq_code;
return 0; return 0;
} }
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** Установка значения межкадровой задержки
@param[in] delay <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> 0 <EFBFBD><EFBFBD> L502_ADC_INTERFRAME_DELAY_MAX) @param[in] delay Значение межкадровой задержки (от 0 до L502_ADC_INTERFRAME_DELAY_MAX)
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Код ошибки */
int32_t params_set_adc_interframe_delay(uint32_t delay) { int32_t params_set_adc_interframe_delay(uint32_t delay) {
if (delay > L502_ADC_INTERFRAME_DELAY_MAX) if (delay > L502_ADC_INTERFRAME_DELAY_MAX)
return L502_BF_ERR_INVALID_CMD_PARAMS; return L502_BF_ERR_INVALID_CMD_PARAMS;
@ -117,9 +117,9 @@ int32_t params_set_adc_interframe_delay(uint32_t delay) {
return 0; return 0;
} }
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** Установка источника опроной частоты синхронизации
@param[in] sync_mode <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> #t_l502_sync_mode @param[in] sync_mode Значение из #t_l502_sync_mode
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Код ошибки */
int32_t params_set_sync_mode(t_l502_sync_mode sync_mode) { int32_t params_set_sync_mode(t_l502_sync_mode sync_mode) {
int32_t err = CHECK_SYNC_MODE(sync_mode); int32_t err = CHECK_SYNC_MODE(sync_mode);
if (!err) if (!err)
@ -127,9 +127,9 @@ int32_t params_set_sync_mode(t_l502_sync_mode sync_mode) {
return err; return err;
} }
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** Установка источника синхронизации старта сбора данных
@param[in] sync_mode <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> #t_l502_sync_mode @param[in] sync_mode Значение из #t_l502_sync_mode
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Код ошибки */
int32_t params_set_sync_start_mode(t_l502_sync_mode sync_mode) { int32_t params_set_sync_start_mode(t_l502_sync_mode sync_mode) {
int32_t err = CHECK_SYNC_MODE(sync_mode); int32_t err = CHECK_SYNC_MODE(sync_mode);
if (!err) if (!err)
@ -138,9 +138,9 @@ int32_t params_set_sync_start_mode(t_l502_sync_mode sync_mode) {
} }
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> /** Установка делителя частоты синхронного ввода цифровых линий
@param[in] div <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] div Значение делителя
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Код ошибки */
int32_t params_set_din_freq_div(uint32_t div) { int32_t params_set_din_freq_div(uint32_t div) {
if ((div==0) || (div > L502_DIN_FREQ_DIV_MAX)) if ((div==0) || (div > L502_DIN_FREQ_DIV_MAX))
return L502_BF_ERR_INVALID_CMD_PARAMS; return L502_BF_ERR_INVALID_CMD_PARAMS;
@ -148,9 +148,9 @@ int32_t params_set_din_freq_div(uint32_t div) {
return 0; return 0;
} }
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> /** Установка делителя частоты вывода на ЦАП
@param[in] div <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (1 <EFBFBD><EFBFBD><EFBFBD> 2) @param[in] div Значение делителя (1 или 2)
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Код ошибки */
int32_t params_set_dac_freq_div(uint32_t div) { int32_t params_set_dac_freq_div(uint32_t div) {
if ((div < X502_OUT_FREQ_DIV_MIN) || (div > X502_OUT_FREQ_DIV_MAX)) if ((div < X502_OUT_FREQ_DIV_MIN) || (div > X502_OUT_FREQ_DIV_MAX))
return L502_BF_ERR_INVALID_CMD_PARAMS; return L502_BF_ERR_INVALID_CMD_PARAMS;
@ -161,18 +161,18 @@ int32_t params_set_dac_freq_div(uint32_t div) {
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> /** @brief Запись параметров сбора в регистры ПЛИС
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #g_set <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Функция выполняет запись всех параметров из структуры #g_set в регистры
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ПЛИС. Функция может вызываться только когда сбор данных остановлен.
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Код ошибки */
int32_t configure(void) { int32_t configure(void) {
uint16_t ch; uint16_t ch;
int32_t err = g_mode != L502_BF_MODE_IDLE ? L502_BF_ERR_STREAM_RUNNING : 0; int32_t err = g_mode != L502_BF_MODE_IDLE ? L502_BF_ERR_STREAM_RUNNING : 0;
if (!err) { if (!err) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* записываем логическую таблицу */
for (ch = 0; ch < g_set.lch_cnt; ch++) { for (ch = 0; ch < g_set.lch_cnt; ch++) {
uint32_t wrd = ((g_set.lch[ch].phy_ch & 0xF) << 3) | (g_set.lch[ch].range & 0x7); uint32_t wrd = ((g_set.lch[ch].phy_ch & 0xF) << 3) | (g_set.lch[ch].range & 0x7);

View File

@ -1,12 +1,12 @@
/** @defgroup config_params <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** @defgroup config_params Настройки сбора данных модуля */
/***************************************************************************//** /***************************************************************************//**
@addtogroup config_params @addtogroup config_params
@{ @{
@file l502_params.h @file l502_params.h
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Файл содержит определение структур, описывающих текущие
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> настройки сбора данных для модуля и объявляет
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> g_set, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> внешнюю переменную g_set, содержащую эти параметры
*******************************************************************************/ *******************************************************************************/
#ifndef L502_PARAMS_H_ #ifndef L502_PARAMS_H_
@ -15,48 +15,48 @@
#include "l502_defs.h" #include "l502_defs.h"
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ /** Калибровочные коэффициенты ЦАП */
typedef struct { typedef struct {
float offs; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */ float offs; /**< Смещение нуля */
float k; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ float k; /**< Коэффициент шкалы */
} t_dac_cbr_coef; } t_dac_cbr_coef;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Информация о используемом модуле */
typedef struct { typedef struct {
uint32_t devflags; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint32_t devflags; /**< Флаги с информацией о наличии опций и сост. модуля */
uint16_t fpga_ver; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FPGA */ uint16_t fpga_ver; /**< Версия FPGA */
uint8_t plda_ver; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PLDA */ uint8_t plda_ver; /**< Версия PLDA */
t_dac_cbr_coef dac_cbr[L502_DAC_CH_CNT]; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ t_dac_cbr_coef dac_cbr[L502_DAC_CH_CNT]; /**< Коэффициенты ЦАП */
} t_module_info; } t_module_info;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Параметры логического канала */
typedef struct { typedef struct {
uint8_t phy_ch; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint8_t phy_ch; /**< Номер физического канала */
uint8_t mode; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ uint8_t mode; /**< Режим сбора */
uint8_t range; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint8_t range; /**< Диапазон */
uint8_t avg; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint8_t avg; /**< Коэф. усреднения */
uint32_t flags; /**< <EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD> */ uint32_t flags; /**< Доп. флаги */
} t_lch; } t_lch;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Настройки сбора данных */
typedef struct { typedef struct {
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Таблица логических каналов */
t_lch lch[L502_LTABLE_MAX_CH_CNT]; t_lch lch[L502_LTABLE_MAX_CH_CNT];
uint16_t lch_cnt; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint16_t lch_cnt; /**< Количество каналов в лог. таблице */
uint32_t adc_freq_div; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ uint32_t adc_freq_div; /**< Делитель частоты АЦП */
uint32_t din_freq_div; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ uint32_t din_freq_div; /**< Делитель частоты для цифрового входа */
uint32_t adc_frame_delay; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint32_t adc_frame_delay; /**< Межкадровая задержка */
uint32_t ref_freq; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (2 <EFBFBD><EFBFBD><EFBFBD> 1.5 <EFBFBD><EFBFBD><EFBFBD>) <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint32_t ref_freq; /**< Значение опорной частоты (2 или 1.5 МГц) или внешняя */
uint16_t out_freq_div; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint16_t out_freq_div; /**< Делитель частоты вывода */
uint8_t sync_mode; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint8_t sync_mode; /**< Режим синхронизации для опорной частоты */
uint8_t sync_start_mode; /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ uint8_t sync_start_mode; /**< Режим запуска сигнала синхронизации */
} t_settings; } t_settings;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Структура, содержащая текущие настройки сбора данных */
extern t_settings g_set; extern t_settings g_set;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Структура, содержащая информацию о модуле */
extern t_module_info g_module_info; extern t_module_info g_module_info;
int32_t configure(void); int32_t configure(void);

View File

@ -1,11 +1,11 @@
/** @defgroup sport_rx <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 */ /** @defgroup sport_rx Прием потока данных по SPORT0 */
/***************************************************************************//** /***************************************************************************//**
@addtogroup sport_rx @addtogroup sport_rx
@{ @{
@file l502_sport_rx.h @file l502_sport_rx.h
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 Файл содержит описания функций для управления приемом потока по SPORT0
******************************************************************************/ ******************************************************************************/
#ifndef L502_SPORT_RX_H #ifndef L502_SPORT_RX_H

View File

@ -1,11 +1,11 @@
/** @addtogroup sport_tx /** @addtogroup sport_tx
@{ @{
@file l502_sport_tx.c @file l502_sport_tx.c
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0. Файл содержит логику для управления передачей по SPORT0.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sport_tx_init(), Изначально DMA должен быть проинициализирован с помощью sport_tx_init(),
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sport_tx_start_req(). <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 16 Передача начинается с помщью sport_tx_start_req(). Можно поставить до 16
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. запросов одновременно.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sport_tx_stop(). Останвить все текущие передачи можно с помощью sport_tx_stop().
***********************************************************************/ ***********************************************************************/
@ -32,7 +32,7 @@
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5 16-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */ /* дескриптор DMA размера 5 16-битных слов */
typedef struct { typedef struct {
uint16_t ndpl; uint16_t ndpl;
uint16_t sal; uint16_t sal;
@ -52,9 +52,9 @@ static volatile int f_tx_was_empty = 0;
void sport_tx_done(uint32_t* addr, uint32_t size); void sport_tx_done(uint32_t* addr, uint32_t size);
/***************************************************************************//** /***************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @brief Чтение флагов статуса вывода
@return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> --- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> #t_x502_out_status_flags, @return Флаги статуса --- набор битов из #t_x502_out_status_flags,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ȕ. объединенных через логическое “ИЛИ”.
******************************************************************************/ ******************************************************************************/
uint32_t sport_tx_out_status(void) { uint32_t sport_tx_out_status(void) {
uint32_t ret = 0; uint32_t ret = 0;
@ -69,10 +69,10 @@ uint32_t sport_tx_out_status(void) {
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT. /** @brief Начальная инициализация канала DMA на передачу по SPORT.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Функция устанавливает параметры DMA которые не меняются при последующей работе
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ прошивки */
void sport_tx_init(void) { void sport_tx_init(void) {
int i; int i;
for (i=0; i < SPORT_TX_DESCR_CNT; i++) { for (i=0; i < SPORT_TX_DESCR_CNT; i++) {
@ -89,42 +89,42 @@ void sport_tx_init(void) {
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> DMA <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> SPORT0 <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /* Функция разрешает канал DMA для передачи данных в SPORT0 и саму передачу
* <EFBFBD><EFBFBD><EFBFBD> SPORT 0 */ * для SPORT 0 */
static void f_sport_tx_start(void) { static void f_sport_tx_start(void) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT'<EFBFBD> */ /* разрешаем передачу по SPORT'у */
*pSPORT0_TCR1 |= TSPEN; *pSPORT0_TCR1 |= TSPEN;
f_first = 0; f_first = 0;
f_tx_was_empty = 0; f_tx_was_empty = 0;
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0. /** @brief Останов сбора по SPORT0.
* *
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> DMA <20><> <20><><EFBFBD><EFBFBD> */ * Функция запрещает прием по SPORT0 и соответствующий канал DMA на прем */
void sport_tx_stop(void) { void sport_tx_stop(void) {
*pSIC_IMASK0 &= ~IRQ_DMA4; *pSIC_IMASK0 &= ~IRQ_DMA4;
*pDMA4_CONFIG = 0; *pDMA4_CONFIG = 0;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 3-<2D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> DMA <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* нужно подождать до 3-х циклов, чтобы DMA действительно завершился */
ssync(); ssync();
ssync(); ssync();
ssync(); ssync();
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT */ /* запрет передачи по SPORT */
*pSPORT0_TCR1 &= ~TSPEN; *pSPORT0_TCR1 &= ~TSPEN;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> DMA */ /* сбрасываем признаки прерываний от DMA */
*pDMA4_IRQ_STATUS = DMA_DONE | DMA_ERR; *pDMA4_IRQ_STATUS = DMA_DONE | DMA_ERR;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* заново инициализируем все дескрипторы */
sport_tx_init(); sport_tx_init();
} }
/**************************************************************************//** /**************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @brief Получить количество свободных дескрипторов на передачу
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Функция возвращает количество запросов, которое можно поставить в очередь
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sport_tx_start_req(). на передачу с помощью sport_tx_start_req().
@return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @return Количество запросов на передачу, которое можно поставить в очередь
******************************************************************************/ ******************************************************************************/
int sport_tx_req_rdy(void) { int sport_tx_req_rdy(void) {
return SPORT_TX_DESCR_CNT - (f_put_cnt - f_done_cnt + 1); return SPORT_TX_DESCR_CNT - (f_put_cnt - f_done_cnt + 1);
@ -132,33 +132,33 @@ int sport_tx_req_rdy(void) {
/**************************************************************************//** /**************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 @brief Поставить запрос на передачу по SPORT0
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Функция ставит запрос на передачу указанных данных. Сами данные не копируются,
<EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! т.е. буфер нельзя будет использовать до того, как данные не будут переданы!
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD> Для постановки запроса необходимо, чтобы был свободный дескриптор (можно
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> sport_tx_req_rdy()). узнать через sport_tx_req_rdy()).
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #SPORT_TX_REQ_SIZE_MAX Количество слов в запросе не должно превышать #SPORT_TX_REQ_SIZE_MAX
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> При добавление первого дескриптора автомтически разрешается передача по
DMA <EFBFBD> SPORT0. DMA и SPORT0.
@param[in] buf <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. @param[in] buf Указатель на массив на передачу.
@param[in] size <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] size Количество 32-битных слов на передачу
*******************************************************************************/ *******************************************************************************/
void sport_tx_start_req(uint32_t* buf, uint32_t size) { void sport_tx_start_req(uint32_t* buf, uint32_t size) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> DMA <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* запрещаем прерывание от DMA на случай гонок с изменением позиций */
*pSIC_IMASK0 &= ~IRQ_DMA4; *pSIC_IMASK0 &= ~IRQ_DMA4;
f_descrs[f_put_descr].sal = (uint32_t)buf & 0xFFFF; f_descrs[f_put_descr].sal = (uint32_t)buf & 0xFFFF;
f_descrs[f_put_descr].sah = ((uint32_t)buf >> 16) & 0xFFFF; f_descrs[f_put_descr].sah = ((uint32_t)buf >> 16) & 0xFFFF;
f_descrs[f_put_descr].xcnt = size*2; f_descrs[f_put_descr].xcnt = size*2;
f_descrs[f_put_descr].cfg = SPORT_TX_DMA_CFG_WAIT; f_descrs[f_put_descr].cfg = SPORT_TX_DMA_CFG_WAIT;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA */ /* убеждаемся, что данные будут уже записаны в память к моменту запуска DMA */
ssync(); ssync();
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> => <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> */ /* если DMA сейчас остановлен => запускаем его */
if (f_put_cnt==f_done_cnt) { if (f_put_cnt==f_done_cnt) {
uint32_t cfg_wrd = SPORT_TX_DMA_CFG_START; uint32_t cfg_wrd = SPORT_TX_DMA_CFG_START;
*pDMA4_CONFIG = cfg_wrd; *pDMA4_CONFIG = cfg_wrd;
@ -179,14 +179,14 @@ void sport_tx_start_req(uint32_t* buf, uint32_t size) {
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. /** @brief Обработчик прерывания по SPORT0 на завершение передачи.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Прерывание возникает, когда был передан блок данных по SPORT0, соответствующий
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. одному дескриптору.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sport_tx_done(). Функция рассчитывает количество переданных данных и вызывает sport_tx_done().
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Также функция помечает дескриптор как свободный и при необходимости
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA (<28><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> снова запускает DMA (если он был остановлен, но при этом уже добавлен новый
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */ дескриптор на передачу) */
ISR( isr_sport_dma_tx) { ISR( isr_sport_dma_tx) {
if (*pDMA4_IRQ_STATUS & DMA_DONE) { if (*pDMA4_IRQ_STATUS & DMA_DONE) {
uint32_t* addr; uint32_t* addr;
@ -195,8 +195,8 @@ ISR( isr_sport_dma_tx) {
*pDMA4_IRQ_STATUS = DMA_DONE; *pDMA4_IRQ_STATUS = DMA_DONE;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /* обработку выполняем только в случае, если есть начатые, но не завершенные
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ дескрипторы */
if (f_done_cnt != f_put_cnt) { if (f_done_cnt != f_put_cnt) {
f_done_cnt++; f_done_cnt++;
@ -215,7 +215,7 @@ ISR( isr_sport_dma_tx) {
ssync(); ssync();
status = *pDMA4_IRQ_STATUS; status = *pDMA4_IRQ_STATUS;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> => <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ /* если DMA остановлен, а дескрипторы на передачу еще есть => запускаем снова */
if ((f_done_cnt != f_put_cnt) && !(status & DMA_RUN)) { if ((f_done_cnt != f_put_cnt) && !(status & DMA_RUN)) {
*pDMA4_CONFIG = SPORT_TX_DMA_CFG_START; *pDMA4_CONFIG = SPORT_TX_DMA_CFG_START;
} }

View File

@ -1,17 +1,17 @@
/** @defgroup sport_tx <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 */ /** @defgroup sport_tx Передача потока данных по SPORT0 */
/***************************************************************************//** /***************************************************************************//**
@addtogroup sport_tx @addtogroup sport_tx
@{ @{
@file l502_sport_tx.h @file l502_sport_tx.h
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 Файл содержит описания функций для управления передачи потока по SPORT0
******************************************************************************/ ******************************************************************************/
#ifndef L502_SPORT_TX_H #ifndef L502_SPORT_TX_H
#define L502_SPORT_TX_H #define L502_SPORT_TX_H
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sport_tx_start_req() */ /** Максимальный размер при передаче в функцию sport_tx_start_req() */
#define SPORT_TX_REQ_SIZE_MAX (16*1024) #define SPORT_TX_REQ_SIZE_MAX (16*1024)
void sport_tx_init(void); void sport_tx_init(void);

View File

@ -3,9 +3,9 @@
@{ @{
@file l502_stream.c @file l502_stream.c
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>/DIN <20> <20><> <20> <20><> <20><> <20> <20><><EFBFBD>/DOUT. Файл содержит функции обработки потоков от АЦП/DIN в ПК и от ПК в ЦАП/DOUT.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0, <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> Также в этот файл внесена реализация функций приема по SPORT0, так как они
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. связаны с логикой управления потоков.
*/ */
@ -28,12 +28,12 @@
#include "l502_sport_rx.h" #include "l502_sport_rx.h"
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 <EFBFBD> 32-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Размер буфера на прием данных по SPORT0 в 32-битных словах */
#define L502_SPORT_IN_BUF_SIZE (2048*1024) #define L502_SPORT_IN_BUF_SIZE (2048*1024)
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Размер буфера для приема данных по HostDMA на вывод в 32-битных словах */
#define L502_HDMA_OUT_BUF_SIZE (1024*1024) #define L502_HDMA_OUT_BUF_SIZE (1024*1024)
/** <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 <20><>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Шаг прерываний для приема данных по SPORT0 по-умолчанию */
#define L502_DEFAULT_SPORT_RX_BLOCK_SIZE (32*1024) #define L502_DEFAULT_SPORT_RX_BLOCK_SIZE (32*1024)
@ -41,40 +41,40 @@
t_in_stream_state g_stream_in_state = IN_STREAM_STOP; t_in_stream_state g_stream_in_state = IN_STREAM_STOP;
t_out_stream_state g_stream_out_state = OUT_STREAM_STOP; t_out_stream_state g_stream_out_state = OUT_STREAM_STOP;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> */ /** Режим работы - определяет, запущен ли синхронный сбор или тест */
volatile int g_mode = L502_BF_MODE_IDLE; volatile int g_mode = L502_BF_MODE_IDLE;
int g_streams = L502_STREAM_ADC; int g_streams = L502_STREAM_ADC;
static int f_bf_reg = 0; static int f_bf_reg = 0;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* слово, обозначающее, что произошло переполнение */
static const uint32_t f_overflow_wrd = L502_STREAM_IN_MSG_OVERFLOW; static const uint32_t f_overflow_wrd = L502_STREAM_IN_MSG_OVERFLOW;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> digin <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> SPORT (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */ /* буфер для приема digin и данных АЦП от SPORT (в неинициализируемой области) */
#include "l502_sdram_noinit.h" #include "l502_sdram_noinit.h"
static volatile uint32_t f_sport_in_buf[L502_SPORT_IN_BUF_SIZE]; static volatile uint32_t f_sport_in_buf[L502_SPORT_IN_BUF_SIZE];
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* позиция в буфере в которую будет записан следующий принятых отсчет */
static volatile uint32_t f_sport_in_put_pos = 0; static volatile uint32_t f_sport_in_put_pos = 0;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* позиция в буфере за последним обработанным отсчетом */
static uint32_t f_sport_in_proc_pos = 0; static uint32_t f_sport_in_proc_pos = 0;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */ /* позиция в буфере за последним изятым из буфера отсчетом (позиция первого занятого отсчета) */
static volatile uint32_t f_sport_in_get_pos = 0; static volatile uint32_t f_sport_in_get_pos = 0;
/* <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 */ /* шаг прерываний на прием по SPORT0 */
static uint32_t f_sport_in_block_size = L502_DEFAULT_SPORT_RX_BLOCK_SIZE; static uint32_t f_sport_in_block_size = L502_DEFAULT_SPORT_RX_BLOCK_SIZE;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> */ /* реально используемый размер входного буфера на прием */
static uint32_t f_sport_in_buf_size = L502_SPORT_IN_BUF_SIZE; static uint32_t f_sport_in_buf_size = L502_SPORT_IN_BUF_SIZE;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HDMA <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20> DIGOUT */ /* буфер для прв кинятых данных по HDMA для вывода на ЦАП и DIGOUT */
#include "l502_sdram_noinit.h" #include "l502_sdram_noinit.h"
static volatile uint32_t f_hdma_out_buf[L502_HDMA_OUT_BUF_SIZE]; static volatile uint32_t f_hdma_out_buf[L502_HDMA_OUT_BUF_SIZE];
static volatile uint32_t f_hdma_out_put_pos = 0; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HDMA */ static volatile uint32_t f_hdma_out_put_pos = 0; /* указатель на позицию за последним принятым по HDMA */
static uint32_t f_hdma_out_start_pos; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> static uint32_t f_hdma_out_start_pos; /* указатель на позицию за последним поставленным на прием словом
(<EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */ (с нее будет стартовать следующий запрос) */
static volatile uint32_t f_hdma_out_get_pos = 0; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> static volatile uint32_t f_hdma_out_get_pos = 0; /* указатель на позицию за последним обработанным словом
(<EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ (с нее будет взято следующее слово для обработки, когда будет готово */
static int f_hdma_out_block_size = 0x8000; static int f_hdma_out_block_size = 0x8000;
static int f_hdma_out_proc_pos; static int f_hdma_out_proc_pos;
@ -86,13 +86,13 @@ static uint32_t f_recv_size = 0;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> /* функция вызывается при возникновении переполнения буфера на прием
<EFBFBD><EFBFBD> SPORT'<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>/DIGIN */ по SPORT'у данных АЦП/DIGIN */
static void f_stream_in_set_overflow(void) { static void f_stream_in_set_overflow(void) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> */ /* останавливаем прием данных от АЦП */
sport_rx_stop(); sport_rx_stop();
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> /* устанавливаем флаг, что нужно передать сообщение о
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ переполнении */
g_stream_in_state = IN_STREAM_OV_ALERT; g_stream_in_state = IN_STREAM_OV_ALERT;
} }
@ -100,22 +100,22 @@ static void f_stream_in_set_overflow(void) {
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** @brief Начальная инициализация параметров для синхронных потоков */
void l502_stream_init(void) { void l502_stream_init(void) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* останавливаем сбор данных, если он был запущен */
fpga_reg_write(L502_REGS_IOHARD_GO_SYNC_IO, 0); fpga_reg_write(L502_REGS_IOHARD_GO_SYNC_IO, 0);
fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, 0); fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, 0);
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT */ /* настройка DMA на передачу по SPORT */
sport_tx_init(); sport_tx_init();
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** @brief Запуск предзагрузки данных на вывода
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>. Данная функция запускает предзагрузку данных потока на вывод.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> BlackFin <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Используется, чтобы загрузить данные в буфер BlackFin до запуска синхронного
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ввода-вывода.
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Код ошибки */
int32_t stream_out_preload(void) { int32_t stream_out_preload(void) {
int32_t err = g_stream_out_state==OUT_STREAM_RUN ? L502_BF_ERR_STREAM_RUNNING : int32_t err = g_stream_out_state==OUT_STREAM_RUN ? L502_BF_ERR_STREAM_RUNNING :
0; 0;
@ -123,10 +123,10 @@ int32_t stream_out_preload(void) {
f_hdma_out_get_pos = f_hdma_out_start_pos = f_hdma_out_get_pos = f_hdma_out_start_pos =
f_hdma_out_put_pos = f_hdma_out_proc_pos = 0; f_hdma_out_put_pos = f_hdma_out_proc_pos = 0;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> HDMA */ /* разрешаем прием по HDMA */
hdma_recv_start(); hdma_recv_start();
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> /* запускаем первый блок на прием (остальные будут
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> stream_proc() */ добавлены из stream_proc() */
f_hdma_out_start_pos+=f_hdma_out_block_size; f_hdma_out_start_pos+=f_hdma_out_block_size;
hdma_recv_req_start((uint32_t*)f_hdma_out_buf, f_hdma_out_block_size); hdma_recv_req_start((uint32_t*)f_hdma_out_buf, f_hdma_out_block_size);
@ -139,8 +139,8 @@ int32_t stream_out_preload(void) {
static void f_set_streams(uint32_t streams) { static void f_set_streams(uint32_t streams) {
uint32_t wrd_en = 0; uint32_t wrd_en = 0;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> /* если уже запущен потоковый режим и разрешается один из
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> hdma */ потоков на ввод, то инициализируем прием по SPORT и передачу по hdma */
if (g_mode == L502_BF_MODE_STREAM) { if (g_mode == L502_BF_MODE_STREAM) {
if ((streams & L502_STREAM_ALL_IN) && !(g_streams & L502_STREAM_ALL_IN)) { if ((streams & L502_STREAM_ALL_IN) && !(g_streams & L502_STREAM_ALL_IN)) {
sport_rx_start(); sport_rx_start();
@ -151,7 +151,7 @@ static void f_set_streams(uint32_t streams) {
} }
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> FPGA */ /* изменяем разрешенные потоки в регистре FPGA */
if (streams & L502_STREAM_ADC) if (streams & L502_STREAM_ADC)
wrd_en |= 0x1; wrd_en |= 0x1;
if (streams & L502_STREAM_DIN) if (streams & L502_STREAM_DIN)
@ -159,47 +159,47 @@ static void f_set_streams(uint32_t streams) {
fpga_reg_write(L502_REGS_IOARITH_IN_STREAM_ENABLE, wrd_en); fpga_reg_write(L502_REGS_IOARITH_IN_STREAM_ENABLE, wrd_en);
/** @todo: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** @todo: разрешение на лету выходных потоков */
g_streams = streams; g_streams = streams;
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** @brief Разрешение указанных синхронных потоков
@param[in] streams <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> #t_l502_streams, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] streams Битовая маска из #t_l502_streams, указывающая какие потоки
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) должны быть разрешены (в дополнения к уже разрешенным)
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Код ошибки */
int32_t stream_enable(uint32_t streams) { int32_t stream_enable(uint32_t streams) {
f_set_streams(g_streams | streams); f_set_streams(g_streams | streams);
return 0; return 0;
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** @brief Запрещение указанных синхронных потоков
@param[in] streams <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> #t_l502_streams, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] streams Битовая маска из #t_l502_streams, указывающая какие потоки
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> должны быть запрещены
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Код ошибки */
int32_t stream_disable(uint32_t streams) { int32_t stream_disable(uint32_t streams) {
f_set_streams(g_streams & ~streams); f_set_streams(g_streams & ~streams);
return 0; return 0;
} }
/***************************************************************************//** /***************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @brief Запуск синхронного ввода-вывода
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. Функция запускает синхронный ввод-вывод платы.
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> При этом начинается передача по всем ранее разрешенным потокам с помощью
stream_enable(). stream_enable().
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> После вызова этой функции изменять настройки модуля уже нельязя, однако
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> stream_enable() можно дополнительно разрешать или запрещать потоки через stream_enable()
<EFBFBD><EFBFBD><EFBFBD> stream_disable(). или stream_disable().
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. @return Код ошибки.
***************************************************************************/ ***************************************************************************/
int32_t streams_start(void) { int32_t streams_start(void) {
int32_t err = g_mode != L502_BF_MODE_IDLE ? L502_BF_ERR_STREAM_RUNNING : 0; int32_t err = g_mode != L502_BF_MODE_IDLE ? L502_BF_ERR_STREAM_RUNNING : 0;
if (!err) { if (!err) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /* прием по SPORT инициализируется всесте с началом запуска
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ синхронного сбора */
f_sport_in_put_pos = f_sport_in_get_pos = f_sport_in_proc_pos = 0; f_sport_in_put_pos = f_sport_in_get_pos = f_sport_in_proc_pos = 0;
@ -213,20 +213,20 @@ int32_t streams_start(void) {
f_set_streams(g_streams); f_set_streams(g_streams);
if (g_streams & L502_STREAM_ALL_OUT) { if (g_streams & L502_STREAM_ALL_OUT) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TFS <EFBFBD><EFBFBD> SPORT */ /* разрешаем ПЛИС генерацию TFS по SPORT */
f_bf_reg |= L502_REGBIT_IOHARD_OUT_TFS_EN_Msk; f_bf_reg |= L502_REGBIT_IOHARD_OUT_TFS_EN_Msk;
fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, f_bf_reg); fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, f_bf_reg);
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, /* если не было предзагрузки до запуска,
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ то запускаем прием сейчас */
if ((g_stream_out_state == OUT_STREAM_STOP) || if ((g_stream_out_state == OUT_STREAM_STOP) ||
(g_stream_out_state == OUT_STREAM_ERR)) { (g_stream_out_state == OUT_STREAM_ERR)) {
stream_out_preload(); stream_out_preload();
} }
if (g_stream_out_state == OUT_STREAM_PRELOAD) { if (g_stream_out_state == OUT_STREAM_PRELOAD) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* выполняем предзагрузку данных */
fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, f_bf_reg | 1); fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, f_bf_reg | 1);
g_stream_out_state = OUT_STREAM_RUN; g_stream_out_state = OUT_STREAM_RUN;
} }
@ -234,11 +234,11 @@ int32_t streams_start(void) {
/* <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /* Так как конвейер автомата управления входной коммутации АЦП состоит
<EFBFBD><EFBFBD> 2-<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> из 2-х стадий, для корректного синхронного старта необходимо в
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ыполнить два раза предзагрузку. В противном случае,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> время момента первого отсчета может не совпадать с моментом
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> запуска синхронизации
*/ */
fpga_reg_write(L502_REGS_IOHARD_PRELOAD_ADC, 1); fpga_reg_write(L502_REGS_IOHARD_PRELOAD_ADC, 1);
fpga_reg_write(L502_REGS_IOHARD_PRELOAD_ADC, 1); fpga_reg_write(L502_REGS_IOHARD_PRELOAD_ADC, 1);
@ -254,12 +254,12 @@ int32_t streams_start(void) {
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. /** @brief Останов синхронных потоков ввода-вывода.
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. По этой функции останавливаются все синхронные потоки.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT <EFBFBD> <20><> HostDMA Запрещается передача потоков по SPORT и по HostDMA
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Код ошибки */
int32_t streams_stop(void) { int32_t streams_stop(void) {
int32_t err = g_mode != L502_BF_MODE_STREAM ? L502_BF_ERR_STREAM_STOPPED : 0; int32_t err = g_mode != L502_BF_MODE_STREAM ? L502_BF_ERR_STREAM_STOPPED : 0;
if (!err) { if (!err) {
@ -267,11 +267,11 @@ int32_t streams_stop(void) {
hdma_recv_stop(); hdma_recv_stop();
fpga_reg_write(L502_REGS_IOHARD_GO_SYNC_IO, 0); fpga_reg_write(L502_REGS_IOHARD_GO_SYNC_IO, 0);
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT'<EFBFBD> */ /* запрещаем прием и передачу по SPORT'у */
sport_rx_stop(); sport_rx_stop();
sport_tx_stop(); sport_tx_stop();
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TFS <EFBFBD> RFS */ /* запрещаем генерацию TFS и RFS */
f_bf_reg = 0; f_bf_reg = 0;
fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, f_bf_reg); fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, f_bf_reg);
@ -285,70 +285,70 @@ int32_t streams_stop(void) {
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /** @brief Фоновая обработка потокой ввода-вывода
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. Функция переодически вызывается из основного цикла программы.
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> При рабочем режиме, проверяются, есть
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>/DIGIN <20>/<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ли необработанные данные пришедшие от АЦП/DIGIN и/или пришедшие от ПК данные
<EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> DOUT. <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> на ЦАП или DOUT. При их наличии вызывается соответствующая функция пользовательской
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. обработки данных.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Также, если было переполнение и все данные до переполнения были обработаны,
<EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>, <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ то в ПК посылается слово о том, что в этом месте произошло переполнение */
void stream_proc(void) { void stream_proc(void) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ /* если запущен поток ввода */
if ((g_stream_in_state != IN_STREAM_STOP) && (g_stream_in_state != IN_STREAM_ERR)) { if ((g_stream_in_state != IN_STREAM_STOP) && (g_stream_in_state != IN_STREAM_ERR)) {
uint32_t sport_rdy_size; uint32_t sport_rdy_size;
uint32_t put_pos = f_sport_in_put_pos; uint32_t put_pos = f_sport_in_put_pos;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> sport'<EFBFBD> */ /* смотрим, сколько принято необработанных данных по sport'у */
sport_rdy_size = put_pos >= f_sport_in_proc_pos ? sport_rdy_size = put_pos >= f_sport_in_proc_pos ?
put_pos - f_sport_in_proc_pos : f_sport_in_buf_size - f_sport_in_proc_pos; put_pos - f_sport_in_proc_pos : f_sport_in_buf_size - f_sport_in_proc_pos;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* если есть необработанные данные - вызываем функцию для обработки */
if (sport_rdy_size) { if (sport_rdy_size) {
uint32_t processed = usr_in_proc_data( uint32_t processed = usr_in_proc_data(
(uint32_t*)&f_sport_in_buf[f_sport_in_proc_pos], (uint32_t*)&f_sport_in_buf[f_sport_in_proc_pos],
sport_rdy_size); sport_rdy_size);
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* обновляем счетчик обработканных данных */
f_sport_in_proc_pos += processed; f_sport_in_proc_pos += processed;
if (f_sport_in_proc_pos==f_sport_in_buf_size) if (f_sport_in_proc_pos==f_sport_in_buf_size)
f_sport_in_proc_pos = 0; f_sport_in_proc_pos = 0;
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. /* если было переполнение - нужно передать слово о переполнениии.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ передаем его после того, как передадим все слова до переполнения */
if ((g_stream_in_state == IN_STREAM_OV_ALERT) && !sport_rdy_size && hdma_send_req_rdy()) { if ((g_stream_in_state == IN_STREAM_OV_ALERT) && !sport_rdy_size && hdma_send_req_rdy()) {
hdma_send_req_start(&f_overflow_wrd, 1, 1); hdma_send_req_start(&f_overflow_wrd, 1, 1);
g_stream_in_state = IN_STREAM_ERR; g_stream_in_state = IN_STREAM_ERR;
} }
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> */ /* если есть поток на вывод */
if ((g_stream_out_state == OUT_STREAM_PRELOAD) || if ((g_stream_out_state == OUT_STREAM_PRELOAD) ||
(g_stream_out_state == OUT_STREAM_RUN)) { (g_stream_out_state == OUT_STREAM_RUN)) {
uint32_t hdma_rdy_size; uint32_t hdma_rdy_size;
uint32_t put_pos = f_hdma_out_put_pos; uint32_t put_pos = f_hdma_out_put_pos;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HDMA */ /* проверяем, сколько есть необработанных данных, принятых по HDMA */
hdma_rdy_size = put_pos >= f_hdma_out_proc_pos ? hdma_rdy_size = put_pos >= f_hdma_out_proc_pos ?
put_pos - f_hdma_out_proc_pos : L502_HDMA_OUT_BUF_SIZE - f_hdma_out_proc_pos; put_pos - f_hdma_out_proc_pos : L502_HDMA_OUT_BUF_SIZE - f_hdma_out_proc_pos;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* если такие есть -> пробуем обработать */
if (hdma_rdy_size != 0) { if (hdma_rdy_size != 0) {
uint32_t processed = usr_out_proc_data( uint32_t processed = usr_out_proc_data(
(uint32_t*)&f_hdma_out_buf[f_hdma_out_proc_pos], (uint32_t*)&f_hdma_out_buf[f_hdma_out_proc_pos],
hdma_rdy_size); hdma_rdy_size);
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* обновляем счетчик обработанных данных */
f_hdma_out_proc_pos += processed; f_hdma_out_proc_pos += processed;
if (f_hdma_out_proc_pos==L502_HDMA_OUT_BUF_SIZE) if (f_hdma_out_proc_pos==L502_HDMA_OUT_BUF_SIZE)
f_hdma_out_proc_pos = 0; f_hdma_out_proc_pos = 0;
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /* если есть свободное место в буфере на прием и есть свободные
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> => <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ дескрипторы => ставим новый запрос на прием даннх */
if (hdma_recv_req_rdy()) { if (hdma_recv_req_rdy()) {
uint32_t get_pos = f_hdma_out_get_pos; uint32_t get_pos = f_hdma_out_get_pos;
@ -367,17 +367,17 @@ void stream_proc(void) {
} }
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> size <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 /** @brief Освобождение size слов из буфера приема по SPORT0
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> size <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT0, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Функция помечает, что size слов из начала той части буфера SPORT0, в которую
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20>.<2E>. <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> были приняты данные, но не освобождены, как освобожденные. Т.е. в эту область
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0. снова можно будет принимать данные со SPORT0.
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> При этом надо всегда следить, чтобы количество освобожденных данных не
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! привышало количество обработанных!
@param[in] size <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @param[in] size Размер освобожденных данных в 32-битных словах */
void stream_in_buf_free(uint32_t size) { void stream_in_buf_free(uint32_t size) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ /* обновляем позицию переданного слова */
uint32_t get_pos = f_sport_in_get_pos; uint32_t get_pos = f_sport_in_get_pos;
get_pos += size; get_pos += size;
if (get_pos >= f_sport_in_buf_size) if (get_pos >= f_sport_in_buf_size)
@ -385,15 +385,15 @@ void stream_in_buf_free(uint32_t size) {
f_sport_in_get_pos = get_pos; f_sport_in_get_pos = get_pos;
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> size <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA /** @brief Освобождение size слов из буфера приема по HostDMA
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> size <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HostDMA, <EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Функция помечает, что size слов из начала той части буфера HostDMA, в которую
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>, <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20>.<2E>. <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> были приняты данные от ПК, но не освобождены, как освобожденные. Т.е. в эту область
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><> HostDMA. снова можно будет принимать данные от ПК по HostDMA.
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> При этом надо всегда следить, чтобы количество освобожденных данных не
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>! привышало количество обработанных!
@param[in] size <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @param[in] size Размер освобожденных данных в 32-битных словах */
void stream_out_buf_free(uint32_t size) { void stream_out_buf_free(uint32_t size) {
uint32_t get_pos = f_hdma_out_get_pos; uint32_t get_pos = f_hdma_out_get_pos;
get_pos += size; get_pos += size;
@ -402,18 +402,18 @@ void stream_out_buf_free(uint32_t size) {
f_hdma_out_get_pos = get_pos; f_hdma_out_get_pos = get_pos;
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA /** @brief Обработка завершения приема по HostDMA
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> Функция вызывается из обработчика прерывания, когда завершился прием
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HDMA <20> <20><>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> блока данных по HDMA в ПК, поставленного до этого на передачу с
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> hdma_recv_req_start(). помощью hdma_recv_req_start().
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> Функция просто обновляет счетчик принятых данных (а обработка будет уже
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> stream_proc(). из фоновой функции stream_proc().
@param[in] addr <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. @param[in] addr Адрес слова, сразу за последним принятым словом.
@param[in] size <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */ @param[in] size Количество принятых 32-битных слов */
void hdma_recv_done(uint32_t* addr, uint32_t size) { void hdma_recv_done(uint32_t* addr, uint32_t size) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ /* обновляем позицию принятого слова */
uint32_t put_pos = f_hdma_out_put_pos; uint32_t put_pos = f_hdma_out_put_pos;
put_pos += size; put_pos += size;
if (put_pos == L502_HDMA_OUT_BUF_SIZE) if (put_pos == L502_HDMA_OUT_BUF_SIZE)
@ -425,10 +425,10 @@ void hdma_recv_done(uint32_t* addr, uint32_t size) {
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>. /** @brief Размер буфера на прием.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 Функция возвращает размер буфера на прием по SPORT0
@return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return размер буфера на прием в 32-битных словах */
extern uint32_t sport_in_buffer_size(void) { extern uint32_t sport_in_buffer_size(void) {
return L502_SPORT_IN_BUF_SIZE; return L502_SPORT_IN_BUF_SIZE;
} }
@ -439,24 +439,24 @@ extern uint32_t sport_in_buffer_size(void) {
/** @addtogroup sport_rx /** @addtogroup sport_rx
@{ */ @{ */
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 /** @brief Установка шага прерывания для према по SPORT0
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> DMA, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> Функция устанавливает шаг прерываний для DMA, использующегося для
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>. приема данных синхронного ввода.
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 4 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> При этом размер шага должен быть как имнимум в 4 раза меньше размера
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #L502_SPORT_IN_BUF_SIZE. буфера #L502_SPORT_IN_BUF_SIZE.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, После установки шага определяется реально используемый размер буфера,
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> #L502_SPORT_IN_BUF_SIZE. как наибольшее число кратное шагу и не превышающее #L502_SPORT_IN_BUF_SIZE.
@param[in] size <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] size Размер шага прерывания в 32-битных словах
@return <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @return Код ошибки */
int32_t sport_in_set_step_size(uint32_t size) { int32_t sport_in_set_step_size(uint32_t size) {
int mul; int mul;
if ((size >= L502_SPORT_IN_BUF_SIZE/4) || (size > 0x8000)) if ((size >= L502_SPORT_IN_BUF_SIZE/4) || (size > 0x8000))
return L502_BF_ERR_INVALID_CMD_PARAMS; return L502_BF_ERR_INVALID_CMD_PARAMS;
mul = L502_SPORT_IN_BUF_SIZE/size; mul = L502_SPORT_IN_BUF_SIZE/size;
/* <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 0x8000 <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /* не может быть боьше 0x8000 шагов, так как регистр
YCNT 16-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (+ <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 2) */ YCNT 16-разрядный (+ еще умножаем на 2) */
if (mul > 0x8000) if (mul > 0x8000)
mul = 0x8000; mul = 0x8000;
f_sport_in_buf_size = size*mul; f_sport_in_buf_size = size*mul;
@ -465,26 +465,26 @@ int32_t sport_in_set_step_size(uint32_t size) {
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 /** @brief Запуск сбора данных по SPORT0
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA3 <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 2D, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Функция настраивает DMA3 на режим автобуфера с 2D, размер шага выбирается
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> f_sport_in_block_size. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> DMA <EFBFBD> равным f_sport_in_block_size. После чего разрешается канал DMA и
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 */ прием по SPORT0 */
void sport_rx_start(void) { void sport_rx_start(void) {
static volatile int dummy; static volatile int dummy;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA */ /* запрещаем DMA */
*pDMA3_CONFIG = 0; *pDMA3_CONFIG = 0;
ssync(); ssync();
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> */ /* вычитываем все данные из буфера, если они были */
while (*pSPORT0_STAT & RXNE) { while (*pSPORT0_STAT & RXNE) {
dummy = *pSPORT0_RX16; dummy = *pSPORT0_RX16;
ssync(); ssync();
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA */ /* настраиваем DMA */
*pDMA3_START_ADDR = (void*)f_sport_in_buf; *pDMA3_START_ADDR = (void*)f_sport_in_buf;
*pDMA3_X_COUNT = 2*f_sport_in_block_size; /* <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> SPORT <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 16 <20><><EFBFBD> (<28><><EFBFBD><EFBFBD> <20> 2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), *pDMA3_X_COUNT = 2*f_sport_in_block_size; /* так как SPORT настроен на 16 бит (хоть и 2 канала),
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> => <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 2) */ а размер в 32 битных словах => умножаем на 2) */
*pDMA3_X_MODIFY = 2; *pDMA3_X_MODIFY = 2;
*pDMA3_Y_COUNT = f_sport_in_buf_size/f_sport_in_block_size;; *pDMA3_Y_COUNT = f_sport_in_buf_size/f_sport_in_block_size;;
*pDMA3_Y_MODIFY = 2; *pDMA3_Y_MODIFY = 2;
@ -493,54 +493,54 @@ void sport_rx_start(void) {
ssync(); ssync();
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA */ /* разрешаем DMA */
*pSIC_IMASK0 |= IRQ_DMA3; *pSIC_IMASK0 |= IRQ_DMA3;
*pDMA3_CONFIG |= DMAEN; *pDMA3_CONFIG |= DMAEN;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT'<EFBFBD> */ /* разрешаем прием по SPORT'у */
*pSPORT0_RCR1 |= RSPEN; *pSPORT0_RCR1 |= RSPEN;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RFS <EFBFBD><EFBFBD> SPORT0 */ /* разрешаем генерацию RFS на SPORT0 */
f_bf_reg |= L502_REGBIT_IOHARD_OUT_RFS_EN_Msk; f_bf_reg |= L502_REGBIT_IOHARD_OUT_RFS_EN_Msk;
fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, f_bf_reg); fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, f_bf_reg);
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 /** @brief Останов сбора данных по SPORT0
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA */ Функция запрещает прием по SPORT0 и останавливает DMA */
void sport_rx_stop(void) { void sport_rx_stop(void) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RFS */ /* останавливаем генерацию RFS */
f_bf_reg &= ~L502_REGBIT_IOHARD_OUT_RFS_EN_Msk; f_bf_reg &= ~L502_REGBIT_IOHARD_OUT_RFS_EN_Msk;
fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, f_bf_reg); fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, f_bf_reg);
ssync(); ssync();
ssync(); ssync();
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT */ /* запрещаем прием по SPORT */
*pSPORT0_RCR1 &= ~RSPEN; *pSPORT0_RCR1 &= ~RSPEN;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DMA */ /* запрещаем DMA */
*pDMA3_CONFIG =0; //&= ~DMAEN; *pDMA3_CONFIG =0; //&= ~DMAEN;
*pSIC_IMASK0 &= ~IRQ_DMA3; *pSIC_IMASK0 &= ~IRQ_DMA3;
//ssync(); //ssync();
} }
/** @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0 <20><> <20><><EFBFBD><EFBFBD><EFBFBD>. /** @brief Обработчик прерывания по SPORT0 на прием.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0. Прерывание возникает, когда был принят блок данных по SPORT0.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ Обновляем указатель принятых данных и проверяем переполнение */
ISR(isr_sport_dma_rx) { ISR(isr_sport_dma_rx) {
if (*pDMA3_IRQ_STATUS & DMA_DONE) { if (*pDMA3_IRQ_STATUS & DMA_DONE) {
uint32_t rdy_put_pos; uint32_t rdy_put_pos;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> DMA */ /* сбрасываем прерывание от DMA */
*pDMA3_IRQ_STATUS = DMA_DONE; *pDMA3_IRQ_STATUS = DMA_DONE;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ /* обновляем количество принятых данных на размер блока */
f_sport_in_put_pos += f_sport_in_block_size; f_sport_in_put_pos += f_sport_in_block_size;
if (f_sport_in_put_pos == f_sport_in_buf_size) if (f_sport_in_put_pos == f_sport_in_buf_size)
f_sport_in_put_pos = 0; f_sport_in_put_pos = 0;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> */ /* смотрим, сколько свободно места в буфере на прием */
uint32_t get_pos = f_sport_in_get_pos; uint32_t get_pos = f_sport_in_get_pos;
rdy_put_pos = f_sport_in_put_pos > get_pos ? rdy_put_pos = f_sport_in_put_pos > get_pos ?
f_sport_in_buf_size -f_sport_in_put_pos + get_pos : f_sport_in_buf_size -f_sport_in_put_pos + get_pos :
@ -549,9 +549,9 @@ ISR(isr_sport_dma_rx) {
f_recv_size += f_sport_in_block_size; f_recv_size += f_sport_in_block_size;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, /* если осталось не больше блока - то считаем за переполнение,
<EFBFBD>.<2E>. <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> т.к. тогда при следующем прерывании уже могут быть испорчены
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ принятые ранее данные */
if (rdy_put_pos < 2*f_sport_in_block_size) { if (rdy_put_pos < 2*f_sport_in_block_size) {
f_stream_in_set_overflow(); f_stream_in_set_overflow();
} }

View File

@ -1,11 +1,11 @@
/** @defgroup streams <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** @defgroup streams Управление потоками сбора данных */
/***************************************************************************//** /***************************************************************************//**
@addtogroup streams @addtogroup streams
@{ @{
@file l502_stream.h @file l502_stream.h
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HostDMA Файл содержит описания функций для работы с интерфейсом HostDMA
******************************************************************************/ ******************************************************************************/
#ifndef L502_STREAM_H_ #ifndef L502_STREAM_H_
@ -13,32 +13,32 @@
#include <stdint.h> #include <stdint.h>
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> */ /** Состояние потока на ввод */
typedef enum { typedef enum {
IN_STREAM_STOP = 0, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ IN_STREAM_STOP = 0, /**< Поток на ввод остановлен */
IN_STREAM_RUN = 2, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ IN_STREAM_RUN = 2, /**< Поток на ввод в рабочем режиме */
IN_STREAM_OV_ALERT = 4, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ IN_STREAM_OV_ALERT = 4, /**< Произошло переполнение - нужно сообщить о ошибке */
IN_STREAM_ERR= 3 /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ IN_STREAM_ERR= 3 /**< Поток остановлен из-за ошибки/переполнения */
} t_in_stream_state; } t_in_stream_state;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> */ /** Состояние потока на вывод */
typedef enum { typedef enum {
OUT_STREAM_STOP = 0, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ OUT_STREAM_STOP = 0, /**< Поток на вывод остановлен */
OUT_STREAM_PRELOAD = 1, /**< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> OUT_STREAM_PRELOAD = 1, /**< Идет предзагрузка данных - данные принимаются
<EFBFBD><EFBFBD> <20><>, <20><> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ от ПК, но еще не запущен синхронных сбор/выдача */
OUT_STREAM_RUN = 2, /** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ OUT_STREAM_RUN = 2, /** Поток запущен на выдачу */
OUT_STREAM_ERR = 3, /** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */ OUT_STREAM_ERR = 3, /** Поток остановлен по ошибке (сейчас не используется) */
OUT_STREAM_CYCLE = 4 /** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */ OUT_STREAM_CYCLE = 4 /** Режим циклического буфера (сейчас не реализован) */
} t_out_stream_state; } t_out_stream_state;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> */ /** Состояние потока на ввод */
extern t_in_stream_state g_stream_in_state; extern t_in_stream_state g_stream_in_state;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> */ /** Состояние потока на вывод */
extern t_out_stream_state g_stream_out_state; extern t_out_stream_state g_stream_out_state;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> #t_l502_bf_mode */ /** Режим работы прошивки из #t_l502_bf_mode */
extern volatile int g_mode; extern volatile int g_mode;
/** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** Флаги, обозначающие какие потоки разрешены */
extern int g_streams; extern int g_streams;

View File

@ -1,26 +1,26 @@
/** @file l502_test.c /** @file l502_test.c
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. Данный файл содержит реализацию тестов аппаратуры.
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Эти тесты используется при наладке прибора и не выполняется в штатном режиме работы,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> однако включение их в прошивку позволяет выполнять проверку и после этапа наладки
(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20>.<2E>.) (однако не во время сбора данных и т.п.)
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> PC <EFBFBD> BlackFin: L502_BF_CMD_CODE_TEST. Для управления тестами предназначена специальная команда от PC к BlackFin: L502_BF_CMD_CODE_TEST.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Параметр этой каоманды определяет действие:
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - запустить тест с заданным номером
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - остановить текущий тест
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> - получить результаты выполняемого в данных момент теста или
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>). последнего выполняемого теста (если тест остановлен).
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> g_mode) По какого-либо теста модуль переходит в етстовый режим (изменяется g_mode)
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> и выполняет функцию, соответствующую заданному тесту (из этой функции тест
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> PC). должен переодически проверять приход других команд от PC).
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>). Тест выполняется либо до ошибки, либо до прихода команды останова).
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> L502_BF_CMD_TEST_GET_RESULT. Узнать результат теста можно командой с параметром L502_BF_CMD_TEST_GET_RESULT.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>: Доступны следующие тесты:
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM - Проверка SDRAM
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPI - Проверка SPI
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT - Проверка SPORT
**************************************************************************************************/ **************************************************************************************************/
@ -39,13 +39,13 @@
extern int g_mode; extern int g_mode;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM <EFBFBD> SPORT */ /* модуль счетчика, используемого для тестов SDRAM и SPORT */
#define L502_TEST_CNTR_MODULE 35317 #define L502_TEST_CNTR_MODULE 35317
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> SDRAM */ /* размер одного банка SDRAM */
#define SDRAM_BANK_SIZE (4UL*1024*1024*2) #define SDRAM_BANK_SIZE (4UL*1024*1024*2)
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM */ /* адреса банков SDRAM */
static volatile uint16_t* bank1 = NULL; static volatile uint16_t* bank1 = NULL;
static volatile uint16_t* bank2 = (uint16_t*)(SDRAM_BANK_SIZE); static volatile uint16_t* bank2 = (uint16_t*)(SDRAM_BANK_SIZE);
static volatile uint16_t* bank3 = (uint16_t*)(2*SDRAM_BANK_SIZE); static volatile uint16_t* bank3 = (uint16_t*)(2*SDRAM_BANK_SIZE);
@ -55,24 +55,24 @@ static volatile uint16_t* bank4 = (uint16_t*)(3*SDRAM_BANK_SIZE);
#define SPORT_TEST_START_ADDR 0xFF900000 #define SPORT_TEST_START_ADDR 0xFF900000
#define SPORT_TEST_BUF_SIZE 4096 #define SPORT_TEST_BUF_SIZE 4096
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ /* результат последнего теста */
static t_l502_bf_test_res f_test_res; static t_l502_bf_test_res f_test_res;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ /* номер последнего выполняемого теста */
static int32_t f_cur_test_ind = -1; static int32_t f_cur_test_ind = -1;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* объявление функций запуска тестов */
static int f_sdram_test(void); static int f_sdram_test(void);
static int f_spi_test(void); static int f_spi_test(void);
static int f_sport_test(void); static int f_sport_test(void);
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ /* стркутура, описывающая соответствия кода теста и функций теста */
typedef struct { typedef struct {
uint32_t test_code; uint32_t test_code;
int (*start)(void); int (*start)(void);
void (*get_result)(t_l502_bf_cmd *cmd); void (*get_result)(t_l502_bf_cmd *cmd);
} t_test_pars; } t_test_pars;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* теблица соответствий функций и кодов тестов */
static t_test_pars f_test_pars[] = { static t_test_pars f_test_pars[] = {
{ L502_BF_CMD_TEST_ECHO, NULL, NULL}, { L502_BF_CMD_TEST_ECHO, NULL, NULL},
{ L502_BF_CMD_TEST_SPORT, f_sport_test, NULL}, { L502_BF_CMD_TEST_SPORT, f_sport_test, NULL},
@ -85,9 +85,9 @@ static t_test_pars f_test_pars[] = {
void l502_cmd_test(t_l502_bf_cmd *cmd) { void l502_cmd_test(t_l502_bf_cmd *cmd) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> */ /* получение результата теста */
if (cmd->param == L502_BF_CMD_TEST_GET_RESULT) { if (cmd->param == L502_BF_CMD_TEST_GET_RESULT) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* если не было никакого теста - возвращаем ошибку */
if (f_cur_test_ind == -1) { if (f_cur_test_ind == -1) {
l502_cmd_done(L502_BF_ERR_INVALID_CMD_PARAMS, NULL, 0); l502_cmd_done(L502_BF_ERR_INVALID_CMD_PARAMS, NULL, 0);
} else { } else {
@ -95,18 +95,18 @@ void l502_cmd_test(t_l502_bf_cmd *cmd) {
if (f_test_pars[f_cur_test_ind].get_result != NULL) { if (f_test_pars[f_cur_test_ind].get_result != NULL) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> => /* если есть у теста спец функция для получения результата =>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> */ вызываем ее */
f_test_pars[f_cur_test_ind].get_result(cmd); f_test_pars[f_cur_test_ind].get_result(cmd);
} else { } else {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* иначе просто устанавливаем резульатат без данных */
l502_cmd_done(0, (uint32_t*)&f_test_res, l502_cmd_done(0, (uint32_t*)&f_test_res,
sizeof(t_l502_bf_test_res)/sizeof(uint32_t)); sizeof(t_l502_bf_test_res)/sizeof(uint32_t));
} }
} }
} else if (cmd->param == L502_BF_CMD_TEST_STOP) { } else if (cmd->param == L502_BF_CMD_TEST_STOP) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> => <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, /* останов теста => если тест запущен - возвращаем его результат,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */ иначе возвращаем ошибку что и так теста нету */
if (g_mode == L502_BF_MODE_TEST) { if (g_mode == L502_BF_MODE_TEST) {
g_mode = L502_BF_MODE_IDLE; g_mode = L502_BF_MODE_IDLE;
l502_cmd_done(0, NULL, 0); l502_cmd_done(0, NULL, 0);
@ -114,7 +114,7 @@ void l502_cmd_test(t_l502_bf_cmd *cmd) {
l502_cmd_done(L502_BF_ERR_NO_TEST_IN_PROGR, NULL, 0); l502_cmd_done(L502_BF_ERR_NO_TEST_IN_PROGR, NULL, 0);
} }
} else { } else {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> */ /* запуск теста - проходим по таблице и ищем нужный тест */
if (g_mode == L502_BF_MODE_IDLE) { if (g_mode == L502_BF_MODE_IDLE) {
uint32_t i; uint32_t i;
@ -156,9 +156,9 @@ void l502_cmd_test(t_l502_bf_cmd *cmd) {
} while (0); } while (0);
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT'<EFBFBD>, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>/<2F><><EFBFBD> /* тестирование SPORT'а, служащего для передачи потоков АЦП/ЦАП
<EFBFBD><EFBFBD> BlackFin'<EFBFBD> <20> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> от BlackFin'а к ПЛИС. Устанавливается циклический сквозной режим потока
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ и передается счетчик, который проверяется при приеме */
static int f_sport_test(void) { static int f_sport_test(void) {
#define RX_BUF_SIZE 2048 #define RX_BUF_SIZE 2048
static uint16_t rx_buf[RX_BUF_SIZE]; static uint16_t rx_buf[RX_BUF_SIZE];
@ -169,7 +169,7 @@ static int f_sport_test(void) {
uint16_t rx_val; uint16_t rx_val;
int err = 0, i; int err = 0, i;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT'<EFBFBD> */ /* разрешаем прием и передачу по SPORT'у */
*pSPORT0_TCR1 |= TSPEN; *pSPORT0_TCR1 |= TSPEN;
*pSPORT0_RCR1 |= RSPEN; *pSPORT0_RCR1 |= RSPEN;
@ -178,13 +178,13 @@ static int f_sport_test(void) {
stat=*pSPORT0_STAT; stat=*pSPORT0_STAT;
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT'<EFBFBD> */ /* вначале полностью заполняем очередь SPORT'а */
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
*pSPORT0_TX16 = tx_cntr++; *pSPORT0_TX16 = tx_cntr++;
//tx_cntr+=SPORT_CNTR_INC; //tx_cntr+=SPORT_CNTR_INC;
} }
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT */ /* устанавливаем в ПЛИС сквозной режим работы SPORT */
fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, 0xE); fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, 0xE);
@ -215,10 +215,10 @@ static int f_sport_test(void) {
} }
sport_test_end: sport_test_end:
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT'<EFBFBD> */ /* запрещаем прием и передачу по SPORT'у */
*pSPORT0_TCR1 = 0; *pSPORT0_TCR1 = 0;
*pSPORT0_RCR1 = 0; *pSPORT0_RCR1 = 0;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPORT'<EFBFBD> */ /* возвращаем штатный режим работы SPORT'а */
fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, 0); fpga_reg_write(L502_REGS_IOHARD_OUTSWAP_BFCTL, 0);
return err; return err;
@ -228,8 +228,8 @@ sport_test_end:
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> SPI - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /* тест SPI - записываем бегущую единицу в регистр ПЛИС, считываем
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ значение этого регистра и сверяем результаты */
static int f_spi_test(void) { static int f_spi_test(void) {
f_test_res.last_addr = L502_REGS_IOHARD_ADC_FRAME_DELAY; f_test_res.last_addr = L502_REGS_IOHARD_ADC_FRAME_DELAY;
while (!f_test_res.err && (g_mode==L502_BF_MODE_TEST)) { while (!f_test_res.err && (g_mode==L502_BF_MODE_TEST)) {
@ -255,7 +255,7 @@ static int f_spi_test(void) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> SDRAM <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* тест SDRAM памяти */
static int f_sdram_test(void) { static int f_sdram_test(void) {
int i; int i;
unsigned short cntr = 0; unsigned short cntr = 0;
@ -265,7 +265,7 @@ static int f_sdram_test(void) {
while (!f_test_res.err && (g_mode == L502_BF_MODE_TEST)) { while (!f_test_res.err && (g_mode == L502_BF_MODE_TEST)) {
f_test_res.stage = 0; f_test_res.stage = 0;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* заполняем всю память счетчиком */
for (i = 0, cntr = 0; i < (16UL*1024*1024); i++) { for (i = 0, cntr = 0; i < (16UL*1024*1024); i++) {
bank1[i] = cntr; bank1[i] = cntr;
if (++cntr == L502_TEST_CNTR_MODULE) { if (++cntr == L502_TEST_CNTR_MODULE) {
@ -277,7 +277,7 @@ static int f_sdram_test(void) {
TEST_CHECK_OUT(sdram_test_end); TEST_CHECK_OUT(sdram_test_end);
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* читаем последовательно и сверяем результат */
for (i = 0, cntr = 0; i < (16UL*1024*1024); i++) { for (i = 0, cntr = 0; i < (16UL*1024*1024); i++) {
uint16_t word = bank1[i]; uint16_t word = bank1[i];
if (word != cntr) { if (word != cntr) {
@ -298,8 +298,8 @@ static int f_sdram_test(void) {
f_test_res.stage++; f_test_res.stage++;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /* записываем по слову в каждый банк для проверки перекрестной
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ записи по разным банкам */
for (i = 0, cntr = 0; i < (4UL*1024*1024); i++) { for (i = 0, cntr = 0; i < (4UL*1024*1024); i++) {
bank1[i] = cntr; bank1[i] = cntr;
bank2[i] = ~cntr; bank2[i] = ~cntr;
@ -359,7 +359,7 @@ static int f_sdram_test(void) {
TEST_CHECK_OUT(sdram_test_end); TEST_CHECK_OUT(sdram_test_end);
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 4 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* запись в 4 разных банка с последующим чтением */
f_test_res.stage++; f_test_res.stage++;
for (i = 0, cntr=0; i < (4UL*1024*1024); i++) { for (i = 0, cntr=0; i < (4UL*1024*1024); i++) {

View File

@ -3,10 +3,10 @@
@{ @{
@file l502_user_process.c @file l502_user_process.c
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Файл содержит простейший вариант реализации пользовательских функций, в котором
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> потоки данных передаются без изменения и никакие пользовательские команды не
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> обрабатываются. Пользователь может изменить этот файл и добавить здесь свою
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. обработку.
*******************************************************************************/ *******************************************************************************/
#include "l502_stream.h" #include "l502_stream.h"
@ -17,31 +17,31 @@
#include <stdlib.h> #include <stdlib.h>
/***************************************************************************//** /***************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>/DIN. @brief Обработка принятого массива данных АЦП/DIN.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Функция вызывается каждый раз, когда обнаружены новые данные от
<EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT0. АЦП/цифровых входов, пришедшие по SPORT0.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Функция должна обработать данные и вернуть количество обработанных данных,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> однако эти данные все еще считаются использованными (не могут быть переписаны
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> новыми пришедшими данными) до тех пор пока не будет вызвана функция
stream_in_buf_free()). stream_in_buf_free()).
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> size, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> Если функция вернет значение меньше чем size, то функция будут вызванна при
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. следующем проходе еще раз с указателем на необработанные данные.
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HDMA <EFBFBD> <20><> В текущей реализации просто запускается передача данных по HDMA в ПК
@param[in] data <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] data Указатель на массив с принятыми данными
@param[in] size <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] size Количество принятых данных в 32-битных словах
@return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> 0 <EFBFBD><EFBFBD> size). @return Функция возвращает количество обработанных данных (от 0 до size).
<EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> usr_in_proc_data(), На эти данные не будет вызываться повторно usr_in_proc_data(),
<EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> но они считаются еще используемыми
*******************************************************************************/ *******************************************************************************/
uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) { uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HDMA - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> /* если есть свободные дескрипторы на передачу по HDMA - ставим блок на
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0, <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> передачу. Иначе возвращаем 0, чтобы на обработку этих данных функцию
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> */ вызвали бы позже */
if (hdma_send_req_rdy()) { if (hdma_send_req_rdy()) {
hdma_send_req_start(data, size, 0); hdma_send_req_start(data, size, 0);
return size; return size;
@ -52,36 +52,36 @@ uint32_t usr_in_proc_data(uint32_t* data, uint32_t size) {
/***************************************************************************//** /***************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>/DOUT @brief Обработка принятого массива с данными ЦАП/DOUT
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Функция вызывается каждый раз, когда обнаружены новые данные, принятые от
<EFBFBD><EFBFBD> <20><> HDMA. ПК по HDMA.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Функция должна обработать данные и вернуть количество обработанных данных,
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> однако эти данные все еще считаются использованными (не могут быть переписаны
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20><> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> новыми пришедшими данными) до тех пор пока не будет вызвана функция
stream_out_buf_free()). stream_out_buf_free()).
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> size, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> Если функция вернет значение меньше чем size, то функция будут
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. вызвана после еще раз с указателем на необработанные данные.
<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT В текущей реализации просто запускается передача данных по SPORT
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. для вывода на ЦАП/цифровые выходы.
@param[in] data <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] data Указатель на массив с принятыми данными
@param[in] size <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] size Количество принятых данных в 32-битных словах
@return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><> 0 <EFBFBD><EFBFBD> size). @return Функция возвращает количество обработанных данных (от 0 до size).
<EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> usr_out_proc_data(), На эти данные не будет вызываться повторно usr_out_proc_data(),
<EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> но они считаются еще используемыми
******************************************************************************/ ******************************************************************************/
uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) { uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HDMA - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> /* если есть свободные дескрипторы на передачу по HDMA - ставим блок на
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0, <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> передачу. Иначе возвращаем 0, чтобы на обработку этих данных функцию
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> */ вызвали бы позже */
if (sport_tx_req_rdy()) { if (sport_tx_req_rdy()) {
/* <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> SPORT <20><> <20><><EFBFBD><EFBFBD><EFBFBD> /* за один раз можем передать в SPORT не более
SPORT_TX_REQ_SIZE_MAX <EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ SPORT_TX_REQ_SIZE_MAX слов */
if (size > SPORT_TX_REQ_SIZE_MAX) if (size > SPORT_TX_REQ_SIZE_MAX)
size = SPORT_TX_REQ_SIZE_MAX; size = SPORT_TX_REQ_SIZE_MAX;
@ -98,14 +98,14 @@ uint32_t usr_out_proc_data(uint32_t* data, uint32_t size) {
/****************************************************************************//** /****************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HostDMA @brief Обработка завершения передачи по HostDMA
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Функция вызывается из обработчика прерывания, когда завершилась передача
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> HDMA <20> <20><>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> блока данных по HDMA в ПК, поставленного до этого на передачу с
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> hdma_send_req_start(). помощью hdma_send_req_start().
@param[in] addr <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] addr Адрес слова, сразу за последним переданным словом
@param[in] size <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] size Размер переданных данных в 32-битных словах
****************************************************************************/ ****************************************************************************/
void hdma_send_done(uint32_t* addr, uint32_t size) { void hdma_send_done(uint32_t* addr, uint32_t size) {
stream_in_buf_free(size); stream_in_buf_free(size);
@ -114,15 +114,15 @@ void hdma_send_done(uint32_t* addr, uint32_t size) {
/***************************************************************************//** /***************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> SPORT @brief Обработка завершения передачи по SPORT
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Функция вызывается из обработчика прерывания при завершении передачи блока данных
<EFBFBD><EFBFBD> SPORT'<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> по SPORT'у на цифровые выходы/ЦАП, поставленного до этого на передачу с
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> sport_tx_start_req(). помощью sport_tx_start_req().
@param[in] addr <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] addr Адрес слова, сразу за последним переданным словом
@param[in] size <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 32-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ @param[in] size Размер переданных данных в 32-битных словах */
void sport_tx_done(uint32_t* addr, uint32_t size) { void sport_tx_done(uint32_t* addr, uint32_t size) {
stream_out_buf_free(size); stream_out_buf_free(size);
} }
@ -136,18 +136,24 @@ void sport_tx_done(uint32_t* addr, uint32_t size) {
/****************************************************************************//** /****************************************************************************//**
@brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. @brief Обработка пользовательских команд.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Функция вызывается при приеме команды от ПК с кодом большим или равным
#L502_BF_CMD_CODE_USER. #L502_BF_CMD_CODE_USER.
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> По завершению обработки необходимо обязательно вызвать
l502_cmd_done(), <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> l502_cmd_done(), указав код завершения команды и
<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> при необходимости передать данные с результатом
@param[in] cmd <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> @param[in] cmd Структура с описанием принятой команды
******************************************************************************/ ******************************************************************************/
void usr_cmd_process(t_l502_bf_cmd *cmd) { void usr_cmd_process(t_l502_bf_cmd *cmd) {
switch (cmd->code){
case BF_CMD_USER_MULT:
cmd-> result = cmd->param * 2;
uint32_t data = {0,1,2,3,4,5,6,5,4,3,2,1,0};
l502_cmd_done(cmd->result, data, 13);
}
l502_cmd_done(L502_BF_ERR_UNSUP_CMD, NULL, 0); l502_cmd_done(L502_BF_ERR_UNSUP_CMD, NULL, 0);
} }

View File

@ -1,13 +1,13 @@
/** @defgroup user_process <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /** @defgroup user_process Пользовательская обработка данных */
/***************************************************************************//** /***************************************************************************//**
@addtogroup user_process @addtogroup user_process
@{ @{
@file l502_user_process.h @file l502_user_process.h
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Файл содержит описания функций, которые предназначены для изменения
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> пользователем для написания своих алгоритмов обработки данных и реализации
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. пользовательских команд.
******************************************************************************/ ******************************************************************************/

View File

@ -9,20 +9,20 @@ void l502_init(void);
void stream_proc(void); void stream_proc(void);
/* g_state <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. /* g_state описывает область памяти, расположенную по фиксированным адресам.
* <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> A <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ * Для расположения в начало банка A данных используем специальную секцию */
SECTION("board_state", volatile t_l502_board_state g_state); SECTION("board_state", volatile t_l502_board_state g_state);
int main(void) { int main(void) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* Инициализация интерфейсов */
l502_init(); l502_init();
for (;;) { for (;;) {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> /* проверяем наличие команды от ПК и начинаяем
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> */ обработку, если она есть */
l502_cmd_check_req(); l502_cmd_check_req();
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */ /* обработка потоков данных */
stream_proc(); stream_proc();
} }