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

📄 rtl8019_8c-source.html

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