stm32F7,开启 cache 后,uart+idl+dma 接收失败?

2019-12-25 18:49发布

本帖最后由 hpdell 于 2017-3-30 12:05 编辑

F7的单片机,开启 cache 后,uart-idl+dma接收不到数据,中断可以进入,

SCB_EnableICache();   //使能I-Cache
SCB_EnableDCache();   //使能D-Cache    后,

使用usart+dma 接收就不行
屏蔽后uart+dam可以,但sd卡又不行

该如何处理啊 ??

sd卡使用 查询模式,

感觉这个f7的 cache 使用起来很麻烦,

其他的 mpu 保护还没有进行任何设置
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
27条回答
lusson
2019-12-26 14:55
这是我的FATFS中使用DMA和不使用DMA的调用,你可以参考看看,开启DMA前和读完数据后都要无效下cache。我比较了下速度,没有相差很多,所以最后没用DMA了。
  1. DRESULT SD_read(BYTE lun, BYTE *buff, DWORD sector, UINT count)
  2. {
  3.   DRESULT res = RES_OK;
  4. #ifdef READ_SD_USE_DMA
  5.   u32 addr = (u32)buff;
  6.   u32 size = count * BLOCK_SIZE;
  7.   if (addr & 0x1F) {                // align 32 byte
  8.           addr &= ~((u32)0x1F);
  9.         size += 0x20;
  10.   }
  11.   SCB_InvalidateDCache_by_Addr((u32*)addr, size);
  12.   if(BSP_SD_ReadBlocks_DMA((uint32_t*)buff,
  13.                        ((uint64_t)sector)*BLOCK_SIZE,
  14.                        BLOCK_SIZE,
  15.                        count) != MSD_OK)
  16.   {
  17.     res = RES_ERROR;
  18.   }
  19.   SCB_InvalidateDCache_by_Addr((u32*)addr, size);
  20. #else
  21.   if(BSP_SD_ReadBlocks((uint32_t*)buff,
  22.                        ((uint64_t)sector)*BLOCK_SIZE,
  23.                        BLOCK_SIZE,
  24.                        count) != MSD_OK)
  25.   {
  26.     res = RES_ERROR;
  27.   }
  28. #endif
  29.   return res;
  30. }
复制代码

一周热门 更多>