📄 cs8900_8c-source.html
字号:
00165 cs8900WriteReg(PP_IA+0, (CS8900_MAC1<<8) + CS8900_MAC0 );00166 cs8900WriteReg(PP_IA+2, (CS8900_MAC3<<8) + CS8900_MAC2 );00167 cs8900WriteReg(PP_IA+4, (CS8900_MAC5<<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)&~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)&~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>>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)<<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>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>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) & 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 <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 + -