dsPIC30F系列参考手册 2.1 简介 dsPIC30FCPU模块采用16位(数据)改良的哈佛架构,并带有增强型指令集包含对DSP的有 力支持。CPU拥有24位指令字,指令字带有长度可变的操作码字段。程序计数器(PC)为24 位宽,可以寻址高达4M×24位的用户程序存储器空间。单周期指令预取机制用来帮助维持吞 吐量并提供可预测的执行。除了改变程序流的指令、双字移动(MOV.D)指令和表指令以外,所 有指令都在单个周期内执行。使用DO和REPEAT指令支持无开销的程序循环结构,这两个指令 在任何时候都可被中断。 dsPIC30F器件在编程模型中有16个16位工作寄存器。每个工作寄存器都可以充当数据、地址 或地址偏移寄存器。第16个工作寄存器(W15)作为软件堆栈的指针工作,用于中断和调用。 dsPIC30F指令集有两类指令:MCLU类指令和DSP类指令。这两类指令无缝地集成到架构中并 从同一个执行单元执行。指令集包括很多寻址模式,指令的设置可使C编译器的效率达到最优。 数据空间可以作为32K字或64K字节寻址,并被分成两块,称为X和Y数据存储器。每个存储 器块有各自独立的地址发生单元(Address Generation Unit,.AGU)。MCU类指令只通过X存 储器AGU进行操作,可将整个存储器映射空间作为一个线性数据空间访问。某些DSP指令通过 X和Y的AGU进行操作以支持双操作数读操作,这将数据地址空间分成两个部分。X和Y数据 空间的边界视具体器件而定。 可以选择将数据空间存储器映射空间的高32KB映射到由8位程序空间可视性页(Program Space Visibility Page,PSVPAG)寄存器定义的任何16K程序字边界内的程序空间内。程序空间到数 据空间的映射功能让任何指令都能象访问数据空间一样访问程序空间。另外,在带有外部总线的 器件上可将RAM连接到程序存储器总线用来扩展内部数据RAM。 X和Y寻址空间都支持无开销循环缓冲器(模寻址)。模寻址省去了DSP算法的软件边界检查 开销。此外,XAGU的循环寻址可以与任何MCU类指令一起使用。XAGU还支持位反转寻址, 大幅简化了基2(Radix-2)FFT算法对输入或输出数据的重新排序。 CPU支持固有(无操作数)、相对、立即数、存储器直接、寄存器直接和寄存器间接寻址模式。 每条指令根据其功能要求,与一个预定义的寻址模式组相关。每条指令最多支持6种寻址模式。 对于大多数指令,在每个指令周期dsPI1C30F能执行一次数据(或程序数据)存储器读操作、一 次工作寄存器(数据)读操作、一次数据存储器写操作和一次程序(指令)存储器读操作。因此 可以支持3个操作数的指令,使A+B=C操作能在单周期内执行。 DSP引擎具备一个高速17位×17位乘法器、一个40位ALU、两个40位饱和累加器和一个40 位双向桶形移位寄存器。该桶形移位寄存器在单个周期内至多可将一个40位的值右移15位或左 移16位。DSP指令可以无缝地与所有其他指令一起操作,其设计可实现最佳的实时性能。MAC 指令和其他相关指令可以同时从存储器中取出两个数据操作数并将两个W寄存器相乘。这要求数 据空间对于这些指令拆分为两块,但对所有其他指令保持线性。这是通过为每个地址空间指定某 些工作寄存器,以透明和灵活的方式实现的。 dsPIC30F具有向量异常(Exception)机制,带有多达8个不可屏蔽陷阱源和54个中断源。可 以为每个中断源分配7个优先级之一。 图2-1中所示为CPU的框图。 DS70049CCN第2-2页 2005 Microchip Technology Inc
dsPIC30F 系列参考手册 DS70049C_CN 第 2-2 页 © 2005 Microchip Technology Inc. 2.1 简介 dsPIC30F CPU 模块采用 16 位(数据)改良的哈佛架构,并带有增强型指令集包含对 DSP 的有 力支持。 CPU 拥有 24 位指令字,指令字带有长度可变的操作码字段。程序计数器 (PC)为 24 位宽,可以寻址高达 4M × 24 位的用户程序存储器空间。单周期指令预取机制用来帮助维持吞 吐量并提供可预测的执行。除了改变程序流的指令、双字移动(MOV.D)指令和表指令以外,所 有指令都在单个周期内执行。使用 DO 和 REPEAT 指令支持无开销的程序循环结构,这两个指令 在任何时候都可被中断。 dsPIC30F 器件在编程模型中有 16 个 16 位工作寄存器。每个工作寄存器都可以充当数据、地址 或地址偏移寄存器。第 16 个工作寄存器 (W15)作为软件堆栈的指针工作,用于中断和调用。 dsPIC30F 指令集有两类指令:MCU 类指令和 DSP 类指令。这两类指令无缝地集成到架构中并 从同一个执行单元执行。指令集包括很多寻址模式,指令的设置可使 C 编译器的效率达到最优。 数据空间可以作为 32K 字或 64K 字节寻址,并被分成两块,称为 X 和 Y 数据存储器。每个存储 器块有各自独立的地址发生单元 (Address Generation Unit, AGU)。 MCU 类指令只通过 X 存 储器 AGU 进行操作,可将整个存储器映射空间作为一个线性数据空间访问。某些 DSP 指令通过 X 和 Y 的 AGU 进行操作以支持双操作数读操作,这将数据地址空间分成两个部分。 X 和 Y 数据 空间的边界视具体器件而定。 可以选择将数据空间存储器映射空间的高32 KB映射到由8位程序空间可视性页(Program Space Visibility Page, PSVPAG)寄存器定义的任何 16K 程序字边界内的程序空间内。程序空间到数 据空间的映射功能让任何指令都能象访问数据空间一样访问程序空间。另外,在带有外部总线的 器件上可将 RAM 连接到程序存储器总线用来扩展内部数据 RAM。 X 和 Y 寻址空间都支持无开销循环缓冲器 (模寻址)。模寻址省去了 DSP 算法的软件边界检查 开销。此外,X AGU 的循环寻址可以与任何 MCU 类指令一起使用。 X AGU 还支持位反转寻址, 大幅简化了基 2 (Radix-2) FFT 算法对输入或输出数据的重新排序。 CPU 支持固有 (无操作数)、相对、立即数、存储器直接、寄存器直接和寄存器间接寻址模式。 每条指令根据其功能要求,与一个预定义的寻址模式组相关。每条指令最多支持 6 种寻址模式。 对于大多数指令,在每个指令周期 dsPIC30F 能执行一次数据 (或程序数据)存储器读操作、一 次工作寄存器(数据)读操作、一次数据存储器写操作和一次程序(指令)存储器读操作。因此 可以支持 3 个操作数的指令,使 A + B = C 操作能在单周期内执行。 DSP 引擎具备一个高速 17 位× 17 位乘法器、一个 40 位 ALU、两个 40 位饱和累加器和一个 40 位双向桶形移位寄存器。该桶形移位寄存器在单个周期内至多可将一个 40 位的值右移 15 位或左 移 16 位。 DSP 指令可以无缝地与所有其他指令一起操作,其设计可实现最佳的实时性能。 MAC 指令和其他相关指令可以同时从存储器中取出两个数据操作数并将两个W寄存器相乘。这要求数 据空间对于这些指令拆分为两块,但对所有其他指令保持线性。这是通过为每个地址空间指定某 些工作寄存器,以透明和灵活的方式实现的。 dsPIC30F 具有向量异常 (Exception)机制,带有多达 8 个不可屏蔽陷阱源和 54 个中断源。可 以为每个中断源分配 7 个优先级之一。 图 2-1 中所示为 CPU 的框图
第2章CPU 图2-1: dsPIC30FCPU内核框图 X地址总线 Y数据总线 X数据总线 76 a 中断 数据锁存器 数据锁存器 控制器 Y数据 X数据 24 控制模块 6 RAM RAM (4KB) (4KB) 16 地址 地址 16 24 锁存器 锁存器 16 2 16 24 PCU PCH PCL X RAGU 程序计数器 16 X WAGU 堆栈 循环 地址锁存器 控制 逻班电路 逻辑电路 程序存储器 (144KB) AGU 是 数据EEPROM (4KB) 16/EA路研关 数据锁存器 16 76 76 16 16×16 W寄存器阵列 指令 译码和 控制 控制信号 DSP 支持 输入到不同模块 上电延时 引繁 定时器 OSC1/CLKI 时序 振荡器 发生器 = 起振定时器 ☒ POR/BOR 16位ALU 复位 MCLR 即魏 16 16 ☒ 低压 VDD,Vss 检测 AVDD,AVss CAN1, 10位或 输入 输出 12CTM CAN2 12位ADC 比 模块 模块 VO端口 定时器 DCI SPI1 UART1, SPI2 UART2 2005 Microchip Technology Inc. DS70049CCN第2-3页
© 2005 Microchip Technology Inc. DS70049C_CN 第 2-3 页 第 2 章 CPU CPU 2 图 2-1: dsPIC30F CPU 内核框图 上电延时 定时器 振荡器 起振定时器 POR/BOR 复位 看门狗 定时器 指令 译码和 控制 OSC1/CLKI MCLR VDD,VSS 低压 检测 UART1, CAN2 时序 发生器 CAN1, 16 PCH PCL 16 中 g程序计数器 16 位 ALU 24 24 24 24 X 数据总线 IR I 2C™ DCI PCU 10 位或 定时器 输入 输出 16 16 16 16 × 16 W 寄存器阵列 除法 e 支持 e 引擎 DSP ROM 锁存器 16 Y 数据总线 EA多路开关 X RAGU X WAGU Y AGU AVDD,AVSS SPI2 UART2 16 16 16 16 16 16 16 16 16 8 中断 控制器 ePSV 和表 e 数据访问 g 堆栈 中 循环 数据锁存器 数据锁存器 Y 数据 g(4 KB) RAM X 数据 g(4 KB) RAM 中地址 锁存器 中地址 锁存器 控制信号 输入到不同模块 16 SPI1, 地址锁存器 程序存储器 (144 KB) 数据锁存器 数据 EEPROM (4 KB) I/O 端口 16 16 16 X 地址总线 Y 地址总线 16 立即数数据 12 位 ADC f 控制模块 逻辑电路 逻辑电路 g 控制 控制 捕捉 模块 比较 模块
dsPIC:30F系列参考手册 2.2 编程棋型 图2-2中所示为dsP1C30F的编程模型。编程模型中的所有寄存器都是存储器映射的,并且可以 由指令直接控制。表2-1中提供了对各个寄存器的描述。 表2-1: 编程模型的寄存器描述 寄存器名称 描述 W0到W15 工作寄存器阵列 ACCA.ACCB 40位DSP累加器 PC 23位程序计数器 SR ALU和DSP引擎状态寄存器 SPLIM 堆栈指针极限值寄存器 TBLPAG 表存储器页地址寄存器 PSVPAG 程序空间可视性页地址寄存器 RCOUNT REPEAT循环计数寄存器 DCOUNT DO循环计数寄存器 DOSTART DO循环起始地址寄存器 DOEND DO循环结束地址寄存器 CORCON 包含DSP引擎和DO循环控制位 除了编程模型中包含的寄存器之外,dsPIC30F还包含模寻址、位反转寻址和中断的控制寄存器。 这些寄存器将在本文档随后的章节中介绍。 与编程模型有关的所有寄存器都是存储器映射的,如在第2-38页上的表2-8中所示。 DS70049C_CN第2-4页 2005 Microchip Technology Inc
dsPIC30F 系列参考手册 DS70049C_CN 第 2-4 页 © 2005 Microchip Technology Inc. 2.2 编程模型 图 2-2 中所示为 dsPIC30F 的编程模型。编程模型中的所有寄存器都是存储器映射的,并且可以 由指令直接控制。表 2-1 中提供了对各个寄存器的描述。 除了编程模型中包含的寄存器之外,dsPIC30F 还包含模寻址、位反转寻址和中断的控制寄存器。 这些寄存器将在本文档随后的章节中介绍。 与编程模型有关的所有寄存器都是存储器映射的,如在第 2-38 页上的表 2-8 中所示。 表 2-1: 编程模型的寄存器描述 寄存器名称 描述 W0 到 W15 工作寄存器阵列 ACCA, ACCB 40 位 DSP 累加器 PC 23 位程序计数器 SR ALU 和 DSP 引擎状态寄存器 SPLIM 堆栈指针极限值寄存器 TBLPAG 表存储器页地址寄存器 PSVPAG 程序空间可视性页地址寄存器 RCOUNT REPEAT 循环计数寄存器 DCOUNT DO 循环计数寄存器 DOSTART DO 循环起始地址寄存器 DOEND DO 循环结束地址寄存器 CORCON 包含 DSP 引擎和 DO 循环控制位
第2章CPU 图2-2: 编程棋型 15 0 WO (WREG) W1 W2 W3 W4 DSP操作数 W5 寄存器 W6 W7 工作/地址 2 W8 寄存器 DSP地址 W9 寄存器 W10 W11 W12 PUSH.S和POP.S影子寄存器 是 W13 帧指针W14 堆栈指针W150 SPLIM 堆栈指针极限 39 31 内 DSP ACCA ACCAU ACCAH ACCAL 累加器 ACCB ACCBU ACCBH ACCBL 22 0 程序计数器 0 TBLPAG 数据表页地址 7 0 PSVPAG 程序空间可视性 页地址 15 0 RCOUNT REPEAT循环计数器 15 0 DCOUNT DO循环计数器 22 0 DOSTART 0 DO循环起始地址 22 DOEND 0 DO循环结束地址 SRH- SRL OA OB SA SB OAB SAB DA DC IPL<2:0> RA N ov SZ 状态寄存器 15 0 CORCON 内核控制寄存器 注: DCOUNT、DOSTART和DOEND有一级影子寄存器(未显示),用于嵌套的DO循环。 2005 Microchip Technology Inc. DS70049CCN第2-5页
© 2005 Microchip Technology Inc. DS70049C_CN 第 2-5 页 第 2 章 CPU CPU 2 图 2-2: 编程模型 N OV SZ C TBLPAG 22 0 7 0 15 0 程序计数器 数据表页地址 状态寄存器 工作 / 地址 寄存器 DSP 操作数 寄存器 W0(WREG) W1 W2 W3 W4 W5 W6 W7 W8 W9 W10 W11 W12 W13 帧指针 /W14 堆栈指针 /W15 DSP 地址 寄存器 39 31 0 DSP 累加器 PSVPAG 7 0 程序空间可视性 RA 0 OA OB SA SB RCOUNT 15 0 REPEAT 循环计数器 DCOUNT 15 0 DO 循环计数器 DOSTART 22 0 DO 循环起始地址 DOEND DO 循环结束地址 IPL<2:0> SPLIM 堆栈指针极限 15 22 0 SRL PUSH.S 和 POP.S 影子寄存器 0 0 OAB SAB 页地址 DA DC CORCON 15 0 内核控制寄存器 ACCAU ACCAH ACCAL ACCBU ACCBH ACCBL ACCA ACCB SRH 0 0 注: DCOUNT、 DOSTART 和 DOEND 有一级影子寄存器 (未显示),用于嵌套的 DO 循环
dsPIC30F系列参考手册 2.2.1 工作寄存器阵列 16个工作寄存器(W)可以作为数据、地址或地址偏移寄存器。W寄存器的功能由访问它的指 令的寻址模式决定。 dsPIC30F指令集可被分成两种指令类型:寄存器和文件寄存器指令。寄存器指令可以把每个W 寄存器用作数据值或地址偏移值。例如: MOV WO,Wl move contents of Wo to W1 MOV WO,[W1]move wo to address contained in Wl ADD WO,[W4],W5;add contents of wo to contents pointed to by W4.Place result in W5. 2.2.1.1 W0和文件寄存器指令 W0是一个特殊的工作寄存器,因为它是可在文件寄存器指令中使用的惟一的工作寄存器。文件 寄存器指令对在指令操作码和W0中包含的指定的存储器地址进行操作。在文件寄存器指令中, W1到W15不可被指定为目标寄存器。 文件寄存器指令对只有一个W寄存器的现有PIC®器件提供向后兼容性。在汇编器语法中使用标 号“WREG”来表示数据寄存器指令中的WO。例如: MOV WREG,0x0100 move contents of wo to address 0x0100 ADD 0x0100,WREG add wo to address 0x0100,store in WO 注: 关于寻址模式和指令语法的完整说明,请参见dsPIC3 OF Programmer's Reference Manual (DS70030). 2.2.1.2W寄存器存储器映射 因为W寄存器是存储器映射的,所以在文件寄存器指令中访问W寄存器是可能的,示例如下: MOV 0x0004,W10 equivalent to MOV W2,W10 其中0x0004是W2存储器中的地址。 此外,执行一条试图将W寄存器用作地址指针和操作数目标的指令也是可能的。例如: MOV W1,[w2++] 其中: w1=0x1234 W2=0x0004 ;[W2]addresses W2 在上面的示例中,W2的内容是0x0004。因为W2被用作地址指针,它指向存储器中的单元 0x0004。W2也映射到存储器中的该地址空间。虽然这是不太可能发生的事件,但不到运行时不 可能检测到。dsPIC30F确保数据写操作将占据主导,使上面示例中W2的结果为0x1234。 2.2.1.3 W寄存器和字节模式指令 把W寄存器阵列当作目标寄存器的字节指令只影响目标寄存器的最低有效字节。因为工作寄存器 是存储器映射的,所以可以通过对数据存储器空间进行字节宽度的访问来控制工作寄存器的最低 最高有效字节。 2.2.2 影子寄存器 如图2-2中所示,在编程模型中的许多寄存器都有相关的影子寄存器。影子寄存器都不能直接访 问。有两种类型的影子寄存器:一类被PUSH.S和POP.S指令使用,另一类被D0指令使用。 DS70049C_CN第2-6页 2005 Microchip Technology Inc
dsPIC30F 系列参考手册 DS70049C_CN 第 2-6 页 © 2005 Microchip Technology Inc. 2.2.1 工作寄存器阵列 16 个工作寄存器 (W)可以作为数据、地址或地址偏移寄存器。 W 寄存器的功能由访问它的指 令的寻址模式决定。 dsPIC30F 指令集可被分成两种指令类型:寄存器和文件寄存器指令。寄存器指令可以把每个 W 寄存器用作数据值或地址偏移值。例如: MOV W0,W1 ; move contents of W0 to W1 MOV W0,[W1] ; move W0 to address contained in W1 ADD W0,[W4],W5; add contents of W0 to contents pointed ; to by W4. Place result in W5. 2.2.1.1 W0 和文件寄存器指令 W0 是一个特殊的工作寄存器,因为它是可在文件寄存器指令中使用的惟一的工作寄存器。 文件 寄存器指令对在指令操作码和 W0 中包含的指定的存储器地址进行操作。在文件寄存器指令中, W1 到 W15 不可被指定为目标寄存器。 文件寄存器指令对只有一个 W 寄存器的现有 PIC® 器件提供向后兼容性。在汇编器语法中使用标 号 “WREG”来表示数据寄存器指令中的 W0。例如: MOV WREG,0x0100 ; move contents of W0 to address 0x0100 ADD 0x0100,WREG ; add W0 to address 0x0100, store in W0 2.2.1.2 W 寄存器存储器映射 因为 W 寄存器是存储器映射的,所以在文件寄存器指令中访问 W 寄存器是可能的,示例如下: MOV 0x0004, W10 ; equivalent to MOV W2, W10 其中 0x0004 是 W2 存储器中的地址。 此外,执行一条试图将 W 寄存器用作地址指针和操作数目标的指令也是可能的。例如: MOV W1,[W2++] 其中: W1 = 0x1234 W2 = 0x0004 ;[W2] addresses W2 在上面的示例中, W2 的内容是 0x0004。因为 W2 被用作地址指针,它指向存储器中的单元 0x0004。 W2也映射到存储器中的该地址空间。虽然这是不太可能发生的事件,但不到运行时不 可能检测到。 dsPIC30F 确保数据写操作将占据主导,使上面示例中 W2 的结果为 0x1234。 2.2.1.3 W 寄存器和字节模式指令 把W寄存器阵列当作目标寄存器的字节指令只影响目标寄存器的最低有效字节。因为工作寄存器 是存储器映射的,所以可以通过对数据存储器空间进行字节宽度的访问来控制工作寄存器的最低 和最高有效字节。 2.2.2 影子寄存器 如图 2-2 中所示,在编程模型中的许多寄存器都有相关的影子寄存器。影子寄存器都不能直接访 问。有两种类型的影子寄存器:一类被 PUSH.S 和 POP.S 指令使用,另一类被 DO 指令使用。 注: 关于寻址模式和指令语法的完整说明,请参见 dsPIC30F Programmer's Reference Manual (DS70030)