由于使用了PSoC Create,因此PSoC63的DMA配置可以通过这个软件的组件进行预配置,文中以ADC采样触发DMA存储为例说明一下配置的各项
目标:ADC每次采样两个通道的值(ADC的配置不在此赘述),并在EOS触发一次DMA数据拷贝,采样3次之后DMA模块触发中断
配置说明:
1.将ADC的EOS接到DMA的tr_in,并将interrupt接到isr
2.DMA的配置如下
对配置的个别重要参数做简单说明
由于我们是ADC一次触发两个通道,且每个通道是2字节,并且3次采样之后触发一次DMA中断
因此一次ADC采样触发一次X loop,当达到Y loop的Number之后就触发了DMA中断
ADC结果数据寄存器的大小是word,即4字节,而存放数据结果缓存的数据类型大小为uint16,2字节。
其中X loop transfer的几个参数:
Number of data elements to transfer ——每次ADC转换完成需要搬运的数据个数,这里有ADC的两个通道结果需要搬运,因此是2,注意,这里不是2字节,而是2个数据
Source increment every cycle by——一个cycle是一个数据,每次两个,并且是两个通道的,因此需要加1,这里1表示一个数据的大小,并不是1个字节,半字节或字
Destination increment every cycle by——两个通道需要搬到各自的位置,且连续的地址,因此需要增加1个数据的空间,同样,这里1表示一个数据的大小,并不是1个字节,半字节或字
Y loop transfer的几个参数:
Number of X-loops to execute——执行X loop的个数,因为要采样3字,因此此处填入3,这样ADC在触发3次采样完成之后就会触发中断了
Source increment every cycle by——每次x loop执行完源地址是否增加,本例因为都是从ADC的结果数据寄存器取数据,所以不用增加
Destination increment every cycle by——目标地址增加的数据个数大小,因为是两个通道因此需要增加2个
注意:Number of data elements to transfer 和 Number of X-loops to execute 的最大值均只能配置为256,因此如果 descriptor 只有一个,本例中只能实现最大256次采样数据的搬运