1、 2009 Microchip Technology Inc. DS70215B_CN 第 38-1 页 直接存储器访问 (DMA ) (第 III 部分) 38 第 38 章 直接存储器访问 (DMA)( 第 III 部分) 目录 本章包括下列主题: 38.1 简介38-2 38.2 DMA 寄存器 . 38-3 38.3 DMA 框图. 38-12 38.4 DMA 数据传输 38-13 38.5 DMA 设置. 38-15 38.6 DMA 工作模式 38-21 38.7 启动 DMA 传输. 38-46 38.8 DMA 通道仲裁和溢出. 38-48 38.9 调试支持. 38-49
2、38.10 数据写冲突. 38-50 38.11 节能模式下的操作 38-51 38.12 寄存器映射. 38-52 38.13 相关应用笔记 . 38-54 38.14 版本历史. 38-55dsPIC33F 系列参考手册 DS70215B_CN 第 38-2 页 2009 Microchip Technology Inc. 38.1 简介 直接存储器访问 (Direct Memory Access , DMA ) 控制器是 Microchip 的高性能 16 位数字信号 控制器 (Digital Signal Controller ,DSC ) 系列中很重要的子系统。 通过该子系统, 无需
3、 CPU 协 助即可在 CPU 及其外设之间方便地传输数据。 dsPIC33F DMA 控制器针对高性能实时嵌入式应 用进行了优化,这些应用要求优先考虑确定性和系统响应延时。 DMA 控制器在外设数据寄存器和数据空间 SRAM 之间传输数据。dsPIC33F DMA 子系统使用双 端口 SRAM 存储器 (DPSRAM )和寄存器结构,这使 DMA 可以通过自己独立的地址和数据总 线进行操作,而不会影响 CPU 操作。这种架构无需进行周期挪用,在周期挪用情况下,当有优 先级更高的 DMA 传输请求时会使 CPU 暂停。 CPU 和 DMA 控制器都可以读写数据空间中的地 址, 而不会造成干扰
4、(例如 CPU 暂停) , 这可以获得最大的实时性能。 或者说, CPU 处理不会 影响存储器与外设之间的 DMA 操作和数据传输 。 例如 , 执行运行时自编程 (Run-Time Self-Programming ,RTSP ) 操作时, 在 RTSP 完成之前,CPU 不会执行任何指令。 但这种情况 不会影响存储器和外设之间的数据传输。 图 38-1 : DMA 控制器 DMA 控制器支持 8 个独立通道。每个通道都可以配置为向选定外设发送数据或从选定外设接收 数据。 DMA 控制器支持的外设包括: 增强型控制器局域网 (Enhanced Controller Area Network
5、, ECAN )技术 数据转换器接口 (Data Converter Interface , DCI ) 10 位 /12 位模数转换器 (Analog-to-Digital Converter , ADC ) 串行外设接口 (Serial Peripheral Interface , SPI ) 通用异步收发器 (Universal Asynchronous Receiver Transmitter , UART ) 输入捕捉 输出比较 数模转换器 (Digital-to-Analog Converter , DAC ) 并行主端口 (Parallel Master Port , PMP )
6、 此外, DMA 传输可以通过定时器和外部中断进行触发。 每个 DMA 通道都是单向的。 要对某个外设进行读和写操作, 必须分配两个 DMA 通道。 如果有多 个通道接收到数据传输请求 , 则基于通道编号的简单固定优先级机制会指定哪个通道完成传输 , 哪个或哪些通道保持等待状态。 每个 DMA 通道会传送最多可包含 1024 个数据元素的数据块, 之 后向 CPU 发出中断,指示数据块已可进行处理。 DMA CPU DPSRAM 外设 2009 Microchip Technology Inc. DS70215B_CN 第 38-3 页 第 38 章 直接存储器访问 (DMA)( 第 III
7、部分) 直接存 储器访 问 (DMA ) (第 III 部分 ) 38 DMA 控制器具有以下功能: 8 个 DMA 通道 带后递增的寄存器间接寻址模式 不带后递增的寄存器间接寻址模式 外设间接寻址模式 (外设生成目标地址) 在传输完一半或整个数据块后发出中断给 CPU 字节或字传输 固定优先级通道仲裁 手动 (软件)或自动 (外设 DMA 请求)启动传输 单数据块或自动重复数据块传输模式 “乒乓” (Ping-Pong )模式 (每个数据块传输完成后,在两个 DPSRAM 起始地址之间进 行自动切换) 每个通道的 DMA 请求可以从任何支持的中断源选择 调试支持功能 38.2 DMA 寄存器
8、 每个 DMA 通道都具有一组共 6 个状态和控制寄存器。 DMAxCON :DMA 通道 x 控制寄存器 该寄存器用于配置相应的 DMA 通道 : 使能 / 禁止通道, 指定数据传输大小、 方向和数据块中 断方法,以及选择 DMA 通道寻址模式、工作模式和空数据写模式。 DMAxREQ :DMA 通道 x IRQ 选择寄存器 该寄存器用于通过为 DMA 通道分配外设 IRQ ,将 DMA 通道与支持 DMA 的特定外设关联。 DMAxSTA :DMA 通道 x DPSRAM 起始地址偏移寄存器 A 该寄存器用于指定主起始地址偏移, 该偏移相对于 要通过 DMA 通道 x 传输到 DPSRAM
9、 或从 DPSRAM 传输的数据块的 DMA DPSRAM 基址。读该寄存器将返回最新的 DPSRAM 传输 地址偏移的值。如果使能了通道 x (即通道处于工作状态) ,写入该寄存器可能导致不可预 测的行为,应该避免。 DMAxSTB :DMA 通道 x DPSRAM 起始地址偏移寄存器 B 该寄存器用于指定辅助起始地址偏移, 该偏移相对 于要通过 DMA 通道 x 传输到 DPSRAM 或 从 DPSRAM 传输的数据块的 DMA DPSRAM 基址。读该寄存器将返回最新的 DPSRAM 传 输地址偏移的值。如果使能了通道 x (即通道处于工作状态) ,写入该寄存器可能导致不可 预测的行为,
10、应该避免。 DMAxPAD :DMA 通道 x 外设地址寄存器 该读 / 写寄存器包含外设数据寄存器的静态地址。如果使能了相应的 DMA 通道 (即通道处 于工作状态) ,写入该寄存器可能导致不可预测的 行为,应该避免。 DMAxCNT :DMA 通道 x 传输计数寄存器 该寄存器包含传输计数。 DMAxCNT + 1 代表通道必须处理的 DMA 请求数, 处理完该数量的 请 求 之 后,数 据 块 传 输 才 视 为 完 成。即, DMAxCNT 值为 0 时 , 将传输一个数据元素 。 DMAxCNT 寄存器的值与传输数据大小 (DMAxCON 寄存器中的 SIZE 位) 无关。 如果使能
11、 了相应的 DMA 通道 (即通道处于工作状态) ,写入该寄存器可能导致不可预测的行为,应 该避免。dsPIC33F 系列参考手册 DS70215B_CN 第 38-4 页 2009 Microchip Technology Inc. 除了各个 DMA 通道的寄存器之外, DMA 控制器还有三个 DMA 状态寄存器。 DSADR :最近的 DMA DPSRAM 地址寄存器 该寄存器是 16 位只读状态寄 存器, 由所有 DMA 通道共用。 它捕捉最近一次 DPSRAM 访问 (读或写) 的地址。 它在复位时清零, 因此, 如果在任何 DMA 活动之前读取它, 它包含的值 为 0x0000 。任
12、意时候都可以访问该寄存器,但该寄存器主要用于协助调试。 DMACS0 :DMA 控制器状态寄存器 0 该寄存器是 16 位只读状态寄 存器, 包含 DPSRAM 和外设写冲突标志 (分别为 XWCOLx 和 PWCOLx ) 。更多详细信息,请参见第 38.10 节 “数据写冲突” 。 DMACS1 :DMA 控制器状态寄存器 1 该寄存器是 16 位只读状态寄 存器, 它指示哪个 DMA 通道最近处于工作状态, 并通过指示哪 个 DPSRAM 起始地址偏移寄存器 (DMAxSTA 或 DMAxSTB ) 被选定来提供每个 DMA 通道 的乒乓模式状态。 2009 Microchip Tech
13、nology Inc. DS70215B_CN 第 38-5 页 第 38 章 直接存储器访问 (DMA)( 第 III 部分) 直接存 储器访 问 (DMA ) (第 III 部分 ) 38寄存器 38-1 : DMAXCON :DMA 通道 X 控制寄存器 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 U-0 U-0 CHEN SIZE DIR HALF NULLW bit 15 bit 8 U-0 U-0 R/W-0 R/W-0 U-0 U-0 R/W-0 R/W-0 A M O D E MODE bit 7 bit 0 图注: R = 可读位 W = 可写位 U
14、= 未实现位,读为 0 -n = POR 时的值 1 = 置 10 = 清零 x = 未知 bit 15 CHEN : 通道使能位 1 = 使能通道 0 = 禁止通道 bit 14 SIZE : 数据传输大小位 1 = 字节 0 = 字 bit 13 DIR : 传输方向位 (源 / 目标总 线选择) 1 = 从 DPSRAM 地址读取,写入外设地址 0 = 从外设地址读取,写入 DPSRAM 地址 bit 12 HALF : 数据块传输中断选择位 1 = 当传送了一半数据时,发出中断 0 = 当传送了所有数据时,发出中断 bit 11 NULLW : 空数据外设写模式选择位 1 = 除将外设
15、地址中的数据写入 DPSRAM 外,还将空数据写入外设地址 (DIR 位也必须清零) 0 = 正常工作 bit 10-6 未实现:读为0 bit 5-4 AMODE :DMA 通道寻址模式选择位 11 = 保留 10 = 外设间接寻址模式 01 = 不带后递增的寄存器间接寻址模式 00 = 带后递增的寄存器间接寻址模式 bit 3-2 未实现:读为0 bit 1-0 MODE :DMA 通道工作模式选择位 11 = 使能单数据块乒乓模式 (与每个 DMA RAM 缓冲区之间传输一块数据) 10 = 使能连续数据块乒乓模式 01 = 禁止单数据块乒乓模式 00 = 禁止连续数据块乒乓模式dsPI
16、C33F 系列参考手册 DS70215B_CN 第 38-6 页 2009 Microchip Technology Inc.寄存器 38-2 : DMAXREQ :DMA 通道 X IRQ 选择寄存器 R/S-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 FORCE (1) bit 15 bit 8 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 IRQSEL bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未实现位,读为 0 -n = POR 时的值 1 = 置 10 = 清零 x = 未知 bit 15 F
17、ORCE :强制 DMA 传输位 (1) 1 = 强制进行单次 DMA 传输 (手动模式) 0 = 自动按照 DMA 请求启动 DMA 传输 bit 14-7 未实现:读为0 bit 6-0 IRQSEL :DMA 外设 IRQ 编号选择位 0000000 = INT0 外部中断 0 0000001 = IC1 输入捕捉 1 0000010 = OC1 输出比较 1 0000101 = IC2 输入捕捉 2 0000110 = OC2 输出比较 2 0000111 = TMR2 Timer2 0001000 = TMR3 Timer3 0001010 = SPI1 传输完成 0001011 =
18、 UART1RX UART1 接收器 0001100 = UART1TX UART1 发送器 0001101 = ADC1 ADC1 转换完成 0011110 = UART2RX UART2 接收器 0011111 = UART2TX UART2 发送器 0100001 = SPI2 传输完成 0100010 = ECAN1 接收数据就绪 0101101 = PMP PMP 主数据传输 0111100 = DCI 编解码器传输完成 1000110 = ECAN1 发送数据请求 1001110 = DAC1 DAC1 右数据输出 1001111 = DAC1 DAC1 左数据输出 注 1 :FO
19、RCE 位不能被用户清零。当强制的 DMA 传输完成时, FORCE 位由硬件清零。 2009 Microchip Technology Inc. DS70215B_CN 第 38-7 页 第 38 章 直接存储器访问 (DMA)( 第 III 部分) 直接存 储器访 问 (DMA ) (第 III 部分 ) 38寄存器 38-3 : DMAXSTA :DMA 通道 X DPSRAM 起始地址偏移寄存器 A R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 STA bit 15 bit 8 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
20、 R/W-0 R/W-0 R/W-0 STA bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未实现位,读为 0 -n = POR 时的值 1 = 置 10 = 清零 x = 未知 bit 15-0 STA :主 DPSRAM 起始地址偏移位 (源地址或目标地址) 寄存器 38-4 : DMAXSTB :DMA 通道 X DPSRAM 起始地址偏移寄存器 B R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 STB bit 15 bit 8 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
21、R/W-0 STB bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未实现位,读为 0 -n = POR 时的值 1 = 置 10 = 清零 x = 未知 bit 15-0 STB :辅助 DPSRAM 起始地址偏移位 (源地址或目标地址) 寄存器 38-5 : DMAXPAD :DMA 通道 X 外设地址寄存器 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PAD bit 15 bit 8 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PAD bit 7 bit 0 图
22、注: R = 可读位 W = 可写位 U = 未实现位,读为 0 -n = POR 时的值 1 = 置 10 = 清零 x = 未知 bit 15-0 PAD :外设地址寄存器位dsPIC33F 系列参考手册 DS70215B_CN 第 38-8 页 2009 Microchip Technology Inc.寄存器 38-6 : DMAXCNT :DMA 通道 X 传输计数寄存器 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 C N T bit 15 bit 8 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-
23、0 R/W-0 CNT bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未实现位,读为 0 -n = POR 时的值 1 = 置 10 = 清零 x = 未知 bit 15-10 保留 bit 9-0 CNT :DMA 传输计数寄存器位 寄存器 38-7 : DSADR :最近的 DMA DPSRAM 地址寄存器 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 DSADR bit 15 bit 8 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 DSADR bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未实现位,
24、读为 0 -n = POR 时的值 1 = 置 10 = 清零 x = 未知 bit 15-0 DSADR :DMA 最近访问的 DMA DPSRAM 地址位 2009 Microchip Technology Inc. DS70215B_CN 第 38-9 页 第 38 章 直接存储器访问 (DMA)( 第 III 部分) 直接存 储器访 问 (DMA ) (第 III 部分 ) 38寄存器 38-8 : DMACS0 :DMA 控制器状态寄存器 0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 PWCOL7 PWCOL6 PWCOL5 PWCOL4 PWCOL3 PWCO
25、L2 PWCOL1 PWCOL0 bit 15 bit 8 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 XWCOL7 XWCOL6 XWCOL5 XWCOL4 XWCOL3 XWCOL2 XWCOL1 XWCOL0 bit 7 bit 0 图注: R = 可读位 W = 可写位 U = 未实现位,读为 0 -n = POR 时的值 1 = 置 10 = 清零 x = 未知 bit 15 PWCOL7 : 通道 7 外设写冲 突标志位 1 = 检测到写冲突 0 = 未检测到写冲突 bit 14 PWCOL6 : 通道 6 外设写冲 突标志位 1 = 检测到写冲突 0 = 未检
26、测到写冲突 bit 13 PWCOL5 : 通道 5 外设写冲 突标志位 1 = 检测到写冲突 0 = 未检测到写冲突 bit 12 PWCOL4 : 通道 4 外设写冲 突标志位 1 = 检测到写冲突 0 = 未检测到写冲突 bit 11 PWCOL3 : 通道 3 外设写冲 突标志位 1 = 检测到写冲突 0 = 未检测到写冲突 bit 10 PWCOL2 : 通道 2 外设写冲 突标志位 1 = 检测到写冲突 0 = 未检测到写冲突 bit 9 PWCOL1 : 通道 1 外设写冲 突标志位 1 = 检测到写冲突 0 = 未检测到写冲突 bit 8 PWCOL0 : 通道 0 外设写冲
27、突标志位 1 = 检测到写冲突 0 = 未检测到写冲突 bit 7 XWCOL7 : 通道 7 DPSRAM 写冲突标志位 1 = 检测到写冲突 0 = 未检测到写冲突 bit 6 XWCOL6 : 通道 6 DPSRAM 写冲突标志位 1 = 检测到写冲突 0 = 未检测到写冲突 bit 5 XWCOL5 : 通道 5 DPSRAM 写冲突标志位 1 = 检测到写冲突 0 = 未检测到写冲突 bit 4 XWCOL4 : 通道 4 DPSRAM 写冲突标志位 1 = 检测到写冲突 0 = 未检测到写冲突 bit 3 XWCOL3 : 通道 3 DPSRAM 写冲突标志位 1 = 检测到写冲突
28、 0 = 未检测到写冲突dsPIC33F 系列参考手册 DS70215B_CN 第 38-10 页 2009 Microchip Technology Inc. bit 2 XWCOL2 : 通道 2 DPSRAM 写冲突标志位 1 = 检测到写冲突 0 = 未检测到写冲突 bit 1 XWCOL1 : 通道 1 DPSRAM 写冲突标志位 1 = 检测到写冲突 0 = 未检测到写冲突 bit 0 XWCOL0 : 通道 0 DPSRAM 写冲突标志位 1 = 检测到写冲突 0 = 未检测到写冲突 寄存器 38-8 : DMACS0 :DMA 控制器状态寄存器 0 (续) 2009 Micro
29、chip Technology Inc. DS70215B_CN 第 38-11 页 第 38 章 直接存储器访问 (DMA)( 第 III 部分) 直接存 储器访 问 (DMA ) (第 III 部分 ) 38寄存器 38-9 : DMACS1 :DMA 控制器状态寄存器 1 U-0 U-0 U-0 U-0 R-1 R-1 R-1 R-1 LSTCH bit 15 bit 8 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 PPST7 PPST6 PPST5 PPST4 PPST3 PPST2 PPST1 PPST0 bit 7 bit 0 图注: R = 可读位 W = 可
30、写位 U = 未实现位,读为 0 -n = POR 时的值 1 = 置 10 = 清零 x = 未知 bit 15-12 未实现:读为0 bit 11-8 LSTCH :上一次工作的 DMAC 通道位 1111 = 自系统复位以来没有发生 DMA 传输 1110-1000 = 保留 0111 = 上次数据传输是通过通道 7 进行的 0110 = 上次数据传输是通过通道 6 进行的 0101 = 上次数据传输是通过通道 5 进行的 0100 = 上次数据传输是通过通道 4 进行的 0011 = 上次数据传输是通过通道 3 进行的 0010 = 上次数据传输是通过通道 2 进行的 0001 = 上
31、次数据传输是通过通道 1 进行的 0000 = 上次数据 传输是通过通道 0 进行的 复位时设置为1111 。任意时候都可以访问该字段,但它主要用于协助调试。 bit 7 PPST7 : 通道 7 乒乓模式状态标志位 1 = 选择 DMA7STB 寄存器 0 = 选择 DMA7STA 寄存器 bit 6 PPST6 : 通道 6 乒乓模式状态标志位 1 = 选择 DMA6STB 寄存器 0 = 选择 DMA6STA 寄存器 bit 5 PPST5 : 通道 5 乒乓模式状态标志位 1 = 选择 DMA5STB 寄存器 0 = 选择 DMA5STA 寄存器 bit 4 PPST4 : 通道 4
32、乒乓模式状态标志位 1 = 选择 DMA4STB 寄存器 0 = 选择 DMA4STA 寄存器 bit 3 PPST3 : 通道 3 乒乓模式状态标志位 1 = 选择 DMA3STB 寄存器 0 = 选择 DMA3STA 寄存器 bit 2 PPST2 : 通道 2 乒乓模式状态标志位 1 = 选择 DMA2STB 寄存器 0 = 选择 DMA2STA 寄存器 bit 1 PPST1 : 通道 1 乒乓模式状态标志位 1 = 选择 DMA1STB 寄存器 0 = 选择 DMA1STA 寄存器 bit 0 PPST0 : 通道 0 乒乓模式状态标志位 1 = 选择 DMA0STB 寄存器 0 =
33、 选择 DMA0STA 寄存器 注: 该寄存器是只读的。dsPIC33F 系列参考手册 DS70215B_CN 第 38-12 页 2009 Microchip Technology Inc. 38.3 DMA 框图 图 38-2 的框图显示了如何将 DMA 集成到 dsPIC33F 内部架构中。 CPU 通过 X 总线与常规的 SRAM 通信。 它还通过相同的 X 总线与双端口 SRAM (DPSRAM ) 模块的端口 1 通信。CPU 通 过独立的外设 X 总线 (也位于 X 数据空间内)与外设通信。 DMA 通道通过专用的 DMA 总线与 DPSRAM 的端口 2 和每个 DMA 就绪外
34、设的 DMA 端口通信。 图 38-2 : DMA 控制器框图 不同于其他架构,dsPIC33F CPU 可以在每个 CPU 总线周期中进行读和写访问。 类似地,DMA 可以在每个总线周期通过其专用总线完成一个字节或一个字的传输。这也保证所有 DMA 传输都 不会被中断。即,一旦开始传输,则无论其他通道的活动如何,都将在同一周期内完成传输。 用户应用程序可以指定任意 DMA 就绪外设中断作为 DMA 请求, “DMA 请求”这个术语指针对 DMA 的中断请求 (IRQ ) 。当然,假设当某个 DMA 通道配置为将特定中断作为 DMA 请求进行 响应时,相应的 CPU 中断已被禁止,否则也会请求
35、产生 CPU 中断。 每个 DMA 通道也可以通过软件手动触发。 将 DMAxCON 寄存器中的 FORCE 位置 1 会启动手动 DMA 请求, 该请求与所有基于中断的 DMA 请求一样, 服从相同的仲裁规则 (见第 38.8 节“ DMA 通道仲裁和溢出” )。 CPU SRAM DPSRAM 外设 1 DMA 外设 非 DMA 端口 2 端口 1 外设 2 DMA 就绪 外设 3 DMA 就绪 就绪 DMA X 总线 CPU DMA CPU DMA CPU DMA 外设 间接地 址 DMA 控制 DMA 控制器 DMA 通道 CPU 外设 X 总线 至 DMA 和 中断控制器 模块的中断
36、 请求 SRAM X 总线 至 DMA 和中断 控制器模块的 中断请求 至 DMA 和中断 控制器模块的 中断请求 01234567 注: 为清晰起见,没有显示 CPU 和 DMA 地址总线。 2009 Microchip Technology Inc. DS70215B_CN 第 38-13 页 第 38 章 直接存储器访问 (DMA)( 第 III 部分) 直接存 储器访 问 (DMA ) (第 III 部分 ) 38 38.4 DMA 数据传输 图 38-3 给出了外设和双端口 SRAM 之间的数据传输的图示。 A. 在该示例中, DMA 通道 5 配置为使用 DMA 就绪外设 1 工作
37、。 B. 当数据准备好从外设传输时, 外设会发出 DMA 请求。DMA 请求与所有其他同时产生的请 求一起接受仲裁。 如果该通道的优先级最高, 则会在下一个周期完成传输。 否则,DMA 请 求保持等待状态,直到它的优先级变为最高。 C. DMA 通道对指定的外设地址执行读数据操作, 该外设地址由用户应用程序在工作通道内定 义。 D. DMA 通道将数据写入指定的 DPSRAM 地址。 该示例代表寄存器间接寻址模式, 在该模式下,DPSRAM 地址在 DMA 通道内通过 DMA 状态寄 存器 (DMAxSTA 或 DMAxSTB )指定。在外设间接寻址模式下, DPSRAM 地址将从外设而不 是
38、工作通道获得。第 38.6.6 节 “外设间接寻址模式”中介绍了关于该主题的更多信息。 整个 DMA 读和写传输操作在单个指令周期内无中断地完成。 在这整个过程中,DMA 请求一直锁 存在 DMA 通道中,直到数据传输完成。 DMA 通道会同时监视传输计数器寄存器 (DMA5CNT ) 。 当传输计数达到用户应用程序指定的限 制时,数据传输即视为完成,并发出 CPU 中断,提醒 CPU 处理新接收到的数据。 在数据传输周期中,DMA 控制器还会继续对待处理或后续的 DMA 请求进行仲裁, 以最大程度提 高吞吐量。dsPIC33F 系列参考手册 DS70215B_CN 第 38-14 页 200
39、9 Microchip Technology Inc. 图 38-3 : DMA 数据传输示例 CPU SRAM DPSRAM 外设 1 DMA 端口 2 端口 1 就绪 DMA 数据 空间总 线 CPU DMA DMA 控制 DMA 控制器 CPU 外设 数据空 间总线 SRAM X 总线 DMA 通道 5 CPU SRAM DPSRAM 外设 1 DMA 端口 2 端口 1 就绪 CPU DMA DMA 控制 DMA 控制器 SRAM X 总线 CPU SRAM DPSRAM 外设 1 DMA 端口 2 端口 1 就绪 CPU DMA DMA 控制 DMA 控制器 SRAM X 总线 DM
40、A 通道 5 CPU SRAM DPSRAM 外设 1 DMA 端口 2 端口 1 就绪 CPU DMA DMA 控制 DMA 控制器 SRAM X 总线 DMA 通道 5 将外设 1 配置为使用 DMA 通道 5 B A C D 外设有数据要传输到 DMA 通道 5 DMA 通道 5 从外设 1 读取数 据 DMA 通道 5 将数据写入 DPSRAM 数据 数据 数据 DMA 请求 DMA 通道 5 外 设地址 读数 据 数据 写 (DMA DS 总线 ) DPSRAM 地址 2009 Microchip Technology Inc. DS70215B_CN 第 38-15 页 第 38
41、章 直接存储器访问 (DMA)( 第 III 部分) 直接存 储器访 问 (DMA ) (第 III 部分 ) 38 38.5 DMA 设置 为了 DMA 数据传输能够正常进行,必须适当地配置 DMA 通道和外设: 必须将 DMA 通道与外设关联 (见 第 38.5.1 节“ DMA 通道与外设关联设置” ) 必须正确地配置外设 (见第 38.5.2 节 “外设配置设置” ) 必须初始化 DPSRAM 数据起始地址 (见第 38.5.3 节 “存储器地址初始化” ) 必须初始化 DMA 传输计数 (见第 38.5.4 节“ DMA 传输计数设置” ) 必须选择适当的寻址和工作模式 (见 第 3
42、8.6 节“ DMA 工作模式” ) 38.5.1 DMA 通道与 外设关 联设置 DMA 通道需要知道要对哪个外设目标地址进行读操作或写操作, 以及何时执行该操作。 该信息分 别在 DMA 通道 x 外设地址寄存器 (DMAxPAD)和 DMA 通道 x IRQ 选择寄存器 (DMAxREQ ) 中配置。 表 38-1 显示了要将特定外设与给定 DMA 通道关联,应向这些寄存器中写入哪些值。 表 38-1 : DMA 通道与外设关联 外设与 DMA 关联 DMAxREQ 寄存器 IRQSEL 位 要从外设读取的 DMAxPAD 寄存器值 要向外设写入的 DMAxPAD 寄存器值 INT0 外
43、部中断 0 0000000 IC1 输入捕捉 1 0000001 0x0140 (IC1BUF ) IC2 输入捕捉 2 0000101 0x0144 (IC2BUF ) OC1 输出比较 1 数据 0000010 0x0182 (OC1R ) OC1 输出比较 1 辅助数据 0000010 0x0180 (OC1RS ) OC2 输出比较 2 数据 0000110 0x0188 (OC2R ) OC2 输出比较 2 辅助数据 0000110 0x0186 (OC2RS ) TMR2 Timer2 0000111 TMR3 Timer3 0001000 SPI1 传输完成 0001010 0x
44、0248 (SPI1BUF ) 0x0248 (SPI1BUF ) SPI2 传输完成 0100001 0x0268 (SPI2BUF ) 0x0268 (SPI2BUF ) UART1RX UART1 接收器 0001011 0x0226 (U1RXREG ) UART1TXUART1 发送器 0001100 0x0224 (U1TXREG ) UART2RX UART2 接收器 0011110 0x0236 (U2RXREG ) UART2TX UART2 发送器 0011111 0x0234 (U2TXREG ) ECAN1 接收数据就绪 0100010 0x0440 (C1RXD )
45、ECAN1 发送数据请求 1000110 0x0442 (C1TXD ) DCI 编解码器传输完成 0111100 0x0290 (RXBUF0 ) 0x0298 (TXBUF0 ) ADC1 ADC1 转换完成 0001101 0x0300 (ADC1BUF0 ) PMP PMP 主数据传输 0101101 0x0608 (PMDIN1 ) 0x0608 (PMDIN1 ) DAC1 DAC1 右数据传输 1001110 0x03F6 (DAC1RDAT ) DAC1 DAC1 左数据传输 1001111 0x03F8 (DAC1LDAT )dsPIC33F 系列参考手册 DS70215B_
46、CN 第 38-16 页 2009 Microchip Technology Inc. 如果两个 DMA 通道选择同一外设作为它们的 DMA 请求源,则两个通道会同时接收到 DMA 请 求。但优先级最高的通道先执行它的传输,另一个通道保持等待状态。在使用单个 DMA 请求来 向外设和从外设 (例如 SPI )传送数据时,也会发生同样的情况。需要使用两个 DMA 通道。一 个分配为用于外设读操作, 另一个分配为用于外设数据写操作。 两个通道使用相同的 DMA 请求。 如果将 DMAxPAD 寄存器初始化为表 38-1 中未列出的值, 则对该外设地址的 DMA 通道写操作会 被忽略。对该地址执行
47、DMA 通道读操作将返回0。 38.5.2 外设 配置设 置 DMA 设置过程中的第二步是为 DMA 操作正确配置 DMA 就绪外设。 表 38-2 列出了对于 DMA 就 绪外设的配置要求。 表 38-2 : DMA 就绪外设的配置注意事项DMA 就绪外设 配置注意事项 ECAN 模块 ECAN 缓冲区在 DMA RAM 中分配。 DMA RAM 中的 CAN 缓冲区和 FIFO 的总大小由用户指定,必须通过 ECAN FIFO 控制 (C1FCTRL )寄存器中 的 DMA 缓冲区大小位 DMABS 定义。例 38-9 给出了示例代码。 数据转换器接口 (DCI ) DCI 必须配置为对于
48、每个缓冲的数据字产生中断,方法是 将 DCI 控制 2 (DCICON2 ) 寄存器中的缓冲区长度控制位 (BLEN )设置为00 。 必须将同一 DCI 中断用作两个 DMA 通道的请求, 以支持接收和发送数据。 如果 DCI 模块作为主器件工作且仅接收数据,则必须使用第二个 DMA 通 道来发送无效发送数据。例 38-11 给出了示例代码。 10 位 /12 位模数转换器 (ADC ) 在外设间接寻址模式下将 ADC 与 DMA 配合使用时,必须正确设置 ADCx 控制 2 (ADCxCON2 )寄存器中 的 DMA 地址递增速率位 (SMPI ) 和 ADCx 控制 4 (ADCxCON
49、4 )寄存器中的每个模拟输入的 DMA 缓冲单 元数位 (DMABL ) 。此外,还必须正确设置 ADCx 控制 1 (ADxCON1 )寄存器中的 DMA 缓冲区构建模式位 (ADDMABM ) ,以进 行 ADC 地址生成。详细信息,请参见第 38.6.6.1 节“ ADC 对于 DMA 地 址生成的支持” 。例 38-5 和例 38-7 给出了示例代码。 串行外设接口 (SPI)如 果 SPI 模块作为主器件工作且仅接收数据,则 必须分配并使用第二个 DMA 通道来发送无效发送数据。或者,可以在空数据写模式下使用单个 DMA 通道。详细信息,请参见第 38.6.11 节 “空数据写模式” 。例 38-12 给出了示例代码。 UART