реклама на сайте
подробности

 
 
> MSP430F5510 UART, неработает передача блока :(
megabuks
сообщение Aug 15 2012, 11:13
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 26-01-10
Из: Санкт-Петербург
Пользователь №: 55 080



Здравствуйте!
Помогите разобраться.
Что задумано - в одном из режимов отображения данных на ЖКИ передаться байт заголовка пакета и 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
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 23:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016