<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>ATmega328: USART в режиме SPI</title>
		<description>Обсуждение ATmega328: USART в режиме SPI</description>
		<link>http://www.microsin.ru/programming/avr/atmega328-usart-as-spi.html</link>
		<lastBuildDate>Sun, 08 Mar 2026 07:03:15 +0300</lastBuildDate>
		<generator>JComments</generator>
		<atom:link href="http://www.microsin.ru/component/option,com_jcomments/format,raw/limit,10/object_group,com_content/object_id,1924/task,rss/" rel="self" type="application/rss+xml" />
		<item>
			<title>microsin написал:</title>
			<link>http://www.microsin.ru/programming/avr/atmega328-usart-as-spi.html#comment-116808</link>
			<description><![CDATA[Насчет кода на ассемблере, возле метки USART_MSPIM_Tra  nsfer: код пишут программисты, а они тоже люди и часто ошибаются. Это не первый косяк Atmel, и не последний. В этом куске кода из регистра UCSRnA записываются данные в регистр R16, и проверяется бит UDREn — флаг готовности буфера отправки USART. Когда этот флаг выставлен, данные из регистра R16 помещаются для отправки по USART: out UDRn,r16. А до этого в R16 пихались флаги из служебного UCSRnA. Т.е. если кто-то ранее запихнет в R16 свои данные для отправки, и далее начнет проверять флаги вышеуказанным куском кода, то он эти данные затрет. Корректно будет работать следующий кусок кода: ldi r17,0xNN ; где 0xNN данные для отправки USART_MSPIM_Tra  nsfer: ; Ожидание опустошения буфера передачи. in r16, UCSRnA sbrs r16, UDREn rjmp USART_MSPIM_Tra  nsfer ; Поместить данные (r17) в буфер для отправки данных: out UDRn,r17]]></description>
			<dc:creator>microsin</dc:creator>
			<pubDate>Thu, 21 Sep 2023 04:03:35 +0300</pubDate>
			<guid>http://www.microsin.ru/programming/avr/atmega328-usart-as-spi.html#comment-116808</guid>
		</item>
		<item>
			<title>Геннадий написал:</title>
			<link>http://www.microsin.ru/programming/avr/atmega328-usart-as-spi.html#comment-3373</link>
			<description><![CDATA[Мне нужен обмен данными между двумя ATMEGA328 на высокой скорости... Передачу данных на одном контроллере, благодаря статье, успешно организовал, но с приемом ничего не получается. Как правильно принимать отправленные таким образом данные? Если возможно покажите пример рабочий. microsin: у ATmega328 нет функции DMA, поэтому придется организовать прием по одному байту, с использованием прерываний. Для высокоскоростно го приема возможно придется написать на ассемблере обработчик прерывания (ISR), и обеспечить, чтобы в момент приема SPI не срабатывали более высокоприоритет ные прерывания. Для обеспечения гарантии целостности данных при приеме иногда приходится организовать проверку данных по контрольной сумме, и протокол должен предусматривать процедуру повторной передачи в случае ошибок.]]></description>
			<dc:creator>Геннадий</dc:creator>
			<pubDate>Mon, 30 May 2016 20:14:12 +0300</pubDate>
			<guid>http://www.microsin.ru/programming/avr/atmega328-usart-as-spi.html#comment-3373</guid>
		</item>
	</channel>
</rss>
