AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
23.10.2021, 13:13
|
|
Прохожий
Регистрация: 23.10.2021
Сообщений: 2
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
сброс бита txc0
Уважаемые форумчане. Подскажите как правильно сбросить бит TXC0 (окончание передачи байта) на asm-е?. Контроллер ATMega328.
|
|
|
|
23.10.2021, 14:46
|
|
Прописка
Регистрация: 16.09.2010
Сообщений: 157
Сказал спасибо: 20
Сказали Спасибо 125 раз(а) в 64 сообщении(ях)
|
Re: сброс бита txc0
Глянул у себя в коде - вот такой кусок нашел:
ldi TMP,(1‹‹RXEN0)|(1‹‹TXEN0)|(1‹‹RXCIE0)|(1‹‹TXCIE0)| (0‹‹UDRIE0); Запрет прерывания
sts UCSR0B, TMP ; По пустому UDR
Вроде ж оно?
Делал давно, проект вовсю работает.
Этот кусок стоит в прерывании передачи байта, при достижении конца буфера.
Последний раз редактировалось alex_t2; 23.10.2021 в 14:49.
|
|
|
Сказали "Спасибо" alex_t2
|
|
|
23.10.2021, 17:22
|
|
Прохожий
Регистрация: 23.10.2021
Сообщений: 2
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: сброс бита txc0
Спасибо, правда бит TXC0 в регистре UCSR0A но доступ я думаю аналогично делается. Обычно пишу для 8051 и ARM. Для AVR на Cи и редко. Всегда использовал прерывание по флагу TXC0, там он аппаратно сбрасывается, а без прер. приходится программно. Уж и asm AVR подзабыл.....
|
|
|
|
23.10.2021, 18:05
|
|
Прописка
Регистрация: 16.09.2010
Сообщений: 157
Сказал спасибо: 20
Сказали Спасибо 125 раз(а) в 64 сообщении(ях)
|
Re: сброс бита txc0
А, да, тупанул.
У меня это обслуживает обмен пакетами по 485-му интерфейсу, сделано на прерываниях, естественно, поэтому задача не сбросить флаг (он сам) а запретить прерывание при окончании передачи.
По идее, должно быть аналогично, но, возможно, нужно сначала прочитать регистр, воткнуть единицу в бит, и записать обратно.
Вообще на эту тему неплохо расписано на изиэлектрониксе.
|
|
|
|
25.10.2021, 15:47
|
|
Временная регистрация
Регистрация: 10.11.2016
Сообщений: 53
Сказал спасибо: 6
Сказали Спасибо 16 раз(а) в 13 сообщении(ях)
|
Re: сброс бита txc0
Как-то так...
.macro inp
.if @1 ‹ 0x40
in @0, @1
.else
lds @0, @1
.endif
.endm
.macro outp
.if @0 ‹ 0x40
out @0, @1
.else
sts @0, @1
.endif
.endm
inp REG, UCSR0A
sbr REG, (1‹‹TXC0)
outp UCSR0A, REG
|
|
|
Эти 2 пользователя(ей) сказали Спасибо sanya за это сообщение:
|
|
|
25.10.2021, 23:46
|
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 945
Сказал спасибо: 25
Сказали Спасибо 175 раз(а) в 124 сообщении(ях)
|
Re: сброс бита txc0
Сообщение от sanya_chi
|
Для AVR на Cи и редко. Всегда использовал прерывание по флагу TXC0, там он аппаратно сбрасывается, а без прер. приходится программно. Уж и asm AVR подзабыл.
|
И чем не устраивает строка на С
UCSR0A |= (1‹‹TXC0);
коль "на С и редко"? На хуа тут асм?
|
|
|
|
26.10.2021, 00:09
|
|
Прописка
Регистрация: 16.09.2010
Сообщений: 157
Сказал спасибо: 20
Сказали Спасибо 125 раз(а) в 64 сообщении(ях)
|
Re: сброс бита txc0
Так может в рабочий асм-проект что-то впиливается. Не переписывать же.
В любом случае sanya дал, что называется полный исчерпывающий ответ.
|
|
|
|
26.10.2021, 03:02
|
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 945
Сказал спасибо: 25
Сказали Спасибо 175 раз(а) в 124 сообщении(ях)
|
Re: сброс бита txc0
Сообщение от alex_t2
|
Так может в рабочий асм-проект что-то впиливается.
|
Так как "для авр редко и на си", с учётом
Сообщение от sanya_chi
|
Обычно пишу для 8051 и ARM.
|
с немалой вероятностью речь о асмовской вставке в си-код. Писать на асме для меги328, где памяти 32 кб, большинство задач - бессмысленно. Вряд ли человек , работающий с авр редко и на С, бует писать софтовый УСБ например.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:11.
|
|