导航:首页 > 操作系统 > 单片机多个dma并行么

单片机多个dma并行么

发布时间:2022-05-17 10:10:55

‘壹’ stm32单片机dma1通道之间有影响吗

下面代码是一个标准DMA设置,当然实际应用中可根据实际情况进行裁减:
DMA_DeInit(DMA_Channel1);
上面这句是给DMA配置通道,根据ST提供的资料,STM3210Fx中DMA包含7个通道(CH1~CH7),也就是说可以为外设或memory提供7座“桥梁”(请允许我使用桥梁一词,我觉得更容易理解,哈哈,别“拍砖”呀!);
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
上面语句中的DMA_InitStructure是一个DMA结构体,在库中有声明了,当然使用时就要先定义了;DMA_PeripheralBaseAddr是该结构体中一个数据成员,给DMA一个起始地址,好比是一个buffer起始地址,数据流程是:外设寄存器à DMA_PeripheralBaseAddàmemory中变量空间(或flash中数据空间等),ADC1_DR_Address是我定义的一个地址变量;
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADC_ConvertedValue;
上面这句很显然是DMA要连接在Memory中变量的地址,ADC_ConvertedValue是我自己在memory中定义的一个变量;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
上面的这句是设置DMA的传输方向,就如前面我所说的,DMA可以双向传输,也可以单向传输,这里设置的是单向传输,如果需要双向传输:把DMA_DIR_PeripheralSRC改成DMA_DIR_PeripheralDST即可。
DMA_InitStructure.DMA_BufferSize = 2;
上面的这句是设置DMA在传输时缓冲区的长度,前面有定义过了buffer的起始地址:ADC1_DR_Address ,为了安全性和可靠性,一般需要给buffer定义一个储存片区,这个参数的单位有三种类型:Byte、HalfWord、word,我设置的2个half-word(见下面的设置);32位的MCU中1个half-word占16 bits。
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
上面的这句是设置DMA的外设递增模式,如果DMA选用的通道(CHx)有多个外设连接,需要使用外设递增模式:DMA_PeripheralInc_Enable;我的例子里DMA只与ADC1建立了联系,所以选用DMA_PeripheralInc_Disable
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
上面的这句是设置DMA的内存递增模式,DMA访问多个内存参数时,需要使用DMA_MemoryInc_Enable,当DMA只访问一个内存参数时,可设置成:DMA_MemoryInc_Disable。
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
上面的这句是设置DMA在访问时每次操作的数据长度。有三种数据长度类型,前面已经讲过了,这里不在叙述。
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
与上面雷同。在此不再说明。
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
上面的这句是设置DMA的传输模式:连续不断的循环模式,若只想访问一次后就不要访问了(或按指令操作来反问,也就是想要它访问的时候就访问,不要它访问的时候就停止),可以设置成通用模式:DMA_Mode_Normal
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
上面的这句是设置DMA的优先级别:可以分为4级:VeryHigh,High,Medium,Low.
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
上面的这句是设置DMA的2个memory中的变量互相访问的
DMA_Init(DMA_Channel1,&DMA_InitStructure);
前面那些都是对DMA结构体成员的设置,在次再统一对DMA整个模块做一次初始化,使得DMA各成员与上面的参数一致。
/*DMA Enable*/
DMA_Cmd(DMA_Channel1,ENABLE);
哈哈哈!这一句我想我就不罗嗦了,大家一看就明白。
至此,整个DMA总算设置好了,但是,DMA通道又是怎样与外设联系在一起的呢?哈哈,这也是我当初最想知道的一个事情,别急!容我想喝口茶~~~~~~哈哈哈!
要使DMA与外设建立有效连接,这不是DMA自身的事情,是各个外设的事情,每个外设都有 一个xxx_DMACmd(XXXx,Enable )函数,如果使DMA与ADC建立有效联系,就使用ADC_DMACmd(ADC1,Enable); (这里我启用了ADC中的ADC1模块)。

‘贰’ 单片机里的DMA是什么意思啊,有款单片机说具有DMA控制器,中的DMA是什么意思啊

DMA就是直接存储器访问的首字母缩写(Direct Memory Access)。
CPU的总线上同时会挂着多几个存储器,如果想要将存储器1的内容复制到存储器2,如果不用DMA的话,就得靠CPU直接去操作了,操作过程大致是:CPU准备好存储器1的地址和控制信号,读取存储器1的内容,存放到CPU内部寄存器中,再准备好存储器2的地址和控制信号,将寄存器中的内容写入到存储器2。
如果是单个数据的操作,这个过程都是必须的,效率问题也不明显,但如果一次要复制大量数据(比如一帧图像数据、一批语音数据等),那么靠CPU这样循环一个数据一个数据地操作,不仅速度慢(由于架构设计的原因,一般CPU访问外部总线的速度都不是很高),还会导致CPU和总线一直被占用,效率就非常低了。如果在CPU内部做一个硬件控制器,专门负责这种数据搬移操作(自动产生存储器的地址和控制信号,自动实现读写时序),不仅速度可以提高很多,CPU还可以在此期间做其它的事情,这样效率就会高很多了。DMA就是这么个意思,硬件上必须有一个DMA控制器来实现这一功能。
现在DMA的概念和作用已经大大延伸了,很多复杂CPU里面甚至会包含很多个DMA控制器,DMA操作也不再仅限于外部存储器了,内部存储器之间、内部和外部存储器之间、各种标准外设和存储器之间,都有DMA控制器来实现数据交换,这样CPU的功能越来越强,数据处理也越来越快。。

‘叁’ 单片机中DMA是什么意思

DMA是一种不需要CPU参与传送数据的方式,这样可以节省大量的CPU资源。例如你需要传送100个8位的数据到外设,如果用CPU来做可能是
char num[100];
char i;
for(i = 0; i < 100; i++)
{
P0 = num[i];
}
这样cpu要执行100次for循环,如果用DMA方式只要把数据的个数和数据的起始地址给DMA接CPU就不用理会了。

‘肆’ 如何高效的使用单片机的DMA

有DMA功能的单片机很少的,特别是8位单片机,基本来说是没有DMA功能,PIC24系列部分单片机有DMA功能,可以选用。8位单片机,比如51,也可以借助8237实现DMA功能。

‘伍’ 51单片机syc89c52rc有没有DMA

51单片机是没有DMA的,不仅仅你说的这个型号,所有的51单片机都没有,当然增强型的C8051除外。要想是普通51单片机具有DMA功能,可以用8237来扩展,8237是一款比较老的DMA扩展芯片了,典型电路很多,可以直接从网上找到。

‘陆’ STM32F103 同一DMA的各个通道之间是并行的吗

数据量较大, 执行时刻确定, 执行完之前所运行的程序不会修改源和目标数据区。

t为时间轴。
t0: start_DMA(); 执行完成需要 Tx 时间
t1: other();
t2: DMA_src_dst_op(); 下一次操作DMA相关数据区 ,也许是程序修改,也许是硬件功能。 为了保证数据正确,所以 t2 -t0 >= Tx

‘柒’ 单片机中DMA是甚么意思

DMA是1种不需要CPU参与传送数据的方式,这样可以节省大量的CPU资源。例如你需要传送100个8位的数据到外设,如果用CPU来做多是charnum
;chari;for(i=0;i100;i++)
这样cpu要履行100次for循环,如果用DMA方式只要把数据的个数和数据的起始地址给DMA接CPU就不用理睬了。

‘捌’ STM32 DMA时spi是并行吗

只要不是同一个SPI就可以同时工作,什么情况是使用同一个SPI呢,就是这个SPI的默认端口和它的复用端口只能选择其中之一来使用这个SPI

‘玖’ 单片机DMA传输完成后会把目标地址清零吗急!!

当然不会自动清零,你应当在进入DMA中断后对目标数组进行处理,防止后续传输覆盖掉原先的目标数组。

‘拾’ arm stm32单片机dma传输数据时m3内核可以访问内存吗

应该是可以的,DMA就是解放CPU但是DMA传输数据时,CPU不能访问DMA传输的那部分内存,有可能会造成传输出错
具体也说不清,但是在播放音乐的例程中,用两个缓冲区,这就是2个DMA各占一块内存互不干涉

阅读全文

与单片机多个dma并行么相关的资料

热点内容
如何重启数据库服务器 浏览:656
联通程序员发展怎么样 浏览:703
山东省联想服务器供货商云空间 浏览:143
鸿天神尊小说哪个app可以看 浏览:394
做程序员的没朋友吗 浏览:356
阿里云服务器传奇微端 浏览:922
phplinux时间 浏览:447
云服务器20性能 浏览:986
android强制系统横屏 浏览:280
怎么提前看未播出的电视剧app 浏览:666
cad转pdf图层 浏览:600
程序员接私活初级 浏览:434
全无油润滑压缩机 浏览:185
代码加密常用方法 浏览:953
安卓手机如何解除已禁用 浏览:396
算法的随机性 浏览:487
高中解压体育游戏 浏览:533
androidstudior丢失 浏览:345
命令行笔记 浏览:739
360目标文件夹访问拒绝 浏览:520