MICROCHIP dsPIC30F201 Technical data

dsPIC30F2010
数据手册
高性能 16
数字信号控制器
2007 Microchip Technology Inc. DS70118G_CN
请注意以下有关 Microchip 器件代码保护功能的要点:
•Microchip的产品均达到 Microchip 数据手册中所述的技术指标。
•Microchip确信:在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一。
目前,仍存在着恶意、甚至是非法破坏代码保护功能的行为。就我们所知,所有这些行为都不是以 Microchip 数据手册中规定的操 作规范来使用 Microchip 产品的。这样做的人极可能侵犯了知识产权。
•Microchip愿与那些注重代码完整性的客户合作。
•Microchip或任何其他半导体厂商均无法保证其代码的安全性。代码保护并不意味着我们保证产品是 “牢不可破”的。
代码保护功能处于持续发展中。 Microchip 承诺将不断改进产品的代码保护功能。任何试图破坏 Microchip 代码保护功能的行为均可视 为违反了《数字器件千年版权法案 (Digital Millennium Copyright Act)》。如果这种行为导致他人在未经授权的情况下,能访问您的软 件或其他受版权保护的成果,您有权依据该法案提起诉讼,从而制止这种行为。
提供本文档的中文版本仅为了便于理解。请勿忽视文档中包含 的英文部分,因为其中提供了有关 Microchip 产品性能和使用
情况的有用信息。Microchip Technology Inc. 及其分公司和相 关公司、各级主管与员工及事务代理机构对译文中可能存在的
任何差错不承担任何责任。建议参考 Microchip Technology Inc. 的英文原版文档。
本出版物中所述的器件应用信息及其他类似内容仅为您提供便 利,它们可能由更新之信息所替代。确保应用符合技术规范, 是您自身应负的责任。Microchip 对这些信息不作任何明示或 暗示、书面或口头、法定或其他形式的声明或担保,包括但不 限于针对其使用情况、质量、性能、适销性或特定用途的适用 性的声明或担保。 Microchip 对因这些信息及使用这些信息而 引起的后果不承担任何责任。如果将 Microchip 器件用于生命 维持和 / 或生命安全应用,一切风险由买方自负。买方同意在 由此引发任何一切伤害、索赔、诉讼或费用时,会维护和保障 Microchip 免于承担法律责任,并加以赔偿。在 Microchip 知识 产权保护下,不得暗中或以其他方式转让任何许可证。
商标
Microchip 的名称和徽标组合、 Microchip 徽标、 Accuron dsPIC、 K
EELOQ、 KEELOQ 徽标、 microID、MPLAB、 PIC、
PICmicroPICSTARTPRO MATErfPIC SmartShunt
均为 Microchip Technology Inc. 在美国和其他国家或地区的 注册商标。
AmpLabFilterLabLinear Active ThermistorMigratable MemoryMXDEVMXLABSEEVALSmartSensor
The Embedded Control Solutions Company 均为 Microchip Technology Inc. 在美国的注册商标。
Analog-for-the-Digital AgeApplication Maestro CodeGuarddsPICDEMdsPICDEM.netdsPICworks
dsSPEAKECANECONOMONITORFanSense FlexROMfuzzyLABIn-Circuit Serial Programming
ICSPICEPICMindiMiWiMPASMMPLAB Certified 徽标、MPLIBMPLINKPICkitPICDEMPICDEM.net
PICLABPICtailPowerCalPowerInfoPowerMate PowerToolREAL ICErfLABSelect ModeSmart
SerialSmartTelTotal EnduranceUNI/OWiperLock ZENA 均为 Microchip Technology Inc. 在美国和其他国家或地
区的商标。 SQTP Microchip Technology Inc. 在美国的服务标记。
在此提及的所有其他商标均为各持有公司所有。 © 2007, Microchip Technology Inc. 版权所有。
Microchip Gresham
印度的设计中心均通过了
MCU与dsPIC® DSC、KEELOQ
设、非易失性存储器和模拟产品方面的质量体系流程均符合
16949:2002
系也已通过了
位于美国亚利桑那州
的全球总部、设计和晶圆生产厂及位于美国加利福尼亚州和
。此外,
ISO 9001:2000
Chandler和Tem pe
ISO/TS-16949:2002
®
跳码器件、串行
Microchip
在开发系统的设计和生产方面的质量体
认证。
与位于俄勒冈州
认证。公司在
EEPROM
®
PIC
、单片机外
ISO/TS-
DS70118G_CN ii  2007 Microchip Technology Inc.
dsPIC30F2010
28 引脚 dsPIC30F2010 增强型
16 位闪存数字信号控制器
注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F 系列参考手册》(DS70046E_CN)。有关器件
指令集和编程的更多信息,请参阅 《dsPIC30F/33F 程序员 参考手册》(DS70157B_CN)。
高性能改进型 RISC CPU
改进的哈佛架构
优化的 C 编译器指令集
•83条具备灵活寻址模式的基本指令
•24位宽指令, 16 位宽数据总线
• 12 KB 片内闪存程序空间
• 512 字节片内数据 RAM
•1 KB非易失性数据 EEPROM
• 16 x 16 位工作寄存器阵列
最大 30 MIPS 工作:
-DC至 40 MHz 外部时钟输入
-4 MHz-10 MHz 振荡器输入,带 PLL (4 倍 频、 8 倍频和 16 倍频)
•27个中断源
三个外部中断源
每一个中断具有 8 个用户可选择的中断优先级
•4个处理器异常和软件陷阱
外设特性:
高灌电流 / 拉电流 I/O 引脚:25 mA/25 mA
•3个16 位定时器 / 计数器;可选择将16 位定时器配 对组成 32 位定时器模块
•4个 16 位捕捉输入功能引脚
•2个 16 位比较 /PWM 输出功能引脚
- 可提供双比较模式
•3线 SPI 模块 (支持 4 种帧模式)
2
C™模块支持多主器件/从模式,支持7 位 /10位寻
•I
FIFO 缓冲区的可寻址 UART 模块
电机控制 PWM 模块特性:
•6个 PWM 输出通道
- 互补或独立的输出模式
- 边沿和中心对齐模式
•4个占空比发生器
具备 4 种工作模式的专用时基
输出极性可由编程设定
用于互补模式的死区时间控制
手动输出控制
用于同步 A/D 转换的触发器
DSP 引擎特性:
模寻址和位反转寻址模式
两个 40 位宽的累加器,具备可选饱和逻辑
•17位 x 17 位单周期硬件小数 / 整数乘法器
单周期乘 - 累加 (MAC)操作
•40级桶形移位寄存器
双数据取
正交编码器接口模块特性:
•A相、 B 相和索引脉冲输入
•16位向上 / 向下位置计数器
计数方向状态
位置测量 (x2 x4)模式
输入端具有可编程数字噪声滤波器
备用 16 位定时器 / 计数器模式
位置计数器计满返回 / 下溢中断
模拟特性:
•10位模数转换器 (ADC),具备以下特性:
-1 Msps转换速率 (对于 10 位 A/D)
-6个输入通道
- 休眠和空闲模式下仍可进行转换
可编程欠压复位
2007 Microchip Technology Inc. DS70118G_CN 第1
dsPIC30F2010
特殊数字信号控制器特性:
增强型闪存程序存储器:
- 对于工业级温度范围,最少擦写次数 1 万次, 典型擦写次数 10 万次。
数据 EEPROM 存储器:
- 对于工业级温度范围,最少擦写次数 10 万次, 典型擦写次数 100 万次。
软件控制下,可自行再编程
上电复位 (Power-on ResetPOR)、上电延时
定时器 (Power-up TimerPWRT)以及振荡器 起振定时器 (Oscillator Start-up TimerOST
零活的看门狗定时器 (Watchdog Timer WDT),片内带有低功耗 RC 振荡器,以便可靠地
工作
故障保护时钟监控器:
- 检测时钟故障,可切换至片上低功耗 RC 振荡
可编程代码保护
在线串行编程 (In-Circuit Serial Programming™ ICSP™)功能
可选择的功耗管理模式:
休眠、空闲和备用时钟模式
CMOS 技术:
低功耗高速闪存技术
宽工作电压范围 (2.5V 5.5V
工业级和扩展级温度范围
低功耗
dsPIC30F 电机控制和电源转换系列器件 *
器件
dsPIC30F2010 28 12K/4K 512 1024 3 4 2 6 通道 6 通道
dsPIC30F3010 28 24K/8K 1024 1024 5 4 2 6 通道 6 通道 1 1 1
dsPIC30F4012 28 48K/16K 2048 1024 5 4 2 6 通道 6 通道 1 1 1 1
dsPIC30F3011 40/44 24K/8K 1024 1024 5 4 4 6 通道 9 通道 2 1 1
dsPIC30F4011 40/44 48K/16K 2048 1024 5 4 4 6 通道 9 通道 2 1 1 1
dsPIC30F5015 64 66K/22K 2048 1024 5 4 4 8 通道 16 通道 1 2 1 1
dsPIC30F6010 80 144K/48K 8192 4096 5 8 8 8 通道 16 通道 2 2 1 2
dsPIC30F6010A 80 144K/48K 8192 4096 5 8 8 8 通道 16 通道 2 2 1 2
引脚数程序存储器字
节数 / 指令数
SRAM
字节数
EEPROM
字节数
16
定时器输入捕捉
输出
比较 / 标准
PWM
电机控制
PWM
A/D 10
1 Msps
正交编 码器模
TM
C
SPI
2
UART
111–
I
CAN
* 本表对 dsPIC30F2010 的外设特性进行了汇总,同时列出 dsPIC30F 电机控制和电源转换系列中其他器件的特性以
进行比较。
DS70118G_CN 2 2007 Microchip Technology Inc.
引脚配置图
dsPIC30F2010
28 引脚 SDIP SOIC 封装
EMUD3/AN0/VREF+/CN2/RB0
EMUC3/AN1/V
AN2/SS1/LVDIN/CN4/RB2
EMUD1/SOSCI/T2CK/U1ATX/CN1//RC13
EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14
EMUD2/OC2/IC2/INT2/RD1
REF-/CN3/RB1
AN3/INDX/CN5/RB3 AN4/QEA/IC7/CN6/RB4 AN5/QEB/IC8/CN7/RB5
OSC1/CLKI V
OSC2/CLKO/RC15
28 引脚 QFN 封装
MCLR
VDD
1 2 3 4 5 6 7
SS
8 9 1
0 11 1
2 1
3 1
4
28
AV
DD
AVSS
27
PWM1L/RE0
26
dsPIC30F20
1
0
PWM1H/RE1
25
PWM2L/RE2
24
PWM2H/RE3
23
PWM3L/RE4
22
PWM3H/RE5V
21
DD
20
V
SS
19
PGC/EMUC/U1RX/SDI1/SDA/RF2
18
PGD/EMUD/U1TX/SDO1/SCL/RF3
17
FLTA/INT0/SCK1/OCFA/RE8
16 15
EMUC2/OC1/IC1/INT1/RD0
AN2/SS1/LVDIN/CN4/RB2
AN3/INDX/CN5 RB3 AN4/QEA/IC7/CN6/RB4 AN5/QEB/IC8/CN7/RB5
V
OSC1/CLKI
OSC2/CLKO/RC15
SS
EMUD3/AN0/VREF+/CN2/RB0
EMUC3/AN1/VREF- /CN3/RB1
27
28 1 2 3
dsPIC30F2010
4 5 6 7
8
9
EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13
EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14
AVDD
AVSS
PWM1L/RE0
MCLR
23
24
25
26
1011121314
DD
V
EMUD2/OC2/IC2/INT2/RD1
EMUC2/OC1/IC1/INT1/RD0
FLTA/INT0/SCK1/OCFA/RE8
PWM1H/RE1
22
21
PWM2L/RE2
20
PWM2H/RE3 PWM3L/RE4
19
PWM3H/RE5
18
V
DD
17
VSS
16
PGC/EMUC/U1RX/SDI1/SDA/RF2
15
PGD/EMUD/U1TX/SDO1/SCL/RF3
2007 Microchip Technology Inc. DS70118G_CN 第3
dsPIC30F2010
目录
1.0 器件概述 ....................................................................................................................................................................................... 5
2.0 CPU 架构综述............................................................................................................................................................................... 9
3.0 存储器构成 ................................................................................................................................................................................ 19
4.0 地址发生器单元 .......................................................................................................................................................................... 31
5.0 中断 ............................................................................................................................................................................................ 37
6.0 闪存程序存储器 .......................................................................................................................................................................... 43
7.0 数据 EEPROM 存储器 ................................................................................................................................................................ 49
8.0 I/O 端口....................................................................................................................................................................................... 53
9.0 Timer1 模块 ................................................................................................................................................................................ 57
10.0 Timer2/3 模块 ............................................................................................................................................................................. 61
11.0 输入捕捉模块 .............................................................................................................................................................................. 67
12.0 输出比较模块 .............................................................................................................................................................................. 71
13.0 正交编码器接口 (QEI)模块..................................................................................................................................................... 75
14.0 电机控制 PWM 模块 ................................................................................................................................................................... 81
15.0 SPI 模块...................................................................................................................................................................................... 91
16.0 I2C 模块...................................................................................................................................................................................... 95
17.0 通用异步收发器 (UART)模块 ............................................................................................................................................... 103
18.0 10 位高速模数转换器 (ADC)模块 ......................................................................................................................................... 111
19.0 系统集成 ................................................................................................................................................................................... 121
20.0 指令集汇总 ............................................................................................................................................................................... 135
21.0 开发支持 ................................................................................................................................................................................... 143
22.0 电气特性 ................................................................................................................................................................................... 147
23.0 封装信息 ................................................................................................................................................................................... 185
Microchip 网站.................................................................................................................................................................................... 197
变更通知客户服务 .............................................................................................................................................................................. 197
客户支持............................................................................................................................................................................................. 197
读者反馈表 ......................................................................................................................................................................................... 198
产品标识体系...................................................................................................................................................................................... 199
致 客 户
我们旨在提供最佳文档供客户正确使用 Microchip 产品。 为此,我们将不断改进出版物的内容和质量,使之更好地满足您的要求。 出版物的质量将随新文档及更新版本的推出而得到提升。
如果您对本出版物有任何问题和建议,请通过电子邮件联系我公司 TRC 经理,电子邮件地址为 CTRC@microchip.com,或将本 数据手册后附的 《读者反馈表》传真到 86-21-5407 5066。我们期待您的反馈。
最新数据手册
欲获得本数据手册的最新版本,请查询我公司的网站:
http://www.microchip.com
查看数据手册中任意一页下边角处的文献编号即可确定其版本。文献编号中数字串后的字母是版本号 的 A 版本。
勘误表
现有器件可能带有一份勘误表,描述了实际运行与数据手册中记载内容之间存在的细微差异以及建议的变通方法。一旦我们了解到 器件 / 文档存在某些差异时,就会发布勘误表。勘误表上将注明其所适用的硅片版本和文件版本。
欲了解某一器件是否存在勘误表,请通过以下方式之一查询:
•Microchip网站 http://www.microchip.com
当地 Microchip 销售办事处 (见最后一页)
在联络销售办事处时,请说明您所使用的器件型号、硅片版本和数据手册版本 (包括文献编号)。
客户通知系统
欲及时获知 Microchip 产品的最新信息,请到我公司网站 www.microchip.com 上注册。
例如:DS30000A是DS30000
DS70118G_CN 4 2007 Microchip Technology Inc.
dsPIC30F2010

1.0 器件概述

注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F 系列参考手册》(DS70046E_CN)。有关器件
指令集和编程的更多信息,请参阅 《dsPIC30F/33F 程序员 参考手册》(DS70157B_CN)。
本文档包含 dsPIC30F2010 器件的特定信息。dsPIC30F 系列器件在高性能 16 位单片机 (MCU)架构中融合了 大量数字信号处理器 (DSP)功能。图 1-1 中给出了 dsPIC30F2010 器件的框图。
2007 Microchip Technology Inc. DS70118G_CN 5
dsPIC30F2010

1-1 dsPIC30F2010 框图

中断
控制器
24
地址锁存器
程序存储器
12 KB)
数据 EEPROM
1 KB)
数据锁存器
24
24
16
指令
译码和
控制
PSV 和表
数据访问
控制模块
16
24
Y 数据总线
8
PCH PCL
PCU
程序计数器
堆栈
控制
逻辑
ROM 锁存器
控制
IR
16
循环
逻辑
 译码
16
Y 数据
256
 地址
Y AGU
X 数据总线
16
16
RAM
字节)
锁存器
1
6
1
6
X RAGU X WAGU
  有效地址
16
16 x 16
W 寄存器阵列
16
16
数据锁存器数据锁存器
X 数据
256
 地址
16
RAM
字节)
锁存器
1
16
16
6
EMUD3/AN0/VREF+/CN2/RB0 EMUC3/AN1/VREF-/CN3/RB1 AN2/SS1/LVDIN/CN4/RB2 AN3/INDX/CN5/RB3 AN4/QEA/IC7/CN6/RB4 AN5/QEB/IC8/CN7/RB5
PORTB
EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13 EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14
OSC2/CLKO/RC15
PORTC
至各模块
的控制信号
OSC1
/CLK
时序 发生
MCLR
10 ADC
定时器
上电延时
定时器 振荡器
起振定时器
POR/BOR
复位
看门狗 定时器
输入
捕捉 模块
QEI
DSP 引擎
16
比较
模块
电机控制
输出
PWM
除法
单元
ALU<16>
16
UART1SPI1
I2C™
PORTD
PORTE
PORTF
EMUC2/OC1/IC1/INT1/RD0 EMUD2/OC2/IC2/INT2/RD1
PWM1L/RE0 PWM1H/RE1 PWM2L/RE2 PWM2H/RE3 PWM3L/RE4 PWM3H/RE5
/INT0/SCK1/OCFA/RE8
FLTA
PGC/EMUC/U1RX/SDI1/SDA/RF2 PGD/EMUD/U1TX/SDO1/SCL/RF3
DS70118G_CN 第6 页  2007 Microchip Technology Inc.
1-1 对器件的 I/O 引脚配置和端口引脚的复用功能进 行了简要描述。端口引脚可具有多种功能。当发生复用 时,外设模块的功能要求可强制替代端口引脚的数据方 向。

1-1:引I/O 描述

引脚名称
AN0-AN5 I Analog 模拟输入通道。
DD PP模拟模块正电源。
AV
AV
SS PP模拟模块的参考地。
CLKI CLKO
CN0-CN7 I ST 输入电平变化通知输入。
EMUD EMUC EMUD1 EMUC1 EMUD2 EMUC2 EMUD3 EMUC3
IC1, IC2, IC7, IC8
INDX QEA
QEB
INT0 INT1 INT2
FLTA PWM1L PWM1H PWM2L PWM2H PWM3L PWM3H
MCLR
OCFA OC1-OC2
OSC1 OSC2
图注: CMOS =CMOS 兼容输入或输出  Analog = 模拟输入
引脚 类型
I
O
I/O I/O I/O I/O I/O I/O I/O I/O
IST捕捉输入。 dsPIC30F2010 具有 4 个捕捉输入。输入采用的编号方式有助于保
I I
I
I I I
I O O O O O O
I/P ST 主复位输入或编程电压输入。本引脚为低电平有效的器件复位输入端。
I O
I
I/O
ST =CMOS 电平的施密特触发器输入 O = 输出 I=输入 P =电源
缓冲器
类型
ST/CMOS—外部时钟源输入。总是与 OSC1 引脚功能相关联。
振荡器晶振输出。在晶振模式下,连接到晶体或谐振器。RC EC 模式下,可 选择作为 CLKO。总是与 OSC2 引脚功能相关联。
可通过软件编程设定所有输入为内部弱上拉。
ST ST ST ST ST ST ST ST
ST ST
ST
ST ST ST
ST
— — — — — —
ST
ST/CMOS—振荡器晶振输入。当配置为 RC 模式时,为 ST 缓冲器;否则为 CMOS。
ICD 主通信通道数据输入 / 输出引脚。 ICD 主通信通道时钟输入 / 输出引脚。 ICD 第二通信通道数据输入 / 输出引脚。 ICD 第二通信通道时钟输入 / 输出引脚。 ICD 第三通信通道数据输入 / 输出引脚。 ICD 第三通信通道时钟输入 / 输出引脚。 ICD 第四通信通道数据输入 / 输出引脚。 ICD 第四通信通道时钟输入 / 输出引脚。
持与引脚数较多器件的输入一致。 正交编码器索引脉冲输入。
QEI 模式下为正交编码器 A 相输入。 在定时器模式下为辅助定时器外部时钟/门控输入。 在 QEI 模式下为正交编码器 B 相输入。 在定时器模式下为辅助定时器外部时钟/门控输入。
外部中断 0 外部中断 1 外部中断 2
PWM 故障 A 输入 PWM1 低端输出 PWM1 高端输出 PWM2 低端输出 PWM2 高端输出 PWM3 低端输出 PWM3 高端输出
比较故障 A 输入 (对于比较通道 123 4)。 比较输出。
振荡器晶振输出。在晶振模式下,连接到晶振或谐振器。在 RC EC 模式下, 可选择作为 CLKO
dsPIC30F2010
描述
2007 Microchip Technology Inc. DS70118G_CN 7
dsPIC30F2010
1-1:引I/O 描述 (续)
引脚名称
PGD PGC
RB0-RB5 I/O ST PORTB 为双向 I/O 口。 RC13-RC14 I/O ST PORTC 为双向 I/O 口。 RD0-RD1 I/O ST PORTD 为双向 I/O 口。
RE0-RE5, RE8
RF2, RF3 I/O ST PORTF 为双向 I/O 口。
SCK1 SDI1 SDO1 SS1
SCL SDA
SOSCO SOSCI
T1CK T2CK
U1RX U1TX U1ARX U1ATX
V
DD P—逻辑电路和 I/O 引脚的正电源。
VSS P—逻辑电路和 I/O 引脚的参考地。
V
REF+ I Analog
V
REF- I Analog
图注: CMOS =CMOS 兼容输入或输出  Analog = 模拟输入
引脚 类型
I/O
I
I/O ST PORTE 为双向 I/O 口。
I/O
I
O
I
I/O I/O
O
I
I I
I
O
I
O
ST =CMOS 电平的施密特触发器输入 O = 输出 I=输入 P =电源
缓冲器
类型
ST ST
ST ST
ST
ST ST
ST/CMOS
ST ST
ST
ST
在线串行编程数据输入/输出引脚。 在线串行编程时钟输入引脚。
SPI #1 的同步串行时钟输入 / 输出。 SPI #1 数据输入。
SPI #1 数据输出。 SPI #1 同步从动模式。
2
用于 I
C™ 的同步串行时钟输入 / 输出。
用于 I2C 的同步串行数据输入 / 输出。 32 kHz 低功耗晶振输出。
32 kHz 低功耗晶振输入。配置为 RC 模式时,为 ST 缓冲器;否则为 CMOS。 Timer1 外部时钟输入。
Timer2 外部时钟输入。 UART1 接收。
UART1 发送。 UART1 备用接收。 UART1 备用发送。
模拟参考电压 (高电压)输入。 模拟参考电压 (低电压)输入。
描述
DS70118G_CN 8 2007 Microchip Technology Inc.
dsPIC30F2010

2.0 CPU 架构综述

注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F 系列参考手册》(DS70046E_CN)。有关器件
指令集和编程的更多信息,请参阅 《dsPIC30F/33F 程序员 参考手册》(DS70157B_CN)。
本文档对 dsPIC30F2010 CPU 和外设功能进行了简 要概述。有关这些内容的详细描述,请参见《dsPIC30F 系列参考手册》(DS70046E_CN)。

2.1 内核概述

内核的指令字长为 24 位。程序计数器 (PC)为 23 位 宽,其最低有效位 (LSb)始终为 0 (见第 3.1 节“程 序地址空间”),最高有效位 (MSb)在正常的程序执 行期间被忽略,某些专用指令除外。因此, PC 能够寻 址最大为 4M 指令字的用户程序空间。 使用指令预取机 制来帮助维持吞吐量。使用 DO REPEAT 指令,支持 无循环计数管理开销的程序循环结构,而 DO REPEAT 这两条指令在任何时候都可被中断。
工作寄存器阵列由 16 16 位寄存器组成,每个寄存器 均可作为数据、地址或偏移量寄存器。 一个工作寄存器
W15)用作中断和调用时的软件堆栈指针。
数据空间为 64KB 32K 字),被分成两块,称为 X Y 数据存储空间。每个存储块有各自独立的地址发生单 元(Address Generation Unit,AGU)。大多数指令只 通过 X 存储空间 AGU 进行操作,这样对外界而言数据 空间就是单独而统一的。乘法-累加(Multiply-
AccumulateMAC)类双源操作数 DSP 指令,通过 X 和 Y AGU 进行操作,这将数据地址空间分成两个部分
(见第 3.2 节“数据地址空间”)。 X 和 Y 数据空间边界
视具体器件而定,用户不能改变它们。每个数据字由 2 个字节构成,大多数指令可以把数据当作字或字节来进 行寻址。
对于存储在程序存储空间中的数据,有两种存取方法:
数据存储空间的高 32 KB 可以映射到程序空间的下 半部分 (用户空间),映射的边界可以是任何 16K 程序字边界,边界由 8 位的程序空间可视性页
Program Space Visibility Page, PSVPAG)寄
存器定义。这使得任何指令都能象存取数据存储空 间那样存取程序存储空间,但存取需要一个额外的 周期。此外,使用这个方法,只能存取每个指令字 的低 16 位。
使用任何工作寄存器,通过表读及表写指令,可以 对程序空间内的 32K 字页进行线性间接存取。表 读和表写指令能够用来存取一个指令字的全部 24 位。
X Y 地址空间都支持无开销循环缓冲区 (模寻址)。 模寻址的主要目的是要消除 DSP 算法的循环开销。
X AGU 还支持对目的有效地址进行位反转寻址,对于 基-2 FFT 算法,这极大地简化了输入或输出数据的重 新排序。关于模寻址和位反转寻址的详细信息,参见第
4.0 节 “地址发生器单元”
内核支持固有(无操作数)寻址、 相对寻址、立即数寻 址、存储器直接寻址、寄存器直接寻址、寄存器间接寻 址、寄存器偏移量寻址以及立即数偏移量寻址模式。指 令与预定义的寻址模式相关联,这取决于其功能需求。
对于大多数指令, 内核能够在每个指令周期内执行数据
(或程序数据)存储器读取、工作寄存器(数据)读取、
数据存储器写入以及程序(指令)存储器读取操作。 此,支持 3 操作数指令,允许在单个周期内执行 C=A + B 这样的操作。
内核包含 DSP 引擎,这极大地提高了内核的运算能力 和吞吐能力。它具有一个高速 17 位× 17 位乘法器、一 个 40 ALU、两 个 40 位饱和累加器和一个 40 位双向 桶形移位寄存器。累加器或任何工作寄存器中的数据, 可以在单个周期内右移 16 位或左移 16 位。 DSP 指令 可以无缝地与所有其他指令一起操作,且设计为能获得 最佳实时性能。在把两个 W 寄存器相乘时, MAC 类指 令能够从存储器中同时取出两个操作数。为了能够同时 取数据操作数,对于 MAC 类指令,数据空间拆分为两 块,对所有其他指令数据空间则是线性的。对于 MAC 类 指令,这是通过将某些工作寄存器专用于每个地址空 间,以透明而灵活的方式实现的。
内核不支持多级指令流水线。不过,为了最大限度地获 得可用的执行时间,使用了单级指令预取机制,在指令 执行的前一个周期,存取并部分译码指令。除了一些特 例外,大部分指令都在单个周期内执行。
内核具有用于陷阱和中断的向量异常处理结构,具有 62 个独立的向量。异常包括最多 8 个陷阱(其中有 4 个是 保留的)和 54 个中断。根据用户指定的 1 7 之间的 优先级 (1 为最低优先级, 7 为最高优先级),以及预 定义的 “自然顺序”,决定每个中断的优先级。陷阱的 优先级是固定的,其优先级范围是从 8 15
2007 Microchip Technology Inc. DS70118G_CN 9
dsPIC30F2010

2.2 编程模型

编程模型如图 2-1 所示,它包括 16 x 16 位工作寄存器
W0 W15)、2 x 40 位累加器(ACCA ACCB)、
状态寄存器 (SR)、数据表页寄存器 (TBLPAG)、程 序空间可视性页寄存器 (PSVPAG)、 DO 和 REPEAT 寄存器(DOSTARTDOEND、DCOUNT 和 RCOUNT) 以及程序计数器(PC)。工作寄存器可作为数据、地址 或偏移量寄存器。全部寄存器都是存储器映射的。 W0 用作文件寄存器寻址的 W 寄存器。
这些寄存器中,一些寄存器有与之关联的影子寄存器, 如图 2-1 所示。影子寄存器用作临时保存寄存器,事件 发生时可在影子寄存器和主寄存器之间传递内容。所有 影子寄存器均不能直接存取。寄存器与其影子寄存器之 间的数据传递遵守下列规则:
PUSH.S POP.S
W0W1W2W3 SR (仅限 DC、 N、 OV、 Z 和 C 位)与对应的影子寄存器之间进行内
容传递。
DO 指令
循环开始时, DOSTARTDOEND DCOUNT 寄存器的内容压入影子寄存器,在循环结束时其内 容从各自的影子寄存器中弹出。
对工作寄存器进行字节操作时,只影响目标寄存器的最 低有效字节 (LSB)。不过,存储器映射工作寄存器的 一个好处是,可以通过字节宽数据存储空间存取来处理 最低和最高有效字节。

2.2.1 软件堆栈指针 / 帧指针

dsPIC® DSC 器件具备一个软件堆栈。W15 被指定用作
软件堆栈指针(Stack PointerSP),异常处理以及子 程序调用与返回将自动修改 W15。但是, W15 可以被 任何指令所引用,引用方式与引用所有其他 W 寄存器相 同。这简化了堆栈指针的读、写和处理 (例如,创建堆 栈帧)。
注: 为了防止出现不对齐的堆栈访问,
W15<0> 始终保持为零。
复位时 W15 初始化为 0x0800 在初始化过程中,用户 可以重新设定 SP,使它指向数据空间内的任何单元。
W14 被指定用作 LNK ULNK 指令中所定义的堆栈帧 指针。但是,W14 可以被任何指令所引用,引用方式与 引用所有其他 W 寄存器相同。

2.2.2 状态寄存器

dsPIC DSC内核有一个16位状态寄存器(SR),其 LSB
称为 SR 低字节 (SRL),其 MSB 称为 SR 高字节
SRH), SR 寄存器组成见图 2-1
SRL 包含全部的 MCU ALU 运算状态标志位 (包括 Z 位),以 及 CPU中断优先级状态位 IPL<2:0>REPEAT 有效状态位 RA。在异常处理期间,SRL PC MSB 连接起来形成一个完整的字值,然后被压入堆栈。
状态寄存器的高字节包含 DSP 加法器 / 减法器状态位、
DO 循环有效位 (DA)和半进位 (DC)状态位。

2.2.3 程序计数器

程序计数器为 23 位宽; bit 0 始终为零。因此, PC 能 够最多寻址 4M 指令字。
DS70118G_CN 10 2007 Microchip Technology Inc.
2-1:编
DSP 操作数 寄存器
DSP 地址 寄存器
W0/WREG
W1
W2
W3
W4
W5
W6
W7
W8
W9
W10
W11
W12/DSP 偏移量
W13/DSP 回写
W14/ 帧指针
W15/ 堆栈指针
dsPIC30F2010
D0D15
PUSH.S 影子寄存器
DO 影子寄存器
图注
工作寄存器
DSP
累加器
PC22
7
22
22
TABPAG
TBLPAG
7
PSVPAG
PSVPAG
AD39 AD0AD31
ACCA ACCB
0
0
数据表页地址
程序空间可视性页地址
15
15
DOSTART
DOEND
SPLIM
RCOUNT
DCOUNT
PC0
堆栈指针限制寄存器
AD15
程序计数器
0
0
REPEAT 循环计数器
0
DO 循环计数器
0
DO 循环起始地址
DO 循环结束地址
15
CORCON
OA OB SA SB
2007 Microchip Technology Inc. DS70118G_CN 第11
OAB SAB
SRH
DA DC
IPL2 IPL1
RA
IPL0 OV
SRL
0
内核配置寄存器
N
C
Z
状态寄存器
dsPIC30F2010

2.3 除法支持

dsPIC DSC 器件具有这样的特性:支持 16 /16 位有符 号小数除法运算,支持 32 /16 位、 16 /16 位有符 号和无符号整数除法运算,除法形式均为单指令迭代除 法。支持以下指令和数据长度:
1. DIVF16/16 有符号小数除法
2. DIV.sd32/16 有符号除法
3. DIV.ud32/16 无符号除法
4. DIV.sw16/16 有符号除法
5. DIV.uw16/16 无符号除法
16/16 除法类似于 32/16 除法(它们的迭代次数相同),
但在第一次迭代时,被除数要进行零扩展或符号扩展。
除法指令必须在一个 REPEAT 循环中执行。任何其他执 行方式 (例如,一系列不连续的除法指令),将不会正 常运行,因为指令流取决于 RCOUNT。除法指令不会 自动设置 RCOUNT 值,于是 RCOUNT 必须显式地、正 确地在 REPEAT 指令中给定,如表 2-1 所示(REPEAT 将执行目标指令 { 操作数的值 +1} 次)。必须为 DIV/ DIVF指令的18次迭代设置REPEAT循环计数。所以,完 整的除法操作需要 19 个周期。
注: 除法流可以被中断。然而,用户需要恰当地
保存中断现场。

2-1 除法指令

指令 功能
DIVF DIV.sd 有符号除法: (Wm + 1:Wm)/Wn W0 Rem W1 DIV.ud 无符号除法: (Wm + 1:Wm)/Wn W0 Rem W1
DIV.sw (或 DIV.s 有符号除法:Wm/Wn W0 Rem W1 DIV.uw (或 DIV.u 无符号除法:Wm/Wn W0 Rem W1
有符号小数除法:Wm/Wn W0 Rem W1
DS70118G_CN 12  2007 Microchip Technology Inc.
dsPIC30F2010

2.4 DSP 引擎

DSP 引擎的组成:一个高速 17 位× 17 位乘法器、一 个桶形移位寄存器和一个 40 位加法器 / 减法器 (两个 目标累加器、舍入逻辑和饱和逻辑)。
DSP 引擎能够执行固有的不需要其他数据的累加器至 累加器操作。这些指令是 ADDSUB NEG

2-2 DSP 指令汇总

指令 代数运算 ACC 回写?
CLR A = 0
ED A = (x – y)
EDAC A = A + (x – y)
MAC A = A + (x * y)
MAC A = A + x
MOVSAC A 中内容将不发生改变
MPY A = x * y
MPY.N A = – x * y
MSC A = A – x * y
通过 CPU 内核配置寄存器 (CORCON)中的各个位, 可以有多种 DSP 引擎选择,这些选择如下:
1. 小数或整数 DSP 乘法 (IF)。
2. 有符号或无符号 DSP 乘法 (US)。
3. 常规或收敛舍入 (RND)。
4. ACCA 自动饱和使能 / 禁止 (SATA)。
5. ACCB 自动饱和使能 / 禁止 (SATB)。
6. 对于写数据存储器,自动饱和使能/禁止(SATDW)。
7. 累加器饱和模式选择 (ACCSAT)。
注: CORCON 的构成,见表 3-3
DSP 引擎的框图,如图 2-2 所示。
2
2
2
否 否
2007 Microchip Technology Inc. DS70118G_CN 13
dsPIC30F2010
2-2 DSP 引擎功能框图
40
进位 / 借位输出
进位 / 借位输入
40 位累加器 A 40 位累加器 B
饱和
加法器
40
符号扩展
取补
40
40
桶形 移位 寄存器
40
16
40
舍入 逻辑
16
X 数据总线
Y 数据总线
33
17
乘法器 / 定标器
16
/ 来自 W 阵列
16
32
32
补零
16
DS70118G_CN 14  2007 Microchip Technology Inc.
dsPIC30F2010

2.4.1 乘法器

17位×17位的乘法器可以进行有符号或无符号的运算,
其输出经过定标器进行换算后可支持 1.31 小数(Q31) 或 32 位整数结果。无符号操作数经过零扩展后,送入 乘法器输入值的第 17 位。有符号操作数经过符号扩展, 送入乘法器输入值的第 17 位。17 位× 17 位乘法器 / 标器的输出是 33 位值,它将被符号扩展为 40 位。 整型 数据的固有表示形式为有符号的二进制补码值,其中, MSB 定义为符号位。一般来说,N 位二进制补码整数的 范围为 -2
-32768 0x800032767 0x7FFF),包括 0 内。对于 32 位整数,数据范围是 -2,147,483,648
0x8000 0000 至 2,147,483,645 (0x7FFF FFFF)。
当乘法器配置为小数乘法时,数据表示为二进制补码小 数,其中 MSB 定义为符号位,小数点暗含在符号位之 后(QX 格式)。暗含小数点的 N 位二进制补码小数的 范围是 -1.0 至(1 – 2 范围是 -1.0 0x8000)至 0.999969482 0x7FFF), 包括 0 在内,其精度为 3.01518x10
16x16 乘法运算将产生 1.31 乘积,其精度为 4.65661 x 10
同一个乘法器还用来支持 MCU 乘法指令,包括整数的 16 位有符号、无符号和混和符号乘法。
MUL 指令可以使用字节或字长度的操作数。字节操作数 将产生 16 位结果,而字操作数将产生 32 位结果,结果 存放在 W 寄存器阵列的指定寄存器中。
-10
N-1
N-1
2
– 1。对于 16 位整数,数据范围是
1-N
)。对 于 16 位小数,Q15 数据
-5
。在小数方式下,

2.4.2 数据累加器和加法器 / 减法器

数据累加器包含一个 40 位的加法器 / 减法器,它带有自 动符号扩展逻辑。它可以选择两个累加器 (A B)之 一作为其预累加的源累加器和后累加的目标累加器。ADD LAC 指令,将被累加或装入的数据可选择通 过桶形移位寄存器在累加之前进行换算。
2.4.2.1 加法器 / 减法器,溢出和饱和
加法器 / 减法器是一个 40 位的加法器,一侧输入可以选 择为零,而另一侧的输入可以是数据的原码或补码。对 于加法, 进位 / 借位 据的原码 (没有求补的);对于减法,进位 / 借位输入 是低有效的, 另一侧输入是数据的补码。溢出和饱和状 态位 SA/SB OA/OB 提供加法器 / 减法器的溢出和饱 和状态信息,状态位被锁存在状态寄存器中并在其中得 到反映。
bit 39 溢出:这是灾难性溢出,会破坏累加器的 符号。
溢出到警戒位(bit 32 bit 39):这是可恢复的溢 出。每当警戒位有任何不一致,就将把这个状态位 置 1
加法器有一个额外的饱和块,如果选取的话,饱和模块 将控制累加器的数据饱和。饱和模块使用加法器的结 果、上述的溢出状态位以及 SATA/B (CORCON<7:6>)ACCSAT CORCON<4>)模式控制位,来确定什么 时候以及什么值要饱和。
在状态寄存器中有 6 个支持饱和及溢出的位,它们是:
1. OA
ACCA 溢出到警戒位
2. OB
ACCB 溢出到警戒位
3. SA
ACCA 已饱和 (bit 31 溢出并饱和)
输入是高有效的,另一侧输入是数
或者
ACCA 溢出到警戒位并饱和(bit 39 溢出并饱和)
4. SB
ACCB 已饱和 (bit 31 溢出并饱和)
或者
ACCB 溢出到警戒位并饱和(bit 39 溢出并饱和)
5. OAB
OA OB 的逻辑或 (OR
6. SAB
SA SB 的逻辑或 (OR
每次数据通过加法器 / 减法器,就会修改 OA OB 位。 置 1 时,它们表明最近的操作已经溢出到累加器警戒位
bit 32 bit 39)。如 果 OA OB位置 1而且 INTCON1
寄存器中相应的溢出陷阱标志允许位 (O VAT E OVBTE)置 1 的话,还可以选择用OA OB 位产生算术 警告陷阱 (见第 5.0 节 “中断”)。这使得用户能够立 即采取措施,例如,改正系统增益。
2007 Microchip Technology Inc. DS70118G_CN 15
dsPIC30F2010
每次数据通过加法器 / 减法器,就会修改 SA SB 位, 但用户只能对它们进行清零。置 1 时,它们表明累加器 已经溢出其最大范围 (对于 32 位饱和是 bit 31,而 40 位饱和是 bit 39),将发生饱和 (如果饱和使能的话)。 如果没有使能饱和,SA 和 SB 置 1 默认为 bit 39 溢出, 于是表明产生了灾难性溢出。如果 INTCON1 寄存器中 的 COVTE 位置 1,当饱和被禁止时,SA SB 位将产 生算术警告陷阱。
在状态寄存器中,对于溢出和饱和状态位,可以将 OAOB 的逻辑或形成 OAB 位,将 SA SB 的逻辑或形 成 SAB 位。这样,只需检查状态寄存器中的一个位,程 序就能判断累加器是否已溢出,或者累加器是否已饱 和。对于通常要使用两个累加器的复数运算而言,这很 有用。
器件支持三种饱和及溢出模式:
1. bit 39 溢出和饱和: 当发生 bit 39 溢出和饱和时,饱和逻辑将最大的 正 9.31 值(0x7FFFFFFFFF)或最大的负 9.31 值(0x8000000000)装入目标累加器。 SA 或 SB 位置 1 并保持置 1 直到被用户清零。这称为
“超饱和” ,为错误数据或不可预期的算法问题 (例如,增益计算)提供了保护机制。
2. bit 31 溢出和饱和: 当发生 bit 31 溢出和饱和时,饱和逻辑将最大的 正 1.31 值(0x007FFFFFFF)或最大的负 1.31 值(0x0080000000)装入目标累加器。 SA 或 SB 位置 1 并保持置 1 直到被用户清零。当这种 饱和模式生效时,不使用警戒位(因此 OAOBOAB 位不会被置 1)。
3. bit 39 灾难性溢出: 来自加法器的 bit 39 溢出状态位,用来将 SA SB 位置1(置 1 后,这两位将保持置 1,除非用户 进行清零)。不进行饱和操作,允许累加器溢出
(破坏其符号) 。如果 INTCON1 寄存器中的
COVTE 位置 1,灾难性溢出会导致一个陷阱异 常。
2.4.2.2 累加器 “回写”
MAC 类指令(MPYMPY.NED EDAC 除外)可以选 择将累加器高字 (bit 16 bit 31)的舍入形式写入数 据存储空间,前提是当前指令不对该累加器进行操作。 通过 X 总线,寻址组合的 X Y 地址空间,执行回写 操作。支持以下寻址模式:
1. W13,寄存器直接寻址: 非操作目标的累加器的舍入内容以 1.15 小数形 式写入 W13
2. [W13]+ = 2,执行后递增的寄存器间接寻址: 非操作目标的累加器的舍入内容以 1.15 小数形 式写入 W13 指向的地址。 然后 W13 递增 2(对 于字写入)。
2.4.2.3 舍入逻辑
舍入逻辑是一个组合块,在累加器写 (存储)过程中 执行常规的 (有偏)或收敛的 (无偏)舍入功能。舍 入模式由 CORCON 寄存器中 RND 位的状态决定。
会产生一个 16 位的 1.15 数据值,该值被送到数据空 间写饱和逻辑: 如果此指令不指明舍入,就会存储一个 截取的 1.15 数据值,简单地丢弃低位字 (least signifi- cant wordlsw)。
常规舍入取累加器的 bit 15,对它进行零扩展并将扩展 后的值加到 ACCxH 字 (累加器的 bit 16 bit 31)。 如果 ACCxL 字 (累加器的 bit 0 bit 15)在 0x80000xFFFF 之间 (包括 0x8000 ), 则 ACCxH 递增 1。 如果 ACCxL 0x0000 0x7FFF 之间,则 ACCxH 不 变。此算法的结果经过一系列随机舍入操作,值将稍稍 偏大 (正偏)。
除非 ACCxL 等于 0x8000,否则收敛的(或无偏)舍入 操作方式与常规舍入相同。ACCxL 等于 0x8000 时,要 对 ACCxH 的最低位 (累加器的 bit 16)进行检测。 果它为 1ACCxH 递增 1 如果它为 0, ACCxH 不 变。 假设 bit 16 本身是随机的,这样的机制将消除任何 可能累加的舍入偏移。
通过 X 总线, SAC SAC.R 指令将目标累加器内容的 截取 (SAC)或舍入 (SAC.R)形式存入数据存储空间
(这受数据饱和的影响,见第 2.4.2.4 节 “数据空间写
饱和”)。注意,对于 MAC 类指令,累加器回写操作将 以同样的方式进行,通过 X 总线寻址组合的 MCU XY)数据空间。对于 MAC 类指令,数据始终要进行舍 入。
DS70118G_CN 16 2007 Microchip Technology Inc.
dsPIC30F2010
2.4.2.4 数据空间写饱和
除了加法器 / 减法器饱和,对数据空间进行写操作也会 饱和,但不会影响源累加器的内容。数据空间写饱和逻 辑块接受来自舍入逻辑块的一个 16 位的 1.15 小数值作 为输入,还接受来自源 (累加器)和 16 位舍入加法器 的溢出状态。这些经过组合,用来选择恰当的 1.15 小数 值作为输出,写入至数据存储空间中。
如果 CORCON 寄存器中的 SATDW 位置 1,将检测(经 过舍入或截取后的)数据是否溢出,并相应地进行调 整。如果输入数据大于 0x007FFF,则写入数据存储器 中的数据被强制为最大的正 1.15 值, 0x7FFF。如果输 入数据小于 0xFF8000,则写入数据存储器中的数据被 强制为最大的负 1.15 值, 0x8000。源累加器的最高位 位(bit 39)用来决定被检测的操作数的符号。
如果 CORCON 寄存器中的 SATDW 位没有置 1,则输 入数据都将通过,在任何情况下都不会被修改。

2.4.3 桶形移位寄存器

桶形移位寄存器在单个周期内最多可算术或逻辑右移 16 位或左移 16 位。源寄存器可以是两个 DSP 累加器 中的任何一个,或者是 X 总线(支持寄存器或存储器数 据的多位移位)。
移位寄存器需要一个有符号二进制值,用来确定移位操 作的幅度 (位数)和方向。正值将操作数右移。负值则 将操作数左移。值为 “0”则不改变操作数。
桶形移位寄存器是 40 位宽的,于是,它为 DSP 移位操 作提供了 40 位的结果,而为 MCU 移位操作提供 16 位 的结果。来自 X 总线的数据在桶形移位寄存器中的存放 方式是:右移则数据存放在 bit 16 bit 31,左移则存 放在 bit 0 bit 15
2007 Microchip Technology Inc. DS70118G_CN 17
dsPIC30F2010
注:
DS70118G_CN 18  2007 Microchip Technology Inc.
dsPIC30F2010

3.0 存储器构成

注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F 系列参考手册》(DS70046E_CN)。有关器件
指令集和编程的更多信息,请参阅 《dsPIC30F/33F 程序员 参考手册》(DS70157B_CN)。

3.1 程序地址空间

程序地址空间为 4M 指令字。它可通过一个 24 位值来寻 址,这24位值来自23PC、表指令有效地址(Effective AddressEA)或数据空间 EA (当按照表 3-1 定义的 那样,将程序空间映射到数据空间时)。注意,为了提 供与数据空间寻址的兼容性, 在两个连续的程序字之 间,程序空间地址递增量为 2
对于除 TBLRD/TBLWT 外的所有访问,用户程序空间访 问限制在低 4M 指令字地址范围 (0x000000 0x7FFFFE); TBLRD/TBLWT使用 TBLPAG<7>来决定 用户或配置空间访问。在表 3-1 “程序空间地址构成” 中,bit 23 允许访问器件 ID、用 户 ID 和配置位。对于其 他情形, bit 23 始终清零。
注: 图 3-1 所示的地址映射是概念性的,实际
的存储器配置取决于可用的存储器大小, 各器件的存储器配置可能会存在差异。
3-1
空间
用户存储
dsPIC30F2010
保留
保留 保留
保留 向量 0 向量 1
向量 52 向量 53
用户闪存
保留
1KB
间映射
复位 - GOTO指令
复位 - 目标地址
外部振荡器故障陷阱
地址错误陷阱 堆栈错误陷阱 算术警告陷阱
备用向量表
程序存储区
4K 个指令字)
(读为 0
数据 EEPROM
的程序存储空
000000 000002 000004
向量表
000014
00007E 000080 0000FE 000100
001FFE 002000
7FFBFE 7FFC00
7FFFFE
800000
保留
8005BE
空间
配置存储
UNITID32 个指令字)
保留
器件配置
寄存器
保留
DEVID(2)
8005C0
8005FE 800600
F7FFFE F80000
F8000E F80010
FEFFFE FF0000 FFFFFE
2007 Microchip Technology Inc. DS70118G_CN 第19
dsPIC30F2010

3-1 程序空间地址构成

访问类型
访问 空间
<23> <22:16> <15> <14:1> <0>
指令访问 用户 0 PC<22:1> 0
TBLRD/TBLWT 用户
TBLPAG<7:0> 数据 EA <15:0>
TBLPAG<7> = 0
TBLRD/TBLWT 配置
TBLPAG<7:0> 数据 EA <15:0>
TBLPAG<7> = 1)
程序空间可视性 用户 0 PSVPAG<7:0> 数据 EA <14:0>

3-2 访问程序空间中数据的地址生成

23
使用 程序计数器
0
程序空间地址
0程序计数器
选择
使用 程序空间 可视性
使用 表指令
注: 程序空间可视性不能用来对程序存储空间中字的 bit <23:16> 进行访问。
用户 / 配置
空间 选择
0
PSVPAG 寄存器
1/0
TBLPAG 寄存器
8
8
1
24 EA
EA
15
EA
16
字节
选择
DS70118G_CN 20 2007 Microchip Technology Inc.
dsPIC30F2010

3.1.1 使用表指令访问程序存储器中的数据

本器件架构取指令时是取 24 位宽的程序存储器。因此, 指令始终是对齐的。不过,由于器件架构是改进型哈佛 架构,数据也可以出现在程序空间中。
有两种方法可以访问程序空间:通过特殊的表指令,或 者通过把16K 字程序空间页重新映射到数据空间的上半 部分 (见第 3.1.2 节“使用程序空间可视性访问程序存 储器中的数据”)。 TBLRDL和 TBLWTL指令,提供了读 或写程序空间内任何地址的 lsw 的直接方法,无需通过 数据空间。TBLRDH TBLWTH 指令是可以把一个程序 空间字的高 8 位作为数据存取的惟一方法。
对于每个连续的 24 位程序字,PC 的递增量为 2。这 使 得程序存储器地址能够直接映射到数据空间地址。于 是,程序存储器可以看作是两个 16 位字宽的地址空间, 它们并排放置,具有相同的地址范围。TBLRDL
TBLWTL 访问存有低位数据字的空间, 而 TBLRDH TBLWTH 则访问存有最高有效数据字节的空间。
3-2说明了如何为表操作和数据空间访问(PSV = 1) 的创建 EA。这里, P<23:0> 指的是程序空间字,而 D<15:0> 指的是数据空间字。
3-3 程序数据表访问 (低位字)
PC 地址
0x000000 0x000002 0x000004
0x000006
00000000 00000000
00000000 00000000
23
器件提供了一组表指令,用来在程序空间和数据空间之 间传送字节或字大小的数据。
1. TBLRDL:表读低位
字:
读程序地址的低位字; P<15:0> 映射到
D<15:0>
字节:
读程序地址的 LSB 中的一个字节;
当字节选择 = 0 时, P<7:0> 映射到目的字节; 当字节选择 = 1 时, P<15:8> 映射到目的字节。
2. TBLWTL:表写低位字 (字节)(闪存编程的细
节,见第 6.0 节 “闪存程序存储器”)。
3. TBLRDH:表读高位
字:
读程序地址的高位字; P<23:16> 映射到
D<7:0> D<15:8> 始终 = 0。
字节:
读程序地址的 MSB 中的一个字节;
当字节选择= 0时,P<23:16> 映射到目的字节; 当字节选择 = 1 时,目的字节始终 = 0
4. TBLWTH:表写高位字 (字节)(闪存编程的细
节,见第 6.0 节 “闪存程序存储器”)。
16
8
0
程序存储器
“虚拟” 字节 (读为 0)。
TBLRDL.W
TBLRDL.B(Wn<0> = 0)
TBLRDL.B(Wn<0> = 1)
2007 Microchip Technology Inc. DS70118G_CN 21
dsPIC30F2010
3-4 程序数据表访问 (最高字节)
TBLRDH.W
PC 地址
0x000000
0x000002 0x000004 0x000006
程序存储器
“虚拟”字节 (读为 0
00000000 00000000
00000000 00000000
TBLRDH.B(Wn<0> = 1)

3.1.2 使用程序空间可视性访问程序存储器 中的数据

可选择将数据空间的高 32 KB 映射到任何 16K 字程序空 间页。这提供了通过 X 数据空间对存储的常量数据的透 明访问,而无需使用特殊指令(即 TBLRDL/H 和 TBLWTL/H 指令)。
如果数据空间 EA MSb 1,并且程序空间可视性使 能 (方法是在内核控制寄存器 CORCON 中把 PSV 位 置 1)时,就能通过数据空间访问程序空间。 CORCON 功能的讨论请参见第 2.4 节“DSP 引擎”。
正在执行的指令,如果要对这个区域进行数据访问的 话,就需要一个额外的指令周期,因为需要进行两次程 序空间读取操作。
注意,可寻址数据空间的上半部分始终是 X 数据空间的 一部分。于是,当 DSP 操作使用程序空间映射来访问 这个存储区域时, Y 数据空间通常应该存放 DSP 操作 的状态(可变)数据,而 X 数据空间通常应该存放系数
(常量)数据。
尽管每个数据空间地址, 0x8000 和更高,直接映射到 对应的程序存储器地址(见图 3-6),但只使用 24 位程 序字的低 16 位来存放数据。应该进行恰当的设置,使 得对高 8 位进行访问的指令都成为非法指令,以维持器 件的可靠性。指令编码的细节,请参见《dsPIC30F/33F 程序员参考手册》(DS70157B_CN)。
23
16
TBLRDH.BWn<0> = 0
注意,对于每个程序存储字 PC 都将递增 2,数据空间 地址的低 15 位将直接映射到相应程序空间地址的低 15 位。剩下的位由程序空间可视性页寄存器
PSVPAG<7:0>)提供,如图 3-5 所示。
注: 在表读 / 写期间,暂时禁止 PSV 访问。
对于使用 PSV 而又在 REPEAT 循环之外执行的指令:
下列指令,除了规定的执行时间之外,需要一个额 外的指令周期:
- 带数据操作数预取的 MAC 类指令
- MOV 指令
- MOV.D 指令
其他所有的指令,除了规定的指令执行时间之外,
需要两个额外的指令周期。
对于使用 PSV 而又在 REPEAT 循环内执行的指令:
下列情况,除了规定的指令执行时间之外,需要两 个额外的指令周期:
- 在第一次迭代中执行的指令
- 在最后一次迭代中执行的指令
- 由于中断而退出循环之前执行的指令
- 中断得到处理后而再次进入循环时执行的指令
• REPEAT 循环的所有其他各次迭代,都允许使用 PSV 访问数据的指令在一个周期内执行。
8
0
DS70118G_CN 22  2007 Microchip Technology Inc.
3-5 数据空间通过程序空间可视性页映射到程序空间的操作
dsPIC30F2010
数据空间 程序空间
EA<15> =
数据
空间
EA
BSET CORCON,#2 ; PSV 位置 1 MOV #0x00, W0 ; 设置 PSVPAG 寄存器 MOV W0, PSVPAG MOV 0x9200, W0 ; 使用数据空间访问方法
16
EA<15> = 1
数据空间的上半部分 映射至程序空间
15
0
15
; 访问程序存储区地址单元
0x0000
0x8000
地址组合
15
0xFFFF
PSVPAG
0x00
8
(1)
23 15 0
23
数据读
0x100100
0x001200
0x001FFE
注: PSVPAG 是 8 位寄存器,包含程序空间地址的 bit <22:15>(即,它定义了程序空间页,数据空间的上半部分要 映射到这个程序空间页)。

3.2 数据地址空间

内核具有两个数据空间。数据空间可以看作是独立的
(对于某些 DSP 指令而言),或者看作是统一的线性地
址范围 (对于 MCU 指令而言)。使用两个地址发生单 元(Address Generation Units, AGU)和独立的数据 路径访问数据空间。

3.2.1 数据存储空间映射

数据存储空间分为两块,X Y 数据空间。这个架构的 关键之处在于,Y 空间是 X 空间的子集,Y 空间完全包 含在 X 中。为了提供外在的线性寻址空间,X Y 空间 要有连续的地址。
在执行除 MAC 类指令之外的任何指令时, X 块由 256 字节数据地址空间(包括全部 Y 地址)组成。在执行一 条 MAC 类指令时,X 块由 256 字节数据地址空间组成, 但不包括 Y 地址块 (只用来读数据)。换句话说,所有 其他指令把整个数据存储空间当作一个复合的地址空 间。 MAC 类指令把 Y 地址空间从数据空间中抽取出来, 使用源自 W10 W11 EA 来寻址 Y 地址空间。剩下 的 X 数据空间则使用 W8 W9 来寻址。只有 MAC 类指 令才能同时访问两个地址空间。
数据存储空间映射如图 3-6 所示。
2007 Microchip Technology Inc. DS70118G_CN 23
dsPIC30F2010
3-6 数据存储空间映射
SFR 空间
(注)
512 字节 SRAM 空间
MSB
地址
0x0001
0x07FF 0x0801
0x08FF 0x0901
0x09FF 0x0A00
(注)
0x8001
16
LSBMSB
SFR 空间
X 数据 RAM(X)
256 字节
Y 数据 RAM(Y)
256 字节
LSB
地址
0x0000
0x07FE 0x0800
2560 字节 Near
数据空间
0x08FE 0x0900
0x8000
X 数据
未用(X
可选择 映射至 程序存储区
0xFFFF
注: 未用的 SFR SRAM 存储单元读为 0
0xFFFE
DS70118G_CN 24  2007 Microchip Technology Inc.
3-7 用于 MCU DSP MAC 类)指令的数据空间
dsPIC30F2010
SFR 空间
未用
Y 空间)
X 空间
MAC 类操作(读 / 写) MAC 类操作 ( 只读 )
MAC 类操作(写)
使用任何 W 寄存器的间接 EA 使用 W8 W9 的间接 EA 使用 W10 W11 的间接 EA
Y 空间
未用
SFR 空间
未用
X 空间
X 空间
2007 Microchip Technology Inc. DS70118G_CN 第25
dsPIC30F2010

3.2.2 数据空间

X 数据空间为全部指令所使用,支持全部的寻址模式。
读数据总线和写数据总线是独立的。X 读数据总线是所 有指令的返回数据路径,它把数据空间视为复合的 X Y 地址空间。对于双操作数读指令(MAC 类),它还是 X 地址空间的数据路径。对于所有指令而言,X 写数据总 线是至数据空间的只写路径。
X 数据空间还支持所有指令的模寻址,不过要受到寻址 模式的限制。位反转寻址只是在写 X 数据空间时才支 持。
MAC 类指令(CLR、ED、EDAC、MAC、MOVSAC、MPY MPY.NMSC)使用的 Y 数据空间,协同 X 数据空间,提
供了两条并行的数据读取路径。Y 总线上不会出现写操 作。MAC 类指令使用两个专用的 W 寄存器指针 ,W10W11,它们始终寻址 Y 数据空间,与 X 数据空间独 立;而 W8 W9 则始终寻址 X 数据空间。注意,在累 加器回写期间,数据地址空间视为 X Y 数据空间的组 合,从而写操作通过 X 总线进行。所以,可以写整个数 据空间中的任何地址。
Y 数据空间仅用于与 MAC 类指令关联的数据预取操作。 它也支持自动循环缓冲区的模寻址。当然,所有其他指 令可以通过 X 数据路径来把 Y 数据地址空间作为复合线 性空间的一部分来进行访问。
3-6 给出了 X Y 数据空间之间的边界定义,用户不 能设定改变边界。如果 EA 指向其所在地址空间之外的 数据,或者指向物理存储器之外的存储单元,将返回全 零的字 / 字节。例如,尽管 Y 地址空间对于使用任何寻 址模式的所有非 MAC 类指令而言,是可见的,如果一条 MAC 类指令试图使用 W8 W9(X 空间指针)从 Y 地址 空间取数据,将返回 0x0000
3-2 非法存储器访问的后果
试图进行的操作 返回数据 EA = 未实现地址 0x0000
MAC 类指令中使用 W8 或 W9 访 问 Y 数据空间
MAC 类指令中使用 W10 W11 访问 X 数据空间
所有有效地址都是 16 位宽的,且指向数据空间内的字 节。所以,数据空间地址范围是 64KB 32K 字。
0x0000
0x0000

3.2.3 数据空间宽度

内核数据宽度为 16 位。所有内部寄存器都按照 16 位宽 的字来组织。数据存储空间以字节可寻址的 16 位宽的 块来组织。

3.2.4 数据对齐

为了维持与 PIC 存储空间的使用效率,dsPIC30F指令集既支持字操作, 也支持字节操作。在数据存储器和寄存器中,数据按照 字来对齐,但是,所有数据空间有效地址都将解析为字 节。数据字节读取将读取包含字节的整个字,使用任何 有效地址 (EA)的 LSb 确定要选取的字节。 选取的字 节将存放到 X 数据路径的 LSB 中 (不可能出现来自 Y 数据路径的字节访问,因为 MAC 类指令只能取整字)。 这就是说,数据存储器和寄存器组织为两个并行的字节 宽的实体,它们共享 (字)地址译码,但写入线独立。 数据字节写,将只写阵列或寄存器中与字节地址匹配的 那一侧。
这种字节可访问能力的结果是,所有的有效地址计算
(包括那些由 DSP 操作产生的有效地址,它们只能是字
长度的数据)在内部进行换算,以适应字对齐的存储空 间。例如,内核将识别执行后修改寄存器间接寻址模式 [Ws++] 的结果,对于字节操作产生的值是 Ws + 1,而对 于字操作产生的值是 Ws + 2
所有的字访问必须按照偶数地址对齐。不支持没有对齐 的字数据取,所以在混和字节和字操作时,或者从 8 MCU 代码进行转换时,必须要小心。如果试图进行未对 齐的读或写,将产生地址错误陷阱。如果在读操作时产 生错误,正在执行的指令将完成,而如果在写操作时产 生错误,指令仍将执行,但不会进行写入。无论是哪种 情况,都将产生陷阱,从而系统和 / 或用户能够检查地 址错误发生之前的机器状态。
®
MCU 器件的向后兼容性,并提高数据
3-8:数
15 8 7 0
0001
0003
0005
字节 1 字节 0
字节 3 字节 2
字节 5 字节 4
LSBMSB
0000
0002
0004
DS70118G_CN 26  2007 Microchip Technology Inc.
dsPIC30F2010
所有载入 W 寄存器的字节都将载入 W 寄存器的 LSB W 寄存器的 MSB 不变。
提供了一条符号扩展 (SE)指令,允许用户把 8 位的 有符号数据转换为 16 位有符号值。或者,对于 16 位无 符号数据,用户可以清零任何 W 寄存器的 MSB,方法 是在相应的地址处执行一条零扩展 (ZE)指令。
尽管大多数指令能够对字或字节大小的数据进行操作, 但应该注意的是,一些指令,包括 DSP 指令,只对字 大小的数据进行操作。

3.2.5 NEAR 数据空间

X 地址存储空间中,在 0x0000 和 0x1FFF 之间保留了一
8KB near 数据空间;在所有的存储器直接寻址指 令中,可以通过一个 13 位的绝对地址来直接访问这个 数据空间。其余的 X 地址空间和全部的 Y 地址空间都是 间接可寻址的。此外,使用 MOV 指令可以寻址整个 X 数 据空间,这支持通过 16 位地址字段进行存储器直接寻 址。

3.2.6 软件堆栈

dsPIC DSC 器件具备一个软件堆栈。 W15 用作堆栈指
针。
堆栈指针总是指向堆栈顶部第一个可供使用的字,从低 地址到高地址方向增长。堆栈指针在弹出堆栈之前递 减,而在压入堆栈后递增,如图 3-9 所示。注意,对于 任何 CALL 指令时的 PC 压栈,在压入堆栈之前, PCMSB要进行零扩展,从而确保了MSB始终是清零的。
注: 在异常处理期间,在 PC 压入堆栈之前,
先将PC 的MSBSRL寄存器组合在一起。 堆栈指针限制寄存器 (SPLIM)与堆栈指针相关联。复 位时 SPLIM 未被初始化。与堆栈指针的情况一样, SPLIM<0> 强制为 0,因为所有的堆栈操作必须是字对 齐的。每当使用 W15 作为源指针或目的指针产生 EA 时,将与 SPLIM 中的值进行比较。如果堆栈指针
W15)与 SPLIM 寄存器的内容相等,则执行压入操
作,不产生堆栈错误陷阱。但在随后的压栈操作时将会 产生堆栈错误陷阱。这样的话,当堆栈增长超过 RAM 中地址 0x2000 时,如果要想产生堆栈错误陷阱,用值 0x1FFE 来初始化 SPLIM 即可。
类似地,当堆栈指针地址小于 0x0800 时,就会产生堆 栈指针下溢 (堆栈错误)陷阱,这避免了堆栈干预特殊 功能寄存器 (SFR)空间。
在对 SPLIM 寄存器进行写操作之后,不应紧跟着使用 W15 进行间接读操作的指令。
3-9 CALL 堆栈帧
0x0000
000000000
< 空字 >
 堆栈往高地址递增
PC<15:0>
PC<22:16>
015
W15 CALL 前)
W15CALL 后)
弹出堆栈: [--W15] 压入堆栈: [W15++]
2007 Microchip Technology Inc. DS70118G_CN 第27
DS70118G_CN28 2007 Microchip Technology Inc.
3-3 内核寄存器映射
SFR 名称
W0 0000 W0/WREG
W1 0002 W1
W2 0004 W2
W3 0006 W3
W4 0008 W4
W5 000A W5
W6 000C W6
W7 000E W7
W8 0010 W8
W9 0012 W9
W10 0014 W10
W11 0016 W11
W12 0018 W12
W13 001A W13
W14 001C W14
W15 001E W15
SPLIM 0020 SPLIM
ACCAL 0022 ACCAL
ACCAH 0024 ACCAH
ACCAU 0026 符号扩展 (ACCA<39> ACCAU
ACCBL 0028 ACCBL
ACCBH 002A ACCBH
ACCBU 002C 符号扩展 (ACCB<39> ACCBU
PCL 002E PCL
PCH 0030
TBLPAG 0032
PSVPAG 0034
RCOUNT 0036 RCOUNT
DCOUNT 0038 DCOUNT
DOSTARTL 003A DOSTARTL 0
DOSTARTH 003C
DOENDL 003E DOENDL 0
DOENDH 0040
SR 0042 OA OB SA SB OAB SAB DA DC IPL2 IPL1 IPL0 RA N OV Z C
图注: u = 未初始化位
注: 有关寄存器各位的描述,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN)。
地址
Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
—PCH
—TBLPAG
PSVPAG
—DOSTARTH
DOENDH
dsPIC30F2010
复位状态
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuu0 0000 0000 0uuu uuuu uuuu uuuu uuuu uuu0 0000 0000 0uuu uuuu 0000 0000 0000 0000
Loading...
+ 172 hidden pages