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

 
 
> Гарантия того, что по 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
Ответов
Александр Куличо...
сообщение Jan 22 2010, 20:18
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017



Что ж тут непонятного. Время на передачу байта фиксированное. Оно и используется в качестве таймера. А байт дальше драйвера 485 не уйдет.
На быcтрую руку примерно так:
По RxC: UDR = dummy; TimeOut = 0;
По TxC: if (++TimeOut <= N) {UDR = dummy;} else {DoOnTimeOut}
N, по моему, должен быть равен 4.
таким образом обнаруживается пауза > (4T...5T) (т.е. не факт, что пауза 4,5Т будет обнаружена)

P.S. Можно в качестве dummy-байта взять 0x0F. ТОгда получим фронт в середине байта на 0,5Т. И выход Tx завести на прерывание (по фронту). ТОгда можно будет обнаруживать паузы > (3,5Т...4,5Т). Но надо ли? laughing.gif
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 23 2010, 05:02
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Александр Куличок @ Jan 23 2010, 00:18) *
ТОгда получим фронт в середине байта на 0,5Т.

Вы ж не забывайте, что длительности в 1,5 и 3,5 Т выбирались исходя их соображений накрыть всех "опоздавших" и "неуспевающих" однозначным событием разделения данных. Имхо, если внутри распознается соответственно 2 и 4 Т, ничего страшного и "роняющего перфоманс" не происходит. Проще надо быть с модбасом smile.gif
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 29 2010, 18:26
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(_Pasha @ Jan 23 2010, 08:02) *
Проще надо быть с модбасом smile.gif

Товарищи! Возник у меня ещё один вопрос про modbus.
Хотелось бы узнать какие-нибудь элегантные способы решения проблемы поддержания функционирования стандартных функций чтения-записи регистров и коилов в контексте 8-ми битного little-endian MCU.
Я решаю сейчас данную закавыку через remap-таблицу во FLASH.
Она зараза большая становится, когда много данных нужно ремапить, да и нудно её редактировать (хоть всё уже и так через макросы зафигачено).
Я уже и так и сяк, но ничего другого выдумать не могу. Прошу ALL не стеснятся и высказывать любые здравые предложения! Спасибо!


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 30 2010, 03:05
Сообщение #5


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(demiurg_spb @ Jan 29 2010, 21:26) *
Она зараза большая становится, когда много данных нужно ремапить, да и нудно её редактировать (хоть всё уже и так через макросы зафигачено).

1. Написать приблуду и работать с Ёкселем в формате *.csv
2. Проблема, кстати, сходная с созданием таблицы редактирования/доступа к параметрам: зоопарк валидаторов, read-only/write-only/rw, источник или приемник данных (функция/ОЗУ/eeprom/flash), clear after use...

Код
typedef struct
{
// неявное задание правил доступа RO WO RW - метод == NULL
size_t (*read)(void *src, size_t size);//если результат != заданному size, то ашипко
size_t (*write)(void *dst, void *src, size_t size);
} data_src_stream_t;

typedef struct
{
uint16_t log_addr;
void      *phy_addr;
void *validator; // там же хранится инфа о размере
void *stream;
} remap_tbl_t;
//........................................
struct Valid32_cnt //пример
{
  uint8_t size;// всегда первым байтом пойдет как тэг
  uint32_t low;
  uint32_t high;
} pause_tmr={4,120000,240000};

Про coil_read() или coil_write()
Иногда проще все уложить в switch(), но лучше imho избавляться от двухбайтового оверхеда.
Если нехватка флеша на таблицу - приходится все паковать в битовые поля.
Код
typedef struct
{
uint16_t log_addr;
void      *phy_addr;

uint8_t mate;// многоцелевой индекс - все, что не отображается в полях, потом делается через switch(remap.mate)

unsigned size:2;// elem size
unsigned pool:4;// register pool
unsigned perm_rd:1;
unsigned perm_wr:1;
} remap_t;


Вот видите - у меня тот же бардак smile.gif
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 30 2010, 10:46
Сообщение #6


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(_Pasha @ Jan 30 2010, 06:05) *
1. Написать приблуду и работать с Ёкселем в формате *.csv
Тоже об этом думал, но пока что-то останавливает.
Цитата
2. Проблема, кстати, сходная с созданием таблицы редактирования/доступа к параметрам: зоопарк валидаторов, read-only/write-only/rw, источник или приемник данных (функция/ОЗУ/eeprom/flash), clear after use...
Схожая да не совсем. К параметрам меню не обращаются как к "raw big-endian 16-bit data", и не пытаются читать потоком данные например float или DWORD или BYTE или BIT. И "самое страшное" что могут обратится лишь к младшему или старшему полуслову float или DWORD, а про массивы я вообще молчу:-) И про то, что есть 5 отдельных адресных пространств SRAM, FLASH, EEPROM, DATAFLASH, RTC. Мама помоги!!!! Пока я это всё делал чуть не тронулся умом;-) А всё из-за этого &%@# modbus (нехорошего в общем и целом).
С меню у меня всё достаточно красиво получилось (писал на Си в "стиле С++", некое наследование путём включения базового типа menu_item_t во всех потомков, ну и таки да, реализация методов доступа через switch (item_type) - так компактнее получилось, структуры практически без callback'ов). Написал макросы для ассигнования этих типов и всё получилось читабельно и вменяемо (хоть работы проделано немало).
Цитата
Вот видите - у меня тот же бардак smile.gif
Ага, нормально:-)


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
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
|- - _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
- - sitafern   Пользуюсь простым алгоритмом при реализации Modbus...   Jan 31 2010, 22:26


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

 


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


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