Цитата(Jekin @ Apr 27 2014, 12:33)

Keil MDK имеет примеры USB mass storage device для своих демо-плат.
Вот один из них (для карты SD)
Да уж.... Чувствуется, что писали это настоящие "профи"...
CODE
static BOOL ReadBlock (U32 bl, U8 *buf, U32 cnt) {
/* Read one or more 512 byte blocks from Flash Card. */
U32 i;
SDIO->DLEN = cnt * 512;
SDIO->DTIMER = cnt * DATA_RD_TOUT_VALUE;
SDIO->DCTRL = SDIO_DCTRL_DBLOCKSIZE_3 | SDIO_DCTRL_DBLOCKSIZE_0 |
SDIO_DCTRL_DMAEN | SDIO_DCTRL_DTDIR |
SDIO_DCTRL_DTEN ;
for (i = DMA_TOUT; i; i--) {
if (DMA2->LISR & DMA_LISR_TEIF3) {
break;
}
if (DMA2->LISR & DMA_LISR_TCIF3) {
if ((SDIO->STA & (SDIO_STA_DBCKEND|SDIO_STA_DATAEND)) == (SDIO_STA_DBCKEND|SDIO_STA_DATAEND)) {
/* Data transfer finished. */
return (__TRUE);
}
}
}
/* DMA Transfer timeout. */
return (__FALSE);
}
Интересно - зачем тут DMA?