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

📄 cs8900_8c-source.html

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