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条回答
hpdell
2019-12-27 13:29
本帖最后由 hpdell 于 2017-3-30 19:10 编辑
lusson 发表于 2017-3-30 16:02
加了cache的话,在使用DMA的数据前加上  SCB_InvalidateDCache_by_Addr((u32*)addr, size);试试看。 ...


你好,

只找到这个函数
/**
  rief   Clean & Invalidate D-Cache
  details Cleans and Invalidates D-Cache
  */
__STATIC_INLINE void SCB_CleanInvalidateDCache (void)
{
  #if (__DCACHE_PRESENT == 1U)
    uint32_t ccsidr;
    uint32_t sets;
    uint32_t ways;

    SCB->CSSELR = (0U << 1U) | 0U;          /* Level 1 data cache */
    __DSB();

    ccsidr = SCB->CCSIDR;

                                            /* clean & invalidate D-Cache */
    sets = (uint32_t)(CCSIDR_SETS(ccsidr));
    do {
      ways = (uint32_t)(CCSIDR_WAYS(ccsidr));
      do {
        SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) |
                       ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk)  );
        #if defined ( __CC_ARM )
          __schedule_barrier();
        #endif
      } while (ways--);
    } while(sets--);

    __DSB();
    __ISB();
  #endif
}


没有找到你所说的函数




仿真仿着放着就出现如下图片的内容:

14.png (7.97 KB, 下载次数: 0)

下载附件

2017-3-30 19:09 上传



我发送了40个Byte, 再加上回车换行,总共应该是 42个Byte,但是接收到的数据就是没有内容





一周热门 更多>