📄 rtl8019_8c-source.html
字号:
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>>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)>>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<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 >= RXSTOP_INIT) || (bnry < 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<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 < 20; i++)00337 <span class="keywordflow">if</span>(rtl8019Read(ISR) & RDC)00338 <span class="keywordflow">break</span>;00339 rtl8019Write(ISR, RDC);00340 00341 rxlen = (pageheader[PKTHEADER_PKTLENH]<<8) + pageheader[PKTHEADER_PKTLENL];00342 NextPage = pageheader[PKTHEADER_NEXTPAGE];00343 00344 CurrentRetreiveAddress = (bnry<<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 >= RXSTOP_INIT) || (NextPage < 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>>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>>8));00363 rtl8019Write(CR, (RD0|START));00364 <span class="comment">// transfer packet data</span>00365 <span class="keywordflow">for</span>(i=0;i<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<20; i++)00371 <span class="keywordflow">if</span>(rtl8019Read(ISR) & 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 >= 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<20; i++)00389 <span class="keywordflow">if</span>(rtl8019Read(ISR) & 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 & 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 & 0x04))00416 resend = 0;00417 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(data_L & 0x04)00418 {00419 data_L = rtl8019Read(ISR);00420 <span class="keywordflow">if</span>((data_L & 0x02) || (data_L & 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 & AUTOD))</span>00449 <span class="comment">// rprintf("Autonegotiation\r\n");</span>00450 <span class="comment">// else if(result & RST_B)</span>00451 <span class="comment">// rprintf("PHY in Reset \r\n");</span>00452 <span class="comment">// else if(!(result & RST_10B))</span>00453 <span class="comment">// rprintf("10BASE-T \r\n");</span>00454 <span class="comment">// else if(!(result & 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)&~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 <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 + -