⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtl8019_8c-source.html

📁 avr cpu 库源代码 对avr单片机编程很有帮助
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00261     <span class="comment">// still transmitting a packet - wait for it to finish</span>00262     <span class="keywordflow">while</span>( rtl8019Read(CR) &amp; TXP );00263 00264     <span class="comment">// load beginning page for transmit buffer</span>00265     rtl8019Write(TPSR,TXSTART_INIT);00266     00267     <span class="comment">// set start address for remote DMA operation</span>00268     rtl8019Write(RSAR0,0x00);00269     rtl8019Write(RSAR1,0x40);00270     00271     <span class="comment">// clear the packet stored interrupt</span>00272     rtl8019Write(ISR,PTX);00273 00274     <span class="comment">// load data byte count for remote DMA</span>00275     rtl8019Write(RBCR0, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)(packetLength));00276     rtl8019Write(RBCR1, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)(packetLength&gt;&gt;8));00277 00278     rtl8019Write(TBCR0, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)(sendPacketLength));00279     rtl8019Write(TBCR1, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)((sendPacketLength)&gt;&gt;8));00280     00281     <span class="comment">// do remote write operation</span>00282     rtl8019Write(CR,(RD1|START));00283 }00284 00285 00286 <span class="keywordtype">void</span> rtl8019SendPacketData(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *localBuffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length)00287 {00288     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;00289     00290     <span class="comment">// write data to DMA port</span>00291     <span class="keywordflow">for</span>(i=0;i&lt;length;i++)00292         rtl8019Write(RDMAPORT, localBuffer[i]);00293 }00294 00295 00296 <span class="keywordtype">void</span> rtl8019EndPacketSend(<span class="keywordtype">void</span>)00297 {00298     <span class="comment">//send the contents of the transmit buffer onto the network</span>00299     rtl8019Write(CR,(RD2|TXP));00300     <span class="comment">// clear the remote DMA interrupt</span>00301     rtl8019Write(ISR, RDC);00302 }00303 00304 00305 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rtl8019BeginPacketRetreive(<span class="keywordtype">void</span>)00306 {00307     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> i;00308     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> bnry;00309     00310     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> pageheader[4];00311     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rxlen;00312     00313     <span class="comment">// check for and handle an overflow</span>00314     rtl8019ProcessInterrupt();00315     00316     <span class="comment">// read CPR from page 1</span>00317     rtl8019Write(CR,(PS0|RD2|START));00318     i = rtl8019Read(CPR);00319     00320     <span class="comment">// return to page 0</span>00321     rtl8019Write(CR,(RD2|START));00322     00323     <span class="comment">// read the boundary register - pointing to the beginning of the packet</span>00324     bnry = rtl8019Read(BNRY) ;00325     00326     <span class="comment">// return if there is no packet in the buffer</span>00327     <span class="keywordflow">if</span>( bnry == i )00328         <span class="keywordflow">return</span> 0;00329 00330     <span class="comment">// clear the packet received interrupt flag</span>00331     rtl8019Write(ISR, PRX);00332     00333     <span class="comment">// if boundary pointer is invalid</span>00334     <span class="keywordflow">if</span>( (bnry &gt;= RXSTOP_INIT) || (bnry &lt; RXSTART_INIT) )00335     {00336         <span class="comment">// reset the contents of the buffer and exit</span>00337         rtl8019Write(BNRY, RXSTART_INIT);00338         rtl8019Write(CR, (PS0|RD2|START));00339         rtl8019Write(CPR, RXSTART_INIT);00340         rtl8019Write(CR, (RD2|START));00341         <span class="keywordflow">return</span> 0;00342     }00343 00344     <span class="comment">// initiate DMA to transfer the RTL8019 packet header</span>00345     rtl8019Write(RBCR0, 4);00346     rtl8019Write(RBCR1, 0);00347     rtl8019Write(RSAR0, 0);00348     rtl8019Write(RSAR1, bnry);00349     rtl8019Write(CR, (RD0|START));00350     <span class="comment">// transfer packet header</span>00351     <span class="keywordflow">for</span>(i=0;i&lt;4;i++)00352         pageheader[i] = rtl8019Read(RDMAPORT);00353     <span class="comment">// end the DMA operation</span>00354     rtl8019Write(CR, (RD2|START));00355     <span class="comment">// wait for remote DMA complete</span>00356     <span class="keywordflow">for</span>(i = 0; i &lt; 20; i++)00357         <span class="keywordflow">if</span>(rtl8019Read(ISR) &amp; RDC)00358             <span class="keywordflow">break</span>;00359     rtl8019Write(ISR, RDC);00360 00361     rxlen = (pageheader[PKTHEADER_PKTLENH]&lt;&lt;8) + pageheader[PKTHEADER_PKTLENL];00362     NextPage = pageheader[PKTHEADER_NEXTPAGE];00363     00364     CurrentRetreiveAddress = (bnry&lt;&lt;8) + 4;00365     00366     <span class="comment">// if the NextPage pointer is invalid, the packet is not ready yet - exit</span>00367     <span class="keywordflow">if</span>( (NextPage &gt;= RXSTOP_INIT) || (NextPage &lt; RXSTART_INIT) )00368         <span class="keywordflow">return</span> 0;00369     00370     <span class="keywordflow">return</span> rxlen-4;00371 }00372 00373 00374 <span class="keywordtype">void</span> rtl8019RetreivePacketData(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> * localBuffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> length)00375 {00376     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;00377     00378     <span class="comment">// initiate DMA to transfer the data</span>00379     rtl8019Write(RBCR0, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)length);00380     rtl8019Write(RBCR1, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)(length&gt;&gt;8));00381     rtl8019Write(RSAR0, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)CurrentRetreiveAddress);00382     rtl8019Write(RSAR1, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)(CurrentRetreiveAddress&gt;&gt;8));00383     rtl8019Write(CR, (RD0|START));00384     <span class="comment">// transfer packet data</span>00385     <span class="keywordflow">for</span>(i=0;i&lt;length;i++)00386         localBuffer[i] = rtl8019Read(RDMAPORT);00387     <span class="comment">// end the DMA operation</span>00388     rtl8019Write(CR, (RD2|START));00389     <span class="comment">// wait for remote DMA complete</span>00390     <span class="keywordflow">for</span>(i=0; i&lt;20; i++)00391         <span class="keywordflow">if</span>(rtl8019Read(ISR) &amp; RDC)00392             <span class="keywordflow">break</span>;00393     rtl8019Write(ISR, RDC);00394     <span class="comment">// keep track of current address</span>00395     CurrentRetreiveAddress += length;00396     <span class="keywordflow">if</span>( CurrentRetreiveAddress &gt;= 0x6000 )00397         CurrentRetreiveAddress = CurrentRetreiveAddress - (0x6000-0x4600) ;00398 }00399 00400 00401 <span class="keywordtype">void</span> rtl8019EndPacketRetreive(<span class="keywordtype">void</span>)00402 {00403     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> i;00404 00405     <span class="comment">// end the DMA operation</span>00406     rtl8019Write(CR, (RD2|START));00407     <span class="comment">// wait for remote DMA complete</span>00408     <span class="keywordflow">for</span>(i=0; i&lt;20; i++)00409         <span class="keywordflow">if</span>(rtl8019Read(ISR) &amp; RDC)00410             <span class="keywordflow">break</span>;00411     rtl8019Write(ISR, RDC);00412 00413     <span class="comment">// set the boundary register to point to the start of the next packet</span>00414     rtl8019Write(BNRY, NextPage);00415 }00416 00417 00418 <span class="keywordtype">void</span> rtl8019ProcessInterrupt(<span class="keywordtype">void</span>)00419 {00420     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> byte = rtl8019Read(ISR);00421     00422     <span class="keywordflow">if</span>( byte &amp; OVW )00423         rtl8019ReceiveOverflowRecover();00424 }00425 00426 <span class="keywordtype">void</span> rtl8019ReceiveOverflowRecover(<span class="keywordtype">void</span>)00427 {00428     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> data_L, resend;   00429 00430     data_L = rtl8019Read(CR);00431     rtl8019Write(CR, 0x21);00432     delay_ms(2);00433     rtl8019Write(RBCR0, 0x00);00434     rtl8019Write(RBCR1, 0x00);00435     <span class="keywordflow">if</span>(!(data_L &amp; 0x04))00436         resend = 0;00437     <span class="keywordflow">else</span> <span class="keywordflow">if</span>(data_L &amp; 0x04)00438     {00439         data_L = rtl8019Read(ISR);00440         <span class="keywordflow">if</span>((data_L &amp; 0x02) || (data_L &amp; 0x08))00441             resend = 0;00442         <span class="keywordflow">else</span>00443             resend = 1;00444     }00445     00446     rtl8019Write(TCR, 0x02);00447     rtl8019Write(CR, 0x22);00448     rtl8019Write(BNRY, RXSTART_INIT);00449     rtl8019Write(CR, 0x62);00450     rtl8019Write(CPR, RXSTART_INIT);00451     rtl8019Write(CR, 0x22);00452     rtl8019Write(ISR, 0x10);00453     rtl8019Write(TCR, TCR_INIT);00454     00455     <span class="keywordflow">if</span>(resend)00456         rtl8019Write(CR, 0x26);00457 00458     rtl8019Write(ISR, 0xFF);00459 }00460 00461 00462 <span class="keywordtype">void</span> rtl8019RegDump(<span class="keywordtype">void</span>)00463 {00464 <span class="comment">//  unsigned char result;</span>00465 <span class="comment">//  result = rtl8019Read(TR);</span>00466     00467 <span class="comment">//  rprintf("Media State: ");</span>00468 <span class="comment">//  if(!(result &amp; AUTOD))</span>00469 <span class="comment">//          rprintf("Autonegotiation\r\n");</span>00470 <span class="comment">//  else if(result &amp; RST_B)</span>00471 <span class="comment">//          rprintf("PHY in Reset   \r\n");</span>00472 <span class="comment">//  else if(!(result &amp; RST_10B))</span>00473 <span class="comment">//      rprintf("10BASE-T       \r\n");</span>00474 <span class="comment">//  else if(!(result &amp; RST_TXB))</span>00475 <span class="comment">//      rprintf("100BASE-T      \r\n");</span>00476                 00477     <span class="comment">//rprintf("TR regsiter      : %x\r\n",result);</span>00478     <span class="comment">//result = read_mii(0x10,0);</span>00479     <span class="comment">//rprintf("MII regsiter 0x10: %x\r\n",result);</span>00480 00481     rprintf(<span class="stringliteral">"Page0: CR  BNRY PSR PST ISR TSR RSR MMR TR  GPI\r\n"</span>);00482     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"       "</span>);00483     <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(rtl8019Read(CR));00484     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"  "</span>);00485     <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(rtl8019Read(BNRY));00486     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"   "</span>);00487     <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(rtl8019Read(PSTART));00488     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"  "</span>);00489     <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(rtl8019Read(PSTOP));00490     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"  "</span>);00491     <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(rtl8019Read(ISR));00492     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"  "</span>);00493     <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(rtl8019Read(TSR));00494     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"  "</span>);00495     <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(rtl8019Read(RSR));00496     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"  "</span>);00497 <span class="comment">//  rprintfu08(rtl8019Read(MEMR));</span>00498     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"  "</span>);00499 <span class="comment">//  rprintfu08(rtl8019Read(TR));</span>00500     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"  "</span>);00501 <span class="comment">//  rprintfu08(rtl8019Read(GPI));</span>00502     <a class="code" href="group__rprintf.html#ga5">rprintfCRLF</a>();00503 00504     rtl8019Write(CR,rtl8019Read(CR)|PS0);00505 00506     rprintf(<span class="stringliteral">"Page1: CR  PAR    CPR\r\n"</span>);00507     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"       "</span>);00508     <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(rtl8019Read(CR));00509     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"  "</span>);00510     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(rtl8019Read(PAR0));00511     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(rtl8019Read(PAR1));00512     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(rtl8019Read(PAR2));00513     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(rtl8019Read(PAR3));00514     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(rtl8019Read(PAR4));00515     <a class="code" href="group__rprintf.html#ga1">rprintfChar</a>(rtl8019Read(PAR5));00516     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">" "</span>);00517     <a class="code" href="group__rprintf.html#ga7">rprintfu08</a>(rtl8019Read(CPR));00518     00519     rtl8019Write(CR,rtl8019Read(CR)&amp;~PS0);00520 00521     delay_ms(25);00522 }00523 </pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun Oct 29 03:41:07 2006 for Procyon AVRlib by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -