Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Если не видишь разницы, тогда используй ТХЦ
Отправлено
Неспящие с Трезором
31 июля 2007 г. 17:46
В ответ на:
Что-то я затупил... для чего в AVR нужны флаги (и прерывания, соответственно) TXC и UDRE? Ведь они делают примерно одно и то же - тогда что лучше использовать для передачи байтов?
отправлено <font color=gray>Sergey_B</font> 31 июля 2007 г. 17:41
Составить ответ
|
Вернуться на конференцию
Ответы
(+) Хрень какая-то. Два байта пересылает, а потом не хочет.
—
Sergey_B
(31.07.2007 17:57:41
213.159.119.242
, 447 байт)
Кстати, а зачем принудительно (софтово) очищать флаги, если вы по прерываниями работаете? Они же вроде автоматически сбрасываются/устанавливаются.
—
rezident
(31.07.2007 18:09:56
195.222.149.11
,
пустое
)
То есть, Вы предлагаете опрашивать TXC, а в прерывании просто поставить reti?
—
Sergey_B
(31.07.2007 18:11:15
213.159.119.242
,
пустое
)
Если работаете по прерыванию от TXC, то прерывание по UDRE нужно запретить. И TXC сбрасывать софтово не нужно.
—
rezident
(31.07.2007 18:14:13
195.222.149.11
, 208 байт)
Гм. Только счас заметил. А зачем при наличии обработчика прерывания от TXC еще дополнительно опрашивать флаг TXC?
—
rezident
(31.07.2007 18:18:1
195.222.149.11
,
пустое
)
В этом, наверное, и есть ошибка. Он в обработчике прерывания TxC еще опрашивает флаг TxC, который аппаратно сбрасывется при входе в это прерывание . Естественно, зависон.
—
Dir
(31.07.2007 18:30:28
193.151.255.99
,
пустое
)
Короче, убрал нафиг прерывание по TXC. Опрашиваю флаг TXC, сам же его и сбрасываю. Теперь передаёт больше двух байт, но при этом записываю в UDR, к примеру, 0x34 (символ "4") - получаю в терминале букву "Л"...
—
Sergey_B
(31.07.2007 18:37:19
213.159.119.242
,
пустое
)
Ну, тут уже ищи ошибку в настройках меги и терминала. Скорость (baudrate), число бит в слове (5...8) и т.п. И еще проверь как ты синхронизируешь прием в буфер терминала. Может ты ловишь не первый принимаемый байт.
—
Dir
(31.07.2007 18:44:12
193.151.255.99
,
пустое
)
Если опрашиваете TxC, то и прерывание не нужно - не разрешайте его.
—
Quasy
(31.07.2007 18:12:52
80.243.9.34
,
пустое
)
Немного не так. Опрашивал я переменную, её же в обработчике прерывания TXC устанавливал.
—
Sergey_B
(31.07.2007 18:14:24
213.159.119.242
,
пустое
)
Кароче пусть надо передать буфер из 5 байт и иметь флаг окончания. Тупо(+)
—
Quasy
(31.07.2007 18:28:13
80.243.9.34
, 443 байт)
Только buf тоже глобальный :)
—
Quasy
(31.07.2007 18:29:16
80.243.9.34
,
пустое
)
UDRE руками не сбрасывается, а только записью нового данного в UDR
—
Quasy
(31.07.2007 18:07:40
80.243.9.34
,
пустое
)
Ответ:
—
Sergey_B
(31.07.2007 18:10:3
213.159.119.242
,
пустое
,
ссылка
)
Во-первых, следует работать либо по TXC, либо по UDRE, а не по обоим сразу. Во-вторых, UDRE, в отличие от TXC, сбрасыватся автоматом только при записи в UDR, а не при вызове Transmit ISR, как TXC
—
=AVR=
(31.07.2007 18:05:30
80.92.96.19
,
пустое
)
Я работаю по TXC (UDRE только один раз попробовал)
—
Sergey_B
(31.07.2007 18:08:14
213.159.119.242
,
пустое
)
Данные из сдвигового регистра улетают, а пришете вы в буферный регистр, не так ли?
—
rezident
(31.07.2007 18:01:22
195.222.149.11
,
пустое
)
(+) Ну да. Вот цитата из ДШ (АТмега48):
—
Sergey_B
(31.07.2007 18:04:32
213.159.119.242
, 332 байт)
Переписать из буферного в сдвиговый регистр занимает не больше одного такта битовой частоты.
—
rezident
(31.07.2007 18:02:46
195.222.149.11
,
пустое
)
Да, но почему тогда возникает прерывание TXC? Оно ведь должно возникать только после окончания передачи данных из буферного регистра, а это много тактов.
—
Sergey_B
(31.07.2007 18:06:41
213.159.119.242
,
пустое
)
Патамушта TXC не сбрасывается вовремя и корректно. Давай свой код - получишь детальный диагноз
—
=AVR=
(31.07.2007 19:27:34
80.92.96.19
,
пустое
)
А когда полудуплекс, например, если еще RS-485 привешен, тогда ЮДРЕ :)
—
Щ.C.
(31.07.2007 17:50:35
144.206.186.102
,
пустое
)
Не хотел человека раньше времени грузить дуплексами-хренуплексами :)
—
Неспящие с Трезором
(31.07.2007 17:57:12
217.30.255.215
,
пустое
)
Сорри, наоборот
—
Щ.C.
(31.07.2007 17:54:35
144.206.186.102
,
пустое
)
Или используй UDRE, но выключать USART придется все равно по TxC, иначе проглотится последний байт.
—
Quasy
(31.07.2007 17:50:19
80.243.9.34
,
пустое
)
Не проглотится. По крайней мере в новых мегах аппаратно передатчик отключится только после передачи всех стоп-битов всех байтов, записанных в UDR
—
Dir
(31.07.2007 18:19:16
193.151.255.99
,
пустое
)
А что толку в его выплевывании, если я уже по UDRE отрубил MAX202 :))
—
Quasy
(31.07.2007 18:33:8
80.243.9.34
,
пустое
)
Мы MAX не обсуждали ;)
—
Dir
(31.07.2007 18:35:43
193.151.255.99
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 85:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru