用定时器实现EDMA3的数据定时传输(或搬移)
时间:10-02
整理:3721RD
点击:
用定时器实现EDMA3的数据定时传输(或搬移)
开始之前,要感谢在我前一个帖子给我回复的人,是他们帮助我解决了这个问题!
下面开始进入正题,如标题,这次是要实现用定时器实现EDMA3对数据的定时搬移,这种方法可用于将来在使用AD采集数据的时候,可以定时对采集的数据通过EDMA3传输到相应位置,然后对其进行数据处理,处理完成后,同样可以用这种方法将数据传送至上位机。
现阶段为了简单起见,可将某一个变量的值复制到另一个变量,归根究底也是实现了数据的搬移。这种方法是可以应用到前面所说的情况中的。
1、多说无益,直接上代码,第一步当然还是对外设使能初始化
这里选择通道控制器CC0以及传输控制器TC0
2、然后进行DSP中断初始化,中断初始化基本都一样,故不用多说
3、接着进行定时器中断初始化
这里选择非捕获模式下的TIM12, 如选择TMR_INT_TMR12_NON_CAPT_MODE,查看技术手册
,可以知道TIM12具有事件输出功能,同时选择基地址为Timer0,同时对EDMA3的传输进行初始化
4、对EDMA3初始化
注意这里利用一维传输,
将源变量StringScr={1,2,3,4,5,5,4,3,2,1,6,7,8,9,10,10,9,8,7,6}转移到目的变量StringDst,还包括申请 EDMA3 通道、写参数 RAM、使能EDMA3传输等另外”paramSet.opt=0x906000u;“主要是设置传输为一维传输;注意chNum=10, tccNum=10即是设置在CC0和TC0的情况下,通过TIM12定时器进行触发
5、下面对定时器其进行初始化
这里选择与TIM12定时器的相关设置,定时时间由“#define TMR_PERIOD_32 (5 * 24 * 1000 * 1000)”,可以知道定时时间为5s。这里设置定时器只进行一次定时,由“TMR_ENABLE_ONCE”体现。
到这里基本设置已经完成,上面的各个函数的配置顺序可交换,然后将上述的函数放到main()中即可实现
下面为调试后的结果:
程序运行前,变量StringScr和StringDst的值
程序运行后,StringDst的值
可以看到已经完成了对数据的搬移。
开始之前,要感谢在我前一个帖子给我回复的人,是他们帮助我解决了这个问题!
下面开始进入正题,如标题,这次是要实现用定时器实现EDMA3对数据的定时搬移,这种方法可用于将来在使用AD采集数据的时候,可以定时对采集的数据通过EDMA3传输到相应位置,然后对其进行数据处理,处理完成后,同样可以用这种方法将数据传送至上位机。
现阶段为了简单起见,可将某一个变量的值复制到另一个变量,归根究底也是实现了数据的搬移。这种方法是可以应用到前面所说的情况中的。
1、多说无益,直接上代码,第一步当然还是对外设使能初始化
这里选择通道控制器CC0以及传输控制器TC0
2、然后进行DSP中断初始化,中断初始化基本都一样,故不用多说
3、接着进行定时器中断初始化
这里选择非捕获模式下的TIM12, 如选择TMR_INT_TMR12_NON_CAPT_MODE,查看技术手册
,可以知道TIM12具有事件输出功能,同时选择基地址为Timer0,同时对EDMA3的传输进行初始化
4、对EDMA3初始化
注意这里利用一维传输,
将源变量StringScr={1,2,3,4,5,5,4,3,2,1,6,7,8,9,10,10,9,8,7,6}转移到目的变量StringDst,还包括申请 EDMA3 通道、写参数 RAM、使能EDMA3传输等另外”paramSet.opt=0x906000u;“主要是设置传输为一维传输;注意chNum=10, tccNum=10即是设置在CC0和TC0的情况下,通过TIM12定时器进行触发
5、下面对定时器其进行初始化
这里选择与TIM12定时器的相关设置,定时时间由“#define TMR_PERIOD_32 (5 * 24 * 1000 * 1000)”,可以知道定时时间为5s。这里设置定时器只进行一次定时,由“TMR_ENABLE_ONCE”体现。
到这里基本设置已经完成,上面的各个函数的配置顺序可交换,然后将上述的函数放到main()中即可实现
下面为调试后的结果:
程序运行前,变量StringScr和StringDst的值
程序运行后,StringDst的值
可以看到已经完成了对数据的搬移。
好东西,学习下
定时器连续工作状态只会产生一次DMA事件,这是为什么?