MICROCHIP dsPIC30F6012A, dsPIC30F6013A, dsPIC30F6014A Technical data

dsPIC30F6011A/6012A/6013A/6014A
数据手册
高性能
数字信号控制器
2006 Microchip Technology Inc. 初稿 DS70143B_CN
请注意以下有关 Microchip 器件代码保护功能的要点:
Microchip 的产品均达到 Microchip 数据手册中所述的技术指标。
Microchip 确信:在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一。
目前,仍存在着恶意、甚至是非法破坏代码保护功能的行为。就我们所知,所有这些行为都不是以 Microchip 数据手册中规定的 操作规范来使用 Microchip 产品的。这样做的人极可能侵犯了知识产权。
Microchip 愿与那些注重代码完整性的客户合作。
Microchip 或任何其他半导体厂商均无法保证其代码的安全性。代码保护并不意味着我们保证产品是 “牢不可破”的。
代码保护功能处于持续发展中。 Microchip 承诺将不断改进产品的代码保护功能。任何试图破坏 Microchip 代码保护功能的行为均可视 为违反了 《数字器件千年版权法案 (Digital Millennium Copyright Act)》。如果这种行为导致他人在未经授权的情况下,能访问您的 软件或其他受版权保护的成果,您有权依据该法案提起诉讼,从而制止这种行为。
提供本文档的中文版本仅为了便于理解。请勿忽视文档中包含 的英文部分,因为其中提供了有关 Microchip 产品性能和使用
情况的有用信息。Microchip Technology Inc. 及其分公司和相 关公司、各级主管与员工及事务代理机构对译文中可能存在的 任何差错不承担任何责任。建议参考 Microchip Technology Inc. 的英文原版文档。
本出版物中所述的器件应用信息及其他类似内容仅为您提供便 利,它们可能由更新之信息所替代。确保应用符合技术规范, 是您自身应负的责任。Microchip 对这些信息不作任何明示或 暗示、书面或口头、法定或其他形式的声明或担保,包括但不 限于针对其使用情况、质量、性能、适销性或特定用途的适用 性的声明或担保。 Microchip 对因这些信息及使用这些信息而 引起的后果不承担任何责任。如果将 Microchip 器件用于生命 维持和 / 或生命安全应用,一切风险由买方自负。买方同意在 由此引发任何一切伤害、索赔、诉讼或费用时,会维护和保障 Microchip 免于承担法律责任,并加以赔偿。在 Microchip 知识 产权保护下,不得暗中或以其他方式转让任何许可证。
商标
Microchip 的名称和徽标组合、 Microchip 徽标、 Accuron dsPIC、 K
EELOQ、 microID、 MPLAB、 PIC、 PICmicro、
PICSTARTPRO MATEPowerSmart、 rfPIC 和 SmartShunt 均为 Microchip Technology Inc. 在美国和其他国
家或地区的注册商标。
AmpLabFilterLabMigratable MemoryMXDEV MXLABSEEVALSmartSensor The Embedded Control Solutions Company 均为 Microchip Technology Inc.在美国的
注册商标。
Analog-for-the-Digital AgeApplication Maestro dsPICDEMdsPICDEM.netdsPICworksECAN ECONOMONITORFanSenseFlexROMfuzzyLAB In-Circuit Serial Programming、 ICSP、 ICEPIC、 Linear
Active Thermistor、 MPASM、 MPLIB、 MPLINK、 MPSIM、 PICkitPICDEMPICDEM.netPICLABPICtail
PowerCalPowerInfoPowerMatePowerToolREAL ICErfLABrfPICDEMSelect ModeSmart Serial
SmartTelTotal EnduranceUNI/OWiperLock Zena
均为 Microchip Technology Inc. 在美国和其他国家或地区的 商标。
SQTP Microchip Technology Inc. 在美国的服务标记。
在此提及的所有其他商标均为各持有公司所有。 © 2006, Microchip Technology Inc.版权所有。
Microchip
10
位单片机、 性存储器和模拟产品方面的质量体系流程均符合
16949:2002
系也已通过了
位于美国亚利桑那州
Mountain View
月通过了
ISO/TS-16949:2002
KEELOQ
。此外 ,
ISO 9001:2000
的全球总部、设计中心和晶圆生产厂均于
®
跳码器件、串行
Microchip
Chandler和Tem p e
质量体系认证。公司在
EEPROM
在开发系统的设计和生产方面的质量体
认证。
及位于加利福尼亚
、单片机 外设、非易失
ISO/TS-
2003
PICmicro
®
DS70143B_CN ii 初稿 2006 Microchip Technology Inc.
8
dsPIC30F6011A/6012A/6013A/6014A
dsPIC30F6011A/6012A/6013A/6014A
高性能数字信号控制器
注:本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F
指令集和编程的更多信息,请参阅 《dsPIC30F/33F
参考手册》
系列参考手册》
DS70157B_CN)。
DS70046D_CN)。有关器件
程序员
高性能改进型 RISC CPU
改进型哈佛架构
•C编译器优化指令集
零活的寻址模式
•84条基本指令
•24位宽指令, 16 位宽数据总线
最多 144 K 字节的片内闪存程序空间
最多 48K 的指令字
最多 8 K 字节的片内数据 RAM
最多 4 K 字节的非易失性数据 EEPROM
• 16 x 16 位工作寄存器阵列
高达 30 MIPS 的工作速度:
-DC至 40 MHz 外部时钟输入
- 4 MHz-10 MHz振荡器输入,带 PLL(4 倍频、 8 倍频和 16 倍频)
多达 41 个中断源:
-8个用户可选择的中断优先级
-5个外部中断源
-4个处理器陷阱
外设功能:
高灌 / 拉电流 I/O 引脚:25 mA/25 mA
•5个 16 位定时器/ 计数器;可以把 16 位定时器配对 形成 32 位定时器模块
•16位捕捉输入功能
•16位比较 /PWM 输出功能
数据转换器接口 (DCI)支持常见的音频编解码器 协议,包括 I
•3线 SPI 模块 (支持 4 帧模式)
2
•I
C™模块支持多主器件/从模式,支持 7 位 /10位寻
两个可寻址的、备具 FIFO 缓冲器的 UART 模块
两个 CAN 总线模块,与 CAN 2.0B 标准兼容
2
S AC’97
模拟功能:
•12位模数转换器 (Analog-to-Digital Converter, ADC),具有:
- 200 Ksps 转换速率
- 多达 16 个输入通道
- 在休眠和空闲期间进行转换
可编程低压检测 (Programmable Low-Voltage DetectionPLVD
可编程欠压检测和复位产生
特殊单片机功能:
DSP 功能:
双数据取
模寻址和位反转寻址模式
两个 40 位宽累加器,具有可选的饱和逻辑
•17位 x17 位单周期硬件小数 / 整数乘法器
所有 DSP 指令都是单周期的
- 乘法 - 累加 (MAC)运算
单周期 ±16 位移位
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第 1
增强型闪存程序存储器:
- 对于工业级温度范围,最少擦写次数 1 万次,
典型擦写次数 10 万次。
数据 EEPROM 存储器:
- 对于工业级温度范围,最少擦写次数 10 万次,
典型擦写次数 100 万次。
软件控制下,可自行再编程
上电复位 (Power-on ResetPOR)、上电延时
定时器 (Power-up TimerPWRT)以及振荡器 起振定时器 (Oscillator Start-up Timer, OST
零活的看门狗定时器 (Watchdog Timer WDT),片内带有低功耗 RC 振荡器,以便可靠地
工作
dsPIC30F6011A/6012A/6013A/6014A
特殊单片机功能 (续):
故障保护时钟监控器:
- 检测时钟故障,可切换至片上低功耗 RC 振荡
可编程代码保护
CMOS 技术:
低功耗高速闪存技术
宽广的工作电压范围 (2.5V 5.5V
工业级和扩展级温度范围
低功耗
在线串行编程 (In-Circuit Serial Programming™ ICSP™
可选择的功耗管理模式:
- 休眠、空闲和备用时钟模式
dsPIC30F6011A/6012A/6013A/6014A 控制器系列
器件 引脚
程序存储器
字节 指令
dsPIC30F6011A 64 132K 44K 6144 2048 5 8 8 16 ch 2 2 1 2
dsPIC30F6012A 64 144K 48K 8192 4096 5 8 8 AC’97, I
dsPIC30F6013A 80 132K 44K 6144 2048 5 8 8 16 ch 2 2 1 2
dsPIC30F6014A 80 144K 48K 8192 4096 5 8 8 AC’97, I
SRAM 字节EEPROM字节定时器
16 输入捕捉
输出比较 / 标准 PWM
编解码器
接口
ADC
12
100 Ksps
2
S 16 ch 2 2 1 2
2
S 16 ch 2 2 1 2
UART
SPI
2
C I
CAN
DS70143B_CN2 初稿 2006 Microchip Technology Inc.
引脚排列图
64 引脚 TQFP
dsPIC30F6011A/6012A/6013A/6014A
SS
RG13
RG12
RG14
C2TX/RG1
C1TX/RF1
C2RX/RG0
OC8/CN16/RD7
V
VDD
C1RX/RF0
OC7/CN15/RD6
OC6/IC6/CN14/RD5
EMUD2/OC2/RD1
OC3/RD2
OC4/RD3
OC5/IC5/CN13/RD4
AN5/IC8/CN7/RB5 AN4/IC7/CN6/RB4
AN2/SS1
AN1/V
AN0/V
RG15 T2CK/RC1 T3CK/RC2
SCK2/CN8/RG6
SDI2/CN9/RG7
SDO2/CN10/RG8
/LVDIN/CN4/RB2
MCLR
/CN11/RG9
SS2
AN3/CN5/RB3
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
PGC/EMUC/AN6/OCFA/RB6
PGD/EMUD//AN7/RB7
DD
AV
AVSS
AN8/RB8
dsPIC30F6011A
AN9/RB9
545352
55
27
26
SS
V
VDD
AN11/RB11
AN10/RB10
AN12/RB12
504951
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/INT2/RD9
43
IC1/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
31
30
29
28
AN13/RB13
AN14/RB14
U2TX/CN18/RF5
U2RX/CN17/RF4
AN15/OCFB/CN12/RB15
注: 每个引脚的说明,参见第 1.0 节 “器件概述”。
2006 Microchip Technology Inc. 初稿 DS70143B_CN3
dsPIC30F6011A/6012A/6013A/6014A
引脚排列图 (续)
64 引脚 TQFP
SS
CSDO/RG13
CSDI/RG12
CSCK/RG14
C2TX/RG1
C1TX/RF1
C2RX/RG0
OC8/CN16/RD7
V
VDD
C1RX/RF0
OC7/CN15/RD6
OC6/IC6/CN14/RD5
EMUD2/OC2/RD1
OC3/RD2
OC4/RD3
OC5/IC5/CN13/RD4
AN5/IC8/CN7/RB5 AN4/IC7/CN6/RB4
AN2/SS1
AN1/V
AN0/V
COFS/RG15
T2CK/RC1 T3CK/RC2
SCK2/CN8/RG6
SDI2/CN9/RG7
SDO2/CN10/RG8
/LVDIN/CN4/RB2
MCLR
/CN11/RG9
SS2
VDD
AN3/CN5/RB3
REF-/CN3/RB1
REF+/CN2/RB0
VSS
646362616059585756
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
171819202122232425
PGC/EMUC/AN6/OCFA/RB6
dsPIC30F6012A
DD
AVSS
AV
AN8/RB8
PGD/EMUD/AN7/RB7
AN9/RB9
545352
55
27
26
SS
V
VDD
AN11/RB11
AN10/RB10
AN12/RB12
504951
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/INT2/RD9
43
IC1/INT1/RD8
42
V
41 40 39 38 37 36 35 34 33
32
31
30
29
28
AN13/RB13
AN14/RB14
U2TX/CN18/RF5
U2RX/CN17/RF4
AN15/OCFB/CN12/RB15
SS
OSC2/CLKO/RC15 OSC1/CLKI V
DD
SCL/RG2 SDA/RG3 EMUC3/SCK1/INT0/RF6 U1RX/SDI1/RF2 EMUD3/U1TX/SDO1/RF3
注: 每个引脚的说明,参见第 1.0 节 “器件概述”。
DS70143B_CN4 初稿 2006 Microchip Technology Inc.
引脚排列图 (续)
80 引脚 TQFP
dsPIC30F6011A/6012A/6013A/6014A
RG15
T2CK/RC1
T3CK/RC2
T4CK/RC3 T5CK/RC4
SCK2/CN8/RG6
SDI2/CN9/RG7
SDO2/CN10/RG8
MCLR
SS2/CN11/RG9
V
VDD
INT1/RA12
INT2/RA13
AN5/CN7/RB5
AN4/CN6/RB4 AN3/CN5/RB3
AN2/SS1
/LVDIN/CN4/RB2
PGC/EMUC/AN1/CN3/RB1
PGD/EMUD/AN0/CN2/RB0
RG14
CN23/RA7
CN22/RA6
C2RX/RG0
RG13
RG12
80
79
1
2
3
4
5
6
7
8
9
10
SS
11
12
13
14
15
16
17
18
19
20
22
21
2324252627282930313233
C2TX/RG1
75
767877
dsPIC30F6013A
DD
C1TX/RF1
C1RX/RF0
727473
OC8/CN16/RD7
V
VSS
7170696867666564636261
OC7/CN15/RD6
OC6/CN14/RD5
34
OC5/CN13/RD4
35
IC5/RD12
OC4/RD3
OC3/RD2
IC6/CN19/RD13
37
36
EMUD2/OC2/RD1
60
59
58
57
56
55
54
53
52
51
50
49
48
47
46
45
44
43
42
41
39
38
EMUC1/SOSCO/T1CK/CN0/RC14
EMUD1/SOSCI/CN1/RC13
EMUC2/OC1/RD0
IC4/RD11
IC3/RD10
IC2/RD9
IC1/RD8
INT4/RA15
INT3/RA14
SS
V
OSC2/CLKO/RC15 OSC1/CLKI
DD
V
SCL/RG2
SDA/RG3
EMUC3/SCK1/INT0/RF6
SDI1/RF7
EMUD3/SDO1/RF8
U1RX/RF2
U1TX/RF3
40
DD
AVSS
AV
REF-/RA9
AN7/RB7
V
VREF+/RA10
AN6/OCFA/RB6
AN8/RB8
AN9/RB9
AN11/RB11
AN10/RB10
注: 每个引脚的说明,参见第 1.0 节 “器件概述”。
DD
VSS
V
AN12/RB12
AN13/RB13
AN14/RB14
IC8/CN21/RD15
IC7/CN20/RD14
AN15/OCFB/CN12/RB15
U2TX/CN18/RF5
U2RX/CN17/RF4
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第 5
dsPIC30F6011A/6012A/6013A/6014A
引脚排列图 (续)
80 引脚 TQFP
DD
CSCK/RG14
CSDO/RG13
CSDI/RG12
CN23/RA7
CN22/RA6
C2RX/RG0
C2TX/RG1
C1TX/RF1
VSS
C1RX/RF0
OC8/CN16/RD7
V
OC5/CN13/RD4
IC6/CN19/RD13
OC7/CN15/RD6
IC5/RD12
OC4/RD3
OC3/RD2
OC6/CN14/RD5
EMUD2/OC2/RD1
COFS/RG15
T2CK/RC1
T3CK/RC2
T4CK/RC3 T5CK/RC4
SCK2/CN8/RG6
SDI2/CN9/RG7
SDO2/CN10/RG8
MCLR
SS2/CN11/RG9
V
VDD
INT1/RA12
INT2/RA13
AN5/CN7/RB5
AN4/CN6/RB4 AN3/CN5/RB3
/LVDIN/CN4/RB2
AN2/SS1
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
22
21
2324252627282930313233
AN7/RB7
REF-/RA9
V
AN6/OCFA/RB6
75
767877
DD
AVSS
AV
VREF+/RA10
727473
7170696867666564636261
dsPIC30F6014A
DD
VSS
V
AN8/RB8
AN9/RB9
AN11/RB11
AN10/RB10
60
59
58
57
56
55
54
53
52
51
50
49
48
47
46
45
44
43
42
41
39
38
37
36
35
34
AN12/RB12
AN13/RB13
AN14/RB14
IC8/CN21/RD15
IC7/CN20/RD14
U2RX/CN17/RF4
EMUC1/SOSCO/T1CK/CN0/RC14
EMUD1/SOSCI/CN1/RC13
EMUC2/OC1/RD0
IC4/RD11
IC3/RD10
IC2/RD9
IC1/RD8
INT4/RA15
INT3/RA14
SS
V
OSC2/CLKO/RC15 OSC1/CLKI
DD
V
SCL/RG2
SDA/RG3
EMUC3/SCK1/INT0/RF6
SDI1/RF7
EMUD3/SDO1/RF8
U1RX/RF2
U1TX/RF3
40
U2TX/CN18/RF5
AN15/OCFB/CN12/RB15
注: 每个引脚的说明,参见第 1.0 节 “器件概述”。
DS70143B_CN6 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A
目录
1.0 器件概述 ....................................................................................................................................................................................... 9
2.0 CPU 架构概述 ............................................................................................................................................................................ 15
3.0 存储器构成 ................................................................................................................................................................................ 25
4.0 地址发生器单元 .......................................................................................................................................................................... 39
5.0 中断 ............................................................................................................................................................................................ 45
6.0 闪存程序存储器 .......................................................................................................................................................................... 51
7.0 数据 EEPROM 存储器 ................................................................................................................................................................ 57
8.0 I/O 端口 ...................................................................................................................................................................................... 63
9.0 Timer1 模块 ................................................................................................................................................................................ 69
10.0 Timer2/3 模块 ............................................................................................................................................................................. 73
11.0 Timer4/5 模块 ............................................................................................................................................................................. 79
12.0 输入捕捉模块.............................................................................................................................................................................. 83
13.0 输出比较模块.............................................................................................................................................................................. 87
14.0 SPI 模块 ..................................................................................................................................................................................... 91
15.0 I2C 模块...................................................................................................................................................................................... 95
16.0 通用异步收发器 (UART)模块 ............................................................................................................................................... 103
17.0 CAN 模块.................................................................................................................................................................................. 111
18.0 数据转换器接口 (DCI)模块 ................................................................................................................................................... 123
19.0 12 位模数转换器 (ADC)模块 .............................................................................................................................................. 133
20.0 系统集成 ................................................................................................................................................................................... 143
21.0 指令集汇总 ............................................................................................................................................................................... 163
22.0 开发支持 ................................................................................................................................................................................... 171
23.0 电气特性 ................................................................................................................................................................................... 175
24.0 封装信息 ................................................................................................................................................................................... 215
附录 A 版本历史 ........................................................................................................................................................................ 221
附录 B 器件比较 ........................................................................................................................................................................ 223
附录 C:从dsPIC30F601x 移植到 dsPIC30F601xA 器件............................................................................................................ 225
索引 .................................................................................................................................................................................................... 227
Microchip 网站.................................................................................................................................................................................... 233
变更通知客户服务 .............................................................................................................................................................................. 233
客户支持............................................................................................................................................................................................. 233
读者反馈表 ......................................................................................................................................................................................... 234
产品标识体系 ..................................................................................................................................................................................... 235
2006 Microchip Technology Inc. 初稿 DS70143B_CN7
dsPIC30F6011A/6012A/6013A/6014A
致 客 户
我们旨在提供最佳文档供客户正确使用 Microchip 产品。 为此,我们将不断改进出版物的内容和质量,使之更好地满足您的要求。 出版物的质量将随新文档及更新版本的推出而得到提升。
如果您对本出版物有任何问题和建议,请通过电子邮件联系我公司 TRC 经理,电子邮件地址为 CTRC@microchip.com,或将本 数据手册后附的 《读者反馈表》传真到 86-21-5407 5066。我们期待您的反馈。
最新数据手册
欲获得本数据手册的最新版本,请查询我公司的网站:
http://www.microchip.com
查看数据手册中任意一页下边角处的文献编号即可确定其版本。文献编号中数字串后的字母是版本号 的 A 版本。
勘误表
现有器件可能带有一份勘误表,描述了实际运行与数据手册中记载内容之间存在的细微差异以及建议的变通方法。一旦我们了解到 器件 / 文档存在某些差异时,就会发布勘误表。勘误表上将注明其所适用的硅片版本和文件版本。
欲了解某一器件是否存在勘误表,请通过以下方式之一查询:
• Microchip 网站 http://www.microchip.com
当地 Microchip 销售办事处 (见最后一页)
在联络销售办事处时,请说明您所使用的器件型号、硅片版本和数据手册版本 (包括文献编号)。
例如:DS30000A是DS30000
客户通知系统
欲及时获知 Microchip 产品的最新信息,请到我公司网站 www.microchip.com 上注册。
DS70143B_CN8 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

1.0 器件概述

注:本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F
指令集和编程的更多信息,请参阅 《dsPIC30F/33F
参考手册》
系列参考手册》
DS70157B_CN)。
DS70046D_CN)。有关器件
程序员
本文档给出了 dsPIC30F6011A/6012A/6013A/6014A数 字信号控制器 (DSC)器件的特定信息。dsPIC30F 器 件在其高性能 16 位单片机 (MCU)架构中,融合了丰 富的数字信号处理器(Digital Signal Processor,DSP) 功能。图 1-1 和图 1-2 所示分别为 dsPIC30F6011A/ 6012A dsPIC30F6013A/6014A 的框图。
2006 Microchip Technology Inc. 初稿 DS70143B_CN9
dsPIC30F6011A/6012A/6013A/6014A

1-1 dsPIC30F6011A/6012A 框图

Y
中断
控制器
地址锁存
程序存储器
(至多
数据
EEPROM
(至多
数据锁存器
OSC1/CLKI
144 KB
4 KB
至各块的 控制信号
24
24
24
16
指令译码
& 控制
时序 发生
MCLR
VDD、
AVDD、
PSV &
数据存取
控制块
16
24
V
SS
AV
SS
数据总线
8
PCH PCL
PCU
程序计数器
堆栈控制
逻辑
ROM
IR
上电延时
定时器 振荡器
起振定时器
POR/BOR
复位
看门狗 定时器
低压
检测
16
循环控制
逻辑
锁存器
译码
16
Y
地址锁存器
Y AGU
有效地址
DSP
引擎
16
16
数据
RAM
16
16
16
16
X RAGU X WAGU
16
16 x 16
W
寄存器阵列
16
ALU<16>
X
数据总线
16
数据锁存器
数据锁存器
X
数据
RAM
地址锁存器
16
除法
单元
16
16
16
PORTB
PORTC
PORTD
AN0/CN2/RB0 AN1/CN3/RB1 AN2/SS1/LVDIN/CN4/RB2 AN3/CN5/RB3 AN4/CN6/RB4 AN5/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 AN15/OCFB/CN12/RB15
T2CK/RC1 T3CK/RC2 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/CN16/RD7
IC1/RD8 IC2/RD9 IC3/RD10 IC4/RD11
CAN1
CAN2
12位ADC
定时器
输入捕捉
模块
DCI
输出比较
模块
SPI1 SPI2
I2C™
UART1
UART2
PORTF
PORTG
C1RX/RF0
C1TX/RF1
U1RX/SDI1/RF2
EMUD3/U1TX/SDI1/RF3
U2RX/CN17/RF4
U2TX/CN18/RF5
EMUC3/SCK1/INT0/RF6
C2RX/RG0
C2TX/RG1
SCL/RG2
SDA/RG3
SCK2/CN8/RG6
SDI2/CN9/RG7
SDO2/CN10/RG8
/CN11/RG9
SS2
CSDI/RG12
CSDO/RG13
CSCK/RG14
COFS/RG15
DS70143B_CN10 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

1-2 dsPIC30F6013A/6014A 框图

中断
控制器
地址锁存器
程序存储器
144 KB
(至多
数据
EEPROM
(至多4 KB)
数据锁存
至各块的 控制信号
OSC1/CLKI
24
指令译码
16
&控制
时序 发生
VDD、
DD
AV
数据存取
24
控制块
24
24
MCLR
V
SS
AV
PSV &
16
SS
Y
数据总线
8
PCU
程序计数器
堆栈控制
逻辑
ROM
IR
上电延时
定时器 振荡器
起振定时器
POR/BOR
复位
看门狗 定时器
低压
检测
16
PCH PCL
循环控制
逻辑
锁存器
译码
16
16
16
数据锁存器
Y
数据
RAM
16
16
X RAGU X WAGU
有效地址
16
16 x 16
W
寄存器阵列
16
16
ALU<16>
DSP
引擎
16
Y AGU
X
数据总线
数据锁存器
X
地址锁存器地址锁存器
除法
单元
16
16
数据
RAM
CN22/RA6 CN23/RA7 V
REF
-/RA9
V
REF
+/RA10 INT1/RA12 INT2/RA13 INT3/RA14
PORTA
16
16
PORTB
16
PORTC
PORTD
INT4/RA15
PGD/EMUD/AN0/CN2/RB0 PGC/EMUC/AN1/CN3/RB1 AN2/SS1/LVDIN/CN4/RB2 AN3/CN5/RB3 AN4/CN6/RB4 AN5/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 T3CK/RC2 T4CK/RC3 T5CK/RC4 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/CN16/RD7 IC1/RD8 IC2/RD9 IC3/RD10 IC4/RD11 IC5/RD12 IC6/CN19/RD13 IC7/CN20/RD14 IC8/CN21/RD15
CAN1
CAN2
12位ADC
定时器
输入捕捉
模块
DCI
输出比较
模块
SPI1 SPI2
I2C™
UART1
UART2
PORTF
PORTG
C1RX/RF0 C1TX/RF1
U1RX/RF2 U1TX/RF3 U2RX/CN17/RF4 U2TX/CN18/RF5 EMUC3/SCK1/INT0/RF6 SDI1/RF7 EMUD3/SDO1/RF8
C2RX/RG0 C2TX/RG1 SCL/RG2 SDA/RG3 SCK2/CN8/RG6 SDI2/CN9/RG7 SDO2/CN10/RG8
/CN11/RG9
SS2 CSDI/RG12 CSDO/RG13 CSCK/RG14 COFS/RG15
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第11
dsPIC30F6011A/6012A/6013A/6014A
1-1 简要说明了器件的 I/O 引脚排列以及端口引脚可 能的复用功能。一个端口引脚上可能存在多种功能。出 现复用时,外设模块的功能需求,可能会强制地取代端 口引脚的数据流向。

1-1 引脚排列 I/O 说明

引脚名称
AN0-AN15 I Analog 模拟输入通道。
AV
DD PP模拟模块的正电源。 SS PP模拟模块的参考地。
AV
CLKI CLKO
CN0-CN23 I ST
COFS CSCK CSDI CSDO
C1RX C1TX C2RX C2TX
EMUD EMUC EMUD1 EMUC1 EMUD2 EMUC2 EMUD3 EMUC3
IC1-IC8 I ST 捕捉输入 1 8
INT0 INT1 INT2 INT3 INT4
LVDIN I Analog 低压检测参考电压输入引脚。
MCLR
OCFA OCFB OC1-OC8
引脚 类型
I
O
I/O I/O
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 I I
I/P ST 主复位输入或编程电压输入。此引脚是器件的复位引脚,低电平
I I
O
图注: CMOS = CMOS 兼容输入或输出 Analog = 模拟输入
ST = CMOS 电平的施密特触发器输入 O= 输出 I=输入 P= 电源
缓冲器
类型
AN0 AN1 也分别用于器件编程数据和时钟输入。
ST/CMOS—外部时钟源输入,总是与 OSC1 引脚功能关联。
晶振输出。在晶振模式下,连接到晶体或谐振器。也可在 RC EC 模式下用作 CLKO。始终与 OSC2 引脚功能关联。
输入电平变化通知输入。 在所有引脚上,均可用软件设置内部弱上拉。
ST ST ST
ST
ST
ST ST ST ST ST ST ST ST
ST ST ST ST ST
ST ST
数据转换器接口帧同步引脚。 数据转换器接口串行时钟输入 / 输出引脚。 数据转换器接口串行数据输入引脚。 数据转换器接口串行数据输出引脚。
CAN1 总线接收引脚。 CAN1 总线发送引脚。 CAN2 总线接收引脚。 CAN2 总线发送引脚。
ICD 主通信通道数据输入 / 输出引脚。 ICD 主通信通道时钟输入 / 输出引脚。 ICD 辅助通信通道数据输入 / 输出引脚。 ICD 辅助通信通道时钟输入 / 输出引脚。 ICD 第三通信通道数据输入 / 输出引脚。 ICD 第三通信通道时钟输入 / 输出引脚。 ICD 第四通信通道数据输入 / 输出引脚。 ICD 第四通信通道时钟输入 / 输出引脚。
外部中断 0。 外部中断 1。 外部中断 2。 外部中断 3。 外部中断 4。
有效。 比较故障保护 A 输入 (对于比较通道 1、 2、 3 和 4)。
比较故障保护 B 输入 (对于比较通道 5、 6、 7 和 8)。 比较输出 1 至 8
说明
DS70143B_CN12 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A
1-1 引脚排列 I/O 说明 (续)
引脚名称
OSC1
OSC2
PGD PGC
RA6-RA7 RA9-RA10 RA12-RA15
RB0-RB15 I/O ST PORTB 是双向 I/O 端口。
RC1-RC4 RC13-RC15
RD0-RD15 I/O ST PORTD 是双向 I/O 端口。 RF0-RF8 I/O ST PORTF 是双向 I/O 端口。
RG0-RG3 RG6-RG9 RG12-RG15
SCK1 SDI1 SDO1 SS1 SCK2 SDI2 SDO2 SS2
SCL SDA
SOSCO SOSCI
T1CK T2CK T3CK T4CK T5CK
U1RX U1TX U1ARX U1ATX U2RX U2TX
DD P—逻辑和 I/O 引脚的正电源。
V VSS P—逻辑和 I/O 引脚的参考地。
REF+ I Analog 模拟参考电压 (高)输入。
V VREF- I Analog 模拟参考电压 (低)输入。
引脚 类型
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
O
I
I/O
I
O
I
I/O I/O
O
I
I I I I I
I
O
I
O
I
O
图注: CMOS = CMOS 兼容输入或输出 Analog = 模拟输入
ST = CMOS 电平的施密特触发器输入 O= 输出 I=输入 P= 电源
缓冲器
类型
ST/CMOS—晶振输入。配置在 RC 模式时,为 ST 缓冲器输入;否则为
CMOS 输入。 晶振输出。在晶振模式下,连接到晶体或谐振器。 也可在 RC EC 模式下用作 CLKO
ST ST
ST ST ST
ST ST
ST ST ST
ST ST
— ST ST ST
— ST
ST ST
ST/CMOS
ST ST ST ST ST
ST
— ST
— ST
在线串行编程数据输入 / 输出引脚。 在线串行编程时钟输入引脚。
PORTA 是双向 I/O 端口。
PORTC 是双向 I/O 端口。
PORTG 是双向 I/O 端口。
SPI1 的同步串行时钟输入 / 输出。 SPI1 数据输入。 SPI1 数据输出。 SPI1 同步从动模式。 SPI2 的同步串行时钟输入 / 输出。 SPI2 数据输入。 SPI2 数据输出。 SPI2 同步从动模式。
2
C™ 的同步串行时钟输入 / 输出。
I
2
C 的同步串行数据输入 / 输出。
I 32 kHz 低功耗晶振输出。
32 kHz 低功耗晶振输入。配置在 RC 模式时, ST 缓冲器输入;否则为 CMOS 输入。
Timer1 外部时钟输入。 Timer2 外部时钟输入。 Timer3 外部时钟输入。 Timer4 外部时钟输入。 Timer5 外部时钟输入。
UART1 接收。 UART1 发送。 UART1 备用接收。 UART1 备用发送。 UART2 接收。 UART2 发送。
说明
2006 Microchip Technology Inc. 初稿 DS70143B_CN13
dsPIC30F6011A/6012A/6013A/6014A
注:
DS70143B_CN14 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

2.0 CPU 架构概述

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

2.1 内核概述

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

2.2 编程模型

编程模型如图 2-1 所示,它包括 16 x 16 位工作寄存器
W0 W15)、 2 x 40 位累加器 (AccA AccB)、
状态寄存器 (SR)、数据表页寄存器 (TBLPAG)、程 序空间可视性页寄存器 (PSVPAG)、 DO REPEAT 寄存器(DOSTARTDOEND、DCOUNT和RCOUNT) 以及程序计数器(PC)。工作寄存器可作为数据、地址 或偏移量寄存器。全部寄存器都是存储器映射的。 W0 用作文件寄存器寻址的 W 寄存器。
这些寄存器中,一些寄存器有与之关联的影子寄存器, 如图 2-1 所示。影子寄存器用作临时保存寄存器,事件 发生时可在影子寄存器和主寄存器之间传递内容。所有 影子寄存器均不能直接存取。寄存器与其影子寄存器之 间的数据传递遵守下列规则:
PUSH.S POP.S W0W1W2W3 SR (仅限 DC、 N、 OV、 Z 和 C 位)与对应的影子寄存器之间进行内
容传递。
DO 指令 循环开始时, DOSTART、 DOEND 和 DCOUNT 寄存器的内容压入影子寄存器,在循环结束时其内 容从各自的影子寄存器中弹出。
对工作寄存器进行字节操作时,只影响目标寄存器的最 低有效字节 (LSB)。不过,存储器映射工作寄存器的 一个好处是,可以通过字节宽数据存储空间存取来处理 最低和最高有效字节。
2.2.1 软件堆栈指针 / 帧指针
dsPIC® DSC 器件具备一个软件堆栈。W15 被指定用作
软件堆栈指针(software Stack PointerSP),异常处 理、子程序调用与返回将自动修改 W15。但是,W15 可 以被任何指令所引用,引用方式与引用所有其他 W 寄存 器相同。这简化了堆栈指针的读、写和处理 (例如,创 建堆栈帧)。
注: 为了防止出现不对齐的堆栈访问,
W15<0> 始终清零。
复位时 W15 初始化为 0x0800 在初始化过程中,用户 可以重新设定 SP,使它指向数据空间内的任何单元。
W14 被指定用作 LNK ULNK 指令中所定义的堆栈帧 指针。但是,W14 可以被任何指令所引用,引用方式与 引用所有其他 W 寄存器相同。
2.2.2 状态寄存器
dsPIC DSC 内核有一个 16 位状态寄存器 (STATUS register SR),其低有效字节 (LSB) 称为 SR 低字
节(SRL),其高有效字节 (MSB) 称为 SR 高字节
SRH), SR 寄存器组成见图 2-1
SRL 包含全部的 MCU ALU 运算状态标志位 (包括 Z 位),以及 CPU 中断优先级状态位 IPL<2:0> 和重复有 效状态位 RA。在异常处理期间, SRL PC MSB 连接起来形成一个完整的字值,然后被压入堆栈。
状态寄存器的高字节包含 DSP 加法器 / 减法器状态位、
DO 循环有效位 (DA)和半进位 (DC)状态位。
2.2.3 程序计数器
程序计数器为 23 位宽; bit 0 始终为零。因此, PC 能 够最多寻址 4M 指令字。
DS70143B_CN16 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

2-1:编模型

DSP 操作数 寄存器
DSP 地址 寄存器
W0/WREG
W1
W2
W3
W4
W5
W6
W7
W8
W9
W10
W11
W12/DSP 偏移量
W13/DSP 回写
W14/ 帧指针
W15/ 堆栈指针
D0D15
PUSH.S 影子寄存器
DO 影子寄存器
图注
工作寄存器
DSP
累加器
PC22
7
7
22
22
TABPAG
TBLPAG
PSVPAG
PSVPAG
AD39 AD0AD31
AccA
AccB
0
数据表页地址
0
DOSTART
程序空间可视性页地址
15
RCOUNT
15
DCOUNT
DOEND
SPLIM 堆栈指针限制寄存器
AD15
PC0
程序计数器
0
0
REPEAT 循环计数器
0
DO 循环计数器
0
DO 循环起始地址
DO 循环结束地址
15
CORCON
OA OB SA SB
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第17
OAB SAB
SRH
DA DC
IPL2 IPL1
RA
IPL0 OV
SRL
N
0
Z
内核配置寄存器
C
状态寄存器
dsPIC30F6011A/6012A/6013A/6014A

2.3 除法支持

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

2-1 除法指令

指令 功能
DIVF DIV.sd 有符号除法: (Wm + 1:Wm)/Wn W0 Rem W1
DIV.sw DIV.s 有符号除法:Wm/Wn W0 Rem W1 DIV.ud 无符号除法: (Wm + 1:Wm)/Wn W0 Rem W1 DIV.uw DIV.u 无符号除法:Wm/Wn W0 Rem W1
有符号小数除法:Wm/Wn W0 Rem W1
保存中断现场。
DS70143B_CN18 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

2.4 DSP 引擎

DSP 引擎的组成:一个高速 17 位× 17 位乘法器、一 个桶形移位寄存器和一个 40 位加法器 / 减法器 (两个 目标累加器、舍入逻辑和饱和逻辑)。
dsPIC30F 是单周期指令流架构,所以 DSP 引擎不能与 MCU 指令流进行并发操作。不过,一些 MCU ALU DSP 引擎资源,可以被同一条指令(例如,EDEDAC
并发地使用。
DSP 引擎能够执行固有的不需要其他数据的累加器至 累加器操作。这些指令是 ADDSUB NEG

2-2 DSP 指令汇总

指令 代数运算 ACC 回写
CLR A = 0
ED A = (x – y)
EDAC A = A + (x – y)
MAC A = A + (x * y)
MAC A = A + x
MOVSAC A 无变化
MPY A = x * y
MPY A = x
MPY.N A = – x * y
MSC A = A – x * y
通过 CPU 内核配置寄存器 (CORCON)中的各个位, 可以有多种 DSP 引擎选择,这些选择如下:
1. 小数或整数 DSP 乘法 (IF)。
2. 有符号或无符号 DSP 乘法 (US)。
3. 常规或收敛舍入 (RND)。
4. AccA 自动饱和使能 / 禁止 (SATA)。
5. AccB 自动饱和使能 / 禁止 (SATB)。
6. 对于写数据存储器,自动饱和使能/禁止(SATDW)。
7. 累加器饱和模式选择 (ACCSAT)。
注: CORCON 的构成,见表 3-3
DSP 引擎的框图,如图 2-2 所示。
2
2
2
2
否 否
2006 Microchip Technology Inc. 初稿 DS70143B_CN19
dsPIC30F6011A/6012A/6013A/6014A

2-2 DSP 引擎框图

40
进位 / 借位输出
进位 / 借位输入
40 位累加器 A 40 位累加器 B
饱和
加法器
40
符号扩展
取补
40
40
桶形 移位
寄存器
40
16
40
舍入
逻辑
16
X 数据总线
Y 数据总线
33
17 位乘法器
/ 定标器
16
/ 来自 W 阵列
16
32
32
补零
16
DS70143B_CN20 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A
2.4.1 乘法器
17位×17位的乘法器可以进行有符号或无符号的运算,
其输出经过定标器进行换算后可支持 1.31 小数(Q31) 或 32 位整数结果。无符号操作数经过零扩展后,送入 乘法器输入值的第 17 位。有符号操作数经过符号扩展, 送入乘法器输入值的第 17 位。17 位× 17 位乘法器 / 标器的输出是 33 位值,它将被符号扩展为 40 位。 整型 数据的固有表示形式为有符号的二进制补码值,其中, MSB 定义为符号位。一般来说,N 位二进制补码整数的 范围为 -2
-32768 0x800032767 0x7FFF),包括 0 内。对于 32 位整数,数据范围是 2,147,483,648
0x8000 0000 至 2,147,483,647 (0x7FFF FFFF)。
当乘法器配置为小数乘法时,数据表示为二进制补码小 数,其中 MSB 定义为符号位,小数点暗含在符号位之 后(QX 格式)。暗含小数点的 N 位二进制补码小数的 范围是 -1.0 至(1 – 2 范围是 -1.0 0x8000)至 0.999969482 0x7FFF), 包括 0 在内,其精度为 3.01518x10-5。在小数方式下,
16x16 乘法运算将产生 1.31 乘积,其精度为 4.65661 x 10
同一个乘法器还用来支持 MCU 乘法指令,包括整数的 16 位有符号、无符号和混和符号乘法。
可以指示 MUL 指令使用字节或字长度的操作数。字节操 作数将产生 16 位结果,而字操作数将产生 32 位结果, 结果存放在 W 寄存器阵列的指定寄存器中。
-10
N-1
N-1
2
– 1。对于 16 位整数,数据范围是
1-N
)。对 于 16 位小数,Q15 数据
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 32bit 39)。如果OA OB 位置 1 而且 INTCON1
寄存器中相应的溢出陷阱标志使能位 (OVATEN 和 OVBTEN)置 1 的话,还可以选择用 OA OB 位产生算 术警告陷阱 (见第 5.0 节 “中断”)。这使得用户能够 立即采取措施,例如,改正系统增益。
2006 Microchip Technology Inc. 初稿 DS70143B_CN21
dsPIC30F6011A/6012A/6013A/6014A
每次数据通过加法器 / 减法器,就会修改 SA SB 位, 但用户只能对它们进行清零。置 1 时,它们表明累加器 已经溢出其最大范围 (对于 32 位饱和是 bit 31,而 40 位饱和是 bit 39),将发生饱和 (如果饱和使能的话)。 如果没有使能饱和,SA 和 SB 置 1 默认为 bit 39 溢出, 于是表明产生了灾难性溢出。如果 INTCON1 寄存器中 的 COVTE 位置 1,当饱和被禁止时,SA SB 位将产 生算术警告陷阱。
在状态寄存器中,对于溢出和饱和状态位,可以将 OAOB 的逻辑或形成 OAB 位,将 SA SB 的逻辑或形 成 SAB 位。这样,只需检查状态寄存器中的一个位,程 序就能判断累加器是否已溢出,或者累加器是否已饱 和。对于通常要使用两个累加器的复杂数值算术而言, 这很有用。
器件支持三种饱和及溢出模式:
1. bit 39 溢出和饱和: 当发生 bit 39 溢出和饱和时,饱和逻辑将最大的 正 9.31 值(0x7FFFFFFFFF)或最大的负 9.31 值(0x8000000000)装入目标累加器。 SA SB 位置 1 并保持置 1 直到被用户清零。这称为
“超饱和”(super saturation),为错误数据或不
可预期的算法问题 (例如,增益计算)提供了保 护机制。
2. bit 31 溢出和饱和: 当发生 bit 31 溢出和饱和时,饱和逻辑将最大的 正 1.31 值(0x007FFFFFFF)或最大的负 1.31 值(0xFF80000000)装入目标累加器。 SA 或 SB 位置 1 并保持置 1 直到被用户清零。当这种 饱和模式生效时,不使用警戒位(因此 OAOBOAB 位不会被置 1)。
3. bit 39 灾难性溢出: 来自加法器的 bit 39 溢出状态位,被用来将 SASB 位置 1 (置 1 后,这两位将保持置 1,除 非用户进行清零)。不进行饱和操作,允许累加 器溢出 (破坏其符号)。如果 INTCON1 寄存器 中的 COVTE 位置 1,灾难性溢出会导致一个陷 阱异常。
2.4.2.2 累加器 “回写”
MAC 类指令(MPYMPY.NED EDAC 除外)可以选 择将累加器高字 (bit 16 bit 31)的舍入形式写入数 据存储空间,前提是当前指令不对该累加器进行操作。 通过 X 总线,寻址组合的 X Y 地址空间,执行回写 操作。支持以下寻址模式:
1. W13,寄存器直接寻址: 非操作目标的累加器的舍入内容以 1.15 小数形 式写入 W13
2. [W13] + = 2,执行后递增的寄存器间接寻址: 非操作目标的累加器的舍入内容以 1.15 小数形 式写入 W13 指向的地址。 然后 W13 递增 2(对 于字写入)。
2.4.2.3 舍入逻辑
舍入逻辑是一个组合块,在累加器写(存储)过程中执 行常规的(有偏)或收敛的(无偏)舍入功能。舍入模 式由 CORCON 寄存器中 RND 位的状态决定。 它会产 生一个 16 位的 1.15 数据值,该值被送到数据空间写饱 和逻辑: 如果此指令不指明舍入,就会存储一个截取的
1.15 数据值,简单地丢弃最低有效字 (lsw)。
常规舍入取累加器的 bit 15,对它进行零扩展并将扩展 后的值加到 ACCxH 字 (累加器的 bit 16 bit 31)。 如果 ACCxL 字 (累加器的 bit 0 bit 15)在 0x80000xFFFF 之间(包括 0x8000 ), 则 ACCxH 递增 1。 如果 ACCxL 0x0000 0x7FFF 之间,则 ACCxH 不 变。此算法的结果经过一系列随机舍入操作,值将稍稍 偏大 (正偏)。
除非 ACCxL 等于 0x8000,否则收敛的(或无偏)舍入 操作方式与常规舍入相同。ACCxL 等于 0x8000 时,要 对 ACCxH LSb (累加器的 bit 16)进行检测。 如果 它为 1ACCxH 递增 1 如果它为 0, ACCxH 不变。 假设 bit 16 本身是随机的,这样的机制将消除任何可能 累加的舍入偏移。
通过 X 总线, SAC SAC.R 指令将目标累加器内容的 截取 (SAC)或舍入 (SAC.R)形式存入数据存储空间
(这受数据饱和的影响,见第 2.4.2.4 节 “数据空间写
饱和”)。注意,对于 MAC 类指令,累加器回写操作将 以同样的方式进行,通过 X 总线寻址组合的 MCU XY)数据空间。对于 MAC 类指令,数据始终要进行舍 入。
DS70143B_CN22 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A
2.4.2.4 数据空间写饱和
除了加法器 / 减法器饱和,对数据空间进行写操作也会 饱和,但不会影响源累加器的内容。数据空间写饱和逻 辑块接受来自舍入逻辑块的一个 16 位的 1.15 小数值作 为输入,还接受来自源 (累加器)和 16 位舍入加法器 的溢出状态。这些经过组合,用来选择恰当的 1.15 小数 值作为输出,写入至数据存储空间中。
如果 CORCON 寄存器中的 SATDW 位置 1,将检测(经 过舍入或截取后的)数据是否溢出,并相应地进行调 整。如果输入数据大于 0x007FFF,则写入数据存储器 中的数据被强制为最大的正 1.15 值, 0x7FFF。如果输 入数据小于 0xFF8000,则写入数据存储器中的数据被 强制为最大的负 1.15 值, 0x8000。源累加器的 MSb
bit 39)用来决定被检测的操作数的符号。
如果 CORCON 寄存器中的 SATDW 位没有置 1,则输 入数据都将通过,在任何情况下都不会被修改。
2.4.3 桶形移位寄存器
桶形移位寄存器在单个周期内最多可算术或逻辑右移 16 位或左移 16 位。源寄存器可以是两个 DSP 累加器 中的任何一个,或者是 X 总线(支持寄存器或存储器数 据的多位移位)。
移位寄存器需要一个有符号二进制值,用来确定移位操 作的幅度 (位数)和方向。正值将操作数右移。负值则 将操作数左移。值为 “0”则不改变操作数。
桶形移位寄存器是 40 位宽的,于是,它为 DSP 移位操 作提供了 40 位的结果,而为 MCU 移位操作提供 16 位 的结果。来自 X 总线的数据在桶形移位寄存器中的存放 方式是:右移则数据存放在 bit 16 bit 31,左移则存 放在 bit 0 bit 16
2006 Microchip Technology Inc. 初稿 DS70143B_CN23
dsPIC30F6011A/6012A/6013A/6014A
注:
DS70143B_CN24 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

3.0 存储器构成

注: 本数据手册总结了 dsPIC30F 系列器件的功能,

3.1 程序地址空间

程序地址空间为 4M 指令字,它可通过一个 24 位值来寻 址,这 24 位值或者是来自 23 PC,或者表指令有效 地址 (Effective AddressEA) ,或者来自数据空间 EA(当按照表 3-1 定义的那样,把程序空间映射到数据 空间时) 。注意,为了提供与数据空间寻址的兼容性, 在两个连续的程序字之间,程序空间地址递增量为 2
但是不应把本手册当作无所不包的参考手册来 使用。有关 CPU、外设、寄存器说明和一般器 件功能的更多信息,请参阅
考手册》
和编程的更多信息,请参阅 《dsPIC30F/33F
序员参考手册》
DS70046D_CN) 。有关器件指令集
DS70157B_CN)。
dsPIC30F
系列参
对于除 TBLRD/TBLWT 外的所有访问,用户程序空间访 问限制在低 4M 指令字地址范围(0x000000 至 0x7FFFFE);TBLRD/TBLWT使用TBLPAG<7>来决定 用户或配置空间访问。在表 3-1 “程序空间地址构成” 中,bit 23 允许访问器件 ID、用 户 ID 和配置位。对于其 他情形, bit 23 始终清零。
注: 3-1 和图 3-2 所示的地址映射是概念性
的,实 际的存储器配置取决于可用的存储 器大小,各器件的存储器配置可能会存在 差异。
2006 Microchip Technology Inc. 初稿 DS70143B_CN25
dsPIC30F6011A/6012A/6013A/6014A
3-1
空间
用户存储
dsPIC30F6011A/6013A
间映射
复位 – GOTO 指令
复位 – 目标地址
中断向量表
保留
备用向量表
用户闪存
程序存储器
44K 指令字)
保留
(读为 0)
数据 EEPROM
2 K 字节)
的程序存储空
000000 000002 000004
向量表
00007E 000080 000084 0000FE 000100
015FFE 016000
7FF7FE 7FF800
7FFFFE 800000
3-2
空间
用户存储
dsPIC30F6012A/6014A
间映射
复位 – GOTO 指令
复位 – 目标地址
中断向量表
保留
备用向量表
用户闪存
程序存储器
48K 指令字)
保留
(读为 0
数据 EEPROM
4 K 字节)
的程序存储空
000000 000002 000004
向量表
00007E 000080 000084 0000FE 000100
017FFE 018000
7FEFFE 7FF000
7FFFFE 800000
空间
配置存储
保留
UNITID32 指令字)
保留
器件配置寄存器
保留
DEVID (2)
8005BE 8005C0
8005FE 800600
F7FFFE F80000
F8000E F80010
FEFFFE FF0000 FFFFFE
保留
8005BE
空间
配置存储
UNITID 32 指令字)
保留
器件配置寄存器
保留
DEVID (2)
8005C0
8005FE 800600
F7FFFE F80000
F8000E F80010
FEFFFE FF0000 FFFFFE
DS70143B_CN26 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

3-1 程序空间地址构成

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

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

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

3-5 表访问程序数据 (MSB

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

3-6 数据空间通过程序空间可视性页映射到程序空间的操作

程序空间
数据空间
0x0000
0x000100
0x02
(1)
8
23 15 0
23
数据读
0x010000
0x017FFF
EA<15> =
16
数据 空间
EA
数据空间的上半部分 映射到程序空间
EA<15> = 1
BSET CORCON,#2 ; PSV bit set MOV #0x02, W0 ; Set PSVPAG register MOV W0, PSVPAG MOV 0x8000, W0 ; Access program memory location
注: PSVPAG 是 8 位寄存器,包含程序空间地址的 bit <22:15> (即,它定义了程序空间页,数据空间
的上半部分要映射到这个程序空间页)。
15
0
15
; using a data space access
0x8000
15
0xFFFF
PSVPAG
地址连接
DS70143B_CN30 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

3.2 数据地址空间

内核具有两个数据空间。数据空间可以看作是独立的
(对于某些 DSP 指令而言),或者看作是统一的线性地
址范围 (对于 MCU 指令而言)。使用两个地址发生单 元(Address Generation Units, AGU)和独立的数据 路径访问数据空间。
3.2.1 数据存储空间映射
数据存储空间分为两块,X Y 数据空间。这个架构的 关键之处在于,Y 空间是 X 空间的子集,Y 空间完全包 含在 X 中。为了提供外在的线性寻址空间,X 和 Y 空间 要有连续的地址。
在执行除 MAC 类指令之外的任何指令时, X 块由 64K 字节数据地址空间(包括全部 Y 地址)组成。在执行一 条 MAC 类指令时,X 块由 64K 字节数据地址空间组成, 但不包括 Y 地址块 (只用来读数据)。换句话说,所有 其他指令把整个数据存储空间当作一个复合的地址空 间。 MAC 类指令把 Y 地址空间从数据空间中抽取出来, 使用源自 W10 W11 的 EA 来寻址 Y 地址空间。剩下X 数据空间则使用 W8 W9 来寻址。只有 MAC 类指 令才能同时访问两个地址空间。
数据存储空间映射如图 3-7 和图 3-8 所示。
3.2.2 数据空间
X 数据空间为全部指令所使用,支持全部的寻址模式。
读数据总线和写数据总线是独立的。X 读数据总线是所 有指令的返回数据路径,它把数据空间视为复合的 X Y 地址空间。对于双操作数读指令(MAC 类),它还是 X 地址空间的数据路径。对于所有指令而言,X 写数据总 线是至数据空间的只写路径。
X 数据空间还支持所有指令的模寻址,不过要受到寻址 模式的限制。位反转寻址只是在写 X 数据空间时才支 持。
MAC 类指令(CLR、EDEDAC、MACMOVSACMPY MPY.NMSC)使用的 Y数据空间,协同 X数据空间,提
供了两条并行的数据读取路径。Y 总线上不会出现写操 作。MAC 类指令使用两个专用的 W 寄存器指针 ,W10W11,它们始终寻址 Y 数据空间,与 X 数据空间独 立;而 W8 W9 则始终寻址 X 数据空间。注意,在累 加器回写期间,数据地址空间视为 X Y 数据空间的组 合,从而写操作通过 X 总线进行。所以,可以写整个数 据空间中的任何地址。
Y 数据空间仅用于与 MAC 类指令关联的数据预取操作。 它也支持自动循环缓冲区的模寻址。当然,所有其他指 令可以通过 X 数据路径来把 Y 数据地址空间作为复合线 性空间的一部分来进行访问。
3-7 和图 3-8 给出了 X Y 数据空间之间的边界定 义,用户不能设定改变边界。如果 EA 指向其所在地址 空间之外的数据,或者指向物理存储器之外的存储单 元,将返回全零的字 / 字节。例如,尽管 Y 地址空间对 于使用任何寻址模式的所有非 MAC 指令而言,是可见 的,如果一条 MAC 指令试图使用 W8 W9 X 空间指 针)从 Y 地址空间取数据,将返回 0x0000
2006 Microchip Technology Inc. 初稿 DS70143B_CN31
dsPIC30F6011A/6012A/6013A/6014A

3-7dsPIC30F6011A/6013A 的数据存储空间映射

2K 字节 SFR 空间
6K 字节
SRAM 空间
MSB
地址
0x0001
0x07FF 0x0801
0x17FF 0x1801
0x1FFF 0x1FFE
0x8001
16
LSBMSB
SFR 空间
X 数据 RAM (X)
Y 数据 RAM (Y)
LSB
地址
0x0000
0x07FE 0x0800
8K 字节 Near
数据空间
0x17FE 0x1800
0x1FFE 0x1FFF
0x20000x2001
0x8000
可以被映射到 程序存储器
(也可以不映射)
0xFFFF
X 数据
未用(X
0xFFFE
DS70143B_CN32 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

3-8 dsPIC30F6012A/6014A 的数据存储空间映射

2 K 字节 SFR 空间
8 K 字节
SRAM 空间
MSB
地址
0x0001
0x07FF 0x0801
0x17FF 0x1801
0x27FF 0x27FE
0x8001
16
LSBMSB
SFR 空间
X 数据 RAM(X)
Y 数据 RAM(Y)
LSB
地址
0x0000
0x07FE 0x0800
8K 字节 Near
数据空间
0x17FE 0x1800
0x1FFE 0x1FFF
0x28000x2801
0x8000
可以被映射到
程序存储器
(也可以不映射)
0xFFFF
X 数据
未用(X
0xFFFE
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第33
dsPIC30F6011A/6012A/6013A/6014A

3-9:用MCU 和 DSP (MAC 类)指令的数据空间示例

SFR 空间
未用
Y 空间)
X 空间
MAC 类操作(读) MAC 类操作(读)
来自任何 W 寄存器的间接 EA 来自 W10 W11 的间接 EA 来自 W8 W9 的间接 EA
Y 空间
未用
SFR 空间
未用
X 空间
X 空间

3-2: 无效存储器访问的结果

试图进行的操作 返回数据
EA = 未实现的地址 0x0000*MAC 指令中,使用 W8 W9
访问 Y 数据空间 在 MAC 指令中,使用 W10 W11
来访问 X 数据空间
* 在访问未实现的存储器地址时,将产生地址错误
陷阱。
所有有效地址都是 16 位宽的,且指向数据空间内的字 节。所以,数据空间地址范围是 64K 字节或 32K 字。
0x0000
0x0000
3.2.3 数据空间宽度
内核数据宽度为 16 位。所有内部寄存器都按照 16 位宽 的字来组织。数据存储空间以字节可寻址的、 16 位宽 的块来组织。
3.2.4 数据对齐
为了维持与 PICmicro 存储空间的使用效率,dsPIC30F指令集既支持字操作, 也支持字节操作。在数据存储器和寄存器中,数据按照 字来对齐,但是,所有数据空间有效地址都将解析为字 节。数据字节读取将读取包含字节的整个字,使用有效 地址的 LSb 确定要选取的字节。 选取的字节将存放到 X 数据路径的 LSB 中 (不可能出现来自 Y 数据路径的字 节访问,因为 MAC 类指令只能取整字)。这就是说,数 据存储器和寄存器组织为两个并行的字节宽的实体,它 们共享 (字)地址译码,但写入线独立。数据字节写, 将只写阵列或寄存器中与字节地址匹配的那一侧。
这种字节可访问能力的结果是,所有的有效地址计算
(包括那些由 DSP 操作产生的有效地址,它们只能是字
长度的数据)在内部进行换算,以适应字对齐的存储空 间。例如,内核将识别执行后修改寄存器间接寻址模式 [Ws++] 的结果,对于字节操作产生的值是 Ws+1,而 对 于字操作产生的值是 Ws+2
®
器件的向后兼容性,并提高数据
DS70143B_CN34 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A
所有的字访问必须按照偶数地址对齐。不支持没有对齐 的字数据取,所以在混和字节和字操作时,或者从 8 MCU 代码进行转换时,必须要小心。如果试图进行未对 齐的读或写,将产生地址错误陷阱。如果在读操作时产 生错误,正在执行的指令将完成,而如果在写操作时产 生错误,指令仍将执行,但不会进行写入。无论是哪种 情况,都将产生陷阱,从而系统和 / 或用户能够检查地 址错误发生之前的机器状态。

3-10:数

15 8 7 0
0001
0003
0005
字节 1 字节 0
字节 3 字节 2
字节 5 字节 4
所有载入 W 寄存器的字节都将载入 W 寄存器的 LSBW 寄存器的 MSB 不变。
提供了一条符号扩展 (SE)指令,允许用户把 8 位的 有符号数据转换为 16 位有符号值。或者,对于 16 位无 符号数据,用户可以清零任何 W 寄存器的 MSB,方法 是在相应的地址处执行一条零扩展 (ZE)指令。
尽管大多数指令能够对字或字节大小的数据进行操作, 但应该注意的是,一些指令,包括 DSP 指令,只对字 大小的数据进行操作。
LSBMSB
0000
0002
0004
3.2.5 NEAR 数据空间
X 地址存储空间中,在 0x0000 和 0x1FFF 之间保留了一
8K 字节的 near 数据空间;在所有的存储器直接寻址 指令中,可以通过一个 13 位的绝对地址来直接访问这 个数据空间。其余的 X 地址空间和全部的 Y 地址空间都 是间接可寻址的。此外,使用 MOV 指令可以寻址整个 X 数据空间,这支持通过 16 位地址字段进行存储器直接 寻址。
3.2.6 软件堆栈
dsPIC DSC 器件具备一个软件堆栈。 W15 用作堆栈指
针。
堆栈指针总是指向堆栈顶部第一个可供使用的字,从低 地址到高地址方向增长。堆栈指针在弹出堆栈之前递 减,而在压入堆栈后递增,如图 3-11 所示。注意,对于 任何 CALL 指令时的 PC 压栈,在压入堆栈之前, PCMSB要进行零扩展,从而确保了MSB始终是清零的。
注: 在异常处理期间,在 PC 压入堆栈之前,
先将PC MSBSRL寄存器组合在一起。
堆栈指针限制寄存器 (SPLIM)与堆栈指针相关联。复 位时 SPLIM 未被初始化。与堆栈指针的情况一样, SPLIM<0> 强制为 0,因为所有的堆栈操作必须是字对 齐的。每当使用 W15 作为源指针或目的指针产生有效 地址时,将与 SPLIM 中的值进行比较。如果堆栈指针
W15)与 SPLIM 寄存器的内容相等,则执行压入操
作,不产生堆栈错误陷阱。但在随后的压栈操作时将会 产生堆栈错误陷阱。这样的话,当堆栈增长超过 RAM 中地址 0x2000 时,如果要想产生堆栈错误陷阱,用值 0x1FFE 来初始化 SPLIM 即可。
类似地,当堆栈指针地址小于 0x0800 时,就会产生堆 栈指针下溢 (堆栈错误)陷阱,这避免了堆栈进入、干 预特殊功能寄存器 (SFR)空间。
在对 SPLIM 寄存器进行写操作之后,不应紧跟着使用 W15 进行间接读操作的指令。

3-11: CALL 堆栈帧

0x0000
堆栈向高地址
000000000
方向增长
PC<15:0>
PC<22:16>
< 空字 >
015
W15 CALL 前)
W15 CALL 后)
POP : [--W15] PUSH : [W15++]
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第35
DS70143B_CN36 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

3-3 内核寄存器映射

SFR 名称 地址 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 复位状态
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 符号扩展 (ACCA<39> ACCAU 0000 0000 0000 0000
ACCBL 0028 ACCBL 0000 0000 0000 0000
ACCBH 002A ACCBH 0000 0000 0000 0000
ACCBU 002C 符号扩展 (ACCB<39> ACCBU 0000 0000 0000 0000
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 0 uuuu uuuu uuuu uuu0
DOSTARTH 003C
DOENDL 003E DOENDL
DOENDH 0040
图注: u = 未初始化位
—PCH0000 0000 0000 0000
—TBLPAG0000 0000 0000 0000
PSVPAG 0000 0000 0000 0000
—DOSTARTH0000 0000 0uuu uuuu
uuuu uuuu uuuu uuu0
0
DOENDH 0000 0000 0uuu uuuu
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第 37
3-3 内核寄存器映射 (续)
SFR 名称 地址 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 复位状态
SR 0042 OA OB SA SB OAB SAB DA DC IPL2 IPL1 IPL0 RA N OV Z C 0000 0000 0000 0000
CORCON 0044
MODCON 0046 XMODEN YMODEN
XMODSRT 0048 XS<15:1> 0 uuuu uuuu uuuu uuu0
XMODEND 004A XE<15:1> 1 uuuu uuuu uuuu uuu1
YMODSRT 004C YS<15:1> 0 uuuu uuuu uuuu uuu0
YMODEND 004E YE<15:1> 1 uuuu uuuu uuuu uuu1
XBREV 0050 BREN XB<14:0> uuuu uuuu uuuu uuuu
DISICNT 0052
图注: u = 未初始化位
US EDT DL2 DL1 DL0 SATA SATB SATDW ACCSAT IPL3 PSV RND IF 0000 0000 0010 0000
BWM<3:0> YWM<3:0> XWM<3:0> 0000 0000 0000 0000
dsPIC30F6011A/6012A/6013A/6014A
DISICNT<13:0> 0000 0000 0000 0000
注: 寄存器中各位的说明,请参阅《dsPIC30F
系列参考手册》
DS70046D_CN)。
dsPIC30F6011A/6012A/6013A/6014A
注:
DS70143B_CN38 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

4.0 地址发生器单元

注: 本数据手册总结了 dsPIC30F 系列器件的功能,
dsPIC DSC 内核包含两个独立的地址发生器单元:X AGU Y AGU。Y AGU 仅支持 DSP MAC 类指令的字数 据读取。 dsPIC30F AGU 支持:
线性寻址
模 (循环)寻址
位反转寻址
线性和模数据寻址模式可应用于数据空间或程序空间。 位反转寻址只能用于数据空间地址。

4.1 指令址模式

寻址模式经过优化可以支持各指令的具体功能,基本的 寻址模式在表 4-1 中给出。MAC 类指令中提供的寻址模 式,与其他指令类型中的寻址模式略有不同。
但是不应把本手册当作无所不包的参考手册来 使用。有关 CPU、外设、寄存器说明和一般器 件功能的更多信息,请参阅
考手册》
和编程的更多信息,请参阅 《dsPIC30F/33F
序员参考手册》
DS70046D_CN) 。有关器件指令集
DS70157B_CN)。
dsPIC30F
系列参
4.1.1 文件寄存器指令
大多数文件寄存器指令使用一个 13 位地址字段 (f)来 直接寻址数据存储器中的前 8192 字节 (Near 数据空 间)。大多数文件寄存器指令使用工作寄存器 W0W0 在这些指令中表示为 WREG。目的寄存器通常是同一个 文件寄存器或者 WREGMUL 指令除外),把结果写入 寄存器或寄存器对。使用 MOV 指令能够获得更大的灵活 性,可以访问整个数据空间。
4.1.2 MCU 指令
三操作数 MCU 指令的形式是:
操作数 3 = 操作数 1 < 功能 > 操作数 2
其中,操作数 1 始终是工作寄存器(即,寻址模式只能 是寄存器直接寻址),称为 Wb。操作数 2 可以是一个 W 寄存器,取自数据存储器或一个 5 位立即数。 结果位 置(操作数 3)可以是 W 寄存器或数据存储单元。MCU 指令支持下列寻址模式:
寄存器直接寻址
寄存器间接寻址
执行后修改的寄存器间接寻址
执行前修改的寄存器间接寻址
•5位或 10 位立即数寻址
注: 并非所有的指令都支持上面给出的全部寻
址模式。各条指令可能支持这些寻址模式 的某些模式,指令不同支持的寻址模式可 能不同。

4-1 支持的基本寻址模式

寻址模式 说明
文件寄存器直接寻址 寄存器直接寻址 直接访问寄存器的内容。 寄存器间接寻址 Wn 的内容形成 EA。 执行后修改的寄存器间接寻址 Wn 的内容形成 EA。然后用一个常量值来修改 Wn (递增或递减)。 执行前修改的寄存器间接寻址 先用一个有符号常量值修改 Wn (递增或递减), Wn 的内容形成 EA
寄存器偏移量的寄存器间接寻址 立即数偏移量的寄存器间接寻址
显式地指定文件寄存器的地址。
Wn Wb 的和形成 EA Wn 和立即数的和形成 EA
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第39
dsPIC30F6011A/6012A/6013A/6014A
4.1.3 传送指令和累加器指令
与其他指令相比,传送和 DSP 累加器类指令提供了更 为零活的寻址模式。除了大多数 MCU 指令支持的寻址 模式以外,传送和累加器指令还支持寄存器偏移量的寄 存器间接寻址模式,这也叫做寄存器变址寻址模式。
注: 对于 MOV 指令,指令中指定的寻址模式对
于源寄存器和目的寄存器有效地址,可以 是不同的。然而, 4 Wb (寄存器偏移 量)字段为源寄存器和目寄存器所共用
(但通常只由源寄存器或目的寄存器之一
使用)。
概括地说,传送指令和累加器指令支持下列寻址模式:
寄存器直接寻址
寄存器间接寻址
执行后修改的寄存器间接寻址
执行前修改的寄存器间接寻址
寄存器偏移量的寄存器间接寻址 (变址寻址)
立即数偏移量的寄存器间接寻址
•8位立即数寻址
•16位立即数寻址
注: 并非所有的指令都支持上面给出的全部寻
址模式。各条指令可能支持这些寻址模式 的某些模式,指令不同支持的寻址模式可 能不同。
4.1.4 MAC 指令
双源操作数 DSP 指令(CLREDEDAC、MAC、MPY、 MPY.NMOVSAC 和 MSC),也叫做 MAC 指令,它们使用 一组简化的寻址模式,允许用户通过寄存器间接寻址表 高效地对数据指针进行操作。
双源操作数预取寄存器必须是集合 {W8, W9, W10,
W11} 的成员。对于数据读取,W8 和 W9 总是分配给 X RAGU,而 W10 和 W11则始终用于 Y AGU。从而,产生
的有效地址 (无论是在修改之前还是之后),对于 W8W9 必须是 X 数据空间中的有效地址,对于 W10 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 的幂的缓冲区。这 些缓冲区满足起始和结束地址判据,它们可以双向工作
(即,在低地址边界和高地址边界上都将进行地址边界
检查)。
注: 带寄存器偏移量的寄存器间接寻址,仅可
DS70143B_CN40 初稿 2006 Microchip Technology Inc.
用于 W9 (在 X 空间中)和 W11(在 Y 空 间中)。
dsPIC30F6011A/6012A/6013A/6014A
4.2.1 起始地址和结束地址
模寻址机制要求指定起始和结束地址,并把它们载入 16 位模缓冲区地址寄存器 (XMODSRTXMODENDYMODSRT YMODEND,见表 3-3)中。
注: Y 空间模寻址的 EA 计算使用字长度的数据
(每个 EA LSb 始终清零)。
循环缓冲区的长度没有直接指定,相应的起始地址、结 束地址之差可以确定长度。循环缓冲区最大长度为 32K 字(64K 字节)。

4-1 模寻址操作示例

字节 地址
0x1100
MOV #0x1100,W0 MOV W0,XMODSRT ;set modulo start address MOV #0x1163,W0 MOV W0,XMODEND ;set modulo end address MOV #0x8001,W0 MOV W0,MODCON ;enable W1, X AGU for modulo
MOV #0x0000,W0 ;W0 holds buffer fill value
4.2.2 W 地址寄存器选择
模寻址和位反转寻址控制寄存器 MODCON<15:0> 中包 含使能标志以及指定 W 地址寄存器的 W 寄存器字段。
XWMYWM字段选择对哪些寄存器进行模寻址。如果 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
起始地址 = 0x1100 结束地址 = 0x1163 长度 = 0x0032
MOV #0x1110,W1 ;point W1 to buffer
DO AGAIN,#0x31 ;fill the 50 buffer locations MOV W0,[W1++] ;fill the next location
2006 Microchip Technology Inc. 初稿 DS70143B_CN41
dsPIC30F6011A/6012A/6013A/6014A
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. 使用的寻址模式是预递增或后递增的寄存器间接
寻址模式。
如果位反转缓冲区的长度是 M = 2 区起始地址的最后 N 位必须为零。
XB<14:0> 是位反转地址修改量或 “中心点”(pivot point),通常是一个常数。对于 FFT 计算,其值等于 FFT 数据缓冲区长度的一半。
注: 所有位反转 EA 的计算都使用字数据 (每
EA LSb 始终清零)。为了产生兼容地 址 (字节),要相应地调整 XB 的值。
使能位反转寻址时,仅对预递增或后递增的寄存器间接 寻址、且仅对字数据写入,才会进行位反转寻址。对于 任何其他寻址模式或对于字节数据,不会进行位反转寻 址,而是生成正常的地址。在进行位反转寻址时,W 地 址指针的增量将始终加上地址修改量(XB),与寄存器 间接寻址模式相关的偏移量将被忽略。此外,由于要求 是字数据, EA LSb 被忽略 (且始终被清零)。
注: 不应同时使能模寻址和位反转寻址。如果
用户试图这么做的话,对于 X WAGU,位 反转寻址将优先, X WAGU 模寻址将被禁 止。然而,在 X RAGU 中,模寻址继续起 作用。
如果通过将 BREN 位(XBREV<15>)置 1 使能了位反 转寻址,那么,在写 XBREV 寄存器之后,不应马上进 行要使用被指定为位反转指针的 W 寄存器的间接读操 作。
N
字节,则数据缓冲
DS70143B_CN42 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

4-2 位反转地址示例

b15 b14 b13 b12
b11 b10 b9 b8
b7 b6 b5 b4
正常顺序的地址
b3 b2 b1 0
围绕二进制值的中心 左右交换位位置
b15 b14 b13 b12
b11 b10 b9 b8
b7 b6 b5 b1
b2 b3 b4 0
位反转地址
中心点(Pivot Point
XB = 0x0008,对 于 16 字位反转缓冲区

4-2 位反转地址序列 (16 项)

正常地址 位反转地址
A3 A2 A1 A0 十进制 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

4-3 XBREV 寄存器的位反转地址修改量

缓冲区大小 (字) XB<14:0> 位反转地址修改量
4096 0x0800
2048 0x0400
1024 0x0200
512 0x0100
256 0x0080
128 0x0040
64 0x0020
32 0x0010
16 0x0008
8 0x0004
4 0x0002
2 0x0001
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第43
dsPIC30F6011A/6012A/6013A/6014A
注:
DS70143B_CN44 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

5.0 中断

注: 本数据手册总结了 dsPIC30F 系列器件的功能,
dsPIC30F 传感器与通用系列有多达 41 个中断源和 4 个
处理器异常 (陷阱),它们必须按照优先级机制来进行 仲裁。
CPU 负责读取中断向量表 (IVT),并把中断向量中的 地址传送给程序计数器。中断向量从程序数据总线向程 序计数器的传送,是经由程序计数器输入侧 24 位宽的 多路开关来进行的。
中断向量表 (IVT)和备用中断向量表(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>... IPC10<10:0>
41 个中断中的每一个中断有关的用户可分配中 断优先级集中存放在这 11 个寄存器中。
• IPL<3:0>
当前 CPU 优先级显式地存放在 IPL 位中。 IPL<3>CORCON 寄存器中,而IPL<2:0> 则在处
理器内核的状态寄存器 (SR)中。
但是不应把本手册当作无所不包的参考手册来 使用。有关 CPU、外设、寄存器说明和一般器 件功能的更多信息,请参阅
考手册》
和编程的更多信息,请参阅 《dsPIC30F/33F
序员参考手册》
DS70046D_CN) 。有关器件指令集
DS70157B_CN)。
dsPIC30F
系列参
• INTCON1<15:0> INTCON2<15:0> 全局中断控制功能由这两个寄存器提供。
INTCON1 包含处理器异常的控制和状态标志。 INTCON2 寄存器控制外部中断请求信号的操作以
及备用中断向量表的使用。
注: 一旦产生中断条件,就将中断标志位置 1
无论其对应的中断允许位状态为何。在允 许一个中断之前,用户软件应确保相应的 中断标志位被清零。
用户可以通过 IPCx 寄存器,为所有中断源分配 7 个优 先级中的一个,优先级从 1 7 每个中断源都与一个 中断向量关联,如表 5-1 所示。优先级 7 1 分别代表 最高和最低的可屏蔽优先级。
注: 中断源优先级指定为 0,等同于禁止该中
断。
如果 NSTDIS 位(INTCON1<15>)置 1,则禁止中断 嵌套。因此,正在处理一个中断时,禁止处理新的中断, 即使新中断的优先级比当前正在处理的中断优先级高。
注: 一旦 NSTDIS 位置为 1IPL 就变为只读。
某些中断具有专门的控制位,用于控制诸如边沿或电平 触发中断、电平变化中断这样的功能。这些功能的控制 仍然由产生中断的外设模块负责。
对于某些指令,在其执行期间如果 DISI
INTCON2<14>)保持置 1 的话,那么可以用 DISI
令来禁止优先级为 6 或更低的中断的处理。
当中断得到服务时, PC 中装入存放在程序存储器中相 应中断向量存储单元中的地址。 IVT 中有 63 个不同的 向量 (见表 5-1) 。这些向量存放在程序存储器从 0x0000040x0000FE的存储单元中(见表 5-1)。这些 存储单元中存有 24 位地址;为了保持鲁棒性,如果在 正常执行期间, PC 试图取任何这些字的话,就会产生 地址错误陷阱。这避免了执行随机数据; PC 递减时意 外进入向量空间,意外地把数据空间地址映射到了向量 空间,或者 PC 到达可用程序空间的末尾继而返回到 0x000000,都将执行随机数据。执行 GOTO 指令跳转到 向量空间,也将产生地址错误陷阱。
2006 Microchip Technology Inc. 初稿 DS70143B_CN45
dsPIC30F6011A/6012A/6013A/6014A

5.1 中断优先级

对于每个中断源,用户可分配的中断优先级位
IP<2:0>),位于 IPCx 寄存器中每个半字节的最低 3
位中。每个半字节的 bit 3 未使用,读为 0。这些位定义 了用户分配给特定中断的优先级。
注: 用户可选择的优先级为从 0 70 是最低
优先级, 7 是最高优先级。
自然顺序优先级由中断在向量表中的位置决定;只是在 同时有多个中断——它们都具有相同的用户分配优先级 ——等待处理时,自然顺序优先级才会影响到中断操 作。
5-1列出了dsPIC DSC器件的中断编号和中断源,以 及关联的向量编号。
1: 自然顺序优先级机制以 0 为最高优先级,
53 为最低优先级。
2: 自然顺序优先级编号与 INT 编号相同。
用户能够为每个中断分配七个优先级之一,这就意味 着,对于一个具有低自然顺序优先级的中断,用户能够 分配一个非常高的总优先级。例如,可以将 PLVD (低 压检测)的优先级分配为 7INT0 (外部中断 0)可以 分配为优先级 1,这样,它的有效优先级将非常低。

5-1 中断向量表

中断 编号
最高自然顺序优先级
08INT0 外部中断 0 1 9 IC1 – 输入捕捉 1 210OC1 输出比较 1 3 11 T1 – 定时器 1 412IC2 捕捉 2 513OC2 输出比较 2 6 14 T2 – 定时器 2 7 15 T3 – 定时器 3
816SPI1
917U1RX UART1接收器 10 18 U1TX – UART1 发送器 11 19 ADC – ADC 转换完成 12 20 NVM – NVM 写入完成
13 21 SI2C – I
14 22 MI2C – I 15 23 输入电平变化中断 16 24 INT1 – 外部中断 1 17 25 IC7 – 捕捉 7 18 26 IC8 – 捕捉 8 19 27 OC3 – 输出比较 3 20 28 OC4 – 输出比较 4 21 29 T4 – 定时器 4 22 30 T5 – 定时器 5 23 31 INT2 – 外部中断 2 24 32 U2RX – UART2 接收器 25 33 U2TX – UART2 发送器
26 34 SPI2 27 35 C1 – CAN1 的组合 IRQ 28 36 IC3 – 捕捉 3 29 37 IC4 – 捕捉 4 30 38 IC5 – 捕捉 5 31 39 IC6 – 捕捉 6 32 40 OC5 – 输出比较 5 33 41 OC6 – 输出比较 6 34 42 OC7 – 输出比较 7 35 43 OC8 – 输出比较 8 36 44 INT3 – 外部中断 3 37 45 INT4 – 外部中断 4 38 46 C2 – CAN2 的组合 IRQ
39-40 47-48 保留
41 49 DCI – 编码解码器传输完成 * 42 50 LVD – 低压检测
43-53 51-61 保留
最低自然顺序优先级
向量 编号
中断源
2
C™ 从中断
2
C 主中断
* dsPIC30F6011AdsPIC30F6013A中为
保留的中断向量,因为这两种器件上没有 可用的 DCI 模块。
DS70143B_CN46 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

5.2 复位过程

复位不是真正的异常,因为复位过程中并不涉及中断控 制器。在响应强制清零 PC 的复位时,器件初始化其寄 存器。然后,处理器开始在 0x000000 地址处执行程序。 一条 GOTO 指令存放在第一个程序存储单元中,紧跟着 的是 GOTO 指令的地址目标。处理器执行 GOTO,跳转 到指定地址,然后开始指定目标(起始)地址处的操作。
5.2.1 复位的来
除了外部复位和上电复位(POR)之外,还有 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. 如果在移位指令中,指定的移位位数大于允许的 最大移位位数,将产生陷阱。
地址错误陷阱:
当发生任何下列情形时,将产生陷阱:
1. 试图访问不对齐的数据字。
2. 试图从未实现的数据存储单元取数据。
3. 试图从未实现的程序存储单元取数据。
4. 试图从向量空间取指令。
注: MAC 类指令中,数据空间被分成 X 数据
空间 和 Y 数据 空间,未实现的 X 空间包括 所有 Y 空间,而未实现的 Y 空间包括所有 X 空间。
2006 Microchip Technology Inc. 初稿 DS70143B_CN47
dsPIC30F6011A/6012A/6013A/6014A
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
递减
优先级
AIVT
保留向量 保留向量
保留向量 中断 0 向量 中断 1 向量
~ ~ ~
中断 52 向量 中断53向量
保留 保留 保留
振荡器故障陷阱向量
地址错误陷阱向量 堆栈错误陷阱向量 数学错误陷阱向量
保留向量
保留向量
保留向量 中断 0 向量 中断 1 向量
~ ~ ~
中断 52 向量 中断 53 向量
0x000000 0x000002
0x000004
0x000014
0x00007E 0x000080 0x000082
0x000084
0x000094
0x0000FE

5.4 中断过程

在每个指令周期的开始, IFSx 寄存器都会采样全部的 中断事件标志。IFSx 寄存器中标志位等于 1,表明有等 待处理的中断请求 (IRQ)。如果中断允许 (IECx)寄 存器中相应的位置 1IRQ 将会导致中断产生。 在 IRQ 采样后余下的指令周期中,将评估所有待处理中断请求 的优先级。
如果有待处理的 IRQ,它的优先级比 IPL 位中当前处理 器优先级高,则处理器将被中断。
随即,处理器将把当前程序计数器和处理器状态寄存器
SRL)的低字节压入堆栈,如图 5-2 所示。状态寄存
器低字节包含中断周期开始之前的处理器优先级。然 后,处理器把中断的优先级装入状态寄存器。这将禁止 所有低优先级的中断,直到中断服务程序完成为止。
DS70143B_CN48 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

5-2 中断堆栈

0x0000
PC<15:0> SRL IPL3 PC<22:16>
< 空字 >
方向增长
堆栈向高地址
1: 通过把一个新值写入 SR,用户始终能降
低优先级。在降低处理器中断优先级之 前,为了避免递归中断,中断服务程序必 须把 IFSx 寄存器中的中断标志位清零。
2: 在处理中断时,IPL3 位(CORCON<3>
始终被清零。它仅在陷阱执行期间置 1
RETFIE (从中断返回)指令将把程序计数器和状态寄 存器弹出堆栈,使处理器返回到中断处理之前的状态。
015
W15CALL 之前)
W15 CALL 之后)
POP : [--W15]
PUSH: [W15++]

5.5 备用向量表

在程序存储器中,中断向量表 (IVT)之后是备用中断 向量表 (AIVT),如 表 5-1 所示。 INTCON2 寄存器中 的 ALTIVT 位控制对 AIVT 的访问。如果 ALTIVT 位置 1,所有的中断和异常处理都将使用备用向量,而不是 缺省向量。备用向量与缺省向量的组织方式是相同的。 AIVT提供了一种在应用和支持环境之间切换的方法,从 而支持仿真和调试功能,而不需要对中断向量进行再编 程。这个特性也支持运行时在不同应用之间切换,以便 评估各种软件算法。
如果不需要 AIVT,分配给 AIVT 的程序存储空间可以作 其他用途。 AIVT 不是受保护的区域,用户可以对其自 由编程。

5.6 快速现场保护

可以使用影子寄存器来保存现场。为 SR 中的 DCNOVZ 和 C 位,以及寄存器 W0 W3 提供了影子寄存 器。 影子寄存器深度仅为一级。只能使用 PUSH.S POP.S 指令来访问影子寄存器。
当处理器转移到中断向量开始处理中断时,可以使用 PUSH.S 指令,把上述寄存器的当前值保存到它们对应 的影子寄存器中去。
如果某个优先级的 ISR 使用 PUSH.S POP.S 指令来 快速保存现场,那么优先级更高的 ISR 就不应再使用这 两条指令。如果优先级较高的 ISR 使用了快速现场保 护,那么在优先级较低的中断处理期间,用户必须保存 关键寄存器。

5.7 外部中断请求

中断控制器支持多达五个外部中断请求信号, INT0- INT4。这些输入是边沿敏感的;它们需要从低至高或从 高至低的跳变来产生中断请求。 INTCON2 寄存器的五 个位, INT0EP-INT4EP,用来选择边沿检测电路的极 性。

5.8 从休眠和空闲中唤醒

如果产生中断时器件处于休眠或空闲模式,中断控制器 可以用来把处理器从休眠或空闲模式中唤醒。
如果中断控制器收到已允许的中断请求,且中断请求优 先级足够高的话,则标准中断请求将提交给处理器。同 时,处理器将从休眠或空闲中唤醒,开始执行处理中断 请求所需的中断服务程序 (ISR)。
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第49
DS70143B_CN50 初稿 2006 Microchip Technology Inc.

5-2 中断控制器寄存器映射

SFR
地址 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 复位状态
1
名称
INTCON1 0080 NSTDIS
INTCON2 0082 ALTIVT
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
OVATE OVBTE COVTE MATHERR ADDRERR STKERR OSCFAIL
INT4EP INT3EP INT2EP INT1EP INT0EP
—LVDIF
—LVDIE
T1IP<2:0> —OC1IP<2:0>— IC1IP<2:0> INT0IP<2:0>
T31P<2:0> T2IP<2:0> OC2IP<2:0> IC2IP<2:0>
—ADIP<2:0>— U1TXIP<2:0> U1RXIP<2:0> SPI1IP<2:0>
CNIP<2:0> —MI2CIP<2:0>— SI2CIP<2:0> NVMIP<2:0>
—OC3IP<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>
IC6IP<2:0> —IC5IP<2:0>— IC4IP<2:0> IC3IP<2:0>
—OC8IP<2:0>—OC7IP<2:0>— OC6IP<2:0> OC5IP<2:0>
C2IP<2:0> INT41IP<2:0> INT3IP<2:0>
LVDIP<2:0>
DCIIF
DCIIE
2
C2IF INT4IF INT3IF OC8IF OC7IF OC6IF OC5IF
2
C2IE INT4IE INT3IE OC8IE OC7IE OC6IE OC5IE
DCIIP<2:0>
2
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
0000 0100 0100 0100
0000 0100 0100 0000
dsPIC30F6011A/6012A/6013A/6014A
1: 寄存器中各位的说明,请参阅《dsPIC30F
系列参考手册》
DS70046D_CN)。
2: 在 dsPIC30F6011A dsPIC30F6013A 上这些位不可用,因为在这些器件上没有 DCI 模块。
dsPIC30F6011A/6012A/6013A/6014A

6.0 闪存程序存储器

注:本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F
指令集和编程的更多信息,请参阅 《dsPIC30F/33F
参考手册》
dsPIC30F 系列器件包含用于执行用户代码的闪存程序 存储器。用户可以使用以下两种方法对闪存程序存储器 编程:
1. 运行时自编程 (RTSP
2. 在线串行编程 (ICSP™

6.1 在线串行编程 (ICSP

可以在最终应用电路中对 dsPIC30F 器件进行串行编 程。实现很简单,仅需一根编程时钟线 (称为 PGC)、 一根编程数据线 (称为 PGD),以及电源线 (VDD)、 接地线 (V 以使用未编程的器件来生产电路板,在产品发货前才对 单片机进行编程。这样做还可将最新固件或用户定制的 固件编程到器件中。

6-1:表NVM 寄存器的寻址

系列参考手册》
DS70157B_CN)。
SS)和主复位线 (MCLR)。这使得用户可
DS70046D_CN)。有关器件
程序员

6.2 运行时自编程 (RTSP

使用 TBLRD (表 读)和 TBLWT (表 写)指 令来实现 RTSP
使用 RTSP,用户可以一次擦除 32 个指令字(96 字节) 的程序存储单元,一次可写入 32 个指令字 (96 字节) 的程序存储数据。

6.3 表指令操作概要

TBLRDL TBLWTL 指令用来读或写程序存储器的 bit <15:0>TBLRDL TBLWTL 可以以字或字节模式访问
程序存储器。
TBLRDH TBLWTH 指令用来读或写程序存储器的 bit <23:16>TBLRDH TBLWTH 可以以字或字节模式访问
程序存储器。
使用 TBLPAG 寄存器的 bit <7:0> 和来自表指令中指定 的 W 寄存器的有效地址(EA),形成 24 位的程序存储 器地址,如图 6-1 所示。
用户 / 配置 空间选择
使用 程序 计数器
使用
NVMADR
寻址
使用
表指令
0
1/0
NVMADRU 寄存器
8 16
1/0
TBLPAG 寄存器
8
24
程序计数器
NVMADR 寄存器 EA
工作寄存器 EA
24 EA
0
16
字节 选择
2006 Microchip Technology Inc. 初稿 DS70143B_CN51
dsPIC30F6011A/6012A/6013A/6014A

6.4 RTSP 操作

dsPIC30F 闪存程序存储器组织成行和板 (panel)。每 行由 32 个指令字(96 字节)组成。每个板由 128 行组 成(4K × 24 个指令字)。 RTSP 允许用户每次擦除一 行(32 个指令字)、每次编程四条指令。 RTSP 可以 用来对多个程序存储器板进行编程,但在每个板的边界 处必须更改表指针。
程序存储器的每个板都包含写锁存器,它能够保存 32 个指令字的编程数据。在实际编程操作前,等待写入的 数据必须先装入板的写锁存器。要写入板的数据按顺序 装载到写锁存器中:指令 0,指令 1,依此类推。装载 的指令字必须始终来自一组 32 边界。
RTSP 编程的基本步骤是先建立一个表指针,然后执行 一系列 TBLWT 指令,装载写锁存器。通过把 NVMCON 寄存器中的特殊位置 1,进行编程。装载四条指令需要 四条 TBLWTL 和四条 TBLWTH 指令。如果需要对多个板 进行编程,应该为下一组要写入的多个写锁存器修改表 指针。
全部表写操作都是单字写入 (2 个指令周期),因为只 需要写表锁存器。编程每一行需要一个编程周期。
在整个 V 可读、可写且可擦除的。
DD 范围内,正常操作期间,闪存程序存储器是

6.5 控制寄存器

四个特殊功能寄存器用来读、写闪存程序存储器,它们 是:
•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
寄存器,指定擦除或编程的程序存储器地 址。
DS70143B_CN52 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

6.6 编程操作

RTSP 模式中,对内部闪存进行编程或擦除需要完整 的编程过程。编程操作持续时间的标称值为 2 ms,编 程 操作结束之前,处理器将停顿 (等待) 。把 WR
NVMCON<15>)置 1 开始编程操作,操作结束后将
自动清零 WR 位。
6.6.1 闪存程序存储器的编程算法
用户一次可以擦除、编程闪存程序存储器的一行。一般 过程如下:
1. 读一行闪存程序存储器(32 个指令字),把读出 的数据作为数据 “镜像”保存到数据 RAM
2. 用期望的新数据更新数据镜像。
3. 擦除闪存程序存储器行。 a) 设置 NVMCON 寄存器以允许对闪存程序存
储器多字擦除,并将 WREN 位置 1
b) 把要擦除的行地址写入寄存器 NVMADRU/
NVMADR c) 把“55”写入 NVMKEY d) 把“AA”写入 NVMKEY e) WR 位置 1。这将开始擦除周期。 f) 在擦除周期中 CPU 将停顿。 g) 当擦除周期结束时 WR 位会被清零。
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 ; Initialize NVMADR SFR DISI #5 ; Block all interrupts with priority <7 for
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
,
; next 5 instructions
NVMKEY ; Write the 0x55 key
,
NVMKEY ; Write the 0xAA key
,
2006 Microchip Technology Inc. 初稿 DS70143B_CN53
dsPIC30F6011A/6012A/6013A/6014A
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 for
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
,
; next 5 instructions
DS70143B_CN54 初稿 2006 Microchip Technology Inc.
2006 Microchip Technology Inc. 初稿 DS70143B_CN55

6-1 NVM 寄存器映射

寄存器名称 地址 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 所有复位时的状态
NVMCON 0760 WR WREN WRERR
NVMADR 0762 NVMADR<15:0> uuuu uuuu uuuu uuuu
NVMADRU 0764
NVMKEY 0766
NVMADR<23:16> 0000 0000 uuuu uuuu
KEY<7:0> 0000 0000 0000 0000
图注: u = 未初始化位
—TWRI — PROGOP<6:0> 0000 0000 0000 0000
dsPIC30F6011A/6012A/6013A/6014A
注: 寄存器中各位的说明,请参阅《dsPIC30F
系列参考手册》
DS70046D_CN)。
dsPIC30F6011A/6012A/6013A/6014A
注:
DS70143B_CN56 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

7.0 数据 EEPROM 存储器

注:本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F 系列参考手册》(DS70046_CN)。有关器件指
令集和编程的更多信息,请参阅 《dsPIC30F/33F 程序员参 考手册》(DS70157B_CN)。
在整个 VDD 范围内的正常操作期间,数据 EEPROM 存 储器是可读且可写的。数据 EEPROM 存储器直接映射 到程序存储器地址空间。
用来读写闪存程序存储器的四个特殊功能寄存器,也用 来访问数据 EEPROM 存储器。如在第 6.5 节 “控制寄 存器”中所述,这些寄存器是:
•NVMCON
• NVMADR
• NVMADRU
• NVMKEY
EEPROM 数据存储器允许读写单字和 16 字长的块。针
对数据存储器时, NVMADR NVMADRU 寄存器配 合使用,用来寻址要访问的 EEPROM 地址单元。
TBLRDL TBLWTL 指令用来读写数据 EEPROM dsPIC30F 器件有最多 8K 字节 (4K 字)的 数 据 EEPROM,地址范围从 0x7FF000 0x7FFFFE
字写操作之前,应该先擦除相应的存储单元。写操作完 成通常需要 2 ms,不过它将随电压和温度的变化而变 化。
对数据 EEPROM 进行编程或擦除操作,不会停止指令 流。在启动另一次数据 EEPROM / 擦除操作之前,用 户需要等待一段适当的时间。在编程或擦除操作进行过 程中,尝试读数据 EEPROM 将返回不确定的数据。
控制位 WR 启动写操作,这与 闪存程序存储器写类似。 可通过软件将 WR 位置 1,但不能对其清零。写操作完 成时,硬件将清零 WR 位。 不能用软件清零 WR 位,这 样避免了意外或提早结束写操作。
WREN 位使能时将允许进行写操作。上电时,WREN 位 清零。当写操作被正常工作期间的 MCLR 超时所中断时, WRERR 位置 1。在这样的情形下,复 位后,用户可以检查 WRERR 位,重写存储单元。地址 寄存器 NVMADR 保持不变。
注: 在写操作完成时,IFS0 寄存器中的中断标
志位 NVMIF 将置 1NVMIF 位必须在软件 中清零。
复位或 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
,
2006 Microchip Technology Inc. 初稿 DS70143B_CN57
dsPIC30F6011A/6012A/6013A/6014A

7.2 擦除数据 EEPROM

7.2.1 擦除数据 EEPROM 的一块
为了擦除数据 EEPROM 的一块,首先 NVMADRU
NVMADR 寄存器必须指向要擦除的存储块。将 NVMCON 配置为擦除数据 EEPROM 块,并将 NVMCON 寄存器中的 ERASE 位和 WREN 位置 1。将 WR 位置 1,启动擦除操作,如示例 7-2 所示。

示例 7-2:数EEPROM 块擦除

; Select data EEPROM block, ERASE, WREN bits
MOV #0x4045,W0 MOV W0
; Start erase cycle by setting WR after writing key sequence
DISI #5 ; Block all interrupts with priority <7 for
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
,
; next 5 instructions
NVMKEY ; Write the 0x55 key
,
NVMKEY ; Write the 0xAA key
,
7.2.2 擦除数据 EEPROM 的一个字
TBLPAG NVMADR 寄存器必须指向存储块。在 NVMCON 寄存器中,选择擦除数据 EEPROM 的一个
字,将 ERASE WREN 位置 1。将 WR 位置 1,启动 擦除操作,如示例 7-3 所示。

示例 7-3:数 EEPROM 字擦除

; Select data EEPROM word, ERASE, WREN bits
MOV #0x4044,W0 MOV W0
; Start erase cycle by setting WR after writing key sequence
DISI #5 ; Block all interrupts with priority <7 for
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
,
; next 5 instructions
NVMKEY ; Write the 0x55 key
,
NVMKEY ; Write the 0xAA key
,
DS70143B_CN58 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

7.3 写数据 EEPROM

要写 EEPROM 数据存储单元,必须按照下列顺序进行:
1. 擦除数据 EEPROM 的字。 a) NVMCON 寄存器中,选择字擦除数据
EEPROM,并将 WREN 位置 1。 b) 把要擦除的字的地址写入 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,并将 WREN 位置 1。 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 for
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
,
; next 5 instructions
NVMKEY ; Write the 0x55 key
,
NVMKEY ; Write the 0xAA key
,
2006 Microchip Technology Inc. 初稿 DS70143B_CN59
dsPIC30F6011A/6012A/6013A/6014A
7.3.2 写数据 EEPROM 的一个块
要写数据 EEPROM 的一个块,首先要写入全部十六个 锁存器,然后设置 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 for
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
,
; next 5 instructions
NVMKEY ; Write the 0x55 key
,
NVMKEY ; Write the 0xAA key
,
DS70143B_CN60 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

7.4 写校验

根据不同的应用,良好的编程习惯可能要求把已写入存 储器中的值与原始值进行校验。如果在应用中进行了量 非常大的写操作,从而可能接近规格说明中的上限时, 应该进行写校验。

7.5 防止误写入

某些情况下,并不打算写数据 EEPROM 存储器。器件内 置了各种机制来防止误写入 EEPROM。上电时,WREN 位清零;而且,上电延时定时器禁止 EEPROM 写操作。
写启动序列与 WREN 位一起,有助于防止欠压、电源 干扰或软件故障期间的意外写入。
2006 Microchip Technology Inc. 初稿 DS70143B_CN61
dsPIC30F6011A/6012A/6013A/6014A
注:
DS70143B_CN62 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

8.0 I/O 端口

注:本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F
所有的器件引脚(除 VDDVSSMCLR 和 OSC1/CLKI 之外),均为外设与并行 I/O 端口所共用。
全部 I/O 输入端口都是施密特触发器输入,以便增强抗 干扰性。

8.1 并行 I/O PIO)端口

如果外设使能,并且外设正在使用其关联引脚时,引脚 将不再作为通用 I/O 引脚使用。这时,可以读 I/O 引脚, 但是对应并行端口位的输出驱动器将被禁止。如果外设 使能,但外设不在使用某引脚,则该引脚可以被端口驱 动。
所有的端口引脚,都有三个与端口引脚的操作直接相关 的寄存器。数据方向寄存器 (TRISx)决定引脚是输入 还是输出。如果数据方向位是 1,则引脚是输入。复位 后,全部端口引脚均定义为输入。读锁存器 (LATx), 读的是锁存值;写锁存值,写的是锁存器(LATx)。 读 端口 (PORTx),读的是端口引脚值,写端口引脚,写 的是锁存器 (LATx)。
系列参考手册》
DS70046D_CN)。
任何位及其关联的数据和控制寄存器,如果对于特定器 件而言是无效的话,则将被禁止。这意味着,相应的 LATx TRISx 寄存器以及端口引脚,都将读为零。
当端口引脚与另一个外设共用或与只定义为输入的功能 共用时,它将被视为专用端口,因为没有任何其他竞争 的输出资源。 INT4 引脚就是例子。
PORTA 的寄存器的格式,如表 8-1 所示。
TRISA(数据方向控制)寄存器控制 RA<7:0> 引脚的方 向,以及 INTx 引脚和 V
REF 引脚的方向。LATA 寄存器
提供数据到输出,它是可读 / 可写的。读 PORTA 寄存 器得到输入引脚的状态,而写 PORTA 寄存器修改 LATA 寄存器的内容。
与外设共用引脚的并行 I/O PIO)端口一般屈从于外 设。外设的输出缓冲数据和控制信号提供给一对多路开 关。多路开关选择外设还是相关的端口将拥有 I/O 引脚 输出数据和控制信号的所有权。图 8-2 显示了端口是如 何与其他外设共用,以及与外设连接的相关 I/O 引脚单 元。表 8-2 至表 8-9 给出了从 PORTB PORTG 的共 用端口的寄存器的格式。
注:实际使用的位将随器件而变化。

8-1 专用端口结构框图

专用端口模块
TRIS
数据总线
TRIS
写锁存器 + 写端口
读锁存器
读端口
TRIS 锁存器
QD
CK
数据锁存器
QD
CK
I/O 引脚单元
I/O 端子
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第63
dsPIC30F6011A/6012A/6013A/6014A

8.2 配置模拟端口引脚

使用 ADPCFG TRIS 寄存器控制 A/D 端口引脚的操 作。对于要用作模拟输入的端口引脚,必须将其相应的 TRIS 位置 1(输入)。如果 TRIS 位清零(输出), 则将 转换数字输出电平 (V

8-2 共用端口结构框图

OH 或 VOL)。
数据总线
TRIS
外设模块
外设输入数据
外设模块使能
外设输出使能
外设输出数据
PIO 模块
TRIS
QD
CK
TRIS 锁存器
当读取端口寄存器时,所有配置为模拟输入通道的引 脚,都将读为零 (低电平)。
配置为数字输入的引脚,将不会对模拟输入进行转换。 当将模拟电压加在任何定义为数字输入的引脚 (包括 ANx 引脚)上时,可能导致输入缓冲器消耗的电流超出 器件规范中规定的值。
输出多路开关
I/O 引脚单元
1
输出使能
0
1
输出数据
0
I/O 端子
写锁存器 + 写端口
读端口
CK
数据锁存器
读锁存器
QD
输入数据
DS70143B_CN64 初稿 2006 Microchip Technology Inc.
2006 Microchip Technology Inc. 初稿 DS70143B_CN65

8-1 dsPIC30F6013A/6014A PORTA 寄存器映射

SFR
名称
TRISA 02C0 TRISA15 TRISA14 TRISA13 TRISA12
PORTA 02C2 RA15 RA14 RA13 RA12
LATA 02C4 LATA15 LATA14 LATA13 LATA12
注:在 dsPIC30F6011A/6012A 器件上,不使用 PORTA
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 TRISA7 TRISA6
RA10 RA9 —RA7 RA6 —
L ATA10 LATA9 —LATA7LATA6 —
复位状态
1111 0110 1100 0000
0000 0000 0000 0000
0000 0000 0000 0000
dsPIC30F6011A/6012A/6013A/6014A

8-2 dsPIC30F6011A/6012A/6013A/6014A PORTB 寄存器映射

SFR
地址 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 复位状态
名称
TRISB 02C6 TRISB15 TRISB14 TRISB13 TRISB12 TRISB11 TRISB10 TRISB9 TRISB8 TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 1111 1111 1111 1111
PORTB 02C8 RB15 RB14 RB13 RB12 RB11 RB10 RB9 RB8 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 0000 0000 0000 0000
LATB 02CB LATB15 LATB14 LATB13 LATB12 LATB11 LATB10 LATB9 LATB8 LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0 0000 0000 0000 0000

8-3 dsPIC30F6011A/6012A PORTC 寄存器映射

SFR
名称
TRISC 02CC TRISC15 TRISC14 TRISC13
PORTC 02CE RC15 RC14 RC13
LATC 02D0 LATC15 LATC14 LATC13
地址 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 复位状态
TRISC2 TRISC1 1110 0000 0000 0110
RC2 RC1 0000 0000 0000 0000
—LATC2LATC1— 0000 0000 0000 0000

8-4 dsPIC30F6013A/6014A PORTC 寄存器映射

SFR
名称
TRISC 02CC TRISC15 TRISC14 TRISC13
PORTC 02CE RC15 RC14 RC13
LATC 02D0 LATC15 LATC14 LATC13
注:寄存器中各位的说明,请参阅《dsPIC30F
地址 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 复位状态
TRISC4 TRISC3 TRISC2 TRISC1 1110 0000 0001 1110
RC4 RC3 RC2 RC1 0000 0000 0000 0000
LATC4 LATC3 LATC2 LATC1 0000 0000 0000 0000
系列参考手册》
DS70046D_CN)。
DS70143B_CN66 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

8-5 dsPIC30F6011A/6012A PORTD 存器映射

SFR
地址 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 复位状态
名称
TRISD 02D2
PORTD 02D4
LATD 02D6
TRISD11 TRISD10 TRISD9 TRISD8 TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0 0000 1111 1111 1111
RD11 RD10 RD9 RD8 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 0000 0000 0000 0000
LATD11 LATD10 LATD9 LATD8 LATD7 LATD6 LATD5 LATD4 LATD3 LATD2 LATD1 LATD0 0000 0000 0000 0000

8-6 dsPIC30F6013A/6014A PORTD 寄存器映射

SFR
地址 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 复位状态
名称
TRISD 02D2 TRISD15 TRISD14 TRISD13 TRISD12 TRISD11 TRISD10 TRISD9 TRISD8 TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0 1111 1111 1111 1111
PORTD 02D4 RD15 RD14 RD13 RD12 RD11 RD10 RD9 RD8 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 0000 0000 0000 0000
LATD 02D6 LATD15 LATD14 LATD13 LATD12 LATD11 LATD10 LATD9 LATD8 LATD7 LATD6 LATD5 LATD4 LATD3 LATD2 LATD1 LATD0 0000 0000 0000 0000

8-7 dsPIC30F6011A/6012A PORTF 寄存器映射

SFR
地址 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 复位状态
名称
TRISF 02DE
PORTF 02E0
LATF 02E2
TRISF6 TRISF5 TRISF4 TRISF3 TRISF2 TRISF1 TRISF0 0000 0000 0111 1111
RF6 RF5 RF4 RF3 RF2 RF1 RF0 0000 0000 0000 0000
LATF6 LATF5 LATF4 LATF3 LATF2 LATF1 LATF0 0000 0000 0000 0000

8-8 dsPIC30F6013A/6014A PORTF 寄存器映射

SFR
地址 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 复位状态
名称
TRISF 02DE
PORTF 02E0
LATF 02E2
TRISF8 TRISF7 TRISF6 TRISF5 TRISF4 TRISF3 TRISF2 TRISF1 TRISF0 0000 0001 1111 1111
RF8 RF7 RF6 RF5 RF4 RF3 RF2 RF1 RF0 0000 0000 0000 0000
LATF8 LATF7 LATF6 LATF5 LATF4 LATF3 LATF2 LATF1 LATF0 0000 0000 0000 0000

8-9 dsPIC30F6011A/6012A/6013A/6014A PORTG 寄存器映射

SFR名称
TRISG 02E4 TRISG15 TRISG14 TRISG13 TRISG12
PORTG 02E6 RG15 RG14 RG13 RG12
LATG 02E8 LATG15 LATG14 LATG13 LATG12
注:寄存器中各位的说明,请参阅《dsPIC30F
地址 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 复位状态
TRISG9 TRISG8 TRISG7 TRISG6 TRISG3 TRISG2 TRISG1 TRISG0 1111 0011 1100 1111
RG9 RG8 RG7 RG6 RG3 RG2 RG1 RG0 0000 0000 0000 0000
L ATG 9 LA TG8 L ATG 7 LAT G6 LATG3 LATG2 LATG1 LATG0 0000 0000 0000 0000
系列参考手册》
DS70046D_CN)。
dsPIC30F6011A/6012A/6013A/6014A

8.3 输入电平变化通知模块

输入电平变化通知模块,使得 dsPIC30F 器件能够产生 中断请求并传递给处理器,以响应所选取输入引脚上的 状态变化。即便是在休眠模式下、时钟被禁止时,该模 块也能检测输入的状态变化。对于在输入状态变化时产 生中断请求,可以选择 (使能)的外部信号多达 24
CN0 CN23)。
8-10
SFR
名称
CNEN1 00C0 CN15IE CN14IE CN13IE CN12IE CN11IE CN10IE CN9IE CN8IE 0000 0000 0000 0000
CNEN2 00C2
CNPU1 00C4 CN15PUE CN14PUE CN13PUE CN12PUE CN11PUE CN10PUE CN9PUE CN8PUE 0000 0000 0000 0000
CNPU2 00C6
dsPIC30F6011A/6012A
地址 Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 复位状态
0000 0000 0000 0000
0000 0000 0000 0000
的输入电平变化通知寄存器映射(
BIT 15-8

8-11: dsPIC30F6011A/6012A 的输入电平变化通知寄存器映射 (BIT 7-0)

SFR
名称
CNEN1 00C0 CN7IE CN6IE CN5IE CN4IE CN3IE CN2IE CN1IE CN0IE 0000 0000 0000 0000
CNEN2 00C2 CN18IE CN17IE CN16IE 0000 0000 0000 0000
CNPU1 00C4 CN7PUE CN6PUE CN5PUE CN4PUE CN3PUE CN2PUE CN1PUE CN0PUE 0000 0000 0000 0000
CNPU2 00C6
地址 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位状态
CN18PUE CN17PUE CN16PUE 0000 0000 0000 0000

8-12 dsPIC30F6013A/6014A 的输入电平变化通知寄存器映射 (BIT 15-8

SFR
名称
CNEN1 00C0 CN15IE CN14IE CN13IE CN12IE CN11IE CN10IE CN9IE CN8IE 0000 0000 0000 0000
CNEN2 00C2 0000 0000 0000 0000
CNPU1 00C4 CN15PUE CN14PUE CN13PUE CN12PUE CN11PUE CN10PUE CN9PUE CN8PUE 0000 0000 0000 0000
CNPU2 00C6
地址 Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 复位状态
0000 0000 0000 0000

8-13 dsPIC30F6013A/6014A 的输入电平变化通知寄存器映射 (BIT 7-0

SFR
名称
CNEN1 00C0 CN7IE CN6IE CN5IE CN4IE CN3IE CN2IE CN1IE CN0IE 0000 0000 0000 0000
CNEN2 00C2 CN23IE CN22IE CN21IE CN20IE CN19IE CN18IE CN17IE CN16IE 0000 0000 0000 0000
CNPU1 00C4 CN7PUE CN6PUE CN5PUE CN4PUE CN3PUE CN2PUE CN1PUE CN0PUE 0000 0000 0000 0000
CNPU2 00C6 CN23PUE CN22PUE CN21PUE CN20PUE CN19PUE CN18PUE CN17PUE CN16PUE 0000 0000 0000 0000
注: 寄存器中各位的说明,请参阅《dsPIC30F
2006 Microchip Technology Inc. 初稿 DS70143B_CN67
地址 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位状态
系列参考手册》
DS70046D_CN)。
dsPIC30F6011A/6012A/6013A/6014A
注:
DS70143B_CN68 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

9.0 TIMER1 模块

注:本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F
本节叙述 16 位通用 (GPTimer1 模块及其相关的工 作模式。图 9-1 所示为 16 Timer1 模块的简化框图。
对于定时器的工作模式,下面的各小节将详细说明设 置、控制寄存器以及相应的框图。
Timer1 模块是16位定时器,可以用作实时时钟的时间计 数器,或者用作自由运行的时段定时器 / 计数器。16 位 定时器有下列模式:
•16位定时器
•16位同步计数器
•16位异步计数器
而且,支持下列操作特征:
定时器门控操作
可选择的预分频比设置
•CPU空闲和休眠模式下的定时器操作
16 位周期寄存器匹配时产生中断,或者在外部
门控信号下降沿产生中断
通过设定 16 SFR T1CON 中的相应位来决定这些工 作模式。图 9-1 所示为 16 Timer1 模块的框图。
系列参考手册》
DS70046D_CN)。
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,则定时器将停止递增。
2006 Microchip Technology Inc. 初稿 DS70143B_CN69
dsPIC30F6011A/6012A/6013A/6014A

9-1 16 TIMER1 模块框图

T1IF
事件标志
SOSCO/
T1CK
SOSCI
0
1
TGATE

9.1 定时器门控操作

相等
复位
LPOSCEN
PR1
比较器 x 16
TMR1
QD
CK
Q
门控 同步
T
CY
TSYNC
1
同步
0
TGATE
TCS
TGATE
TON
1 x
0 1
0 0
TCKPS<1:0>
2
预分频器
1, 8, 64, 256

9.3 休眠模式下的定时器操作

16 位定时器可以置为门控时间累加模式 (Gated Time Accumulation mode) 。该模式使得当门控输入信号
T1CK 引脚)为高电平时,内部 T
CY 能够递增相应的
定时器。要使能该模式,必须把控制位 TGATE 1
T1CON<6>)。必须使能定时器(TON = 1),且定时
器时钟源设置为外部时钟源 (TCS = 0)。
CPU 进入 空闲模式 时,定时器将 停止递增,除 非 TSIDL = 0。如果 TSIDL = 1,则定时器将在 CPU 空闲模 式终止后继续递增。

9.2 定时器预分频器

16 位定时器的输入时钟 (FOSC/4 或外部时钟)有如下 预分频选择:1:11:81:64 1:256 ;通过控制位 TCKPS<1:0> T1CON<5:4>)来选择预分频比。当出 现下列事件之一时,预分频器的计数器将清零:
TMR1 寄存器
T1CON 寄存器
器件复位,如 POR BOR
但是,如果定时器被禁止 (TON = 0),那么定时器的 预分频器将不会复位,因为预分频器的时钟停止了。
当写 T1CON 时,TMR1 不会被清零。当写 TMR1 寄存 器时, TMR1 将被清零。
CPU 休眠模式期间,定时器将继续工作,如果:
定时器模块被使能 (TON = 1),且
定时器时钟源选用外部时钟 (TCS = 1),且
• TSYNC 位(T1CON<2>)为逻辑 “0”,这将外
部时钟源定义为异步的。
如果所有这三个条件都得到满足,定时器将继续计数, 直到等于周期寄存器中的值,然后复位至 0x0000
当定时器与周期寄存器之间匹配时,如果相应的定时器 中断允许位置 1 的话,将产生中断。
DS70143B_CN70 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

9.4 定时器中断

16 位定时器具有在周期匹配时产生中断的能力。当定时 器计数与周期寄存器相匹配时, T1IF 位将置 1,如果允 许中断的话将产生中断。 T1IF 位必须在软件中清除。定 时器中断标志 T1IF 位于中断控制器的 IFS0 控制寄存器 中。
当使能了门控时间累加模式时,还将在门控信号的下降 沿 (累加周期的末尾)产生中断。
通过相应的定时器中断允许位T1IE 来允许定时器中断。 定时器中断允许位位于中断控制器的 IEC0 控制寄存器 中。

9.5 实时时钟

Timer1 工作在实时时钟 (RTC)模式下时,提供了 当天时间和事件时间标记的能力。关键的 RTC 工作特 性如下:
使用 32 kHz LP 振荡器工作
•8位预分频器
低功耗
实时时钟中断 工作模式,由 T1CON 控制寄存器中的相应位决定。
9.5.1 RTC 振荡器操作
TON = 1TCS = 1 TGATE = 0 时,定时器在 32 kHz LP 振荡器输出信号的上升沿递增,一直递增到
周期寄存器中指定的值,然后复位至 0
为确保正确工作, TSYNC 位必须置为逻辑 0 (异步模 式)。
使能 LPOSCENOSCCON<1>)将禁止通常的定时器 和计数器模式而使能定时器溢出唤醒事件。
CPU 进入休眠模式时,如果 32 kHz 外部晶体振荡器 处于工作状态、且控制位没有改变的话, RTC 将继续 工作。要使 RTC 在空闲模式下继续工作, TSIDL 位应 当置为 0
9.5.2 RTC 中断
当中断事件发生时,相应的中断标志 T1IF 将置 1,如果 允许中断的话就将产生中断。 T1IF 位必须在软件中清 零。相应的定时器中断标志 T1IF位于中断控制器的 IFS0 状态寄存器中。
通过相应的中断允许位 T1IE 来允许中断。定时器中断 允许位位于中断控制器的 IEC0 控制寄存器中。

9-2 TIMER1 LP 振荡器 RTC 的推荐元件

C1
SOSCI
32.768 kHz XTAL
C2
C1 = C2 = 18 pF;R = 100K
R
dsPIC30FXXXX
SOSCO
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第71
DS70143B_CN72 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

9-1 TIMER1 寄存器映射

SFR 名称 地址 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 复位状态
TMR1 0100 Timer1 寄存器 uuuu uuuu uuuu uuuu
PR1 0102 周期寄存器 1 1111 1111 1111 1111
T1CON 0104 TON
图注: u = 未初始化位
—TSIDL— TGATE TCKPS1 TCKPS0 —TSYNCTCS — 0000 0000 0000 0000
注:寄存器各位的说明,请参阅《dsPIC30F
系列参考手册》
DS70046D_CN)。
dsPIC30F6011A/6012A/6013A/6014A

10.0 TIMER2/3 模块

注:本数据手册总结了 dsPIC30F 系列器件的功能,
但是不应把本手册当作无所不包的参考手册来
使用。有关 CPU、外设、寄存器说明和一般器
件功能的更多信息,请参阅
考手册》
本节叙述 32 位通用(GP)定时器模块(Timer2/3)和 相关工作模式。图 10-1 所示为 32 Timer2/3 模块的 简化框图。图 10-2和图 10-3所示分别为将Timer2/3 配 置成的两个独立 16 位定时器 Timer2 Timer3 的框图。
Timer2/3 模块是 32 位定时器(可配置为两个 16 位定时 器),具有可选择的工作模式。这些定时器为其他外设 模块所使用,例如:
输入捕捉
输出比较 / 简单 PWM
对于定时器的工作模式,下面的各小节将详细说明其设 置和控制寄存器以及相应的框图。
32 位定时器有下列模式:
两个独立的 16 位定时器(Timer2 Timer3),支 持所有 16 位工作模式 (异步计数器模式除外)
一个 32 位定时器
一个 32 位同步计数器
此外,支持如下工作特性:
• ADC事件触发信号
定时器门控操作
可选择的预分频比设定
空闲和休眠模式下的定时器操作
32 位周期寄存器匹配时产生中断
通过设定 16 T2CON T3CON SFR 中的相应位来决 定这些工作模式。
对于 32 位定时器 / 计数器操作, Timer2 是最低有效字
lsw),而 Timer3 是最高有效字 (msw)。
DS70046D_CN)。
dsPIC30F
系列参
16 位定时器模式:在 16 位模式下,Timer2 和 Timer3 以配置为两个独立的 16 位定时器。每个定时器均可设 置为 16 位定时器模式或 16 位同步计数器模式。这两种 工作模式的细节,请参见第 9.0 “Timer1 模块
Timer2 Timer3 之间唯一的功能差异是, Timer2 提供 了时钟预分频器输出同步。这对于高频外部时钟输入很 有用。
32 位定时器模式:在 32 位定时器模式下,定时器在每个 指令周期递增,一直递增到与预先装入组合 32 位周期 寄存器 PR3/PR2 中的值匹配,然后复位至 0,继续计 数。
对于 Timer2/Timer3 对的同步 32 位读操作,读 lsw
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 空闲模式终止。
注:对于 32 位定时器操作, T3CON 控制位将被忽
略。设置和控制只使用 T2CON 控制位 。对于 32 位定时器模块,使用的是 Timer2 时钟和门控 输入,但 是,中 断 产生 由 Timer3 中断标志
T3IF)反映,而且中断通过 Timer3 中断允许
位(T3IE)来允许。
2006 Microchip Technology Inc. 初稿 DS70143B_CN73
dsPIC30F6011A/6012A/6013A/6014A

10-1 32 TIMER2/3 框图

数据总线 <15:0>
ADC 事件触发信号
T3IF
事件标志
T2CON<6>
T2CK
0
1
TGATE
TMR2
TMR2
复位
相等
TMR3HLD
16
16
TMR3 TMR2
比较器 x 32
PR3 PR2
16
LSB MSB
QD
CK
Q
TGATE(T2CON<6>)
TCS
1 x
同步
TGATE
TON
TCKPS<1:0>
2
门控 同步
T
注: 对于 32 位定时器 / 计数器操作,定时器配置位 T32 T2CON<3>)必须置为
器相对应。
CY
0 1
0 0
预分频器
1, 8, 64, 256
1。所有控制位都与 T2CON 寄存
DS70143B_CN74 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

10-2 16 TIMER2 框图

T2IF
事件标志
T2CK
相等
复位
0
1
TGATE
比较器 x 16

10-3 16 TIMER3 框图

PR2
TMR2
QD
Q
CK
门控 同步
CY
T
TGATE
TCS
1 x
0 1
0 0
TGATE
TON
同步
TCKPS<1:0>
2
预分频器
1, 8, 64, 256
ADC 事件触发信号
T3IF
事件标志
TGATE
T3CK
相等
复位
0
1
PR3
比较器 x 16
TMR3
QD
Q
CK
同步
T
CY
TGATE
TCS
1 x
0 1
0 0
TGATE
TON
TCKPS<1:0>
2
预分频器
1, 8, 64, 256
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第75
dsPIC30F6011A/6012A/6013A/6014A

10.1 定时器门控操作

32 位定时器可以置为门控时间累加模式。该模式使得当 门控输入信号 (T2CK 引脚)为高电平时,内部 T 够递增相应的定时器。要使能该模式,必须将控制位 TGATET2CON<6>)置 1。在此模式下,Timer2 是发 起时钟源。对于 Timer3TGATE 设定被忽略。必须使 能定时器 (TON = 1),且定时器时钟源设置为内部时 钟源 (TCS = 0)。
外部信号的下降沿终止计数操作,但不会复位定时器。 要从零开始计数,用户必须复位定时器。
CY

10.2 ADC 事件触发信号

32 位定时器 (TMR3/TMR2)与 32 位组合周期寄存 器(PR3/PR2)出现匹配,或者 16 位定时器 TMR3 与 16位周期寄存器PR3出现匹配时,Timer3将生成ADC 殊事件触发信号。

10.3 定时器预分频器

定时器的输入时钟 (FOSC/4 或外部时钟) ,有 1:1
1:81:64 1:256 的预分频比选择;通过控制位 TCKPS<1:0>(T2CON<5:4> 和 T3CON<5:4>)来选择
预分频比。对于 32 定时器操作,发起时钟源是 Timer2。 在此模式下不能进行 Timer3 的预分频器操作。当出现 下列事件之一时,预分频器的计数器将清零:
TMR2/TMR3 寄存器
T2CON/T3CON 寄存器
器件复位,如 POR BOR
但是,如果定时器被禁止(TON = 0), 那 么 Timer2 预 分频器将不会被复位,因为预分频器的时钟停止了。
当写 T2CON/T3CON 时, TMR2/TMR3 不会被清零。

10.4 休眠模式下的定时器操作

CPU 休眠模式期间,定时器不工作,因为内部时钟 被禁止。

10.5 定时器中断

32 位定时器模块具有在周期匹配时,或者在外部门控信 号下降沿产生中断的能力。当 32 位定时器计数与相应的 周期寄存器相匹配时,或者检测到外部 “门控”信号的 下降沿时, T3IF 位(IFS0<7>)将置 1,如果允许中断 的话则将产生中断。在此模式下,T3IF 中断标志用作中 断源。 T3IF 位必须在软件中清零。
通过相应的定时器中断允许位 T3IE IEC0<7>)来允 许中断。
DS70143B_CN76 初稿 2006 Microchip Technology Inc.
2006 Microchip Technology Inc. 初稿 DS70143B_CN77

10-1 TIMER2/3 寄存器映射

SFR 名称 地址 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 复位状态
TMR2 0106 Timer2 寄存器 uuuu uuuu uuuu uuuu
TMR3HLD 0108 Timer3 保持寄存器 (仅限 32 位定时器操作) uuuu uuuu uuuu uuuu
TMR3 010A Timer3 寄存器 uuuu uuuu uuuu uuuu
PR2 010C 周期寄存器 2 1111 1111 1111 1111
PR3 010E 周期寄存器 3 1111 1111 1111 1111
T2CON 0110 TON
T3CON 0112 TON
—TSIDL — TGATE TCKPS1 TCKPS0 T32 —TCS — 0000 0000 0000 0000
—TSIDL — TGATE TCKPS1 TCKPS0 —TCS — 0000 0000 0000 0000
图注: u = 未初始化位
dsPIC30F6011A/6012A/6013A/6014A
注:寄存器各位的说明,请参阅《dsPIC30F
系列参考手册》
DS70046D_CN)。
dsPIC30F6011A/6012A/6013A/6014A
注:
DS70143B_CN78 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

11.0 TIMER4/5 模块

注:本数据手册总结了 dsPIC30F 系列器件的功能, 但是不应把本手册当作无所不包的参考手册来使用。 有关 CPU、外设、寄存器说明和一般器件功能的更多 信息,请 参 阅
DS70046D_CN)。
本节叙述 32 位通用(GP)定时器模块(Timer4/5)和 相关工作模式。图 11-1 所示为 32 Timer4/5 模块的简 化框图。图 11-2 和图 11-3 所示分别为将 Timer4/5 配置 成的两个独立 16 位定时器 Timer4 Timer5 的框图。
Timer4/5 模块的工作与 Timer2/3 模块相似。然而,有如 下区别:

11-1 32 TIMER4/5 框图

dsPIC30F
数据总线 <15:0>
TMR4
TMR4
系列参考手册》
TMR5HLD
16
16
16
• Timer4/5 模块不支持 ADC 事件触发信号功能
• Timer4/5 不能被其他外设模块使用,例如,不能被
输入捕捉和输出比较模块使用
16 T4CON T5CON 特殊功能寄存器中相应位的设 定,决定了 Timer4/5 模块的工作模式。
对于 32 位定时器 / 计数器操作, Timer4 32 位定时 器的 lsw,而 Timer5 msw
注: 对于 32 位定时器操作, T5CON 控制位被
忽略。只使用 T4CON 控制位来设置和控 制。 Timer4 时钟和门控输入用于 32 位定 时器模块,但产生中断将把 Timer5 中断 标志 (T5IF)置 1,允许中断使用 Timer5 中断允许位 (T5IE)。
复位
相等
T5IF
事件标志
T4CK
注: 对于 32 位定时器 / 计数器操作,定时器配置位 T32(T4CON<3>)必须设置为 1所有的控制位都与 T4CON
0
1
TGATE
T4CON<6>
寄存器相对应。
TMR5
MSB
比较器 x 32
PR5 PR4
TMR4
LSB
Q
Q
D
TGATE(T4CON<6>)
CK
门控 同步
T
CY
TCS
1 x
0 1
0 0
同步
TGATE
TON
TCKPS<1:0>
2
预分频器
1, 8, 64, 256
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第79
dsPIC30F6011A/6012A/6013A/6014A

11-2 16 TIMER4 框图

T4IF
事件标志
T4CK
相等
复位
0
1
TGATE
比较器 x 16

11-3 16 TIMER5 框图

PR4
TMR4
同步
Q
D
CK
Q
门控 同步
T
CY
TGATE
TCS
1 x
0 1
0 0
TGATE
TON
TCKPS<1:0>
2
预分频器
1, 8, 64, 256
PR5
ADC 事件触发信号
T5IF
事件标志
TGATE
T5CK
注: dsPIC30F6011A dsPIC30F6012A 器件中,没有 T5CK 引脚。从而,对于这两种器件, Timer5 不能
工作在下列模式:
TCS = 1 (16 位计数器)
TCS = 0TGATE = 1 (门控时间累加)
相等
复位
0
1
比较器 x 16
TMR5
QD
CK
Q
同步
T
CY
TGATE
TCS
1 x
0 1
0 0
TGATE
TON
TCKPS<1:0>
2
预分频器
1, 8, 64, 256
DS70143B_CN80 初稿 2006 Microchip Technology Inc.
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第 81

11-1 TIMER4/5 寄存器映射

SFR 名称 地址 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 复位状态
TMR4 0114 Timer4 寄存器 uuuu uuuu uuuu uuuu
TMR5HLD 0116 Timer5 保持寄存器 (仅限 32 位操作) uuuu uuuu uuuu uuuu
TMR5 0118 Time5 寄存器 uuuu uuuu uuuu uuuu
PR4 011A 周期寄存器 4 1111 1111 1111 1111
PR5 011C 周期寄存器 5 1111 1111 1111 1111
T4CON 011E TON
T5CON 0120 TON
—TSIDL— TGATE TCKPS1 TCKPS0 T32 —TCS — 0000 0000 0000 0000
—TSIDL— TGATE TCKPS1 TCKPS0 —TCS — 0000 0000 0000 0000
图注: u = 未初始化位
dsPIC30F6011A/6012A/6013A/6014A
注: 寄存器各位的说明,请参阅《dsPIC30F
系列参考手册》
DS70046D_CN)。
dsPIC30F6011A/6012A/6013A/6014A
注:
DS70143B_CN82 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

12.0 输入捕捉模块

注:本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F
本节叙述输入捕捉模块及其相关工作模式。捕捉模块提 供的功能,对于需要测量频率(周期)和脉冲的应用是 很有用的。图 12-1 所示为输入捕捉模块的框图。输入 捕捉可用于如下模式:
频率 / 周期 / 脉冲测量
增加外部中断源
输入捕捉模块的主要工作特性如下:
简单捕捉事件模式
•Timer2和 Timer3 模式选择
在发生输入捕捉事件时中断

12-1 输入捕捉模块框图

系列参考手册》
DS70046D_CN)。
通过在 ICxCON 寄存器 (其中, x = 1,2,...,N)中设置 相应的位,选择上述工作模式。 dsPIC DSC 器件具有 多达 8 个捕捉通道 (即, N 的最大值为 8)。

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
模式选择
ICxCON
数据总线
注: 图中的 “x”指的是与相应输入捕捉通道 1 至 N 相关的寄存器或位。
时钟
同步
ICM<2:0>
ICBNE ICOV
ICI<1:0>
边沿检测
逻辑
中断逻辑
1 标志位
ICxIF
ICxIF
FIFO
读 / 写逻辑
16 16
10
ICxBUF
ICTMR
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第83
dsPIC30F6011A/6012A/6013A/6014A
12.1.2 捕捉缓冲器操作
每个捕捉通道都有一个关联的 FIFO 缓冲器,缓冲器宽 16 位,深度为四级。有两个状态标志,提供 FIFO 缓冲器 的状态:
•ICBFNE——输入捕捉缓冲器非空
•ICOV—— 输入捕捉溢出
ICBFNE将在第一个输入捕捉事件发生时被置1,并且一
直保持置 1 状态,直到所有的捕捉事件都已从 FIFO 中 读出。每次从 FIFO 中读出一个字,余下的字将在缓冲 器中前进一个位置。
FIFO 已满 (FIFO 中有四个捕捉事件)时,如果在 读 FIFO 之前发生第五个捕捉事件,则将产生溢出,且 ICOV 位将被设置成逻辑 1。第五个捕捉事件将丢失,不 会存入 FIFO。而且之后不会再捕捉任何事件,除非已 经从缓冲器中读出了全部四个事件。
如果 FIFO 已空、且还没有收到新的捕捉事件,这时读
FIFO 将产生不确定的结果。
12.1.3 TIMER2 TIMER3 选择模式
输入捕捉模块有多达 8 个输入捕捉通道。每个通道均可 选择两个定时器 (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 控制寄存器中。
DS70143B_CN84 初稿 2006 Microchip Technology Inc.
2006 Microchip Technology Inc. 初稿 DS70143B_CN85

12-1 输入捕捉寄存器映射

SFR 名称 地址 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 复位状态
IC1BUF 0140 输入 1 捕捉寄存器 uuuu uuuu uuuu uuuu
IC1CON 0142
IC2BUF 0144 输入 2 捕捉寄存器 uuuu uuuu uuuu uuuu
IC2CON 0146
IC3BUF 0148 输入 3 捕捉寄存器 uuuu uuuu uuuu uuuu
IC3CON 014A
IC4BUF 014C 输入 4 捕捉寄存器 uuuu uuuu uuuu uuuu
IC4CON 014E
IC5BUF 0150 输入 5 捕捉寄存器 uuuu uuuu uuuu uuuu
IC5CON 0152
IC6BUF 0154 输入 6 捕捉寄存器 uuuu uuuu uuuu uuuu
IC6CON 0156
IC7BUF 0158 输入 7 捕捉寄存器 uuuu uuuu uuuu uuuu
IC7CON 015A
IC8BUF 015C 输入 8 捕捉寄存器 uuuu uuuu uuuu uuuu
IC8CON 015E
图注: u = 未初始化位
—ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> 0000 0000 0000 0000
—ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> 0000 0000 0000 0000
—ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> 0000 0000 0000 0000
—ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> 0000 0000 0000 0000
—ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> 0000 0000 0000 0000
—ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> 0000 0000 0000 0000
—ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> 0000 0000 0000 0000
—ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> 0000 0000 0000 0000
dsPIC30F6011A/6012A/6013A/6014A
注: 寄存器中各位的说明,请参阅《dsPIC30F
系列参考手册》
DS70046D_CN)。
dsPIC30F6011A/6012A/6013A/6014A
注:
DS70143B_CN86 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

13.0 输出比较模块

注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F
本节叙述输出比较模块及其相关工作模式。输出比较模 块提供的功能,对于需要下列工作模式的应用是很有用 的:
可变宽度输出脉冲的生成
功率因数校正
输出比较模块的框图,如图 13-1 所示。

图 13-1: 输出比较模块框图

系列参考手册》
DS70046D_CN)。
OCxRS
OCxR
比较器
输出比较模块的主要工作特性如下:
•Timer2和 Timer3 选择模式
简单输出比较匹配模式
双输出比较匹配模式
简单 PWM (脉宽调制)模式
休眠和空闲模式期间的输出比较
在发生输出比较 /PWM 事件时产生中断
通过在 16 位特殊功能寄存器 OCxCON 中设置恰当的 位,选择上述工作模式(其中, x = 1,2,...,N)。 dsPIC DSC器件具有多达8个比较通道(即,N的最大值为8)。
13-1 中, OCxRS OCxR 表示双比较寄存器。在 双比较模式中,OCxR 寄存器用于第一个比较,OCxRS 用于第二个比较。
1 标志位
OCxIF
输出逻辑
3
OCM<2:0>
模式选择
R
QS
输出使能
OCx
01
来自通用 定时器模块
注: 图中的 “x”指的是与输出比较通道 1 至 N 中相应通道相关的寄存器或位。
OCTSEL
01
T2P2_MATCHTMR2<15:0 TMR3<15:0> T3P3_MATCH
OCFA
(对于 x = 12、3 或 4)
或者 OCFB
(对于 x = 56、7 或 8)
2006 Microchip Technology Inc. 初稿 DS70143B_CN87
dsPIC30F6011A/6012A/6013A/6014A

13.1 Timer2 Timer3 模式选择

每个输出比较通道均可选择两个 16 位定时器 (Timer2Timer3)中的一个。
通过 OCTSEL 位(OCxCON<3>)来控制定时器的选 择。 Timer2 是输出比较模块缺省的定时器资源。

13.2 简单输出比较匹配模式

当控制位 OCM<2:0> OCxCON<2:0>= 001010011 时,所选输出比较通道被配置为下列三种简单输 出比较匹配模式之一:
比较强制 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
根据 TCY 计算所需的脉冲宽度值。
计算从定时器起始值 0x0000 到脉冲开始的时间。
把脉冲宽度开始和停止时间分别写入 OCxR OCxRS 比较寄存器 (x 表示通道 1, 2, ...,N)。
设置定时器周期寄存器的值,使之等于或大于 OCxRS 比较寄存器中的值。
设置 OCM<2:0> = 101
使能定时器, TON TxCON<15>= 1
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 模式。
DS70143B_CN88 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A
13.4.2 PWM 周期
通过写 PRx 寄存器来指定 PWM 周期。PWM 周期可以 使用公式 13-1 计算。

公式 13-1

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,则 OCx
引脚将保持为低电平。
- 例外 2:如果占空比大于 PRx,则引脚将保持 为高电平。
PWM 占空比从 OCxRS 锁存到 OCxR 中。
相应的定时器中断标志置 1
参见图 13-2 的关键 PWM 周期比较。为了清晰起见, 图 13-2 中引用的是 Timer3
TMR3 = PR3
T3IF = 1
(中断标志)
OCxR = OCxRS
TMR3 = 占空比
OCxR

13.5 CPU 休眠模式期间的输出比较工作

CPU进入休眠模式时,所有的内部时钟都将停止。 而,输出比较通道将把引脚驱动为与 CPU 进入休眠模 式之前的有效状态。
例如,当 CPU 进入休眠状态时,如果引脚为高电平,则 引脚将继续保持为高电平。类似地,当 CPU 进入休眠 状态时,如果引脚为低电平,它将继续保持为低电平。 在这两种情况下,当器件唤醒时,输出比较模块都将恢 复工作。

13.6 CPU 空闲模式期间的输出比较工作

CPU 进入空闲模式时,输出比较模块仍然能够全功 能工作。
如果 OCSIDL 位(OCxCON<13>)为逻辑 0,所选时 基(Timer2 或 Timer3)使能且所选定时器的 TSIDL 位 为逻辑 0,输出比较通道将在 CPU 空闲模式期间工作。

13.7 输出比较中断

输出比较通道具有在比较匹配时产生中断的能力,而与 选择的匹配模式无关。
对于除 PWM 之外的所有模式,当比较事件发生时,相 应的中断标志 (OCxIF)置 1,如果允许中断的话还将 产生中断。ICxIF 位位于相应的 IFSx 状态寄存器中,它 的清零必须在软件中进行。通过相应的比较中断允许位
ICxIE),来允许中断; OCxIE 位位于相应的 IEC
制寄存器中。
对于 PWM 模式,当事件发生时,对应的定时器中断标 志位 (T2IF T3IF)置 1,如果允许中断的话还将产 生中断。 TxIF 位在 IFS0 状态寄存器中,它的清零必须 在软件中进行。通过位于 IEC0 控制寄存器中的定时器 中断允许位 (T2IE T3IE),来允许相应的中断。在 PWM 工作模式下,输出比较中断标志始终不会置 1
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第89
DS70143B_CN90 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

13-1 输出比较寄存器映射

SFR 名称 地址 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 复位状态
OC1RS 0180 输出比较 1 辅助寄存器 0000 0000 0000 0000
OC1R 0182 输出比较 1 主寄存器 0000 0000 0000 0000
OC1CON 0184
OC2RS 0186 输出比较 2 辅助寄存器 0000 0000 0000 0000
OC2R 0188 输出比较 2 主寄存器 0000 0000 0000 0000
OC2CON 018A
OC3RS 018C 输出比较 3 辅助寄存器 0000 0000 0000 0000
OC3R 018E 输出比较 3 主寄存器 0000 0000 0000 0000
OC3CON 0190
OC4RS 0192 输出比较 4 辅助寄存器 0000 0000 0000 0000
OC4R 0194 输出比较 4 主寄存器 0000 0000 0000 0000
OC4CON 0196
OC5RS 0198 输出比较 5 辅助寄存器 0000 0000 0000 0000
OC5R 019A 输出比较 5 主寄存器 0000 0000 0000 0000
OC5CON 019C
OC6RS 019E 输出比较 6 辅助寄存器 0000 0000 0000 0000
OC6R 01A0 输出比较 6 主寄存器 0000 0000 0000 0000
OC6CON 01A2
OC7RS 01A4 输出比较 7 辅助寄存器 0000 0000 0000 0000
OC7R 01A6 输出比较 7 主寄存器 0000 0000 0000 0000
OC7CON 01A8
OC8S 01AA 输出比较 8 辅助寄存器 0000 0000 0000 0000
OC8R 01AC 输出比较 8 主寄存器 0000 0000 0000 0000
OC8CON 01AE
图注: u = 未使用位
—OCSIDL— OCFLT OCTSEL OCM<2:0> 0000 0000 0000 0000
—OCSIDL— OCFLT OCTSE OCM<2:0> 0000 0000 0000 0000
—OCSIDL— OCFLT OCTSEL OCM<2:0> 0000 0000 0000 0000
—OCSIDL— OCFLT OCTSEL OCM<2:0> 0000 0000 0000 0000
—OCSIDL— OCFLT OCTSEL OCM<2:0> 0000 0000 0000 0000
—OCSIDL— OCFLT OCTSEL OCM<2:0> 0000 0000 0000 0000
—OCSIDL— OCFLT OCTSEL OCM<2:0> 0000 0000 0000 0000
—OCSIDL— OCFLT OCTSEL OCM<2:0>
0000 0000 0000 0000
注: 寄存器中各位的说明,请参阅《dsPIC30F
系列参考手册》
DS70046D_CN)。
dsPIC30F6011A/6012A/6013A/6014A

14.0 SPI 模块

注:本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F
串行外设接口(Serial Peripheral Interface, SPI)模块 是同步串行接口,可用于与其他外设 (如 EEPROM、 移位寄存器、显示驱动器和 A/D 转换器等)或者单片机 进行通信。SPI 模块与 Motorola 的 SPI 和 SIOP 接口兼 容。

14.1 功能说明

每个 SPI 模块由一个 16 位移位寄存器(SPIxSR,其中 x = 1 2)和一个缓冲器寄存器(SPIxBUF)组成;移
位寄存器用来移入和移出数据。一个控制寄存器 (SPIxCON)用来配置模块。此外,一个状态寄存器 (SPIxSTAT)用来表明各种状态条件。
串行接口有 4 个引脚:SDIx (串行数据输入)、 SDOx (串行数据输出) 、 SCKx (移位时钟输入或输出)以
SSx
在主模式下工作时, SCK 是时钟输出,但在从模式下
它是时钟输入。
一组 8 或 16 个时钟脉冲将数据位从 SPIxSR 移出到
SDOx 引脚,同时将 SDIx 引脚的数据位移入 SPIxSR
当传输完成后将产生中断,相应的中断标志位(SPI1IF
SPI2IF)置 1。通过中断允许位(SPI1IE SPI2IE
可以禁止该中断。
接收操作是双缓冲的。当接收完字节时,将字节从
SPIxSR 送到 SPIxBUF
当从 SPIxSR 传输新数据到 SPIxBUF 时,如果接收缓
冲器满,模块将置 1 SPIROV 位,表明产生溢出条件。
数据从 SPIxSR SPIxBUF 的传送不会完成,新数据
将丢失。当 SPIROV 1 时,模块将不会对 SCK 电平
跳变进行响应;实际上会禁止模块,直到用户软件读
SPIxBUF 为止。
发送写操作同样也是双缓冲的。用户写入 SPIxBUF
主器件或从器件传输完成后,移位寄存器 (SPIxSR
的内容将送至接收缓冲器。如果已经向缓冲器寄存器写
了任何发送数据,发送缓冲器的内容将送至 SPIxSR
于是,接收到的数据存放在 SPIxBUF 中,而 SPIxSR
的发送数据已经准备就绪,可进行下一次传输。
系列参考手册》
(低电平有效从选择 )。
DS70046D_CN)。
在主模式下,通过对系统时钟进行预分频来产生时钟。 只要数据写入 SPIxBUF 就会被发送。在最后一个位传 送的过程中产生中断。
在从模式下, SCK 上出现外部时钟时,进行数据的发 送和接收。同样,当最后一个位被锁存时产生中断。如 果使能了 SSx 接收。在 SSx 禁止。
提供给模块的时钟是 F
PPRE<1:0>)和辅助主预分频因子 (SPRE<2:0>),
对这个时钟进行分频。CKE 位决定发送的时钟边沿,是 在时钟从有效状态跳变到空闲状态进行发送,还是反 之。CKP 位选择时钟的空闲状态(高电平或低电平)。
控制,那么仅当 SSx 为低时使能发送和 模式下,当 SSx 为高时 SDOx 输出将被
OSC/4。而后,使用主预分频因子
14.1.1 字和字节通信
控制位 MODE16SPIxCON<10>)允许模块在 8 位或 16 位模式下通信。16 位的通信,除了发送的位数是 16
而不是 8 以外,与 8 位通信功能相同。
在更改 MODE16 位之前,用户软件必须禁止模块。用 户更改 MODE16 位时, SPI 模块将复位。
8 位和 16 位工作之间的基本区别是, 8 位工作模式下 数据是从 SPIxSR bit 7 发送的;而在 16 位工作模式 下,则是从 SPIxSR bit 15 发送的。在两种模式下, 数据都会移入 SPIxSR bit 0
14.1.2 SDOx 禁止
SPIxCON寄存器中的控制位 DISSDO,用来禁止 SDOx 输出。这样可以使 SPIx 模块配置为仅输入的工作模式。 SDO 也可用于一般的 I/O 口。

14.2 SPI 支持

当工作在主模式或从模式时,模块支持基本的帧 SPI 协 议。控制位 FRMEN 使能帧 SPI 模式支持,并使 SSx 脚用作帧同步脉冲 (FSYNC)功能。控制位 SPIFSD 决定 SSx 引脚是输入还是输出 (即,模块是接收还是 产生帧同步脉冲)。帧脉冲在一个 SPI 时钟周期内是高 电平有效脉冲。当帧同步使能时,仅在 SPI 时钟的下一 个发送边沿开始发送数据。
注: 发送缓冲器(SPIxTXB)和接收缓冲器
SPIxRXB)都映射到相同的寄存器地址
SPIxBUF
2006 Microchip Technology Inc. 初稿 DS70143B_CN91
dsPIC30F6011A/6012A/6013A/6014A

14-1 SPI 框图

内部
数据总线
SPIxBUF
接收
SPIxSR
SDIx
SDOx
SS和FSYNC
SSx
SCKx
注:x = 1 或 2
bit 0
控制

14-2 SPI / 从器件连接

SPI 主器件
移位 时钟
时钟 控制
SDOx
SPIxBUF
发送
边沿 选择
SDIy
辅助
预分频器
1:1 – 1:8
使能主时钟
SPI 从器件
预分频器
1, 4, 16, 64
CY
F
串行输入缓冲器
SPIxBUF
移位寄存器
SPIxSR
MSb
处理器 1
注:x = 1 或 2y = 1 或 2
LSb
SDIx
SCKx
串行时钟
SDOy
SCKy
串行输入缓冲器
SPIyBUF
移位寄存器
SPIySR
MSb
LSb
处理器 2
DS70143B_CN92 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

14.3 从选择同步

SSx 引脚允许同步从模式。必须使用 SSx 引脚控制使能
位把 SPI 配置为 SPI 从模式 (SSEN = 1)。当 SSx
脚为低时,使能发送和接收且驱动 SDOx 引脚。当 SSx
引脚变高时,将不再驱动 SDOx 引脚。另外,可以重新
同步 SPI 模块,所有的计数器 / 控制电路都将复位。于
是,当 SSx
开始,即使 SSx
引脚再次为低时,发送 / 接收又将从 MSb
是在发送 / 接收过程中变高。

14.4 CPU 休眠模式期间的 SPI 工作

在休眠模式期间,SPI 模块关闭。SPIx 模块正在进行处
理时,如果 CPU 进入休眠模式,则发送 / 接收将中止。
在休眠模式下,发送器和接收器将停止。但进入或退出
休眠模式不影响寄存器内容。

14.5 CPU 空闲模式期间的 SPI 工作

当器件进入空闲模式时,所有的系统时钟源继续工作。 SPISIDL 位(SPIxSTAT<13>)选择 SPI 模块在空闲模 式下是停止工作还是继续工作。 如果 SPISIDL = 0,模 块将继续工作。如果 SPISIDL = 1,模块将停止。
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第93
DS70143B_CN94 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

14-1 SPI1 寄存器映射

SFR
名称
SPI1STAT 0220 SPIEN
SPI1CON 0222
SPI1BUF 0224 发送和接收缓冲器 0000 0000 0000 0000
地址 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 复位状态
SPISIDL SPIROV SPITBF SPIRBF 0000 0000 0000 0000
FRMEN SPIFSD DISSDO MODE16 SMP CKE SSEN CKP MSTEN SPRE2 SPRE1 SPRE0 PPRE1 PPRE0 0000 0000 0000 0000

14-2 SPI2 寄存器映射

SFR 名称 地址 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 复位状态
SPI2STAT 0226 SPIEN
SPI2CON 0228
SPI2BUF 022A 发送和接收缓冲器 0000 0000 0000 0000
SPISIDL SPIROV SPITBF SPIRBF 0000 0000 0000 0000
FRMEN SPIFSD DISSDO MODE16 SMP CKE SSEN CKP MSTEN SPRE2 SPRE1 SPRE0 PPRE1 PPRE0 0000 0000 0000 0000
注: 寄存器中各位的说明,请参阅《dsPIC30F
系列参考手册》
DS70046D_CN)。
dsPIC30F6011A/6012A/6013A/6014A

15.0 I2C 模块

注:本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F
I2C 模块(16位接口)为 I2C 串行通信标准的从模式和多
主器件模式提供完全的硬件支持。
模块具有以下主要特性:
2
C 接口支持主、从模式工作。
•I
•I2C 从模式支持 7 位和 10 位地址。
2
•I
C 主模式支持 7 位和 10 位地址。
•I2C 端口允许主器件和从器件之间的双向传输。
•I2C 端口的串行时钟同步可以用作握手机制来暂停
和继续串行传输 (SCLREL 控制)。
2
C 支持多主器件工作;检测总线冲突并相应地进
•I
行仲裁。

15.1 功能说明

硬件完全实现了 I2C 标准和快速模式规范的全部主从功
能,以及 7 位和 10 位寻址。
从而, I
可作为 I
系列参考手册》
2
C 模块既可作为 I2C 总线上的主器件工作,也
2
C 总线上的从器件工作。
DS70046D_CN)。
15.1.1 各种 I2C 模式
支持 I2C 模块工作在以下模式:
2
•7位地址的 I
•10位地址的 I
C 从模式
2
C 从模式
•7位或 10 位地址的 I2C 主模式
2
参见图 15-1 中的 I
C 编程模型。
15.1.2 I2C 模块的引脚配置
I2C 有一个双引脚接口,SCL 引脚是时钟线,SDA 引脚
是数据线。
15.1.3 I2C 寄存器
I2CCON I2CSTAT 分别是控制寄存器和状态寄存器。 I2CCON 寄存器是可读且可写的。I2CSTAT 的低 6 位是
只读的,它的其余位则是可读且可写的。
I2CRSR 是移位寄存器,用来对数据进行移位。I2CRCV 是接收缓冲寄存器,可写入、读出数据字节,如图 15-1 所示。 I2CTRN 是发送寄存器,发送操作期间,字节将 会写入 I2CTRN,如图 15-2 所示。
I2CADD 寄存器存放从地址。状态位 ADD10 表明是否为 10 位地址模式。I2CBRG 用来保存波特率发生器的重载
值。
在进行接收时,I2CRSR 和 I2CRCV 一起形成双缓冲接 收器。在 I2CRSR 接收到一个完整的字节后,字节被送 至 I2CRCV 并产生中断脉冲。在发送期间, I2CTRN 不 是双缓冲的。

15-1 编程模型

Bit 15
Bit 15
Bit 9
Bit 8
Bit 7
Bit 7
注: 10 位寻址方式下,在重复启动条件之
后,用户只需匹配前 7 位地址。
I2CRCV(8 位)
Bit 0
I2CTRN(8 位)
Bit 0
I2CBRG(9 位)
Bit 0
I2CCON(16 位)
Bit 0
I2CSTAT(16 位)
Bit 0
I2CADD(10 位)
Bit 0
2006 Microchip Technology Inc. 初稿 DS70143B_CN 第95
dsPIC30F6011A/6012A/6013A/6014A
15-2 I2C™ 框图
内部
数据总线
SCL
SDA
移位 时钟
启动、重复启动和
I2CRCV
I2CRSR
匹配检测
I2CADD
启动和
停止位检测
停止位产生
冲突 检测
LSB
地址匹配
控制逻辑
I2CSTAT
移位 时钟
应答 产生
时钟低电平
时间延长
I2CTRN
重载 控制
BRG 向下
计数器
LSB
FCY
I2CBRG
I2CCON
DS70143B_CN96 初稿 2006 Microchip Technology Inc.
dsPIC30F6011A/6012A/6013A/6014A

15.2 I2C 模块地址

I2CADD 寄存器包含从模式地址,它是 10 位宽的寄存
器。
如果 A10M 位(I2CCON<10>)为 0,模块把地址解释
7 位地址。在接收地址时,将收到的地址与 I2CADD
寄存器中的低 7 位进行比较。
如果 A10M 位为 1,将认为地址是 10 位地址。在接收
地址时,将收到的地址与二进制数 “11110 A9 A8” (其中 A9 A8 I2CADD 的最高两位)进行比较。如
果匹配的话,下一个地址将与 I2CADD 的低 8 位进行比
较,这是 10 位寻址协议规定的。
2
dsPIC30F 器件支持的 7 位 I
0x00 0x01-0x03 保留 0x04-0x77 有效 7 位地址 0x78-0x7b 有效 10 位地址 (低 7 位) 0x7c-0x7f 保留
广播呼叫地址或启动字节
C 从地址:

15.3 I2C 7 位从模式的工作

一旦使能 (I2CEN = 1),从模块将等待一个启动位出
现 (即, I
个位将移入I2CRSR,然后地址将与I2CADD进行比较。
7 位寻址方式下 (A10M = 0), 位 I2CADD<6:0>
I2CRSR<7:1> 进行比较,而 I2CRSR<0> R_W
位。所有进入的位都是在 SCL 的上升沿采样的。
如果地址匹配的话,将发送一个应答,在第九个位 (ACK
地址被装载到 I2CRCV 缓冲器, RBF 位置 1
15.3.1 从模式发送
如果收到的 R_W 位为 1,串行端口将进入发送模式。模
块将在第九位发送 ACK
CPU I2CTRN 进行响应为止。通过把 SCLREL 1
SCL,而后数据的 8 个位被移出。数据位在 SCL
降沿移出,因此 SCL 为高时 SDA 有效。将在第九个时
钟脉冲的下降沿发出中断脉冲,而与从主器件接收到的
ACK
2
C 模块 “空闲”)。检测到启动位之后, 8
)的下降沿,从事件中断标志 (SI2CIF)置 1
,并使 SCL 保持为 0,直到
状态无关。
如果 RBF 标志置 1,表明 I2CRCV 仍然存有前一次收到 的数据(RBF = 1),则不发送 ACK 中断脉冲。如果出现溢出,I2CRSR 的内容不会被装载 到 I2CRCV 中。
注: 如果 I2COV 位 为 1 且 RBF 标志为 0,将
装入 I2CRCV。在这 种 情 况下,要 对 I2CRCV进行读操作,但在下一次接收操作 发生之前,不会清零 I2COV 位。不发送应 答(ACK = 1),但 I2CRCV 位会被更新。
;然而,仍将产生

15.4 I2C 10 位从模式的工作

10 位寻址方式下,基本的接收和发送操作与 7 位寻 址方式下的操作相同。不过,地址匹配的判据更加复 杂。
2
C规范要求,对于写操作,必须在一个启动位后跟两个
I
地址字节来寻址从器件。
A10M控制位置1 表明 I2CADD中的地址是10 位地址,而 不是 7 位地址。报文地址首字节的地址检测协议,对于 7位和 10 位报文地址而言,是完全相同的,但首字节各位 进行比较的机制不同。
I2CADD 存放完整的 10 位地址。在接收到启动位后的地 址时, I2CRSR <7:3> 与立即数 11110 (缺省 10 位地 址)进行比较,I2CRSR<2:1> I2CADD<9:8> 进行比 较。如果出现匹配且 R_W = 0,则发出中断脉冲。 ADD10 位清零,表明地址部分匹配。如果地址不匹配, 或者 R_W = 1,则 ADD10 位清零,模块返回到空闲状 态。
然后,接收地址的低字节,与 I2CADD<7:0> 进行比较。 如果出现匹配,则产生中断脉冲且置 1 ADD10 位,表 明 10 位地址完全匹配。如果地址不匹配的话, ADD10 位清零,模块返回到空闲状态。
15.4.1 10 位地址从模式接收
一旦以上述方式使用完整的10 位地址寻址到从器件(我 们把这个状态叫做“PRIOR_ADDR_MATCH”),主 器 件就可以开始送数据字节,从器件接收。
15.3.2 从模式接收
如果地址匹配时,接收到的 R_W 位是 0,就将启动接
收模式。在 SCL 上升沿采样进入的位。接收到 8 个位之
后,如果 I2CRCV 未满或者 I2COV 没有置 1I2CRSR
中的数据将被送至 I2CRCV。在第九个时钟发送 ACK
2006 Microchip Technology Inc. 初稿 DS70143B_CN97
dsPIC30F6011A/6012A/6013A/6014A
15.4.2 10 位地址从模式发送
一旦寻址到从器件,主器件就可以产生重复的启动位, 复位地址的高字节,并置 1 R_W 位,但不产生停止位, 于是开始进行从器件发送操作。

15.5 自动时钟低电平时间延长

当模块工作在从模式下时,通过时钟低电平时间延长, 模块能够同步读缓冲器与写主器件。
15.5.1 发送时钟低电平时间延长
10 位或 7 位地址发送模式下,如果 TBF 位清零(这 表明缓冲器为空) ,则在第九个时钟的下降沿后清零 SCLREL 位,就实现了时钟延长。
在从发送模式下,始终进行时钟延长,无论 STREN 位 的状态为何。
在发送序列的第九个时钟之后,发生时钟同步。如果器 件在第九个时钟的下降沿采样到 ACK 然清零的话,则 SCLREL 位自动清零。 SCLREL 的清 零,将使得 SCL 线变低。在允许继续发送之前,用户中 断服务程序必须置 1 SCLREL 位。通过使 SCL 线保持 为低,在主器件启动另一个发送序列之前,用户就有时 间执行中断服务程序并载入 I2CTRN 的内容。
1: 如果用户载入 I2CTRN 的内容,在第九个
时钟下降沿之前置 1 TBF 位,则 SCLREL 位将不会被清零,也不会发生时钟延长。
2: 可以在软件中置 1 SCLREL 位,无论 TBF
位的状态为何。
15.5.2 接收时钟低电平时间延长
I2CCON 寄存器中的 STREN 位可以用来使能从件接收 模式下的时钟低电平时间延长。当 STREN 位置 1 时, SCL 引脚将在每个数据接收序列结束后保持为低。
15.5.3 7 位寻址时的时钟低电平时间延长
STREN = 1
从接收模式下,当 STREN 1 时,缓冲器已满时 SCL 线保持为低。延长 SCL 输出低电平时间的方法,对于使 用 7 位和 10 位寻址的从接收模式是相同的。
在接收序列第九个时钟之后进行时钟低电平时间延长。 在 ACK 序列末端的第九个时钟的下降沿,如果 RBF 位 置 1 的话, SCLREL 位将自动清零,这将强制 SCL 输 出保持为低。在允许继续接收之前,用户中断服务程序 必须置 1 SCLREL 位。通过使 SCL 线保持为低,在主 器件启动另一个接收序列之前,用户就有时间执行中断 服务程序并读出 I2CRCV 的内容。这将防止缓冲器溢 出。
,并且 TBF 位仍
1: 如果用户读 I2CRCV 的内容,在第九个时
钟下降沿之前置 1 RBF 位,则 SCLREL 位 将不会被清零,也不会发生时钟延长。
2: 可以在软件中置 1 SCLREL 位,无论 RBF
位的状态为何。为了防止溢出,在下一个 接收序列之前,用户应该在中断服务程序 中清零 RBF 位。
15.5.4 10 位寻址时的时钟低电平时间延长 (STREN = 1
在寻址过程中自动进行时钟低电平时间延长。由于模块 有寄存器存放完整的地址,协议不必等待地址更新。
寻址过程完成后,每个数据接收或发送序列都要进行时 钟延长,如前所述。
15.6 软件控制的时钟低电平时间延长
STREN = 1
STREN 位为 1 时,软件可清零 SCLREL 位,从而软 件能够控制时钟延长。思路是把写 SCLREL 位的操作与 SCL时钟进行同步。清零 SCLREL 位不会使SCL输出保 持为低,除非模块检测到 SCL 输出的下降沿且采样到
SCL 为 低。在 SCL 线采样为低时,如果用户清零 SCLREL 位,则 SCL 输出将保持为低。SCL 输出将保持
为低,一直到 SCLREL 位置 1,且 I 器件都已经释放了 SCL。这确保了写 SCLREL 位的操 作,不会违背 SCL 的最小高电平时间要求。
如果 STREN 位为 0,软件对 SCLRE 位的写操作将被 忽略,不会对 SCLREL 位产生影响。
2
C 总线上所有其他

15.7 中断

I2C 模块产生两个中断标志:MI2CIF(I2C 主中断标志) 和 SI2CIF I 在主器件报文事件完成时置1(从而激活中断)。SI2CIF 中断标志,在检测到发往从器件的报文时置 1 (从而激 活中断)。
2
C 从中断标志)。 MI2CIF 中断标志,会
DS70143B_CN98 初稿 2006 Microchip Technology Inc.
Loading...