a/d转换设置为ch0、ch1、ch2、ch3连续转换模式,dma通道1配置给a/d转换器。每次转换结束后,a/d转换器会发出中断并引发dma请求。同时a/d转换器会提供pia(外设间接地址)给dma控制器以便和起始地址偏移量寄存器装配dpsram地址,确定相应缓冲区的地址位置。由于每个a/d通道的外设地址是不同的,因此在dpsram里每个a/d通道都有自己独立的缓冲区。形象的说:a/d转换的结果被不断丢给(scatter)dma控制器,dma控制器根据寄存器间接寻址机制,把相应a/d通道的数据收集(gather)在dpsram里各个a/d通道独立的缓冲区里。显而易见,这种方式提高了a/d转换的dma传输效率。cpu可以很方便的利用简单的寻址方式直接利用这些数据。 dma缓冲区间接地址的拼装过程根据外设的特点,这个模式可以双向工作,因此dma控制器需要作相应的配置以支持外设读或写操作。外设提供地址序列,用于访问dpsram里的数据。允许分散/集中(scatter/gather)寻址机制。比如:可以利用这个特点把收到的a/d数据投放到多个缓冲区里,归类来自不同通道的数据,大大减轻了cpu负担。外设间接寻址方式时,dma缓冲区间接地址的拼装过程。低位地址来自于外设,称为外设间接地址(pia),当外设中断产生dma请求后会把pia提供给dma地址生成逻辑,外设会使用几个最低有效位作为寻址空间(不同外设占用的位数不同),运算的时候对于超过外设空间的位全部填“0”;另一方面,dma地址寄存器会提供一个固定的基地址作为高位地址,用户在选择缓冲区基址(base address)地址偏移量的时候要注意,保证地址里有若干个(≥pia的位数)最低有效位为“0”。这些为“0”的最低有效位是为pia留出来的。最后,高位填“0”后的外设间接地址和dma起始地址寄存器进行“或”逻辑,这样就合成了有效的指向dma缓冲ram的地址。