|
通过SFUD库, 读W25Q16, 调通了DMA读取, 其中读DMA函数如下:
- void SPI1_Read_DMA(void* buf, int count)
- {
- dma_channel_disable(DMA_CH3);
- dma_channel_disable(DMA_CH4);
- DMA_CHCNT (DMA_CH3) = count;
- DMA_CHCNT (DMA_CH4) = count;
- DMA_CHMADDR (DMA_CH3) = (unsigned long)(buf);
- dma_channel_enable(DMA_CH3);
- dma_channel_enable(DMA_CH4);
- spi_dma_enable(SPI1, SPI_DMA_TRANSMIT);
- spi_dma_enable(SPI1, SPI_DMA_RECEIVE);
- while(!dma_flag_get(DMA_CH3, DMA_FLAG_FTF));
- dma_flag_clear(DMA_CH3, DMA_FLAG_FTF);
- dma_flag_clear(DMA_CH4, DMA_FLAG_FTF);
- }
复制代码
实测主要耗时的就是 while(!dma_flag_get(DMA_CH3, DMA_FLAG_FTF)); 这一行.
不开QSPI时读8192字节数据, 用时142509个时钟周期, 平均17.5个时钟周期读1字节, 比较正常, SPI是主频2分频那就得至少16个周期了.
开QSPI时读8192字节居然还得109920个时钟周期, 平均13.5个时钟周期读1字节, 比预想的慢多了, 本来觉得应该是4~6个时钟周期读1字节的.
实拍SCK脚波形如下, 每两个脉冲之间有停顿:
现在不知道是我哪里没配置合适呢? 还是GD32F350的QSPI就这个水平? 要是硬件问题的话我也就不折腾了.
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。
如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》
|