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

 
 
> Гарантия того, что по USART все данные ушли
admiral
сообщение Jan 14 2010, 10:27
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 14-12-07
Из: Беларусь, Гомель
Пользователь №: 33 305



Здравствуйте, не могли бы вы разъяснить такую ситуацию?
Перед входом в спящий режим мне нужно убедиться, что все данные ушли в линию. Для этого есть флаг ТХС. В даташите сказано:
Флаг устанавливается в 1 после передачи всех битов посылки из сдвигового регистра передатчика при условии, что в регистр данных UDR не было загружено новое значение. Флаг сбрасывается аппаратно при выполнении подпрограммы обработки прерывания или программно, записью в него лог. 1

Прерываний я не активировал, т.е. получается что после первой передачи, когда данные ушли, и в буфер я данных для отсылки не заносил, этот флаг установится в 1 и больше никогда не сбросится?
Если да, то получается, что после каждой передачи мне нужно программно сбрасывать этот бит?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sitafern
сообщение Jan 31 2010, 22:26
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 8-08-05
Пользователь №: 7 466



Пользуюсь простым алгоритмом при реализации Modbus RTU (потолок скорости 115200).
Назначения:
1. Буфер приёмника/передатчика (первый байт - счётчик).
2. 1 РОН для счётчика "долгих" циклов.
3. 2 РОНа для хранения CRC16.
4. Функция подсчёта CRC "на лету".
5. Функция записи в буфер записывает последними в буфер 2 байта CRC16.
6. Функция передачи данных подсчитывает CRC16 "на лету".
Собственно проверка:
1. "Длинный" счётчик =0? Да.
2. РОНы контрольной суммы =0? Да.
Резюме: данные "уехали" без проблем.
CODE
;======================================================================
=============
; ЗАДАЧА 7 - Передача фрейма данных в хост-компьютер по USART0 по протоколу ModBusRTU
;===============================================================================
====
PLC_7:
sbrs rFlagPLC, flPLC_7
rjmp Exit_PLC_7

cbr rFlagPLC, (1<<flPLC_0) ; Запретить приём по USART0 на время передачи
sbrc rFlagUSART, flReady0 ; Начальная инициализация была?
rjmp lbLoadTxD0 ; Да
;-------------------------------------------------------------------
; Инициализация функции передачи данных
ldi rFuncL, N115200 ;1. Делитель частоты UBRR0H:UBRR0L = 0x0007
out UBRR0L, rFuncL ;2. Асинхронный режим UMSEL = 0
out UBRR0H, rZero ;3. Контроль чётности UPM1 = 1, UPM0 = 0
ldi rFuncL, 0xA6 ;4. Один стоп-бит USBS = 0
out UCSR0C, rFuncL ;5. Формат кадра 8бит UCSZ1 = 1, UCSZ0 = 1

lds rCounter0, pCountUSART0 ; Количество передаваемых байт данных
ldi XL, low(pAdressUSART0) ; Буфер передатчика начинается с адре-
ldi XH, high(pAdressUSART0) ; са УСО

sbi UCSR0B, TXEN0 ; Включить передатчик USART0!
sbr rFlagUSART, (1<<flReady0) ; PLC инициализирована
;---------------------------------------------------------------------------
; Загрузка байта данных для передачи
lbLoadTxD0:
cpse rCounter0, rZero ; Все байты фрейма загружены?
rjmp lbFrame0 ; Нет
rjmp lbEndTxD0 ; Да
lbFrame0:
sbis UCSR0A, UDRE0 ; Надо загрузить байт для передачи?
rjmp Exit_PLC_7 ; Нет.

ld rdUSART0, X+ ; Загрузить передаваемый байт
out UDR0, rdUSART0 ; Собственно загрузить байт данных для передачи
dec rCounter0 ; Уменьшаем счётчик передаваемых байт фрейма
cbi UCSR0A, UDRE0 ; Сбросить флаг требования загрузки
sbr rFlagUSART, (1<<flCRC160) ; Установить флаг требования подсчёта CRC16
;---------------------------------------------------------------------------
; Окончание функции передачи данных
lbEndTxD0:
sbis UCSR0A, TXC0 ; Ожидание передачи последнего байта
rjmp Exit_PLC_7
;-------------------------------------------------------------------
; Сброс передатчика USART0
clr rFuncL
out UCSR0B, rFuncL
;-------------------------------------------------------------------
; Проверка регистров CRC16 на ошибку
cpse rCRC160L, rZero
rjmp lbTxDError0
cpse rCRC160H, rZero
rjmp lbTxDError0
rjmp lbExitTxD0
;-------------------------------------------------------------------
lbTxDError0: ; Обработка ошибки подсчёта CRC16 "на лету"
sbr rErrInter, (1<<flCRC16T0xD)
lbExitTxD0:
sbi UCSR0A, TXC0
cbr rFlagUSART, (1<<flEmpty0)+(1<<flReady0)+(1<<flCRC160)+(1<<flFrame0)
cbr rFlagPLC, (1<<flPLC_7); Выключить функцию передачи данных по USART0
sbr rFlagPLC, (1<<flPLC_0); Включить функцию приёма данных по USART0
Exit_PLC_7:
nop
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- admiral   Гарантия того, что по USART все данные ушли   Jan 14 2010, 10:27
- - Rst7   ЦитатаЕсли да, то получается, что после каждой пер...   Jan 14 2010, 10:45
|- - admiral   Цитата(Rst7 @ Jan 14 2010, 14:45) По наук...   Jan 14 2010, 11:29
- - Rst7   ЦитатаСпасибо, а если неизвестно последний это бай...   Jan 14 2010, 11:32
- - Палыч   Цитата(Rst7 @ Jan 14 2010, 13:45) По наук...   Jan 14 2010, 11:38
- - Rst7   ЦитатаВыкручивался из этой ситуации сбросом TХC по...   Jan 14 2010, 11:49
|- - Палыч   Цитата(Rst7 @ Jan 14 2010, 14:49) Но уж л...   Jan 14 2010, 12:07
|- - defunct   Цитата(Палыч @ Jan 14 2010, 14:07) Кстати...   Jan 14 2010, 12:33
|- - Палыч   Цитата(defunct @ Jan 14 2010, 15:33) Не з...   Jan 14 2010, 13:04
|- - Qwertty   Цитата(Палыч @ Jan 14 2010, 16:04) Поясню...   Jan 14 2010, 13:42
|- - _Pasha   Цитата(Палыч @ Jan 14 2010, 17:04) 1. Дан...   Jan 14 2010, 13:59
|- - defunct   Цитата(Палыч @ Jan 14 2010, 15:04) Это-то...   Jan 14 2010, 18:08
|- - _Pasha   Цитата(defunct @ Jan 14 2010, 22:08) Флаг...   Jan 14 2010, 18:53
||- - defunct   Цитата(_Pasha @ Jan 14 2010, 20:53) 1) от...   Jan 14 2010, 19:37
||- - Qwertty   Цитата(defunct @ Jan 14 2010, 22:37) А за...   Jan 14 2010, 20:58
|- - Палыч   Цитата(defunct @ Jan 14 2010, 21:08) В си...   Jan 15 2010, 08:12
|- - defunct   Цитата(Палыч @ Jan 15 2010, 10:12) Да и ...   Jan 15 2010, 11:54
|- - demiurg_spb   Цитата(defunct @ Jan 15 2010, 14:54) В Mo...   Jan 21 2010, 11:10
|- - _Pasha   Цитата(demiurg_spb @ Jan 21 2010, 15:10) ...   Jan 21 2010, 11:32
||- - demiurg_spb   А я вот всё больше и больше склоняюсь к тому что э...   Jan 21 2010, 12:03
||- - demiurg_spb   Цитата(_Pasha @ Jan 21 2010, 14:32) Никак...   Jan 22 2010, 18:26
|- - defunct   Цитата(demiurg_spb @ Jan 21 2010, 13:10) ...   Jan 21 2010, 17:28
- - V_G   На мой взгляд, как раз широкое использование преры...   Jan 14 2010, 12:43
- - Rst7   ЦитатаНа мой взгляд, как раз широкое использование...   Jan 14 2010, 12:48
- - admiral   Объясню ситуацию: делаю устройство, т.к. питаться ...   Jan 14 2010, 12:57
|- - ILYAUL   Цитата(admiral @ Jan 14 2010, 15:57) И во...   Jan 14 2010, 15:16
|- - defunct   Цитата(admiral @ Jan 14 2010, 14:57) Прер...   Jan 14 2010, 17:30
- - V_G   Посмотрел на симуляторе - у меня флаг TXC сброшен ...   Jan 14 2010, 13:31
|- - Палыч   Цитата(Rst7 @ Jan 14 2010, 15:48) Тут нем...   Jan 14 2010, 13:48
|- - Qwertty   Цитата(Палыч @ Jan 14 2010, 16:48) Значит...   Jan 14 2010, 13:57
- - SysRq   Цитата(admiral @ Jan 14 2010, 15:57) Объя...   Jan 14 2010, 17:44
- - Maik-vs   RS485, скорости до 115200. Делаю так же: формирую ...   Jan 14 2010, 19:03
- - HALFer   admiral, если "правильность" софта не пу...   Jan 14 2010, 20:35
|- - admiral   Цитата(HALFer @ Jan 15 2010, 00:35) admir...   Jan 18 2010, 07:31
|- - Maik-vs   Цитата(admiral @ Jan 18 2010, 10:31) Я та...   Jan 20 2010, 12:35
- - SysRq   Цитата(_Pasha @ Jan 14 2010, 21:53) 1) от...   Jan 15 2010, 06:45
|- - _Pasha   Цитата(SysRq @ Jan 15 2010, 10:45) Если в...   Jan 15 2010, 07:48
- - SysRq   Цитата(_Pasha @ Jan 15 2010, 10:48) Объяс...   Jan 15 2010, 08:02
- - _Pasha   А кто как борется с коллизиями? RXE всегда включен...   Jan 15 2010, 09:23
|- - Палыч   Цитата(_Pasha @ Jan 15 2010, 12:23) А кто...   Jan 15 2010, 09:43
|- - V_G   Цитата(_Pasha @ Jan 15 2010, 19:23) А кто...   Jan 15 2010, 10:59
- - Александр Куличок   ЦитатаЕсли же флаг сбрасывать при загрузке UDR, то...   Jan 20 2010, 22:47
|- - Maik-vs   Цитата(Александр Куличок @ Jan 21 2010, 01...   Jan 31 2010, 14:54
- - Александр Куличок   Что ж тут непонятного. Время на передачу байта фик...   Jan 22 2010, 20:18
|- - _Pasha   Цитата(Александр Куличок @ Jan 23 2010, 00...   Jan 23 2010, 05:02
|- - demiurg_spb   Цитата(_Pasha @ Jan 23 2010, 08:02) Проще...   Jan 29 2010, 18:26
|- - _Pasha   Цитата(demiurg_spb @ Jan 29 2010, 21:26) ...   Jan 30 2010, 03:05
|- - demiurg_spb   Цитата(_Pasha @ Jan 30 2010, 06:05) 1. На...   Jan 30 2010, 10:46
|- - _Pasha   Цитата(demiurg_spb @ Jan 30 2010, 13:46) ...   Jan 31 2010, 05:24
|- - demiurg_spb   Цитата(_Pasha @ Jan 31 2010, 08:24) Поток...   Jan 31 2010, 11:13
- - Александр Куличок   Речь шла о флаге TXC. И о возможности отслеживания...   Jan 31 2010, 21:31


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

 


RSS Текстовая версия Сейчас: 12th August 2025 - 09:53
Рейтинг@Mail.ru


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