|
Гарантия того, что по USART все данные ушли |
|
|
|
Jan 14 2010, 10:27
|
Участник

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

|
Здравствуйте, не могли бы вы разъяснить такую ситуацию? Перед входом в спящий режим мне нужно убедиться, что все данные ушли в линию. Для этого есть флаг ТХС. В даташите сказано: Флаг устанавливается в 1 после передачи всех битов посылки из сдвигового регистра передатчика при условии, что в регистр данных UDR не было загружено новое значение. Флаг сбрасывается аппаратно при выполнении подпрограммы обработки прерывания или программно, записью в него лог. 1
Прерываний я не активировал, т.е. получается что после первой передачи, когда данные ушли, и в буфер я данных для отсылки не заносил, этот флаг установится в 1 и больше никогда не сбросится? Если да, то получается, что после каждой передачи мне нужно программно сбрасывать этот бит?
|
|
|
|
|
 |
Ответов
|
Jan 22 2010, 20:18
|
Местный
  
Группа: Свой
Сообщений: 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Т). Но надо ли?
|
|
|
|
|
Jan 29 2010, 18:26
|

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

|
Цитата(_Pasha @ Jan 23 2010, 08:02)  Проще надо быть с модбасом  Товарищи! Возник у меня ещё один вопрос про modbus. Хотелось бы узнать какие-нибудь элегантные способы решения проблемы поддержания функционирования стандартных функций чтения-записи регистров и коилов в контексте 8-ми битного little-endian MCU. Я решаю сейчас данную закавыку через remap-таблицу во FLASH. Она зараза большая становится, когда много данных нужно ремапить, да и нудно её редактировать (хоть всё уже и так через макросы зафигачено). Я уже и так и сяк, но ничего другого выдумать не могу. Прошу ALL не стеснятся и высказывать любые здравые предложения! Спасибо!
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Jan 30 2010, 03:05
|
;
     
Группа: Участник
Сообщений: 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; Вот видите - у меня тот же бардак
|
|
|
|
|
Jan 30 2010, 10:46
|

неотягощённый злом
     
Группа: Свой
Сообщений: 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'ов). Написал макросы для ассигнования этих типов и всё получилось читабельно и вменяемо (хоть работы проделано немало). Цитата Вот видите - у меня тот же бардак  Ага, нормально:-)
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|