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

📄 cs8900_8c-source.html

📁 avr应用测试程序
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00169     cs8900Write16(CS8900_IO_PP_PTR, PP_SelfST);00170     <span class="keywordflow">while</span>(!(cs8900Read16(CS8900_IO_PP_DATA_PORT0) &amp; INIT_DONE));00171 00172     <span class="comment">// set our MAC as Individual Address</span>00173     cs8900WriteReg(PP_IA+0, (CS8900_MAC1&lt;&lt;8) + CS8900_MAC0 );00174     cs8900WriteReg(PP_IA+2, (CS8900_MAC3&lt;&lt;8) + CS8900_MAC2 );00175     cs8900WriteReg(PP_IA+4, (CS8900_MAC5&lt;&lt;8) + CS8900_MAC4 );00176     <span class="comment">// configure the Physical Interface</span>00177     cs8900WriteReg(PP_LineCTL, SERIAL_RX_ON | SERIAL_TX_ON);00178     cs8900WriteReg(PP_RxCTL, RX_OK_ACCEPT | RX_IA_ACCEPT | RX_BROADCAST_ACCEPT );00179 }00180 00181 <span class="keywordtype">void</span> cs8900Write(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> address, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> data)00182 {00183     <span class="comment">// assert the address</span>00184     outb(CS8900_ADDRESS_PORT, address | (inb(CS8900_ADDRESS_PORT)&amp;~CS8900_ADDRESS_MASK));00185     <span class="comment">// set data bus as output</span>00186     outb(CS8900_DATA_DDR, 0xFF);00187     <span class="comment">// place data on bus</span>00188     outb(CS8900_DATA_PORT, data);00189     <span class="comment">// clock write pin</span>00190     cbi(CS8900_CONTROL_PORT, CS8900_CONTROL_WRITEPIN);00191     nop();00192     nop();00193     nop();00194     nop();00195     sbi(CS8900_CONTROL_PORT, CS8900_CONTROL_WRITEPIN);00196     <span class="comment">// set data bus back to input with pullups enabled</span>00197     outb(CS8900_DATA_DDR, 0x00);00198     outb(CS8900_DATA_PORT, 0xFF);00199 }00200 00201 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> cs8900Read(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> address)00202 {00203     <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> data;00204     <span class="comment">// assert the address</span>00205     outb(CS8900_ADDRESS_PORT, address | (inb(CS8900_ADDRESS_PORT)&amp;~CS8900_ADDRESS_MASK));00206     <span class="comment">// set data bus to input with pullups enabled</span>00207     outb(CS8900_DATA_DDR, 0x00);00208     outb(CS8900_DATA_PORT, 0xFF);00209     <span class="comment">// assert read</span>00210     cbi(CS8900_CONTROL_PORT, CS8900_CONTROL_READPIN);00211     nop();00212     nop();00213     nop();00214     nop();00215     <span class="comment">// read in the data</span>00216     data = inb( CS8900_DATA_PIN );00217     <span class="comment">// negate read</span>00218     sbi(CS8900_CONTROL_PORT, CS8900_CONTROL_READPIN);00219     <span class="comment">// return data</span>00220     <span class="keywordflow">return</span> data;00221 }00222 00223 <span class="keywordtype">void</span> cs8900Write16(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> address, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> data)00224 {00225     cs8900Write(address+0, data);   00226     cs8900Write(address+1, data&gt;&gt;8);    00227 }00228 00229 <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> cs8900Read16(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> address)00230 {00231     <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> data;00232     data =  cs8900Read(address+0);00233     data |= cs8900Read(address+1)&lt;&lt;8;00234     <span class="keywordflow">return</span> data;00235 }00236 00237 <span class="comment">// writes a word in little-endian byte order to a specified PacketPage address</span>00238 <span class="keywordtype">void</span> cs8900WriteReg(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> address, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> data)00239 {00240     cs8900Write16(CS8900_IO_PP_PTR, address);00241     cs8900Write16(CS8900_IO_PP_DATA_PORT0, data);00242 }00243 00244 <span class="comment">// reads a word in little-endian byte order from a specified PacketPage address</span>00245 <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> cs8900ReadReg(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> address)00246 {00247     cs8900Write16(CS8900_IO_PP_PTR, address);00248     <span class="keywordflow">return</span> cs8900Read16(CS8900_IO_PP_DATA_PORT0);00249 }00250 00251 <span class="comment">// copies bytes from MCU-memory to frame port</span>00252 <span class="comment">// NOTES: * an odd number of byte may only be transfered</span>00253 <span class="comment">//          if the frame is written to the end!</span>00254 <span class="comment">//        * MCU-memory MUST start at word-boundary</span>00255 00256 <span class="keywordtype">void</span> cs8900CopyToFrame(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *source, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> size)00257 {00258     <span class="keywordflow">while</span>(size&gt;1)00259     {00260         cs8900Write16(CS8900_IO_RXTX_DATA_PORT0, *((<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span>*)source));00261         source += 2;00262         size -= 2;00263     }00264     <span class="comment">// if odd num. of bytes...</span>00265     <span class="comment">// write leftover byte (the LAN-controller ignores the highbyte)</span>00266     <span class="keywordflow">if</span>(size)00267         cs8900Write16(CS8900_IO_RXTX_DATA_PORT0, *(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*)source);00268 }00269 00270 <span class="comment">// copies bytes from frame port to MCU-memory</span>00271 <span class="comment">// NOTES: * an odd number of byte may only be transfered</span>00272 <span class="comment">//          if the frame is read to the end!</span>00273 <span class="comment">//        * MCU-memory MUST start at word-boundary</span>00274 00275 <span class="keywordtype">void</span> cs8900CopyFromFrame(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *dest, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> size)00276 {00277     <span class="keywordflow">while</span>(size&gt;1)00278     {00279         *((<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> *)dest) = cs8900Read16(CS8900_IO_RXTX_DATA_PORT0);00280         dest += 2;00281         size -= 2;00282     }00283   00284     <span class="comment">// check for leftover byte...</span>00285     <span class="comment">// the LAN-Controller will return 0 for the highbyte</span>00286     <span class="keywordflow">if</span>(size)    00287         *(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *)dest = cs8900Read16(CS8900_IO_RXTX_DATA_PORT0);00288 }00289 00290 <span class="keywordtype">void</span> cs8900IORegDump(<span class="keywordtype">void</span>)00291 {00292     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"CS8900 I/O Registers\r\n"</span>);00293     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">" FRAME   ISQ  ADDR DATA0 DATA1\r\n"</span>);00294     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"-------------------------------\r\n"</span>);00295     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"  "</span>);00296     <a class="code" href="group__rprintf.html#ga8">rprintfu16</a>(cs8900Read16(CS8900_IO_RXTX_DATA_PORT0));00297     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"  "</span>);00298     <a class="code" href="group__rprintf.html#ga8">rprintfu16</a>(cs8900Read16(CS8900_IO_ISQ));00299     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"  "</span>);00300     <a class="code" href="group__rprintf.html#ga8">rprintfu16</a>(cs8900Read16(CS8900_IO_PP_PTR));00301     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"  "</span>);00302     <a class="code" href="group__rprintf.html#ga8">rprintfu16</a>(cs8900Read16(CS8900_IO_PP_DATA_PORT0));00303     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"  "</span>);00304     <a class="code" href="group__rprintf.html#ga8">rprintfu16</a>(cs8900Read16(CS8900_IO_PP_DATA_PORT1));00305     <a class="code" href="group__rprintf.html#ga5">rprintfCRLF</a>();00306 }00307 00308 <span class="keywordtype">void</span> cs8900RegDump(<span class="keywordtype">void</span>)00309 {00310     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"CS8900 PacketPage Registers\r\n"</span>);00311     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"CHIP ID: "</span>);00312     <a class="code" href="group__rprintf.html#ga8">rprintfu16</a>(cs8900ReadReg(PP_ChipID));00313     <a class="code" href="group__rprintf.html#ga5">rprintfCRLF</a>();00314 00315     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"PP_ISAIOB: "</span>);00316     <a class="code" href="group__rprintf.html#ga8">rprintfu16</a>(cs8900ReadReg(PP_ISAIOB));00317     <a class="code" href="group__rprintf.html#ga5">rprintfCRLF</a>();00318 00319     <a class="code" href="group__rprintf.html#ga15">rprintfProgStrM</a>(<span class="stringliteral">"MAC addr: "</span>);00320     <a class="code" href="group__rprintf.html#ga8">rprintfu16</a>(cs8900ReadReg(PP_IA+0));00321     <a class="code" href="group__rprintf.html#ga8">rprintfu16</a>(cs8900ReadReg(PP_IA+2));00322     <a class="code" href="group__rprintf.html#ga8">rprintfu16</a>(cs8900ReadReg(PP_IA+4));00323     <a class="code" href="group__rprintf.html#ga5">rprintfCRLF</a>();00324 }00325 <a name="l00326"></a><a class="code" href="group__nic.html#ga5">00326</a> <span class="keywordtype">void</span> <a class="code" href="group__nic.html#ga5">nicRegDump</a>(<span class="keywordtype">void</span>)00327 {00328     cs8900IORegDump();00329     cs8900RegDump();00330 }00331 00332 00333 u08 cs8900LinkStatus(<span class="keywordtype">void</span>)00334 {00335     <span class="keywordflow">if</span>(cs8900ReadReg(PP_LineST) &amp; LINK_OK)00336         <span class="keywordflow">return</span> 1;00337     <span class="keywordflow">else</span>00338         <span class="keywordflow">return</span> 0;00339 }</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 + -