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

 
 
> Передача по USART
d7d1cd
сообщение Aug 5 2012, 14:53
Сообщение #1


Местный
***

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



Привет всем! Подскажите, могу ли я организовать передачу по USART (в режиме UART) без использования вектора прерывания для передачи? Сразу извиняюсь, если вопрос глуп...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Aug 8 2012, 18:41
Сообщение #2


Гуру
******

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



Цитата(d7d1cd @ Aug 5 2012, 19:53) *
Подскажите, могу ли я организовать передачу по USART (в режиме UART) без использования вектора прерывания для передачи?
Можно, по опросу флага UTXIFGx. Только состояние этого флага перед загрузкой нового байта а UTXBUFx нужно будет сбрасывать программно, т.е. сбросом бита UTXIFGx в регистре IFGx.
Go to the top of the page
 
+Quote Post
SSerge
сообщение Aug 9 2012, 15:06
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(rezident @ Aug 9 2012, 01:41) *
... состояние этого флага перед загрузкой нового байта а UTXBUFx нужно будет сбрасывать программно, ...

Это лишнее, у MSP430 UART нормальный, правильный:
Цитата
UTXIFGx автоматически сбрасывается, если запрос прерывания обслужен или если символ записан в UxTXBUF

http://www.gaw.ru/html.cgi/txt/doc/micros/msp430/arh/13.htm


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 11 2012, 18:03
Сообщение #4


Гуру
******

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



Цитата(SSerge @ Aug 9 2012, 20:06) *
UTXIFGx автоматически сбрасывается, если запрос прерывания обслужен или если символ записан в UxTXBUF
Правильно. А если это конец передачи и передавать больше не нужно, то флаг можно сбросить только программно.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Aug 12 2012, 05:15
Сообщение #5


Местный
***

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



Цитата(rezident @ Aug 11 2012, 22:03) *
Правильно. А если это конец передачи и передавать больше не нужно, то флаг можно сбросить только программно.


Скажите, тогда мой алгоритм отправки блока данных должен иметь такой вид?


1. Запрещаю маскируемые прерывания (чтобы не сработало прерывание на отправку);

2. Отправляю в регистр U0TXBUF очередной байт из блока данных;

3. Проверяю состояние бита UTXIFG0. Если бит не установлен, то перехожу к пункту 3;

4. Инкрементирую адрес блока данных, декрементирую количество отправляемых байт;

5. Если количество отправляемых байт не равно нулю, то перехожу к пункту 2;


6. Сбрасываю бит UTXIFG0.

7. Разрешаю маскируемые прерывания.

Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 12 2012, 12:12
Сообщение #6


Гуру
******

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



Цитата(d7d1cd @ Aug 12 2012, 10:15) *
Скажите, тогда мой алгоритм отправки блока данных должен иметь такой вид?
В общем-то SSerge прав. UTXIFGx вам вообще можно не трогать. Точно также не нужно разрешать/запрещать немаскируемые прерывания все сразу. Исходно лишь UTXIEx в регистрах IEx должны быть сброшены.
Код
  do
  { if ((IFG1 & UTXIFG0) !=0)  //передатчик готов?
    { U0TXBUF = *pBuf++;
      --bufSize;
    }
  } while (bufSize != 0);

где pBuf - указатель на буфер отправляемых данных,
bufSize - размер буфера для отправки.
Чтобы не зациклится здесь навсегда можно дополнительно в цикл ввести счетчик, по превышению которого определять "неисправность" UART (отсутствие готовности передатчика по истечение времени отправки одного символа) и переинициализировать его.
Только не очень понятно, для чего вам нужен именно такой алгоритм работы? С UART "выгоднее" работать по прерываниям, т.к. скорости его обычно на порядок или два ниже тактовой частоты ядра. Вот при работе с SPI на максимально возможной частоте (MCLK/2) - там да, выгоднее по опросу флага готовности.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- d7d1cd   Передача по USART   Aug 5 2012, 14:53
- - sidy   Есть такая возможность: http://we.easyelectronics....   Aug 5 2012, 16:18
|- - d7d1cd   Цитата(sidy @ Aug 5 2012, 20:18) Есть так...   Aug 5 2012, 17:14
- - KARLSON   2. В регистр UCA0TXBUF. 3. бит UCA0TXIFG. Ваш алг...   Aug 6 2012, 04:39
- - d7d1cd   Спасибо за комментарий. Вот только регистра UCA0TX...   Aug 7 2012, 02:54
- - KARLSON   Да, в 1 и во 2 семействе разные USART. Я почему то...   Aug 7 2012, 04:23
- - SSerge   Вырвано из старого (2005г) прожекта, надеюсь помож...   Aug 7 2012, 06:52
- - d7d1cd   Если я начну объяснять зачем мне именно такой алго...   Aug 12 2012, 14:43
- - d7d1cd   Ребят, подскажите такой момент. Чтобы определить г...   Sep 28 2012, 15:13
|- - _Артём_   Цитата(d7d1cd @ Sep 28 2012, 18:13) Но ве...   Sep 28 2012, 15:35
|- - d7d1cd   Цитата(_Артём_ @ Sep 28 2012, 19:35) Чтоб...   Sep 28 2012, 15:57
|- - _Артём_   Цитата(d7d1cd @ Sep 28 2012, 18:57) Так е...   Sep 28 2012, 16:11
- - d7d1cd   Ясно. А еще такой вопрос: запуск механизма передач...   Sep 28 2012, 16:55
|- - _Артём_   Цитата(d7d1cd @ Sep 28 2012, 19:55) А еще...   Sep 28 2012, 17:06
|- - d7d1cd   Цитата(_Артём_ @ Sep 28 2012, 21:06) А за...   Sep 28 2012, 17:14
- - d7d1cd   Спасибо всем за помощь. Сегодня провел испытания п...   Sep 29 2012, 06:58


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

 


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


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