最后
毕竟工作也这么久了 ,除了途虎一轮,也七七八八面试了不少大厂,像阿里、饿了么、美团、滴滴这些面试过程就不一一写在这篇文章上了。我会整理一份详细的面试过程及大家想知道的一些问题细节
美团面试经验
字节面试经验
菜鸟面试经验
蚂蚁金服面试经验
唯品会面试经验
因篇幅有限,图文无法详细发出
图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)**