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

 
 
> Сброс флага TXC(usart), mega162
Nikolay Labinski...
сообщение Jul 2 2007, 08:45
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 26
Регистрация: 2-04-07
Пользователь №: 26 693



В даташите написано что флаг нужно сбрасывать записью в него единицы.
Можно так делать:
Код
/* Процедура одиночной передачи байта
    in : reg_data                    */
USART_send:
    sbis UCSR1A,UDRE1   ; ожидание очистки буфера передатчика
    rjmp USART_send
    out UDR1,reg_data   ; Загрузить байт данных в буфер, начать передачу
    sbi UCSR1A,TXC1       ; очитска TXC
ret // USART_send

?
или нужно сначала прочитать регистр, установить этот бит в 1 и записать обратно?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Nikolay Labinski...
сообщение Jul 2 2007, 10:40
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 26
Регистрация: 2-04-07
Пользователь №: 26 693



Цитата
Зачем при этом ТхС сбрасывать - не знаю, бо он вскочит при пустом буфере и пустом передатчике.

Да, это мне и нужно, я жду когда _все_ данные(из буфера и сдвигового регистра) передадутся и после этого перевожу контроллер в Suspend режим.

Просто вопрос изначально был про использование команды sbi.
В Евстифееве(МК семейств Tiny и Mega фирмы Atmel) на 247 странице написано что сбрасывать один флаг в EIFR этой командой нельзя... Вот я и уточнил wink.gif

ой, не Suspend а Standby ))
Go to the top of the page
 
+Quote Post
mse
сообщение Jul 2 2007, 10:50
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(Nikolay Labinskiy @ Jul 2 2007, 14:40) *
Просто вопрос изначально был про использование команды sbi.
В Евстифееве(МК семейств Tiny и Mega фирмы Atmel) на 247 странице написано что сбрасывать один флаг в EIFR этой командой нельзя... Вот я и уточнил wink.gif

Читай не Ефстифеева или кого там ещё, а ДШ на кристалл.
Цитата
UDRE это флаг "от лукавого", выигрыш в скорости - никакой, а проблем в обслуживании масса. Например, тот факт что UDRE меняет состояние до того как кадр был фактически отправлен, не дает возможности использовать его в качестве сигнала для смены направления RS485.

Нормальный флаг. Позволяет тупо накачивать данные в УАРТ в прерывании УДРЕ. А направление менять, опять-же, тупо по факту входа в ТхС. Чего здесь "лукавого"? Читай ДШ, думай, делай...
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 2 2007, 11:33
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(mse @ Jul 2 2007, 13:50) *
Нормальный флаг. Позволяет тупо накачивать данные в УАРТ в прерывании УДРЕ. А направление менять, опять-же, тупо по факту входа в ТхС. Чего здесь "лукавого"? Читай ДШ, думай, делай...

Лукавого тут - зачем обслуживать 2 прерывания там где хватает одного.
2 прерывания использовать там где хватает одного - это будет так как вы и сказали - "тупо".
Go to the top of the page
 
+Quote Post
mse
сообщение Jul 2 2007, 11:59
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(defunct @ Jul 2 2007, 15:33) *
Лукавого тут - зачем обслуживать 2 прерывания там где хватает одного.
2 прерывания использовать там где хватает одного - это будет так как вы и сказали - "тупо".

Чё за проблема, обслуживайте одно. Остро. ТхС в руки. Можно ещё сделать один обработчик по приёму и передаче, бо особо одарённым хватило бы и одного флага. А ещё можно на один обрабоччик свалить все события в МК...
Я-ж держусь ламерского подхода - если изготовитель заложил ресурс, позволяющий "тупо" разруливать ситуаццыю, то я предпочитаю не кривляться, а упростить и упорядочить себе жизнь, даже по мелочи. ;О)
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 3 2007, 10:08
Сообщение #6


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(mse @ Jul 2 2007, 14:59) *
то я предпочитаю не кривляться, а упростить и упорядочить себе жизнь, даже по мелочи. ;О)

Событие TXC означает:
1. что передача окончена.
2. можно слать сл. символ.

С ним не надо "кривляться".
Go to the top of the page
 
+Quote Post
mse
сообщение Jul 4 2007, 05:20
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(defunct @ Jul 3 2007, 14:08) *
Событие TXC означает:
1. что передача окончена.
2. можно слать сл. символ.

С ним не надо "кривляться".

Прально. ;О) А у тупых пацанов УДРЕ говорит, что можно слать следующий символ. А ТхС, что передача окончена. И тупой пацан в прерывании ТхС не занимается самоанализом: кончилась у него строка или нет, а тупо переключает дриверок 485, например, на приём:

.org $xxx
SBI(CBI) portN,pinN
RETI

Примитивщина, кароче. Никакого полёта мысли.

И инициация передачи строки выглядит тоже тупо: подготовил строку и установил УДРИЕ. Фсё.
Конечно, сознаю, что это не круто, ну, блин, не создан я для высокохудожественного программирования. ;О)
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 4 2007, 21:28
Сообщение #8


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(mse @ Jul 4 2007, 08:20) *
Прально. ;О) А у тупых пацанов УДРЕ говорит, что можно слать следующий символ. А ТхС, что передача окончена. И тупой пацан в прерывании ТхС не занимается самоанализом: кончилась у него строка или нет, а тупо переключает дриверок 485, например, на приём:

Дык, какая разница где проверять кончилась строка или не кончилась - все равно проверять-то надо..


По TXC код у меня такой же как у вас в точности, на толстых мегах он прямо в таблице векторов помещается. Я чтобы латентность прерываний сократить вычитку "строк" (у меня буфер кольцевой) в основном цикле программы делаю часто.
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Jul 5 2007, 08:39
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



ИМХО, флаг UDRE придумали для любителей конвейерных методов, замутив простые вещи хуже некуда. Флага TXC вполне достаточно.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 5 2007, 10:09
Сообщение #10


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(VladimirYU @ Jul 5 2007, 07:39) *
ИМХО, флаг UDRE придумали для любителей конвейерных методов, замутив простые вещи хуже некуда. Флага TXC вполне достаточно.

Ну, во-первых, для синхронного режима работы подходит только UDRE флаг.

Во-вторых, UDRE необходим, если нужна передача байт без разрыва между ними,
т.е. после стоп-бита сразу же начинается старт-бит следующего байта.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Nikolay Labinskiy   Сброс флага TXC(usart)   Jul 2 2007, 08:45
- - Палыч   Так делать можно, но 1. Сбрасываете TXC, а контрол...   Jul 2 2007, 09:23
- - mse   Читай даташыт. Если пищешь в УДР по УДРЕ, то ТХЦ н...   Jul 2 2007, 09:25
- - Nikolay Labinskiy   Что-то не совсем понял... Там написано что этот фл...   Jul 2 2007, 10:04
|- - mse   Цитата(Nikolay Labinskiy @ Jul 2 2007, 14...   Jul 2 2007, 10:22
- - defunct   UDRE это флаг "от лукавого", выигрыш в с...   Jul 2 2007, 10:31
|- - ae_   Цитата(Nikolay Labinskiy @ Jul 2 2007, 19...   Jul 3 2007, 06:43
- - Nikolay Labinskiy   Всем спасибо, вопрос решен.   Jul 3 2007, 17:41


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

 


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


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