<ahref="mmc__spi_8c.html">Go to the documentation of this file.</a><divclass="fragment"><preclass="fragment"><aname="l00001"></a>00001 <spanclass="comment">/*</span>
<aname="l00035"></a>00035 <spanclass="preprocessor">#include "<aclass="code"href="ch_8h.html"title="ChibiOS/RT main include file.">ch.h</a>"</span>
<aname="l00064"></a>00064 <aclass="code"href="group__events.html#gaa24d9bed5b676b577200c4a8ebe3b8a3"title="Signals all the Event Listeners registered on the specified Event Source.">chEvtBroadcastI</a>(&mmcp-><aclass="code"href="struct_m_m_c_driver.html#a9bd7357704a5a8acce11338824d45a6a"title="Card insertion event source.">mmc_inserted_event</a>);
<aname="l00074"></a>00074 <aclass="code"href="group__events.html#gaa24d9bed5b676b577200c4a8ebe3b8a3"title="Signals all the Event Listeners registered on the specified Event Source.">chEvtBroadcastI</a>(&mmcp-><aclass="code"href="struct_m_m_c_driver.html#a72e7032b9d94146980bbfcb5ec7b138c"title="Card removal event source.">mmc_removed_event</a>);
<aname="l00075"></a>00075 }
<aname="l00076"></a>00076 }
<aname="l00077"></a>00077 <aclass="code"href="group__time.html#ga1c44c3a0bc64b2954d95cd98b2e7124e"title="Enables a virtual timer.">chVTSetI</a>(&mmcp-><aclass="code"href="struct_m_m_c_driver.html#a715195b2cda407a47f2208f1fb701421"title="MMC insertion polling timer.">mmc_vt</a>, <aclass="code"href="group__time.html#ga0a7e7bc6c6225bd9652c4f1567f1bc6a"title="Time conversion utility.">MS2ST</a>(<aclass="code"href="group___m_m_c___s_p_i.html#ga6d164ed93ae233b2dc0c35bd19f75224"title="Interval, in milliseconds, between insertion queries.">MMC_POLLING_DELAY</a>), <aclass="code"href="group___m_m_c___s_p_i.html#ga6aae8e8af4ea0c35c677fa472fb36318"title="Inserion monitor timer callback function.">tmrfunc</a>, mmcp);
<aname="l00089"></a>00089 <spanclass="keywordflow">for</span> (i = 0; i < 16; i++) {
<aname="l00090"></a>00090 <aclass="code"href="group___s_p_i.html#gadd99ad823b391dde114f04dedafe5e80"title="Receives data from the SPI bus.">spiReceive</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, 1, buf);
<aname="l00096"></a>00096 <aclass="code"href="group___s_p_i.html#gadd99ad823b391dde114f04dedafe5e80"title="Receives data from the SPI bus.">spiReceive</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, 1, buf);
<aname="l00100"></a>00100 <spanclass="preprocessor"></span><spanclass="comment">/* Trying to be nice with the other threads.*/</span>
<aname="l00101"></a>00101 <aclass="code"href="group__threads.html#ga8b10a49e2ec522a5ddecabdc453afcab"title="Suspends the invoking thread for the specified time.">chThdSleep</a>(1);
<aname="l00125"></a>00125 <aclass="code"href="group___s_p_i.html#ga382cfbdffd2df57cf3843d45164e8bfc"title="Sends data over the SPI bus.">spiSend</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, 6, buf);
<aname="l00139"></a>00139 <spanclass="keywordflow">for</span> (i = 0; i < 9; i++) {
<aname="l00140"></a>00140 <aclass="code"href="group___s_p_i.html#gadd99ad823b391dde114f04dedafe5e80"title="Receives data from the SPI bus.">spiReceive</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, 1, r1);
<aname="l00159"></a>00159 <aclass="code"href="group___s_p_i.html#ga00809152c869db80192aa3e04266a99a"title="Asserts the slave select signal and prepares for transfers.">spiSelect</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>);
<aname="l00162"></a>00162 <aclass="code"href="group___s_p_i.html#gae291c012872da9c89dec23581f701b5f"title="Deasserts the slave select signal.">spiUnselect</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>);
<aname="l00174"></a>00174 <aclass="code"href="group___s_p_i.html#ga00809152c869db80192aa3e04266a99a"title="Asserts the slave select signal and prepares for transfers.">spiSelect</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>);
<aname="l00176"></a>00176 <aclass="code"href="group___s_p_i.html#gadd99ad823b391dde114f04dedafe5e80"title="Receives data from the SPI bus.">spiReceive</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, 1, buf);
<aname="l00180"></a>00180 <spanclass="preprocessor"></span><aclass="code"href="group__threads.html#ga8b10a49e2ec522a5ddecabdc453afcab"title="Suspends the invoking thread for the specified time.">chThdSleep</a>(1); <spanclass="comment">/* Trying to be nice with the other threads.*/</span>
<aname="l00183"></a>00183 <aclass="code"href="group___s_p_i.html#gae291c012872da9c89dec23581f701b5f"title="Deasserts the slave select signal.">spiUnselect</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>);
<aname="l00209"></a><aclass="code"href="group___m_m_c___s_p_i.html#ga44df4f9091614cab6de8d79c3c6b1a14">00209</a><spanclass="keywordtype">void</span><aclass="code"href="group___m_m_c___s_p_i.html#ga44df4f9091614cab6de8d79c3c6b1a14"title="Initializes an instance.">mmcObjectInit</a>(<aclass="code"href="struct_m_m_c_driver.html"title="Structure representing a MMC driver.">MMCDriver</a> *mmcp, <aclass="code"href="struct_s_p_i_driver.html"title="Structure representing a SPI driver.">SPIDriver</a> *spip,
<aname="l00211"></a>00211 <aclass="code"href="group___m_m_c___s_p_i.html#gaa7dbe27afa62f18e545ddea6a20bfa51"title="Function used to query some hardware status bits.">mmcquery_t</a> is_protected, <aclass="code"href="group___m_m_c___s_p_i.html#gaa7dbe27afa62f18e545ddea6a20bfa51"title="Function used to query some hardware status bits.">mmcquery_t</a> is_inserted) {
<aname="l00215"></a>00215 mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a> = spip;
<aname="l00216"></a>00216 mmcp-><aclass="code"href="struct_m_m_c_driver.html#aa0f4cfe46b06dbf1213c822b0ddeda98"title="SPI low speed configuration used during initialization.">mmc_lscfg</a> = lscfg;
<aname="l00217"></a>00217 mmcp-><aclass="code"href="struct_m_m_c_driver.html#a417202c1ff282a504ecd07831381bf85"title="SPI high speed configuration used during transfers.">mmc_hscfg</a> = hscfg;
<aname="l00218"></a>00218 mmcp-><aclass="code"href="struct_m_m_c_driver.html#a255a9e9a7a46e261f0e8fcbd16233244"title="Write protect status query function.">mmc_is_protected</a> = is_protected;
<aname="l00219"></a>00219 mmcp-><aclass="code"href="struct_m_m_c_driver.html#a64161fdd86af655c85885ba47e69fbc6"title="Insertion status query function.">mmc_is_inserted</a> = is_inserted;
<aname="l00220"></a>00220 <aclass="code"href="group__events.html#gab8d0fdc09be629dfb438c32a0523db42"title="Initializes an Event Source.">chEvtInit</a>(&mmcp-><aclass="code"href="struct_m_m_c_driver.html#a9bd7357704a5a8acce11338824d45a6a"title="Card insertion event source.">mmc_inserted_event</a>);
<aname="l00221"></a>00221 <aclass="code"href="group__events.html#gab8d0fdc09be629dfb438c32a0523db42"title="Initializes an Event Source.">chEvtInit</a>(&mmcp-><aclass="code"href="struct_m_m_c_driver.html#a72e7032b9d94146980bbfcb5ec7b138c"title="Card removal event source.">mmc_removed_event</a>);
<aname="l00248"></a><aclass="code"href="group___m_m_c___s_p_i.html#ga27833cde77794f914e4802c7e65281a5">00248</a><spanclass="keywordtype">void</span><aclass="code"href="group___m_m_c___s_p_i.html#ga27833cde77794f914e4802c7e65281a5"title="Disables the MMC peripheral.">mmcStop</a>(<aclass="code"href="struct_m_m_c_driver.html"title="Structure representing a MMC driver.">MMCDriver</a> *mmcp) {
<aname="l00260"></a>00260 <aclass="code"href="group__time.html#ga680d851a74e594cc965101e79891840f"title="Disables a Virtual Timer.">chVTResetI</a>(&mmcp-><aclass="code"href="struct_m_m_c_driver.html#a715195b2cda407a47f2208f1fb701421"title="MMC insertion polling timer.">mmc_vt</a>);
<aname="l00261"></a>00261 }
<aname="l00262"></a>00262 <aclass="code"href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e"title="Leaves the kernel lock mode.">chSysUnlock</a>();
<aname="l00263"></a>00263 <aclass="code"href="group___s_p_i.html#gad3a359eea03e68e95899886ae93a06e4"title="Deactivates the SPI peripheral.">spiStop</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>);
<aname="l00280"></a><aclass="code"href="group___m_m_c___s_p_i.html#ga9ff4f12fa759c3cb4aca2b64b11f1d22">00280</a><aclass="code"href="group__types.html#ga7556af1cb61728b53228fa3af1c851de"title="Boolean, recommended the fastest signed.">bool_t</a><aclass="code"href="group___m_m_c___s_p_i.html#ga9ff4f12fa759c3cb4aca2b64b11f1d22"title="Performs the initialization procedure on the inserted card.">mmcConnect</a>(<aclass="code"href="struct_m_m_c_driver.html"title="Structure representing a MMC driver.">MMCDriver</a> *mmcp) {
<aname="l00292"></a>00292 <spanclass="comment">/* Slow clock mode and 128 clock pulses.*/</span>
<aname="l00293"></a>00293 <aclass="code"href="group___s_p_i.html#ga6752c9f736f8de774a5bef6dfe2aae2e"title="Configures and activates the SPI peripheral.">spiStart</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, mmcp-><aclass="code"href="struct_m_m_c_driver.html#aa0f4cfe46b06dbf1213c822b0ddeda98"title="SPI low speed configuration used during initialization.">mmc_lscfg</a>);
<aname="l00294"></a>00294 <aclass="code"href="group___s_p_i.html#ga43889a7d4c473f653596f8c0acafce2a"title="Ignores data on the SPI bus.">spiIgnore</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, 16);
<aname="l00303"></a>00303 <aclass="code"href="group__threads.html#ga5aebc25e053a0094714abce4cad9f56f"title="Delays the invoking thread for the specified number of milliseconds.">chThdSleepMilliseconds</a>(10);
<aname="l00316"></a>00316 <aclass="code"href="group__threads.html#ga5aebc25e053a0094714abce4cad9f56f"title="Delays the invoking thread for the specified number of milliseconds.">chThdSleepMilliseconds</a>(10);
<aname="l00317"></a>00317 }
<aname="l00318"></a>00318
<aname="l00319"></a>00319 <spanclass="comment">/* Initialization complete, full speed. */</span>
<aname="l00320"></a>00320 <aclass="code"href="group___s_p_i.html#ga6752c9f736f8de774a5bef6dfe2aae2e"title="Configures and activates the SPI peripheral.">spiStart</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, mmcp-><aclass="code"href="struct_m_m_c_driver.html#a417202c1ff282a504ecd07831381bf85"title="SPI high speed configuration used during transfers.">mmc_hscfg</a>);
<aname="l00352"></a><aclass="code"href="group___m_m_c___s_p_i.html#gab90f252316351a93ec38b11f7eaf1f16">00352</a><aclass="code"href="group__types.html#ga7556af1cb61728b53228fa3af1c851de"title="Boolean, recommended the fastest signed.">bool_t</a><aclass="code"href="group___m_m_c___s_p_i.html#gab90f252316351a93ec38b11f7eaf1f16"title="Brings the driver in a state safe for card removal.">mmcDisconnect</a>(<aclass="code"href="struct_m_m_c_driver.html"title="Structure representing a MMC driver.">MMCDriver</a> *mmcp) {
<aname="l00353"></a>00353 <aclass="code"href="group__types.html#ga7556af1cb61728b53228fa3af1c851de"title="Boolean, recommended the fastest signed.">bool_t</a> status;
<aname="l00374"></a>00374 <aclass="code"href="group___s_p_i.html#gad3a359eea03e68e95899886ae93a06e4"title="Deactivates the SPI peripheral.">spiStop</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>);
<aname="l00397"></a>00397 <aclass="code"href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e"title="Leaves the kernel lock mode.">chSysUnlock</a>();
<aname="l00398"></a>00398
<aname="l00399"></a>00399 <aclass="code"href="group___s_p_i.html#ga6752c9f736f8de774a5bef6dfe2aae2e"title="Configures and activates the SPI peripheral.">spiStart</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, mmcp-><aclass="code"href="struct_m_m_c_driver.html#a417202c1ff282a504ecd07831381bf85"title="SPI high speed configuration used during transfers.">mmc_hscfg</a>);
<aname="l00400"></a>00400 <aclass="code"href="group___s_p_i.html#ga00809152c869db80192aa3e04266a99a"title="Asserts the slave select signal and prepares for transfers.">spiSelect</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>);
<aname="l00401"></a>00401 send_hdr(mmcp, MMC_CMDREADMULTIPLE, startblk * <aclass="code"href="group___m_m_c___s_p_i.html#ga502a0143be4c303f3006c0888e1cec82"title="Block size for MMC transfers.">MMC_SECTOR_SIZE</a>);
<aname="l00403"></a>00403 <aclass="code"href="group___s_p_i.html#gae291c012872da9c89dec23581f701b5f"title="Deasserts the slave select signal.">spiUnselect</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>);
<aname="l00404"></a>00404 <aclass="code"href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42"title="Enters the kernel lock mode.">chSysLock</a>();
<aname="l00422"></a><aclass="code"href="group___m_m_c___s_p_i.html#ga7e02b9210a8d3d9f8465b8000983dadf">00422</a><aclass="code"href="group__types.html#ga7556af1cb61728b53228fa3af1c851de"title="Boolean, recommended the fastest signed.">bool_t</a><aclass="code"href="group___m_m_c___s_p_i.html#ga7e02b9210a8d3d9f8465b8000983dadf"title="Reads a block within a sequential read operation.">mmcSequentialRead</a>(<aclass="code"href="struct_m_m_c_driver.html"title="Structure representing a MMC driver.">MMCDriver</a> *mmcp, <aclass="code"href="group___s_t_m8___c_o_r_e.html#gaba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> *buffer) {
<aname="l00432"></a>00432 <aclass="code"href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e"title="Leaves the kernel lock mode.">chSysUnlock</a>();
<aname="l00433"></a>00433
<aname="l00434"></a>00434 <spanclass="keywordflow">for</span> (i = 0; i < MMC_WAIT_DATA; i++) {
<aname="l00435"></a>00435 <aclass="code"href="group___s_p_i.html#gadd99ad823b391dde114f04dedafe5e80"title="Receives data from the SPI bus.">spiReceive</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, 1, buffer);
<aname="l00437"></a>00437 <aclass="code"href="group___s_p_i.html#gadd99ad823b391dde114f04dedafe5e80"title="Receives data from the SPI bus.">spiReceive</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, <aclass="code"href="group___m_m_c___s_p_i.html#ga502a0143be4c303f3006c0888e1cec82"title="Block size for MMC transfers.">MMC_SECTOR_SIZE</a>, buffer);
<aname="l00439"></a>00439 <aclass="code"href="group___s_p_i.html#ga43889a7d4c473f653596f8c0acafce2a"title="Ignores data on the SPI bus.">spiIgnore</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, 2);
<aname="l00444"></a>00444 <aclass="code"href="group___s_p_i.html#gae291c012872da9c89dec23581f701b5f"title="Deasserts the slave select signal.">spiUnselect</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>);
<aname="l00445"></a>00445 <aclass="code"href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42"title="Enters the kernel lock mode.">chSysLock</a>();
<aname="l00460"></a><aclass="code"href="group___m_m_c___s_p_i.html#gaf55b97f76be81f4ce5cde415f3131400">00460</a><aclass="code"href="group__types.html#ga7556af1cb61728b53228fa3af1c851de"title="Boolean, recommended the fastest signed.">bool_t</a><aclass="code"href="group___m_m_c___s_p_i.html#gaf55b97f76be81f4ce5cde415f3131400"title="Stops a sequential read gracefully.">mmcStopSequentialRead</a>(<aclass="code"href="struct_m_m_c_driver.html"title="Structure representing a MMC driver.">MMCDriver</a> *mmcp) {
<aname="l00473"></a>00473 <aclass="code"href="group___s_p_i.html#ga382cfbdffd2df57cf3843d45164e8bfc"title="Sends data over the SPI bus.">spiSend</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, <spanclass="keyword">sizeof</span>(stopcmd), stopcmd);
<aname="l00474"></a>00474 <spanclass="comment">/* result = recvr1(mmcp) != 0x00;*/</span>
<aname="l00475"></a>00475 <spanclass="comment">/* Note, ignored r1 response, it can be not zero, unknown issue.*/</span>
<aname="l00476"></a>00476 recvr1(mmcp);
<aname="l00477"></a>00477 result = FALSE;
<aname="l00478"></a>00478 <aclass="code"href="group___s_p_i.html#gae291c012872da9c89dec23581f701b5f"title="Deasserts the slave select signal.">spiUnselect</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>);
<aname="l00479"></a>00479
<aname="l00480"></a>00480 <aclass="code"href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42"title="Enters the kernel lock mode.">chSysLock</a>();
<aname="l00506"></a>00506 <aclass="code"href="group__system.html#ga5a257fa58a09815eb64a45e2dfbdc22e"title="Leaves the kernel lock mode.">chSysUnlock</a>();
<aname="l00507"></a>00507
<aname="l00508"></a>00508 <aclass="code"href="group___s_p_i.html#ga6752c9f736f8de774a5bef6dfe2aae2e"title="Configures and activates the SPI peripheral.">spiStart</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, mmcp-><aclass="code"href="struct_m_m_c_driver.html#a417202c1ff282a504ecd07831381bf85"title="SPI high speed configuration used during transfers.">mmc_hscfg</a>);
<aname="l00509"></a>00509 <aclass="code"href="group___s_p_i.html#ga00809152c869db80192aa3e04266a99a"title="Asserts the slave select signal and prepares for transfers.">spiSelect</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>);
<aname="l00510"></a>00510 send_hdr(mmcp, MMC_CMDWRITEMULTIPLE, startblk * <aclass="code"href="group___m_m_c___s_p_i.html#ga502a0143be4c303f3006c0888e1cec82"title="Block size for MMC transfers.">MMC_SECTOR_SIZE</a>);
<aname="l00512"></a>00512 <aclass="code"href="group___s_p_i.html#gae291c012872da9c89dec23581f701b5f"title="Deasserts the slave select signal.">spiUnselect</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>);
<aname="l00513"></a>00513 <aclass="code"href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42"title="Enters the kernel lock mode.">chSysLock</a>();
<aname="l00531"></a><aclass="code"href="group___m_m_c___s_p_i.html#ga9ce0adb181138efc1f835aff6d8eb203">00531</a><aclass="code"href="group__types.html#ga7556af1cb61728b53228fa3af1c851de"title="Boolean, recommended the fastest signed.">bool_t</a><aclass="code"href="group___m_m_c___s_p_i.html#ga9ce0adb181138efc1f835aff6d8eb203"title="Writes a block within a sequential write operation.">mmcSequentialWrite</a>(<aclass="code"href="struct_m_m_c_driver.html"title="Structure representing a MMC driver.">MMCDriver</a> *mmcp, <spanclass="keyword">const</span><aclass="code"href="group___s_t_m8___c_o_r_e.html#gaba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> *buffer) {
<aname="l00544"></a>00544 <aclass="code"href="group___s_p_i.html#ga382cfbdffd2df57cf3843d45164e8bfc"title="Sends data over the SPI bus.">spiSend</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, <spanclass="keyword">sizeof</span>(start), start); <spanclass="comment">/* Data prologue. */</span>
<aname="l00545"></a>00545 <aclass="code"href="group___s_p_i.html#ga382cfbdffd2df57cf3843d45164e8bfc"title="Sends data over the SPI bus.">spiSend</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, <aclass="code"href="group___m_m_c___s_p_i.html#ga502a0143be4c303f3006c0888e1cec82"title="Block size for MMC transfers.">MMC_SECTOR_SIZE</a>, buffer); <spanclass="comment">/* Data. */</span>
<aname="l00546"></a>00546 <aclass="code"href="group___s_p_i.html#ga43889a7d4c473f653596f8c0acafce2a"title="Ignores data on the SPI bus.">spiIgnore</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, 2); <spanclass="comment">/* CRC ignored. */</span>
<aname="l00547"></a>00547 <aclass="code"href="group___s_p_i.html#gadd99ad823b391dde114f04dedafe5e80"title="Receives data from the SPI bus.">spiReceive</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, 1, b);
<aname="l00548"></a>00548 <spanclass="keywordflow">if</span> ((b[0] & 0x1F) == 0x05) {
<aname="l00554"></a>00554 <aclass="code"href="group___s_p_i.html#gae291c012872da9c89dec23581f701b5f"title="Deasserts the slave select signal.">spiUnselect</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>);
<aname="l00555"></a>00555 <aclass="code"href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42"title="Enters the kernel lock mode.">chSysLock</a>();
<aname="l00570"></a><aclass="code"href="group___m_m_c___s_p_i.html#gae84abdd53540f03262822aa1f9a213b5">00570</a><aclass="code"href="group__types.html#ga7556af1cb61728b53228fa3af1c851de"title="Boolean, recommended the fastest signed.">bool_t</a><aclass="code"href="group___m_m_c___s_p_i.html#gae84abdd53540f03262822aa1f9a213b5"title="Stops a sequential write gracefully.">mmcStopSequentialWrite</a>(<aclass="code"href="struct_m_m_c_driver.html"title="Structure representing a MMC driver.">MMCDriver</a> *mmcp) {
<aname="l00582"></a>00582 <aclass="code"href="group___s_p_i.html#ga382cfbdffd2df57cf3843d45164e8bfc"title="Sends data over the SPI bus.">spiSend</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>, <spanclass="keyword">sizeof</span>(stop), stop);
<aname="l00583"></a>00583 <aclass="code"href="group___s_p_i.html#gae291c012872da9c89dec23581f701b5f"title="Deasserts the slave select signal.">spiUnselect</a>(mmcp-><aclass="code"href="struct_m_m_c_driver.html#ac8850a0d2a6aaba7db684da46f67b666"title="SPI driver associated to this MMC driver.">mmc_spip</a>);
<aname="l00584"></a>00584
<aname="l00585"></a>00585 <aclass="code"href="group__system.html#ga9f6573c0763d1e4e97c63c62edad6e42"title="Enters the kernel lock mode.">chSysLock</a>();
Generated on Sun Nov 28 2010 14:09:49 for ChibiOS/RT by <ahref="http://www.doxygen.org/index.html"><imgsrc="doxygen.png"alt="doxygen"align="middle"border="0"></a> 1.7.1</small></address>