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.
dsPIC30F6010A/6015
所有载入 W寄存器的字节都将载入 W寄存器的低字节,
W 寄存器的高字节不变。
提供符号扩展指令 (SE )以允许用户将 8 位有符号数
据转换成 16 位有符号值。或者,对于 16 位无符号数
据,通过在相应的地址执行零扩展指令(ZE ),用户可
清零 W 寄存器的高字节。
尽管大多数指令能够对字或字节数据进行操作,但必须
注意的是,某些指令 (包括 DSP 指令)只能对字进行
操作。
3.2.5 NEAR 数据空间
在 X 地址存储空间中的 0x0000 至 0x1FFF 保留了一个
8 KB 的 near 数据空间;所有存储器直接寻址指令都可
以通过一个13 位的绝对地址来直接访问这个数据空间。
其余的 X 地址空间和全部的 Y 地址空间都是可间接寻址
的。此外,使用 MOV 指令可以寻址整个 X 数据空间,它
支持通过 16 位字段进行存储器直接寻址。
3.2.6 软件堆栈
dsPIC DSC 器件具备一个软件堆栈。 W15 被用作堆栈
指针。
堆栈指针总是指向第一个可用的空字,并从低地址到高
地址方向递增。如图 3-9 所示,出栈操作时该指针预减,
压栈操作时该指针预加。注意,对于任何 CALL 指令时
的 PC 压栈操作, PC 的高字节部分在压栈前要进行零
扩展以确保高字节总是处于清零状态
注: 在异常事件处理期间的压栈操作,首先要先
将 PC 的高字节与 SRL 寄存器组合在一起。
与堆栈指针相关联的寄存器是堆栈指针限制寄存器
(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>
< 空字 >
0 15
W15 ( CALL 前)
W15 ( CALL 后)
POP: [--W15]
PUSH: [W15++]
3.2.7 数据 RAM 保护功能
dsPIC30F6010A/6015 支持数据 RAM 保护功能,从而当
RAM 与引导和安全代码段一起使用时,能够保证 RAM
段的安全。使能 RAM 保护功能时,只能通过引导段闪存
代码访问 BSRAM (BS 的安全 RAM 段),只能通过安
全段闪存代码访问 SSRAM (RAM 的安全 RAM 段)。
表 3-3 为 BSRAM 和 SSRAM 的 SFR 概述。
2007 Microchip Technology Inc. DS70150B_CN 第 29 页
DS70150B_CN 第 30 页 2007 Microchip Technology Inc.
表 3-3: 内核寄存器映射
SFR 名称
W0 0000 W0/WREG 0000 0000 0000 0000
W1 0002 W1 0000 0000 0000 0000
W2 0004 W2 0000 0000 0000 0000
W3 0006 W3 0000 0000 0000 0000
W4 0008 W4 0000 0000 0000 0000
W5 000A W5 0000 0000 0000 0000
W6 000C W6 0000 0000 0000 0000
W7 000E W7 0000 0000 0000 0000
W8 0010 W8 0000 0000 0000 0000
W9 0012 W9 0000 0000 0000 0000
W10 0014 W10 0000 0000 0000 0000
W11 0016 W11 0000 0000 0000 0000
W12 0018 W12 0000 0000 0000 0000
W13 001A W13 0000 0000 0000 0000
W14 001C W14 0000 0000 0000 0000
W15 001E W15 0000 1000 0000 0000
SPLIM 0020 SPLIM 0000 0000 0000 0000
ACCAL 0022 ACCAL 0000 0000 0000 0000
ACCAH 0024 ACCAH 0000 0000 0000 0000
ACCAU 0026
ACCBL 0028 ACCBL 0000 0000 0000 0000
ACCBH 002A ACCBH 0000 0000 0000 0000
ACCBU 002C
PCL 002E PCL 0000 0000 0000 0000
PCH 0030
TBLPAG 0032
PSVPAG 0034
RCOUNT 0036 RCOUNT uuuu uuuu uuuu uuuu
DCOUNT 0038 DCOUNT uuuu uuuu uuuu uuuu
DOSTARTL 003A DOSTARTL
DOSTARTH 003C
DOENDL 003E DOENDL
DOENDH 0040
图注: 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
符号扩展 (ACCA<39> )
符号扩展 (ACCB<39> )
- - - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - - -
- - - - - - - - -
ACCAU 0000 0000 0000 0000
ACCBU 0000 0000 0000 0000
PCH 0000 0000 0000 0000
TBLPAG 0000 0000 0000 0000
PSVPAG 0000 0000 0000 0000
DOSTARTH 0000 0000 0uuu uuuu
DOENDH 0000 0000 0uuu uuuu
Bit 0
0
uuuu uuuu uuuu uuu0
uuuu uuuu uuuu uuu0
0
dsPIC30F6010A/6015
复位状态
2007 Microchip Technology Inc. DS70150B_CN 第31 页
表 3-3 : 内核寄存器映射 (续)
SFR 名称
SR 0042 OA OB SA SB OAB SAB DA DC IPL2 IPL1 IPL0 RA N OV Z
CORCON 0044
MODCON 0046 XMODEN YMODE
XMODSRT 0048 XS<15:1>
XMODEND 004A XE<15:1>
YMODSRT 004C YS<15:1>
YMODEND 004E YE<15:1>
XBREV 0050 BREN XB<14:0> uuuu uuuu uuuu uuuu
DISICNT 0052
BSRAM 0750
SSRAM 0752
地址
(低地址)
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
- - -
N
- -
- - - - - - - - - - - - -
- - - - - - - - - - - - -
US EDT DL2 DL1 DL0 SATA SATB SATDW ACCSAT IPL3 PSV RND
- -
BWM<3:0> YWM<3:0> XWM<3:0> 0000 0000 0000 0000
DISICNT<13:0> 0000 0000 0000 0000
IW_BSR IR_BSR RL_BSR
IW_SSR IR_SSR RL_SSR
图注: u = 未初始化的位
注: 有关寄存器位域的描述,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN )。
Bit 0
C
0000 0000 0000 0000
IF
0000 0000 0010 0000
0
uuuu uuuu uuuu uuu0
1
uuuu uuuu uuuu uuu1
0
uuuu uuuu uuuu uuu0
1
uuuu uuuu uuuu uuu1
0000 0000 0000 0000
0000 0000 0000 0000
复位状态
dsPIC30F6010A/6015
dsPIC30F6010A/6015
注:
DS70150B_CN 第 32 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
4.0 地址发生器单元
注: 本数据手册总结了 dsPIC30F 系列器件的功能,但
并不作为参考大全使用。有关 CPU 、外设、寄存器说明
和一般器件功能的更多信息,请参见《dsPIC30F 系列参
考手册》(DS70046E_CN )。有关器件指令集和编程的
更多信息,请参见 《dsPIC30F/33F 程序员参考手册》
(DS70157B_CN )。
dsPIC DSC 内核包含两个独立的地址发生器单元
(AGU ):分别是 X AGU 和 Y AGU。 Y AGU 仅支持
DSP MAC 类指令的字大小数据读取。 dsPIC DSC AGU
支持以下三种数据寻址类型:
• 线性寻址
• 模 (循环)寻址
• 位反转寻址
线性和模数据寻址模式可应用于数据空间或程序空间。
位反转寻址模式只能用于数据空间地址。
4.1 指令寻址模式
寻址模式经过优化可以支持各指令的具体功能,具体的
寻址模式在表 4-1 中给出。MAC 类指令中提供的寻址模
式,与其他指令类型中的寻址模式略有不同。
4.1.1 文件寄存器指令
大多数文件寄存器指令使用一个 13 位地址字段 (f )来
直接寻址数据存储器中的前 8192 个字节(Near 数据
空间) 。大多数文件寄存器指令使用工作寄存器 W0 ,
W0 在这些指令中表示为 WREG 。目的寄存器通常是同
一个文件寄存器或者 WREG (MUL 指令除外),将结果
写入寄存器或寄存器对。使用 MOV 指令能够获得更大的
灵活性,在文件寄存器工作期间可以访问整个数据空
间。
4.1.2 MCU 指令
三操作数 MCU 指令的形式是:
操作数
3 =
操作数1<功能>操作数
其中,操作数 1 始终是称为 Wb 的工作寄存器(即,寻
址模式只能是寄存器直接寻址)。操作数 2 可以是一个
W 寄存器,取自数据存储器或为一个 5 位立即数。结果
位置可以是 W 寄存器或地址单元。 MCU 指令支持下列
寻址模式:
• 寄存器直接寻址
• 寄存器间接寻址
• 执行后修改的寄存器间接寻址
• 执行前修改的寄存器间接寻址
• 5 位或 10 位立即数寻址
注: 并非所有的指令都支持上面给出的全部寻
址模式。某些指令可能只支持这些寻址模
式中的某些模式,指令不同支持的寻址模
式可能不同。
2
表 4-1 : 支持的基本寻址模式
寻址模式 说明
文件寄存器直接寻址 明确指定文件寄存器的地址。
寄存器直接寻址 直接访问寄存器的内容。
寄存器间接寻址 Wn 的内容形成 EA 。
执行后修改的寄存器间接寻址 Wn 的内容形成 EA ,然后用一个常量值来修改 Wn (递增或递减)。
执行前修改的寄存器间接寻址 先用一个有符号常量值修改 Wn (递增或递减),再由此时的 Wn 形成 EA 。
带寄存器偏移量的寄存器间接寻址 Wn 和 Wb 的和形成 EA 。
带立即数偏移量的寄存器间接寻址 Wn 和立即数的和形成 EA 。
2007 Microchip Technology Inc. DS70150B_CN 第33 页
dsPIC30F6010A/6015
4.1.3 传送指令和累加器指令
与其他指令相比,传送指令和 DSP 累加器类指令提供
了更为灵活的寻址模式。除了大多数 MCU 指令支持的
寻址模式以外,传送和累加器指令还支持寄存器偏移量
的寄存器间接寻址模式,这也叫做寄存器变址寻址模
式。
注: 对于 MOV 指令,指令中指定的源寄存器和
目的寄存器有效地址的寻址模式可以不
同。然而,4 位 Wb (寄存器偏移量)字段
供源寄存器和目的寄存器所共用 (但通常
只由源寄存器或目的寄存器之一使用)。
概括地说,传送指令和累加器指令支持下列寻址模式:
• 寄存器直接寻址
• 寄存器间接寻址
• 执行后修改的寄存器间接寻址
• 执行前修改的寄存器间接寻址
• 带寄存器偏移量的寄存器间接寻址 (变址寻址)
• 带立即数偏移量的寄存器间接寻址
• 8 位立即数寻址
• 16 位立即数寻址
注: 并非所有的指令都支持上面给出的全部寻
址模式。某些指令可能只支持这些寻址模
式中的某些模式,指令不同支持的寻址模
式可能不同。
4.1.4 MAC 指令
双源操作数 DSP 指令(CLR, ED, EDAC, MAC, MPY,
MPY.N, MOVSAC 和MSC ),也 称 MAC 指令,它们使用一
组简化的寻址模式,允许用户通过寄存器间接寻址表有
效地对数据指针进行操作。
双源操作数预取寄存器必须是集合 {W8, W9, W10, W11}
的成员。对于数据读取,W8和W9总是分配给X RAGU,
而 W10 和 W11 则始终用于 Y AGU。从而,产生的有效
地址 (无论是在修改之前还是之后),对于 W8 和 W9
必须是 X 数据空间中的有效地址,对于 W10 和 W11 则
必须是 Y 数据空间中的有效地址。
注: 带寄存器偏移量的寄存器间接寻址,仅可
用于 W9 (在 X 空间中)和 W11 (在 Y 空
间中)。
概括地说, MAC 类指令支持下列寻址模式:
• 寄存器间接寻址
• 执行后修改 (修改量为 2)的寄存器间接寻址
• 执行后修改 (修改量为 4)的寄存器间接寻址
• 执行后修改 (修改量为 6)的寄存器间接寻址
• 带寄存器偏移量的间接寻址 (变址寻址)
4.1.5 其他指令
除了上述的各种寻址模式之外,一些指令使用各种大小
的立即数。例如, BRA (转移)指令使用 16 位有符号
立即数来直接指定转移的目标,而 DISI 指令使用一个
14 位无符号立即数字段。在一些指令中,比如 ADD
Acc,操作数源和运算结果已经暗含在操作码中。某些
操作,比如 NOP,没有任何操作数。
4.2 模寻址
模寻址模式,是一种使用硬件来自动支持循环数据缓冲
区的方法。目的是在执行紧密循环代码时 (这在许多
DSP 算法中很常见),不需要用软件来执行数据地址边
界检查。
可以在数据空间或程序空间中进行模寻址 (因为这两种
空间的数据指针机制本质上是相同的)。每个 X (也提
供指向程序空间的指针)和 Y 数据空间中都可支持一个
循环缓冲区。模寻址可以对任何 W 寄存器指针进行操
作。然而,最好不要将 W14 或 W15 用于模寻址,因为
这两个寄存器分别用作堆栈帧指针和堆栈指针。
总的来说,任何特定的循环缓冲区只能配置为单向工
作,因为根据缓冲区的方向,对缓冲区起始地址(对于
递增缓冲区)或结束地址(对于递减缓冲区)有某些限
制。
使用限制的惟一例外是那些长度为 2 的幂的缓冲区。这
些缓冲区满足起始地址和结束地址判据,它们可以双向
工作(即,在低地址边界和高地址边界上都可以进行地
址边界检查)。
DS70150B_CN 第34 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
4.2.1 起始地址和结束地址
模寻址机制要求指定起始地址和结束地址,并把它们载
入 16 位模缓冲区地址寄存器 : XMODSRT, XMODEND,
YMODSRT 和 YMODEND (见表 3-3 )。
注: Y 空间模寻址的 EA 计算使用字大小数据
(每个 EA 的 LSb 始终为零)。
循环缓冲区的长度没有直接指定,由相应的起始地址、
结束地址之差决定其长度。循环缓冲区最大长度为 32K
字(64 KB)。
图 4-1 : 模寻址操作示例
字节
地址
0x1100
MOV #0x1100,W0
MOV W0, XMODSRT ;set modulo start address
MOV #0x1163,W0
MOV W0,MODEND ;set modulo end address
MOV #0x8001,W0
MOV W0,MODCON ;enable W1, X AGU for modulo
MOV #0x0000,W0 ;W0 holds buffer fill value
MOV #0x1110,W1 ;point W1 to buffer
DO AGAIN,#0x31 ;fill the 50 buffer locations
MOV W0, [W1++] ;fill the next location
AGAIN: INC W0,W0 ;increment the fill value
4.2.2 W 地址寄存器选择
模寻址和位反转寻址控制寄存器,MODCON<15:0> 中
包含使能标志以及指定W 地址寄存器的W 寄存器字段。
XWM 和 YWM 字段选择对哪些寄存器进行模寻址。如
果 XWM = 15 ,则禁止 X RAGU 和 X WAGU 模寻址。
类似地,如果 YWM = 15 ,则禁止 Y AGU 模寻址。
要对其进行模寻址的X 地址空间指针W 寄存器(XWM )
位于 MODCON<3:0> 中(见表 3-3 )。 当 XWM 被设置
为除15 之外的任何值且XMODEN 位( MODCON<15> )
置 1 时, X 数据空间的模寻址被使能。
要对其进行模寻址的Y 地址空间指针W 寄存器(YWM )
位于 MODCON<7:4> 中。当 YWM 被设置为除 15 之外
的任何值且 YMODEN 位(MODCON<14>)置 1 时,
Y 数据空间的模寻址被使能。
0x1163
起始地址
结束地址
长度
= 0x0032
= 0x1100
= 0x1163
个字
2007 Microchip Technology Inc. DS70150B_CN 第35 页
dsPIC30F6010A/6015
4.2.3 模寻址的应用
模寻址可以应用于与任何与 W 寄存器相关的有效地址
(EA )计算中。重要的是要意识到, 地址边界检查功
能,不仅会检查地址是否正好在地址边界上,而且会检
查地址是否小于或大于上限(对于递增缓冲区)及是否
低于下限 (对于递减缓冲区)。因此,地址变化可能会
越过边界,但仍然可以正确调整。
注: 只有在使用执行前修改或执行后修改寻址
模式来计算有效地址时,模修正有效地址
才被写回寄存器。如果使用了地址偏移量
(例如, [W7 + W2] ),会进行地址修改,
但寄存器的内容保持不变。
4.3 位反转寻址
位反转寻址用来简化基 -2 FFT 算法的数据重新排序。位
反转寻址为 X WAGU 所支持,仅限于数据写入。
地址修改量,可以是常数或寄存器的内容,可视为将其
位顺序反转。地址源和目的仍然是正常的顺序。于是,
唯一需要反转的操作数就是地址修改量。
4.3.1 位反转寻址的实现
位反转寻址在下列情况下被使能:
1. MODCON 寄存器中 BWM (W 寄存器选择)的
值,是除 15 以外的任何值 (不能使用位反转寻
址访问堆栈),且
2. XBREV 寄存器中 BREN 位置 1,且
3. 使用的寻址模式是预递增或后递增的寄存器间接
寻址模式。
N
如果位反转缓冲区的长度是 M = 2
区起始地址的最后 “N ”位必须为零。
XB<14:0> 是位反转地址修改量或 “中心点”(pivot
point),通常是一个常数。对于 FFT 计算,其值等于
FFT 数据缓冲区长度的一半。
注: 所有位反转 EA 的计算都使用字大小数据
(每个 EA 的 LSb 始终为零)。为了产生兼
容地址 (字节),要相应地调整 XB 的值。
使能位反转寻址时,仅对预递增或后递增的寄存器间接
寻址、且仅对字大小数据写入,才会进行位反转寻址。
对于任何其他寻址模式或对于字节大小数据,不会进行
位反转寻址,而是生成正常的地址。在进行位反转寻址
时,W 地址指针的增量将始终加上地址修改量 (XB ),
与寄存器间接寻址模式相关的偏移量将被忽略。此外,
由于要求是字大小数据, EA 的 LSb 被忽略 (且始终为
零)。
注: 不应同时使能模寻址和位反转寻址。如果
用户试图这么做的话,对于 X WAGU ,位
反转寻址将优先, X WAGU 模寻址将被禁
止。然而,在 X RAGU 中,模寻址继续起
作用。
如果通过置 1 BREN (XBREV<15> )位使能了位反转
寻址,那么,在写 XBREV 寄存器之后,不应马上进行
要使用被指定为位反转指针的 W 寄存器的间接读操作。
字节,则数据缓冲
图 4-2 : 位反转地址示例
b15 b14 b13 b12
b15 b14 b13 b12
b11 b10 b9 b8
b7 b6 b5 b4 b11 b10 b9 b8
b7 b6 b5 b1
中心点
正常顺序的地址
b3 b2 b1 0
围绕二进制值的中心
左右交换位位置
b2 b3 b4 0
位反转后的地址
对于 16 字位反转缓冲区,XB = 0x0008
DS70150B_CN 第36 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
表 4-2 : 位反转地址序列 (16 项)
正常地址 位反转后的地址
A3 A2 A1 A0
0000 0 0000 0
0001 1 1000 8
0010 2 0100 4
0011 3 1100 12
0100 4 0010 2
0101 5 1010 10
0110 6 0110 6
0111 7 1110 14
1000 8 0001 1
1001 9 1001 9
1010 10 0101 5
1011 11 1101 13
1100 12 0011 3
1101 13 1011 11
1110 14 0111 7
1111 15 1111 15
十进制
A3 A2 A1 A0
十进制
表 4-3 : XBREV 寄存器的位反转地址修改量
缓冲区大小 (字)
4096 0x0800
2048 0x0400
1024 0x0200
512 0x0100
256 0x0080
128 0x0040
64 0x0020
32 0x0010
16 0x0008
8 0x0004
4 0x0002
2 0x0001
XB<14:0> 位反转地址修改量
2007 Microchip Technology Inc. DS70150B_CN 第37 页
dsPIC30F6010A/6015
注:
DS70150B_CN 第38 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
5.0 中断
注:本数据手册总结了 dsPIC30 系列器件的功能,但
并不作为参考大全使用。有关 CPU 、外设、寄存器说
明和通用器件功能的更多信息,请参见 《dsPIC30F
系列参考手册》(DS70046E_CN )。欲知有关指令集
和编程的更多详细信息,请参见 《dsPIC30F/33F 程
序员参考手册》(DS70157B_CN )。
dsPIC30F6010A/6015 具有 44 个中断源和 4 个处理器
异常 (陷阱),必须根据优先级机制对它们进行仲裁。
CPU 负责读取中断向量表 (Interrupt Vector Table,
IVT)并将包含在中断向量中的地址传输给程序计数
器。中断向量通过程序计数器输入端的 24 位宽的多路
开关,从程序数据总线传输到程序计数器。
中断向量表(IVT )和备用中断向量表(Alternate Inter-
rupt Vector Table , AIVT )位于程序存储器起始地址附
近(0x000004)。 IVT 和 AIVT 如图 5-1 所示。
中断和处理器异常传送到处理器内核前,中断控制器负
责对它们进行预处理。使用集中化的特殊功能寄存器允
许、控制外设中断并划分外设中断的优先级。
• IFS0<15:0> 、 IFS1<15:0> 和 IFS2<15:0>
这三个寄存器包含所有中断请求标志位。各中断请
求标志位通过相应外设或外部信号置 1 ,由软件清
零。
• IEC0<15:0> 、 IEC1<15:0> 和 IEC2<15:0>
这三个寄存器包含所有中断允许控制位。这些控制
位用于单独允许外设或外部信号中断。
• IPC0<15:0> 至 IPC11<7:0>
与这 44 个中断相关的用户可分配优先级集中保存
在这 12 个寄存器中。
• IPL<3:0>
当前 CPU 优先级明确地储存在 IPL 位。 IPL<3>
位于 CORCON 寄存器中,而 IPL<2:0> 位于处理
器内核中的状态寄存器 (SR )中。
• INTCON1<15:0> 和 INTCON2<15:0>
全局中断控制功能通过这两个寄存器完成。
INTCON1 包含处理器异常的控制和状态标志位。
INTCON2 寄存器控制外部中断请求信号行为和备
用中断向量表的使用。
• INTTREG<15:0>
INTTREG 寄存器包含相关的中断向量编号和新的
CPU 中断优先级,分别锁存在 INTTREG 寄存器
中的向量编号 (VECNUM<5:0> )和中断优先级
(ILR<3:0> )位域中。新中断优先级是等待处理的
中断的优先级。
注: 发生中断时,无论相应的中断允许位的状
态如何,中断标志位都将置 1 。用户软件应
确保在允许一个中断前清零相应的中断标
志位。
通过 IPCx 寄存器,用户可为所有中断源分配 1 至 7 中
的某一个优先级。各中断源与一个中断向量相关,如表
5-1 所示。优先级 7 和 1 分别表示最高和最低的可屏蔽
优先级。
注: 为中断源分配优先级 0 ,等效于禁止该中
断。
如果 NSTDIS 控制位 (INTCON1<15> )置 1 ,将防止
中断嵌套。这样可防止在处理一个中断时处理另一个新
中断,即使新中断的优先级高于正在处理的中断。
注: 一旦NSTDIS 位置 1 ,IPL位就变为只读位。
一些中断具有边沿或电平触发中断及变化时中断等功能
的特殊控制位。对这些功能的控制由产生中断的外设模
块完成。
当 DISI 位( INTCON2<14> )保持置 1 时,可使用 DISI
指令禁止一定数量的指令对优先级为 6 或更低的中断进
行处理。
处理中断时, PC 中载入存放在程序存储器中相应中断
向量存储单元中的地址。IVT 中有 63 个不同的向量(见
图 5-2 ) 。这些向量保存在程序存储器的 0x000004 至
0x0000FE 存储单元中(见图 5-2 )。这些存储单元包含 24
位地址,为保持鲁棒性,在正常执行期间当 PC 试图取这
些字中的任意一个时,就会发生地址错误陷阱。这样便可
防止由于以下情况而执行随机数据:PC 意外地递减到向量
空间、意外地将数据空间地址映射到向量空间或 PC 在到
达已实现的程序存储空间的末尾后重新回到 0x000000 。执
行 GOTO 指令跳转到此向量空间也会产生地址错误陷
阱。
2007 Microchip Technology Inc. DS70150B_CN 第39 页
dsPIC30F6010A/6015
5.1 中断优先级
各中断源的用户可分配中断优先级 ( IP<2:0>)位于
IPCx 寄存器的各半字节的低三位中。各半字节的 bit 3
位未使用,读为 0 。这些位定义了用户分配给某特定中
断的优先级。
注: 用户可选择优先级范围为 0 (最低优先级)
至 7 (最高优先级)。
因为可能会有一个以上的中断请求源被分配给某一特定
的用户指定的优先级,所以提供了一种在给定的优先级
内部分配优先级的方法。此方法称为 “自然优先级”。
自然优先级取决于中断在向量表中的位置,仅当多个具
有相同的用户分配的优先级的中断同时等待响应时才对
中断操作产生影响。
表 5-1 列出了 dsPIC DSC 器件的中断编号和中断源及其
相应的向量编号。
注 1 : 自然优先级最高为 0 ,最低为 53 。
2 : 自然优先级编号与 INT 编号相同。
用户可为各中断分配七个优先级中的一个,这意味着用
户可为一个具有较低自然优先级的中断分配一个非常高
的总优先级。
表 5-1 : 中断向量表
INT 编号
最高自然优先级
08
19
21 0
31 1
41 2
51 3
61 4
71 5
81 6 S P I 1
91 7
10 18
11 19
12 20
13 21
14 22
15 23
16 24
17 25
18 26
19 27
20 28
21 29
22 30
23 31
24 32
25 33
26 34 SPI2
27 35
28 36
29 37
30 38
31 39
32 40
33 41
34 42
35 43
36 44
37 45
38 46
39 47
40 48
41 49
42 50
43 51
44 52
45-53 53-61
最低自然优先级
向量
编号
INT0——外部中断 0
IC1——输入捕捉 1
OC1—— 输出比较 1
T1—— Timer1
IC2——输入捕捉 2
OC2——输出比较 2
T2—— Timer2
T3—— Timer3
U1RX—— UART1 接收器
U1TX—— UART1 发送器
ADC—— ADC 转换完成
NVM—— NVM 写完成
SI2C—— I
MI2C—— I
输入状态变化中断
INT1——外部中断 1
IC7——输入捕捉 7
IC8——输入捕捉 8
OC3——输出比较 3
OC4——输出比较 4
T4—— Timer4
T5—— Timer5
INT2——外部中断 2
U2RX—— UART2 接收器
U2TX—— UART2 发送器
C1—— CAN1 的组合 IRQ
IC3——输入捕捉 3
IC4——输入捕捉 4
IC5——输入捕捉 5
IC6——输入捕捉 6
OC5——输出比较 5
OC6——输出比较 6
OC7——输出比较 7
OC8——输出比较 8
INT3——外部中断 3
INT4——外部中断 4
C2—— CAN2 的组合 IRQ
PWM—— PWM 周期匹配
QEI—— QEI 中断
保留
保留
FLTA——PWM 故障 A
FLTB—— PWM 故障 B
保留
中断源
2
C™ 从中断
2
C 主中断
DS70150B_CN 第 40 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
5.2 复位过程
由于复位过程中不涉及到中断控制器,所以器件复位并
不是真的异常。复位强制 PC 为零,处理器将初始化其
寄存器以响应复位。处理器随后从存储单元 0x000000
处开始执行程序。 GOTO 指令存储在第一个程序存储单
元中,GOTO 指令的目标地址存储在紧随其后的单元中。
处理器执行 GOTO ,跳转到指定地址,然后开始指定目
标 (起始)地址处的操作。
5.2.1 复位源
有 6 个可导致器件复位的错误源。
• 看门狗定时器超时:
看门狗定时器已超时,表明处理器不再执行正确的
代码流。
• 未初始化的 W 寄存器陷阱:
试图使用一个未初始化的 W 寄存器作为地址指针
将引起复位。
• 非法指令陷阱:
试图执行未使用的操作码将引起非法指令陷阱。注
意,如果由于流更改而使非法指令在执行前被移
走,则取此非法指令不会引起非法指令陷阱。
• 欠压复位 (BOR ):
检测到可能导致器件故障的电源电压短暂降低。
• 陷阱锁定:
多个陷阱条件同时发生会导致复位。
5.3 陷阱
可将陷阱看作一个表明软件或硬件错误的不可屏蔽的中
断,它遵从如图 5-1 所示的预定义的优先级。陷阱旨在
为用户提供一种方法,改正在调试和在应用中工作时的
错误操作。
注: 如果用户不想在陷阱错误条件事件时采取
校正措施,则必须将仅包含 RESET 指令的
默认处理程序的地址装入向量。否则,如
果调用一个包含无效地址的向量,会产生
地址错误陷阱。
注意,很多陷阱条件只有在发生的时候才能被检测到。
因此,在陷阱异常处理之前允许有问题的指令完成执
行。如果用户选择从错误中恢复,则可能需要校正导致
陷阱的错误操作的结果
陷阱有 8 个固定优先级:8 级至 15 级,这意味着处理陷
阱时 IPL3 总是置 1 。
如果用户当前不在执行陷阱,而将 IPL<3:0> 位设置为
0111 (优先级 7 ),这样将禁止所有中断,但仍然能处
理陷阱。
5.3.1 陷阱源
下列陷阱的优先级依次递增。然而,由于所有陷阱都可
以嵌套,因此优先级的作用很小。
算术错误陷阱:
在以下四种情况下执行算术错误陷阱:
1. 如果试图进行以零作除数的除法运算,除法操作
将在周期边界处中止,并产生陷阱。
2. 如果使能的话,当对累加器 A 或 B 进行的算术运
算导致了 bit 31 溢出,并且没有使用累加器警戒
位时,将产生算术错误陷阱。
3. 如果使能的话,当对累加器 A 或 B 进行的算术运
算导致了 bit 39 灾难性溢出,并且所有饱和被禁
止,将产生算术错误陷阱。
4. 如果在移位指令中指定的移位位数大于允许的最
大移位位数,将产生陷阱。
2007 Microchip Technology Inc. DS70150B_CN 第41 页
dsPIC30F6010A/6015
地址错误陷阱:
当发生以下情况时,将产生此陷阱:
1. 试图访问未对齐的数据字。
2. 试图从未实现的数据存储单元取数据。
3. 试图访问未实现的程序存储单元。
4. 试图从向量空间取指令。
注: 在 MAC 类指令中,当数据空间分割为 X 和
Y 数据空间时,未实现的 X 空间包括所有
的 Y 空间,未实现的 Y 空间包括所有的 X
空间。
5. 执行一条“BRA #literal”指令或一条“ GOTO
#literal”指令,其中 literal 为一个未实现
的程序存储器地址。
6. 修改 PC 使之指向未实现的程序存储器地址后执
行指令。通过将值装入堆栈并执行 RETURN 指令
可以修改 PC 。
堆栈错误陷阱:
当发生以下情况时,产生此陷阱:
1. 堆栈指针中载入的值大于写入到SPLIM 寄存器的
(用户可编程)极限值 (堆栈溢出)。
2. 堆栈指针中载入一个小于 0x0800 的值 (简单堆
栈下溢)。
振荡器故障陷阱:
如果外部振荡器出现故障,器件使用备用的内部 RC 振
荡器工作,就会产生振荡器故障陷阱。
5.3.2 硬陷阱和软陷阱
在同一周期内可能会产生多个陷阱(例如,把不对齐的
字写入堆栈中的溢出地址)。此时,图 5-1 所示的固定
优先级就会起作用;为了完全纠正错误,这可能需要用
户检查是否有其他等待处理的陷阱。
“软”陷阱包括优先级 8 到 11 的异常。算术错误陷阱
(优先级 11 )就属于这一类陷阱。
“硬”陷阱包括优先级 12 至 15 的异常。地址错误(优
先级 12 )、堆栈错误 (优先级 13 )和振荡器错误 (优
先级 14 )陷阱就属于这一类。
每个硬陷阱产生时,在执行任何代码之前,必须先对它
进行响应。在优先级较高的陷阱正在等待处理、被响应
或正在处理过程中时,如果产生了较低优先级的陷阱,
就会产生硬陷阱冲突。
在硬陷阱冲突条件下,器件会自动复位。发生复位时,
TRAPR 状态位 (RCON<15> )置 1 ,因此可在软件中
检测该条件。
图 5-1 : 陷阱向量
递减
复位 - GOTO 指令
复位 - GOTO 地址
保留
振荡器故障陷阱向量
地址错误陷阱向量
堆栈错误陷阱向量
算术错误陷阱向量
IVT
优先级
保留向量
保留向量
保留向量
中断向量 0
中断向量 1
0x000000
0x000002
0x000004
0x000014
AIVT
中断向量 52
中断向量 53
保留
保留
保留
振荡器故障陷阱向量
堆栈错误陷阱向量
地址错误陷阱向量
算术错误陷阱向量
保留向量
保留向量
保留向量
中断向量 0
中断向量 1
中断向量 52
中断向量 53
0x00007E
0x000080
0x000082
0x000084
0x000094
0x0000FE
DS70150B_CN 第 42 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
5.4 中断过程
由 IFSx 寄存器在各指令周期的开头采样所有中断事件
标志位。IFSx 寄存器中等于 1 的标志位表示一个等待处
理的中断请求 (IRQ )。如果中断允许 (IECx )寄存器
中的相应位置 1 ,则 IRQ 会导致中断。在 IRQ 采样后余
下的指令周期中,将评估所有待处理中断请求的优先
级。
如果有待处理的 IRQ ,它的优先级比 IPL 位中的当前处
理器优先级高,则处理器将被中断。
随后处理器将当前程序计数器的值和处理器状态寄存器
的低字节 (SRL )压入堆栈,如图 5-2 所示。状态寄存
器的低字节包含中断周期开始前的处理器优先级。处理
器随后将此中断的优先级载入状态寄存器。完成中断服
务程序前,此操作禁止所有的低优先级中断。
图 5-2 : 中断堆栈帧
0x0000
PC<15:0>
SRL IPL3 PC<22:16>
生长
堆栈向高地址方向
< 空字 >
0 15
W15(CALL 前)
W15(CALL 后)
POP : [--W15]
PUSH : [W15++]
5.5 备用向量表
在程序存储器中,中断向量表 (IVT )之后紧跟备用中
断向量表 (AIVT ),如图 5-1 所示。 INTCON2 寄存器
中的 ALTIVT 位控制对备用向量表的访问。如果 ALTIVT
位置 1 ,所有中断和异常处理将使用备用向量而不是默
认的向量。备用向量与默认向量的构成相同。AIVT 提供
了一种在应用和支持环境之间切换的方法,从而支持仿
真和调试功能,而不需要对中断向量进行再编程。这个
特性也支持运行时在不同应用之间切换,以便评估各种
软件算法。
如果不需要 AIVT ,则分配给 AIVT 的程序存储器可用于
其他用途。AIVT 不是受保护的区域,用户可对其自由编
程。
5.6 快速现场保护
使用影子寄存器可保存现场。为 SR 中的 DC 、N、OV、
Z 和 C 位及寄存器 W0 至 W3 提供了影子寄存器。影子
寄存器深度仅为一级。仅可使用 PUSH.S 和 POP.S 指
令访问影子寄存器。
当处理器转移到中断向量开始处理中断时,可以使用
PUSH.S 指令,把上述寄存器的当前值保存到它们对应
的影子寄存器中去。
如果一个具有特定优先级的 ISR 使用PUSH.S 和 POP.S
指令进行快速现场保护,那么优先级更高的 ISR 就不应
再使用这两条指令。如果优先级较高的 ISR 使用了快速
现场保护,那么在优先级较低的中断处理期间,用户必
须保存关键寄存器。
注 1 : 用户能始终通过向 SR 写入一个新值以降低
优先级。必须在降低处理器中断优先级之
前,在中断服务程序中清除 IFSx 寄存器中的
中断标志位以避免重复中断。
2 : 处理中断时, IPL3 位( CORCON<3>)总
是被清零。只有在进行陷阱处理时,该位才
会被置 1。
RETFIE (从中断返回)指令将程序计数器和状态寄存
器中的值弹出堆栈并使处理器返回到中断过程前的状
态。
5.7 外部中断请求
中断控制器支持五种外部中断请求信号:INT0-INT4 。
这些输入是边沿敏感的;它们要求一个由低到高或由高
到低的跳变以产生一个中断请求。 INTCON2 寄存器具
有 5 个位(INT0EP-INT4EP ),用于选择边沿检测电路
的极性。
5.8 从休眠和空闲模式唤醒
如果产生中断时处理器处于休眠或空闲模式,则可使用
中断控制器将处理器从休眠或空闲模式唤醒。
如果中断控制器接收到一个具有足够优先级的已允许的
中断请求,则标准中断请求会送至处理器。同时,处理
器会从休眠或空闲模式唤醒并开始执行处理中断请求所
需的中断服务程序 (ISR )。
2007 Microchip Technology Inc. DS70150B_CN 第43 页
DS70150B_CN 第 44 页 2007 Microchip Technology Inc.
表 5-2: dsPIC30F6010A 中断控制器寄存器映射
SFR 名称
INTCON1 0080 NSTDIS
INTCON2 0082 ALTIVT DISI
IFS0 0084 CNIF MI2CIF SI2CIF NVMIF ADIF U1TXIF U1RXIF SPI1IF T3IF T2IF OC2IF IC2IF T1IF OC1IF IC1IF INT0IF
IFS1 0086 IC6IF IC5IF IC4IF IC3IF C1IF SPI2IF U2TXIF U2RXIF INT2IF T5IF T4IF OC4IF OC3IF IC8IF IC7IF INT1IF
IFS2 0088
IEC0 008C CNIE MI2CIE SI2CIE NVMIE ADIE U1TXIE U1RXIE SPI1IE T3IE T2IE OC2IE IC2IE T1IE OC1IE IC1IE INT0IE
IEC1 008E IC6IE IC5IE IC4IE IC3IE C1IE SPI2IE U2TXIE U2RXIE INT2IE T5IE T4IE OC4IE OC3IE IC8IE IC7IE INT1IE
IEC2 0090
IPC0 0094
IPC1 0096
IPC2 0098
IPC3 009A
IPC4 009C
IPC5 009E
IPC6 00A0
IPC7 00A2
IPC8 00A4
IPC9 00A6
IPC10 00A8
IPC11 00AA
INTTREG 00B0
图注: u = 未初始化的位
地址
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
- - - -
- - - - - - - - -
- - -
- - -
-
-
-
-
-
-
-
-
-
-
-
- - - - - - - - - - - - -
- - - -
T1IP<2:0>
T31P<2:0>
ADIP<2:0>
CNIP<2:0>
OC3IP<2:0>
INT2IP<2:0>
C1IP<2:0>
IC6IP<2:0>
OC8IP<2:0>
PWMIP<2:0>
FLTAIP<2:0>
FLTBIF FLTAIF
FLTBIE FLTAIE
OVAT E OV BT E CO VTE
- -
- -
-
-
-
-
-
-
-
-
-
-
- - - - - - - - -
OC1IP<2:0>
T2IP<2:0>
U1TXIP<2:0>
MI2CIP<2:0>
IC8IP<2:0>
T5IP<2:0>
SPI2IP<2:0>
IC5IP<2:0>
OC7IP<2:0>
C2IP<2:0>
ILR<3:0>
QEIIF PWMIF C2IF INT4IF INT3IF OC8IF OC7IF OC6IF OC5IF
QEIIE PWMIE C2IE INT4IE INT3IE OC8IE OC7IE OC6IE OC5IE
- - -
-
-
-
-
-
-
-
-
-
-
- -
IC1IP<2:0>
OC2IP<2:0>
U1RXIP<2:0>
SI2CIP<2:0>
IC7IP<2:0>
T4IP<2:0>
U2TXIP<2:0>
IC4IP<2:0>
OC6IP<2:0>
INT41IP<2:0>
MATHERR ADDRERR STKERR OSCFAIL
INT4EP INT3EP INT2EP INT1EP INT0EP
-
-
-
-
-
-
-
-
-
-
VECNUM<5:0>
INT0IP<2:0>
IC2IP<2:0>
SPI1IP<2:0>
NVMIP<2:0>
INT1IP<2:0>
OC4IP<2:0>
U2RXIP<2:0>
IC3IP<2:0>
OC5IP<2:0>
INT3IP<2:0>
QEIIP<2:0>
FLTBIP<2:0>
-
dsPIC30F6010A/6015
复位状态
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
0100 0100 0100 0100
0100 0100 0100 0100
0100 0100 0100 0100
0100 0100 0100 0100
0100 0100 0100 0100
0100 0100 0100 0100
0100 0100 0100 0100
0100 0100 0100 0100
0100 0100 0100 0100
0100 0100 0100 0100
0100 0000 0000 0000
0000 0000 0000 0100
0000 0000 0000 0000
2007 Microchip Technology Inc. DS70150B_CN 第45 页
表 5-3 : dsPIC30F6015 的中断控制器寄存器映射
SFR 名称
INTCON1 0080 NSTDIS
INTCON2 0082 ALTIVT DISI
IFS0 0084 CNIF MI2CIF SI2CIF NVMIF ADIF U1TXIF U1RXIF SPI1IF T3IF T2IF OC2IF IC2IF T1IF OC1IF IC1IF INT0IF
IFS1 0086 IC6IF IC5IF IC4IF IC3IF C1IF SPI2IF U2TXIF U2RXIF INT2IF T5IF T4IF OC4IF OC3IF IC8IF IC7IF INT1IF
IFS2 0088
IEC0 008C CNIE MI2CIE SI2CIE NVMIE ADIE U1TXIE U1RXIE SPI1IE T3IE T2IE OC2IE IC2IE T1IE OC1IE IC1IE INT0IE
IEC1 008E IC6IE IC5IE IC4IE IC3IE C1IE SPI2IE U2TXIE U2RXIE INT2IE T5IE T4IE OC4IE OC3IE IC8IE IC7IE INT1IE
IEC2 0090
IPC0 0094
IPC1 0096
IPC2 0098
IPC3 009A
IPC4 009C
IPC5 009E
IPC6 00A0
IPC7 00A2
IPC8 00A4
IPC9 00A6
IPC10 00A8
IPC11 00AA
INTTREG 00B0
图注: 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
地址
— — — — OVATE OVBTE COVTE — — — MATHERR ADDRERR STKERR OSCFAIL —
— — — — — — — — — INT4EP INT3EP INT2EP INT1EP INT0EP
— — — FLTBIF FLTAIF — — QEIIF PWMIF — INT4IF INT3IF OC8IF OC7IF OC6IF OC5IF
— — — F LTB IE FLTAI E — — QEIIE PWMIE — INT4IE INT3IE OC8IE OC7IE OC6IE OC5IE
— T1IP<2:0> —O C 1 I P < 2 : 0 >— IC1IP<2:0> — INT0IP<2:0>
— T31P<2:0> — T2IP<2:0> —O C 2 I P < 2 : 0 > — IC2IP<2:0>
—A D I P < 2 : 0 >— U1TXIP<2:0> — U1RXIP<2:0> — SPI1IP<2:0>
— CNIP<2:0> —M I 2 C I P < 2 : 0 >— SI2CIP<2:0> — NVMIP<2:0>
—O C 3 I P < 2 : 0 >— IC8IP<2:0> — IC7IP<2:0> — INT1IP<2:0>
— INT2IP<2:0> — T5IP<2:0> — T4IP<2:0> — OC4IP<2:0>
— C1IP<2:0> — SPI2IP<2:0> — U2TXIP<2:0> — U2RXIP<2:0>
—I C 6 I P < 2 : 0 >— IC5IP<2:0> — IC4IP<2:0> — IC3IP<2:0>
—O C 8 I P < 2 : 0 >—O C 7 I P < 2 : 0 >—O C 6 I P < 2 : 0 > — OC5IP<2:0>
— PWMIP<2:0> — — — — —I N T 4 1 I P < 2 : 0 > — INT3IP<2:0>
— FLTAIP<2:0> — — — — — — — — — QEIIP<2:0>
— — — — — — — — — — — — — FLTBIP<2:0>
— — — —I L R < 3 : 0 >— — VECNUM<5:0>
复位状态
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
0100 0100 0100 0100
0100 0100 0100 0100
0100 0100 0100 0100
0100 0100 0100 0100
0100 0100 0100 0100
0100 0100 0100 0100
0100 0100 0100 0100
0100 0100 0100 0100
0100 0100 0100 0100
0100 0000 0100 0100
0100 0000 0000 0000
0000 0000 0000 0100
0000 0000 0000 0000
dsPIC30F6010A/6015
dsPIC30F6010A/6015
注:
DS70150B_CN 第46 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
6.0 闪存程序存储器
注: 本数据手册总结了 dsPIC30F 系列器件的功能,
但并不作为参考大全使用。有关 CPU 、外设、寄存器
说明和一般器件功能的更多信息,请参见《dsPIC30F
系列参考手册》(DS70046E_CN )。有关器件指令集
和编程的更多信息,请参见《dsPIC30F/33F 程序员参
考手册》(DS70157B_CN )。
dsPIC30F 系列器件包含用以执行用户代码的内部闪存
程序存储器。 用户可使用以下两种方法对该存储器编
程:
1. 在线串行编程 ( ICSP™)
2. 运行时自编程 ( RTSP)
6.1 在线串行编程 (ICSP )
可以在最终的应用电路中对 dsPIC30F 器件进行串行编
程。 只需要 5 根线即可实现这一操作,其中编程时钟线
和编程数据线(分别称为 PGC 和 PGD )各一根,其余
3 根分别是电源线 (V
线(MCLR
)。 这允许用户在制造电路板时使用未编程
器件,仅在产品交付前才对数字信号控制器进行编程。
从而也可以将最新版本的固件或者定制固件烧写到器件
中。
DD)、接地线 (VSS )和主复位
6.2 运行时自编程 (RTSP )
运行时自编程(RTSP )使 用 TBLRD (表读)和 TBLWT
(表写)指令实现。
使用 RTSP ,用户可以一次擦除 32 个指令字(96 字节)
的程序存储单元,一次可写入 32 个指令字 (96 字节)
的程序存储数据。
6.3 表指令操作综述
TBLRDL 和 TBLWTL 指令用来读或写程序存储器的
bit<15:0>。 TBLRDL 和 TBLWTL 可以字或字节模式访问
程序存储器。
TBLRDH 和 TBLWTH 指令用来读或写程序存储器的
bit<23:16> 。 TBLRDH 和 TBLWTH 可以字或字节模式访
问程序存储器。
使用 TBLPAG 寄存器的 bits<7:0> 和来自表指令中指定
的 W 寄存器的有效地址 (Effective Address , EA )构
成 24 位的程序存储器地址,如图 6-1 所示。
图 6-1 :表 和NVM 寄存器寻址
使用
程序
计数器
使用
NVMADR
寻址
使用
表指令
用户/配置
空间选择
0
1/0
1/0
NVMADRU
8
位
TBLPAG
8
位
寄存器
寄存器
24
位
程序计数器
NVMADR
24位EA
寄存器
16
位
工作寄存器
16
位
0
EA
EA
字节
选择
2007 Microchip Technology Inc. DS70150B_CN 第 47 页
dsPIC30F6010A/6015
6.4 RTSP 操作
dsPIC30F 闪存程序存储器以行和板为单位构成。 每行
由 32 条指令或 96 字节组成。 每板由 128 行或 4K x 24
个指令字组成。 RTSP 允许用户每次擦除一行 (32 条
指令)、每次编程 32 条指令。
程序存储器的每板都包含写锁存器,它能够保存 32 个
指令字的编程数据。在实际编程操作前,等待写入的数
据必须先装入板的写锁存器。要写入板的数据按顺序装
载到写锁存器中:指令 0 ,指令 1 ,依此类推。 装载的
指令字必须始终来自 32 个指令字的地址边界。
RTSP 编程的基本步骤是先建立一个表指针,然后执行
一系列TBLWT 指令,装载写锁存器。通过设置NVMCON
寄存器中的特定位启动编程。装载 32 条指令需要 32 条
TBLWTL 和 32 条 TBLWTH 指令。
由于只需要写表锁存器,所以所有表写操作都是单字写
入(2 个指令周期)。
写表锁存器之后,需要启动可编程操作以对数据进行编
程。
在正常工作状态下的整个 V
都是可读 / 写和可擦除的。
DD 范围内,闪存程序存储器
6.5 RTSP 控制寄存器
有四个 SFR 用于读写闪存程序存储器,它们是:
• NVMCON
• NVMADR
• NVMADRU
• NVMKEY
6.5.1 NVMCON 寄存器
NVMCON 寄存器控制要擦除的块、要编程的存储器类
型以及编程周期的启动。
6.5.2 NVMADR 寄存器
NVMADR 寄存器用于存放有效地址的两个低字节。 它
捕捉已被执行的上一条表指令的 EA<15:0> ,选择要写
入的行。
6.5.3 NVMADRU 寄存器
NVMADRU 寄存器用来保持有效地址的高字节。 它捕
捉已执行的上一条表指令的 EA<23:16>。
6.5.4 NVMKEY 寄存器
NVMKEY 是一个用于写保护的只写寄存器。 要启动编
程或擦除过程,用户必须把 0x55 和 0xAA 连续写入
NVMKEY 寄存器。 更多详细信息请参见第 6.6 节“编
程操作”。
注: 用户也可直接写 NVMADR 和 NVMADRU
寄存器,以指定待擦除或编程的程序存储
器的地址。
DS70150B_CN 第 48 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
6.6 编程操作
在 RTSP 模式下,对内部闪存进行编程或擦除需要完整
的编程过程。编程操作持续时间的标称值为 2 ms ,在 此
期间处理器暂停 (等待)操作完成。将 WR 位
(NVMCON<15> )置 1 启动编程操作,操作结束后将
自动清零 WR 位。
6.6.1 闪存程序存储器的编程算法
用户可以一次擦除或编程闪存程序存储器的一行。 一般
步骤如下:
1. 读取闪存程序存储器的一行 (32 个指令字)并
将读到的内容作为数据“映像”存储到数据 RAM
中。
2. 使用所需的新数据更新数据映像。
3. 擦除闪存程序存储器行。
a) 设置 NVMCON 寄存器以允许对闪存程序存
储器进行多字擦除,并将 WREN 位置 1。
b) 把要擦除的行地址写入寄存器 NVMADRU/
NVMDR。
c) 把“55”写入 NVMKEY。
d) 把“AA”写入 NVMKEY。
e) 在擦除周期中 CPU 将暂停。
f) 将 WR 位置 1。这将开始擦除周期。
g) 将 WR 位置 1。这将开始擦除周期。
4. 从数据 RAM“映像”中把 32 个指令字的数据写
入闪存程序存储器写锁存器。
5. 将 32 个指令字写入闪存程序存储器。
a) 设置 NVMCON 寄存器以允许对闪存程序存
储器进行多字编程,并将 WREN 位置 1。
b) 把“55”写入 NVMKEY。
c) 把“AA”写入 NVMKEY。
d) 将 WR 位置 1。这将开始编程周期。
e) 在编程周期中 CPU 将暂停。
f) 当编程周期结束时, WR 位会被硬件清零。
6. 根据需要重复步骤 1 到 5,对所需的闪存程序存
储器进行编程。
6.6.2 擦除程序存储器的一行
例 6-1 所示的代码序列可以用来擦除程序存储器的一行
(32 个指令字)。
例 6-1 : 擦除程序存储器的一行
; Setup NVMCON for erase operation, multi word write
; program memory selected, and writes enabled
; Init pointer to row to be ERASED
MOV #0x4041,W0 ;
MOV W0
MOV #tblpage(PROG_ADDR),W0 ;
MOV W0
MOV #tbloffset(PROG_ADDR),W0 ; Intialize in-page EA[15:0] pointer
MOV W0, NVMADR ; Intialize NVMADR SFR
DISI #5 ; Block all interrupts with priority <7
MOV #0x55,W0
MOV W0
MOV #0xAA,W1 ;
MOV W1
BSET NVMCON,#WR ; Start the erase sequence
NOP ; Insert two NOPs after the erase
NOP ; command is asserted
NVMCON ; Init NVMCON SFR
,
NVMADRU ; Initialize PM Page Boundary SFR
,
; for next 5 instructions
NVMKEY ; Write the 0x55 key
,
NVMKEY ; Write the 0xAA key
,
2007 Microchip Technology Inc. DS70150B_CN 第 49 页
dsPIC30F6010A/6015
6.6.3 装载写锁存器
例 6-2 给出了可用来装载 96 字节的写锁存器的指令序
列。 需要 32 条 TBLWTL 指令和 32 条 TBLWTH 指令来装
载由表指针选定的写锁存器。
例 6-2 : 装载写锁存器
; Set up a pointer to the first program memory location to be written
; program memory selected, and writes enabled
; Perform the TBLWT instructions to write the latches
; 0th_program_word
; 1st_program_word
; 2nd_program_word
; 31st_program_word
MOV #0x0000,W0 ;
MOV W0
MOV #0x6000,W0 ; An example program memory address
MOV #LOW_WORD_0,W2 ;
MOV #HIGH_BYTE_0,W3 ;
TBLWTL W2
TBLWTH W3
MOV #LOW_WORD_1,W2 ;
MOV #HIGH_BYTE_1,W3 ;
TBLWTL W2
TBLWTH W3
MOV #LOW_WORD_2,W2 ;
MOV #HIGH_BYTE_2,W3 ;
TBLWTL W2
TBLWTH W3
•
•
•
MOV #LOW_WORD_31,W2 ;
MOV #HIGH_BYTE_31,W3 ;
TBLWTL W2
TBLWTH W3
TBLPAG ; Initialize PM Page Boundary SFR
,
[W0] ; Write PM low word into program latch
,
[W0++] ; Write PM high byte into program latch
,
[W0] ; Write PM low word into program latch
,
[W0++] ; Write PM high byte into program latch
,
[W0] ; Write PM low word into program latch
,
[W0++] ; Write PM high byte into program latch
,
[W0] ; Write PM low word into program latch
,
[W0++] ; Write PM high byte into program latch
,
注:在例 6-2 中, W3 中高字节的内容无效。
6.6.4 启动编程序列
出于保护的目的,必须使用 NVMKEY 的写启动序列,
以便允许进行任何擦除或编程操作。在执行编程命令
后,用户必须等待一段时间 (编程时间),直至编程完
成。 编程开始后紧跟的两条指令必须为 NOP 指令。
例 6-3 : 启动编程序列
DISI #5 ; Block all interrupts with priority <7
MOV #0x55,W0
MOV W0
MOV #0xAA,W1 ;
MOV W1
BSET NVMCON,#WR ; Start the erase sequence
NOP ; Insert two NOPs after the erase
NOP ; command is asserted
NVMKEY ; Write the 0x55 key
,
NVMKEY ; Write the 0xAA key
,
; for next 5 instructions
DS70150B_CN 第 50 页 2007 Microchip Technology Inc.
2007 Microchip Technology Inc. DS70150B_CN 第 51 页
表 6-1 : NVM 寄存器映射
寄存器名称 地址
NVMCON 0760 WR WREN WRERR
NVMADR 0762 NVMADR<15:0>
NVMADRU 0764
NVMKEY 0766
图注: 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
- - - -
- - - - - - - -
- - - - - - - -
TWRI
-
PROGOP<6:0> 0000 0000 0000 0000
NVMADR<23:16>
KEY<7:0>
复位状态
uuuu uuuu uuuu uuuu
0000 0000 uuuu uuuu
0000 0000 0000 0000
dsPIC30F6010A/6015
dsPIC30F6010A/6015
注:
DS70150B_CN 第 52 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
7.0 数据 EEPROM 存储器
注: 本数据手册总结了 dsPIC30F 系列器件的功能,但
并不作为参考大全使用。有关 CPU 、外设、寄存器说明
和一般器件功能的更多信息,请参见《dsPIC30F 系列参
考手册》(DS70046E_CN )。有关器件指令集和编程的
更多信息,请参见 《dsPIC30F/33F 程序员参考手册》
(DS70157B_CN )。
在整个 VDD 范围内的正常操作期间,数据 EEPROM 存
储器是可读且可写的。数据 EEPROM 存储器直接映射
到程序存储器地址空间。
用来读写闪存程序存储器的这四个特殊功能寄存器,也
用来访问数据 EEPROM 存储器。如第 4.0 节 “地址发
生器单元”所述,这些寄存器是:
• NVMCON
• NVMADR
• NVMADRU
• NVMKEY
EEPROM 数据存储器允许读写单字和 16 字长的块。针
对数据存储器时,NVMADR 与 NVMADRU 寄存器配合
使用,用于寻址要访问的 EEPROM 单元。 TBLRDL 和
TBLWTL 指令用于读写数据 EEPROM 。 dsPIC30F6010
器件有最多 8 KB (4 KW )的数据 EEPROM ,地址范
围从 0x7FF000 到 0x7FFFFE 。
字写操作之前,应先擦除相应的存储单元。完成写操
作通常需要 2 ms ,但此时间将随电压和温度的变化而变
化。
对数据 EEPROM 进行编程或擦除操作,不会停止指令
流。在启动另一次数据 EEPROM 写 / 擦除操作之前,用
户需要等待一段适当的时间。在编程或擦除操作进行过
程中,若试图读数据 EEPROM ,将返回不确定的数据。
控制位 WR 启动写操作,这与闪存程序存储器的写操作
类似。可通过软件将 WR 位置 1 ,但不能将其清零。写
操作完成时,硬件将清零 WR 位。不能用软件清零 WR
位,这样避免了意外或提早结束写操作。
WREN 位置 1 时将允许进行写操作。上电时, WREN
位清零。当写操作被正常工作期间的MCLR
超时复位所中断时, WRERR 位置 1 。在这种情况下,
复位后,用户可以检查 WRERR ,重写此存储单元。此
地址寄存器 NVMADR 保持不变。
注: 写操作完成后, IFS0 寄存器中的中断标志
位 NVMIF 将置 1 。NVMIF 位必须用软件清
零。
复位或WDT
7.1 读数据 EEPROM
TBLRD 指令读取位于当前程序字地址的字。下面的示例
使用W0 作为指向数据 EEPROM 的指针。结果存放在寄
存器 W4 中,如例 7-1 所示。
例 7-1 :读 数 据EEPROM
MOV #LOW_ADDR_WORD,W0 ; Init Pointer
MOV #HIGH_ADDR_WORD,W1
MOV W1
TBLRDL [ W0 ], W4 ; read data EEPROM
TBLPAG
,
2007 Microchip Technology Inc. DS70150B_CN 第53 页
dsPIC30F6010A/6015
7.2 擦除数据 EEPROM
7.2.1 擦除数据 EEPROM 的一块
为了擦除数据 EEPROM 的一块,首先 NVMADRU 和
NVMADR 寄存器必须指向要擦除的存储块。将
NVMCON 配置为擦除数据 EEPROM 的块,并将
NVMCON 寄存器中的 WR 位和 WREN 位置 1。置 1
WR 位以启动擦除操作,如例 7-2 所示。
例 7-2 :数 据EEPROM 块擦除操作
; Select data EEPROM block, WR, WREN bits
MOV #4045,W0
MOV W0
; Start erase cycle by setting WR after writing key sequence
DISI #5 ; Block all interrupts with priority <7
MOV #0x55,W0 ;
MOV W0
MOV #0xAA,W1 ;
MOV W1
BSET NVMCON,#WR ; Initiate erase sequence
NOP
NOP
; Erase cycle will complete in 2mS. CPU is not stalled for the Data Erase Cycle
; User can poll WR bit, use NVMIF or Timer IRQ to determine erasure complete
NVMCON ; Initialize NVMCON SFR
,
; for next 5 instructions
NVMKEY ; Write the 0x55 key
,
NVMKEY ; Write the 0xAA key
,
7.2.2 擦除数据 EEPROM 的一个字
NVMADRU 和 NVMADR寄存器必须指向要擦除的存储
块。在 NVMCON 寄存器中,选择数据闪存的一个块,
并将 WR 和 WREN 位置 1 。将 WR 位置 1 启动擦除操
作,如例 7-3 所示。
例 7-3 :数 据EEPROM 字擦除操作
; Select data EEPROM word, WR, WREN bits
MOV #4044,W0
MOV W0
; Start erase cycle by setting WR after writing key sequence
DISI #5 ; Block all interrupts with priority <7
MOV #0x55,W0 ;
MOV W0
MOV #0xAA,W1 ;
MOV W1
BSET NVMCON,#WR ; Initiate erase sequence
NOP
NOP
; Erase cycle will complete in 2 ms. CPU is not stalled for the Data Erase Cycle
; User can poll WR bit, use NVMIF or Timer IRQ to determine erasure complete
NVMCON
,
; for next 5 instructions
NVMKEY ; Write the 0x55 key
,
NVMKEY ; Write the 0xAA key
,
DS70150B_CN 第 54 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
7.3 写数据 EEPROM
要写 EEPROM 数据存储单元,必须按照下列顺序进行:
1. 擦除数据 EEPROM 的字。
a) 在 NVMCON 寄存器中,选择字擦除数据
EEPROM,并将 WREN 位置 1。
b) 把要擦除的字地址写入 NVMADRU/
NVMADR。
c) 允许 NVM 中断 (可选)。
d) 把“55”写入 NVMKEY。
e) 把“AA”写入 NVMKEY。
f) 将 WR 位置 1。这将开始擦除周期。
g) 查询 NVMIF 位,或等待 NVMIF 中断。
h) 擦除周期结束后, WR 位会被清零。
2. 将数据字写入数据 EEPROM 写锁存器中。
3. 把 1 个数据字烧写到数据 EEPROM 中。
a) 在 NVMCON 寄存器中,选择字编程数据
EEPROM,并置 1 WREN 位。
b) 允许 NVM 写完成中断 (可选)。
c) 把“55”写入 NVMKEY。
d) 把“AA”写入 NVMKEY。
e) 将 WR 位置 1。这将开始编程周期。
f) 查询 NVMIF 位,或等待 NVM 中断。
g) 写周期结束后, WR 位会被清零。
对于每个字,如果未严格遵守上述序列 (把 0x55 写入
NVMKEY, 把 0xAA 写入 NVMCON,然后将 WR 位置
1) ,写操作将不会启动。强烈建议在这段代码执行期
间,禁止中断。
此外,必须将 NVMCON 中的 WREN 位置 1 来使能写
操作。这样的机制防止了由于不可预料的代码- 执行而意
外地写数据 EEPROM 。除非在更新 EEPROM 时,否则
WREN 位应该始终保持清零。 硬件不能清零WREN 位。
在写过程启动之后,清零 WREN 位将不会影响当前的
写周期。禁止把 WR 位置 1 ,除 非 WREN 位置 1 。必须
在前一条指令中将 WREN 位置 1 。不能在同一条指令中
将 WR 和 WREN 位置 1 。
写周期结束时,硬件清零 WR 位,非易失性存储器写完
成中断标志位 (NVMIF )置 1 。用户可以允许这个中
断,或者查询此标志位。 NVMIF 位必须由软件清零。
7.3.1 写数据 EEPROM 的一个字
一旦用户擦除了要编程的字,则表写指令用来写写锁存
器,如例 7-4 所示。
例 7-4 :数 据EEPROM 字写操作
; Point to data memory
MOV #LOW_ADDR_WORD,W0 ; Init pointer
MOV #HIGH_ADDR_WORD,W1
MOV W1
MOV #LOW(WORD),W2 ; Get data
TBLWTL W2
; The NVMADR captures last table access address
; Select data EEPROM for 1 word op
MOV #0x4004,W0
MOV W0
; Operate key to allow write operation
DISI #5 ; Block all interrupts with priority <7
MOV #0x55,W0
MOV W0
MOV #0xAA,W1
MOV W1
BSET NVMCON,#WR ; Initiate program sequence
NOP
NOP
; Write cycle will complete in 2mS. CPU is not stalled for the Data Write Cycle
; User can poll WR bit, use NVMIF or Timer IRQ to determine write complete
TBLPAG
,
[ W0] ; Write data
,
NVMCON
,
; for next 5 instructions
NVMKEY ; Write the 0x55 key
,
NVMKEY ; Write the 0xAA key
,
2007 Microchip Technology Inc. DS70150B_CN 第55 页
dsPIC30F6010A/6015
7.3.2 写数据 EEPROM 的一块
要写入数据 EEPROM 的一个存储块,应首先写入所有
16 个锁存器,然后设置 NVMCON 寄存器,并对此存储
块进行编程。
例 7-5 :数 据EEPROM 块写操作
MOV #LOW_ADDR_WORD,W0 ; Init pointer
MOV #HIGH_ADDR_WORD,W1
MOV W1
MOV #data1,W2 ; Get 1st data
TBLWTL W2
MOV #data2,W2 ; Get 2nd data
TBLWTL W2
MOV #data3,W2 ; Get 3rd data
TBLWTL W2
MOV #data4,W2 ; Get 4th data
TBLWTL W2
MOV #data5,W2 ; Get 5th data
TBLWTL W2
MOV #data6,W2 ; Get 6th data
TBLWTL W2
MOV #data7,W2 ; Get 7th data
TBLWTL W2
MOV #data8,W2 ; Get 8th data
TBLWTL W2
MOV #data9,W2 ; Get 9th data
TBLWTL W2
MOV #data10,W2 ; Get 10th data
TBLWTL W2
MOV #data11,W2 ; Get 11th data
TBLWTL W2
MOV #data12,W2 ; Get 12th data
TBLWTL W2
MOV #data13,W2 ; Get 13th data
TBLWTL W2
MOV #data14,W2 ; Get 14th data
TBLWTL W2
MOV #data15,W2 ; Get 15th data
TBLWTL W2
MOV #data16,W2 ; Get 16th data
TBLWTL W2
MOV #0x400A,W0 ; Select data EEPROM for multi word op
MOV W0
DISI #5 ; Block all interrupts with priority <7
MOV #0x55,W0
MOV W0
MOV #0xAA,W1
MOV W1
BSET NVMCON,#WR ; Start write cycle
NOP
NOP
TBLPAG
,
[ W0]++ ; write data
,
[ W0]++ ; write data
,
[ W0]++ ; write data
,
[ W0]++ ; write data
,
[ W0]++ ; write data
,
[ W0]++ ; write data
,
[ W0]++ ; write data
,
[ W0]++ ; write data
,
[ W0]++ ; write data
,
[ W0]++ ; write data
,
[ W0]++ ; write data
,
[ W0]++ ; write data
,
[ W0]++ ; write data
,
[ W0]++ ; write data
,
[ W0]++ ; write data
,
[ W0]++ ; write data. The NVMADR captures last table access address.
,
NVMCON ; Operate Key to allow program operation
,
; for next 5 instructions
NVMKEY ; Write the 0x55 key
,
NVMKEY ; Write the 0xAA key
,
7.4 写校验
根据不同的应用,可能要求把已写入存储器中的值与原
始值进行校验,这是良好的编程习惯。大写操作次数过
多且接近规范的极限值时, 就应该对应用进行写校验。
7.5 防止误写入
某些情况下,并不打算写数据 EEPROM 存储器。器件内
置了各种机制来防止误写入 EEPROM 。上电时, WREN
位清零;而且,上电延时定时器禁止 EEPROM 写操作。
写启动序列与 WREN 位配合使用,有助于防止欠压、电
源干扰或软件故障期间的意外写入。
DS70150B_CN 第56 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
8.0 I/O 端口
注:本数据手册总结了 dsPIC30 系列器件的功能,但
并不作为参考大全使用。 有关 CPU、外设、寄存器说
明和通用器件功能的更多信息,请参见 《dsPIC30F
系列参考手册》(DS70046E_CN )。
所有的器件引脚(除 VDD 、VSS 、MCLR 和 OSC1/CLKI
以外)均由外设和并行 I/O 端口所共用。
所有 I/O 输入端口都为施密特触发器输入,以便增强抗
干扰性。
8.1 并行 I/O (PIO )端口
如果外设使能,并且外设正在使用相关引脚时,该引脚
将不再作为通用 I/O 引脚使用。这时,可以读该 I/O 引
脚,但对应并行端口引脚位的输出驱动器将被禁止。如
果外设使能,但外设不在使用某引脚,则该引脚可以被
端口驱动。
所有端口引脚都有三个寄存器,这些寄存器与端口引脚
的工作直接相关。数据方向寄存器 (TRISx )决定引脚
是输入引脚还是输出引脚。如果数据方向位为 1 ,则为
输入引脚。复位以后,所有端口引脚被定义为输入引
脚。可以直接读写锁存器 (LATx)。但读取端口
(PORTx )时,读到的是端口引脚的值;而写入端口引
脚时,写入到锁存器 (LATx )。
任何位及其关联的数据和控制寄存器,如果其对于特定
器件而言是无效的话,则将被禁止。这意味着相应的
LATx 和 TRISx 寄存器以及该端口引脚将读为 0 。
当一个定义为只用作输入的引脚与另一个外设或功能复
用时,由于没有其他竞争的输出源,它将被视为专用端
口。INT4 引脚即为一个示例。图 8-1 显示了专用端口的
结构。
PORTA 的寄存器格式如表 8-1 所示。
TRISA (数据方向控制)寄存器控制 RA<7:0> 引脚的
方向,也控制 INTx 引脚和 V
REF 引脚。 LATA 寄存器提
供输出数据,是可读写的。读 PORTA 寄存器将读取输
入引脚的状态,而写 PORTA 寄存器将修改 LATA 寄存
器的内容。
通常,与某个外设共用一个引脚的并行 I/O (PIO )端
口总是服从于该外设。外设的输出缓冲器数据和控制信
号提供给一对多路开关。这对多路开关用于选择 I/O 引
脚的输出数据和控制信号是用于外设还是相应的端口。
图 8-2 中显示出端口与外设是如何复用的,以及对应的
I/O 引脚。表 8-1 显示了共用端口 PORTB 至 PORTG 的
寄存器格式。
图 8-1 : 专用端口的结构框图
专用端口模块
读 TRIS
数据总线
写 TRIS
写锁存器
写端口
读锁存器
读端口
TRIS 锁存器
Q D
CK
数据锁存器
CK
I/O 单元
Q D
I/O 引脚
2007 Microchip Technology Inc. DS70150B_CN 第57 页
dsPIC30F6010A/6015
图 8-2 : 共用端口的结构框图
数据总线
写 TRIS
写锁存器
写端口
外设模块
外设输入数据
外设模块使能
外设输出使能
外设输出数据
PIO 模块
读 TRIS
TRIS 锁存器
数据锁存器
读锁存器
读端口
CK
CK
输出多路开关
I/O 单元
1
输出使能
0
1
输出数据
0
I/O 引脚
Q D
Q D
输入数据
8.2 配置模拟端口引脚
ADPCFG 和 TRIS 寄存器用于控制 A/D 端口引脚的操
作。若希望端口引脚为模拟输入引脚,则必须将相应的
TRIS 位置 1 (输入)。如果将 TRIS 位清零 (输出),
则该引脚的数字输出电平 (VOH 或 VOL )将被转换。
读取端口寄存器时,所有配置为模拟输入通道的引脚均
读为 0 (低电平)。
配置为数字输入的引脚将不对模拟输入信号进行转换。
对任何定义为数字输入的引脚 (包括 ANx 引脚)施加
模拟电平可能导致输入缓冲器的电流消耗超出规范值。
8.2.1 I/O 端口写 / 读时序
改变端口方向或对端口执行写操作,与对同一端口执行
读操作之间需要间隔一个指令周期。通常在两者之间插
入一条 NOP 指令。
例 8-1 :端 口 写/ 读示例
MOV 0xFF00, W0 ; Configure PORTB<15:8>
; as inputs
MOV W0, TRISBB ; and PORTB<7:0> as outputs
NOP ; Delay 1 cycle
BTSS PORTB, #13 ; Next Instruction
DS70150B_CN 第 58 页 2007 Microchip Technology Inc.
DS70150B_CN 第 59 页 2007 Microchip Technology Inc.
表 8-1: dsPIC30F6010A 端口寄存器映射
SFR 名称
TRISA 02C0 TRISA15 TRISA14
PORTA 02C2 RA15 RA14
LATA 02C4 LATA15 LATA14
TRISB 02C6 TRISB15 TRISB14 TRISB13 TRISB12 TRISB11 TRISB10 TRISB9 TRISB8 TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0
PORTB 02C8 RB15 RB14 RB13 RB12 RB11 RB10 RB9 RB8 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
LATB 02CB LATB15 LATB14 LATB13 LATB12 LATB11 LATB10 LATB9 LATB8 LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0
TRISC 02CC TRISC15 TRISC14 TRISC13
PORTC 02CE RC15 RC14 RC13
LATC 02D0 LATC15 LATC14 LATC13
TRISD 02D2 TRISD15 TRISD14 TRISD13 TRISD12 TRISD11 TRISD10 TRISD9 TRISD8 TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0
PORTD 02D4 RD15 RD14 RD13 RD12 RD11 RD10 RD9 RD8 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0
LATD 02D6 LATD15 LATD14 LATD13 LATD12 LATD11 LATD10 LATD9 LATD8 LATD7 LATD6 LATD5 LATD4 LATD3 LATD2 LATD1 LATD0
TRISE 02D8 - - - - - - TRISE9 TRISE8 TRISE7 TRISE6 TRISE5 TRISE4 TRISE3 TRISE2 TRISE1 TRISE0
PORTE 02DA
LATE 02DC
TRISF 02EE
PORTF 02E0
LATF 02E2
TRISG 02E4
PORTG 02E6
LATG 02E8
图注: 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
- - - TRISA10 TRISA9 - - - - - - - - -
- - - RA10 RA9 - - - - - - - - -
- - - LATA10 LATA9 - - - - - - - - -
- - - - - - - - - TRISC3 - TRISC1 -
- - - - - - - - - RC3 - RC1 -
- - - - - - - - - LATC3 - LATC1 -
- - - - - - RE9 RE8 RE7 RE6 RE5 RE4 RE3 RE2 RE1 RE0
- - - - - - LATE9 LATE8 LATE7 LATE6 LATE5 LATE4 LATE3 LATE2 LATE1 LATE0
- - - - - - - TRISF8 TRISF7 TRISF6 TRISF5 TRISF4 TRISF3 TRISF2 TRISF1 TRISF0
- -
- - - - - - - LATF8 LATF7 LATF6 LATF5 LATF4 LATF3 LATF2 LATF1 LATF0
-
- - - - - -
- - - - - -
- - - - -
-
- - - - RF8 RF7 RF6 RF5 RF4 RF3 RF2 RF1 RF0
TRISG9 TRISG8 TRISG7 TRISG6
RG9 RG8 RG7 RG6
LATG9LATG8LATG7LATG6
- -
- -
- -
TRISG3 TRISG2 TRISG1 TRISG0 0000 0011 1100 1111
RG3 RG2 RG1 RG0 0000 0000 0000 0000
LATG3 LATG2 LATG1 LATG0 0000 0000 0000 0000
dsPIC30F6010A/6015
复位状态
1100 0110 0000 0000
0000 0000 0000 0000
0000 0000 0000 0000
1111 1111 1111 1111
0000 0000 0000 0000
0000 0000 0000 0000
1110 0000 0000 1010
0000 0000 0000 0000
0000 0000 0000 0000
1111 1111 1111 1111
0000 0000 0000 0000
0000 0000 0000 0000
0000 0011 1111 1111
0000 0000 0000 0000
0000 0000 0000 0000
0000 0001 1111 1111
0000 0000 0000 0000
0000 0000 0000 0000
2007 Microchip Technology Inc. DS70150B_CN 第60 页
表 8-2 : dsPIC30F6015 端口寄存器映射
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
SFR 名称
TRISA 02C0
PORTA 02C2
LATA 02C4
TRISB 02C6 TRISB15 TRISB14 TRISB13 TRISB12 TRISB11 TRISB10 TRISB9 TRISB8 TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0
PORTB 02C8 RB15 RB14 RB13 RB12 RB11 RB10 RB9 RB8 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
LATB 02CB LATB15 LATB14 LATB13 LATB12 LATB11 LATB10 LATB9 LATB8 LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0
TRISC 02CC TRISC15 TRISC14 TRISC13
PORTC 02CE RC15 RC14 RC13
LATC 02D0 LATC15 LATC14 LATC13
TRISD 02D2
PORTD 02D4
LATD 02D6
TRISE 02D8
PORTE 02DA
LATE 02DC
TRISF 02EE
PORTF 02E0
LATF 02E2
TRISG 02E4
PORTG 02E6
LATG 02E8
图注: u = 未初始化的位
注: 有关寄存器位域的说明,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN )。
地址
- - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- - - - - - - - - - - - -
- - - - - - - - - - - - -
- - - - - - - - - - - - -
- - - - TRISD11 TRISD10 TRISD9 TRISD8 TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0
- - - - RD11 RD10 RD9 RD8 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0
- - - - LATD11 LATD10 LATD9 LATD8 LATD7 LATD6 LATD5 LATD4 LATD3 LATD2 LATD1 LATD0
- - - - - - - - TRISE7 TRISE6 TRISE5 TRISE4 TRISE3 TRISE2 TRISE1 TRISE0
-
- - - - - - - - LATE7 LATE6 LATE5 LATE4 LATE3 LATE2 LATE1 LATE0
- - - - - - - - - TRISF6 TRISF5 TRISF4 TRISF3 TRISF2 TRISF1 TRISF0
- - - - - - - - - RF6 RF5 RF4 RF3 RF2 RF1 RF0
- - - - - - - - - LATF6 LATF5 LATF4 LATF3 LATF2 LATF1 LATF0
- - - - - -
- - - - - -
- - - - - -
- - - - - - - RE7 RE6 RE5 RE4 RE3 RE2 RE1 RE0
TRISG9 TRISG8 TRISG7 TRISG6
RG9 RG8 RG7 RG6
LATG9LATG8LATG7LATG6
- -
- -
- -
TRISG3 TRISG2
RG3 RG2
LATG3 LATG2
- -
- -
- -
复位状态
0000 0000 0000 0000
0000 0000 0000 0000
0000 0000 0000 0000
1111 1111 1111 1111
0000 0000 0000 0000
0000 0000 0000 0000
1110 0000 0000 0000
0000 0000 0000 0000
0000 0000 0000 0000
0000 1111 1111 1111
0000 0000 0000 0000
0000 0000 0000 0000
0000 0000 1111 1111
0000 0000 0000 0000
0000 0000 0000 0000
0000 0000 0111 1111
0000 0000 0000 0000
0000 0000 0000 0000
0000 0011 1100 1100
0000 0000 0000 0000
0000 0000 0000 0000
dsPIC30F6010A/6015
dsPIC30F6010A/6015
8.3 输入状态变化通知模块
I/O 端口的输入状态变化通知功能允许 dsPIC30F 器件
在选定输入引脚的状态变化时,向处理器发出中断请
求。当禁止时钟时,该特性还可在休眠模式下检测到输
入状态改变。对于 dsPIC30F6010A ,最多可以选择(允
许) 22 个外部信号 (CN0 至 CN21 )在输入状态发生
变化时产生中断请求;对于 dsPIC30F6015 ,可选 择
(允许) 19 个这样的外部信号 (CN0 至 CN18 )。
请参见引脚图获取 CN 引脚所在的位置。
表 8-3 : 输入状态变化通知寄存器映射 (BIT 15-8 )
SFR 名称
CNEN1 00C0 CN15IE CN14IE CN13IE CN12IE CN11IE CN10IE CN9IE CN8IE
CNEN2 00C2
CNPU1 00C4 CN15PUE CN14PUE CN13PUE CN12PUE CN11PUE CN10PUE CN9PUE CN8PUE
CNPU2 00C6
地址
图注: u = 未初始化的位
表 8-4 : dsPIC30F6010A 的输入状态变化通知寄存器映射 (BIT 7-0 )
SFR 名称
CNEN1 00C0 CN7IE CN6IE CN5IE CN4IE CN3IE CN2IE CN1IE CN0IE
CNEN2 00C2
CNPU1 00C4 CN7PUE CN6PUE CN5PUE CN4PUE CN3PUE CN2PUE CN1PUE CN0PUE
CNPU2 00C6
图注: u = 未初始化的位
地址
Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8
- - - - - - - - 0000 0000 0000 0000
- - - - - - - - 0000 0000 0000 0000
B i t 7B i t 6B i t 5B i t 4B i t 3B i t 2B i t 1 B i t 0
- -
- -
CN21IE CN20IE CN19IE CN18IE CN17IE CN16IE
CN21PUE CN20PUE CN19PUE CN18PUE CN17PUE CN16PUE
复位状态
0000 0000 0000 0000
0000 0000 0000 0000
复位状态
0000 0000 0000 0000
0000 0000 0000 0000
0000 0000 0000 0000
0000 0000 0000 0000
表 8-5: dsPIC30F6015 的输入状态变化通知寄存器映射 ( BIT 7-0)
SFR 名称
CNEN1 00C0 CN7IE CN6IE CN5IE CN4IE CN3IE CN2IE CN1IE CN0IE
CNEN2 00C2
CNPU1 00C4 CN7PUE CN6PUE CN5PUE CN4PUE CN3PUE CN2PUE CN1PUE CN0PUE
CNPU2 00C6
地址
图注: u = 未初始化的位
B i t 7B i t 6B i t 5B i t 4B i t 3B i t 2B i t 1 B i t 0
- - - - -
- - - - -
CN18IE CN17IE CN16IE
CN18PUE CN17PUE CN16PUE
复位状态
0000 0000 0000 0000
0000 0000 0000 0000
0000 0000 0000 0000
0000 0000 0000 0000
2007 Microchip Technology Inc. DS70150B_CN 第61 页
dsPIC30F6010A/6015
注:
DS70150B_CN 第62 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
9.0 TIMER1 模块
注: 本数据手册总结了 dsPIC30F 系列器件的功能,但
并不作为参考大全使用。有关 CPU 、外设、寄存器说明
和一般器件功能的更多信息,请参见《dsPIC30F 系列参
考手册》(DS70046E_CN )。
本章介绍了 16 位通用(General Purpose ,GP)Timer1
模块以及相关的工作模式。
注: Timer1 是 A 类定时器。请参见本文挡第 24.0
节 " 电气特性 " 中 A 类定时器的规范。
下面的各小节将详细说明该定时器各工作模式的设置和
控制寄存器以及相应的框图。
Timer1 模块是一个 16 位的定时器,可作为实时时钟的
时间计数器,或作为自由运行的时段定时器 / 计数器。
16 位定时器有下列模式:
• 16 位定时器
• 16 位同步计数器
• 16 位异步计数器
此外,支持如下工作特性:
• 定时器门控操作
• 可选的预分频比设置
• 在 CPU 空闲和休眠模式下的定时器操作
• 在 16 位周期寄存器匹配时或外部门控信号的下降
沿产生中断
通过在 16 位 SFR ,T1CON 中设置相应的位,选择上述
工作模式。图 9-1 给出了 16 位定时器模块的框图。
16 位定时器模式:在 16 位定时器模式下,定时器在每
个指令周期递增,一直递增到与预先装入周期寄存器
PR1 中的值匹配,然后复位至 0 并继续计数。
CPU 进入空闲模式,定时器将停止递增,除非 TSIDL
(T1CON<13> )位 = 0 。如果 TSIDL = 1 ,定时器模块
逻辑在 CPU 空闲模式结束后恢复递增过程。
16 位同步计数器模式:在 16 位同步计数器模式下,定
时器将在外部时钟信号的上升沿递增,外部时钟信号与
内部时钟同步。定时器计数,一直递增到与预先装入
PR1 中的值匹配,然后复位至 0 ,重新计数。
CPU 进入空闲模式,定时器将停止递增,除非 TSIDL
位 = 0 。如 果 TSIDL = 1 ,定时器模块逻辑在 CPU 空闲
模式结束后恢复递增过程。
16 位异步计数器模式: 在 16 位异步计数器模式下,定
时器将在外部时钟信号的上升沿递增。定时器计数,一
直递增到与预先装入 PR1 中的值匹配,然后复位至 0 ,
重新计数。
当定时器配置为异步工作模式,且 CPU 进入空闲模式
时,如果 TSIDL = 1 ,定时器将停止递增。
2007 Microchip Technology Inc. DS70150B_CN 第 63 页
dsPIC30F6010A/6015
图 9-1: 16 位 TIMER1 模块框图 ( A 类定时器)
PR1
相等
比较器 x 16
T1IF
事件标志
SOSCO/
T1CK
0
1
TGATE
复位
LPOSCEN
TMR1
QD
CK
Q
门控
同步
TGATE
TCS
1 X
0
TSYNC
1
(3)
0
TGATE
TON
1
同步
TCKPS<1:0>
2
预分频器
1, 8, 64, 256
SOSCI
9.1 定时器门控操作
16 位定时器可以设置为门控时间累加模式。该模式使得
当门控输入信号(T1CK 引脚)为高电平时,内部 T
CY 能
够递增相应的定时器。要使能该模式,必须置 1 控制位
TGATE ( T1CON<6>)。必须使能定时器 (TON = 1),
且定时器时钟源必须被设置为内部时钟源 ( TCS = 0)。
CPU 进入空闲模式时,定时器将停止递增,除非 TSIDL
位 = 0 。如 果 TSIDL = 1 ,定时器模块逻辑在 CPU 空闲
模式结束后恢复递增过程。
9.2 定时器预分频器
16 位定时器的输入时钟( Fosc/4 或外部时钟)有 1:1、
1:8、 1:64 或 1:256 的预分频选择;通过控制位
TCKPS<1:0> ( T1CON<5:4>)来选择预分频比。当出
现下列事件之一时,预分频器的计数器将清零:
• 写 TMR1 寄存器
• 清零 TON 位(T1CON<15>)
• 器件复位,如 POR 和 BOR
但是,如果定时器被禁止 (TON = 0 ),那么定时器预
分频器将不会被复位,因为预分频器的时钟停止了。
当写 T1CON 时, TMR1 不会被清零。通过写入 TMR1
寄存器将其清零。
CY
T
0 0
9.3 休眠模式下的定时器操作
在 CPU 休眠模式下,满足以下条件定时器将工作:
• 使能定时器模块 ( TON = 1)
• 选择外部定时器时钟源 ( TCS = 1)
• 设置 TSYNC 位(T1CON<2>)为逻辑 0 ,将外
部时钟源定义为异步时钟源。
发生上述三种情况时,定时器将继续计数,直到递增到
与周期寄存器的内容匹配,然后复位为 0x0000 。
当定时器和周期寄存器之间发生匹配时,如果相应的定
时器中断允许位被置 1 ,则产生中断。
DS70150B_CN 第64 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
9.4 定时器中断
16 位定时器具有在周期匹配时产生中断的能力。当定时
器的计数与周期寄存器相匹配时,T1IF 位将置 1 ,如 果
允许中断的话将产生中断。T1IF 位必须在软件中清零。
定时器中断标志 T1IF 位于中断控制器的 IFS0 控制寄存
器中。
当使能门控时间累加模式时,在门控信号的下降沿(在
累加周期结束时)将产生一个中断。
通过相应的定时器中断允许位 T1IE 来允许中断。定时
器中断允许位,位于中断控制器的 IEC0 控制寄存器中。
9.5 实时时钟
当 Timer1 在实时时钟(Real-Time Clock ,RTC )模 式
下工作时,具有当天时间和事件时间标记的功能。RTC
的主要工作特性是:
• 在 32 kHz LP 振荡器下工作
• 8 位预分频器
• 低功耗
• 实时时钟中断
通过设置 T1CON 控制寄存器的相应位,选择上述工作
模式。
图 9-2 :建 议 的TIMER1 LP 振荡器
RTC 元件
9.5.1 RTC 振荡器工作
当 TON = 1 、 TCS = 1 且 TGATE = 0 时,定时器在 32
kHz LP 振荡器输出信号的上升沿递增,达到周期寄存
器中指定的值,然后复位为 0 。
要进行正确操作,必须将 TSYNC 位置为逻辑 0 (异步
模式)。
使能 LPOSCEN (OSCCON<1> )位将禁止正常定时器
和计数器模式并使能一个定时器超时唤醒事件。
当 CPU 进入休眠模式时, RTC 继续工作,提供的 32
kHz 外部晶振仍然有效,且控制位没有改变。要使 RTC
继续在空闲模式下工作, TSIDL 位必须清零 0 。
9.5.2 RTC 中断
中断事件发生时,如果允许,相应的中断标志 T1IF 将
被置 1 并产生一个中断。T1IF 位必须在软件中清零。相
应的定时器中断标志 T1IF ,位于中断控制器的 IFS0 状
态寄存器中。
通过相应定时器中断允许位(T1IE )来允许中断。定时
器中断允许位,位于中断控制器的 IEC0 控制寄存器中。
C1
32.768 kHz
XTAL
C2
C1 = C2 = 18 pF ; R = 100K
R
SOSCI
dsPIC30FXXXX
SOSCO
2007 Microchip Technology Inc. DS70150B_CN 第 65 页
DS70150B_CN 第 66 页 2007 Microchip Technology Inc.
表 9-1: TIMER1 寄存器映射
SFR 名称 地址
TMR1 0100
PR1 0102
T1CON 0104 TON
图注: 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
Timer1 寄存器
周期寄存器 1
- TSIDL - - - - - - TGATE TCKPS1 TCKPS0 - TSYNC TCS - 0000 0000 0000 0000
dsPIC30F6010A/6015
复位状态
uuuu uuuu uuuu uuuu
1111 1111 1111 1111
dsPIC30F6010A/6015
10.0 TIMER2/3 模块
注:本数据手册总结了 dsPIC30F 系列器件的功能,但并
不作为参考大全使用。有关 CPU 、外设、寄存器说明和一
般器件功能的更多信息,请参见 《dsPIC30F 系列参考手
册》(DS70046E_CN )。
本章介绍了 32 位通用 (GP )定时器模块 (Timer2/3 )以
及相关的工作模式。图 10-1 给出了 32 位 Timer2/3 模块的
简化框图。图 10-3 和图 10-5 分别为将 Timer2/3 配置成的
两个独立 16 位定时器 Timer2 和 Timer3 的框图。
注: Timer2 是 B 类定时器 , 而 Timer3 是 C 类
定时器。请参见本文挡第 24.0 节“电气特
性”中相应的定时器类型。
Timer2/3 模块是 32 位定时器 (可被配置为两个 16 位
定时器) ,具有可选择的工作模式。这些定时器为其
他外设模块所使用,例如:
• 输入捕捉
• 输出比较 / 简单 PWM
对于定时器的工作模式,下面的各小节将详细说明其设
置和控制寄存器以及相应的框图。
32 位定时器有下列模式:
• 两个独立的 16 位定时器 ( Timer2 和 Timer3),
支持所有 16 位工作模式 (异步计数器模式除外)
• 一个 32 位定时器
• 一个 32 位同步计数器
此外,支持如下工作特性:
• ADC 事件触发信号
• 定时器门控操作
• 可选择的预分频比设定
• 空闲和休眠模式下的定时器操作
• 在 32 位周期寄存器匹配时产生中断
通过设定 16 位 T2CON 和 T3CON SFR 中的相应位来
决定这些工作模式。
对于 32 位定时器 / 计数器操作,Timer2 是 32 位定时器
的低位字,而 Timer3 是高位字。
注: 对于 32 位定时器操作, T3CON 控制位将
被忽略。其设置和控制只使用 T2CON 控制
位 。对于 32 位定时器模块,使用的是
Timer2 时钟和门控输入,但是,中断产生
由 Timer3 中断标志位(T3IF )反映,且中
断通过Timer3 中断允许位(T3IE )来允许。
16 位模式:在 16 位模式下, Timer2 和 Timer3 可以配
置为两个独立的 16 位定时器。每个定时器均可设置为
16 位定时器模式或 16 位同步计数器模式。这两种工作
模式的细节,请参见第 9.0 节“Timer1 模块”。
Timer2 和 Timer3 之间惟一的功能差异是,Timer2 提供
了时钟预分频器输出同步。这对于高频外部时钟输入很
有用。
32 位定时器模式:在 32 位定时器模式下,定时器在每
个指令周期递增,一直递增到与预先装入组合 32 位周
期寄存器 PR3/PR2 中的值匹配,然后复位至 0 ,继续
计数。
对于 Timer2/Timer3 对的同步 32 位读操作,读低位字
(TMR2 寄存器)将导致高位字 (msw )被读取并锁存
到一个 16 位保持寄存器 (称作 TMR3HLD )。
对于同步 32 位写操作,必须首先写入保持寄存器
(TMR3HLD )。如果后续操作是写 TMR2 寄存器的话,
则 TMR3HLD 的内容将传送并锁存到 32 位定时器
(TMR3 )的 MSB 中。
32 位同步计数器模式:在 32 位同步计数器模式下,定
时器将在外部时钟信号的上升沿递增,外部时钟信号与
内部时钟同步。定时器计数,一直递增到与预先装入组
合 32 位周期寄存器 PR3/PR2 中的值匹配,然后复位至
0 ,继续计数。
当定时器配置为同步计数器工作模式且CPU 进入空闲模式
时,定时器将停止递增,除非 TSIDL (T2CON<13> )位
= 0。如果 TSIDL = 1,定时器模块逻辑在 CPU 空闲模
式结束后恢复递增过程。
2007 Microchip Technology Inc. DS70150B_CN 第67 页
dsPIC30F6010A/6015
图 10-1 : dsPIC30F6010A 的 32 位 TIMER2/3 框图
数据总线 <15:0>
写 TMR2
读 TMR2
ADC 事件触发信号
T3IF
事件标志
T2CK
0
1
TGATE
(T2CON<6> )
复位
相等
TMR3HLD
16
16
TMR3
MSB
比较器 x 32
PR3 PR2
16
TMR2
LSB
QD
CK
Q
TGATE (T2CON<6>)
TCS
1 x
同步
TGATE
TON
TCKPS<1:0>
2
门控
同步
TCY
注: 定时器配置位 T32 (T2CON<3> )必 须 置 1 以实现 32 位定时器/计数器操作。所有控制位都对应于 T2CON
寄存器。
0 1
0 0
预分频器
1, 8, 64, 256
DS70150B_CN 第 68 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
图 10-2 : dsPIC30F6015 的 32 位 TIMER2/3 框图
数据总线 <15:0>
写 TMR2
读 TMR2
ADC 事件触发信号
T3IF
事件标志
0
1
TGATE
( T2CON<6>)
复位
相等
TMR3HLD
16
16
TMR3
MSB
比较器 X 32
PR3 PR2
16
TMR2
LSB
QD
CK
Q
TGATE(T2CON<6>)
TCS
1 x
同步
TGATE
TON
TCKPS<1:0>
2
门控
同步
TCY
注: 定时器配置位 T32 (T2CON<3> )必 须 置 1 以实现 32 位定时器/计数器操作。所有控制位都对应于 T2CON
寄存器。
0 1
0 0
预分频器
1, 8, 64, 256
2007 Microchip Technology Inc. DS70150B_CN 第69 页
dsPIC30F6010A/6015
图 10-3: dsPIC30F6010A 的 16 位 TIMER2 框图 ( B 类定时器)
T2IF
事件标志
T2CK
0
1
TGATE
相等
复位
PR2
比较器 x 16
TMR2
Q
D
CK
Q
门控
同步
T
CY
TGATE
TCS
1 x
0 1
0 0
TGATE
TON
图 10-4 : dsPIC30F6015 的 16 位 TIMER2 框图 (B 类定时器)
同步
TCKPS<1:0>
2
预分频器
1, 8, 64, 256
相等
复位
T2IF
事件标志
注: dsPIC30F6015 的 TIMER2 没有外部引脚输入。不应使用以下模式:
1. TCS = 1
2. TCS = 0 且 TGATE = 1 (门控时间累加 )
0
1
TGATE
PR2
比较器 x 16
TMR2
Q
D
CK
Q
门控
同步
T
TGATE
CY
TCS
1 x
0 1
0 0
同步
TGATE
TON
TCKPS<1:0>
2
预分频器
1, 8, 64, 256
DS70150B_CN 第 70 页 2007 Microchip Technology Inc.
图 10-5: 16 位 TIMER3 框图 ( C 类定时器)
dsPIC30F6010A/6015
ADC 事件触发信号
T3IF
事件标志
TGATE
注: dsPIC30F6010A/6015 器件的 Timer3 没有外部引脚输入。不应使用以下模式:
1. TCS = 1
2. TCS = 0 且 TGATE = 1 (门控时间累加 )
相等
复位
0
1
PR3
比较器 x 16
TMR3
Q
D
CK
Q
同步
T
CY
TGATE
TCS
1 x
0 1
0 0
TGATE
TON
TCKPS<1:0>
2
预分频器
1, 8, 64, 256
2007 Microchip Technology Inc. DS70150B_CN 第71 页
dsPIC30F6010A/6015
10.1 定时器门控操作
可将 32 位定时器置于门控时间累加模式下。该模式使
内部 TCY 能够在门控输入信号 (T2CK 引脚)为高电平
时,递增相应的定时器。要使能该模式,必须置 1 控制
位 TGATE (T2CON<6> )。在此模式下, Timer2 是源
时钟源。对于 Timer3 , TGATE 设定被忽略。必须使能
定时器 (TON = 1 ),且定时器时钟源设置为内部时钟
源(TCS = 0)。
外部信号的下降沿终止计数操作,但不会复位定时器。
要从零开始计数,用户必须复位定时器。
10.2 ADC 事件触发信号
当 32 位定时器 (TMR3/TMR2 )与 32 位组合周期寄存
器(PR3/PR2 )匹配时,Timer3 将生成 ADC 特殊事件
触发信号。
10.3 定时器预分频器
定时器的输入时钟 (FOSC /4 或外部时钟) ,有 1:1、
1:8、 1:64 和 1:256 的预分频比选择;通过控制位
TCKPS<1:0> ( T2CON<5:4> 和 T3CON<5:4>)来 选
择预分频比。对于 32 定时器操作,发起时钟源是
Timer2。在此模式下不能进行 Timer3 的预分频器操作。
当出现下列事件之一时,预分频器的计数器将清零:
• 写 TMR2/TMR3 寄存器
• 清零任一 TON 位(T2CON<15> 或
T3CON<15>)
• 器件复位,如 POR 和 BOR
但是,如果定时器被禁止(TON = 0 ),那么 Timer2 预
分频器将不会被复位,因为预分频器的时钟停止了。
当写 T2CON/T3CON 时, TMR2/TMR3 不会被清零。
10.4 休眠模式下的定时器操作
在 CPU 休眠模式期间,定时器不工作,因为内部时钟
被禁止。
10.5 定时器中断
32 位定时器模块具有在周期匹配时,或者在外部门控信
号下降沿产生中断的能力。当 32 位定时器计数与相应
的 32 位周期寄存器相匹配时,或者检测到外部“门控”
信号的下降沿时,T3IF 位(IFS0<7>)将置 1,如果允
许中断的话则将产生中断。在此模式下,T3IF 中断标志
用作中断源。 T3IF 位必须用软件清零。
通过相应的定时器中断允许位 T3IE (IEC0<7> )来允
许中断。
DS70150B_CN 第 72 页 2007 Microchip Technology Inc.
2007 Microchip Technology Inc. DS70150B_CN 第73 页
表 10-1: TIMER2/3 寄存器映射
SFR 名称
TMR2 0106 Timer2 寄存器
TMR3HLD 0108 Timer3 保持寄存器 (仅适用于 32 位定时器操作)
TMR3 010A Timer3 寄存器
PR2 010C 周期寄存器 2
PR3 010E 周期寄存器 3
T2CON 0110 TON
T3CON 0112 TON
图注: 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
地址
-
TSIDL
-
TSIDL
- - - - - - TGATE TCKPS1 TCKPS0 T32 - TCS -
- - - - - - TGATE TCKPS1 TCKPS0
-
- TCS -
复位状态
uuuu uuuu uuuu uuuu
uuuu uuuu uuuu uuuu
uuuu uuuu uuuu uuuu
1111 1111 1111 1111
1111 1111 1111 1111
0000 0000 0000 0000
0000 0000 0000 0000
dsPIC30F6010A/6015
dsPIC30F6010A/6015
注:
DS70150B_CN 第74 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
11.0 TIMER4/5 模块
注: 本数据手册总结了 dsPIC30F系列器件的功能,但并
不作为参考大全使用。有关 CPU 、外设、寄存器说明和
一般器件功能的更多信息,请参见 《dsPIC30F 系列参
考手册》(DS70046E_CN )。
本章介绍了辅助 32 位通用(GP )定时器模块(Timer4/
5)及其相关的工作模式。图 11-1 给出了 32 位 Timer4/
5 模块的简化框图。图 11-2 和 图 11- 3 分别给出了将
Timer4/5配置成两个独立 16位定时器 Timer4和 Timer5
的框图。
注: Timer4 是 B 类定时器 Timer5 是 C 类定时
器。请参见本文挡第 24.0 节 " 电气特性 "
中的相应定时器类型。
图 11- 1 : 32 位 TIMER4/5 框图
数据总线 <15:0>
写 TMR4
读 TMR4
TMR5HLD
16
16
16
Timer4/5 模块的工作原理与 Timer2/3 模块相似。但两
者之间也有一些差别,如下所示:
• Timer4/5 模块不支持 ADC 事件触发器特性
• Timer4/5 模块不能被其他的外设模块使用,例如输
入捕捉模块和输出比较模块
通过设置 16 位 T4CON 和 T5CON SFR ,选择 Timer4/
5 模块的工作模式。
对于 32 位定时器 / 计数器操作,Timer4 是 32 位定时器
的低位字 ( lsw ), 而 Timer5 是高位字 ( msw )。
注: 对于 32 位定时器操作, T5CON 控制位将
被忽略。设置和控制只使用 T4CON 控制
位 。对于 32 位定时器模块,使用的是
Timer4 时钟和门控输入,但是,中断产生
由 Timer5 中断标志位(T5IF )反映,且中
断通过Timer5 中断允许位(T5IE )来允许。
复位
相等
T5IF
事件标志
T4CK
注: 定时器配置位 T45, T4CON ( <3>)必 须 置 1 以实现 32 位定时器/计数器操作。所有控制位都对应于
0
1
TGATE
( T4CON<6>)
T4CON 寄存器。
TMR5
MSB
比较器 x 32
PR5 PR4
TMR4
LSB
Q
D
TGATE(T4CON<6>)
CK
Q
门控
同步
TCY
TCS
1 x
0 1
0 0
同步
TGATE
TON
TCKPS<1:0>
2
预分频器
1, 8, 64, 256
2007 Microchip Technology Inc. DS70150B_CN 第 75 页
dsPIC30F6010A/6015
图 11- 2: 16 位 TIMER4 框图 ( B 类定时器)
PR4
相等
比较器 X 16
T4IF
事件标志
T4CK
0
1
TGATE
复位
TMR4
QD
CK
Q
门控
同步
T
CY
TGATE
图 11- 3 : 16 位 TIMER5 框图 (C 类定时器)
PR5
ADC 事件触发信号
相等
比较器 x 16
1 x
0 1
0 0
同步
TCS
TGATE
TON
TCKPS<1:0>
2
预分频器
1, 8, 64, 256
T5IF
事件标志
0
1
TGATE
复位
TMR5
Q
D
CK
Q
同步
T
CY
TGATE
TCS
1 x
0 1
0 0
TGATE
TON
TCKPS<1:0>
2
预分频器
1, 8, 64, 256
注: dsPIC30F6010A/6015 器件没有外部引脚输入到 Timer5。不应使用以下模式:
1. TCS = 1
2. TCS = 0 且 TGATE = 1 (门控时间累加)
DS70150B_CN 第 76 页 2007 Microchip Technology Inc.
DS70150B_CN 第 77 页 2007 Microchip Technology Inc.
表 11- 1: TIMER4/5 寄存器映射
SFR 名称
TMR4 0114 Timer4 寄存器
TMR5HLD 0116 Timer5 保持寄存器 (仅在 32 位定时器工作模式下使用)
TMR5 0118 Timer5 寄存器
PR4 011A 周期寄存器 4
PR5 011C 周期寄存器 5
T4CON 011E TON
T5CON 0120 TON
图注: 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
- TSIDL - - - - - - TGATE TCKPS1 TCKPS0 T45 - TCS -
- TSIDL - - - - - - TGATE TCKPS1 TCKPS0 - - TCS -
复位状态
uuuu uuuu uuuu uuuu
uuuu uuuu uuuu uuuu
uuuu uuuu uuuu uuuu
1111 1111 1111 1111
1111 1111 1111 1111
0000 0000 0000 0000
0000 0000 0000 0000
dsPIC30F6010A/6015
dsPIC30F6010A/6015
注:
DS70150B_CN 第78 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
12.0 输入捕捉模块
注: 本数据手册总结了 dsPIC30F 系列器件的功能,但
并不作为参考大全使用。有关 CPU 、外设、寄存器说明
和一般器件功能的更多信息,请参见 《dsPIC30F 系列
参考手册》(DS70046E_CN )。
本章对输入捕捉模块和相关的工作模式进行了介绍。此
模块提供的工作特性可用于需要进行频率 (周期)和脉
冲测量的应用场合。图 12-1 给出了输入捕捉模块的框
图。输入捕捉功能可用于以下模式:
• 频率 / 周期 / 脉冲测量
• 其他外部中断源
输入捕捉模块的主要工作特性是:
• 简单捕捉事件模式
• Timer2 和 Timer3 模式选择
• 输入捕捉事件发生时产生中断
通过设定 ICxCON 寄存器(其中,x=1、2,...,N )中 相
应的位,确定上述操作模式。 dsPIC30F6010A 和
dsPIC30F6015 器件有 8 个捕捉通道。
图 12-1 : 输入捕捉模式框图
12.1 简单捕捉事件模式
dsPIC30F 产品系列中的简单捕捉事件有:
• 在每个下降沿进行捕捉
• 在每个上升沿进行捕捉
• 在每第 4 个上升沿进行捕捉
• 在每第 16 个上升沿进行捕捉
• 在每个上升沿和下降沿进行捕捉
通过设置适当的位 ICM<2:0> (ICxCON<2:0> ),选择
上述简单输入捕捉模式。
12.1.1 捕捉预分频器
有四种输入捕捉预分频器设置,它们由位 ICM<2:0>
(ICxCON<2:0> )指定。每当捕捉通道关闭时,预分频
器计数器将清零。另外,任何复位都将清零预分频器计
数器。
来自通用定时器模块
T2_CNT
T3_CNT
ICx
引脚
预分频器
1, 4, 16
3
ICM<2:0>
模式选择
ICBNE, ICOV
ICxCON
数据总线
时钟
同步器
ICI<1:0>
边沿
检测
逻辑
中断
逻辑
置 1 标志位
置 1 标志位
ICxIF
ICxIF
FIFO
读 / 写
逻辑
注: 图中 “x ”指的是与相应输入捕捉通道 1 至 N 相关的寄存器或位。
16 16
10
ICxBUF
ICTMR
2007 Microchip Technology Inc. DS70150B_CN 第79 页
dsPIC30F6010A/6015
12.1.2 捕捉缓冲器操作
每个捕捉通道都有一个相关的 FIFO 缓冲器,缓冲器宽
16 位,深度为 4 级。有两个状态标志,提供 FIFO 缓冲
器的状态:
• ICBNE——输入捕捉缓冲器非空
• ICOV —— 输入捕捉溢出
ICBFNE 将在第一个输入捕捉事件发生时被置 1,并将
保持置 1 状态,直到所有的捕捉事件都已从 FIFO 中读
出。每次从 FIFO 中读出一个字,余下的字将在缓冲器
中前进一个位置。
当 FIFO 已满 (FIFO 中有 4 个捕捉事件)时,如果在
读 FIFO 之前发生第五个捕捉事件,则将产生溢出,且
ICOV 位将被设置成逻辑 1 。第五个捕捉事件将丢失,不
会存入 FIFO 。而且在从缓冲器读出全部四个事件之前
不会再捕捉任何事件。
如果 FIFO 已空、且还没有收到新的捕捉事件,这时读
FIFO 将产生不确定的结果。
12.1.3 TIMER2 和 TIMER3 选择模式
每个捕捉通道均可选择两个定时器(Timer2 和 Timer3 )
之一作为时基。
通过特殊功能寄存器位 ICTMR (ICxCON<7> ),来进
行定时器资源的选择。对于输入捕捉模块,Timer3 是缺
省的可用定时器资源。
12.1.4 霍尔传感器模式
当输入捕捉模块设置为在每个边沿 (上升沿和下降沿,
ICM<2:0> = 001)进行捕捉时,输入捕捉逻辑将执行下
列操作:
• 输入捕捉中断标志在每个边沿 (上升沿和下降
沿)置 1 。
• 捕捉时产生中断模式设置位 ICI<1:0> 被忽略,因
为每次捕捉都产生中断。
• 在此模式下,不产生捕捉溢出。
12.2 休眠和空闲模式下的输入捕捉工作
当器件在 CPU 空闲或休眠模式下时,输入捕捉事件将
使器件唤醒。如果允许中断,还将产生中断。
如果 ICM<2:0> = 111 且中断允许位置 1,那么当捕捉事
件发生时,输入捕捉模块将使 CPU 从休眠或空闲模式中
唤醒,这与使能的定时器无关。如果处理中断的条件已
经得到满足的话,上述的唤醒还将产生中断。唤醒特性
可以用来增加额外的外部引脚中断。
12.2.1 CPU 休眠模式下的输入捕捉
CPU 在休眠模式下时其输入捕捉模块能够工作,但功能
有所限制。在 CPU 休眠模式下, ICI<1:0> 位不适用,
输入捕捉模块只能用作外部中断源。
当器件处于休眠模式下时,为了使用输入捕捉模块,
必须把捕捉模块设置成仅在上升沿产生中断
(ICM<2:0> = 111)。在此模式下,4:1 或 16:1 的预
分频比设定不适用。
12.2.2 CPU 空闲模式下的输入捕捉
CPU 在空闲模式时其输入捕捉模块能够工作,但功能有
所限制。在 CPU 空闲模式下,通过 ICI<1:0> 位选择的
中断模式是适用的,由控制位 ICM<2:0> 定义的 4:1 和
16:1 捕捉预分频比设定同样也适用。这个模式要求使能
所选择的定时器。此外, ICSIDL 位必须置为逻辑 0。
在 CPU 空闲模式下,如果输入捕捉模块定义为
ICM<2:0> = 111,则输入捕捉引脚仅用作外部中
断引脚。
12.3 输入捕捉中断
输入捕捉通道具有根据选定的捕捉事件数来产生中断的
能力。通过控制位 ICI<1:0> (ICxCON<6:5> )来设定
选定的捕捉事件数。
每个通道都有一个中断标志位(ICxIF )。各捕捉通道中
断标志位于相应的 IFSx 状态寄存器中。
通过相应捕捉通道中断允许位 (ICxIE )来允许中断。
捕捉中断允许位位于相应的 IEC 控制寄存器中。
DS70150B_CN 第 80 页 2007 Microchip Technology Inc.
2007 Microchip Technology Inc. DS70150B_CN 第 81 页
表 12-1: 输入捕捉寄存器映射
SFR 名称
IC1BUF 0140 输入捕捉 1 寄存器
IC1CON 0142
IC2BUF 0144 输入捕捉 2 寄存器
IC2CON 0146
IC3BUF 0148 输入捕捉 3 寄存器
IC3CON 014A
IC4BUF 014C 输入捕捉 4 寄存器
IC4CON 014E
IC5BUF 0150 输入捕捉 5 寄存器
IC5CON 0152
IC6BUF 0154 输入捕捉 6 寄存器
IC6CON 0156
IC7BUF 0158 输入捕捉 7 寄存器
IC7CON 015A
IC8BUF 015C 输入捕捉 8 寄存器
IC8CON 015E
图注: 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
地址
- -
- -
- -
- -
- -
- -
- -
- -
ICSIDL
ICSIDL
ICSIDL
ICSIDL
ICSIDL
ICSIDL
ICSIDL
ICSIDL
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
ICTMR ICI<1:0> ICOV ICBNE ICM<2:0>
ICTMR ICI<1:0> ICOV ICBNE ICM<2:0>
ICTMR ICI<1:0> ICOV ICBNE ICM<2:0>
ICTMR ICI<1:0> ICOV ICBNE ICM<2:0>
ICTMR ICI<1:0> ICOV ICBNE ICM<2:0>
ICTMR ICI<1:0> ICOV ICBNE ICM<2:0>
ICTMR ICI<1:0> ICOV ICBNE ICM<2:0>
ICTMR ICI<1:0> ICOV ICBNE ICM<2:0>
复位状态
uuuu uuuu uuuu uuuu
0000 0000 0000 0000
uuuu uuuu uuuu uuuu
0000 0000 0000 0000
uuuu uuuu uuuu uuuu
0000 0000 0000 0000
uuuu uuuu uuuu uuuu
0000 0000 0000 0000
uuuu uuuu uuuu uuuu
0000 0000 0000 0000
uuuu uuuu uuuu uuuu
0000 0000 0000 0000
uuuu uuuu uuuu uuuu
0000 0000 0000 0000
uuuu uuuu uuuu uuuu
0000 0000 0000 0000
dsPIC30F6010A/6015
dsPIC30F6010A/6015
注:
DS70150B_CN 第82 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
13.0 输出比较模块
注: 本数据手册总结了 dsPIC30F 系列器件的功能,但
并不作为参考大全使用。有关 CPU 、外设、寄存器说明
和一般器件功能的更多信息,请参见 《dsPIC30F 系列
参考手册》(DS70046E_CN )。
本节对输出比较模块和相关工作模式进行了介绍。此模
块提供的特性适用于需要以下工作模式的应用:
• 产生可变宽度输出脉冲
• 功率因数校正
图 13-1 给出了输出比较模块的框图。
图 13-1: 输出比较模式框图
OCxRS
OCxR
输出比较模块的主要工作特性包括 :
• Timer2 和 Timer3 选择模式
• 简单输出比较匹配模式
• 双输出比较匹配模式
• 简单 PWM 模式
• 休眠和空闲模式下的输出比较
• 发生输出比较 /PWM 事件时将产生中断
通过设定 16 位 OCxCON SFR (其中 x=1、2 、3...N )
中相应的位可确定这些操作模式。 dsPIC30F6010A 和
dsPIC30F6015 器件有 8 个比较通道。
图 13-1 中所示的 OCxRS 和 OCxR 表示双比较寄存器。
在双比较模式下, OCxR 寄存器用于第一次比较而
OCxRS 用于第二次比较。
置 1 标志位
OCxIF
输出
逻辑
Q S
R
OCx
3
OCM<2:0>
模式选择
1
T3P3_MATCH
来自通用定时器模块
TMR2<15:0>
比较器
0
OCTSEL
1
TMR3<15:0>
0
T2P2_MATCH
注: 图中 “x ”指的是与相应输出比较通道 (1 至 N )相关的寄存器。
输出使能
OCFA
(对于 x = 1 、2、3 或 4)
或 OCFB
(对于 x = 5 、6、7 或 8)
2007 Microchip Technology Inc. DS70150B_CN 第83 页
dsPIC30F6010A/6015
13.1 Timer2 和 Timer3 选择模式
每个输出比较通道均可选择两个 16 位定时器 (Timer2
或 Timer3 )中的一个。
通过 OCTSEL 位(OCxCON<3>)来控制定时器的选
择。 Timer2 是输出比较模块默认的定时器资源。
13.2 简单输出比较匹配模式
当控制位 OCM<2:0> (OCxCON<2:0> ) = 001 、 010
或 011 时,所选输出比较通道被配置为下列三种简单输
出比较匹配模式之一:
• 比较强制 I/O 引脚为低电平
• 比较强制 I/O 引脚为高电平
• 比较使 I/O 引脚状态翻转
上述模式中使用了 OCxR 寄存器。OCxR 寄存器将装入
一个值,然后与所选的递增定时器的计数值作比较。进
行比较时,将发生上述比较匹配模式之一。如果在取出
OCxR 中的值之前,计数器复位为零,则 OCx 引脚的状
态保持不变。
13.3 双输出比较匹配模式
当控制位 OCM<2:0> (OCxCON<2:0> )= 100 或 101
时,所选输出比较通道被配置为下列两种双输出比较匹
配模式之一:
• 单输出脉冲模式
• 连续输出脉冲模式
13.3.1 单脉冲模式
用户要将模块配置为生成单输出脉冲,需要执行下列步
骤 (假设定时器已关闭):
• 确定指令周期时间 T
• 根据 TCY 计算所需的脉冲宽度值。
• 计算从定时器起始值 0x0000 到脉冲开始的时间。
• 把脉冲宽度开始和停止时间分别写入 OCxR 和
OCxRS 比较寄存器 (x 表示通道 1、 2,...,N)。
• 设置定时器周期寄存器的值,使之等于或大于
OCxRS 比较寄存器中的值。
• 设置 OCM<2:0> = 100。
• 使能定时器, TON (TxCON<15>) = 1 。
要启动另一个单脉冲,进行另一次写操作设置
OCM<2:0> = 100 即可。
CY。
13.3.2 连续脉冲模式
用户要将模块配置为生成连续输出脉冲,则需要执行下
列步骤:
• 确定指令周期时间 T
• 根据 T
• 计算从定时器起始值 0x0000 到脉冲开始的时间。
• 把脉冲宽度开始和停止时间分别写入 OCxR 和
• 设置定时器周期寄存器的值,使之等于或大于
• 设置 OCM<2:0> = 101。
• 使能定时器, TON (TxCON<15>) = 1 。
CY 计算所需的脉冲宽度值。
OCxRS 比较寄存器 (x 表示通道 1、 2, ...,N)。
OCxRS 比较寄存器中的值。
CY。
13.4 简单 PWM 模式
当控制位 OCM<2:0> (OCxCON<2:0> ) = 110 或 111
时,所选输出比较通道配置为 PWM 工作模式。当配置
为 PWM 工作模式时, OCxR 是主锁存器 (只读),
OCxRS 是辅助锁存器。这能使 PWM 电平跳变时不会
产生毛刺。
为了把输出比较模块配置为 PWM 工作模式,用户必须
执行下列步骤:
1. 写适当的周期寄存器,设置 PWM 周期。
2. 写 OCxRS 寄存器,设置 PWM 占空比。
3. 把输出比较模块配置为 PWM 工作模式。
4. 设置 TMRx 预分频值,使能定时器, TON
( TxCON<15>) = 1 。
13.4.1 PWM 的输入引脚故障保护
当控制位 OCM<2:0> (OCxCON<2:0> ) = 111 时,所
选输出比较通道还是配置为 PWM 工作模式,但具有输
入故障保护的附加功能。在此模式下,如果在 OCFA/B
引脚上检测到逻辑 0 ,则对应的 PWM 输出引脚将被置
于高阻抗输入状态。OCFLT 位(OCxCON<4>)表明是
否产生故障条件。此状态将保持到下列事件都已发生为
止:
• 外部故障条件已经消除。
• 通过写适当的控制位,重新使能了 PWM 模式。
DS70150B_CN 第 84 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
13.4.2 PWM 周期
通过写入 PRx 寄存器可以指定 PWM 周期。可使用公式
13-1 计算 PWM 周期。
公式 13-1: PWM周期
PWM 周期 = [(PRx) + 1] • 4 • T
(TMRx 预分频比 )
PWM 频率定义为 1/[PWM 周期 ]。
OSC •
图 13-2 : PWM 输出时序
周期
占空比
TMR3 = PR3
T3IF = 1
(中断标志)
OCxR = OCxRS
TMR3 = 占空比(OCxR)
当所选 TMRx 等于其对应的周期寄存器 PRx 时,在下
一个递增周期将发生如下四个事件:
• TMRx 清零。
• OCx 引脚置 1。
- 例外 1:如果 PWM 占空比为 0x0000,则
- 例外 2:如果占空比大于 PRx,则引脚将保持
• 把 PWM 占空比从 OCxRS 锁存到 OCxR 中。
• 将相应的定时器中断标志置 1。
请参见图 13-2 获取关键的 PWM 周期比较。为了清晰起
见,图中引用的是 Timer3 。
TMR3 = PR3
T3IF = 1
(中断标志)
OCxR = OCxRS
TMR3 = 占空比(OCxR)
OCx 引脚将保持为低电平。
为高电平。
13.5 CPU 休眠模式下的输出比较操作
当 CPU 进入休眠模式时,所有的内部时钟都将停止。从
而,在 CPU 进入休眠状态时,输出比较通道将把引脚
驱动为 CPU 进入休眠模式之前的有效状态。
例如,当 CPU 进入休眠状态时,如果引脚为高电平,则
引脚将继续保持为高电平。类似地,当 CPU 进入休眠
状态时,如果引脚为低电平,它将继续保持为低电平。
在这两种情况下,当器件唤醒时,输出比较模块将恢复
工作。
13.6 CPU 空闲模式下的输出比较操作
当 CPU 进入空闲模式时,输出比较模块仍然能够全功
能工作。
如果 OCSIDL 位(OCxCON<13>)为逻辑 0 ,所选时
基(Timer2 或 Timer3)使能且所选定时器的 TSIDL 位
为逻辑 0 ,输出比较通道将在 CPU 空闲模式下工作。
13.7 输出比较中断
输出比较通道具有在比较匹配时产生中断的能力,而与
选择的匹配模式无关。
对于除 PWM 之外的所有模式,当比较事件发生时,相
应的中断标志 (OCxIF )置 1 ,如果允许中断的话还将
产生中断。OCxIF 位位于相应的 IFS 状态寄存器中,且
必须用软件清零。通过相应的比较中断允许位
(OCxIE ),来允许中断; OCxIE 位位于相应的 IEC 控
制寄存器中。
对于 PWM 模式,当事件发生时,对应的定时器中断标
志位 (T2IF 或 T3IF )置 1 ,如果允许中断的话还将产
生中断。 IF 位在 IFS0 状态寄存器中,且必须用软件清
零。通过位于 IEC0 控制寄存器中的定时器中断允许位
(T2IE 或 T3IE ),以允许相应的中断。在 PWM 工作模
式下,输出比较中断标志始终不会置 1 。
2007 Microchip Technology Inc. DS70150B_CN 第85 页
DS70150B_CN 第 86 页 2007 Microchip Technology Inc.
表 13-1: 输出比较寄存器映射
SFR 名称
OC1RS 0180 输出比较 1 辅助寄存器
OC1R 0182 输出比较 1 主寄存器
OC1CON 0184
OC2RS 0186 输出比较 2 辅助寄存器
OC2R 0188 输出比较 2 主寄存器
OC2CON 018A
OC3RS 018C 输出比较 3 辅助寄存器
OC3R 018E 输出比较 3 主寄存器
OC3CON 0190
OC4RS 0192 输出比较 4 辅助寄存器
OC4R 0194 输出比较 4 主寄存器
OC4CON 0196
OC5RS 0198 输出比较 5 辅助寄存器
OC5R 019A 输出比较 5 主寄存器
OC5CON 019C
OC6RS 019E 输出比较 6 辅助寄存器
OC6R 01A0 输出比较 6 主寄存器
OC6CON 01A2
OC7RS 01A4 输出比较 7 辅助寄存器
OC7R 01A6 输出比较 7 主寄存器
OC7CON
OC8RS 01AA 输出比较 8 辅助寄存器
OC8R 01AC 输出比较 8 主寄存器
OC8CON 01AE
图注: u = 未初始化位
注: 有关寄存器位域的描述,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN )。
地址
01A8
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
- -
- -
- -
- -
- -
- -
- -
- -
OCSIDL
OCSIDL
OCSIDL
OCSIDL
OCSIDL
OCSIDL
OCSIDL
OCSIDL
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
OCFLT OCTSEL OCM<2:0>
OCFLT OCTSE OCM<2:0>
OCFLT OCTSEL OCM<2:0>
OCFLT OCTSEL OCM<2:0>
OCFLT OCTSEL OCM<2:0>
OCFLT OCTSEL OCM<2:0>
OCFLT OCTSEL OCM<2:0>
OCFLT OCTSEL OCM<2:0>
dsPIC30F6010A/6015
复位状态
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 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
dsPIC30F6010A/6015
14.0 正交编码器接口 ( QEI)模块
注: 本数据手册总结了 dsPIC30F 系列器件的功能,但
并不作为参考大全使用。有关 CPU 、外设、寄存器说明
和一般器件功能的更多信息,请参见 《dsPIC30F 系列
参考手册》(DS70046E_CN )。
本章介绍了正交编码器接口 (Quadrature Encoder
Interface , QEI)模块和相关的工作模式。 QEI 模块提
供了与增量式编码器的接口以获得机械位置数据。
图 14-1 : 正交编码器接口框图
休眠输入
同步
检测
TQCS
CY
T
1
QEIM<2:0>
0
TQGATE
QEI 的工作特性包括:
• 三个输入通道,分别为两相信号和索引脉冲输入
• 16 位递增/递减位置计数器
• 计数方向状态
• 位置测量 ( x2 和 x4)模式
• 输入端上的可编程数字噪声滤波器
• 备用的 16 位定时器/计数器模式
• 正交编码器接口中断
通过设置相应位 QEIM<2:0> (QEICON<10:8> )可确
定这些工作模式。图 14-1 给出了正交编码器接口的框
图。
TQCKPS<1:0>
2
预分频器
1, 8, 64, 256
1
0
QEIIF
事件
标志
CK
Q D
Q
QEA
QEB
INDX
UPDN
数字滤波器
UPDN_SRC
0
1
数字滤波器
数字滤波器
PCDOUT
0
1
可编程
QEICON<11>
可编程
可编程
3
现有的引脚逻辑
递增 / 递减
正交
编码器
接口逻辑
QEIM<2:0>
模式选择
16 位递增/递减计数器
2
3
(POSCNT )
比较器 /
过零检测
最大计数寄存器
(MAXCNT )
复位
相等
2007 Microchip Technology Inc. DS70150B_CN 第87 页
dsPIC30F6010A/6015
14.1 正交编码器接口逻辑
典型的增量式 (incremental )编码器 (也称为光电式
编码器)具有三个输出: A 相、 B 相和索引脉冲。 在
ACIM 和 SR 电机的位置和速度控制中,这三个信号非
常有用,且通常是必须的。
A 相(QEA)和 B 相( QEB)通道具有特定的相位关
系。 如果 A 相超前 B 相,那么认为电机正向旋转。 如果
A 相滞后于 B 相,那么认为电机反向旋转。
第三个通道称为索引脉冲,每转一圈产生一个脉冲,作
为基准用来确定绝对位置。索引脉冲与 A 相和 B 相一
致,皆为低电平。
14.2 16 位递增/递减位置计数器模式
16 位递增/递减计数器在每一个计数脉冲递增或递减
计数,该脉冲信号由 A 相和 B 相输入信号的关系确定。
计数器作为一个积分器,其计数值与位置成正比。 计数
方向由 UPDN 信号确定,该信号由正交编码器接口逻辑
产生。
14.2.1 位置计数器错误校验
CNTERR 位(QEICON<15>)提供了 QEI 中的位置计
数错误校验功能。 只有当位置计数器配置为通过索引脉
冲复位模式 (QEIM<2:0> = 110 或 100 )时,才能使
用错误校验功能。 在这些模式下, POSCNT 寄存器中
的内容将与值 (0xFFFF 或 MAXCNT + 1 ,取决于转
向)进行比较。如果检测到这些值, CNTERR 位将置
1,产生错误条件并产生 QEI 计数错误中断。 通过置 1
CEID 位(DFLTCON<8>)可禁止 QEI 计数错误中断。
在检测到错误之后,位置计数器仍将继续对编码器脉冲
边沿进行计数。 POSCNT 寄存器继续递增/递减计
数,直至出现自然计满溢出/下溢。 发生自然计满溢出
/下溢事件时不产生中断。 CNTERR 位是一个可读/
写位,由用户采用软件方式对其进行复位。
14.2.2 位置计数器复位
位置计数器复位使能位 POSRES (QEI<2> )用于确定
当检测到索引脉冲时是否对位置计数器进行复位。 只有
当 QEIM<2:0> = 100 或 110 时,此位才可用。
如果 POSRES 位设置为 1 ,则位置计数器在检测到索
引脉冲时将被复位。如果 POSRES 位设置为 0 ,则位
置计数器在检测到索引脉冲时将不会复位。位置计数器
将继续进行递增或递减计数,且在发生计满溢出或下溢
时进行复位。
当检测到索引脉冲时,仍将产生中断,但在检测到位置
计数器发生计满溢出/下溢时不产生中断。
14.2.3 计数方向状态
如前所述,QEI 逻辑将根据 A 相和 B 相之间的关系产生
UPDN 信号。除输出引脚外,还将此内部 UPDN 信号的
状态传送至 SFR 的 UPDN 位(QEICON<11>),该位
是只读位。 要将该信号的状态施加到 I/O 引脚上, SFR
的 PCDOUT 位(QEICON<6>)必须为 1 。
14.3 位置测量模式
QEI 支持两种测量模式,分别称为 x2 和 x4 模式。 通过
位于 SFR QEICON<10:8> 中的模式选择位 QEIM<2:0>
可选择模式。
当控制位 QEIM<2:0> = 100 或 101 时,将选择 x2 测量
模式,此时 QEI 逻辑将只通过 A 相输入信号来确定位置
计数器递增速率。A 相信号的每个上升沿和下降沿都将
导致位置计数器递增或递减。和在 x4 模式中一样, B
相信号仍然用于计数器方向的确定。
在 x2 测量模式中,存在导致位置计数器复位的两种不
同原因:
1. 检测到索引脉冲 QEIM<2:0> = 100,导致位置计
数器复位。
2. 计数值与 MAXCNT ,QEIM<2:0> = 101 匹配时,
导致位置计数器复位。
当控制位 QEIM<2:0> = 110 或 111 时,将选择 x4 测量
模式,此时 QEI 逻辑将通过 A 相和 B 相输入信号的每
个边沿来确定位置计数器递增速率。A 相和 B 相输入信
号的每个边沿都将导致位置计数器递增或递减。
在 x4 测量模式中,存在导致位置计数器复位的两种不
同原因:
1. QEIM<2:0> = 110 时,检测到索引脉冲导致位置
计数器复位。
2. QEIM<2:0> = 111时,计数值与MAXCNT 匹配导
致位置计数器复位。
x4 测量模式提供了更精细的分辨率数据(更多次位置计
数)用以确定电机位置。
DS70150B_CN 第88 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
14.4 可编程数字噪声滤波器
数字噪声滤波器模块负责抑制输入捕捉或正交信号中的
噪声。施密特触发器输入和三时钟周期延迟滤波器共同
用来抑制低电平噪声和短时的大噪声尖峰,这些噪声干
扰经常出现在易受噪声干扰的应用中,例如电机系统。
该滤波器可以确保在三个连续的滤波器周期内都获得同
一个稳定值之后,才允许经过滤波的输出信号发生变
化。
对于 QEA 、 QEB 和 INDX 引脚,可通过 QECK<2:0>
(DFLTCON<6:4>)位对数字滤波器的时钟分频频率进
行编程设定,该频率源自基本指令周期 T
要使能 QEA 、 QEB 和 INDX 通道的滤波器输出功能,
QEOUT 位必须为 1 。在 POR 和 BOR 时,所有通道的
滤波器网络将被禁止。
CY。
14.5 备用 16 位定时器/计数器
当 QEI 模块未被配置为QEI 模式 QEIM<2:0> = 001 时,
此模块可被配置为简单的 16 位定时器/计数器。 通过
QEICON SFR 寄存器可实现辅助定时器的设置和控制。
此定时器功能与 Timer1 相同。 QEA 引脚用作定时器时
钟输入。
当配置为定时器时,POSCNT 寄存器作为定时器计数寄
存器,而 MAXCNT 寄存器用作周期寄存器。当定时器/
周期寄存器匹配时, QEI 中断标志将被置 1。
此定时器和通用定时器之间惟一的差异是增加了外部递
增/递减输入选择功能。 当 UPDN 引脚为高电平时,定
时器将进行递增计数。 当 UPDN 引脚为低电平时,定时
器将进行递减计数。
注: 工作模式的改变 (即,从 QEI 改变到定时
器模式或反之)将不会对定时器/位置计
数寄存器内容造成影响。
UPDN 控制 / 状态位( QEICON<11> )可用来选择定时
器寄存器的计数方向状态。 当 UPDN = 1 时,定时器将
进行递增计数。 当 UPDN = 0 时,定时器将进行递减计
数。
此外,控制位 UDSRC (QEICON<0> )用来确定定时
器计数方向状态是取决于写入 UPDN 控制/状态位
(QEICON<11>)的逻辑状态还是 QE 引脚的状态。当
UDSRC = 1 时,定时器计数方向由 QEB 引脚控制。同
样,当 UDSRC = 0 时,定时器计数方向由 UPDN 引脚
控制。
注: 此定时器不支持外部异步计数器工作模
式。如果使用外部时钟源,时钟将自动与
内部指令周期同步。
14.6 CPU 休眠模式下的 QEI 模块操作
14.6.1 CPU 休眠模式下的 QEI 操作
在 CPU 休眠模式下 QEI 模块将停止工作。
14.6.2 CPU 休眠模式下的定时器操作
在 CPU 休眠模式期间,由于禁止了内部时钟,定时器
将不工作。
14.7 CPU 空闲模式下的 QEI 模块操作
由于 QEI 模块可作为正交编码器接口,或 16 位定时器,
以下部分介绍了这两种模式下的 QEI 模块操作。
14.7.1 CPU 空闲模式下的 QEI 操作
当 CPU 处于空闲模式时,如果 QEISIDL 位
(QEICON<13> ) = 0,则 QEI 模块将工作。 在 POR 和
BOR 时,该位默认为逻辑 0 。 在 CPU 空闲模式下若要
使 QEI 模块停止工作,应将 QEISIDL 位设定为 1 。
2007 Microchip Technology Inc. DS70150B_CN 第89 页
dsPIC30F6010A/6015
14.7.2 CPU 空闲模式下的定时器操作
当 CPU 处于空闲模式且 QEI 模块配置为 16 位定时器模
式时,如果 QEISIDL 位(QEICON<13>) = 0,则 16
位定时器将工作。在 POR 和 BOR 时,该位默认为逻辑
0 。 在 CPU 空闲模式下若要使定时器模块停止工作,应
将 QEISIDL 位设定为 1 。
如果 QEISIDL 位被清零,定时器将正常工作,就象 CPU
没有进入空闲模式一样。
14.8 正交编码器接口中断
正交编码器接口能够在发生以下事件时产生中断:
• 当 16 位递增/递减位置计数器发生计满溢出/下
溢时产生中断
• 检测到合格的索引脉冲时,或 CNTERR 位置 1 时
• 定时器周期匹配事件 (溢出/下溢)
• 门控累加事件
在发生以上任一事件时, QEI 中断标志位 QEIIF 将被置
1。 QEIIF 位必须由软件清零。 QEIIF 位于 IFS2 状态寄
存器中。
可通过相应的中断允许位 QEIIE 允许中断。 QEIIE 位于
IEC2 控制寄存器中。
DS70150B_CN 第 90 页 2007 Microchip Technology Inc.
2007 Microchip Technology Inc. DS70150B_CN 第91 页
表 14-1 : QEI 寄存器映射
SFR
名称
QEICON 0122 CNTERR
DFLTCON 0124
POSCNT 0126 位置计数器 <15:0>
MAXCNT 0128 最大计数值 <15:0>
图注: 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
地址
QEISIDL INDX UPDN QEIM<2:0> SWPAB PCDOUT TQGATE TQCKPS<1:0> POSRES TQCS UDSRC 0000 0000 0000 0000
-
- - - - - IMV<1:0> CEID QEOUT QECK<2:0> - - - -
复位状态
0000 0000 0000 0000
0000 0000 0000 0000
1111 1111 1111 1111
dsPIC30F6010A/6015
dsPIC30F6010A/6015
注:
DS70150B_CN 第92 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
15.0 电机控制 PWM 模块
注:本数据手册总结了 dsPIC30F 系列器件的功能,但
并不作为参考大全使用。有关 CPU 、外设、寄存器说明
和一般器件功能的更多信息,请参见 《dsPIC30F 系列
参考手册》(DS70046E_CN )。
此模块简化了产生多种同步脉宽调制输出(Pulse Width
Modulated ,PWM )的任务。 特别是它还能支持以下电
源和电机控制应用:
• 三相交流感应电机
• 开关磁阻 ( Switched Reluctance , SR)电机
• 直流无刷 ( Brushless DC, BLDC)电机
• 不间断电源 ( Uninterruptible Power Supply,
UPS)
PWM 模块具有以下特性:
• 8 个具备 4 占空比发生器的 PWM I/O 引脚
• 最高 16 位分辨率
• 实时更改 PWM 频率
• 边沿对齐和中心对齐输出模式
• 单脉冲产生模式
• 对中心对齐模式下不对称更新的中断支持
• 用于电子换相电机 ( Electrically Commutative
Motor, ECM)控制的输出改写控制
• 用于调度其他外设事件的 “特殊事件”比较器
• 可选择将任何一个 PWM 输出引脚驱动为确定状态
的故障引脚
• 占空比更新可配置为立即更新或与 PWM 时基同步
此模块包含 4 个占空比发生器,分别编号为 1 至 4 。此
模块具有 8 个 PWM 输出引脚,分别编号为 PWM1H/
PWM1L 至 PWM4H/PWM4L 。8 个 I/O 引脚可组合为 4
个高 / 低端引脚对,分别以下标 H 或 L 表示。 对于互补
的负载,低端 PWM 引脚的状态总是与高端 I/O 引脚的
状态相反。
PWM 模块可以实现多种工作模式,有利于实现特定的
电源控制应用。
2007 Microchip Technology Inc. DS70150B_CN 第93 页
dsPIC30F6010A/6015
图 15-1: PWM 模块框图
PWMCON1
PWM 使能和模式 SFR
PWMCON2
DTCON1 死区时间控制 SFR
DTCON2
FLTACON 故障引脚控制 SFR
FLTBCON
16 位数据总线
OVDCON
PTMR
比较器
PTPER
PTPER 缓冲器
PTCON
PWM 手动
控制 SFR
PWM 发生器 #4
PDC4 缓冲器
PDC4
比较器
PWM 发生器
#3
PWM 发生器
#2
PWM 发生器
#1
通道 4 死区时间
发生器和
改写逻辑
通道 3 死区时间
发生器和
改写逻辑
通道 2 死区时间
发生器和
改写逻辑
通道 1 死区时间
发生器和
改写逻辑
输出
驱动
电路
PWM4H
PWM4L
PWM3H
PWM3L
PWM2H
PWM2L
PWM1H
PWM1L
FLTA
FLTB
比较器
SEVTCMP
SEVTDIR
PTDIR
特殊事件
后分频器
特殊事件触发信号
PWM 时基
注: 为清晰起见,图中未给出 PWM 发生器 #1 、 #2 和 #3 的细节。
DS70150B_CN 第94 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
15.1 PWM 时基
PWM 时基由带预分频器和后分频器的 15 位定时器提
供。通过 PTMR SFR 可对该时基进行访问。 PTMR<15>
为只读状态位,而 PTDIR 用于表明 PWM 时基的当前计
数方向。 如果 PTDIR 被清零,表明 PTMR 正进行递增
计数。 如果 PTDIR 置 1,表 明 PTMR 正进行递减计数。
可通过 PTCON SFR 对 PWM 时基进行配置。 可通过置
1 /清零 PTCON SFR 中的 PTEN 位来使能/禁止时
基。 当用软件清零 PTEN 位时,PTMR 将不会被清零。
PTPER SFR 设定PTMR 的计数周期。 用户必须写入15
位值至 PTPER<14:0> 。 当 PTMR<14:0> 中的值与
PTPER<14:0> 中的值相匹配时,时基将会被复位为 0
或在下一个时钟周期反转计数方向, 这取决于时基的工
作模式。
注: 如果周期寄存器设定为 0x0000 ,定时器将
停止计数,且即使特殊事件值也是
0x0000 ,也不会产生中断和特殊事件触发
信号。 该模块将不会更新周期寄存器,即
使它已是 0x0000 ;因此,用户必须禁止该
模块以更新周期寄存器。
PWM 时基可配置为 4 种不同的工作模式:
• 自由运行模式
• 单事件模式
• 连续递增/递减计数模式
• 带双更新中断的连续递增/递减计数模式
通过 PTCON SFR 中的 PTMOD<1:0> 位可选择这 4 种
模式。递增/递减计数模式支持产生中心对齐 PWM 。
单事件模式使得 PWM 模块可支持某些电子换相电机
(ECM )的脉冲控制。
PWM 时基产生的中断信号取决于模式选择位
(PTMOD<1:0> )和 PTCON SFR 中的后分频比控
制位 (PTOPS<3:0> )。
15.1.1 自由运行模式
在自由运行模式下, PWM 时基进行递增计数直至与时
基周期寄存器 (Time Base Period register , PTPER )
中的设定值相匹配。 PTMR 寄存器将在下一输入时钟边
沿复位且只要 PTEN 位保持置 1 时基将继续进行递增计
数。
当PWM时基处于自由运行模式时(PTMOD<1:0> = 00 ),
每当 计数值与 PTPER 寄存器匹配时,将产生一个中断事
件且 PTMR 寄存器复位到零。 在此模式下,可使用后分频
比选择位来降低中断事件的频率。
15.1.2 单事件模式
在单事件计数模式下,当 PTEN 位置 1 时 PWM 时基将
开始递增计数。 当 PTMR 寄存器中的值与 PTPER 寄存
器匹配时,PTMR 寄存器将在下一个输入时钟边沿被复
位,且 PTEN 位将被硬件清零以中止时基的操作。
当 PWM 时基处于单事件模式 (PTMOD<1:0> = 01 )
时,在 PTMR 寄存器中的值与 PTPER 寄存器匹配时将
产生一个中断事件,PTMR 寄存器会在下一个输入时钟
边沿复位为零且 PTEN 位将被清零。在该模式下,后分
频比选择位将不起作用。
15.1.3 连续递增/递减计数模式
在连续递增 / 递减计数模式下,PWM 时基将进行递增计
数直至与 PTPER 寄存器值相匹配。 定时器将在下一个
输入时钟边沿开始递减计数。 PTCON SFR 中的 PTDIR
位为只读位,用于表明计数方向。当定时器进行递减计
数时, PTDIR 位将被置 1 。
在递增 / 递减计数模式 (PTMOD<1:0> = 10 )下,每
当 PTMR 寄存器值为零时都将产生中断事件且 PWM 时
基将开始递增计数。 在此模式下可使用后分频比选择位
来降低中断事件的频率。
2007 Microchip Technology Inc. DS70150B_CN 第95 页
dsPIC30F6010A/6015
15.1.4 双更新模式
在双更新模式 (PTMOD<1:0> = 11 )下,每当 PTMR
寄存器等于零或发生周期匹配时都将产生中断事件。 在
该模式下,后分频比选择位将不起作用。
双更新模式向用户提供了另外两种功能。 首先,控制环
带宽可增加一倍,因为在每一个周期内 PWM 占空比可
被更新两次。 其次,可产生不对称的中心对齐 PWM 波
形,可在某些电机控制应用中用于减少输出波形畸变。
注: 将周期寄存器编程设定为 0x0001 可产生一
个连续的中断脉冲,因此必须加以避免。
15.1.5 PWM 时基预分频器
PTMR 的输入时钟 (FOSC /4)可通过 PTCON SFR 中
的 PTCKPS<1:0> 控制位选择 1:1 、 1:4 、 1:16 或 1:64
预分频比。当发生以下事件时,预分频器的计数器将被
清零:
• 写入 PTMR 寄存器
• 写入 PTCON 寄存器
• 任何器件复位
当写入 PTCON 时, PTMR 寄存器将不会被清零。
15.1.6 PWM 时基后分频器
PTMR 的匹配输出可选择通过 4 位后分频器进行后分频
(可实现 1:1 至 1:16 分频)。
当出现下列事件之一时,后分频器计数器将被清零:
• 写入 PTMR 寄存器
• 写入 PTCON 寄存器
• 任何器件复位
当写入 PTCON 时, PTMR 寄存器将不会被清零。
15.2 PWM 周期
PTPER
基的计数周期。
被装入
• 自由运行和单事件模式:与 PTPER 寄存器匹配后
• 递增
当 PWM 时基被禁止时 (PTEN = 0 ), PTPER 缓冲器
中的值将被自动装入 PTPER 寄存器。
可使用公式 15-1 确定 PWM 周期。
是一个15位、双缓冲寄存器,用来设定
在下列情况下,
PTPER
当 PTMR 寄存器复位为零时。
寄存器:
/ 递减计数模式: PTMR 寄存器为零时。
PTPER
PWM
缓冲器的内容将
时
公式 15-1 : PWM 周期
CY • (PTPER + 1)
TPWM =
如果 PWM 时基配置为递增 / 递减计数模式之一,则
PWM 周期可由公式 15-2 确定。
T
(PTMR 预分频比 )
公式 15-2 : PWM 周期 (递增 / 递减计
数模式)
T
TPWM =
对于给定器件振荡器和 PWM 频率,最大分辨率 (以位
为单位)可使用公式 15-3 进行确定
CY • 2 • (PTPER + 0.75)
(PTMR 预分频比 )
公式 15-3 : PWM 分辨率
分辨率 =
log (2)
log (2 • TPWM /TCY )
15.3 边沿对齐 PWM
当 PWM 时基处于自由运行模式或单事件模式时,模块
将产生边沿对齐 PWM 信号。 对于边沿对齐 PWM 输出,
输出信号的周期由 PTPER 中的值指定,而占空比由相
应的占空比寄存器指定 (见图 15-2 )。 PWM 输出将在
周期开始时 (PTMR = 0 )驱动为有效状态,而当占空
比寄存器中的值与 PTMR 匹配时被驱动为无效状态。
如果特定占空比寄存器的值为零,则对应 PWM 引脚上
的输出会在整个 PWM 周期中处于无效状态。 此外,如
果占空比寄存器中的值大于 PTPER 寄存器中的值,则
PWM 引脚的输出将会在整个 PWM 周期中保持有效状
态。
图 15-2 : 边沿对齐 PWM
锁存的新占空比
PTPER
PTMR
值
0
占空比
周期
DS70150B_CN 第96 页 2007 Microchip Technology Inc.
dsPIC30F6010A/6015
15.4 中心对齐 PWM
当 PWM 时基配置为递增 / 递减计数模式时(见图 15-3 ),
模块将产生中心对齐的 PWM 信号。
当占空比寄存器值与 PTMR 的值相匹配且 PWM 时基进
行递减计数(PTDIR = 1 )时, PWM 比较输出将被驱动
为有效状态。 当 PWM 时基进行递增计数(PTDIR = 0)
且 PTMR 寄存器中的值与占空比值匹配时, PWM 比较
输出将被驱动为无效状态。
如果特定占空比寄存器中的值为零,则整个 PWM 周期
内对应 PWM 引脚上的输出将为无效状态。 此外,如果
占空比寄存器中的值等于 PTPER 寄存器中的值,则整
个 PWM 周期内 PWM 引脚上的输出将为有效状态。
图 15-3 : 中心对齐 PWM
周期 /2
PTPER
占空比
0
周期
PTMR
值
15.5 PWM 占空比比较单元
有 4 个 16 位特殊功能寄存器(PDC1 、 PDC2 、PDC3
和 PDC4 )用来指定 PWM 模块的占空比值。
每一个占空比寄存器中的值负责确定 PWM 输出处于有
效状态的时间。 占空比寄存器为 16 位宽。 占空比寄存
器的 LSb 用来确定开始时是否出现 PWM 边沿。 因此,
PWM 的分辨率实际上提高了一倍。
15.5.1 占空比寄存器缓冲器
这 4 个 PWM 占空比寄存器采用双缓冲方式,因此可对
PWM 输出进行无故障更新。 对于每一个占空比,都有
两个占空比寄存器与之对应,一个可供用户访问,另一
个用来保存当前 PWM 周期使用的实际比较值
对于边沿对齐 PWM 输出,当计数值与 PTPER 寄存器
值匹配且 PTMR 寄存器被复位时,将更新占空比值。 当
PWM 时基被禁止 (PTEN = 0)且 PWMCON2 寄存器
中的 UDIS 位被清零时,占空比缓冲器的内容将被自动
装入占空比寄存器。
如果 PWM 时基处于递增 / 递减计数模式,则当 PTMR
寄存器值为零且 PWM 时基开始递增计数时将采用新的
占空比值。 当 PWM 时基被禁止 (PTEN = 0)时,占
空比缓冲器中的值将被自动装入占空比寄存器。
如果 PWM 时基处于双更新功能的递增 / 递减计数模式,
当 PTMR 寄存器值为零且 PTMR 的值与 PTPER 寄存器
的值匹配时,将采用新的占空比值。 当 PWM 时基被禁
止(PTEN = 0),占空比缓冲器中的值将被自动装入占
空比寄存器。
15.5.2 占空比立即更新
当立即更新使能位置 1 (IUE = 1 )时,对占空比寄存器
的任何写入操作都将立即更新新的占空比值。 这种功能
为用户提供了一种选择,使其可以立即更新有效的
PWM 占空比寄存器,而不必等到当前时基周期结束。
在闭环伺服应用中,如果使能了立即更新(IUE = 1 ),
则系统稳定性将由于系统观察到发出系统校正命令之间
的时间缩短而提高。
如果新占空比写入时 PWM 输出有效,且新占空比小于
当前时基的值,则 PWM 脉宽将变窄。 如果新占空比写
入时 PWM 输出有效,且新占空比大于当前时基的值,
则 PWM 脉宽将变宽。
如果新占空比写入时 PWM 输出无效,且新占空比大于
当前时基的值,则 PWM 输出将立即有效且对新写入的
占空比值保持有效。
2007 Microchip Technology Inc. DS70150B_CN 第97 页
dsPIC30F6010A/6015
15.6 互补 PWM 操作
在互补工作模式下,每对 PWM 输出都是互补的 PWM
信号。 对于一段两个引脚的输出均为无效的短暂时间,
可选择在器件开关过程中插入一个死区时间(见第15.7
节 “死区时间发生器”)。
在互补模式下,占空比比较单元将按如下方式分配给
PWM 输出:
• PDC1 寄存器控制 PWM1H/PWM1L 输出
• PDC2 寄存器控制 PWM2H/PWM2L 输出
• PDC3 寄存器控制 PWM3H/PWM3L 输出
• PDC4 寄存器控制 PWM4H/PWM4L 输出
将 PWMCON1 SFR 中相应的 PMODx 位清零可使 PWM
I/O 引脚对工作在互补模式下。 在器件复位时, PWM
I/O 引脚将被设定为互补模式。
15.7 死区时间发生器
当任一 PWM I/O 引脚对工作在互补输出模式时,就可
使用死区时间发生功能。 PWM 输出采用推挽驱动电
路。 由于功率输出器件不可能瞬时完成切换,所以必须
在关闭互补对中的一个 PWM 输出和开启另一个晶体管
之间间隔一定的时间。
PWM 模块允许两种可编程的死区时间。 这两种死区时
间可用于以下两种方法从而增加用户灵活性:
• 对 PWM 输出信号进行优化以使互补晶体管对中的
高边和低边晶体管的关断时间不同。 在互补对中的
低边晶体管的关断事件和高边晶体管的导通事件之
间插入第一个死区时间。 在高边晶体管的关断事件
和低边晶体管的导通事件之间插入第二个死区时
间。
• 两个死区时间可分配给两对不同的 PWM I/O 引
脚。 此工作模式可以使 PWM 模块对每一对 PWM
I/O 引脚驱动不同的晶体管 / 负载。
15.7.1 死区时间发生器
PWM 模块的每一对互补输出都有一个 6 位的递减计数
器,用于插入死区时间。 如图 15-4 所示,每个死区时
间单元都有与占空比比较输出相连的上升沿和下降沿检
测器。
15.7.2 死区时间分配
DTCON2 SFR 包含控制位,可以将两个死区时间分配
给互补输出中的任何一个。表 15-1 总结了每个死区时间
选择控制位的功能。
表 15-1 : 死区时间选择位
位功 能
DTS1A
DTS1I
DTS2A
DTS2I
DTS3A
DTS3I
DTS4A
DTS4I
选择在 PWM1L/PWM1H 有效边沿处插入死区时间
选择在 PWM1L/PWM1H 无效边沿处插入死区时间
选择在 PWM2L/PWM2H 有效边沿处插入死区时间
选择在 PWM2L/PWM2H 无效边沿处插入死区时间
选择在 PWM3L/PWM3H 有效边沿处插入死区时间
选择在 PWM3L/PWM3H 无效边沿处插入死区时间
选择在 PWM4L/PWM4H 有效边沿处插入死区时间
选择在 PWM4L/PWM4H 无效边沿处插入死区时间
15.7.3 死区时间范围
通过指定输入时钟预分频比和一个 6 位无符号值可设定
死区时间单元提供的死区时间值。 每个单元提供的死区
时间值可单独设定。
死区时间单元提供了 4 种输入时钟预分频比选项,用户
可根据器件的工作频率选择适当的死区时间范围。 可为
两个死区时间分别选择时钟预分频比选项。使用
DTCON1 SFR 中的 DTAPS<1:0> 和 DTBPS<1:0> 控制
位可选择死区时间时钟预分频比。可使用 4 种时钟预分
频比选择之一 (T
死区时间值。
在选择预分频比之后,通过装入两个 6 位无符号值至
DTCON1 SFR 可对死区时间进行调整。
发生以下事件时,死区时间单元预分频器将被清零:
• 由于占空比比较边沿事件导致装入递减定时器。
• 写入 DTCON1 或 DTCON2 寄存器。
• 任何器件复位。
注: 当 PWM 模块处于工作状态时 ( PTEN =
CY、 2 TCY、 4 T CY 或 8 TCY)作为各
1 ),用户不应对DTCON1 或 DTCON2 值进
行修改, 否则可能导致意外结果的发生。
DS70150B_CN 第98 页 2007 Microchip Technology Inc.