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

📄 mmc_8c-source.html

📁 MSP acquires data and sends through USB to PC. Check the link for PC capture software and project d
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<a name="l00465"></a>00465                         count = 0;<a name="l00466"></a>00466         }<a name="l00467"></a>00467         <span class="keywordflow">else</span> {                          <span class="comment">/* Multiple block write */</span><a name="l00468"></a>00468                 <span class="keywordflow">if</span> (CardType &amp; 2) {<a name="l00469"></a>00469                         send_cmd(<a class="code" href="mmc_8c.html#78289a7a85ffcfddd626694105dc0780">CMD55</a>, 0); send_cmd(<a class="code" href="mmc_8c.html#14506e981f38b6177bc36f72c2ca18b1">CMD23</a>, count);     <span class="comment">/* ACMD23 */</span><a name="l00470"></a>00470                 }<a name="l00471"></a>00471                 <span class="keywordflow">if</span> (send_cmd(<a class="code" href="mmc_8c.html#ee2c673fba987178f4642531fdeefe9e">CMD25</a>, sector) == 0) {     <span class="comment">/* WRITE_MULTIPLE_BLOCK */</span><a name="l00472"></a>00472                         <span class="keywordflow">do</span> {<a name="l00473"></a>00473                                 <span class="keywordflow">if</span> (!xmit_datablock(buff, 0xFC)) <span class="keywordflow">break</span>;<a name="l00474"></a>00474                                 buff += 512;<a name="l00475"></a>00475                         } <span class="keywordflow">while</span> (--count);<a name="l00476"></a>00476                         <span class="keywordflow">if</span> (!xmit_datablock(0, 0xFD))   <span class="comment">/* STOP_TRAN token */</span><a name="l00477"></a>00477                                 count = 1;<a name="l00478"></a>00478                 }<a name="l00479"></a>00479         }<a name="l00480"></a>00480 <a name="l00481"></a>00481         <a class="code" href="mmc_8c.html#1cbd972fc333e07d29999e284020c362">DESELECT</a>();                     <span class="comment">/* CS = H */</span><a name="l00482"></a>00482         rcvr_spi();                     <span class="comment">/* Idle (Release DO) */</span><a name="l00483"></a>00483 <a name="l00484"></a>00484         <span class="keywordflow">return</span> count ? RES_ERROR : RES_OK;<a name="l00485"></a>00485 }<a name="l00486"></a>00486 <span class="preprocessor">#endif </span><span class="comment">/* _READONLY */</span><a name="l00487"></a>00487 <a name="l00488"></a>00488 <a name="l00489"></a>00489 <a name="l00490"></a>00490 <span class="comment">/*-----------------------------------------------------------------------*/</span><a name="l00491"></a>00491 <span class="comment">/* Miscellaneous Functions                                               */</span><a name="l00492"></a>00492 <span class="comment">/*-----------------------------------------------------------------------*/</span><a name="l00493"></a>00493 <a name="l00494"></a><a class="code" href="mmc_8c.html#e342f09a55603a5053750e2fd040f4a8">00494</a> DRESULT <a class="code" href="mmc_8c.html#e342f09a55603a5053750e2fd040f4a8">disk_ioctl</a> (<a name="l00495"></a>00495         BYTE drv,               <span class="comment">/* Physical drive nmuber (0) */</span><a name="l00496"></a>00496         BYTE ctrl,              <span class="comment">/* Control code */</span><a name="l00497"></a>00497         <span class="keywordtype">void</span> *buff              <span class="comment">/* Buffer to send/receive control data */</span><a name="l00498"></a>00498 )<a name="l00499"></a>00499 {<a name="l00500"></a>00500         DRESULT res;<a name="l00501"></a>00501         BYTE n, csd[16];<a name="l00502"></a>00502         WORD csize;<a name="l00503"></a>00503 <a name="l00504"></a>00504 <a name="l00505"></a>00505         <span class="keywordflow">if</span> (drv) <span class="keywordflow">return</span> RES_PARERR;<a name="l00506"></a>00506         <span class="keywordflow">if</span> (Stat &amp; STA_NOINIT) <span class="keywordflow">return</span> RES_NOTRDY;<a name="l00507"></a>00507 <a name="l00508"></a>00508         <a class="code" href="mmc_8c.html#56e8d2ffde94d0c5fdf14b772a32a77f">SELECT</a>();               <span class="comment">/* CS = L */</span><a name="l00509"></a>00509 <a name="l00510"></a>00510         res = RES_ERROR;<a name="l00511"></a>00511         <span class="keywordflow">switch</span> (ctrl) {<a name="l00512"></a>00512                 <span class="keywordflow">case</span> GET_SECTOR_COUNT : <span class="comment">/* Get number of sectors on the disk (DWORD) */</span><a name="l00513"></a>00513                         <span class="keywordflow">if</span> ((send_cmd(<a class="code" href="mmc_8c.html#1fac6a251d7e7dc204d21639bf521459">CMD9</a>, 0) == 0) &amp;&amp; rcvr_datablock(csd, 16)) {<a name="l00514"></a>00514                                 <span class="keywordflow">if</span> ((csd[0] &gt;&gt; 6) == 1) {       <span class="comment">/* SDC ver 2.00 */</span><a name="l00515"></a>00515                                         csize = csd[9] + ((WORD)csd[8] &lt;&lt; 8) + 1;<a name="l00516"></a>00516                                         *(DWORD*)buff = (DWORD)csize &lt;&lt; 10;<a name="l00517"></a>00517                                 } <span class="keywordflow">else</span> {                                        <span class="comment">/* MMC or SDC ver 1.XX */</span><a name="l00518"></a>00518                                         n = (csd[5] &amp; 15) + ((csd[10] &amp; 128) &gt;&gt; 7) + ((csd[9] &amp; 3) &lt;&lt; 1) + 2;<a name="l00519"></a>00519                                         csize = (csd[8] &gt;&gt; 6) + ((WORD)csd[7] &lt;&lt; 2) + ((WORD)(csd[6] &amp; 3) &lt;&lt; 10) + 1;<a name="l00520"></a>00520                                         *(DWORD*)buff = (DWORD)csize &lt;&lt; (n - 9);<a name="l00521"></a>00521                                 }<a name="l00522"></a>00522                                 res = RES_OK;<a name="l00523"></a>00523                         }<a name="l00524"></a>00524                         <span class="keywordflow">break</span>;<a name="l00525"></a>00525 <a name="l00526"></a>00526                 <span class="keywordflow">case</span> GET_SECTOR_SIZE :  <span class="comment">/* Get sectors on the disk (WORD) */</span><a name="l00527"></a>00527                         *(WORD*)buff = 512;<a name="l00528"></a>00528                         res = RES_OK;<a name="l00529"></a>00529                         <span class="keywordflow">break</span>;<a name="l00530"></a>00530 <a name="l00531"></a>00531                 <span class="keywordflow">case</span> CTRL_SYNC :        <span class="comment">/* Make sure that data has been written */</span><a name="l00532"></a>00532                         <span class="keywordflow">if</span> (wait_ready() == 0xFF)<a name="l00533"></a>00533                                 res = RES_OK;<a name="l00534"></a>00534                         <span class="keywordflow">break</span>;<a name="l00535"></a>00535 <a name="l00536"></a>00536                 <span class="keywordflow">case</span> MMC_GET_CSD :      <span class="comment">/* Receive CSD as a data block (16 bytes) */</span><a name="l00537"></a>00537                         <span class="keywordflow">if</span> ((send_cmd(CMD9, 0) == 0)    <span class="comment">/* READ_CSD */</span><a name="l00538"></a>00538                                 &amp;&amp; rcvr_datablock(buff, 16/2))<a name="l00539"></a>00539                                 res = RES_OK;<a name="l00540"></a>00540                         <span class="keywordflow">break</span>;<a name="l00541"></a>00541 <a name="l00542"></a>00542                 <span class="keywordflow">case</span> MMC_GET_CID :      <span class="comment">/* Receive CID as a data block (16 bytes) */</span><a name="l00543"></a>00543                         <span class="keywordflow">if</span> ((send_cmd(<a class="code" href="mmc_8c.html#e7b800ed8e7bd52e6f570a5ce72b8104">CMD10</a>, 0) == 0)   <span class="comment">/* READ_CID */</span><a name="l00544"></a>00544                                 &amp;&amp; rcvr_datablock(buff, 16/2))<a name="l00545"></a>00545                                 res = RES_OK;<a name="l00546"></a>00546                         <span class="keywordflow">break</span>;<a name="l00547"></a>00547 <a name="l00548"></a>00548                 <span class="keywordflow">case</span> MMC_GET_OCR :      <span class="comment">/* Receive OCR as an R3 resp (4 bytes) */</span><a name="l00549"></a>00549                         <span class="keywordflow">if</span> (send_cmd(<a class="code" href="mmc_8c.html#a7a26b2cf17e1ff5967820a1fa41a7aa">CMD58</a>, 0) == 0) {  <span class="comment">/* READ_OCR */</span><a name="l00550"></a>00550                                 <span class="keywordflow">for</span> (n = 0; n &lt; 4; n++)<a name="l00551"></a>00551                                         *((BYTE*)buff+n) = rcvr_spi();<a name="l00552"></a>00552                                 res = RES_OK;<a name="l00553"></a>00553                         }<a name="l00554"></a>00554                         <span class="keywordflow">break</span>;<a name="l00555"></a>00555 <a name="l00556"></a>00556                 <span class="keywordflow">default</span>:<a name="l00557"></a>00557                         res = RES_PARERR;<a name="l00558"></a>00558         }<a name="l00559"></a>00559 <a name="l00560"></a>00560         <a class="code" href="mmc_8c.html#1cbd972fc333e07d29999e284020c362">DESELECT</a>();                     <span class="comment">/* CS = H */</span><a name="l00561"></a>00561         rcvr_spi();                     <span class="comment">/* Idle (Release DO) */</span><a name="l00562"></a>00562 <a name="l00563"></a>00563         <span class="keywordflow">return</span> res;<a name="l00564"></a>00564 }<a name="l00565"></a>00565 <a name="l00566"></a>00566 <a name="l00567"></a>00567 <a name="l00568"></a>00568 <span class="comment">/*-----------------------------------------------------------------------*/</span><a name="l00569"></a>00569 <span class="comment">/* Device timer interrupt procedure  (Platform dependent)                */</span><a name="l00570"></a>00570 <span class="comment">/*-----------------------------------------------------------------------*/</span><a name="l00571"></a>00571 <span class="comment">/* This function must be called in period of 10ms                        */</span><a name="l00572"></a>00572 <a name="l00573"></a><a class="code" href="mmc_8c.html#045f8898a243c16aca4e64e069c49c03">00573</a> <span class="keywordtype">void</span> <a class="code" href="mmc_8c.html#045f8898a243c16aca4e64e069c49c03">disk_timerproc</a> (<span class="keywordtype">void</span>)<a name="l00574"></a>00574 {<a name="l00575"></a>00575         <span class="keyword">static</span> BYTE pv;<a name="l00576"></a>00576         BYTE n, s;<a name="l00577"></a>00577 <a name="l00578"></a>00578 <a name="l00579"></a>00579         n = Timer1;                                             <span class="comment">/* 100Hz decrement timer */</span><a name="l00580"></a>00580         <span class="keywordflow">if</span> (n) Timer1 = --n;<a name="l00581"></a>00581         n = Timer2;<a name="l00582"></a>00582         <span class="keywordflow">if</span> (n) Timer2 = --n;<a name="l00583"></a>00583 <a name="l00584"></a>00584 <a name="l00585"></a>00585         n = pv; <span class="comment">// store old value</span><a name="l00586"></a>00586         pv = <a class="code" href="mmc_8c.html#f0d219bf523e1f70163e044c4cbc20af">MMC_cardPresent</a> () | <a class="code" href="mmc_8c.html#fab21f6428fd2447dee44d73a5b7042e">MMC_cardWriteProtected</a> ();<a name="l00587"></a>00587 <a name="l00588"></a>00588         <span class="keywordflow">if</span> (n == pv)                    <span class="comment">/* Have contacts stabled? */</span><a name="l00589"></a>00589     {<a name="l00590"></a>00590         <a name="l00591"></a>00591                 s = Stat;<a name="l00592"></a>00592 <a name="l00593"></a>00593                 <span class="keywordflow">if</span> (pv &amp; <a class="code" href="mmc_8c.html#572cdb8c6d4db7fa9fcf995c55f9e60b">SOCKWP</a>)                        <span class="comment">/* WP is H (write protected) */</span><a name="l00594"></a>00594         {<a name="l00595"></a>00595                         s |= STA_PROTECT;<a name="l00596"></a>00596         }<a name="l00597"></a>00597                 <span class="keywordflow">else</span>                                            <span class="comment">/* WP is L (write enabled) */</span><a name="l00598"></a>00598         {<a name="l00599"></a>00599                         s &amp;= ~STA_PROTECT;<a name="l00600"></a>00600         }<a name="l00601"></a>00601 <a name="l00602"></a>00602                 <span class="keywordflow">if</span> (pv &amp; <a class="code" href="mmc_8c.html#293d517245047871e5ba4eaebae946a7">SOCKINS</a>)                       <span class="comment">/* INS = H (Socket empty) */</span><a name="l00603"></a>00603         {<a name="l00604"></a>00604                         s |= (STA_NODISK | STA_NOINIT);<a name="l00605"></a>00605         }<a name="l00606"></a>00606                 <span class="keywordflow">else</span>                                            <span class="comment">/* INS = L (Card inserted) */</span><a name="l00607"></a>00607         {<a name="l00608"></a>00608                         s &amp;= ~STA_NODISK;<a name="l00609"></a>00609         }<a name="l00610"></a>00610 <a name="l00611"></a>00611                 Stat = s;<a name="l00612"></a>00612         }<a name="l00613"></a>00613 }<a name="l00614"></a>00614 </pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun Oct 21 19:25:34 2007 for Sample MSP430-4619LCD Project by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address></body></html>

⌨️ 快捷键说明

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