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

📄 mmc_8c-source.html

📁 MP3 Player Source Code
💻 HTML
📖 第 1 页 / 共 3 页
字号:
00378     <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(0xff);00379     <a class="code" href="board_8h.html#a41">SPIWait</a>();00380     *<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++=<a class="code" href="board_8h.html#a44">SPI_RESULT_BYTE</a>;00381     <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(0xff);00382     <a class="code" href="board_8h.html#a41">SPIWait</a>();00383     *<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++=<a class="code" href="board_8h.html#a44">SPI_RESULT_BYTE</a>;00384     <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(0xff);00385     <a class="code" href="board_8h.html#a41">SPIWait</a>();00386     *<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++=<a class="code" href="board_8h.html#a44">SPI_RESULT_BYTE</a>;00387     <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(0xff);00388     <a class="code" href="board_8h.html#a41">SPIWait</a>();00389     *<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++=<a class="code" href="board_8h.html#a44">SPI_RESULT_BYTE</a>;00390   }00391 00392 <span class="preprocessor">#ifdef MMCDEBUG</span>00393 <span class="preprocessor"></span>    ConsoleWrite(<span class="stringliteral">"R&gt;"</span>);00394 <span class="preprocessor">#endif</span>00395 <span class="preprocessor"></span>00396 }00397 <a name="l00399"></a><a class="code" href="mmc_8c.html#a7">00399</a> <span class="keywordtype">void</span> <a class="code" href="mmc_8c.html#a7">ConsoleDecipherMMCResponse</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c){00400 00401     ConsoleWrite (<span class="stringliteral">"\rSeek failed, MMC returns "</span>);00402     ConsolePutHex8 (c);00403     ConsoleWrite (<span class="stringliteral">"h ("</span>);00404         00405     <span class="keywordflow">if</span> (c&amp;128) ConsoleWrite(<span class="stringliteral">"which is NOT an R1 response!!"</span>);00406     <span class="keywordflow">else</span>{00407       <span class="keywordflow">if</span> (c&amp;64) ConsoleWrite(<span class="stringliteral">"ParameterError "</span>);00408       <span class="keywordflow">if</span> (c&amp;32) ConsoleWrite(<span class="stringliteral">"AddressError "</span>);00409       <span class="keywordflow">if</span> (c&amp;16) ConsoleWrite(<span class="stringliteral">"EraseSequenceError "</span>);00410       <span class="keywordflow">if</span> (c&amp;8) ConsoleWrite(<span class="stringliteral">"CommandCrcError "</span>);00411       <span class="keywordflow">if</span> (c&amp;4) ConsoleWrite(<span class="stringliteral">"IllegalCommandCode "</span>);00412       <span class="keywordflow">if</span> (c&amp;2) ConsoleWrite(<span class="stringliteral">"EraseCancelled "</span>);00413       <span class="keywordflow">if</span> (c&amp;1) ConsoleWrite(<span class="stringliteral">"Idle "</span>);00414     }00415     00416     ConsoleWrite (<span class="stringliteral">") for sector "</span>);00417     ConsolePutUInt (<a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a>);00418     ConsoleWrite(<span class="stringliteral">".\rFurther reading data returns: \r"</span>);00419     <span class="keywordflow">for</span> (c=0; c&lt;255; c++){00420       ConsolePutHex8(<a class="code" href="board_8c.html#a1">SPIGetChar</a>());     00421     }00422     ConsolePutChar(13);00423     <span class="keywordflow">while</span> (!<a class="code" href="board_8h.html#a14">KEY_BUTTON</a>);00424 00425 00426 }00427 00428 00429 00430 <span class="comment">/* Unconditionally (really just do it!) seek MMC at offset sectorN*512 */</span><a name="l00431"></a><a class="code" href="mmc_8h.html#a2">00431</a> <a class="code" href="board_8h.html#a45">Public</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="mmc_8h.html#a2">SeekSector</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sectorN){00432   00433   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c;00434   00435 <span class="preprocessor">#ifdef MMCDEBUG    </span>00436 <span class="preprocessor"></span>  ConsoleWrite(<span class="stringliteral">"{s"</span>); <span class="comment">//Seek called</span>00437 <span class="preprocessor">#endif</span>00438 <span class="preprocessor"></span>00439   <span class="keywordflow">do</span>{00440     <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> = sectorN * 2; <span class="comment">//convert to bytes (combined with 8bit shift)</span>00441     c=<a class="code" href="mmc_8c.html#a0">MmcCommand</a>(0x51,<a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o1">b</a>.<a class="code" href="structAddress_1_1B.html#o2">b2</a>,<a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o1">b</a>.<a class="code" href="structAddress_1_1B.html#o1">b1</a>,00442                  <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o1">b</a>.<a class="code" href="structAddress_1_1B.html#o0">b0</a>, 0);00443     <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> = <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> &gt;&gt; 1; <span class="comment">//convert back to blocks</span>00444 00445     <span class="comment">//if MMC returs "nothing" (0xff) or 0x81(busy), </span>00446     <span class="comment">//toggle chip select and retry</span>00447     <span class="keywordflow">if</span> ((c==0xff)||(c==0x81)){00448       c=0xff;00449       <a class="code" href="mmc_8c.html#a4">RebootMMC</a>();00450     }00451     <span class="keywordflow">if</span> (c==0x01){ <span class="comment">//MMC says "busy"</span>00452       c=0xff; <span class="comment">//try again</span>00453     }00454 00455   }<span class="keywordflow">while</span>(c==0xff); <span class="comment">//repeat until we get signal from MMC.</span>00456   00457   <span class="keywordflow">if</span> ((c &amp; 0xfe)){ <span class="comment">//MMC returns something else than idle or busy signal</span>00458     <a class="code" href="mmc_8c.html#a7">ConsoleDecipherMMCResponse</a>(c);00459     <a class="code" href="board_8h.html#a29">MMC_XCS</a> = <a class="code" href="board_8h.html#a31">MMC_NOT_SELECTED</a>;00460 00461 <span class="preprocessor">#ifdef MMCDEBUG</span>00462 <span class="preprocessor"></span>    ConsoleWrite(<span class="stringliteral">"!s}"</span>);00463 <span class="preprocessor">#endif</span>00464 <span class="preprocessor"></span>    <span class="keywordflow">return</span> 7; <span class="comment">/* failed to execute mmc command */</span>00465   }00466   00467   <a class="code" href="board_8h.html#a29">MMC_XCS</a> = <a class="code" href="board_8h.html#a31">MMC_NOT_SELECTED</a>;00468   00469 <span class="preprocessor">#ifdef MMCDEBUG</span>00470 <span class="preprocessor"></span>  ConsoleWrite(<span class="stringliteral">"s}"</span>);00471 <span class="preprocessor">#endif</span>00472 <span class="preprocessor"></span>  <span class="keywordflow">return</span> 0; <span class="comment">//ok return</span>00473 }00474 00475 00476 <span class="comment">/* Wait for data start token and read 512 bytes to global buffer */</span><a name="l00477"></a><a class="code" href="mmc_8h.html#a3">00477</a> <a class="code" href="board_8h.html#a45">Public</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="mmc_8c.html#a9">ReadPhysicalSector</a>(){00478 00479   <a class="code" href="board_8h.html#a10">RED_LED</a> = <a class="code" href="board_8h.html#a12">LED_ON</a>; <span class="comment">/* Disk Read LED on */</span>00480 00481   <a class="code" href="board_8h.html#a29">MMC_XCS</a> = <a class="code" href="board_8h.html#a30">MMC_SELECTED</a>;00482   <span class="comment">//ConsoleWrite("&lt;wait&gt;");</span>00483   <a class="code" href="mmc_8c.html#a1">MmcWaitForData</a>();00484   00485   <span class="comment">//ConsoleWrite("&lt;read&gt;");</span>00486   <a class="code" href="mmc_8c.html#a6">PerformBlockRead</a>();00487 00488   <span class="comment">//ConsoleWrite("&lt;deselect&gt;");</span>00489   <span class="comment">/* generate SPI clock edges to finish up the command */</span>00490 00491   <a class="code" href="board_8h.html#a48">SPI8Clocks</a>(4); <span class="comment">//Send 8*4=32 clocks (4 ff's) to MMC to be nice.</span>00492   <a class="code" href="board_8h.html#a29">MMC_XCS</a> = <a class="code" href="board_8h.html#a31">MMC_NOT_SELECTED</a>;00493   <a class="code" href="board_8h.html#a48">SPI8Clocks</a>(4); <span class="comment">//Again, give the poor MMC some clocks, it likes them.</span>00494 00495   <a class="code" href="board_8h.html#a10">RED_LED</a> = <a class="code" href="board_8h.html#a13">LED_OFF</a>; <span class="comment">/* Disk Read LED off */</span>00496 00497   <span class="keywordflow">return</span> 0; <span class="comment">//ok return</span>00498 }00499 00500 <a name="l00502"></a><a class="code" href="mmc_8h.html#a4">00502</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="mmc_8c.html#a10">WritePhysicalSector</a>(){00503   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c;  00504 00505 <span class="preprocessor">#ifdef MMCDEBUG</span>00506 <span class="preprocessor"></span>  ConsoleWrite(<span class="stringliteral">"&lt;W"</span>);00507 <span class="preprocessor">#endif  </span>00508 <span class="preprocessor"></span>00509   <a class="code" href="board_8h.html#a10">RED_LED</a> = <a class="code" href="board_8h.html#a12">LED_ON</a>;00510   <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> = <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> * 2; <span class="comment">//convert to bytes (combined with 8bit shift)</span>00511   c=<a class="code" href="mmc_8c.html#a0">MmcCommand</a>(24 | 0x40 ,<a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o1">b</a>.<a class="code" href="structAddress_1_1B.html#o2">b2</a>,<a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o1">b</a>.<a class="code" href="structAddress_1_1B.html#o1">b1</a>,00512                <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o1">b</a>.<a class="code" href="structAddress_1_1B.html#o0">b0</a>, 0);00513   <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> = <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> &gt;&gt; 1; <span class="comment">//convert back to blocks</span>00514   <a class="code" href="board_8h.html#a29">MMC_XCS</a> = <a class="code" href="board_8h.html#a30">MMC_SELECTED</a>;00515 00516  00517   <a class="code" href="buffer_8c.html#a1">dataBufPtr</a> = <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o1">raw</a>.<a class="code" href="structDiskBlock_1_1Raw.html#o0">buf</a>;00518   <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(0xFE);00519   <a class="code" href="board_8h.html#a41">SPIWait</a>();00520   00521   <span class="keywordflow">for</span> (c=0;c&lt;128;c++){00522     <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(*<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++);   00523     <a class="code" href="board_8h.html#a41">SPIWait</a>();00524     <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(*<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++);   00525     <a class="code" href="board_8h.html#a41">SPIWait</a>();00526     <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(*<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++);   00527     <a class="code" href="board_8h.html#a41">SPIWait</a>();00528     <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(*<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++);   00529     <a class="code" href="board_8h.html#a41">SPIWait</a>();00530   }00531 00532   <a class="code" href="mmc_8c.html#a1">MmcWaitForData</a>(); <span class="comment">//Wait for 0xFE token</span>00533   <span class="keywordflow">while</span> (<a class="code" href="board_8c.html#a1">SPIGetChar</a>()==0) 00534     ; <span class="comment">// Wait until MMC not busy.     </span>00535 00536 <span class="preprocessor">#ifdef MMCDEBUG</span>00537 <span class="preprocessor"></span>  ConsoleWrite(<span class="stringliteral">"W&gt;"</span>);00538 <span class="preprocessor">#endif  </span>00539 <span class="preprocessor"></span>00540   00541   <a class="code" href="board_8h.html#a48">SPI8Clocks</a>(16);00542   <a class="code" href="board_8h.html#a29">MMC_XCS</a> = <a class="code" href="board_8h.html#a31">MMC_NOT_SELECTED</a>;00543   <a class="code" href="board_8h.html#a48">SPI8Clocks</a>(16);00544 00545   <a class="code" href="board_8h.html#a10">RED_LED</a> = <a class="code" href="board_8h.html#a13">LED_OFF</a>;00546 00547 }00548 00549 </div></pre><hr><FONT SIZE="-1">All software copyright 2000-2004 <a href="http://www.vlsi.fi/"> VLSI Solution OY.</a>Redistribution of these software modules are limited to promotional use onlyand only with the VS1011 / VS1002 / VS1003  MP3-Evakit evaluation boards. Free orcommercial use of these software modules in MP3 players is ok if theproduct includes MP3 decoder chip(s) from VLSI. You can request the complete(compilable) package from mp3@vlsi.fi</FONT>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -