GPIO直接存储器存取

⚠️
大家好. .谢谢光临论坛。令人兴奋的消息!我们现在在移动的过程中,我们的新论坛平台,将提供更好的功能和包含在主对话框的网站。所有文章和帐户已经被迁移。我们现在只接受交通新论坛,请发布任何新的线程//www.xmece.com/support。我们将修复bug /优化搜索和标签在接下来的日子里。
8帖子/ 0
最后发表
techteh
离线
最后看到:4个月1周前
加入:2018-07-16吸
GPIO直接存储器存取

嗨,对话框中,
的内部DMA DA1468x支持来自GPIO输入?如果是,如何初始化DMA的触发器?我能做什么如果我想三角DMA timer0时钟和GPIO的来源- > P4_DATA_REG吗?
提前谢谢你。

设备:
PM_Dialog
离线
最后看到:7小时50分钟前
工作人员
加入:2018-02-08 11:03
嗨techteh,

嗨techteh,

使用DMA传输的数据量大时迅速不使用CPU,例如通过I2C或SPI传输数据时,而不是当想读GPIO寄存器。您正在使用的寄存器是1个字节,那么事务将会花很长时间,因为DMA的初始化进度太慢了。DMA的同时,请注意,初始化需要太长时间的交易数据。所以,我强烈建议您阅读的直接不使用DMA寄存器,因为这项技术更快的使用DMA。

谢谢,PM_Dialog

techteh
离线
最后看到:4个月1周前
加入:2018-07-16吸
你好,

你好,
谢谢你的回复,
是的我想要一个大的数据量迅速转不使用CPU。这个大数据经过GPIO。我有一个2 k字节数组在内存中,我想读GPIO口4值并保存这些字节2 k字节数组,每1微。这意味着dest_address数组在内存和src_address GPIO - > P4_DATA_REG。所以,我的问题是dma_req_mux呢?我已经建立了一个1 MHz时钟信号。有什么方法可以转移GPIO价值与DMA数组在内存中,这个时钟信号触发?

谢谢。

MT_dialog
离线
最后看到:3个月3周前
工作人员
加入:2015-06-08 34
嗨techteh,

嗨techteh,

你提出的是可能你可以执行内存到内存的DMA过渡语,所以您可以使用hw从记忆转移到所需的注册
GPIO。但是没有从对话框在这样一个用例实现,也不支持这种functionallity SDK,那么你将不得不使用直接驱动的低水平。类似的代码应该做的工作:

gpio_bitbang。channel_number = HW_DMA_CHANNEL_1;
gpio_bitbang。bus_width = HW_DMA_BW_HALFWORD;
gpio_bitbang。irq_enable = HW_DMA_IRQ_STATE_ENABLED;
gpio_bitbang。irq_nr_of_trans = sizeof(数组);
gpio_bitbang。dreq_mode = HW_DMA_DREQ_START;
gpio_bitbang。a_inc = HW_DMA_AINC_TRUE;
gpio_bitbang。b_inc = HW_DMA_BINC_FALSE;
gpio_bitbang。圆= HW_DMA_MODE_NORMAL;
gpio_bitbang。dma_prio = HW_DMA_PRIO_6;
gpio_bitbang。dma_idle = HW_DMA_IDLE_INTERRUPTING_MODE;
gpio_bitbang。dma_init = HW_DMA_INIT_AX_BX_AY_BY;
gpio_bitbang。dma_req_mux = HW_DMA_TRIG_NONE;
gpio_bitbang。src_address = (uint32_t)数组;
gpio_bitbang.dest_address = 0 x50003002;
gpio_bitbang。长度= sizeof(数组);
gpio_bitbang。回调= fn;

hw_dma_channel_initialization (&gpio_bitbang);
hw_dma_channel_enable (gpio_bitbang。channel_number HW_DMA_STATE_ENABLED);

也直接存储器存取使用系统时钟的时钟你不能使用外部时钟DMA为了执行交易,如果这就是你的意思。

由于MT_dialog

techteh
离线
最后看到:4个月1周前
加入:2018-07-16吸
你好,

你好,
我很感谢你的回复和你提供的样例代码。
我没有一个外部时钟。我想使用内部定时器0三角DMA在每一个时钟信号1微秒。要做到这一点呢?如果不是,你说“HW_DMA_TRIG_NONE”意味着16兆赫在我的情况下的系统时钟。有另一种方式来减少这个时钟值1 MHz DMA触发?16兆赫太高对于我的外部设备连接的。

谢谢。

MT_dialog
离线
最后看到:3个月3周前
工作人员
加入:2015-06-08 34
嗨techteh,

嗨techteh,

HW_DMA_TRIG_NONE意味着一旦你设置DMA_ON DMA本身将开始运行与DMA时钟从内存到内存访问不能以类似的方式被触发,外围设备可以被触发。现在如前所述DMA运行与系统时钟,这并不意味着你会看到GPIOs切换16兆赫频率、DMA需要超过一个周期为了做一个事务。除此之外通过减少AHB时钟或APB时钟为了得到频率,你希望你可以得到你想频率,但它不是一个良好的实践的所有模块运行在较低的时钟。另外在某些时候核心还需要AHB总线,并将阻止DMA访问总线。什么可能是一个解决方案是生成错误触发1 mhz从另一个外围(并保持源和目标相同的)为了使设备在每个触发执行一个事务,但是你会有一个虚拟外设提供运行时间。

由于MT_dialog

techteh
离线
最后看到:4个月1周前
加入:2018-07-16吸
你好,

你好,
我做了你的建议,
我使用SPI外围的DMA触发,现在我的问题解决了。

谢谢。

PM_Dialog
离线
最后看到:7小时50分钟前
工作人员
加入:2018-02-08 11:03
嗨techteh,

嗨techteh,

很高兴你找到你的问题。

谢谢,PM_Dialog