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

 
 
 
Reply to this topicStart new topic
> Обнаружение UCBRK при приеме данных из UART, пачками через DMA
jorikdima
сообщение Oct 10 2010, 09:03
Сообщение #1


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Приветствую!
Нужно принимать периодически некоторые сообщения по UART на MSP430F5418. Раньше использовал для этого дела работу по прерываниям (в то время как передачу (основной поток) делал через ДМА). Теперь по определенным причинам (уменьшить частоту включения обработчиков прерываний) решил и входной поток через ДМА пустить. Все получилось просто замечательно (как минимум 25кБит/с принимал и одновременно ~40 кБит/с отдавал), но уже все сделав и выпив за это smile.gif обнаружил досадный факт. К UART у меня подсоединен Bluetooth модем LMX9838, который для смены режима ("прозрачный" и работа по командам) использует сигнал Break. Мне его надо отлавливать и делать по нему определенные действия. При приеме по прерываниям все было довольно просто, я разрешал прерывания для Break, установив бит
Код
UCCTL1 |= UCBRKIE;

И в обработчике прерываний ловил флаг
Код
if (UCSTAT & UCBRK)

При работе с ДМА проблема в том, что этот флаг UCBRK обнуляется при чтении регистра RXBUF!!! Ну почему, блин, именно RXBUFF а не UCSTAT хотя бы!!! Соответственно при приеме данных через ДМА пачками, скажем по 20 байт, обнаружить Break не представляется возможным, флаг сбрасывается тут же, так как ДМА читает RXBUF.
Собственно я уже на 99% процентов уверен, что затратив два дня на реализацию и отладку приема по ДМА, мне придется отказаться от этой идеи, так как я не могу избежать требования по приему Break. Но может быть кто-нибудь перевернет мое сознание и скажет, что не все еще потеряно и проблему можно как-то решить?
Спасибо.
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 10 2010, 09:44
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Для начала смените шрифт сообщения.
По сути проблемы. Как вы факт сброса UCBRK по чтению UCAxRXBUF выявили? По всем описаниям при чтении UCAxRXBUF в регистре UCAxSTAT сбрасываются биты UCOE, UCRXERR, UCADDR и UCIDLE. Биты UCFE, UCPE, UCBRK остаются неизменными и сбрасываются только софтовым образом или при установке UCSWRST.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Oct 10 2010, 10:27
Сообщение #3


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Цитата(rezident @ Oct 10 2010, 13:44) *
Для начала смените шрифт сообщения.

Сорри, показалось дефолтовый шрифт маловат. Или зрение теряю уже...
Цитата(rezident @ Oct 10 2010, 13:44) *
По сути проблемы. Как вы факт сброса UCBRK по чтению UCAxRXBUF выявили? По всем описаниям при чтении UCAxRXBUF в регистре UCAxSTAT сбрасываются биты UCOE, UCRXERR, UCADDR и UCIDLE. Биты UCFE, UCPE, UCBRK остаются неизменными и сбрасываются только софтовым образом или при установке UCSWRST.

В юзер гиде на странице 478.
Цитата
When any of the UCFE, UCPE, UCOE, UCBRK, or UCRXERR bit is set, the bit remains set until user
software resets it or UCAxRXBUF is read.
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 10 2010, 11:20
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(jorikdima @ Oct 10 2010, 16:27) *
В юзер гиде на странице 478.
В этой ревизии на стр.560, но не это важно. Гм. А я почему-то считал, что они софтово сбрасываются и всегда программно же их и чистил cranky.gif У вас случайно нет свободного канала DMA? Может пустить чтение UCAxSTAT параллельно с чтением UCAxRXBUF по другому каналу DMA? Естественно, источником запуска для них обоих выбрать один и то же флаг - UCAxRXIFG.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Oct 10 2010, 11:28
Сообщение #5


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Цитата(rezident @ Oct 10 2010, 15:20) *
В этой ревизии на стр.560, но не это важно. Гм. А я почему-то считал, что они софтово сбрасываются и всегда программно же их и чистил cranky.gif У вас случайно нет свободного канала DMA? Может пустить чтение UCAxSTAT параллельно с чтением UCAxRXBUF по другому каналу DMA? Естественно, источником запуска для них обоих выбрать один и то же флаг - UCAxRXIFG.

Найти-то канал можно. Я вот только думаю что тот ДМА, который до флага RXIFG доберется первым (видимо по приоритету своему) очистит RXIFG. Об этом сказано на странице 305 этой ревизии
Цитата
A transfer is triggered when USCI_Ax receives new data. UCAxRXIFG is automatically reset when the transfer
starts.

Соответственно второй ДМА уже не увидит флага. Но это мое предположение.
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 10 2010, 11:40
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(jorikdima @ Oct 10 2010, 17:28) *
Я вот только думаю что тот ДМА, который до флага RXIFG доберется первым (видимо по приоритету своему) очистит RXIFG.
Да. Наверное. Тогда остается только один способ. Читать с помощью DMA на каждый вызов по три регистра, благо они расположены практически друг за другом. Естественно буфер увеличить втрое и данные вычитывать из него через байт. Первым в буфере будет содержимое UCAxSTAT, потом байт с нулями, потом UCAxRXBUF, потом снова UCAxSTAT и т.д.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Oct 10 2010, 13:09
Сообщение #7


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Цитата(rezident @ Oct 10 2010, 15:40) *
Да. Наверное. Тогда остается только один способ. Читать с помощью DMA на каждый вызов по три регистра, благо они расположены практически друг за другом. Естественно буфер увеличить втрое и данные вычитывать из него через байт. Первым в буфере будет содержимое UCAxSTAT, потом байт с нулями, потом UCAxRXBUF, потом снова UCAxSTAT и т.д.

Хм... а вот это вполне реальное предложение! Спасибо!! Буду наверное пробовать его, с памятью проблем нет.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th June 2025 - 20:46
Рейтинг@Mail.ru


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