Здравствуйте!
Помогите разобраться.
Что задумано - в одном из режимов отображения данных на ЖКИ передаться байт заголовка пакета и 3 байта из области памяти tx_bufer
Что получается - передается 4 байта (что правильно) - байт заголовка и 1й байт из области памяти tx_bufer (тоже правильно) и 2 и 3 байты неправильно, закономерности выявить не удалось.
В отладчике работает в железе - нет.
В чем дело помогите разобраться
Вот кусок кода:
; Флаги приема/передачи UART
;----------------------------
fl_tx_start equ 0x0001 ;
fl_tx_complete equ 0x0002
;fl_ equ 0x0004 ;
;fl_pak_ok equ 0x0008
fl_rx_timeout equ 0x0010
fl_rx_complete equ 0x0020
fl_rx_lenght equ 0x0040
fl_rx_start equ 0x0080
ORG 0x2400 ;0200
flags: ds 1; регистр флагов
flags_uart ds 1 ; регистр флагов UART
mode_ind: ds 1 ; номер режима индикации
mode_timer: ds 1 ; время индикации
...... тут еще ряд ячеек
tx_bufer: ds 0x46 ;буфер передатчика
rx_bufer: ds 0x46 ;буфер приемника
test_counter: ds 2
rx_time: ds 1 ; таймаут для приема по UART
tx_counter: ds 1 ; счетчик байт на передачу
;--------------
основной цикл
main_001:
тут отображение различной информации на жки с интервалом в 5с
test_send:
mov #tx_bufer,r5 ;установил указатель на начало буфера
mov.b #0x11,1(r5) ; соответственно записал туда 3 байта (для теста пишу прямые цифры, в дальнейшем д.б. заполнение блока полезными данными)
mov.b #0x22,0(r5) ;
mov.b #0x33,2(r5)
mov.b #0x03,tx_counter ; устанавливаем счетчик числа байт
mov #tx_bufer,r14 ; устанавливаем указатель на начало буфера
bis.b #fl_tx_start,flags_uart ; уст. флаг старт передачи
mov.b #start_byte,&UCA0TXBUF ; записываем стартовый байт в uart
jmp main_001 ; уходим из процедуры
прерывание
;----------------
;UART0 Interrupt
;----------------
USCIA0_UART_int: ;
add &UCA0IV, PC ; Add offset to jump table
reti ; Vector 0: No interrupt
jmp RXIFG_ISR ; Vector 2: RXIFG
TXIFG_ISR: ; Vector 4: TXIFG
bit.b #fl_tx_start,flags_uart ; если пришло прерывание а передачу никто не запускал то выход с очисткой всех флагов передачи
jz error_transmit
dec.b tx_counter ; уменьшаем счетчик числа передаваемых байт
jnz tx_next_byte ; если не 0 то передаем следующий байт
bic.b #fl_tx_start,flags_uart
bis.b #fl_tx_complete,flags_uart
tx_next_byte:
mov.b @r14+,&UCA0TXBUF
reti
; Task starts here
error_transmit:
bic.b #fl_tx_start,flags_uart
bic.b #fl_tx_complete,flags_uart
mov.b #0x00,tx_counter
reti ; Return