📄 cs8900_8c-source.html
字号:
00169 cs8900Write16(CS8900_IO_PP_PTR, PP_SelfST);00170 <span class="keywordflow">while</span>(!(cs8900Read16(CS8900_IO_PP_DATA_PORT0) & INIT_DONE));00171 00172 <span class="comment">// set our MAC as Individual Address</span>00173 cs8900WriteReg(PP_IA+0, (CS8900_MAC1<<8) + CS8900_MAC0 );00174 cs8900WriteReg(PP_IA+2, (CS8900_MAC3<<8) + CS8900_MAC2 );00175 cs8900WriteReg(PP_IA+4, (CS8900_MAC5<<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)&~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)&~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>>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)<<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>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>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) & 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 <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 + -