dsPIC30F6010A/6015
深圳市粤原点科技有限公司
(Microchip Authorized Design Partner)指定授权
总部地址:深圳市福田区福虹路世贸广场C座1103座
Add: Room 1103,Block C,World Trade Plaza,
9Fuhong Road,Futian District Shen Zhen City
电话(tel) :86-755-83666321,83666320,83666325
传真(fax) :86-755-83666329
Web: WWW.ORIGIN-GD.COM
E-mail:01@LZmcu.com abc85185@163.com
联系人:马先生,王小姐,汤小姐
在线咨询:QQ:42513912 MSN:action_tech@hotmail.com
7x24小时在线产品咨询:13509674380 13798484366
数据手册
高性能 16 位
数字信号控制器
2007 Microchip Technology Inc. DS70150B_CN
请注意以下有关 Microchip 器件代码保护功能的要点:
•M i c r o c h i p的产品均达到 Microchip 数据手册中所述的技术指标。
•M i c r o c h i p确信:在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一。
• 目前,仍存在着恶意、甚至是非法破坏代码保护功能的行为。就我们所知,所有这些行为都不是以 Microchip 数据手册中规定的
操作规范来使用 Microchip 产品的。这样做的人极可能侵犯了知识产权。
•M i c r o c h i p愿与那些注重代码完整性的客户合作。
•M i c r o c h i p或任何其他半导体厂商均无法保证其代码的安全性。代码保护并不意味着我们保证产品是 “牢不可破”的。
代码保护功能处于持续发展中。 Microchip 承诺将不断改进产品的代码保护功能。任何试图破坏 Microchip 代码保护功能的行为均可视
为违反了 《数字器件千年版权法案 (Digital Millennium Copyright Act )》。如果这种行为导致他人在未经授权的情况下,能访问您的
软件或其他受版权保护的成果,您有权依据该法案提起诉讼,从而制止这种行为。
提供本文档的中文版本仅为了便于理解。请勿忽视文档中包含
的英文部分,因为其中提供了有关 Microchip 产品性能和使用
情况的有用信息。Microchip Technology Inc. 及其分公司和相
关公司、各级主管与员工及事务代理机构对译文中可能存在的
任何差错不承担任何责任。建议参考 Microchip Technology
Inc. 的英文原版文档。
本出版物中所述的器件应用信息及其他类似内容仅为您提供便
利,它们可能由更新之信息所替代。确保应用符合技术规范,
是您自身应负的责任。Microchip 对这些信息不作任何明示或
暗示、书面或口头、法定或其他形式的声明或担保,包括但不
限于针对其使用情况、质量、性能、适销性或特定用途的适用
性的声明或担保。 Microchip 对因这些信息及使用这些信息而
引起的后果不承担任何责任。如果将 Microchip 器件用于生命
维持和 / 或生命安全应用,一切风险由买方自负。买方同意在
由此引发任何一切伤害、索赔、诉讼或费用时,会维护和保障
Microchip 免于承担法律责任,并加以赔偿。在 Microchip 知识
产权保护下,不得暗中或以其他方式转让任何许可证。
商标
Microchip 的名称和徽标组合、 Microchip 徽标、 Accuron、
dsPIC、 K
EEL OQ、 K EEL OQ 徽标、 microID 、 MPLAB、 PIC、
PICmicro、 PICSTART、 PRO MATE、 rfPIC 和 SmartShunt
均为 Microchip Technology Inc . 在美国和其他国家或地区的
注册商标。
AmpLab、 FilterLab、 Linear Active Thermistor、 Migratable
Memory、 MXDEV、 MXLAB、 SEEVAL、 SmartSensor 和
The Embedded Control Solutions Company 均为 Microchip
Technology Inc. 在美国的注册商标。
Analog-for-the-Digital Age、 Application Maestro、
CodeGuard、 dsPICDEM、 dsPICDEM.net、 dsPICworks、
ECAN、 ECONOMONITOR、 FanSense、 FlexROM、
fuzzyLAB、 In-Circuit Serial Programming、 ICSP、 ICEPIC、
Mindi、 MiWi、 MPASM、 MPLAB Certified 徽标、 MPLIB、
MPLINK、 PICkit、 PICDEM、 PICDEM.net、 PICLAB、
PICtail、 PowerCal、 PowerInfo、 PowerMate、 PowerTool、
REAL ICE、rfLAB、 Select Mode、 Smart Serial、SmartTel、
Total Endurance、 UNI/O、 WiperLock 和 ZENA 均为
Microchip Technology Inc. 在美国和其他国家或地区的商标。
SQTP 是 Microchip Technology Inc. 在美国的服务标记。
在此提及的所有其他商标均为各持有公司所有。
© 2007, Microchip Technology Inc. 版权所有。
Microchip
Gresham
印度的设计中心均通过了
MCU与dsPIC® DSC、KEE LOQ
设、非易失性存储器和模拟产品方面的质量体系流程均符合
16949:2002
系也已通过了
位于美国亚利桑那州
的全球总部、设计和晶圆生产厂及位于美国加利福尼亚州和
。此外,
Microchip
ISO 9001:2000
Chandler和Te mp e
ISO/TS-16949:2002
®
跳码器件、串行
在开发系统的设计和生产方面的质量体
认证。
与位于俄勒冈州
认证。公司在
EEPROM
®
PIC
、单片机外
ISO/TS-
DS70150B_CN 第 ii 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
dsPIC30F6010A/6015 增强型闪存
16 位数字信号控制器 ( DSC)
注: 本数据手册总结了 dsPIC30F 系列器件的功能,但
并不作为参考大全使用。有关 CPU 、外设、寄存器说明
和一般器件功能的更多信息,请参见《dsPIC30F 系列参
考手册》(DS70046E_CN )。有关器件指令集和编程的
更多信息,请参见 《dsPIC30F/33F 程序员参考手册》
(DS70157B_CN )。
高性能改进型 RISC CPU :
• 改进的哈佛架构
• 带有灵活寻址模式的优化的 C 语言编译器指令集
架构
• 83 条基本指令
• 24 位宽指令, 16 位宽数据路径
• 144 KB 片上闪存程序空间 (指令字)
• 8 KB 片上数据 RAM
• 4 KB 非易失性数据 EEPROM
• 工作速度最高可达 30 MIPS :
-DC至 40 MHz 外部时钟输入
- 4 MHz-10 MHz 振荡器输入,带 PLL
( 4 倍频、 8 倍频和 16 倍频)
- 7.37 MHz 内部 RC,带有效的 PLL
( 4 倍频、 8 倍频和 16 倍频)
• 44 个中断源:
-5个外部中断源
- 每一个中断源具有 8 个用户可选择的中断优
先级
-4个处理器陷阱源
• 16 x 16 位工作寄存器阵列
DSP 引擎特性:
• 双数据取操作
• DSP 运算的累加器回写操作
• 模寻址和位反转寻址模式
• 两个具备可选饱和逻辑的 40 位宽累加器
• 17 位 x 17 位单周期硬件小数 / 整数乘法器
• 所有 DSP 指令均为单周期指令
• 在一个周期内可将数据左右移动 16 位
外设特性:
• 高灌 / 拉电流 I/O 引脚: 25 mA/25 mA
• 带可编程预分频器的定时器模块:
-5个 16 位定时器 / 计数器;可选择将 16 位定
时器配对组成 32 位定时器模块
• 16 位捕捉输入功能
• 16 位比较 /PWM 输出功能
• 3 线 SPI
2
• I
址
• 2 个带有 FIFO 缓冲区的 UART 模块
• 2 个符合 2.0B 的 CAN 模块 (dsPIC306010A)
• 1 个符合 2.0B 的 CAN 模块 (dsPIC306015)
模块 (支持 4 种帧模式)
CTM模块支持多主器件 / 从模式和 7 位 /10 位寻
电机控制 PWM 模块特性:
• 8 个 PWM 输出通道:
- 互补或独立输出模式
- 边沿对齐模式和中心对齐模式
• 4 个占空比发生器
• 专用时基
• 可编程输出极性
• 互补模式的死区时间控制
• 手动输出控制
• A/D 转换触发器
正交编码器接口模块特性:
• A 相、 B 相和索引脉冲输入
• 16 位递增 / 递减位置计数器
• 计数方向状态
• 位置测量 (x2 和 x4)模式
• 输入端上的可编程数字噪声滤波器
• 备用 16 位定时器 / 计数器模式
• 位置计数器计满回零 / 下溢时产生中断
2007 Microchip Technology Inc. DS70150B_CN 第1 页
dsPIC30F6010A/6015
模拟特性:
• 上电复位 (Power-on Reset , POR )、上电延时
定时器 (Power-up Timer , PWRT )以及振荡器
• 10 位模数转换器 ( Analog-to-Digital Converter,
ADC)具有 4 个采样 / 保持输入:
- 转换速率为 1 Msps
-16个输入通道
- 在休眠和空闲模式下可以进行转换
• 可编程欠压复位
单片机的特殊性能:
• 增强型闪存程序存储器:
- 对于工业级温度范围,最少擦写次数 1 万次,
起振定时器 ( Oscillator Start-up Timer, OST)
• 灵活的看门狗定时器 ( Watchdog Timer, WDT)
带有片上低功耗 RC 振荡器,能保证可靠的运行
• 故障保护时钟监视器操作检测时钟故障,并切换
到片上低功耗 RC 振荡器
• 可编程代码保护
• 在线串行编程 ( In-Circuit Serial
Programming™ , ICSP™ )功能
• 可选择的功耗管理模式
- 休眠、空闲和备用时钟模式
典型擦写次数 10 万次。
• 数据 EEPROM 存储器:
- 对于工业级温度范围,最少擦写次数 10 万
次,典型擦写次数 100 万次。
• 软件控制下,可以自行再编程
CMOS 技术:
• 低功耗高速度闪存技术
• 宽工作电压范围为 2.5V 到 5.5V
• 工业级温度范围和扩展级温度范围
• 低功耗
dsPIC30F 电机控制和功耗转换系列 *
器件 引脚程序存储器字节 /
指令
dsPIC30F2010 28 12K/4K 512 1024 3 4 2
dsPIC30F3010 28 24K/8K 1024 1024 5 4 2
dsPIC30F4012 28 48K/16K 2048 1024 5 4 2
dsPIC30F3011 40/4424K/8K 1024 1024 5 4 4
SRAM字节EEPROM
字节
16 位
定时器输入捕捉
比较 / 标准
PWM
输出
电机
10 位 A/D
控制
转换速率为
PWM
6 通道 6 通道 有
6 通道 6 通道 有
6 通道 6 通道 有
6 通道 9 通道 有
1 Msps
正交
编码
器
C™
SPI
2
UART
1 1 1
1 1 1
1 1 1 1
2 1 1
I
CAN
-
-
-
dsPIC30F4011 40/4448K/16K 2048 1024 5 4 4
dsPIC30F5015 64 66K/22K 2048 1024 5 4 4
dsPIC30F5016
dsPIC30F6010A
dsPIC30F6015 64 144K/48K 8192 4096 5 8 8
* 该表给出了 dsPIC30F 外设特性的汇总。 上表所列的其他 dsPIC30F 电机控制和功耗转换系列器件供特性比较。
80 66K/22K 2048 1024 5 4 4
80 144K/48K 8192 4096 5 8 8
6 通道 9 通道 有
8 通道 16 通道 有
8 通道 16 通道 有
8 通道 16 通道 有
8 通道 16 通道 有
2 1 1 1
1 2 1 1
1 2 1 1
2212
2211
DS70150B_CN 第2 页 2007 Microchip Technology Inc.
引脚图
80 引脚 TQFP
PWM3L/RE4
dsPIC30F6010A/6015
DD
OC8/UPDN/CN16/RD7
OC6/CN14/RD5
PWM2L/RE2
PWM1L/RE0
C2RX/RG0
PWM2H/RE3
PWM1H/RE1
C2TX/RG1
C1TX/RF1
C1RX/RF0
V
OC7/CN15/RD6
VSS
IC5/RD12
OC5/CN13/RD4
IC6/CN19/RD13
OC4/RD3
OC3/RD2
EMUD2/OC2/RD1
PWM3H/RE5
PWM4L/RE6
PWM4H/RE7
T2CK/RC1
T4CK/RC3
SCK2/CN8/RG6
SDI2/CN9/RG7
SDO2/CN10/RG8
MCLR
SS2/CN11/RG9
V
VDD
FLTA/INT1/RE8
FLTB/INT2/RE9
AN5/QEB/CN7/RB5
AN4/QEA/CN6/RB4
AN3/INDX/CN5/RB3
AN2/SS1
/CN4/RB2
PGC/EMUC/AN1/CN3/RB1
PGD/EMUD/AN0/CN2/RB0
80
79
1
2
3
4
5
6
7
8
9
10
SS
11
12
13
14
15
16
17
18
19
20
21
22
2324252627282930313233
AN7/RB7
REF-/RA9
V
VREF +/RA10
AN6/OCFA/RB6
DD
AV
75
767877
AVSS
727473
7170696867666564636261
dsPIC30F6010A
DD
VSS
V
AN8/RB8
AN9/RB9
AN10/RB10
AN11/RB11
34
AN12/RB12
AN13/RB13
35
AN14/RB14
EMUC1/SOSCO/T1CK/CN0/RC14
60
EMUD1/SOSCI/CN1/RC13
59
EMUC2/OC1/RD0
58
IC4/RD11
57
IC3/RD10
56
IC2/RD9
55
IC1/RD8
54
INT4/RA15
53
52
INT3/RA14
V
51
50
49
48
47
46
45
44
43
42
41
40
39
38
37
36
IC8/CN21/RD15
IC7/CN20/RD14
U2RX/CN17/RF4
SS
OSC2/CLKO/RC15
OSC1/CLKI
DD
V
SCL/RG2
SDA/RG3
EMUC3/SCK1/INT0/RF6
SDI1/RF7
EMUD3/SDO1/RF8
U1RX/RF2
U1TX/RF3
U2TX/CN18/RF5
AN15/OCFB/CN12/RB15
注 : 引脚可能更改。
2007 Microchip Technology Inc. DS70150B_CN 第3 页
dsPIC30F6010A/6015
引脚图
64 引脚 TQFP
PWM3L/RE4
PWM2H/RE3
PWM2L/RE2
PWM1L/RE0
C1TX/RF1
PWM1H/RE1
SS
OC8/UPDN/CN16/RD7
V
VDD
C1RX/RF0
OC7/CN15/RD6
OC6/IC6/CN14/RD5
OC4/RD3
OC5/IC5/CN13/RD4
OC3/RD2
EMUD2/OC2/RD1
PWM3H/RE5
PWM4L/RE6
PWM4H/RE7
SCK2/CN8/RG6
SDI2/CN9/RG7
SDO2/CN10/RG8
AN5/QEB/IC8/CN7/RB5
AN4/QEA/IC7/CN6/RB4
AN3/INDX/CN5/RB3
AN2/SS1
AN1/V
AN0/V
MCLR
/CN11/RG9
SS2
/CN4/RB2
REF-/CN3/RB1
REF+/CN2/RB0
VSS
VDD
646362616059585756
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
171819202122232425
AVSS
AVDD
AN8/RB8
PGD/EMUD/AN7/RB7
PGC/EMUC/AN6/OCFA/RB6
55
dsPIC30F6015
26
SS
V
VDD
AN9/RB9
AN10/RB10
AN11/RB11
545352
28
27
AN12/RB12
AN13/RB13
504951
31
30
29
AN14/RB14
U2RX/CN17/RF4
AN15/OCFB/CN12/RB15
48
EMUC1/SOSCO/T1CK/CN0/RC14
47
EMUD1/SOSCI/T4CK/CN1/RC13
46
EMUC2/OC1/RD0
IC4/INT4/RD11
45
44
IC3/INT3/RD10
IC2/FLTB/INT2/RD9
43
IC1/FLTA/INT1/RD8
42
V
41
SS
40
OSC2/CLKO/RC15
39
OSC1/CLKI
38
V
DD
37
SCL/RG2
36
SDA/RG3
35
EMUC3/SCK1/INT0/RF6
34
U1RX/SDI1/RF2
33
EMUD3/U1TX/SDO1/RF3
32
U2TX/CN18/RF5
注 : 引脚可能更改。
DS70150B_CN 第4 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
目录
1.0 器件概述 ...................................................................................................................................................................................... 7
2.0 CPU 架构概述 ........................................................................................................................................................................... 13
3.0 存储器构成 ................................................................................................................................................................................ 21
4.0 地址发生器单元 ......................................................................................................................................................................... 33
5.0 中断 ........................................................................................................................................................................................... 39
6.0 闪存程序存储器 ......................................................................................................................................................................... 47
7.0 数据 EEPROM 存储器 ............................................................................................................................................................... 53
8.0 I/O 端口 ..................................................................................................................................................................................... 57
9.0 Timer1 模块 ............................................................................................................................................................................... 63
10.0 Timer2/3 模块 ............................................................................................................................................................................ 67
11.0 Timer4/5 模块 ............................................................................................................................................................................ 75
12.0 输入捕捉模块 ............................................................................................................................................................................. 79
13.0 输出比较模块 ............................................................................................................................................................................. 83
14.0 正交编码器接口 ( QEI)模块 .................................................................................................................................................... 87
15/0 电机控制 PWM 模块 .................................................................................................................................................................. 93
16.0 SPI 模块 .................................................................................................................................................................................. 103
17.0 I2C™ 模块 ............................................................................................................................................................................... 107
18.0 通用异步收发器 ( UART)模块 .............................................................................................................................................. 115
19.0 CAN 模块 ................................................................................................................................................................................. 123
20.0 10 位高速模数转换器 ( ADC)模块 ........................................................................................................................................ 135
21.0 系统集成 .................................................................................................................................................................................. 147
22.0 指令集汇总 .............................................................................................................................................................................. 163
23.0 开发支持 .................................................................................................................................................................................. 171
24.0 电气特性 .................................................................................................................................................................................. 175
25.0 封装信息 .................................................................................................................................................................................. 215
附录 A : 版本历史 ........................................................................................................................................................................ 219
附录 B : 器件比较 ....................................................................................................................................................................... 221
附录 C : 从 dsPIC30F6010 移植到 dsPIC30F6010A .................................................................................................................. 223
索引.................................................................................................................................................................................................. 225
Microchip 网站 ................................................................................................................................................................................... 231
变更通知客户服务 .............................................................................................................................................................................. 231
客户支持............................................................................................................................................................................................. 231
读者反馈表 ......................................................................................................................................................................................... 232
产品标识体系 ..................................................................................................................................................................................... 233
致客户
我们旨在提供最佳文档供客户正确使用 Microchip 产品为此,我们将不断改进出版物的内容和质量,使之更好地满足您的要求。出
版物的质量将随新文档及更新版本的推出而得到提升。
如果您对本出版物有任何问题和建议,请通过电子邮件联系我公司 TRC 经理,电子邮件地址为 CTRC@microchip.com ,或将本
数据手册后附的 《读者反馈表》传真到 86-21-5407 5066 。我们期待您的反馈。
最新数据手册
欲获得本数据手册的最新版本,请查询我公司的网站:
http://www.microchip.com
查看数据手册中任意一页下边角处的文献编号即可确定其版本。文献编号中数字串后的字母是版本号,例如:DS30000A是DS30000
的 A 版本。
勘误表
现有器件可能带有一份勘误表,描述了实际运行与数据手册中记载内容之间存在的细微差异以及建议的变通方法。一旦我们了解到
器件 / 文档存在某些差异时,就会发布勘误表。勘误表上将注明其所适用的硅片版本和文件版本。
欲了解某一器件是否存在勘误表,请通过以下方式之一查询:
• Microchip 的网站:http://www.microchip.com
• 当地 Microchip 销售办事处 (见最后一页)
在联络销售办事处时,请说明您所使用的器件型号、硅片版本和数据手册版本 (包括文献编号)。
客户通知系统
欲及时获知 Microchip 产品的最新信息,请到我公司网站 www.microchip.com 上注册。
2007 Microchip Technology Inc. DS70150B_CN 第5 页
dsPIC30F6010A/6015
注:
DS70150B_CN 第6 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
1.0 器件概述
注: 本数据手册总结了 dsPIC30F系列器件的功能,但并
不作为参考大全使用。有关 CPU 、外设、寄存器说明和
一般器件功能的更多信息,请参见 《dsPIC30F 系列参
考手册》(DS70046E_CN )。有关器件指令集和编程的
更多信息,请参见 《dsPIC30F/33F 程序员参考手册》
(DS70157B_CN )。
该数据手册包含 dsPIC30F6010A 和 dsPIC30F6015 器
件的特定信息: dsPIC30F 系列器件在高性能 16 位单片
机(MCU)架构中融合了大量数字信号处理器 (Digital
Signal Processor, DSP)功能。图 1-1 给出了
dsPIC30F6010A 器件的框图。图1-2 给出了 dsPIC30F6015
器件的框图。
2007 Microchip Technology Inc. DS70150B_CN 第7 页
dsPIC30F6010A/6015
图 1-1 : dsPIC30F6010A 框图
中断
控制器
地址锁存器
程序存储器
(144 KB )
数据 EEPROM
(4 KB )
数据锁存器
至各模块
的控制信号
OSC1/CLKI
24
CAN1,
CAN2
SPI1,
SPI2
24
24
16
指令
译码和
控制
时序
发生
MCLR
VDD , VSS
AVDD , AVSS
PSV 和表
数据访问
控制模块
16
24
10 位 ADC
定时器
Y 数据总线
8
PCH PCL
PCU
程序计数器
堆栈
控制
逻辑
ROM 锁存器
上电
定时器
振荡器
起振定时器
POR/BOR
复位
看门狗
定时器
低电压
检测
16
16
Y AGU
循环
控制
逻辑
IR
译码
DSP
引擎
16
输入 输出
捕捉
模块
QEI
比较
模块
电机控制
PWM
16
Y 数据
RAM
( 4 KB)
地址
锁存器
16
有效地址
16 x 16
W 寄存器阵列
16
16
X 数据总线
16
数据锁存器 数据锁存器
(4 KB )
地址
16
X RAGU
X WAGU
16
除法
单元
ALU<16>
16
UART1,
UART2
16
X 数据
RAM
锁存器
I2C™
16
PORTA
16
PORTB
16
PORTC
PORTD
PORTE
VREF -/RA9
VREF +/RA10
INT3/RA14
INT4/RA15
PGD/EMUD/AN0/CN2/RB0
PGC/EMUC/AN1/CN3/RB1
AN2/SS1/CN4/RB2
AN3/INDX/CN5/RB3
AN4/QEA/CN6/RB4
AN5/QEB/CN7/RB5
AN6/OCFA/RB6
AN7/RB7
AN8/RB8
AN9/RB9
AN10/RB10
AN11/RB11
AN12/RB12
AN13/RB13
AN14/RB14
AN15/OCFB/CN12/RB15
T2CK/RC1
T4CK/RC3
EMUD1/SOSCI/CN1/RC13
EMUC1/SOSCO/T1CK/CN0/RC14
OSC2/CLKO/RC15
EMUC2/OC1/RD0
EMUD2/OC2/RD1
OC3/RD2
OC4/RD3
OC5/CN13/RD4
OC6/CN14/RD5
OC7/CN15/RD6
OC8/UPDN/CN16/RD7
IC1/RD8
IC2/RD9
IC3/RD10
IC4/RD11
IC5/RD12
IC6/CN19/RD13
IC7/CN20/RD14
IC8/CN21/RD15
PWM1L/RE0
PWM1H/RE1
PWM2L/RE2
PWM2H/RE3
PWM3L/RE4
PWM3H/RE5
PWM4L/RE6
PWM4H/RE7
FLTA/INT1/RE8
FLTB/INT2/RE9
C2RX/RG0
C2TX/RG1
SCL/RG2
SDA/RG3
SCK2/CN8/RG6
SDI2/CN9/RG7
SDO2/CN10/RG8
/CN11/RG9
SS2
PORTG PORTF
C1RX/RF0
C1TX/RF1
U1RX/RF2
U1TX/RF3
U2RX/CN17/RF4
U2TX/CN18/RF5
EMUC3/SCK1/INT0/RF6
SDI1/RF7
EMUD3/SDO1/RF8
DS70150B_CN 第8 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
图 1-2: dsPIC30F6015 框图
Y 数据总线
中断
控制器
地址锁存器
程序存储器
(144 KB )
数据 EEPROM
(4 KB )
数据锁存器
至各模块
的控制信号
OSC1/CLKI
24
24
24
16
指令
译码和
控制
时序
发生
MCLR
VDD , VSS
AVDD , AVSS
PSV 和表
数据访问
控制模块
24
PCU
程序计数器
堆栈
控制
逻辑
16
起振定时器
POR/BOR
8
PCH PCL
ROM 锁存器
IR
上电
定时器
振荡器
复位
看门狗
定时器
低电压
检测
16
循环
控制
逻辑
译码
16
DSP
引擎
16
16
Y 数据
RAM
( 4 KB)
地址
锁存器
16
Y AGU
有效地址
16
16 x 16
W 寄存器阵列
16
16
ALU<16>
X 数据总线
16
数据锁存器 数据锁存器
(4 KB )
地址
16
X RAGU
X WAGU
除法
单元
16
16
X 数据
RAM
锁存器
16
16
AN0/VREF +/CN2/RB0
AN1/VREF -/CN3/RB1
AN2/SS1/CN4/RB2
AN3/INDX/CN5/RB3
AN4/QEA/IC7/CN6/RB4
AN5/QEB/IC8/CN7/RB5
PGC/EMUC/AN6/OCFA/RB6
PGD/EMUD/AN7/RB7
AN8/RB8
AN9/RB9
AN10/RB10
AN11/RB11
AN12/RB12
AN13/RB13
AN14/RB14
PORTB
16
PORTC
PORTD
AN15/OCFB/CN12/RB15
EMUD1/SOSCI/T4CK/CN1/RC13
EMUC1/SOSCO/T1CK/CN0/RC14
OSC2/CLKO/RC15
EMUC2/OC1/RD0
EMUD2/OC2/RD1
OC3/RD2
OC4/RD3
OC5/IC5/CN13/RD4
OC6/IC6/CN14/RD5
OC7/CN15/RD6
OC8/UPDN/CN16/RD7
IC1/FLTA/INT1/RD8
IC2/FLTB/INT2/RD9
IC3/INT3/RD10
IC4/INT4/RD11
CAN1
SPI1,
SPI2
10 位 ADC
定时器
输入
捕捉
模块
QEI
SCK2/CN8/RG6
SDI2/CN9/RG7
SDO2/CN10/RG8
SS2
输出
比较
模块
电机控制
PWM
SCL/RG2
SDA/RG3
/CN11/RG9
I2C™
UART1,
UART2
PORTG PORTF
PORTE
PWM1L/RE0
PWM1H/RE1
PWM2L/RE2
PWM2H/RE3
PWM3L/RE4
PWM3H/RE5
PWM4L/RE6
PWM4H/RE7
C1RX/RF0
C1TX/RF1
U1RX/SDI1/RF2
EMUD3/U1TX/SDO1/RF3
U2RX/CN17/RF4
U2TX/CN18/RF5
EMUC3/SCK1/INT0/RF6
2007 Microchip Technology Inc. DS70150B_CN 第9 页
dsPIC30F6010A/6015
表 1-1 对器件的 I/O 引脚配置和端口引脚的复用功能进
行了简要描述。端口引脚可具有多种功能。当发生复用
时,外设模块的功能要求可强制改写端口引脚的数据方
向。
表 1-1 : dsPIC30F6010A/6015 I/O 引脚说明
引脚名称
AN0-AN15 I
AV
DD PP
AV
SS PP
CLKI
CLKO
CN0-CN23 I ST
C1RX
C1TX
C2RX
C2TX
EMUD
EMUC
EMUD1
EMUC1
EMUD2
EMUC2
EMUD3
EMUC3
IC1-IC8 I ST
INDX
QEA
QEB
UPDN
INT0
INT1
INT2
INT3
INT4
图注: CMOS = CMOS 兼容输入或输出 模拟 = 模拟输入
引脚
类型
I
O
I
O
I
O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I
I
I
O
I
I
I
I
I
ST = CMOS 电平的施密特触发器输入 O=输出
I=输入 P=电源
缓冲器
类型
模拟 模拟输入通道。 ANO 和 AN1 还分别用于器件编程数据和时钟输入。
模拟模块正电源。
模拟模块的参考地。
ST/CMOS
-
ST
-
ST
-
ST
ST
ST
ST
ST
ST
ST
ST
ST
ST
ST
CMOS
ST
ST
ST
ST
ST
外部时钟源输入。总是与 OSC1 引脚功能相关联。
振荡器晶振输出。在晶振模式下,连接到晶振或谐振器。在 RC 和 EC 模式下,
可选择作为 CLKO 。 总是与 OSC2 引脚功能相关联。
输入状态变化通知输入。可通过软件编程设定所有输入为内部弱上拉。
CAN1 总线接收引脚。
CAN1 总线发送引脚。
CAN2 总线接收引脚。
CAN2 总线发送引脚。
ICD 主通信通道数据输入 / 输出引脚。
ICD 主通信通道时钟输入 / 输出引脚。
ICD 第二通信通道数据输入 / 输出引脚。
ICD 第二通信通道时钟输入 / 输出引脚。
ICD 第三通信通道数据输入 / 输出引脚。
ICD 第三通信通道时钟输入 / 输出引脚。
ICD 第四通信通道数据输入 / 输出引脚。
ICD 第四通信通道时钟输入 / 输出引脚。
捕捉输入 1 到 8 。
正交编码器索引脉冲输入。
在 QEI 模式下为正交编码器 A 相输入。
在定时器模式下为辅助定时器外部时钟/门控输入。
在 QEI 模式下为正交编码器 A 相输入。
在定时器模式下为辅助定时器外部时钟/门控输入。
递增 / 递减位置计数器方向状态。
外部中断 0 。
外部中断 1 。
外部中断 2 。
外部中断 3 。
外部中断 4 。
说明
DS70150B_CN 第10 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
表 1-1 : dsPIC30F6010A/6015 I/O 引脚说明 (续)
引脚名称
FLTA
FLTB
PWM1L
PWM1H
PWM2L
PWM2H
PWM3L
PWM3H
PWM4L
PWM4H
MCLR
OCFA
OCFB
OC1-OC8
OSC1
OSC2
PGD
PGC
RA9-RA10
RA14-RA15
RB0-RB15 I/O ST
RC1
RC3
RC13 - RC15
RD0-RD15 I/O ST
RE0-RE9 I/O ST
RF0-RF8 I/O ST
RG0-RG3
RG6-RG9
SCK1
SDI1
SDO1
SS1
SCK2
SDI2
SDO2
SS2
SCL
SDA
SOSCO
SOSCI
T1CK
T2CK
T4CK
图注: CMOS = CMOS 兼容输入或输出 模拟 = 模拟输入
引脚
类型
I
I
O
O
O
O
O
O
O
O
I/P ST
I
I
O
I
I/O
I/O
I
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I
O
I
I/O
I
O
I
I/O
I/O
O
I
I
I
I
ST = CMOS 电平的施密特触发器输入 O=输出
I=输入 P=电源
缓冲器
类型
ST
ST
-
-
-
-
-
-
-
-
ST
ST
-
ST/CMOS
-
ST
ST
ST
ST
ST
ST
ST
ST
ST
ST
ST
-
ST
ST
ST
-
ST
ST
ST
-
ST/CMOS
ST
ST
ST
说明
PWM 故障 A 输入。
PWM 故障 B 输入。
PWM1 低端输出 。
PWM1 高端输出。
PWM2 低端输出。
PWM2 高端输出。
PWM3 低端输出。
PWM3 高端输出。
PWM4 低端输出。
PWM4 高端输出。
主复位输入或编程电压输入。本引脚为低电平有效的器件复位输入端。
比较故障 A 输入 (比较通道 1 、 2 、 3 和 4 )。
比较故障 B 输入 (比较通道 5 、 6 、 7 和 8 )。
比较输出 1 到 8 。
振荡器晶振输入。配置为 RC 模式时,为 ST 缓冲器;否则为 CMOS 。
振荡器晶振输出。在晶振模式下,连接到晶振或谐振器。在 RC 和 EC 模式下,
可选择作为 CLKO 。
在线串行编程数据输入/输出引脚。
在线串行编程时钟输入引脚。
PORTA 为双向 I/O 口。
PORTB 为双向 I/O 口。
PORTC 为双向 I/O 口。
PORTD 为双向 I/O 口。
PORTE 为双向 I/O 口。
PORTF 为双向 I/O 口。
PORTG 为双向 I/O 口。
SPI1 的同步串行时钟输入 / 输出。
SPI1 数据输入。
SPI1 数据输出。
SPI1 从同步。
SPI2 的同步串行时钟输入 / 输出。
SPI2 数据输入。
SPI2 数据输出。
SPI2 从同步。
2
C™ 的同步串行时钟输入 / 输出。
用于 I
用于 I 2C™ 的同步串行数据输入 / 输出。
32 kHz 低功耗晶振输出。
32 kHz 低功耗晶振输入。配置为 RC 模式时,为 ST 缓冲器;否则为 CMOS。
Timer1 外部时钟输入。
Timer2 外部时钟输入。
Timer4 外部时钟输入。
2007 Microchip Technology Inc. DS70150B_CN 第11 页
dsPIC30F6010A/6015
表 1-1 : dsPIC30F6010A/6015 I/O 引脚说明 (续)
引脚名称
U1RX
U1TX
U1ARX
U1ATX
U2RX
U2TX
DD P
V
V
SS P
VREF +I
V
REF-I
图注: CMOS = CMOS 兼容输入或输出 模拟 = 模拟输入
引脚
类型
I
O
I
O
I
O
ST = CMOS 电平的施密特触发器输入 O=输出
I=输入 P=电源
缓冲器
类型
ST
-
ST
-
ST
-
- 逻辑电路和 I/O 引脚的正电源。
- 逻辑电路和 I/O 引脚的参考地。
模拟 模拟参考电压 (高电压)输入。
模拟 模拟参考电压 (低电压)输入。
UART1 接收。
UART1 发送。
UART1 备用接收。
UART1 备用发送。
UART2 接收。
UART2 发送。
说明
DS70150B_CN 第12 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
2.0 CPU 架构概述
注: 本数据手册总结了 dsPIC30F 系列器件的功能,
但并不作为参考大全使用。有关 CPU 、外设、寄存
器说明和一般器件功能的更多信息,请参见
《dsPIC30F 系列参考手册》(DS70046E_CN )。有
关器件指令集和编程的更多信息,请参见
《dsPIC30F/33F 程序员参考手册》
(DS70157B_CN )。
本章概述了dsPIC30F6010A/6015 的CPU 和外设功能。
欲知功能的完整描述请参见《dsPIC30F 系列参考手册》
(DS70046E_CN )。
2.1 内核概述
该系列器件的内核具有 24 位指令字。程序计数器(PC )
为 23 位宽,且最低有效位(Least Significant bit ,LSb)
总是处于清零状态 (见第 3.1 节 “程序地址空间”)。
除某些专用指令外,在正常程序执行期间,忽略最高有
效位(Most Significant bit ,MSb )。鉴于此,PC 最多
可寻址 4M 指令字的用户程序空间。它使用指令预取机
制来帮助维持吞吐量。使用 DO 和 REPEAT 指令支持无
需循环计数管理开销的程序循环结构,这两条指令在任
何时候都可被中断。
工作寄存器阵列由 16 个 16 位寄存器组成,每个工作寄
存器都可以充当数据、地址或地址偏移量寄存器。工作
寄存器 (W15 )用作中断和调用操作的软件堆栈指针。
数据空间为 64 KB (32K 字),它被分成两块,分别称
为 X 数据存储区和 Y 数据存储区。每个存储区都有各自
独立的地址发生单元 (Address Generation Unit,
AGU )。大部分指令只通过 X 存储区 AGU 进行操作,这
样对外界而言数据空间就是单独而统一的。乘—累加
(MAC )类双源操作数 DSP 指令通过 X 和 Y 的 AGU 进
行操作,将数据地址空间分成两个部分 (见第 3.2 节
“数据地址空间”)。X 和 Y 数据空间的边界视具体器件
而定,不能由用户修改。每个数据字由 2 个字节组成,
大部分指令可以按字或字节对数据进行寻址。
访问程序存储器中的数据的方法有两种:
可以选择将数据存储空间的高
•
程序空间可视性页 (
,
Page
界内的程序空间的低半部分 (用户空间)。
间到数据空间的映射功能让任何指令都能像访问数
据空间一样访问程序空间。但访问需要占用一个额
外的指令周期。且使用此方法仅能访问每个指令字
的低
PSVPAG
16
位。
Program Space Visibility
)寄存器定义的任何
32 KB
映射到由8位
16K
程序字边
程序空
• 也可以通过表读 / 表写指令使用工作寄存器对程序
空间内大小为 32K 字的页进行线性间接访问。可
使用表读和表写指令访问一个指令字的所有 24
位。
X 和 Y 地址空间都支持无开销的循环缓冲区(模寻址)。
模寻址主要用于减少 DSP 算法的循环开销。
X AGU 还支持对目标有效地址 ( Effective Address,
EA)的位反转寻址,从而大幅简化了基 2 FFT 算法对输
入或输出数据的重新排序。欲知有关模寻址和位反转寻
址的详细信息,请参见第 4.0 节 “地址发生器单元”。
内核支持固有 (无操作数)寻址、相对寻址、立即数寻
址、存储器直接寻址、寄存器直接和寄存器间接寻址,
以及寄存器偏移量和立即数偏移量寻址模式。每条指令
根据其功能要求,与一组预定义的寻址模式相关。
对于大多数指令,在每个指令周期,内核能执行一次数
据(或程序数据)存储器读操作、一次工作寄存器(数
据)读操作、一次数据存储器写操作和一次程序 (指
令)存储器读操作。因此,可以支持 3 操作数的指令,
使 C=A+ B操作能在单周期内执行。
内核包含一个 DSP 引擎,从而能够显著增强内核的运
算和吞吐能力。 DSP 引擎具有一个高速 17 位× 17 位
乘法器、一个 40 位 ALU 、两 个 40 位饱和累加器和一个
40 位双向桶形移位寄存器。在单个周期内,至多可将累
加器或任何工作寄存器中的数据左右移动 16 位。 DSP
指令可以无缝地与所有其他指令一起操作,其设计可实
现最佳的实时性能。MAC 类指令可以同时从存储器中取
出两个数据操作数并将两个W 寄存器相乘。 这要求数据
空间对于这些指令拆分为两块,但对所有其他指令保持
线性。对于 MAC 类指令,这是通过将某些工作寄存器专
用于每个地址空间,以透明而灵活的方式实现的。
内核不支持多级指令流水线, 它采用的是单级指令预取
机制,该机制在执行指令的前一个周期取要执行的指令
并对其部分译码,从而使可用执行时间最长。除了某些
特例外,大部分指令都在一个指令周期内执行完毕。
内核具有用于处理陷阱和中断的向量异常处理结构,提
供 62 个独立向量。 异常由最多 8 个陷阱 (其中 4 个保
留)和 54 个中断组成。根据用户指定的 1 到 7 之间的
优先级 (1 为最低优先级, 7 为最高优先级),以及预
定义的 “自然顺序”,决定每个中断的优先级。陷阱的
优先级是固定的,其优先级范围是从 8 到 15 。
2007 Microchip Technology Inc. DS70150B_CN 第13 页
dsPIC30F6010A/6015
2.2 编程模型
图 2-1 为编程模型,它包括 16 个 16 位工作寄存器(W0
至 W15 )、 2 个 40 位累加器 (AccA 和 AccB )、状态
寄存器 (SR )、数据表页寄存器 (TBLPAG)、程序空
间可视性页寄存器(PSVPAG )、 DO 和 REPEAT 寄存
器(DOSTART、DOEND、 DCOUNT 和 RCOUNT )以
及程序计数器(PC )。工作寄存器可充当数据、地址或
偏移量寄存器。 所有寄存器均为存储器映射。 W0 用作
执行文件寄存器寻址的 W 寄存器。
其中的一些寄存器有与之关联的影子寄存器(见图 2-1 )。
影子寄存器被用作临时保存寄存器,它能够在事件发生
时将其主寄存器中的内容送入其中或将自身内容送回主
寄存器。影子寄存器都是不可直接访问的。如下指令适
用于寄存器与影子寄存器间的数据传输。
• PUSH.S 和 POP.S
W0、 W1、 W2、 W3 和 SR (仅限 DC、N、 OV、
Z 和 C 位)与对应的影子寄存器之间进行数据传
输。
• DO 指令
循环开始时, DOSTART、 DOEND 和 DCOUNT
寄存器的内容压入影子寄存器,在循环结束时其内
容从各自的影子寄存器中弹出。
当对一个工作寄存器执行字节操作时,仅目的寄存器的
低字节会受到影响。但对于存储器映射的工作寄存器来
说,可以通过对数据存储空间进行字节宽度的访问来对
工作寄存器的低字节和高字节进行操作,这一点是很有
益的。
2.2.1 软件堆栈指针 / 帧指针
dsPIC® DSC 器件具有一个软件堆栈。W15 是专用的软
件堆栈指针(Stack Pointer ,SP )。它可被异常处理、
子程序调用和返回自动修改, 并且也能够被任何指令引
用 (方法与引用其他工作寄存器相同)。这样就简化了
对堆栈指针的读、写和操作 (例如,创建堆栈帧)。
注: 为了防止出现不对齐的堆栈访问,
W15<0> 始终保持为零。
复位时 W15 被初始化为 0x0800 。 在初始化期间,用户
可以将 SP 重新编程以指向数据空间内的任何单元。
W14 是专用的堆栈帧指针,由 LNK 和 ULNK 指令定义。
并且也能够被任何指令引用(方法与引用其他工作寄存
器相同)。
2.2.2 状态寄存器
dsPIC DSC 内核具有一个 16 位状态寄存器(SR), 它
的低字节 (LSB )被称为 SR 低字节 (SRL ),它的高
字节 (MSB )被称为 SR 高字节 (SRH )。有关 SR 的
组成请参见图 2-1 。
SRL 包含了所有的 MCU ALU 运算状态标志位(包括 Z
位),以及 CPU 中断优先级状态位 IPL<2:0> 和循环有
效状态位 RA 。 在异常处理期间,SRL 与 PC 的 MSB 连
在一起形成一个完整的字值,然后将该字的值压入堆
栈。
SR 寄存器的高字节包含 DSP 加法 / 减法状态位、 DO
循环有效位 (DA )以及半进位 (DC )状态位。
2.2.3 程序计数器
程序计数器为 23 位宽; bit 0 总是为零。因此, PC 可
寻址最多 4M 指令字。
DS70150B_CN 第14 页 2007 Microchip Technology Inc.
图 2-1 : dsPIC30F6010A/6015 编程模型
W0/WREG
DSP 操作数
寄存器
DSP 地址
寄存器
W12/DSP 偏移量寄存器
W13/DSP 回写寄存器
W14/ 帧指针
W15/ 堆栈指针
dsPIC30F6010A/6015
D0 D15
PUSH.S 影子寄存器
W1
W2
W3
W4
W5
W6
W7
W8
W9
W10
W11
工作寄存器
DO 影子寄存器
图注
DSP
累加器
PC22
7
22
22
TA BPAG
TBLPAG
7
PSVPAG
PSVPAG
AD39 AD0 AD31
AccA
AccB
0
数据表页地址
0
DOSTART
程序空间可视性页地址
15
15
DOEND
SPLIM
RCOUNT
DCOUNT
PC0
堆栈指针限制寄存器
AD15
程序计数器
0
0
REPEAT 循环计数器
0
DO 循环计数器
0
DO 循环起始地址
DO 循环结束地址
15
CORCON
OA OB SA SB
2007 Microchip Technology Inc. DS70150B_CN 第15 页
OAB SAB
SRH
DA DC
IPL2 IPL1
RA
IPL0 OV
SRL
0
内核配置寄存器
N
C
Z
状态寄存器
dsPIC30F6010A/6015
2.3 除法支持
dsPIC DSC 器件支持 16 位 /16 位有符号小数除法运
算、32 位 /16 位和 16 位 /16 位有符号和无符号整数除
法运算。所有除法运算都是单指令周期内的迭代操作。
支持以下指令和数据长度:
1. DIVF —— 16/16 有符号小数除法
2. DIV.sd —— 32/16 有符号除法
3. DIV.ud —— 32/16 无符号除法
4. DIV.s —— 16/16 有符号除法
5. DIV.u —— 16/16 无符号除法
表 2-1 : 除法指令
指令 功能
DIVF
DIV.sd
DIV.s
DIV.ud
DIV.u
有符号小数除法: Wm/Wn → W0 ; Rem → W1
有符号除法: (Wm+1:Wm)/Wn → W0 ; Rem → W1
有符号除法: Wm/Wn → W0 ; Rem → W1
无符号除法: (Wm+1:Wm)/Wn → W0 ; Rem → W1
无符号除法: Wm/Wn → W0 ; Rem → W1
2.4 DSP 引擎
DSP 引擎由一个高速 17 位 x 17 位乘法器、一个桶形移
位寄存器和一个 40 位加法器 / 减法器 (带有两个目标
累加器以及舍入和饱和逻辑)组成。
dsPIC30F 器件具有单周期指令流,可执行 DSP 或 MCU
指令。DSP 和 MCU 指令共享许多硬件资源。例如,指
令集中有共用同一个硬件乘法器的 DSP 和 MCU 乘法指
令。
DSP 引擎能够执行固有的“累加器—累加器”操作,而
无需额外数据。这些指令为 ADD 、 SUB 和 NEG 。
通过 CPU 内核配置寄存器(CORCON )的不同位可以
选择 DSP 引擎的不同功能,如下所示:
1. 小数或整数 DSP 乘法 ( IF)。
2. 有符号或无符号 DSP 乘法 ( US)。
3. 常规或收敛舍入 ( RND)。
4. AccA 自动饱和使能 / 禁止 ( SATA)。
5. AccB 自动饱和使能 / 禁止 ( SATB)。
6. 用于写数据存储器的自动饱和使能 /禁止(SATDW)。
7. 累加器饱和模式选择 ( ACCSAT)。
注: 请参见表 3-3 了解 CORCON 的组成。
必须在一个 REPEAT 循环周期内执行除法指令。任何其
他执行方式 (例如一系列不连续的除法指令)都无法得
到正确的结果,因为指令流取决于 RCOUNT 的值。除
法指令本身无法自动设置 RCOUNT 值,因此必须在
REPEAT 指令中明确且正确给出该值,如表 2-1 所示
(REPEAT 将执行目标指令 { 操作数的值 + 1} 次)。DIV/
DIVF 指令在 REPEAT 循环中的迭代次数应当被设置为
18 次。因此,一个完整的除法运算需要 19 个指令周期。
注: 除法流是可中断的。但用户需要正确地保
护现场。
图 2-2 给出了 DSP 引擎的框图。
表 2-2 : DSP 指令汇总
指令 代数运算
CLR A = 0
ED A = (x – y)
EDAC A = A + (x – y)
MAC A = A + (x * y)
MOVSAC
MPY A = x * y
MPY.N A = – x * y
MSC A = A – x * y
A 的值不发生变化
2
2
DS70150B_CN 第 16 页 2007 Microchip Technology Inc.
图 2-2: DSP 引擎框图
dsPIC30F6010A/6015
40
进位 / 借位输出
进位 / 借位输入
40 位累加器 A
40 位累加器 B
饱和
加法器
取补
40
40
符号扩展
40
桶形
移位
寄存器
40
16
40
舍入
逻辑
16
饱 和
X 数据总线
Y 数据总线
33
17 位
乘法器 / 定标器
16
到 / 来自 W 阵列
16
32
32
补零
16
2007 Microchip Technology Inc. DS70150B_CN 第17 页
dsPIC30F6010A/6015
2.4.1 乘法器
17 位 x17 位的乘法器可以进行有符号或无符号的运算,
其输出经过定标器进行换算后可支持 1.31 小数 (Q31 )
或 32 位整数结果。无符号操作数经过零扩展后,送入乘
法器输入值的第 17 位。有符号操作数经过符号扩展后,
送入乘法器输入值的第 17 位。 17 位 x17 位乘法器 / 定
标器的输出是 33 位值,它将被符号扩展为 40 位。整型
数据的固有表示形式为有符号的二进制补码值,其中,
MSB 定义为符号位。一般来说,N 位二进制补码整数的
范围为 -2
-32768 (0x8000 ) 至 32767 (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
法运算将产生 1.31 乘积,其精度为 4.65661 x 10
同一个乘法器还用来支持 MCU 乘法指令,包括整数的
16 位有符号、无符号和混和符号乘法。
MUL 指令可以使用字节或字长度的操作数。字节操作数
将产生 16 位结果,而字操作数将产生 32 位结果,结果
存放在 W 寄存器阵列的指定寄存器中。
N-1
N-1
至 2
- 1。对于 16 位整数,数据范围是
1-N
)。对 于 16 位小数, Q15 数据范围是
-5
。在小数方式下, 16x16 乘
-10
。
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 寄存器中相应的溢出陷阱允许位( OVATE 和
OVBTE)也置 1 的话,还可以选择用 OA 和 OB 位产生
算术警告陷阱 (见第 5.0 节“中断”)。这使得用户能
够立即采取措施,如修正系统增益。
DS70150B_CN 第18 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
每次数据通过加法器 / 减法器时,SA 和 SB 位就会被修
改,但它们只能由用户清零。 置 1 时,它们表明累加器
已经溢出其最大范围 (32 位饱和是 bit 31 ,而 40 位饱
和是 bit 39 ),将发生饱和 (如果饱和使能的话)。如果
没有使能饱和,SA 和 SB 置 1 默认为 bit 39 溢出,即表
明发生灾难性溢出。如果 INTCON1 寄存器中的 COVTE
位置 1 ,当饱和被禁止时,SA 和 SB 位将产生算术警告
陷阱。
可选择将状态寄存器 (SR )中的溢出和饱和状态位分
别视作 OA 和 OB 的逻辑或 (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 状态,直至被用户清零。当
此饱和模式生效时,不使用警戒位,因此 OA 、
OB 或 OAB 位永远不会置 1。
3. Bit 39 灾难性溢出:
加法器的 bit 39 溢出会将 SA 或 SB 位置 1 并保
持该状态直至被用户清零。不执行饱和操作,允
许累加器溢出 (破坏累加器的符号位) 。如果
INTCON1 寄存器中的 COVTE 位置 1 ,则灾难性
溢出可能引发陷阱异常。
2.4.2.2 累加器 “回写”
MAC 类指令(MPY 、MPY.N 、ED 和 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 数据值而只丢弃低位字
常规舍入取累加器 bit 15 的值,对其进行零扩展并将扩
展值加到 ACCxH 字 (累加器的 bit 16 至 bit 31 ) 。 如
果 ACCxL 字(累加器的 bit 0 至 bit 15 )的值在 0x8000
到 0xFFFF (含 0x8000 )之间, ACCxH 的值增 1 。如
果 ACCxL 字的值在 0x0000 到 0x7FFF 之间, ACCxH
的值不变。此算法的结果经过一系列随机舍入操作,值
将稍稍偏大 (正偏)。
收敛 (或无偏)舍入操作与常规舍入操作相同,但
ACCxL 等于 0x8000 时 例外。在此种 情 况 下,检查
ACCxH 的最低位 (累加器的 bit 16)。如果该位为 1 ,
ACCxH 的值增 1。如果该位为 0 , ACCxH 的值不变。
假设 bit 16 本身就是一个随机数,那么此机制将消除任
何可能累加的舍入偏差。
SAC 和 SAC.R 指令通过X 总线将目标累加器内容的截取
值(SAC)或舍入值 (SAC.R)存储到数据存储空间。
(有关数据饱和的信息,请参见第 2.4.2.4 节 “数据空
间写饱和”)。注意对于 MAC 类指令,累加器回写操作
以相同的方式工作,通过 X 总线访问组合的 MCU (X
和 Y )数据空间。对于此类指令,总是对数据进行舍入。
2007 Microchip Technology Inc. DS70150B_CN 第19 页
dsPIC30F6010A/6015
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 位。源操作数可为任何两个 DSP 累加器
之一或 X 总线(以支持对寄存器或存储器中的数据进行
多位移位)。
移位寄存器需要一个有符号二进制值来确定移位操作的
方向和幅度 (位的数量)。正数将操作数右移。负数将
操作数左移。 0 值不改变操作数。
桶形移位寄存器是 40 位宽的,于是,它为 DSP 移位操
作提供了 40 位的结果,而为 MCU 移位操作提供 16 位
的结果。来自 X 总线的数据在桶形移位寄存器中的存放
方式是:右移则数据存放在 bit 16 至 bit 31 ,左移则存
放在 bit 0 至 bit 15 。
DS70150B_CN 第20 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
3.0 存储器构成
注: 本数据手册总结了 dsPIC30F 系列器件的功能,
但并不作为参考大全使用。有关 CPU 、外设、寄存器
说明和一般器件功能的更多信息,请参见《dsPIC30F
系列参考手册》(DS70046E_CN )。有关器件指令集
和编程的更多信息,请参见 《dsPIC30F/33F 程序员
参考手册》(DS70157B_CN )。
3.1 程序地址空间
程序地址空间为 4M 指令字。如表 3-1 所述,当程序
空间映射到数据空间时,可通过 23 位 PC 、表指令或
数据空间有效地址 ( EA )的 24 位值寻址程序空间。
注意,为了提供与数据空间寻址的兼容性, 在两个连
续的程序字之间,程序空间地址递增量为 2。
对于除 TBLRD/TBLWT 外的所有访问,用户程序空间
访问被限制在低 4M 指令字 (地址范围为 0x000000
至 0x7FFFFE ); TBLRD/TBLWT 使用 TBLPAG<7>
来决定访问用户空间还是配置空间。在表 3-1 读 / 写指
令中,bit 23 置 1 时允许访问器件 ID、用 户 ID 和配置
位。对于其他情形, bit 23 始终清零。
图 3-1 :
空间
用户存储
dsPIC30F6010A/6015
序存储空间映射
复位 – GOTO 指令
复位 – 目标地址
中断向量表
保留
备用向量表
用户闪存
程序存储区
(48K 指令字)
保留
(读为 0)
数据 EEPROM
(4 KB )
000000
000002
000004
向量表
00007E
000080
000084
0000FE
000100
017FFE
018000
7FEFFE
7FF000
7FFFFE
800000
0 的程
空间
配置存储
保留
UNITID (32 个指令字)
保留
器件配置
寄存器
保留
DEVID(2)
8005BE
8005C0
8005FE
800600
F7FFFE
F80000
F8000E
F80010
FEFFFE
FF0000
FFFFFE
2007 Microchip Technology Inc. DS70150B_CN 第 21 页
dsPIC30F6010A/6015
表 3-1 : 程序空间地址构成
访问类型
使用指令访问 用户
TBLRD/TBLWT
用户
(TBLPAG<7> = 0)
TBLRD/TBLWT
配置
(TBLPAG<7> = 1)
程序空间可视性 用户空间
访问
空间
程序空间地址
<23> <22:16> <15> <14:1> <0>
0 P C < 2 2 : 1 >0
TBLPAG<7:0>
TBLPAG<7:0>
0 PSVPAG<7:0>
数据 EA<15:0>
数据 EA<15:0>
数据 EA<14:0>
图 3-2 :访问程序空间中
使用
程序
计数器
使用
程序
空间
可视性
使用
表指令
用户 /
配置
空间
选择
0
0
PSVPAG 寄存器
1/0
TBLPAG 寄存器
的数据的地址生成方式
23 位
选择
8 位
8 位
1
24 位 EA
0程序计数器
EA
15 位
EA
16 位
字节选择
注 : 程序空间可视性不能用于访问程序存储空间字的 bit<23:16>。
DS70150B_CN 第 22 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
3.1.1 使用表指令访问程序存储器中的数据
由于此器件的架构对 24 位宽的程序存储器取指。因此
指令始终是对齐的。由于采用的是改进的哈佛架构,因
此也可以在程序空间中存储数据。
访问程序空间的方法有两种:通过特殊表指令,或通过
将16K 字大小的程序空间页重新映射到数据空间的上半
部分 (见第 3.1.2 节 “使用程序空间可视性访问程序存
储器中的数据”)。 TBLRDL 和TBLWTL 指令提供了无需
通过数据空间,直接读写程序空间任何地址的最低字
(lsw )的方法, TBLRDH 和 TBLWTH 指令是可以把一个
程序空间字的高 8 位作为数据存取的惟一方法。
对于每个连续的 24 位程序字,PC 的递增量为 2 。这 使
得程序存储区地址能够直接映射到数据空间地址。从而
可将程序存储区视作两个 16 位字宽的地址空间,它们
并排放置,具有相同的地址范围。 TBLRDL 和 TBLWTL
访问包含低位字的空间,TBLRDH 和 TBLWTH 访问包含
高位字的空间。
图 3-2 说明了为表操作和数据空间访问创建有效地址
(EA )的方法 (PSV = 1 )。这里 P<23:0> 指的是程序
空间字,而 D<15:0> 指的是数据空间字。
图 3-3 : 程序数据表访问 (最低有效字)
提供了一组表指令,可使用它们与程序空间交换字或字
节大小的数据。
1. TBLRDL:对低地址部分执行表读操作
字:
读程序地址的低字部分; P<15:0> 映射到
D<15:0> 。
字节:
读程序地址的某个较低的字节;
当字节选择位 = 0 时,P<7:0> 映射到目标字节;
当字节选择位 = 1 时,P<15:8>映射到目标字节。
2. TBLWTL:对低地址部分执行表写操作 (有关闪
存编程的详细信息见第 6.0 节 “闪存程序存储
器” )。
3. TBLRDH:对高地址部分执行表读操作
字:
读程序地址的最高字 (msw ); P<23:16>
映射到 D<7:0> ; D<15:8> 将始终为零(= 0 )。
字节:
读程序地址的某个较高的字节;
当字节选择位 = 0 时, P<23:16> 映射到目标字
节;
当字节选择位 = 1 时,目标字节将始终为零(= 0)。
4. TBLWTH:对高地址部分执行表写操作 (有关闪
存编程的详细信息见第 6.0 节 “闪存程序存储
器” )。
PC 地址
0x000000
0x000002
0x000004
0x000006
程序存储区
“虚拟(Phantom )”
字节(读为 0 )。
00000000
00000000
00000000
00000000
23
TBLRDL.W
16
8
TBLRDL.B(Wn<0> = 0)
TBLRDL.B(Wn<0> = 1)
0
2007 Microchip Technology Inc. DS70150B_CN 第 23 页
dsPIC30F6010A/6015
图 3-4: 程序数据表访问 (最高字节)
TBLRDH.W
PC 地址
0x000000
0x000002
0x000004
0x000006
程序存储区
“虚拟” 字节
(读为 0 )。
00000000
00000000
00000000
00000000
23
TBLRDH.B(Wn<0> = 1)
3.1.2 使用程序空间可视性访问程序存储器
中的数据
可选择将数据空间的高 32 KB 映射到任何 16K 字程序空
间页。这提供了通过 X 数据空间对存储的常量数据的透
明访问,而无需使用特殊指令(即 TBLRDL/H 和
TBLWTL/H 指令)。
如果数据空间 EA 的最高位置 1 ,且通过将内核控制寄
存器(CORCON )中的 PSV 位置 1 使能程序空间可视
性,就能通过数据空间访问程序空间。第 2.4 节“DSP
引擎”中讨论了 CORCON 的功能。
访问此区域的数据会增加一个额外的指令周期,因为需
要进行取两次程序存储字。
注意,可寻址数据空间的高半部分始终位于 X 数据空间
内。因此,当 DSP 操作使用程序空间映射来访问这个
存储区域时,Y 数据空间通常应该存放 DSP 操作的状态
(变量)数据,而 X 数据空间通常应该存放系数 (常
量)数据。
尽管每个数据空间地址大于等于 0x8000 的部分直接映
射到对应的程序存储器地址单元中 (见图 3-6 ),但只
使用 24 位程序字的低 16 位来存储数据。应强制将高 8
位编程为一条无效指令以维持器件的可靠性。有关指令
编码的细节,请参见《dsPIC30F/33F 程序员参考手册》
(DS70157B_CN )。
16
TBLRDH.B (Wn<0> = 0 )
注意,每访问一个程序字,PC 就会增 2 ,数据空间地址
的低15 位直接被映射到相应的程序空间地址的低15 位。
其余位由程序空间可视性页寄存器 (PSVPAG<7:0>)
提供,如图 3-6 所示。
注: 在表读 / 写操作时暂时禁止 PSV 访问。
对于在 REPEAT 循环外执行的使用 PSV 的指令:
• 以下指令除规定的执行时间外还需一个额外的指令
周期:
- 带数据操作数预取操作的 MAC 类指令
- MOV 指令
- MOV.D 指令
• 所有其他指令除规定的执行时间外还需两个额外的
指令周期。
对于在 REPEAT 循环内执行的使用 PSV 的指令:
• 以下指令除规定的执行时间外还需两个额外的指令
周期:
- 在第一次迭代时执行的指令
- 在最后一次迭代时执行的指令
- 在由于中断而退出循环前执行的指令
- 中断被处理后,在重新进入循环时执行的指令
• 允许在 REPEAT 循环的任何其他迭代中使用 PSV
访问数据,该操作的执行时间为一个周期。
8
0
DS70150B_CN 第 24 页 2007 Microchip Technology Inc.
图 3-5 : 将数据空间映射到程序空间的操作
数据空间 程序空间
0x0000
dsPIC30F6010A/6015
0x000100
EA<15> =
数据
空间
EA
BSET CORCON,#2 ; PSV bit set
MOV #0x00, W0 ; Set PSVPAG register
MOV W0, PSVPAG
MOV 0x9200, W0 ; Access program memory location
注 : PSVPAG 是一个 8 位寄存器,它包含了程序空间地址的 bit <22:15>。
16
EA<15> = 1
数据空间的高
半部分被映射
至程序空间
(即它定义了程序空间的页,数据空间的上半部分被映射到这些页中)。
15
0
15
; using a data space access
0x8000
15
0xFFFF
PSVPAG
地址
连接
(1)
0x00
8
23 15 0
23
0x001200
0x017FFE
数据读
3.2 数据地址空间
内核具有两个数据空间。它们可被视作是独立的数据空
间 (对于某些 DSP 指令),或被视作一个统一的线性
地址范围 (对于某些 MCU 指令)。可通过两个地址发
生单元 (Address Generation Units , AGU)和独立的
数据路径访问数据空间。
3.2.1 数据存储空间映射
数据存储器空间被分成 X 和 Y 数据空间两大块。此架构
的关键之处在于,Y 空间是 X 空间的子集且它被完全的
包含在 X 空间中。为了提供明显的线性寻址空间,X 和
Y 空间要有连续的地址。
执行 MAC 类指令以外的任何指令时,X 块由 64 KB 数据
地址空间 (包括了全部的 Y 空间地址)组成。在执行
MAC 类指令时,X 块由不包括 Y 地址(只用于数据读操
作)的 64 KB 数据地址空间组成。也就是说,所有其他
指令将整个数据存储空间视作一个组合的地址空间。
MAC 类指令把 Y 地址空间从数据空间中分离出来,使用
来自 W10 和 W11 的 EA 对 Y 空间寻址。使用 W8 和 W9
对剩余的 X 数据空间寻址。只有 MAC 类指令才能同时访
问两个地址空间。
数据存储空间映射如图 3-6 所示。
图 3-7 中给出了使用 MCU 和 DSP 指令访问 X 和 Y 数
据空间的图形概述。
2007 Microchip Technology Inc. DS70150B_CN 第25 页
dsPIC30F6010A/6015
图 3-6: dsPIC30F6010A/6015 数据空间存储器映射
2 KB
SFR 空间
8 KB
SRAM 空间
MSB
地址
0x0001
0x07FF
0x0801
0x17FF
0x1801
0x27FF 0x27FE
0x8001
16 位
LSB MSB
SFR 空间
X 数据 RAM(X)
Y 数据 RAM(Y)
LSB
地址
0x0000
0x07FE
0x0800
0x17FE
0x1800
0x1FFE 0x1FFF
0x2800 0x2801
0x8000
8 KB
Near
数据
空间
可选择
映射至
程序
存储器
0xFFFF
X 数据
未实现( X)
0xFFFE
DS70150B_CN 第 26 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
图 3-7:使 用 MCU ( MAC 类)和 DSP 指令对数据空间寻址示例
SFR 空间
未用
(Y 空间)
X 空间
非 MAC 类操作(读 / 写) MAC 类操作(只读)
MAC 类操作(写)
使用任何 W 寄存器的间接 EA 使用 W10 和 W11 的间接 EA 使用 W8 和 W9 的间接 EA
Y 空间
未用
SFR 空间
未用
X 空间
X 空间
2007 Microchip Technology Inc. DS70150B_CN 第 27 页
dsPIC30F6010A/6015
3.2.2 数据空间
X 数据空间可用于全部指令并支持所有寻址模式。其读
写数据总线是相互独立的。X 读数据总线是所有将数据
空间视为一个组合的 X 和 Y 地址空间的指令的数据返回
路径。它也是双操作数读指令(MAC 类)的 X 地址空间
数据路径。X 写数据总线是所有指令对数据空间执行写
操作的惟一路径。
X 数据空间还支持所有指令的模寻址,但是会受到寻址
模式的限制。只有写 X 数据空间的操作才支持位反转寻
址。
MAC 类指令( CLR、 ED、EDAC、MAC、MOVSAC、MPY、
MPY.N和 MSC)使用Y 数据空间与X 数据空间配合以提供
两条可以同时读取数据的路径。不能通过 Y 总线执行任
何写操作。此类指令专门指定 W10 和 W11 作为寻址 Y
数据空间的 W 寄存器指针,而指定 W8 和 W9 作为寻址
X 数据空间的 W 寄存器指针。注意,在累加器回写操作
期间,数据地址空间被认为是一个组合的 X 和 Y 数据空
间,因此写操作通过 X 总线发生。从而可以对整个地址
空间中的任何地址单元执行写操作
Y 数据空间仅用于与 MAC 类指令相关的数据预取操作。
它也支持用于自动循环缓冲的模寻址。当然,所有其他
指令可通过将 Y 数据地址空间视作组合线性空间的一部
分,通过 X 数据总线对其进行访问。
图 3-6 给出了 X 和 Y 数据空间之间的边界定义,用户不
能通过编程更改 X 和 Y 的数据空间边界。如果 EA 指向
已为其分配的数据空间之外的数据或是指向物理存储器
之外的单元,则将返回全零的字或字节。例如,虽然所
有使用任何寻址模式的非 MAC 指令都能访问 Y 地址空
间,但使用 W8 或 W9 (X 空间指针)作为地址指针的
MAC 指令从 Y 数据空间取数据将返回 0x0000 。
表 3-2 : 无效存储器访问的结果
尝试的操作 返回的数据
EA = 未实现的地址
在 MAC 类指令中使用 W8 或 W9 访
问 Y 数据空间
在 MAC 类指令中使用 W10 或 W11
访问 X 数据空间 0x0000 。
0x0000
0x0000
0x0000
3.2.3 数据空间宽度
内核数据宽度为 16 位。所有内部寄存器都是以 16 位宽
的字构成的。数据存储空间是由 16 位宽的字节可寻址
块构成的。
3.2.4 数据对齐
为了保持与 PIC ® 器件的向后兼容性,并提高数据存储
空间的使用效率, dsPIC30F 指令集既支持字操作,也
支持字节操作。 在数据存储器和寄存器中,数据是按字
对齐的,但所有数据空间有效地址都被解析为字节。读
数据字节的操作将读取包含此字节的整个字,使用有效
地址的最低位 (LSb )决定要选择的字节, 选中的字节
将被放在 X 数据总线的 LSB 中(因为 MAC 类指令只能
进行取字操作,因此不能通过 Y 数据总线进行字节访
问) 。也就是说,数据存储器和寄存器是由两个共享
(字)地址译码,而写入线相互独立的字节宽度的并行
实体构成的。数据字节写操作仅写入存储阵列和寄存器
中与字节地址匹配的相应部分。
这类字节访问要求所有的有效地址计算(包含那些只能
处理字大小数据的 DSP 操作生成的地址)在内部进行
调整以逐次访问字对齐的存储器。例如,对于后修改存
器间接寻址模式 [Ws++] ,字节操作时,内核将其识别为
值 Ws + 1 ,而字操作时,内核将其识别为 Ws + 2 。
所有字访问必须按偶地址对齐。不支持取非对齐的字
数据的操作,因此在混合使用字节和字的操作或转换 8
位 MCU 代码时必须要小心。任何尝试进行非对齐读或
写操作都将产生一个地址错误陷阱。如果在读操作时
产生错误,正在执行的指令将完成;如果在写操作时
产生错误,则执行指令,但不会执行写操作。无论上述
2 种情况的哪一种,都会随之执行陷阱操作。从而允许
系统和 / 或用户检查地址错误发生之前的机器状态。
图 3-8 : 数据对齐
15 8 7 0
0001
0003
0005
字节 1 字节 0
字节 3 字节 2
字节 5 字节 4
LSB MSB
0000
0002
0004
所有有效地址都是 16 位宽的,且指向数据空间内的字
节单元。所以,数据空间地址范围是 64 KB 或 32K 字。
DS70150B_CN 第 28 页 2007 Microchip Technology Inc.