硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4076|回复: 5
收起左侧

[技术分享] 优化H7-TOOL的SPI DMA显示屏驱动,开启SPI硬件FIFO和DMA突发功能

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107707
QQ
发表于 2021-1-7 10:57:36 | 显示全部楼层 |阅读模式

DMA,将源数据位宽和目的数据位宽都设置为32bit,然后源数据做4次突发。
并且打开DMA FIFO
  1. hdma_tx.Instance                 = DMA2_Stream3;
  2. hdma_tx.Init.FIFOMode            = DMA_FIFOMODE_ENABLE;
  3. hdma_tx.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
  4. hdma_tx.Init.MemBurst            = DMA_MBURST_INC4;
  5. hdma_tx.Init.PeriphBurst         = DMA_PBURST_SINGLE;
  6. hdma_tx.Init.Request             = DMA_REQUEST_SPI5_TX;
  7. hdma_tx.Init.Direction           = DMA_MEMORY_TO_PERIPH;
  8. hdma_tx.Init.PeriphInc           = DMA_PINC_DISABLE;
  9. hdma_tx.Init.MemInc              = DMA_MINC_ENABLE;
  10. hdma_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
  11. hdma_tx.Init.MemDataAlignment    = DMA_MDATAALIGN_WORD;
复制代码


SPI开硬件FIFO:

  1. hspi5.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  2. hspi5.Init.Direction = SPI_DIRECTION_2LINES;
  3. hspi5.Init.CLKPhase = SPI_PHASE_1EDGE;
  4. hspi5.Init.CLKPolarity = SPI_POLARITY_HIGH;
  5. hspi5.Init.DataSize = SPI_DATASIZE_16BIT;
  6. hspi5.Init.FirstBit = SPI_FIRSTBIT_MSB;
  7. hspi5.Init.TIMode = SPI_TIMODE_DISABLE;
  8. hspi5.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  9. hspi5.Init.CRCPolynomial = 7;
  10. hspi5.Init.CRCLength = SPI_CRC_LENGTH_8BIT;
  11. hspi5.Init.NSS = SPI_NSS_SOFT;
  12. hspi5.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
  13. hspi5.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE;
  14. hspi5.Init.Mode = SPI_MODE_MASTER;
  15. hspi5.Init.IOSwap = SPI_IO_SWAP_ENABLE;
  16. hspi5.Init.FifoThreshold = SPI_FIFO_THRESHOLD_04DATA;
复制代码


搞了个这个有啥用呢,可以降低SPI DMA带宽需求,运行更宽松。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107707
QQ
 楼主| 发表于 2021-1-7 11:05:33 | 显示全部楼层
关于STM32H7的硬件FIFO配置和DMA的突发配置,是比较考究的,详情看此贴:

STM32H7的SPI DMA配置时,SPI硬件FIFO,DMA突发设置等几个重要注意事项
http://www.armbbs.cn/forum.php?m ... 2944&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

4

主题

139

回帖

151

积分

初级会员

积分
151
QQ
发表于 2021-1-7 11:28:53 | 显示全部楼层
硬汉哥,fifo的作用和意思理解,一直对突发不是很理解,能通俗的讲下突发是干嘛的吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107707
QQ
 楼主| 发表于 2021-1-7 13:05:39 | 显示全部楼层
qgyhd1234 发表于 2021-1-7 11:28
硬汉哥,fifo的作用和意思理解,一直对突发不是很理解,能通俗的讲下突发是干嘛的吗?

此贴里面给一个坛友的回复,你看看

注意STM32H7的DMA在不同位宽和FIFO配置的情况下,支持的突发次数
http://www.armbbs.cn/forum.php?m ... 4314&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

36

主题

2041

回帖

2149

积分

至尊会员

积分
2149
发表于 2021-1-7 14:52:29 | 显示全部楼层
借鉴下
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

4

主题

139

回帖

151

积分

初级会员

积分
151
QQ
发表于 2021-1-11 09:51:33 | 显示全部楼层
eric2013 发表于 2021-1-7 13:05
此贴里面给一个坛友的回复,你看看

注意STM32H7的DMA在不同位宽和FIFO配置的情况下,支持的突发次数

明白了,普通dma传输是传输一次,请求一次总线,突发是申请一次总线,传输多个数据
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-12 14:55 , Processed in 0.167363 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表