|
发表于 2017-3-30 13:51:20
|
显示全部楼层
这是我的FATFS中使用DMA和不使用DMA的调用,你可以参考看看,开启DMA前和读完数据后都要无效下cache。我比较了下速度,没有相差很多,所以最后没用DMA了。
- DRESULT SD_read(BYTE lun, BYTE *buff, DWORD sector, UINT count)
- {
- DRESULT res = RES_OK;
- #ifdef READ_SD_USE_DMA
- u32 addr = (u32)buff;
- u32 size = count * BLOCK_SIZE;
- if (addr & 0x1F) { // align 32 byte
- addr &= ~((u32)0x1F);
- size += 0x20;
- }
- SCB_InvalidateDCache_by_Addr((u32*)addr, size);
- if(BSP_SD_ReadBlocks_DMA((uint32_t*)buff,
- ((uint64_t)sector)*BLOCK_SIZE,
- BLOCK_SIZE,
- count) != MSD_OK)
- {
- res = RES_ERROR;
- }
- SCB_InvalidateDCache_by_Addr((u32*)addr, size);
- #else
- if(BSP_SD_ReadBlocks((uint32_t*)buff,
- ((uint64_t)sector)*BLOCK_SIZE,
- BLOCK_SIZE,
- count) != MSD_OK)
- {
- res = RES_ERROR;
- }
- #endif
- return res;
- }
复制代码 |
|