<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=1824&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-11-20T20:37:28+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1824&amp;mode</id>
<entry>
<author><name><![CDATA[fosfolipid]]></name></author>
<updated>2012-11-20T20:37:28+01:00</updated>
<published>2012-11-20T20:37:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1824&amp;p=19211#p19211</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1824&amp;p=19211#p19211"/>
<title type="html"><![CDATA[Re: bufor cykliczny + TWI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1824&amp;p=19211#p19211"><![CDATA[
nie rozumiem Twojego pytania. &quot;Ogon&quot; to tylko oznaczenie końca bufora. Chodzi Ci o to, że wysyłanie będzie szybsze niż wpisywanie nowych danych do bufora? Wtedy zadziała to: <div class="codetitle"><b>Code:</b></div><div class="codecontent">else UCSRB &amp;= ~(1&lt;&lt;UDRIE);</div>, czyli skasujemy zgłoszone przerwanie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=660">fosfolipid</a> — 20 lis 2012, o 20:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[perlon]]></name></author>
<updated>2012-11-20T19:34:48+01:00</updated>
<published>2012-11-20T19:34:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1824&amp;p=19202#p19202</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1824&amp;p=19202#p19202"/>
<title type="html"><![CDATA[Re: bufor cykliczny + TWI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1824&amp;p=19202#p19202"><![CDATA[
A co będzie jak w środku transmisji trafi się dana == ogon?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=382">perlon</a> — 20 lis 2012, o 19:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fosfolipid]]></name></author>
<updated>2012-11-20T18:46:24+01:00</updated>
<published>2012-11-20T18:46:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1824&amp;p=19198#p19198</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1824&amp;p=19198#p19198"/>
<title type="html"><![CDATA[bufor cykliczny + TWI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1824&amp;p=19198#p19198"><![CDATA[
muszę zrealizować następujące działanie: odczyt z pamięci EEPROM około 512kb danych i transfer tych danych przez UART do komputera. Teraz pytanie jak to najlepiej zrobić?<br />Moja koncepcja była taka:<br />w pętli while() uruchamiam transmisję danych z EEPROMU z pollingiem i włączam przerwanie UARTA data register empty. W obsłudze przerwania przesyłam ostatnią daną (ogon) z bufora cyklicznego, gdy koniec bufora jest równy jego początkowi to kasuję przerwanie i nic nie wysyłam.<br />Mam jednak kilka wątpliwości odnośnie transmisji przez TWI: chcę tę transmisję uruchomić raz i odczytać od razu całe 512kb pamięci, to znaczy wysyłam sygnał startu z żądaniem pisania do slave, wysyłam adres w jego pamięci i wysyłam powtórzony symbol startu z żądaniem czytania ze slave'a. W związku z tym, czy z transmisją przez TWI nie będzie żadnych problemów wskutek &quot;przerw&quot; w transmisji? Przerwa taka zaistnieje np. żeby obsłużyć przerwanie od UARTa czy żeby &quot;zawinąć&quot; bufor cykliczny (zrobić operację and początku (głowy) bufora z maską bufora). Czy po prostu powinienem tutaj tak dobrać prędkość transmisji przez TWI żebym zdążył wszystko obsłużyć zanim kolejna dana z pamięci zniszczy poprzednio odebraną daną.<br />Mam nadzieję, że stosunkowo jasno to opisałem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />edit:<br />kawałek kodu dla lepszego zrozumienia problemu:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">void from_eep_mem_to_buf ( void )<br />{<br />   uint16_t i = 0;<br />   uint8_t tmp_head;<br />   <br />   TWI_start();<br />   TWI_write(0xA0);<br />   TWI_write(0);<br />   TWI_start();<br />   TWI_write(0xA0 + 1);<br />   <br />   for ( i = 0; i &lt;= 65535; i++)<br />   {<br />      tmp_head = (Buf_Head) &amp; CYCLIC_BUF_MASK;<br />      while (tmp_head == Buf_Tail) {}<br />      Cyclic_Buf &#91;tmp_head&#93; = TWI_read((i == 65535) ? NACK : ACK);<br />   }<br />}</div><br /><br />i przerwanie:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">ISR ( USART_UDRE_vect )<br />{<br />   if ( Buf_Head != Buf_Tail )                        //check if indexes are different<br />   {<br />      Buf_Tail = ( Buf_Tail + 1 ) &amp; CYCLIC_BUF_MASK;      //new index<br />      UDR = Cyclic_Buf &#91;Buf_Tail&#93;;                  //transmit value from cyclic buffer<br />   }<br />   else UCSRB &amp;= ~(1&lt;&lt;UDRIE);<br />}</div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=660">fosfolipid</a> — 20 lis 2012, o 18:46</p><hr />
]]></content>
</entry>
</feed>