Java最全【嵌入式系统】DMA工作原理与常用函数解析_dma函数,java银行项目面试题

最后

毕竟工作也这么久了 ,除了途虎一轮,也七七八八面试了不少大厂,像阿里、饿了么、美团、滴滴这些面试过程就不一一写在这篇文章上了。我会整理一份详细的面试过程及大家想知道的一些问题细节

美团面试经验

美团面试
字节面试经验
字节面试
菜鸟面试经验
菜鸟面试
蚂蚁金服面试经验
蚂蚁金服
唯品会面试经验
唯品会

因篇幅有限,图文无法详细发出

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

图1 DMA路径举例
例如图1所示,APB2上挂载的某个外设发起DMA请求,当DMA由CPU使能后开启相应的DMA通道,于是外设通过DMA通道、总线矩阵直接进行了对内存的读或写操作。

2 DMA通道与配置

在这里插入图片描述

图2 DMA通道属性

大容量STM32 MCU有两个DMA控制器,共12个通道(DMA1有7个通道,DMA2有5个通道),通道的基本属性如图2所示在这里插入图片描述

图3 DMA通道属性说明

如图4所示,DMA每个通道提前规定了特定外设和存储器间的直接数据交换。例如,外设ADC1只能通过Access1与内存进行数据交换,在配置DMA源和目的基地址时要遵照图4所示的预设规定。在这里插入图片描述

图4

由于DMA控制器一次只能开启一个通道,因此若同一时间有多个来自不同通道的外设进行DMA请求,就需要通过通道优先级来使能高优先级通道(当优先级相同时,通道标号小的优先使能)。DMA控制器内部有一个仲裁器来协调各个DMA请求的优先权。

若配置内存外设数据单位相同,则从源地址处读取一个单位数据包,往目的地址出写一个相同宽度的数据包即可。若两者单位不相同,就要参考“可编程的数据宽度”对照表进行数据传输操作。

3、DMA使用流程与相关函数

在这里插入图片描述

图5 DMA使用流程

由于DMA通道需要配置的参数较多,因此使用结构体来简化API输入参数。因此这里先根据需要配置结构体DMA_InitStructure,其成员变量如图2所示均为通道基本参数;再以DMA结构体指针作为DMA_Init()的输入参数,在其内部配置相应的寄存器。接下来对DMA_Init()函数作解析,其余函数类似。

void DMA\_Init(DMA_Channel_TypeDef\* DMAy_Channelx, DMA_InitTypeDef\* DMA_InitStruct)
{
  uint32\_t tmpreg = 0;

/\*--------------------------- DMAy Channelx CCR Configuration -----------------\*/
  /\* Get the DMAy\_Channelx CCR value \*/
  tmpreg = DMAy_Channelx->CCR;
  /\* Clear MEM2MEM, PL, MSIZE, PSIZE, MINC, PINC, CIRC and DIR bits \*/
  tmpreg &= CCR_CLEAR_Mask;
  /\* Configure DMAy Channelx: data transfer, data size, priority level and mode \*/
  /\* Set DIR bit according to DMA\_DIR value \*/
  /\* Set CIRC bit according to DMA\_Mode value \*/
  /\* Set PINC bit according to DMA\_PeripheralInc value \*/
  /\* Set MINC bit according to DMA\_MemoryInc value \*/
  /\* Set PSIZE bits according to DMA\_PeripheralDataSize value \*/
  /\* Set MSIZE bits according to DMA\_MemoryDataSize value \*/
  /\* Set PL bits according to DMA\_Priority value \*/
  /\* Set the MEM2MEM bit according to DMA\_M2M value \*/
  tmpreg |= DMA_InitStruct->DMA_DIR | DMA_InitStruct->DMA_Mode |
            DMA_InitStruct->DMA_PeripheralInc | DMA_InitStruct->DMA_MemoryInc |
            DMA_InitStruct->DMA_PeripheralDataSize | DMA_InitStruct->DMA_MemoryDataSize |
            DMA_InitStruct->DMA_Priority | DMA_InitStruct->DMA_M2M;

  /\* Write to DMAy Channelx CCR \*/
  DMAy_Channelx->CCR = tmpreg;

/\*--------------------------- DMAy Channelx CNDTR Configuration ---------------\*/
  /\* Write to DMAy Channelx CNDTR \*/
  DMAy_Channelx->CNDTR = DMA_InitStruct->DMA_BufferSize;

/\*--------------------------- DMAy Channelx CPAR Configuration ----------------\*/
  /\* Write to DMAy Channelx CPAR \*/
  DMAy_Channelx->CPAR = DMA_InitStruct->DMA_PeripheralBaseAddr;

/\*--------------------------- DMAy Channelx CMAR Configuration ----------------\*/


## 最后

**码字不易,觉得有帮助的可以帮忙点个赞,让更多有需要的人看到**

又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考

以下是部分内容截图
![架构面试专题及架构学习笔记导图.png](https://img-blog.csdnimg.cn/img_convert/b3e6ec6629984ab224cd0464bd8b2533.webp?x-oss-process=image/format,png)

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

13a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值