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

 
 
 
Reply to this topicStart new topic
> 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
KARLSON
сообщение Aug 16 2012, 04:21
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 5-05-06
Из: Нижегородская обл.
Пользователь №: 16 819



Я в ассемблере не бум-бум. Вот только недавно закончилась тема по MSP430x5xx, с отладчиком работала без нет, проблема была в настройке тактирования.


--------------------
Кризис - это не отсутствие денег, а отсутствие идей! Учитесь и никаких кризисов не будет.
Go to the top of the page
 
+Quote Post
megabuks
сообщение Aug 16 2012, 16:58
Сообщение #3


Участник
*

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



Цитата(KARLSON @ Aug 16 2012, 07:21) *
Я в ассемблере не бум-бум. Вот только недавно закончилась тема по MSP430x5xx, с отладчиком работала без нет, проблема была в настройке тактирования.


Вроде разобрался
С тактированием все было правильно.
Проверял я на макетной платке, а интерфейс 232 было лень припаивать и взял валявшийся рядом кусок платы с 485. А на этой платке 485 всегда приемник разрешен был, соответственно получалась каша из переданых и тут-же принятых байт.

Теперь вот другой вопрос образовался. Данные лежат в ОЗУ. ТХ буфер - 8 битный. регистры - 16 битные
в итоге передаются только четные байты. Эту проблему я тоже обошел добавив флаг на передачу четных\нечетных байт и свопая старшую и младшие части регистра.
Как еще можно корректно организовать вывод в uart из памяти?

в основном цикле устанавливаем указатель на начало буфера
mov #ячейка_памяти,R14

в прерывании
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
bic.b #fl_tx_start,flags_uart
bis.b #fl_tx_complete,flags_uart
tx_next_byte:
mov.b @r14+,&UCA0TXBUF ;
reti
error_transmit:
bic.b #UCTXIFG,&UCA0IFG
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
d7d1cd
сообщение Aug 17 2012, 03:01
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Может эта тема поможет http://electronix.ru/forum/index.php?showtopic=105043
Go to the top of the page
 
+Quote Post
KARLSON
сообщение Aug 17 2012, 04:21
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 5-05-06
Из: Нижегородская обл.
Пользователь №: 16 819



Для информации более 1 байта и служащей для передачи по UART я делаю структуру:
число записываю в word, а передачу начинаю с _0.
Код
union _Real
  {
  signed int word;
  struct _byte
    {
    char _0;
    char _1;
    }
    byte;
  };


Сообщение отредактировал KARLSON - Aug 17 2012, 04:21


--------------------
Кризис - это не отсутствие денег, а отсутствие идей! Учитесь и никаких кризисов не будет.
Go to the top of the page
 
+Quote Post
megabuks
сообщение Aug 17 2012, 17:35
Сообщение #6


Участник
*

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



Спасибо
С передачей разобрался. Заодно и с приемом тоже sm.gif
Go to the top of the page
 
+Quote Post

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

 


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


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