|
DMA,大家非常熟悉了,Direct Memory Access,是在嵌入式系统中对数据搬运起到非常大的辅助作用。在STM32H7系列MCU中,ST公司在片上又实现了一个叫BDMA的功能外设。下面让我们简单了一下它的作用。 ( c3 s8 q W5 j% K5 a7 \* o BDMA(Basic direct memory access controller,基本直接存储器访问控制器),相比通用的DMA1和DMA2,BDMA功能稍弱,支持一些基本的DMA功能。BDMA基础知识BDMA的几个关键知识点:9 p, C. p8 {9 C- W ' M3 L# ]: @% R! w# R6 J 1. 1. 由于总线矩阵的存在,各个主控的道路四通八达,从而可以让DMA和CPU同时开工,但是注意一点,如果他们同时访问的同一个外设,会有一点性能影响的。 2. 2. BDMA支持存储器到外设,外设到存储器,存储器到存储器和外设到外设的传输,其中外设到外设的传输,DMA1和DMA2是不支持的,这个模式在低功耗模式下比较有用。0 q2 Z) I) u, x- J6 \" z 3. 3. BDMA只有一个AHB总线主控,而DMA1和DMA2是有两个的,可以分别用于源地址和目的地址的传输。 4. 4. 源地址和目的地址的数据宽度可以不同,但是数据地址必须要跟其数据类型对齐。比如源地址是uint32类型的,那么此数组的地址必须4字节对齐。5 c. o$ N5 Z3 g! \& M0 i4 `2 ]* P 5. 5. BDMA主要有两种模式,一个是Normal正常模式,传输一次后就停止传输;另一种是Circular循环模式,会一直循环的传输下去,即使有DMA中断,传输也是一直在进行的。. B- Q+ |6 j7 N9 n% ~2 D" \ 6. 6. BDMA的通道请求(Channel0 – Channel7)的优先级可编程,分为四级Very high priority,High priority,Medium priority和Low priority。通道的优先级配置相同的情况下,如果同时产生请求,会优先响应编号低的,即Channel0优先响应。" i# [+ C4 q0 x, t/ s9 [3 |* X6 E # v! D8 s4 U8 `! _ **BDMA传输**7 D, W; ^# t2 W C BDMA支持如下几种传输模式:: Y [9 d' |, A3 i! |- Y8 e' V# H) r 2 Q3 N' R1 A- z( ^! d( a * 1. 存储器到外设。 * 2. 外设到存储器。 * 3. 存储器到存储器。 * 4. 外设到外设的传输。2 g) a- _, U8 Z2 k* @7 O , u: g! u5 w) z! P! u" K6 W7 K 其中外设到外设的传输,DMA1和DMA2是不支持的,这个模式在低功耗模式下比较有用。 / l* N, I6 t6 I( h 关于这几种传输方式要注意以下两个问题:0 @$ v q, m) V# L/ J , X0 B8 W9 ]$ f/ |& G3 j5 F+ v * 1. 源地址和目的地址的数据宽度可以不同,但是数据地址必须要跟其数据类型对齐。比如源地址是uint32类型的,那么此数组的地址必须4字节对齐。% m, I4 l2 f. f; x7 n * 2. BDMA不可以操作TCM区,其它的SRAM区均可操作 **BDMA的循环模式和正常模式**( [1 W: E* }% ?, f BDMA主要有两种模式,一个是Normal正常模式,传输一次后就停止传输;另一种是Circular循环模式,会一直循环的传输下去,即使有DMA中断,传输也是一直在进行的。这两种模式各有用途。 9 z& X" j/ q$ N * 1. Normal正常模式,适合用于单次传输,比如存储器到存储器的数据复制粘贴,又比如串口的数据单次发送,下次还需要发送的时候,使能下即可。$ m9 S' k2 ?8 O' ~) ] * 2. Circular循环模式,适合用于需要连续传输的场合,比如定时器触发BDMA实现任意IO的PWM输出。+ a! U% Y8 D* |9 j1 R% v |& | BDMA双缓冲BDMA也是支持双缓冲模式的,双缓冲的含义是源地址或者目的地址可以设置两个缓冲区,这种方式的好处是一个缓冲区在接收或者发送数据的时候,另一个缓冲区可以动态更新数据或者处理已经接收到的数据。当用户开启了BDMA传输完成中断后,通过寄存器CCRx的CT位判断当前使用的是哪个缓冲区 7 }+ H+ }3 ^8 N1 @ * 1. 如果CT = 1表示当前正在使用缓冲区1,即寄存器BDMA_CM1ARx记录的地址。 * 2. 如果CT = 0表示当前正在使用缓冲区0,即寄存器BDMA_CM0ARx记录的地址。5 K/ G$ h- Z* g' } ^ 另外注意,存储器到存储器的BDMA传输不支持双缓冲模式,仅可以用于存储器到外设或者外设到存储器。 |
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
【福利三:逢7发帖赢大礼】成功利用STM32H743VI片内SRAM12和DTCM空间(完全胜利)
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
【福利三:逢7发帖赢大礼】使用惠勤致远STM32H743VI开发板+ST7796并口彩屏移植LVGL9.5并分享一些额外内容
【 逢7发帖赢大礼】7、TouchGFX中实现云彩流动效果
微信公众号
手机版