📄 rtl8019_8c-source.html
字号:
00261 <span class="comment">// still transmitting a packet - wait for it to finish</span>00262 <span class="keywordflow">while</span>( rtl8019Read(CR) & 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>>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)>>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<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 >= RXSTOP_INIT) || (bnry < 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<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 < 20; i++)00357 <span class="keywordflow">if</span>(rtl8019Read(ISR) & RDC)00358 <span class="keywordflow">break</span>;00359 rtl8019Write(ISR, RDC);00360 00361 rxlen = (pageheader[PKTHEADER_PKTLENH]<<8) + pageheader[PKTHEADER_PKTLENL];00362 NextPage = pageheader[PKTHEADER_NEXTPAGE];00363 00364 CurrentRetreiveAddress = (bnry<<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 >= RXSTOP_INIT) || (NextPage < 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>>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>>8));00383 rtl8019Write(CR, (RD0|START));00384 <span class="comment">// transfer packet data</span>00385 <span class="keywordflow">for</span>(i=0;i<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<20; i++)00391 <span class="keywordflow">if</span>(rtl8019Read(ISR) & 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 >= 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<20; i++)00409 <span class="keywordflow">if</span>(rtl8019Read(ISR) & 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 & 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 & 0x04))00436 resend = 0;00437 <span class="keywordflow">else</span> <span class="keywordflow">if</span>(data_L & 0x04)00438 {00439 data_L = rtl8019Read(ISR);00440 <span class="keywordflow">if</span>((data_L & 0x02) || (data_L & 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 & AUTOD))</span>00469 <span class="comment">// rprintf("Autonegotiation\r\n");</span>00470 <span class="comment">// else if(result & RST_B)</span>00471 <span class="comment">// rprintf("PHY in Reset \r\n");</span>00472 <span class="comment">// else if(!(result & RST_10B))</span>00473 <span class="comment">// rprintf("10BASE-T \r\n");</span>00474 <span class="comment">// else if(!(result & 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)&~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 <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 + -