亿加合和智能车制作

标题: 野火K60 DMA传输GPIO数据实验 请教 [打印本页]

作者: GordonFreeman    时间: 2013-1-21 21:00
标题: 野火K60 DMA传输GPIO数据实验 请教
以下一行语句为野火库中对DMA进行初始化的语句:
DMA_PORTx2BUFF_Init (DMA_CH4,(void *)&PTD_BYTE0_IN,BUFF,PTA27,DMA_BYTE1,3,DMA_rising);

库中有句话设这样说的:
"PTA27上升沿触发DMA传输,源地址为PTD_BYTE0_IN"
而PTD_BYTE0_IN应该是指PTD0~PTD7的7个GPIO输入电平,这句话让我脑袋开花了。

那么,DMA源地址该如何进行设置,触发源PTA27与源地址是什么关系???

作者: I'M_Not_The    时间: 2013-1-21 21:23

作者: 野火    时间: 2013-1-21 23:07
触发源 是告诉DMA模块什么时候才传输数据
源地址 是告诉DMA模块从哪里传输数据
目的地址是告诉DMA模块要把数据搬到哪里

PTA27 每个上升沿的时候,DMA就会传输一次数据
PTD_BYTE0_IN是指PTD0~PTD7的8个GPIO输入电平,即把这8个数据搬到BUFF缓冲区(每搬一次,目的地址都会自动加的)

作者: GordonFreeman    时间: 2013-1-22 09:55
哦,事实上数据是从PTD0~PTD7这8个IO口输进去的,我以为读的是PTA27
作者: 1174544639    时间: 2013-1-28 08:15
本帖最后由 1174544639 于 2013-1-28 08:46 编辑
野火 发表于 2013-1-21 23:07
触发源 是告诉DMA模块什么时候才传输数据
源地址 是告诉DMA模块从哪里传输数据
目的地址是告诉DMA模块要把 ...

问一下火哥,DMA可以直接传输一个IO口上的模拟量吗?也就是说它具有类似AD转换的功能吗?我是做平衡的,ccd只有一个输出口,但都是模拟量,如果直接将这个输出口接在一个IO口上作为源地址,这样我读到的值是不是已经二值化了?

作者: 1174544639    时间: 2013-1-28 09:28
野火 发表于 2013-1-21 23:07
触发源 是告诉DMA模块什么时候才传输数据
源地址 是告诉DMA模块从哪里传输数据
目的地址是告诉DMA模块要把 ...

火哥,还有:我的板子是100脚的,用的你们的库,写在编译时DMA_PORTx2BUFF_Init这个函数出现了这个问题:CW10.2控制台提示:
n = (u8)(((u32)SADDR - ((u32)(&PTA_BASE_PTR->PDIRByte.Byte0))) & 0x3f);         //              
>'PDIRByte' is not a member of class 'struct GPIO_MemMap'

这是什么原因啊

作者: 541236895    时间: 2013-4-1 18:37
就是DMA只传8位是吗?而且只是每个口的0—7引脚?
作者: GordonFreeman    时间: 2013-4-1 19:38
对的
作者: ,水货    时间: 2013-7-16 21:06
火哥,问个问题。
使用DMA后。DMA与外部设备进行数据传送,那么CPU还可以继续执行其他的指令对吗?
如果可以继续执行其他的指令,为什么例程里还要去一直等待图像采集完?
while(img_flag != IMG_FINISH)           //等待图像采集完毕
    {
        if(img_flag == IMG_FAIL)            //假如图像采集错误,则重新开始采集
        {
            img_flag = IMG_START;                        //开始采集图像
            PORTA_ISFR = ~0;                                        //写1清中断标志位(必须的,不然回导致一开中断就马上触发中断)
            enable_irq(87);                                 //允许PTA的中断
        }
    }
作者: 桑地亚哥    时间: 2015-3-23 17:42
请问DMA如何对引脚的初始化,对数据引脚的定义
作者: 你好生活    时间: 2016-1-17 15:52
1174544639 发表于 2013-1-28 09:28
火哥,还有:我的板子是100脚的,用的你们的库,写在编译时DMA_PORTx2BUFF_Init这个函数出现了这个问题: ...

你好,你这个问题解决了吗?

作者: 不一样    时间: 2016-4-20 20:40
野火 发表于 2013-1-21 23:07
触发源 是告诉DMA模块什么时候才传输数据
源地址 是告诉DMA模块从哪里传输数据
目的地址是告诉DMA模块要 ...


这里面PTD_BYTE0_IN这个地址在哪里定义的





欢迎光临 亿加合和智能车制作 (http://www.znczz.com/) Powered by Discuz! X3.2