dsPIC30F/33F程序员参考手册 1.5 指令集符号 在第3.2节和第6.5节中的汇总表以及第5.4节的指令描述中使用了表1-2中所示的符号。 表1-2: 指令汇总表和说明中使用的符号 符号 说明 ) 可选字段或操作 [text] 由文本寻址的地址 (text) 文本内容 #text 由文本定义的立即数 a∈[b,c,d a一定在集合[b,c,d中 <n:m> 寄存器位段 (label:) 可选标号名 Acc 累加器A或累加器B AWB 累加器回写 bit4 4位宽位位置(对于字节模式为0:7,对于字模式为0:15) Expr 绝对地址、标号或表达式(由链接器解析) f 文件寄存器地址 lit1 1位立即数(0:1) lit4 4位立即数(0:15) lit5 5位立即数(0:31) lit8 8位立即数(0:255) lit10 10位立即数(对于字节模式为0:255,对于字模式为0:1023) lit14 14位立即数(0:16383) lit16 16位立即数(0:65535) lit23 23位立即数(0:8388607) Slit4 有符号4位立即数(-87) Slit6 有符号6位立即数(-3231)(范围限制为-16:16) Slit10 有符号10位立即数(-512:511) Slit16 有符号16位立即数(-32768:32767) TOS 栈顶 Wb 基本工作寄存器 Wd 目的工作寄存器(直接和间接寻址) Wm,Wn 除法工作寄存器对(被除数,除数) Wm*Wm 乘法工作寄存器对(相同的源寄存器) WmWn 乘法工作寄存器对(不同的源寄存器) Wn 既是源工作寄存器又是目的工作寄存器(直接寻址) Wnd 目的工作寄存器(直接寻址) Wns 源工作寄存器(直接寻址) WREG 默认工作寄存器(分配给WO) Ws 源工作寄存器(直接和间接寻址) Wx 源寻址模式和用于X数据总线预取操作的工作寄存器 Wxd 用于义数据总线预取操作的目的工作寄存器 y 源寻址模式和用于Y数据总线预取操作的工作寄存器 Wyd 用于Y数据总线预取操作的目的工作寄存器 注 每个符号的范围取决于指令。对于特定指令的范围,可参阅第5章“指令描述”。 DS70157BCN第1-4页 初稿 2006 Microchip Technology Inc
dsPIC30F/33F 程序员参考手册 DS70157B_CN 第 1-4 页 初稿 2006 Microchip Technology Inc. 1.5 指令集符号 在第 3.2 节和第 6.5 节中的汇总表以及第 5.4 节的指令描述中使用了表 1-2 中所示的符号。 表 1-2: 指令汇总表和说明中使用的符号 符号 说明 { } 可选字段或操作 [text] 由文本寻址的地址 (text) 文本内容 #text 由文本定义的立即数 a ∈ [b, c, d] a 一定在集合 [b, c, d] 中 <n:m> 寄存器位段 {label:} 可选标号名 Acc 累加器 A 或累加器 B AWB 累加器回写 bit4 4 位宽位位置 ( 对于字节模式为 0:7,对于字模式为 0:15) Expr 绝对地址、标号或表达式 ( 由链接器解析 ) f 文件寄存器地址 lit1 1 位立即数 (0:1) lit4 4 位立即数 (0:15) lit5 5 位立即数 (0:31) lit8 8 位立即数 (0:255) lit10 10 位立即数 ( 对于字节模式为 0:255,对于字模式为 0:1023) lit14 14 位立即数 (0:16383) lit16 16 位立即数 (0:65535) lit23 23 位立即数 (0:8388607) Slit4 有符号 4 位立即数 (-8:7) Slit6 有符号 6 位立即数 (-32:31) ( 范围限制为 -16:16) Slit10 有符号 10 位立即数 (-512:511) Slit16 有符号 16 位立即数 (-32768:32767) TOS 栈顶 Wb 基本工作寄存器 Wd 目的工作寄存器 ( 直接和间接寻址 ) Wm, Wn 除法工作寄存器对 ( 被除数,除数 ) Wm*Wm 乘法工作寄存器对 ( 相同的源寄存器 ) Wm*Wn 乘法工作寄存器对 ( 不同的源寄存器 ) Wn 既是源工作寄存器又是目的工作寄存器 ( 直接寻址 ) Wnd 目的工作寄存器 ( 直接寻址 ) Wns 源工作寄存器 ( 直接寻址 ) WREG 默认工作寄存器 ( 分配给 W0) Ws 源工作寄存器 ( 直接和间接寻址 ) Wx 源寻址模式和用于 X 数据总线预取操作的工作寄存器 Wxd 用于 X 数据总线预取操作的目的工作寄存器 Wy 源寻址模式和用于 Y 数据总线预取操作的工作寄存器 Wyd 用于 Y 数据总线预取操作的目的工作寄存器 注: 每个符号的范围取决于指令。对于特定指令的范围,可参阅第 5 章 “指令描述
第1章简介 1.6 相关技术文档 Microchip及其他合作伙伴提供了其他文档来帮助用户使用dsPIC:30F/dsPIC33FDSC进行开发。 下面列出了最常用的文档,当然还有其他文档可供参考。请访问Microchip 网站 (w.microchip.com)查阅最新发布的技术文档。 1.6.1 Microchip技术文档 Microchip目前提供了以下dsPIC30F/dsPI1C33F文档.其中许多文档都提供了具体的应用信息,给 出了dsPIC30F/dsPIC33FDSC的使用、编程和设计实例。 1.dsPIC30F系列参考手册(DS70046D_CN) 《sPIC30F系列参考手册》介绍了有关dsPIC:30F器件架构、外设以及系统集成特性的信 息。该文档对器件操作进行了详细介绍,并给出了许多代码示例。这个手册中所包含信息是 对dsP1C33F数据手册中信息的补充。 2.dsPIC30F系a列概述(DS70043FCN)和dsPIC33F产品概述(DS70155CCN) 这两个文档提供了对这两个系列器件的汇总介绍,包括器件引脚配置、存储器容量以及外 设。 3.dsP1C30F数据手册(DS70083)和dsP1C33F数据手册(DS70165) 数据手册包括诸如器件引脚配置及封装详细信息、电气特性和存储器映射在内的器件特定信 息。请查询Microchip网站(ww.microchip.com)获取已发布的器件数据手册列表。 1.6.2 第三方技术文档 我们遍布全球的第三方合作伙伴也提供了一些文档。Microchip并没有验证这些文档的技术准确 性,然而,这些文档有助于理解Microchip dsPIC30F或dsPIC33F器件的操作。可访问Microchip 网站(www.microchip.com)以查阅与dsPIC30F和dsPIC33F系列有关的第三方文档。 2006 Microchip Technology Inc. 初稿 DS70157BCN第1-5页
2006 Microchip Technology Inc. 初稿 DS70157B_CN 第 1-5 页 第 1 章 简介 简介 1 1.6 相关技术文档 Microchip及其他合作伙伴提供了其他文档来帮助用户使用 dsPIC30F/dsPIC33F DSC 进行开发。 下面列出了最常用的文档,当然还有其他文档可供参考。请访问 Microchip 网站 (www.microchip.com)查阅最新发布的技术文档。 1.6.1 Microchip 技术文档 Microchip目前提供了以下dsPIC30F/dsPIC33F文档。其中许多文档都提供了具体的应用信息,给 出了 dsPIC30F/dsPIC33F DSC 的使用、编程和设计实例。 1. dsPIC30F 系列参考手册 (DS70046D_CN) 《dsPIC30F 系列参考手册》介绍了有关 dsPIC30F 器件架构、外设以及系统集成特性的信 息。该文档对器件操作进行了详细介绍,并给出了许多代码示例。这个手册中所包含信息是 对 dsPIC33F 数据手册中信息的补充。 2. dsPIC30F 系列概述 (DS70043F_CN)和 dsPIC33F 产品概述 (DS70155C_CN) 这两个文档提供了对这两个系列器件的汇总介绍,包括器件引脚配置、存储器容量以及外 设 。 3. dsPIC30F 数据手册 (DS70083)和 dsPIC33F 数据手册 (DS70165) 数据手册包括诸如器件引脚配置及封装详细信息、电气特性和存储器映射在内的器件特定信 息。请查询 Microchip 网站 (www.microchip.com)获取已发布的器件数据手册列表。 1.6.2 第三方技术文档 我们遍布全球的第三方合作伙伴也提供了一些文档。 Microchip 并没有验证这些文档的技术准确 性,然而,这些文档有助于理解 Microchip dsPIC30F 或 dsPIC33F 器件的操作。可访问 Microchip 网站 (www.microchip.com)以查阅与 dsPIC30F 和 dsPIC33F 系列有关的第三方文档
MICROCHIP 第2章编程模型 目录 本章对dsPIC30F和dsPIC33F器件进行概括介绍,主要包括以下内容: 2 2.1dsP列C30F/33f概述.2-2 2.2 编程模型. .2-3 2006 Microchip Technology Inc. 初稿 DS70157B_CN第2-1页
2006 Microchip Technology Inc. 初稿 DS70157B_CN 第 2-1 页 编程模型 2 第 2 章 编程模型 目录 本章对 dsPIC30F 和 dsPIC33F 器件进行概括介绍,主要包括以下内容: 2.1 dsPIC30F/33F 概述........................................................................................................ 2-2 2.2 编程模型......................................................................................................................... 2-3
dsPIC30F/33F程序员参考手册 2.1 dsPIC30F/33F概述 dsPIC30F和dsPIC33F器件采用改进的哈佛架构内核,数据线宽度为16位,采用增强指令集 包含对DSP的支持。内核采用具有可变长度操作码字段的24位指令字。程序计数器(PC)为 23位宽,可对最大为4MX24位的用户程序存储空间进行寻址。单周期指令预取机制用来帮助维 持吞吐量并提供可预测的执行。大多数指令都在单个周期内执行。使用D0和REPEAT指令支持 无开销的程序循环结构,这两个指令在任何时候都可被中断。 dsP1C30F和dsP1C33F拥有16个16位工作寄存器。每个工作寄存器可作为数据、地址或偏移 量寄存器。第16个工作寄存器(W15)用作中断和调用时的软件堆栈指针。 dsPIC30F和dsPIC33F架构具有相同的指令集。包括两类指令:MCU类指令和DSP类指令 该架构将这两类指令进行了无缝集成,所有指令的执行均由同一个执行单元来实现。该指令集包 括多种寻址模式,且设计为确保最佳的C编译器效率。 数据空间可寻址为32K字或64KB,被分成两块,称为X和Y数据存储空间。每个存储块有各自 独立的地址发生单元(Address Generation Unit,.AGU)。MCU类指令只通过X数据空间AGU 进行操作,可将整个存储器映射作为一个线性数据空间访问。那些具有两个源操作数的DSP类 指令通过X和Y的AGU进行操作,这将数据地址空间分成两个部分,X和Y数据空间的边界视 具体器件而定。 可以选择以16K程序字为边界(由8位程序空间可视性页(Program Space Visibility Page, PSVPAG)寄存器定义)将数据存储空间的高32KB映射到程序存储空间。程序存储空间到数据 存储空间的映射功能让任何指令都能象访问数据存储空间一样访问程序存储空间,这对于数据常 数的存放是非常有用的。 X和Y地址空间都支持无开销循环缓冲区(模寻址)。模寻址省去了DSP算法的软件边界检查 开销。此外,XAGU的循环寻址可以与任何MCU类指令一起使用。XAGU还支持位反转寻 址,大幅简化了基为2的FFT算法对输入或输出数据的重新排序。 该款器件内核支持固有(无操作数)寻址、相对寻址、立即数寻址、存储器直接寻址、寄存器直 接寻址、寄存器间接寻址以及寄存器偏移量寻址模式。根据功能性要求的不同,每一条指令都与 预先定义的寻址模式组相关联。任何一条指令可支持多达7种寻址模式。 对于大多数指令,dsPIC30F33F可在每一指令周期内执行数据(或程序数据)存储器读、工作 寄存器(数据)读、数据存储器写以及程序(指令)存储器读操作。因此可支持3操作数指令, 即允许在单个周期内执行A+B=C操作。 DSP引擎具备一个高速17位×17位乘法器、一个40位ALU、两个40位饱和累加器和一个40位 双向桶形移位寄存器。该桶形移位寄存器在单个周期内至多可将一个40位的值右移16位或左 移16位。DSP类指令可以无缝地与所有其他指令一起操作,设计为可实现最佳的实时性能。 MAC类指令和其他相关指令可以同时从存储器中取出两个数据操作数并将两个工作寄存器相乘。 这要求数据空间对于这些指令拆分为两块,但对所有其他指令保持线性。这是通过为每个地址空 间指定某些工作寄存器,以透明和灵活的方式实现的。 dsPIC:30F具有向量异常机制,可支持最多8个不可屏蔽陷阱源和最多54个中断源。dsPIC33F 具有相似的向量异常机制,不同的是可支持最多118个中新源。两个系列都可为每个中断源分 配7个优先级之一。 DS70157BCN第2-2页 初稿 2006 Microchip Technology Inc
dsPIC30F/33F 程序员参考手册 DS70157B_CN 第 2-2 页 初稿 2006 Microchip Technology Inc. 2.1 dsPIC30F/33F 概述 dsPIC30F 和 dsPIC33F 器件采用改进的哈佛架构内核,数据线宽度为 16 位,采用增强指令集, 包含对 DSP 的支持。内核采用具有可变长度操作码字段的 24 位指令字。程序计数器 (PC)为 23 位宽,可对最大为 4M x 24 位的用户程序存储空间进行寻址。单周期指令预取机制用来帮助维 持吞吐量并提供可预测的执行。大多数指令都在单个周期内执行。使用 DO 和 REPEAT 指令支持 无开销的程序循环结构,这两个指令在任何时候都可被中断。 dsPIC30F 和 dsPIC33F 拥有 16 个 16 位工作寄存器。每个工作寄存器可作为数据、地址或偏移 量寄存器。第 16 个工作寄存器 (W15)用作中断和调用时的软件堆栈指针。 dsPIC30F 和 dsPIC33F 架构具有相同的指令集。包括两类指令:MCU 类指令和 DSP 类指令。 该架构将这两类指令进行了无缝集成,所有指令的执行均由同一个执行单元来实现。该指令集包 括多种寻址模式,且设计为确保最佳的 C 编译器效率。 数据空间可寻址为 32K 字或 64KB,被分成两块,称为 X 和 Y 数据存储空间。每个存储块有各自 独立的地址发生单元(Address Generation Unit,AGU)。MCU 类指令只通过 X 数据空间 AGU 进行操作,可将整个存储器映射作为一个线性数据空间访问。那些具有两个源操作数的 DSP 类 指令通过 X 和 Y 的 AGU 进行操作,这将数据地址空间分成两个部分,X 和 Y 数据空间的边界视 具体器件而定。 可以选择以 16K 程序字为边界 (由 8 位程序空间可视性页 (Program Space Visibility Page, PSVPAG)寄存器定义)将数据存储空间的高 32KB 映射到程序存储空间。程序存储空间到数据 存储空间的映射功能让任何指令都能象访问数据存储空间一样访问程序存储空间,这对于数据常 数的存放是非常有用的。 X 和 Y 地址空间都支持无开销循环缓冲区 (模寻址)。模寻址省去了 DSP 算法的软件边界检查 开销。此外, X AGU 的循环寻址可以与任何 MCU 类指令一起使用。 X AGU 还支持位反转寻 址,大幅简化了基为 2 的 FFT 算法对输入或输出数据的重新排序。 该款器件内核支持固有(无操作数)寻址、相对寻址、立即数寻址、存储器直接寻址、寄存器直 接寻址、寄存器间接寻址以及寄存器偏移量寻址模式。根据功能性要求的不同,每一条指令都与 预先定义的寻址模式组相关联。任何一条指令可支持多达 7 种寻址模式。 对于大多数指令, dsPIC30F/33F 可在每一指令周期内执行数据 (或程序数据)存储器读、工作 寄存器(数据)读、数据存储器写以及程序(指令)存储器读操作。因此可支持 3 操作数指令 , 即允许在单个周期内执行 A + B = C 操作 。 DSP 引擎具备一个高速17位×17位乘法器、一个40 位ALU、两个40 位饱和累加器和一个40位 双向桶形移位寄存器。该桶形移位寄存器在单个周期内至多可将一个 40 位的值右移 16 位或左 移 16 位。 DSP 类指令可以无缝地与所有其他指令一起操作,设计为可实现最佳的实时性能。 MAC 类指令和其他相关指令可以同时从存储器中取出两个数据操作数并将两个工作寄存器相乘。 这要求数据空间对于这些指令拆分为两块,但对所有其他指令保持线性。这是通过为每个地址空 间指定某些工作寄存器,以透明和 灵活的方式实现的。 dsPIC30F 具有向量异常机制,可支持最多 8 个不可屏蔽陷阱源和最多 54 个中断源。 dsPIC33F 具有相似的向量异常机制,不同的是可支持最多 118 个中断源。两个系列都可为每个中断源分 配 7 个优先级之一
第2章编程模型 2.2 编程棋型 图2-1给出了dsP1C30F和dsPIC33F的编程模型。编程模型中的所有寄存器皆为存储器映射, 并能直接被指令集操作。表2-1提供了每一个寄存器的说明。 表2-1: 编程模型寄存器说明 寄存器 说明 ACCA.ACCB 40位DSP累加器 CORCON CPU内核配置寄存器 DCOUNT DO循环计数寄存器 DOEND DO循环结束地址寄存器 2 DOSTART DO循环起始地址寄存器 PC 23位程序计数器 PSVPAG 程序空间可视性页地址寄存器 RCOUNT 重复循环计数寄存器 SPLIM 堆栈指针限制值寄存器 SR ALU和DSP引擎STATUS寄存器 TBLPAG 表存储器页地址寄存器 W0-W15 工作寄存器阵列 2.2.1 工作寄存器阵列 16个工作(W)寄存器可作为数据、地址或偏移量寄存器。W寄存器的功能由访问它的指令所 决定。 字节指令以工作寄存器阵列为操作对象,将只对目标寄存器的低位字节(LSB)产生影响。由于 工作寄存器是存储映射的,因此可以字节宽度的数据存储空间访问方式对低位字节和高位字节进 行操作。 2.2.2 默认工作寄存器(WREG) 指令集中的指令可分为两类:工作寄存器指令和文件寄存器指令。工作寄存器指令使用工作寄存 器阵列作为数据值或作为指向某一存储单元的地址。相反,文件寄存器指令对包含在指令操作码 中的特定存储地址进行操作。 文件寄存器指令也使用工作寄存器,但并不指定指令中所使用的工作寄存器,而是采用缺省的工 作寄存器(WREG)。工作寄存器WO指定为WREG。用户无法对WREG的指定进行编程设定。 2.2.3 软件堆栈帧指针 帧是堆栈中用户定义的存储区域。函数通常使用帧来存放局部变量。W14被指定作为LNK(分 配堆栈帧)和ULNK(释放堆栈帧)指令中使用的堆栈帧指针。然而在未使用堆栈帧指针、LNK 和ULNK指令时,W14可被指令当作普通的工作寄存器使用。有关帧指针的详细内容,可参阅第 4.7.3节“软件堆栈帧指针”。 2006 Microchip Technology Inc. 初稿 DS70157BCN第2-3页
2006 Microchip Technology Inc. 初稿 DS70157B_CN 第 2-3 页 第 2 章 编程模型 编程模型 2 2.2 编程模型 图 2-1 给出了 dsPIC30F 和 dsPIC33F 的编程模型。编程模型中的所有寄存器皆为存储器映射, 并能直接被指令集操作。表 2-1 提供了每一个寄存器的说明。 2.2.1 工作寄存器阵列 16 个工作 (W)寄存器可作为数据、地址或偏移量寄存器。 W 寄存器的功能由访问它的指令所 决定。 字节指令以工作寄存器阵列为操作对象,将只对目标寄存器的低位字节 (LSB)产生影响。由于 工作寄存器是存储映射的,因此可以字节宽度的数据存储空间访问方式对低位字节和高位字节进 行操作。 2.2.2 默认工作寄存器 (WREG) 指令集中的指令可分为两类:工作寄存器指令和文件寄存器指令。工作寄存器指令使用工作寄存 器阵列作为数据值或作为指向某一存储单元的地址。相反,文件寄存器指令对包含在指令操作码 中的特定存储地址进行操作。 文件寄存器指令也使用工作寄存器,但并不指定指令中所使用的工作寄存器,而是采用缺省的工 作寄存器(WREG)。工作寄存器 W0 指定为 WREG。用户无法对 WREG 的指定进行编程设定。 2.2.3 软件堆栈帧指针 帧是堆栈中用户定义的存储区域。函数通常使用帧来存放局部变量。 W14 被指定作为 LNK (分 配堆栈帧)和 ULNK (释放堆栈帧)指令中使用的堆栈帧指针。然而在未使用堆栈帧指针、 LNK 和 ULNK 指令时,W14 可被指令当作普通的工作寄存器使用。有关帧指针的详细内容,可参阅第 4.7.3 节 “软件堆栈帧指针”。 表 2-1: 编程模型寄存器说明 寄存器 说明 ACCA, ACCB 40 位 DSP 累加器 CORCON CPU 内核配置寄存器 DCOUNT DO 循环计数寄存器 DOEND DO 循环结束地址寄存器 DOSTART DO 循环起始地址寄存器 PC 23 位程序计数器 PSVPAG 程序空间可视性页地址寄存器 RCOUNT 重复循环计数寄存器 SPLIM 堆栈指针限制值寄存器 SR ALU 和 DSP 引擎 STATUS 寄存器 TBLPAG 表存储器页地址寄存器 W0 - W15 工作寄存器阵列