DMA存储器

2019-07-21 03:25发布

在代码运行过程中,还可以对DMA再次初始化来更新存储器地址或者存储器地址中的值吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
edmund1234
1楼-- · 2019-07-21 08:43
不需要再初始化, 先禁能, 改地址, 改数据长度, 最后使能就可以再次使其工作了
问题很大
2楼-- · 2019-07-21 13:24
edmund1234 发表于 2019-4-5 11:47
不需要再初始化, 先禁能, 改地址, 改数据长度, 最后使能就可以再次使其工作了

我是把DMA的初始化用一个函数封装的,这种情况怎么该地址和数据长度呢。可以禁能后改变数组的值然后使能,这样操作最后DMA的那个数组是改变后的数组吗
edmund1234
3楼-- · 2019-07-21 16:27
本帖最后由 edmund1234 于 2019-4-5 14:10 编辑
问题很大 发表于 2019-4-5 13:19
我是把DMA的初始化用一个函数封装的,这种情况怎么该地址和数据长度呢。可以禁能后改变数组的值然后使能 ...

DMA1_Channel1->CCR &= ~(u32)DMA_CCR_EN;
        DMA1_Channel1->CMAR = (u32)0;      // 内存地址
        DMA1_Channel1->CNDTR = 0x100;     // 数据长度         
        DMA1_Channel1->CPAR = (u32)&USART1->DR;          // 如没需要改变外设地址可删去这条
DMA1->IFCR = 0x0F<<0;

DMA1_Channel1->CCR |= DMA_CCR_EN;

是否把这几行封成函数你自己看着办吧
问题很大
4楼-- · 2019-07-21 21:46
 精彩回答 2  元偷偷看……
edmund1234
5楼-- · 2019-07-21 22:55
可以
但如果你不是循环模, 数据长度要重新设置的
问题很大
6楼-- · 2019-07-22 02:04
edmund1234 发表于 2019-4-5 16:31
可以
但如果你不是循环模, 数据长度要重新设置的

emmm,我是循环的。但也还需要改一下,可能要多禁能几个地方。很感谢您,

一周热门 更多>