MICROCHIP dsPIC30F201 Technical data

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

1.0 器件概述

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

1-1 dsPIC30F2010 框图

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

1-1:引I/O 描述

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

2.0 CPU 架构综述

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

2.1 内核概述

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

2.2 编程模型

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

2.2.1 软件堆栈指针 / 帧指针

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

2.2.2 状态寄存器

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

2.2.3 程序计数器

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

2.3 除法支持

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

2-1 除法指令

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

2.4 DSP 引擎

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

2-2 DSP 指令汇总

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

2.4.1 乘法器

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

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

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

2.4.3 桶形移位寄存器

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

3.0 存储器构成

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

3.1 程序地址空间

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

3-1 程序空间地址构成

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

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

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

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

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

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

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

3.2 数据地址空间

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

3.2.1 数据存储空间映射

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

3.2.2 数据空间

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

3.2.3 数据空间宽度

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

3.2.4 数据对齐

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

3.2.5 NEAR 数据空间

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

3.2.6 软件堆栈

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

4.0 地址发生器单元

注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F 系列参考手册》(DS70046E_CN)。有关器件
指令集和编程的更多信息,请参阅 《dsPIC30F/33F 程序员 参考手册》(DS70157B_CN)。
dsPIC DSC 内核包含两个独立的地址发生器单元:X AGU Y AGU。Y AGU 仅支持 DSP MAC 类指令的字数 据读取。dsPIC DSC AGU 支持如下三种数据寻址类型:
线性寻址
模 (循环)寻址
位反转寻址
线性和模数据寻址模式可应用于数据空间或程序空间。 位反转寻址只能用于数据空间地址。

4.1 指令址模式

寻址模式经过优化可以支持各指令的具体功能,基本的 寻址模式在表 4-1 中给出。MAC 类指令中提供的寻址模 式,与其他指令类型中的寻址模式略有不同。

4.1.1 文件寄存器指令

大多数文件寄存器指令使用一个 13 位地址字段 (f)来 直接寻址数据存储器中的前 8192 字节 (near 数据空 间)。大多数文件寄存器指令使用工作寄存器 W0W0 在这些指令中表示为 WREG。目的寄存器通常是同一个 文件寄存器或者 WREGMUL 指令除外),把结果写入 寄存器或寄存器对。使用 MOV 指令能够获得更大的灵活 性,可以访问整个数据空间。
4-1 支持的基本寻址模式
寻址模式 说明
文件寄存器直接寻址 寄存器直接寻址 直接访问寄存器的内容。 寄存器间接寻址 Wn 的内容形成有效地址 (EA)。 执行后修改的寄存器间接寻址 Wn 的内容形成 EA。然后用一个常量值来修改 Wn (递增或递减)。 执行前修改的寄存器间接寻址 先用一个有符号常量值修改 Wn (递增或递减), Wn 的内容形成 EA
寄存器偏移量的寄存器间接寻址 立即数偏移量的寄存器间接寻址
明确指定文件寄存器的地址。
Wn Wb 的和形成 EA Wn 和立即数的和形成 EA
2007 Microchip Technology Inc. DS70118G_CN 第31
dsPIC30F2010

4.1.2 MCU 指令

三操作数 MCU 指令的形式是:
操作数 3 = 操作数 1 < 功能 > 操作数 2
其中,操作数 1 始终是工作寄存器(即,寻址模式只能 是寄存器直接寻址),称为 Wb。操作数 2 可以是一个 W 寄存器,取自数据存储器或一个 5 位立即数。 结果位 置 (操作数 3)可以是 W 寄存器或地址单元。 MCU 指 令支持下列寻址模式:
寄存器直接寻址
寄存器间接寻址
执行后修改的寄存器间接寻址
执行前修改的寄存器间接寻址
•5位或 10 位立即数寻址
注: 并非所有的指令都支持上面给出的全部寻
址模式。各条指令可能支持这些寻址模式 的某些模式,指令不同支持的寻址模式可 能不同。

4.1.3 传送指令和累加器指令

与其他指令相比,传送和 DSP 累加器类指令提供了更 为零活的寻址模式。除了大多数 MCU 指令支持的寻址 模式以外,传送和累加器指令还支持寄存器偏移量的寄 存器间接寻址模式,这也叫做寄存器变址寻址模式。
注: 对于 MOV 指令,指令中指定的寻址模式对
于源寄存器和目的寄存器有效地址,可以 是不同的。然而, 4 Wb (寄存器偏移 量)字段为源寄存器和目寄存器所共用(但 通常只由源寄存器或目的寄存器之一使 用)。
概括地说,传送指令和累加器指令支持下列寻址模式:
寄存器直接寻址
寄存器间接寻址
执行后修改的寄存器间接寻址
执行前修改的寄存器间接寻址
寄存器偏移量的寄存器间接寻址 (变址寻址)
立即数偏移量的寄存器间接寻址
•8位立即数寻址
•16位立即数寻址
注: 并非所有的指令都支持上面给出的全部寻
址模式。各条指令可能支持这些寻址模式 的某些模式,指令不同支持的寻址模式可 能不同。

4.1.4 MAC 类指令

双源操作数 DSP 指令(CLRED、EDAC、MAC、MPY MPY.NMOVSAC 和 MSC),也叫做 MAC 类指令,它们使 用一组简化的寻址模式,允许用户通过寄存器间接寻址 表高效地对数据指针进行操作。
双源操作数预取寄存器必须是集合 {W8, W9, W10,
W11} 的成员。对于数据读取,W8 和 W9 总是分配给 X RAGU,而 W10 和W11 则始终用于 Y AGU。从而,产生
的有效地址 (无论是在修改之前还是之后),对于 W8W9 必须是 X 数据空间中的有效地址,对于 W10 W11 则必须是 Y 数据空间中的有效地址。
注: 带寄存器偏移量的寄存器间接寻址,仅可
用于 W9 (在 X 空间中)和 W11 (在 Y 空 间中)。
概括地说, MAC 类指令支持下列寻址模式:
寄存器间接寻址
执行后修改 (修改量为 2)的寄存器间接寻址
执行后修改 (修改量为 4)的寄存器间接寻址
执行后修改 (修改量为 6)的寄存器间接寻址
带寄存器偏移量的寄存器间接寻址 (变址寻址)

4.1.5 其他指令

除了上述的各种寻址模式之外,一些指令使用各种大小 的立即数。例如, BRA (转移)指令使用 16 位有符号 立即数来直接指定转移的目标,而 DISI 指令使用一个
14 位无符号立即数字段。在一些指令中,比如 ADD Acc,操作数的来源和运算结果已经暗含在操作码中。 某些操作,比如 NOP,没有任何操作数。
DS70118G_CN 32  2007 Microchip Technology Inc.
dsPIC30F2010

4.2 模寻址

模寻址模式,是一种使用硬件来自动支持循环数据缓冲 区的方法。目的是在执行紧密循环代码时 (这在许多 DSP 算法中很典型),不需要用软件来执行数据地址边 界检查。
可以在数据空间或程序空间中进行模寻址(因为这两种 空间的数据指针机制本质上是相同的)。每个 X (也提 供指向程序空间的指针)和 Y 数据空间中都可支持一个 循环缓冲区。模寻址可以对任何 W 寄存器指针进行操 作。然而,最好不要将 W14 W15 用于模寻址,因为 这两个寄存器分别用作堆栈帧指针和堆栈指针。
总的来说,任何特定的循环缓冲区只能配置为单向工 作,因为根据缓冲区的方向,对缓冲区起始地址(对于 递增缓冲区)或结束地址(对于递减缓冲区)有某些限 制。
使用限制的唯一例外是那些长度为 2 的幂的缓冲区。这 些缓冲区满足起始和结束地址判据,它们可以双向工作
(即,在低地址边界和高地址边界上都将进行地址边界
检查)。

4.2.1 起始地址和结束地址

模寻址机制要求指定起始和结束地址,并把它们载入 16 位模缓冲区地址寄存器 (XMODSRT、 XMODEND、 YMODSRT YMODEND,见表 3-3)中。
注: Y 空间模寻址的 EA 计算使用字长度的数据
(每个 EA LSb 始终清零)。
循环缓冲区的长度没有直接指定,相应的起始地址、结 束地址之差可以确定长度。循环缓冲区最大长度为 32K 字(64KB)。

4.2.2 W 地址寄存器选择

模寻址和位反转寻址控制寄存器 MODCON<15:0> 中包 含使能标志以及指定 W 地址寄存器的 W 寄存器字段。
XWM YWM字段选择对哪些寄存器进行模寻址。如果 XWM = 15,则禁止 X RAGU 和 X WAGU 模寻址。类似
地,如果 YWM = 15,禁止 Y AGU 模寻址。
要对其进行模寻址的X 地址空间指针W 寄存器(XWM) 位于 MODCON<3:0> 中(见表 3-3)。 当 XWM 被设置 为除15之外的任何值且XMODEN 位(MODCON<15>1 时, X 数据空间的模寻址被使能。
要对其进行模寻址的 Y 地址空间指针 W 寄存器(YWM 位于 MODCON<7:4> 中。当 YWM 被设置为除 15 之外 的任何值且 YMODEN 位(MODCON<14>)置 1 时, Y 数据空间的模寻址被使能。
2007 Microchip Technology Inc. DS70118G_CN 33
dsPIC30F2010
4-1 模寻址操作示例
字节 地址
0x1100
0x1163
起始地址 结束地址 长度
=
0x0032
= 0x11 = 0x11
个字
00
63
MOV #0x1100,W0 MOV W0, XMODSRT ; 设定模起始地址
MOV #0x1163,W0 MOV W0,XMODEND ; 设定模结束地址
MOV #0x8001,W0 MOV W0,MODCON ; 使能 W1X AGU 用于模寻址
MOV #0x0000,W0 ;W0 保持缓冲区填充值 MOV #0x1110,W DO AGAIN,#0x3 MOV W0, [W1++] ; 填充下一个单元 AGAIN: INC W0,W0 ; 填充值递增 1
1 ;W1 指向缓冲区
1 ; 填充 50 个缓冲区单元
DS70118G_CN 34  2007 Microchip Technology Inc.

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. 使用的寻址模式是预递增或后递增的寄存器间接
寻址模式。
dsPIC30F2010
N
如果位反转缓冲区的长度是 M = 2 区起始地址的最后 N 位必须为零。
XB<14:0> 是位反转地址修改量或 “中心点”(pivot point),通常是一个常数。对于 FFT 计算,其值等于 FFT 数据缓冲区长度的一半。
注: 所有位反转 EA 的计算都使用字数据(每个
EA LSb 始终为零)。为了产生兼容地址
(字节),要相应地调整 XB 的值。
使能位反转寻址时,仅对预递增或后递增的寄存器间接 寻址、且仅对字数据写入,才会进行位反转寻址。对于 任何其他寻址模式或对于字节数据,不会进行位反转寻 址,而是生成正常的地址。在进行位反转寻址时,W 地 址指针的增量将始终加上地址修改量(XB),与寄存器 间接寻址模式相关的偏移量将被忽略。此外,由于要求 是字数据, EA LSb 被忽略 (且始终被清零)。
注: 不应同时使能模寻址和位反转寻址。如果用
户试图这么做的话,对于 X WAGU,位 反 转 寻址将优先,X WAGU 模寻址将被禁止。然 而,在 X RAGU 中,模寻址继续起作用。
如果通过置 1 BREN XBREV<15>)位使能了位反转 寻址,那么,在写 XBREV 寄存器之后,不应马上进行 要使用被指定为位反转指针的 W寄存器的间接读操作。
字节,则数据缓冲
4-2 位反转地址示例
b15 b14 b13 b12
b15 b14 b13 b12
b11 b10 b9 b8
b7 b6 b5 b4b11 b10 b9 b8
b7 b6 b5 b1
中心点
正常顺序的地址
b3 b2 b1 0
 围绕二进制值的中心  将左右交换位位置
b2 b3 b4 0
位反转后的地址
对于 16 字位反转缓冲区,XB = 0x0008
2007 Microchip Technology Inc. DS70118G_CN 35
dsPIC30F2010
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> 位反转地址修改量
32768 0x4000
16384 0x2000
8192 0x1000
4096 0x0800
2048 0x0400
1024 0x0200
512 0x0100
256 0x0080
128 0x0040
64 0x0020
32 0x0010
16 0x0008
8 0x0004
4 0x0002
2 0x0001
1: 大于 256 字的修改量将超出 dsPIC30F2010 器件的数据存储空间范围。
(1)
DS70118G_CN 36  2007 Microchip Technology Inc.
dsPIC30F2010

5.0 中断

注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F 系列参考手册》(DS70046E_CN)。有关器件
指令集和编程的更多信息,请参阅 《dsPIC30F/33F 程序员 参考手册》(DS70157B_CN)。
dsPIC30F2010 具有 24 个中断源和 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>... IPC11<10:0>
与 这些中断中的每一个中断有关的用户可分配中 断优先级集中存放在这 12 个寄存器中。
•IPL<3:0>
当前 CPU 优先级显式地存放在 IPL 位中。 IPL<3>CORCON寄存器中,而 IPL<2:0> 则在处 理器内核的状态寄存器 (SR)中。
• 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) 。这些向量存放在程序存储器从 0x000004 0x0000FE 的存储单元中(见图 5-1)。这 些存储单元中存有 24 位地址;为了保持鲁棒性,如果 在正常执行期间, PC 试图取任何这些字的话,就会产 生地址错误陷阱。这避免了执行随机数据; PC 递减时 意外进入向量空间,意外地把数据空间地址映射到了向 量空间,或者 PC 到达可用程序空间的末尾继而返回到 0x000000,都将执行随机数据。执行 GOTO 指令跳转到 向量空间,也将产生地址错误陷阱。
2007 Microchip Technology Inc. DS70118G_CN 37
dsPIC30F2010

5.1 中断优先级

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

5-1 dsPIC30F2010 中断向量表

中断编号
最高自然顺序优先级
0 8 INT0 – 外部中断 0 19IC1 输入中断 1 210OC1 输出比较 1 3 11 T1 – Timer 1 412IC2 输入捕捉 2 513OC2 输出比较 2 6 14 T2 – Timer 2 7 15 T3 – Timer 3 816SPI1
9 17 U1RX – 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 保留 20 28 保留 21 29 保留 22 30 保留 23 31 INT2 – 外部中断 2 24 32 保留 25 33 保留 26 34 保留 27 35 保留 28 36 保留 29 37 保留 30 38 保留 31 39 保留 32 40 保留 33 41 保留 34 42 保留 35 43 保留 36 44 INT3 – 外部中断 3 37 45 保留 38 46 保留 39 47 PWM – PWM 周期匹配 40 48 QEI – QEI 中断 41 49 保留 42 50 保留 43 51 FLTA – PWM 故障 A 44 52 保留
45-53 53-61 保留
最低自然顺序优先级
向量 编号
中断源
2
C 从中断
2
C 主中断
DS70118G_CN 38  2007 Microchip Technology Inc.
dsPIC30F2010

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. 如果在移位指令中,指定的移位位数大于允许的 最大移位位数,将产生陷阱。
2007 Microchip Technology Inc. DS70118G_CN 39
dsPIC30F2010
地址错误陷阱:
当发生任何下列情形时,将产生陷阱:
1. 试图访问不对齐的数据字。
2. 试图从未实现的数据存储单元取数据。
3. 试图访问未实现的程序存储单元。
4. 试图从向量空间取指令。
注: MAC 类指令中,数据空间被分成 X 数据
空间 和 Y 数据 空间,未实现的 X 空间包括 所有 Y 空间,而未实现的 Y 空间包括所有
X 空间。
5. 执行 BRA #literal 指令或 GOTO #literal
令,其中 literal是未实现的程序存储器地址。
6. 修改 PC 使其指向未实现的程序存储器地址后,
执行指令。 通过将值装入堆栈并执行 RETURN 令可以修改 PC
堆栈错误陷阱:
在下列条件下,产生堆栈错误陷阱:
1. 在堆栈指针中装入了一个大于堆栈限制的值(堆 栈溢出);堆栈限制值用户可编程,存放在
SPLIM 寄存器中。
2. 堆栈指针装入了一个小于 0x0800 的值 (简单堆
栈下溢)。
振荡器故障陷阱:
如果外部振荡器出现故障,器件使用备用的内部 RC 振 荡器工作,就会产生振荡器故障陷阱。

5.3.2 硬陷阱和软陷阱

在同一周期内可能会产生多个陷阱(例如,把不对齐的 字写入堆栈中的溢出地址)。这时, 图 5-1 所示的固定 优先级就会起作用;为了完全纠正错误,这可能需要用 户检查是否有其他等待处理的陷阱。
“软”陷阱包括优先级 8 11 的异常。算术错误陷阱 (优先级 11 )就属于这一类陷阱。
“硬”陷阱包括优先级 12 15 的异常。地址错误 (优
先级 12)、堆栈错误 (优先级 13)和振荡器错误 (优 先级 14)陷阱就属于这一类。
每个硬陷阱产生时,在执行任何代码之前,必须先对它 进行响应。 在优先级较高的陷阱正在等待处理、被响应
或正在处理过程中时,如果产生了较低优先级的陷阱, 就会产生硬陷阱冲突。
器件在硬陷阱冲突时自动复位。复位发生时,把 TRAPR 状态位(RCON<15>)置 1,从而在软件中可以检测到 这一条件。
5-1:陷
递减
IVT
自然顺序优先级
AIVT
复位 -GOTO 指令 复位 -GOTO 地址
保留
振荡器故障陷阱向量
地址错误陷阱向量 堆栈错误陷阱向量 数学错误陷阱向量
保留向量 保留向量
保留向量 中断 0 向量 中断 1 向量
— — —
中断 52 向量 中断 53 向量
保留 保留 保留
振荡器故障陷阱向量
堆栈错误陷阱向量 地址错误陷阱向量 数学错误陷阱向量
保留向量
保留向量
保留向量 中断 0 向量 中断 1 向量
— — —
中断 52 向量 中断 53 向量
0x000000 0x000002
0x000004
0x000014
0x00007E 0x000080 0x000082
0x000084
0x000094
0x0000FE
DS70118G_CN 40  2007 Microchip Technology Inc.
dsPIC30F2010

5.4 中断过程

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

5-2 中断堆栈帧

0x0000
PC<15:0>
SRL IPL3 PC<22:16>
< 空字 >
堆栈往高地址递增
015
W15CALL 前)
W15CALL 后)
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 外部中断请求

1: 用户能始终通过向 SR 写入一个新值以降
低优先级。必须在降低处理器中断优先级 之前,在中断服务程序中清除 IFSx 寄存器 中的中断标志位以避免重复中断。
2: 当处理中断时,IPL3 位(CORCON<3>
总是被清零。只有在进行陷阱处理时,该 位才将会被置 1
RETFIE (从中断返回)指令将把程序计数器和状态寄 存器内容弹出堆栈,将处理器恢复到中断处理之前的状 态。
中断控制器支持多达 5 个外部中断请求信号, INT0- INT4。这些输入是边沿敏感的;它们需要从低至高或从 高至低的跳变来产生中断请求。 INTCON2 寄存器的 3 个位 INT0EP-INT2EP,用来选择边沿检测电路的极性。

5.8 从休眠和空闲中唤醒

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

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

SFR 名称
INTCON1 0080 NSTDIS
INTCON2 0082 ALTIVT DISI
IFS0 0084 CNIF MI2CIF SI2CIF NVMIF ADIF U1TXIF U1RXIF SPI1IF T3IF T2IF OC2IF IC2IF T1IF OC1IF IC1IF INT0IF
IFS1 0086
IFS2 0088
IEC0 008C CNIE MI2CIE SI2CIE NVMIE ADIE U1TXIE U1RXIE SPI1IE T3IE T2IE OC2IE IC2IE T1IE OC1IE IC1IE INT0IE
IEC1 008E
IEC2 0090
IPC0 0094
IPC1 0096
IPC2 0098
IPC3 009A
IPC4 009C
IPC5 009E
IPC6 00A0
IPC7 00A2
IPC8 00A4
IPC9 00A6
IPC10 00A8
IPC11 00AA
图注: u = 未初始化位
注: 有关寄存器各位的描述,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN)。
Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
地址
OVATE OVBTE COVTE MATHERR ADDRERR STKERR OSCFAIL
INT2EP INT1EP INT0EP
—INT2IF— IC8IF IC7IF INT1IF
—FLTAIF— QEIIF PWMIF
—INT2IE— IC8IE IC7IE INT1IE
—FLTAIE— QEIIE PWMIE
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>
IC8IP<2:0> IC7IP<2:0> INT1IP<2:0>
INT2IP<2:0>
PWMIP<2:0>
FLTAIP<2:0> —QEIIP<2:0>
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 0000 0000 0100 0000 0000 0000 0000
dsPIC30F2010
复位状态
dsPIC30F2010

6.0 闪存程序存储器

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

6.1 在线串行编程 (ICSP

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

6-1:表NVM 寄存器寻址

DD)、

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
1
/0
NVMADRU
8
TBLPAG
8
程序计数器
寄存器
寄存器
24
NVMADR
工作寄存器
24位EA
寄存器
16位
16位
0
EA
EA
字节 选择
2007 Microchip Technology Inc. DS70118G_CN 43
dsPIC30F2010

6.4 RTSP 操作

dsPIC30F 闪存程序存储器组织成行和板 (panel)。每 行由 32 个指令字(96 字节)组成。每个板由 128 行组 成(4K × 24 个指令字)。 RTSP 允许用户每次擦除一 行(32 个指令字)、每次编程 32 条指令。 RTSP 可以 用来对多个程序存储器板进行编程,但在每个板的边界 处必须更改表指针。
程序存储器的每个板都包含写锁存器,它能够保存 32 个指令字的编程数据。在实际编程操作前,等待写入的 数据必须先装入板的写锁存器。要写入板的数据按顺序 装载到写锁存器中:指令 0,指令 1,依此类推。装载 的指令字必须始终来自 32 个指令字的地址边界。
RTSP 编程的基本步骤是先建立一个表指针,然后执行 一系列 TBLWT 指令,装载写锁存器。通过把 NVMCON 寄存器中的特殊位置 1,进行编程。装载 32 条指令需要
32 TBLWTL 4 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
寄存器,指定擦除或编程的程序存储器地 址。
DS70118G_CN 44 2007 Microchip Technology Inc.
dsPIC30F2010

6.6 编程操作

RTSP 模式下,对内部闪存进行编程或擦除需要完整 的编程过程。编程操作持续时间的标称值为 2 ms,编 程 操作结束之前,处理器将停顿 (等待) 。把 WR
NVMCON<15>)置 1 开始编程操作,操作结束后将
自动清零 WR 位。

6.6.1 闪存程序存储器的编程算法

用户一次可以擦除、编程闪存程序存储器的一行。一般 过程如下:
1. 读一行闪存程序存储器(32 个指令字),把读出 的数据作为数据 “镜像”保存到数据 RAM
2. 用期望的新数据更新数据镜像。
3. 擦除闪存程序存储器行。 a) 设置 NVMCON 寄存器以允许对闪存程序存
储器多字擦除,并置 1 WREN 位。
b) 把要擦除的行地址写入寄存器 NVMADRU/
NVMADR c) 把“55”写入 NVMKEY d) 把“AA”写入 NVMKEY e) 置 1 WR 位。这将开始擦除周期。 f) 在擦除周期中 CPU 将停顿。 g) 当擦除周期结束时 WR 位会被清零。
4. 从数据 RAM “镜像”中,把 32 个指令字的数据
写入闪存程序存储器写锁存器。
5. 32 个指令字写入闪存程序存储器。 a) 设置 NVMCON 寄存器以允许对闪存程序存
储器多字编程,并置 1 WREN 位。 b) 把“55”写入 NVMKEY c) 把“AA”写入 NVMKEY d) 置 1 WR 位。这将开始编程周期。 e) 在编程周期中 CPU 将停顿。 f) 当编程周期结束时 WR 位会被硬件清零。
6. 根据需要,重复步骤1 到5,对所需的闪存程序存
储器空间进行编程。

6.6.2 擦除程序存储器的一行

6-1 所示的代码序列,可以用来擦除一行程序存储器
32 个指令字)。
6-1 擦除程序存储器的一行
; 设置 NVMCON 进行擦除操作和多字写 ; 选择程序存储器并使能写操作
; 初始化指针以指向要被擦除的行
MOV #0x4041,W0 ; MOV W0
MOV #tblpage(PROG_ADDR),W0 ; MOV W0 MOV #tbloffset(PROG_ADDR),W0 ; 初始化页内 EA[15:0] 指针 MOV W0, NVMADR ; 初始化 NVMADR SFR DISI #5 ; 在以后的 5 个指令周期内阻止所有优先级 <7 的中断 MOV #0x55,W0 MOV W0 MOV #0xAA,W1 ; MOV W1 BSET NVMCON,#WR ; 开始擦除过程 NOP ; 在擦除之后插入两条 NOP 指令 NOP ; 命令结束
NVMCON ; 初始化 NVMCON SFR
,
NVMADRU ; 初始化 PM 页边界 SFR
,
NVMKEY ; 写 0x55 键
,
NVMKEY ; 0xAA
,
2007 Microchip Technology Inc. DS70118G_CN 45
dsPIC30F2010

6.6.3 装载写锁存器

6-2 所示的指令序列,可以用来装载 96 字节的写锁 存器。装载由表指针选择的写锁存器,需要 32 TBLWTL 指令和 32 TBLWTH 指令。
6-2 装载写锁存器
; 设置一个指针指向要写入的第一个程序存储单元 ; 选择程序存储器并使能写操作
MOV #0x0000,W0 ; MOV W0
MOV #0x6000,W0 ; 程序存储器地址示例 ; 执行 TBLWT 指令以写入锁存器 ; 0th_program_word
MOV #LOW_WORD_0,W2 ;
MOV #HIGH_BYTE_0,W3 ;
TBLWTL W2
TBLWTH W3 ; 1st_program_word
MOV #LOW_WORD_1,W2 ;
MOV #HIGH_BYTE_1,W3 ;
TBLWTL W2
TBLWTH W3 ; 2nd_program_word
MOV #LOW_WORD_2,W2 ;
MOV #HIGH_BYTE_2,W3 ;
TBLWTL W2
TBLWTH W3
; 31st_program_word
MOV #LOW_WORD_31,W2 ;
MOV #HIGH_BYTE_31,W3 ;
TBLWTL W2
TBLWTH W3
TBLPAG ; 初始化 PM 页边界 SFR
,
[W0] ; PM 低位字内容写入程序锁存器
,
[W0++] ; PM 高字节内容写入程序锁存器
,
[W0] ; PM 低位字内容写入程序锁存器
,
[W0++] ; 将 PM 高字节内容写入程序锁存器
,
[W0] ; 将 PM 低位字内容写入程序锁存器
,
[W0++] ; PM 高字节内容写入程序锁存器
,
[W0] ; 将 PM 低位字内容写入程序锁存器
,
[W0++] ; PM 高字节内容写入程序锁存器
,
注: 在例 6-2 中, W3 高字节的内容将不起作用。

6.6.4 启动编程过程

出于保护的目的,必须使用 NVMKEY 的写启动序列, 以便允许进行任何擦除或编程操作。在编程命令执行
后,用户必须等待一段时间 (编程时间),直至编程完 成。编程过程开始之后,紧接着的应该是两条 NOP 指 令。
6-3 启动编程过程
DISI #5 ; 在以后的 5 个指令周期内阻止所有优先级 <7 的中断
MOV #0x55,W0
MOV W0
MOV #0xAA,W1 ;
MOV W1
BSET NVMCON,#WR ; 开始擦除过程
NOP ; 在擦除之后插入两条 NOP 指令
NOP ; 命令结束
NVMKEY ; 写入 0x55 键
,
NVMKEY ; 写入 0xAA
,
DS70118G_CN 46 2007 Microchip Technology Inc.
2007 Microchip Technology Inc. DS70118G_CN 47
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>
NVMADRU 0764
NVMKEY 0766
NVMADR<23:16>
—KEY<7:0>
—PROGOP<6:0> 0000 0000 0000 0000
TWRI
图注: u = 未初始化位
注: 有关寄存器各位的描述,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN)。
uuuu uuuu uuuu uuuu 0000 0000 uuuu uuuu 0000 0000 0000 0000
dsPIC30F2010
dsPIC30F2010
注:
DS70118G_CN 48 2007 Microchip Technology Inc.
dsPIC30F2010

7.0 数据 EEPROM 存储器

注:本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F 系列参考手册》(DS70046E_CN)。有关器件
指令集和编程的更多信息,请参阅 《dsPIC30F/33F 程序员 参考手册》(DS70157B_CN)。
在整个 VDD 范围内的正常操作期间,数据 EEPROM 存 储器是可读且可写的。数据 EEPROM 存储器直接映射 到程序存储器地址空间。
用来读写闪存程序存储器的四个特殊功能寄存器,也用 来访问数据 EEPROM 存储器。如在第 6.5 节中所述, 这些寄存器是:
•NVMCON
• NVMADR
• NVMADRU
• NVMKEY
EEPROM 数据存储器允许读写单字和 16 字长的块。针
对数据存储器时, NVMADR NVMADRU 寄存器配 合使用,用来寻址要访问的 EEPROM 地址单元。
TBLRDL TBLWTL 指令用来读写数据 EEPROM dsPIC30F器件有最多1KB的数据EEPROM,地 址 范 围
0x7FFC00 0x7FFFFE
字写操作之前,应该先擦除相应的存储单元。写操作完 成通常需要 2 ms,不过它将随电压和温度的变化而变 化。
对数据 EEPROM 进行编程或擦除操作,不会停止指令 流。在启动另一次数据 EEPROM / 擦除操作之前,用 户需要等待一段适当的时间。在编程或擦除操作进行过 程中,尝试读数据 EEPROM 将返回不确定的数据。
控制位 WR 启动写操作,这与 闪存程序存储器写类似。 可通过软件置 1 WR 位,但不能对其清零。写操作完成 时,硬件将清零 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 ; MOV #HIGH_ADDR_WORD,W MOV W TBLRDL [ W0 ], W4 ;
1,TBLPAG
1
初始化指针
读数据
EEPROM
2007 Microchip Technology Inc. DS70118G_CN 49
dsPIC30F2010

7.2 擦除数据 EEPROM

7.2.1 擦除数据 EEPROM 的一块

为了擦除数据 EEPROM 的一块,首先 NVMADRU
NVMADR 寄存器必须指向要擦除的存储块。将 NVMCON 配置为擦除数据 EEPROM 块,并置 1 NVMCON寄存器中的WR位和WREN位。置1 WR 位,
启动擦除操作,如例 7-2 所示。
7-2:擦EEPROM 的一块
; 选择要擦除的数据 EEPROM 块,使能 WREN
MOV #4045,W0 MOV W0
; 在写入键序列后通过置 1 WR 位以启动擦除过程
DISI #5 ; 在以后的 5 个指令周期内阻止所有优先级 <7 的中断 MOV #0x55,W0 ;
MOV W0
MOV #0xAA,W
MOV W BSET NVMCON,#WR ; 启动擦除过程
NOP NOP
; 擦除过程将在 2mS 内完成。 CPU 在数据擦除周期中将不会处于停顿状态。 ; 用户可查询 WR 位的状态,使用 NVMIF 或定时器 IRQ 来确定擦除操作是否完成。
NVMCON ; 初始化 NVMCON SFR
,
NVMKEY ; 写入 0x55 键
,
1 ;
1
NVMKEY ; 写入 0xAA
,

7.2.2 擦除数据 EEPROM 的一个字

NVMADRU NVMADR 寄存器必须指向要擦除的存储
块。在 NVMCON 寄存器中,选择擦除数据 EEPROM 的一个字,置 1 WR 位和 WREN 位。置 1 WR 位,启
动擦除操作,如例 7-3 所示。
7-3:擦EEPROM 的一个字
; 选择要擦除的数据 EEPROM 字,使能 WREN
MOV #4044,W0 MOV W0
; 在写入键序列后通过置 1 WR 位以开始擦除周期。
DISI #5 ; 在以下的 5 个指令周期内阻止所有优先级 <7 的中断 MOV #0x55,W0 ; MOV W0 MOV #0xAA,W MOV W
BSET NVMCON,#WR ; 启动擦除过程 NOP NOP ; 擦除过程将在 2mS 内完成。 PU 在数据擦除周期中将不会处于停顿状态。 ; 用户可查询 WR 位的状态,使用 NVMIF 或定时器 IRQ 来确定擦除操作是否完成。
NVMCON
,
NVMKEY ; 写入 0x55 键
,
1 ;
1
NVMKEY ; 写入 0xAA
,
DS70118G_CN 50  2007 Microchip Technology Inc.
dsPIC30F2010

7.3 写数据 EEPROM

要写 EEPROM 数据存储单元,必须按照下列顺序进行:
1. 擦除数据 EEPROM 的字。 a) 在 NVMCON 寄存器中,选择字擦除数据
EEPROM,并置 1 WREN 位。
b) 把要擦除的字的地址写入 NVMADR/
NVMADRU c) 允许 NVM 中断 (可选)。 d) 把“55”写入 NVMKEY e) 把“AA”写入 NVMKEY f) 1 WR 位。这将开始擦除周期。 g) 查询 NVMIF 位或等待 NVMIF 中断。 h) 当擦除周期结束时 WR 位会被清零。
2. 把数据字写入数据 EEPROM 的写锁存器中。
3. 把 1 个数据字编程到数据 EEPROM 中。 a) 在 NVMCON 寄存器中,选择字编程数据
EEPROM,并置 1 WREN 位。 b) 允许 NVM 写完成中断 (可选)。 c) 把“55”写入 NVMKEY d) 把“AA”写入 NVMKEY e) 1 WR 位。这将开始编程周期。 f) 查询 NVMIF 位或等待 NVM 中断。 g) 当写周期结束时 WR 位会被清零。
对于每个字,如果上述序列 (把 0x55 写入 NVMKEY, 把 0xAA 写入 NVMCON,然后置 1 WR 位)没有严格 遵守的话,写操作不会启动。 强烈建议在这段代码执行 期间,禁止中断。
此外,必须置 1 NVMCON 中的 WREN 位来使能写操 作。这样的机制,防止由于不可预料的代码执行而意外 地写数据 EEPROM。除非在更新 EEPROM 时,否则 WREN 位应该始终保持清零。硬件不能清零 WREN位。
在写过程启动之后,清零 WREN 位将不会影响当前的 写周期。禁止把 WR 位置 1,除 非 WREN 位已置 1。必 须在前一条指令中置 1 WREN 位。不能在同一条指令中 置 1 WR WREN 位。
写周期结束时,硬件清零 WR 位,非易失性存储器写完 成中断标志位 (NVMIF)置 1。用户可以允许这个中 断,或者查询这个标志位。 NVMIF 必须由软件清零。

7.3.1 写数据 EEPROM 的一个字

一旦用户擦除了要编程的字,则表写指令用来写写锁存 器,如例 7-4 所示。
7-4:数EEPROM 字写入
; 指向数据存储器
MOV #LOW_ADDR_WORD,W0 ; 初始化指针 MOV #HIGH_ADDR_WORD,W1 MOV W1 MOV #LOW(WORD),W2 ; 获得数据
TBLWTL W2 ; NVMADR 捕捉上一次表访问地址 ; 选择要写的数据 EEPROM
MOV #0x4004,W0
MOV W0
; 写入键以允许写操作
DISI #5 ; 在以下 5 个指令周期内阻止所有优先级 <7 的中断
MOV #0x55,W0
MOV W0
MOV #0xAA,W1
MOV W1
BSET NVMCON,#WR ; 启动编程过程 NOP NOP ; 写过程将在 2mS 内完成。 CPU 在数据写周期中不会处于停顿状态。 ; 用户可查询 WR 位的状态,使用 NVMIF 或定时器 IRQ 来确定写操作是否完成。
TBLPAG
,
[ W0] ; 写入数据
,
NVMCON
,
NVMKEY ; 写入 0x55
,
NVMKEY ; 写入 0xAA
,
2007 Microchip Technology Inc. DS70118G_CN 51
dsPIC30F2010

7.3.2 写数据 EEPROM 的一个存储块

要写入数据 EEPROM 的一个存储块,应首先写入所有 16 个锁存器,然后设置 NVMCON 寄存器并对存储块进 行编程。
7-5:数EEPROM 块写入
MOV #LOW_ADDR_WORD,W0 ; 初始化指针 MOV #HIGH_ADDR_WORD,W1 MOV W1
MOV #data1,W2 ; 获取第 1 个数据 TBLWTL W2 MOV #data2,W2 ; 获取第 2 个数据 TBLWTL W2 MOV #data3,W2 ; 获取第 3 个数据 TBLWTL W2 MOV #data4,W2 ; 获取第 4 个数据 TBLWTL W2 MOV #data5,W2 ; 获取第 5 个数据 TBLWTL W2 MOV #data6,W2 ; 获取第 6 个数据 TBLWTL W2 MOV #data7,W2 ; 获取第 7 个数据 TBLWTL W2 MOV #data8,W2 ; 获取第 8 个数据 TBLWTL W2 MOV #data9,W2 ; 获取第 9 个数据 TBLWTL W2 MOV #data10,W2 ; 获取第 10 个数据 TBLWTL W2 MOV #data11,W2 ; 获取第 11 个数据 TBLWTL W2 MOV #data12,W2 ; 获取第 12 个数据 TBLWTL W2 MOV #data13,W2 ; 获取第 13 个数据 TBLWTL W2 MOV #data14,W2 ; 获取第 14 个数据 TBLWTL W2 MOV #data15,W2 ; 获取第 15 个数据 TBLWTL W2 MOV #data16,W2 ; 获取第 16 个数据 TBLWTL W2 MOV #0x400A,W0 ; 选择要进行多字写的数据 EEPROM
MOV W0 DISI #5 ; 在以后 5 个指令周期内阻止所有优先级 <7 的中断
MOV #0x55,W0 MOV W0
MOV #0xAA,W1 MOV W1
BSET NVMCON,#WR ; 启动写周期 NOP
NOP
TBLPAG
,
[ W0]++ ; 写入数据
,
[ W0]++ ; 写入数据
,
[ W0]++ ; 写入数据
,
[ W0]++ ; 写入数据
,
[ W0]++ ; 写入数据
,
[ W0]++ ; 写入数据
,
[ W0]++ ; 写入数据
,
[ W0]++ ; 写入数据
,
[ W0]++ ; 写入数据
,
[ W0]++ ; 写入数据
,
[ W0]++ ;写入数据
,
[ W0]++ ; 写入数据
,
[ W0]++ ; 写入数据
,
[ W0]++ ; 写入数据
,
[ W0]++ ; 写入数据
,
[ W0]++ ;写数据。 NVMADR 捕捉上一次表访问地址。
,
NVMCON ; 写入键以允许编程操作
,
NVMKEY ; 写入键 0x55
,
NVMKEY ; 写入键 0xAA
,

7.4 写校验

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

7.5 防止误写入

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

8.0 I/O 端口

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

8.1 并行 I/O PIO)端口

如果外设使能,并且外设正在使用其关联引脚时,引脚 将不再作为通用 I/O 引脚使用。这时,可以读 I/O 引脚, 但是对应并行端口位的输出驱动器将被禁止。如果外设 使能,但外设不在使用某引脚,则该引脚可以被端口驱 动。
所有的端口引脚,都有三个与端口引脚的操作直接相关 的寄存器。数据方向寄存器 (TRISx)决定引脚是输入 还是输出。如果数据方向位是 1,则引脚是输入。复位

8-1 共用端口的结构框图

外设模块
外设输入数据
外设模块使能
外设输出使能
外设输出数据
后,全部端口引脚均定义为输入。读锁存器 (LATx), 读的是锁存值;写锁存值,写的是锁存器(LATx)。 读 端口 (PORTx),读的是端口引脚值,写端口引脚,写 的是锁存器 (LATx)。
任何位及其关联的数据和控制寄存器,如果对于特定器 件而言是无效的话,则将被禁止。这意味着,相应的 LATx TRISx 寄存器以及端口引脚,都将读为零。
当端口引脚与另一个外设共用或与只定义为输入的功能 共用时,它将被视为专用端口,因为没有任何其他竞争 的输出资源。 INT4 引脚就是例子。
与外设共用引脚的并行 I/O PIO)端口一般屈从于外 设。外设的输出缓冲数据和控制信号提供给一对多路开 关。多路开关选择外设还是相关的端口将拥有 I/O 引脚 输出数据和控制信号的所有权。图 8-1 显示了端口是如 何与其他外设共用,以及与外设连接的相关 I/O 引脚单 元。表 8-1 给出了从 PORTB PORTF 的共用端口的 寄存器的格式。
输出多路开关
I/O 引脚单元
1
输出使能
0
数据总线
WR TRIS
WR LAT + WR 端口
PIO 模块
TRIS
LAT
读端口
QD
CK
TRIS 锁存器
QD
CK
数据锁存器
1
0
输出数据
I/O 端子
输入数据
2007 Microchip Technology Inc. DS70118G_CN 53
dsPIC30F2010

8.2 配置模拟端口引脚

使用 ADPCFG TRIS 寄存器控制 A/D 端口引脚的操 作。对于要用作模拟输入的端口引脚,必须将其相应的 TRIS 位置 1(输入)。如 果 TRIS 位清零(输出), 则将 转换数字输出电平 (V
当读取端口寄存器时,所有配置为模拟输入通道的引 脚,都将读为零 (低电平)。
配置为数字输入的引脚,将不会对模拟输入进行转换。 当将模拟电压加在任何定义为数字输入的引脚 (包括 ANx 引脚)上时,可能导致输入缓冲器消耗的电流超出 器件规范中规定的值。

8.2.1 I/O 端口读 / 写时序

在端口方向变化或端口写操作以及同一端口的读操作之 间需要一个指令周期的等待时间。通常情况下插入一条 NOP 指令。
8-1 端口读/写操作示例
MOV 0xFF00, W0 ; 将PORTB<15:8> MOV W0, TRISBB ; 将PORTB<7:0> NOP ; 延迟1 btssPORTB, #13;
OH 或 VOL)。
配置为输入
配置为输出
周期
下一条指令

8.3 输入电平变化通知模块

输入电平变化通知模块,使得 dsPIC30F 器件能够产生 中断请求并传递给处理器,以响应所选取输入引脚上的 状态变化。即便是在休眠模式下、时钟被禁止时,该模 块也能检测输入的状态变化。对于在输入状态变化时产 生中断请求,可以选择 (使能)的外部信号多达 22
CN0 CN21)。
DS70118G_CN 54 2007 Microchip Technology Inc.
2007 Microchip Technology Inc. DS70118G_CN 55

8-1 dsPIC30F2010 端口寄存器映射

SFR 名称
TRISB 02C6
PORTB 02C8
LATB 02CA
TRISC 02CC TRISC15 TRISC14 TRISC13
PORTC 02CE RC15 RC14 RC13
LATC 02D0 LATC15 LATC14 LATC13
TRISD 02D2
PORTD 02D4
LATD 02D6
TRISE 02D8
PORTE 02DA
LATE 02DC
TRISF 02DE
PORTF 02E0
LATF 02E2
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
地址
1110 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
TRISE8
RE8
LATE8
TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0
RB5 RB4 RB3 RB2 RB1 RB0
LATB5 LATB4 LATB3 LATB2 LATB1 LATB0
TRISD1 TRISD0
RD1 RD0
LATD1 LATD0
TRISE5 TRISE4 TRISE3 TRISE2 TRISE1 TRISE0
RE5 RE4 RE3 RE2 RE1 RE0
LATE5 LATE4 LATE3 LATE2 LATE1 LATE0
TRISF3 TRISF2
RF3 RF2
LATF3 LATF2
0000 0000 0000 1100 0000 0000 0000 0000 0000 0000 0000 0000
复位状态
0000 0000 0011 1111 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0111 0000 0000 0000 0000 0000 0000 0000 0000
0000 0001 0011 1111 0000 0000 0000 0000 0000 0000 0000 0000
图注: u = 未初始化位
注: 有关寄存器各位的描述,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN)。
8-2 输入电平变化
SFR
名称
CNEN
1
CNEN2 00C2
CNPU
1
CNPU2 00C6
Bit 15Bit 14Bit 13Bit 12Bit 11Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit
地址
00C0
CN
1
5IE CN14IE CN13IE CN12IE CN11IE CN10IE
00C4
1
5PUE CN14PUE CN13PUE CN12PUE CN11PUE CN10PUE
CN
通知寄存器映射 BIT 15-0
CN9IE CN8IE CN7IE CN6IE CN5IE CN4IE CN3IE CN2IE
CN9PUE CN8PUE CN7PUE CN6PUE CN5PUE CN4PUE CN3PUE CN2PUE
图注: u = 未初始化位
注: 有关寄存器各位的描述,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN)。
CN2
CN2
1
1
IE
PUE
CN20IE
CN20PUE
1
Bit 0
CN1IE
CN19IE CN18IE CN17IE CN16IE
CN1PUE
CN19PUE CN18PUE CN17PUE CN16PUE
CN0IE
CN0PUE
复位状态
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
dsPIC30F2010
dsPIC30F2010
注:
DS70118G_CN 56 2007 Microchip Technology Inc.
dsPIC30F2010

9.0 TIMER1 模块

注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F 系列参考手册》(DS70046E_CN)。
本章介绍了 16 位通用 Timer1 模块以及相关的工作模 式。图 9-1 给出了 16 Timer1 模块的简化框图。
注: Timer1 A 类定时器。请参见本文挡第
22.0 节“电气特性”中 A 类定时器的规范。
下面各小节将详细说明定时器的工作模式,包括其设 置、控制寄存器以及相应的框图。
Timer1模块是16位的定时器,可以用作实时时钟的时间 计数器,或者用作自由运行的时段定时器 / 计数器。 16 位定时器有下列模式:
•16位定时器
•16位同步计数器
•16位异步计数器
而且,支持下列操作特征:
定时器门控操作
可选择的预分频比设置
•CPU空闲和休眠模式下的定时器操作
16 位周期寄存器匹配时产生中断,或者在外部
门控信号下降沿产生中断
通过设定 16 SFR T1CON 中的相应位来决定这些工 作模式。图 9-1 所示为 16 Timer1 模块的框图。
16 位定时器模式:在 16 位定时器模式下,定时器将在每 个指令周期递增,直到等于 PR1 中预先装入的值,然后 复位至 0,继续计数。
CPU 进入空闲模式时,定时器将停止递增,除非 TSIDL T1CON<13>)位 = 0。如果 TSIDL = 1,则定 时器模块逻辑将在 CPU 空闲模式结束后继续递增。
16 位同步计数器模式:在 16 位同步计数器模式下,定时 器将在外部时钟信号的上升沿递增,外部时钟与内部时 钟同步。定时器计数,直到等于 PR1 中预先装入的值, 然后复位至 0,继续计数。
CPU 进入空闲模式时,定时器将停止递增,除非对 应的 TSIDL = 0。如果 TSIDL = 1,则定时器模块逻 辑将在 CPU 空闲模式结束后继续递增。
16 位异步计数器模式:在 16 位异步计数器模式下,定时 器将在外部时钟信号的上升沿递增。定时器计数,直到 等于 PR1 中预先装入的值,然后复位至 0,继续计数。
当定时器配置为异步工作模式时,且 CPU 进入空闲模 式的话,如果 TSIDL = 1,则定时器将停止递增。
2007 Microchip Technology Inc. DS70118G_CN 57
dsPIC30F2010

9-1 16 TIMER1 模块框图 (A 类定时器)

PR1
等于
比较器 x 16
T1IF
事件标志
SOSCO/
T1CK
0
1
TGATE
复位
LPOSCEN
TMR1
QD
CK
Q
门控 同步
TGATE
TCS
1 X
0 1
TSYNC
1
(3)
0
TGATE
TON
同步
TCKPS<1:0>
2
预分频器
1, 8, 64, 256
SOSCI

9.1 定时器门控操作

16 位定时器可以置为门控时间累加模式 (Gated Time Accumulation mode) 。该模式使得当门控输入信号
T1CK 引脚)为高电平时,内部 TCY 能够递增相应的
定时器。要使能该模式,必须把控制位 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 寄存器
清零 TON 位(T1CON<15>
器件复位,如 POR BOR
但是,如果定时器被禁止 (TON = 0),那么定时器的 预分频器将不会复位,因为预分频器的时钟停止了。
当写 T1CON 时,TMR1 不会被清零。当写 TMR1 寄存 器时, TMR1 将被清零。
CY
T
0 0

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

CPU 休眠模式期间,定时器将继续工作,如果:
定时器模块被使能 (TON = 1),且
定时器时钟源选用外部时钟 (TCS = 1),且
• TSYNC 位(T1CON<2>)为逻辑 0,这将外部时
钟源定义为异步的。
如果所有这三个条件都得到满足,定时器将继续计数, 直到等于周期寄存器中的值,然后复位至 0x0000
当定时器与周期寄存器之间匹配时,如果相应的定时器 中断允许位置 1 的话,将产生中断。
DS70118G_CN 58 2007 Microchip Technology Inc.
dsPIC30F2010

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
2007 Microchip Technology Inc. DS70118G_CN 第59
DS70118G_CN60 2007 Microchip Technology Inc.
9-1 TIMER1 寄存器映射
SFR 名称
TMR1 0100 Timer 1 寄存器
PR1 0102 周期寄存器 1
T1CON 0104 TON
地址
图注: u = 未初始化位
注: 有关寄存器各位的描述,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN)。
Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
—TSIDL — TGATE TCKPS1 TCKPS0 TSYNC TCS
dsPIC30F2010
复位状态
uuuu uuuu uuuu uuuu 1111 1111 1111 1111 0000 0000 0000 0000
dsPIC30F2010

10.0 TIMER2/3 模块

注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F 系列参考手册》(DS70046E_CN)。
本章介绍了 32 位通用定时器模块 (Timer2/3)以及相 关的工作模式。图 10-1 给出了 32 Timer2/3 模块的 简化框图。图 10-2 和图 10-3 分别为将 Timer2/3 配置成 的两个独立 16 位定时器 Timer2 Timer3 的框图。
注: Timer2 B 类定时器而 Timer3 C 类定
时器。请参见本文挡第 22.0 节“电气特性” 中相应类型定时器的规范。
Timer2/3 模块是 32 位定时器(可配置为两个 16 位定时 器),具有可选择的工作模式。这些定时器为其他外设 模块所使用,例如:
输入捕捉
输出比较 / 简单 PWM
对于定时器的工作模式,下面的各小节将详细说明其设 置和控制寄存器以及相应的框图。
32 位定时器有下列模式:
两个独立的 16 位定时器(Timer2 Timer3),支 持所有 16 位工作模式 (异步计数器模式除外)
一个 32 位定时器
一个 32 位同步计数器
此外,支持如下工作特性:
• ADC事件触发信号
定时器门控操作
可选择的预分频比设定
空闲和休眠模式下的定时器操作
32 位周期寄存器匹配时产生中断
通过设定 16 T2CON T3CON SFR 中的相应位来决 定这些工作模式。
对于 32 位定时器 / 计数器操作, Timer2 32 位定时 器的低位字,而 Timer3 是高位字。
注: 对于 32 位定时器操作, T3CON 控制位将
被忽略。设置和控制只使用 T2CON 控制 位 。对于 32 位定时器模块,使用的是 Timer2 时钟和门控输入,但是,中断产生 由 Timer3 中断标志位 (T3IF)反映,且中 断通过Timer3 中断允许位(T3IE)来允许。
16 位定时器模式:在 16 位模式下,Timer2 和 Timer3 以配置为两个独立的 16 位定时器。每个定时器均可设 置为 16 位定时器模式或 16 位同步计数器模式。这两种 工作模式的细节,请参见第 9.0 节“Timer1 模块”。
Timer2 Timer3 之间唯一的功能差异是, Timer2 提供 了时钟预分频器输出同步。这对于高频外部时钟输入很 有用。
32 位定时器模式:在 32 位定时器模式下,定时器在每个 指令周期递增,一直递增到与预先装入组合 32 位周期 寄存器PR3/PR2中的值匹配,然后复位至0,继续计数。
对于 Timer2/Timer3 对的同步 32 位读操作,读低位字
TMR2 寄存器)将导致高位字 (msw)被读取并锁存
到一个 16 位保持寄存器 (称作 TMR3HLD)。
对于同步 32 位写操作,必须首先写入保持寄存器
TMR3HLD)。如果后续操作是写 TMR2 寄存器的话,
TMR3HLD 的内容将传送并锁存到 32 位定时器
TMR3)的 MSB 中。
32 位同步计数器模式:在 32 位同步计数器模式下,定时 器将在外部时钟信号的上升沿递增,外部时钟信号与内 部时钟同步。定时器计数,一直递增到与预先装入组合 32 位周期寄存器PR3/PR2 中的值匹配,然后复位至 0 继续计数。
当定时器配置为同步计数器工作模式时,且 CPU 进入 空闲模式的话,定时器将停止递增,除非 TSIDL
T2CON<13>)位 = 0。如果 TSIDL = 1,定时器模块
逻辑将继续递增,直到 CPU 空闲模式终止。
2007 Microchip Technology Inc. DS70118G_CN 61
dsPIC30F2010

10-1 32 TIMER2/3 框图

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

10-2 16 TIMER2 框图 ( B 类定时器)

dsPIC30F2010
T2IF
事件标志
T2CK
0
1
TGATE
等于
复位
PR2
比较器 x 16
TMR2
Q
D
CK
Q
门控 同步
CY
T

10-3 16 TIMER3 框图 (C 类定时器)

TGATE
TCS
1 X
0 1
0 0
TGATE
TON
同步
TCKPS<1:0>
2
预分频器
1, 8, 64, 256
ADC 事件触发信号
T3IF
事件标志
TGATE
注: dsPIC30F2010 TIMER3 没有外部引脚输入。不应使用以下模式:
1. TCS = 1
2. TCS = 0 TGATE = 1 (门控时间累加)
等于
复位
0
1
见注
PR3
比较器 x 16
TMR3
QDCKTGATE
Q
同步
CY
T
TCS
1 X
0 1
0 0
TGATE
TON
TCKPS<1:0>
2
预分频器
1, 8, 64, 256
2007 Microchip Technology Inc. DS70118G_CN 第63
dsPIC30F2010

10.1 定时器门控操作

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

10.2 ADC 事件触发信号

32 位定时器 (TMR3/TMR2)与 32 位组合周期寄存 器(PR3/PR2)匹配时, 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 寄存器
清零任一 TON 位( T2CON<15> T3CON<15>
器件复位,如 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>)来允 许中断。
DS70118G_CN 64 2007 Microchip Technology Inc.
2007 Microchip Technology Inc. DS70118G_CN 65

10-1 TIMER2/3 寄存器映射

SFR 名称
TMR2 0106 Timer2 寄存器
TMR3HLD 0108 Timer3 保持寄存器 (仅适用于 32 位定时器操作)
TMR3 010A Timer3 寄存器
PR2 010C 周期寄存器 2
PR3 010E 周期寄存器 3
T2CON 0110 TON
T3CON 0112 TON
Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
地址
—TSIDL — TGATE TCKPS1 TCKPS0 T32 —TCS —
—TSIDL — TGATE TCKPS1 TCKPS0 —TCS —
复位状态
uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu 1111 1111 1111 1111 1111 1111 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000
图注: u = 未初始化位
注: 有关寄存器各位的描述,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN)。
dsPIC30F2010
dsPIC30F2010
注:
DS70118G_CN 66 2007 Microchip Technology Inc.
dsPIC30F2010

11.0 输入捕捉模块

注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F 系列参考手册》(DS70046E_CN)。
本章对输入捕捉模块和相关的工作模式进行了介绍。此 模块提供的工作特性可用于需要进行频率(周期)和脉 冲测量的应用场合。图 11-1 给出了输入捕捉模块的框 图。输入捕捉功能可用于以下模式:
频率 / 周期 / 脉冲测量
其他外部中断源

11-1 输入捕捉模式框图

ICx
引脚
预分频器
1, 4, 16
3
ICM<2:0>
模式选择
ICxCON
时钟
同步器
ICBNE, ICOV
ICI<1:0>
输入捕捉模块的关键工作特性是:
简单捕捉事件模式
•Timer2和 Timer3 模式选择
输入捕捉事件发生时产生中断
通过在 ICxCON 寄存器 (其中, x = 1,2,...,N)中设置 相应的位,选择上述工作模式。 dsPIC DSC 器件具有 多达 8 个捕捉通道 (即, N 的最大值为 8)。
注: dsPIC30F2010 器件具有 4 个捕捉输入——
IC1IC2IC7 IC8。这 4 个捕捉通道的 命名意在保持与其他 dsPIC DSC 器件的软 件兼容性。
16 16
1
ICxBUF
T3_CNT
0
边沿 检测 逻辑
来自通用定时器模块
FIFO
/
逻辑
中断 逻辑
T2_CNT
ICTMR
数据总线
注: 图中 “x”指的是与相应输入捕捉通道 1 N 相关的寄存器或位。
2007 Microchip Technology Inc. DS70118G_CN 67
1 标志位
ICxIF
ICxIF
dsPIC30F2010

11.1 简单捕捉事件模式

dsPIC30F 产品系列中的简单捕捉事件是:
在每个下降沿进行捕捉
在每个上升沿进行捕捉
在每第 4 个上升沿进行捕捉
在每第 16 个上升沿进行捕捉
在每个上升沿和下降沿进行捕捉
通过设置适当的位 ICM<2:0> ICxCON<2:0>),选择 上述简单输入捕捉模式。

11.1.1 捕捉预分频器

有四种输入捕捉预分频器设置,它们由位 ICM<2:0>
ICxCON<2:0>)指定。每当捕捉通道关闭时,预分频
器计数器将清零。另外,任何复位都将清零预分频器计 数器。

11.1.2 捕捉缓冲器操作

每个捕捉通道都有一个关联的 FIFO 缓冲器,缓冲器宽 16 位,深度为四级。有两个状态标志,提供 FIFO缓冲器 的状态:
•ICBNE——输入捕捉缓冲器非空
•ICOV—— 输入捕捉溢出
ICBFNE将在第一个输入捕捉事件发生时被置1,并且一
直保持置 1 状态,直到所有的捕捉事件都已从 FIFO 中 读出。每次从 FIFO 中读出一个字,余下的字将在缓冲 器中前进一个位置。
FIFO 已满 (FIFO 中有四个捕捉事件)时,如果在 读 FIFO 之前发生第五个捕捉事件,则将产生溢出,且 ICOV 位将被设置成逻辑 1。第五个捕捉事件将丢失,不 会存入 FIFO。而且在从缓冲器读出全部四个事件之前 不会再捕捉任何事件。
如果 FIFO 已空、且还没有收到新的捕捉事件,这时读
FIFO 将产生不确定的结果。

11.1.3 TIMER2 TIMER3 选择模式

输入捕捉模块有多达 8 个输入捕捉通道。每个通道均可 选择两个定时器 (Timer2 Timer3)之一作为时基。
通过特殊功能寄存器位 ICTMR ICxCON<7>),来进 行定时器资源的选择。对于输入捕捉模块, Timer3 是 缺省的可用定时器资源。

11.1.4 霍尔传感器模式

当输入捕捉模块设置为在每个边沿 (上升沿和下降沿, ICM<2:0> = 001)进行捕捉时,输入捕捉逻辑将执行下 列操作:
输入捕捉中断标志在每个边沿 (上升沿和下降沿) 置 1
捕捉时产生中断模式设置位 ICI<1:0> 被忽略,因为 每次捕捉都产生中断。
在这个模式下,不产生捕捉溢出。
DS70118G_CN 68  2007 Microchip Technology Inc.
dsPIC30F2010

11.2 休眠和空闲模式期间的输入捕捉工作

当器件在 CPU 空闲或休眠模式下时,输入捕捉事件将 使器件唤醒。如果允许中断,还将产生中断。
如果 ICM<2:0> = 111 且中断允许位置 1,那么当捕捉事 件发生时,输入捕捉模块将使 CPU 从休眠或空闲模式中 唤醒,这与使能的时钟无关。如果处理中断的条件已经 得到满足的话,前述的唤醒还将产生中断。唤醒特性可 以用来增加额外的外部引脚中断。

11.2.1 CPU 休眠模式下的输入捕捉

CPU 休眠模式允许输入捕捉模块以功能受到限制的方
式工作。在 CPU 休眠模式下, ICI<1:0> 位不适用,输 入捕捉模块只能用作外部中断源。
当器件处于休眠模式下时,为了使用输入捕捉模块,必 须把捕捉模块设置成仅在上升沿产生中断 (ICM<2:0> = 111)。在此模式下,4:1 或 16:1 的预分频比设定不适 用。

11.2.2 CPU 空闲模式下的输入捕捉

CPU 空闲模式允许输入捕捉模块以功能受到限制的方
式工作。在 CPU 空闲模式下,通过 ICI<1:0> 位选择的 中断模式是适用的,由控制位 ICM<2:0> 定义的 4:1 16:1 捕捉预分频比设定同样也适用。这个模式要求使能 所选择的定时器。此外, ICSIDL 位必须置为逻辑 0
CPU 空闲模式下,如果输入捕捉模块定义为 ICM<2:0> = 111,则输入捕捉引脚仅用作外部中断引 脚。

11.3 输入捕捉中断

输入捕捉通道具有根据选定的捕捉事件数来产生中断的 能力。通过控制位 ICI<1:0> ICxCON<6:5>)来设定 选定的捕捉事件数。
每个通道都有一个中断标志位(ICxIF)。各捕捉通道中 断变址位于相应的 IFSx 状态寄存器中。
通过相应捕捉通道中断允许位 (ICxIE)来允许中断; 捕捉通道中断允许位位于相应的 IEC 控制寄存器中。
2007 Microchip Technology Inc. DS70118G_CN 第69
DS70118G_CN70 2007 Microchip Technology Inc.

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

SFR 名称
IC1BUF 0140 输入捕捉 1 寄存器
IC1CON 0142 —ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> IC2BUF 0144 输入捕捉 2 寄存器
IC2CON 0146 —ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> IC3BUF 0148 输入捕捉 3 寄存器
IC3CON 014A —ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> IC4BUF 014C 输入捕捉 4 寄存器
IC4CON 014E —ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> IC5BUF 0150 输入捕捉 5 寄存器
IC5CON 0152 —ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> IC6BUF 0154 输入捕捉 6 寄存器
IC6CON 0156 —ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> IC7BUF 0158 输入捕捉 7 寄存器
IC7CON 015A —ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0> IC8BUF 015C 输入捕捉 8 寄存器
IC8CON 015E —ICSIDL— ICTMR ICI<1:0> ICOV ICBNE ICM<2:0>
地址
图注: u = 未初始化位
注: 有关寄存器各位的描述,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN)。
Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
dsPIC30F2010
复位状态
uuuu uuuu uuuu uuuu 0000 0000 0000 0000 uuuu uuuu uuuu uuuu 0000 0000 0000 0000 uuuu uuuu uuuu uuuu 0000 0000 0000 0000 uuuu uuuu uuuu uuuu 0000 0000 0000 0000 uuuu uuuu uuuu uuuu 0000 0000 0000 0000 uuuu uuuu uuuu uuuu 0000 0000 0000 0000 uuuu uuuu uuuu uuuu 0000 0000 0000 0000 uuuu uuuu uuuu uuuu 0000 0000 0000 0000
dsPIC30F2010

12.0 输出比较模块

注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F 系列参考手册》(DS70046E_CN)。
本章对输出比较模块和相关工作模式进行了介绍。此模 块提供的特性适用于需要以下工作模式的应用:
产生可变宽度输出脉冲
功率因数校正
12-1 给出了输出比较模块的框图。

12-1 输出比较模式框图

OCxRS
OCxR
输出比较模块的关键工作特性包括:
•Timer2和 Timer3 模式选择
简单输出比较匹配模式
双输出比较匹配模式
简单 PWM 模式
休眠和空闲模式下的输出比较
发生输出比较 /PWM 事件时将产生中断
通过设定 16 OCxCON SFR (其中 x = 1 2)中相 应的位可确定这些操作模式。
图中的 OCxRS OCxR 表示双比较寄存器。在双比较 模式下, OCxR 寄存器用于第一次比较而 OCxRS 用于 第二次比较。
1 标志位
OCxIF
输出
逻辑
QS
R
OCx
比较器
OCTSEL
0
来自通用定时器模块
TMR2<15:0>
注: 图中 ‘x’指的是与相应输出比较通道 1 2 相关的寄存器。
1
TMR3<15:0>
0
T2P2_MATCH
OCM<2:0>
模式选择
1
T3P3_MATCH
3
输出使能
OCFA
(对于 x = 1 2
2007 Microchip Technology Inc. DS70118G_CN 第71
dsPIC30F2010

12.1 Timer2 Timer3 模式选择

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

12.2 简单输出比较匹配模式

当控制位 OCM<2:0> OCxCON<2:0>= 001010011 时,所选输出比较通道被配置为下列三种简单输 出比较匹配模式之一:
比较强制 I/O 引脚为低电平
比较强制 I/O 引脚为高电平
比较使 I/O 引脚状态翻转
上述模式中使用了 OCxR 寄存器。OCxR 寄存器将装入 一个值,然后与所选的递增定时器的计数值作比较。 行比较时,将出现上述比较匹配模式之一。如果在达到 OCxR 中的值之前,计数器复位为零,则 OCx 引脚的状 态保持不变。

12.3 双输出比较匹配模式

当控制位 OCM<2:0>OCxCON<2:0>= 100 101 时,所选输出比较通道被配置为下列两种双输出比较匹 配模式之一:
单输出脉冲模式
连续输出脉冲模式

12.3.1 单脉冲模式

用户将模块配置为生成单输出脉冲,需要执行下列步骤
(假设定时器已关闭):
确定指令周期时间 T
根据 T
计算从定时器起始值 0x0000 到脉冲开始的时间。
把脉冲宽度开始和停止时间分别写入 OCxR
设置定时器周期寄存器的值,使之等于或大于
设置 OCM<2:0> = 100
使能定时器, TON TxCON<15>= 1
要启动另一个单脉冲,进行另一次写操作设置
OCM<2:0> = 100 即可。
CY 计算所需的脉冲宽度值。
OCxRS 比较寄存器 (x 表示通道 1 或 2)。
OCxRS 比较寄存器中的值。
CY

12.3.2 连续脉冲模式

将模块配置为生成连续输出脉冲,则需要执行下列步 骤:
确定指令周期时间 T
根据 T
计算从定时器起始值 0x0000 到脉冲开始的时间。
把脉冲宽度开始和停止时间分别写入 OCxR
设置定时器周期寄存器的值,使之等于或大于
设置 OCM<2:0> = 101
使能定时器, TON TxCON<15>= 1
CY 计算所需的脉冲宽度值。
OCxRS 比较寄存器 (x 表示通道 1 或 2)。
OCxRS 比较寄存器中的值。
CY

12.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

12.4.1 PWM 的输入引脚故障保护

当控制位 OCM<2:0> OCxCON<2:0>= 111 时,所 选输出比较通道还是配置为 PWM 工作模式,但具有输 入故障保护的附加功能。在此模式下,如果在 OCFA/B 引脚上检测到逻辑 0,则对应的 PWM 输出引脚将被置 于高阻输入状态。 OCFLT 位(OCxCON<4>)表明是 否产生故障条件。此状态将保持,直到下列事件都已发 生:
  t 外部故障条件已经消除。
通过写适当的控制位,重新使能了 PWM 模式。
DS70118G_CN 72  2007 Microchip Technology Inc.
dsPIC30F2010

12.4.2 PWM 周期

通过写入 PRx 寄存器可以指定 PWM 周期。可使用公 式 12-1 计算 PWM 周期。
公式 12-1 PWM 周期
PWM 周期 = [(PRx) + 1] • 4 • T
TMRx 预分频比)
PWM 频率定义为 1/[PWM 周期 ]
当所选 TMRx 等于其对应的周期寄存器 PRx 时,在下 一个递增周期将发生如下四个事件:
•TMRx清零。
•OCx引脚置 1。
- 例外 1:如果 PWM 占空比为 0x0000,则 OCx
引脚将保持为低电平。
- 例外 2:如果占空比大于 PRx,则引脚将保持 为高电平。
PWM 占空比从 OCxRS 锁存到 OCxR 中。
相应的定时器中断标志置 1
参见图 12-1 的关键 PWM 周期比较。为了清晰起 见,图中引用的是 Timer3
OSC

12-2 PWM 输出时序

周期

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

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

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

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

12.7 输出比较中断

输出比较通道具有在比较匹配时产生中断的能力,而与 选择的匹配模式无关。
对于除 PWM 之外的所有模式,当比较事件发生时,相 应的中断标志 (OCxIF)置 1,如果允许中断的话还将 产生中断。OCxIF 位位于相应的 IFS 状态寄存器中,它 必须用软件清零。通过相应的比较中断允许位
OCxIE)来允许中断; OCxIE 位位于相应的 IEC 控制
寄存器中。
TMR3 = PR3 T3IF = 1
(中断标志)
OCxR = OCxRS
TMR3 = 占空比(OCxR)
对于 PWM 模式,当事件发生时,对应的定时器中断标 志位 (T2IF T3IF)置 1,如果允许中断的话还将产 生中断。 TxIF 位在 IFS0 状态寄存器中,它的清零必须 在软件中进行。通过位于 IEC0 控制寄存器中的定时器 中断允许位 (T2IE T3IE),来允许相应的中断。在 PWM 工作模式下,输出比较中断标志始终不会置 1
2007 Microchip Technology Inc. DS70118G_CN 第73
DS70118G_CN74 2007 Microchip Technology Inc.

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

SFR 名称
OC1RS 0180 输出比较 1 主寄存器
OC1R 0182 输出比较 1 从寄存器
OC1CON 0184 OCFRZ OCSIDL OCFLT1 OCTSEL1 OCM<2:0>
OC2RS 0186 输出比较 2 主寄存器
OC2R 0188 输出比较 2 从寄存器
OC2CON 018A
地址
图注: u = 未初始化位
注: 有关寄存器各位的描述,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN)。
Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
OCFRZ OCSIDL OCFLT2 OCTSEL2 OCM<2:0>
dsPIC30F2010
复位状态
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
dsPIC30F2010

13.0 正交编码器接口 (QEI)模块

注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F 系列参考手册》(DS70046E_CN)。
本章介绍了正交编码器接口 (Quadrature Encoder InterfaceQEI)模块和相关的工作模式。 QEI 模块提 供了与增量式编码器的接口以获得电机位置数据。增量 式编码器在电机控制应用中是非常有用的。

13-1 正交编码器接口框图

休眠输入
同步
Det
TQCS
CY
T
QEIM<2:0>
0
1
正交编码器接口 (QEI)是多种电机控制应用中不可或 缺的关键部分,例如开关磁阻(Switched Reluctance
SR)电机和交流感应电机 (AC Induction Motor, ACIM)。 QEI 的工作特性包括:
三个输入通道,分别为两相信号和索引脉冲输入
•16位递增/递减位置计数器
计数方向状态
位置测量 (x2 x4)模式
输入端上的可编程数字噪声滤波器
备用的 16 位定时器/计数器模式
正交编码器接口中断
通过设定相应位 QEIM<2:0> QEICON<10:8>)可确 定这些工作模式。图 13-1 给出了正交编码器接口的框 图。
TQCKPS<1:0>
2
预分频器
1
, 8, 64, 256
1
0
QEA
QEB
INDX
可编程
数字滤波器
UPDN_SRC
QEICON<
0
1
可编程
数字滤波器
可编程
数字滤波器
TQGATE
16位递增/递减计数器
2
正交
解码器
逻辑
11
>
3
3
QEIM<2:0>
模式选择
QD
CK
Q
POSCNT
比较器/ 过零检测
最大计数寄存器
MAXCNT
复位
等于
QEIIF
事件 标志
2007 Microchip Technology Inc. DS70118G_CN 75
dsPIC30F2010

13.1 正交编码器接口逻辑

典型的增量式编码器(也称为光电式编码器)具有三个 输出:A 相、 B 相和索引脉冲。在 ACIM SR 电机的 位置和速度控制中,这三个信号非常有用,且通常是必 须的。
A 相(QEA)和 B 相(QEB)通道输出信号具有特定的 相位关系。如果 A 相超前 B 相,那么认为电机正向旋 转。如果 A 相滞后于 B 相,那么认为电机反向旋转。
第三个通道称为索引脉冲,每转一圈产生一个脉冲,作 为基准用来确定绝对位置。索引脉冲与 A 相和 B 相一 致,皆为低电平。

13.2 16 位递增/递减位置计数器模式

16 位递增/递减计数器在每一个计数脉冲递增或递减 计数,该脉冲信号由 A 相和 B 相输入信号的关系确定。 计数器作为一个积分器,其计数值与位置成正比。计数 方向由 UPDN 信号确定,该信号由正交编码器接口逻辑 产生。

13.2.1 位置计数器错误检查

CNTERR 位(QEICON<15>)提供了 QEI 中的位置计数
错误检查功能。只有当位置计数器配置为通过索引脉冲 复位模式 (QEIM<2:0> = 110 100)时,才能使用 错误检查功能。在这些模式下, POSCNT 寄存器中的 内容将与值 (0xFFFF MAXCNT + 1,取决于转向) 进行比较。如果检测到这些值,将通过置 1 CNTERR 位 产生一个错误条件并产生 QEI 计数错误中断。通过置 1 CEID 位(DFLTCON<8>)可禁止 QEI 计数错误中断。 在检测到错误之后,位置计数器仍将继续对编码器脉冲 边沿进行计数。 POSCNT 寄存器继续递增/递减计数 直至出现自然计满溢出/下溢。发生自然计满溢出/下 溢事件时不产生中断。CNTERR 位是一个可读/写位, 由用户采用软件方式对其进行复位。

13.2.2 位置计数器复位

位置计数器复位使能位 POSRES QEI<2>)用于确定 当检测到索引脉冲时是否对位置计数器进行复位。只有 当 QEIM<2:0> = 100’或 ‘110’时,该位才适用。
如果 POSRES 位设置为‘1’,则位置计数器在检测到 索引脉冲时将被复位。如果 POSRES 位设定为 ‘0’, 则当检测到索引脉冲时位置计数器将不会被复位。位置 计数器将继续进行递增或递减计数,且在发生计满溢出 /下溢时进行复位。
当选择使用 INDX 信号对位置计数器(POSCNT)进 行 复位时,用户必须指定 QEA QEB 输入引脚的状态。 只有这些状态匹配时,复位才会发生。通过 DFLTCON<10:9> 寄存器中的 IMV<1:0> 位可选择这些 状态。
POSCNT 寄存器将被复位时,IMV<1:0>(索引匹配 值)位允许用户在索引脉冲期间指定 QEA QEB 输入 引脚的状态。
4X 正交计数模式下:
IMV1 = 索引脉冲匹配所要求的 B 相输入信号的状态 IMV0 = 索引脉冲匹配所要求的 A 相输入信号的状态
2X 正交计数模式下:
IMV1= 为索引状态匹配选择的相输入信号(0 = A 相,1 =B 相)
IMV0= 索引脉冲匹配要求的所选相输入信号的状态
当检测到索引脉冲但位置计数器未发生计满溢出/下溢 事件时,仍将产生中断。

13.2.3 计数方向状态

如前所述, QEI 逻辑将根据 A 相和 B 相之间的关系产 生 UPDN 信号。除输出引脚外,还将此内部 UPDN 信 号的状态传送至 SFR UPDN 位(QEICON<11>), 该位是只读位。
注: QEI 引脚复用为模拟输入引脚。用户必须确保在 ADPCFG 寄存器中所有 QEI 相关引脚被设定为数字 输入。
DS70118G_CN 76 2007 Microchip Technology Inc.
dsPIC30F2010

13.3 位置测量模式

QEI 支持两种测量模式,分别称为 x2x4 模式。通过位SFR QEICON<10:8> 中的模式选择位QEIM<2:0> 可 选择模式。
当控制位 QEIM<2:0> = 100 101 时,将选择 x2 测量 模式,此时 QEI 逻辑将只通过 A 相输入信号来确定位置 计数器递增速率。A 相信号的每个上升沿和下降沿都将 导致位置计数器递增或递减。和在 x4 模式中一样, B 相信号仍然用于计数器方向的确定。
x2 测量模式中,存在导致位置计数器复位的两种不 同原因:
1. 检测到索引脉冲,QEIM<2:0> = 100,导致位置
计数器复位。
2. 计数值与 MAXCNTQEIM<2:0> = 101 匹配时
导致位置计数器复位。
当控制位 QEIM<2:0> = 110 111 时,将选择 x4 测量 模式,此时 QEI 逻辑将通过 A 相和 B 相输入信号的每 个边沿来确定位置计数器递增速率。A 相和 B 相输入信 号的每个边沿都将导致位置计数器递增或递减。
x4 测量模式中,存在导致位置计数器复位的两种不 同原因:
1. QEIM<2:0> = 110 时,检测到索引脉冲导致位置
计数器复位。
2. QEIM<2:0> = 111时,计数值与MAXCNT匹配导
致位置计数器复位。
x4 测量模式为确定电机位置提供了更高精度的测量数 据 (更多的位置计数)。

13.4 可编程数字噪声滤波器

数字噪声滤波器部分负责抑制输入捕捉或正交信号中的 噪声。施密特触发器输入和三时钟周期延迟滤波器共同 用来抑制低电平噪声和短时的大噪声尖峰。这些噪声干 扰经常出现在易受噪声干扰的应用中,例如电机系统。
该滤波器可以确保在三个连续的滤波器周期内都获得同 一个稳定值之后,才允许经过滤波的输出信号发生变 化。
可通过位 QECK<2:0> DFLTCON<6:4>)对 QEAQEB INDX 引脚的数字滤波器时钟分频频率进行编程 设定,该频率来源自基本指令周期 T
QEOUT 位必须为‘1’以使能 QEAQEB 和 INDX 通道 的滤波器输出功能。在 POR BOR 时,所有通道的滤 波器网络将被禁止。
CY

13.5 备用 16 位定时器/计数器

QEI 模块未被配置为QEI 模式QEIM<2:0> = 001时, 此模块可被配置为简单的 16 位定时器/计数器。通过 QEICON SFR寄存器可实现辅助定时器的设定和控制。 此定时器功能与 Timer1 相同。QEA 引脚用作定时器时 钟输入。
当配置为定时器时, POSCNT 寄存器作为定时器计数 寄存器,而 MAXCNT 寄存器用作周期寄存器。当定时 器/周期寄存器匹配时, QEI 中断标志将被置 1
此定时器和通用定时器之间惟一的差异是增加了外部递 增/递减输入选择功能。当 UPDN 引脚为高电平时,定 时器将进行递增计数。当 UPDN 引脚为低电平时,定时 器将进行递减计数。
注: 工作模式的改变 (即,从 QEI 改变到定时
器模式或反之)将不会对定时器/位置计数 寄存器内容造成影响。
UPDN 控制/状态位(QEICON<11>)可用来选择定时 器寄存器的计数方向状态。当 UPDN = 1 时,定时器将 进行递增计数。当 UPDN = 0 时,定时器将进行递减计 数。
此外,控制位 UPDN_SRC QEICON<0>)用来确定 定时器计数方向状态是取决于写入UPDN控制/状态位 的逻辑状态 (QEICON<11>)还是 QEB 引脚的状态。 当 UPDN_SRC = 1 时,定时器计数方向将由 QEB 引脚 控制。同样,当 UPDN_SRC = 0 时,定时器计数方向 由 UPDN 位确定。
注: 此定时器不支持外部异步计数器工作模式。
如果使用外部时钟源,时钟将自动与内部指 令周期同步。

13.6 CPU 休眠模式下的 QEI 模块操作

13.6.1 CPU 休眠模式下的 QEI 操作

CPU 休眠模式下 QEI 模块将停止工作。

13.6.2 CPU 休眠模式下的定时器操作

CPU 休眠模式下,定时器将不工作,因为内部时钟 被禁止了。
2007 Microchip Technology Inc. DS70118G_CN 77
dsPIC30F2010

13.7 CPU 空闲模式下的 QEI 模块操作

由于 QEI 模块可作为正交编码器接口,或 16 位定时器, 以下各节介绍了这两种模式下的 QEI 模块操作。

13.7.1 CPU 空闲模式下的 QEI 操作

CPU 处于空闲模式时,如果 QEISIDL
QEICON<13> = 0,则 QEI 模块将工作。在 POR
BOR 时,该位默认为逻辑 ‘0’。在空闲模式下若要使 QEI 模块停止工作,应将 QEISIDL 位设定为 ‘1’。

13.7.2 CPU 空闲模式下的定时器操作

CPU 处于空闲模式且 QEI 模块配置为 16 位定时器模 式时,如果 QEISIDL 位(QEICON<13>) = 0,则 16 位定时器将工作。在 POR BOR 时,该位默认为逻辑
0’。在空闲模式下若要使定时器模块停止工作,应将
QEISIDL 位设定为 ‘1’。
如果 QEISIDL位被清零,定时器将正常工作,就象 CPU 没有进入空闲模式一样。

13.8 正交编码器接口中断

正交编码器接口能够在发生以下事件时产生中断:
16 位递增/递减位置计数器发生计满溢出/下 溢时产生中断
检测到合格的索引脉冲时,或 CNTERR 位置 1
定时器周期匹配事件 (溢出/下溢)
门控累加事件
在发生以上任一事件时,QEI 中断标志位 QEIIF 将被置 1。QEIIF 位必须通过软件方式清零。QEIIF 位于 IFS2
态寄存器中。
可通过相应的中断允许位 QEIIE 允许中断。QEIIE 位于
IEC2 控制寄存器中。
DS70118G_CN 78  2007 Microchip Technology Inc.
2007 Microchip Technology Inc. DS70118G_CN 79

13-1 QEI 寄存器映射

SFR
名称
QEICON 0122 CNTERR
DFLTCON 0124
POSCNT 0126 位置计数器 <15:0>
MAXCNT 0128 最大计数值 <15:0>
Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
地址
QEISIDL INDX UPDN QEIM2 QEIM1 QEIM0 SWPAB TQGATE TQCKPS1 TQCKPS0 POSRES TQCS UPDN_SRC
IMV1 IMV0 CEID QEOUT QECK2 QECK1 QECK0
复位状态
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1111 1111 1111 1111
图注: u = 未初始化位
注: 有关寄存器各位的描述,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN)。
dsPIC30F2010
dsPIC30F2010
注:
DS70118G_CN 80 2007 Microchip Technology Inc.
dsPIC30F2010

14.0 电机控制 PWM 模块

注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用。有关 CPU、外 设、寄存器说明和一般器件功能的更多信息,请参阅
dsPIC30F 系列参考手册》(DS70046E_CN)。
此模块简化了产生多种同步脉宽调制输出(Pulse Width ModulatedPWM)的任务。特别是它还能支持以下电
源和电机控制应用:
三相交流感应电机
开关磁阻电机
直流无刷 (Brushless DCBLDC)电机
不间断电源 (Uninterruptible Power Supply UPS
PWM 模块具有以下特性:
•6个具备 3 占空比发生器的 PWM I/O 引脚
•16位精度
实时更改 PWM 频率
边沿对齐和中心对齐输出模式
单脉冲产生模式
对中心对齐模式下不对称更新的中断支持
用于电子换相电机 (Electrically Commutative MotorECM)控制的输出改写控制
用于调度其他外设事件的 “特殊事件”比较器
可选择将任何一个 PWM 输出引脚驱动至确定状态
FLTA
此模块包含 3 个占空比发生器,分别编号为 1 3。此 模块具有 6 PWM 输出引脚,分别编号为 PWM1H/
PWM1L PWM3H/PWM3L6 个 I/O 引脚可组合为 3 个高 / 低端引脚对,分别以下标 H L 表示。对于互补
的负载,低端 PWM 引脚的状态总是与高端 I/O 引脚的 状态相反。
14-1 中显示了电机控制 PWM 模块的简化框图。 PWM 模块可以实现多种工作模式,有利于实现特定的
功率控制应用。
引脚
2007 Microchip Technology Inc. DS70118G_CN 81
dsPIC30F2010

14-1 PWM 框图

PWMCON1
PWMCON2
DTCON1 死区时间控制 SFR
PWM 使能和模式 SFR
16 位数据总线
FLTACON
OVDCON
PTMR
比较器
PTPER
PTPER 缓冲器
FLTA 引脚控制 SFR
PWM 手动 控制 SFR
PWM 发生器 #3
PDC3 缓冲器
PDC3
比较器
PWM 发生器
PWM 发生器
通道 3 死区时间
发生器和 改写逻辑
#2
#1
通道 2 死区时间
发生器和 改写逻辑
通道 1 死区时间
发生器和 改写逻辑
输出
驱动器
PWM3H
PWM3L
PWM2H
PWM2L
PWM1H
PWM1L
FLTA
PTCON
比较器
SEVTCMP
SEVTDIR
PTDIR
特殊事件
后分频器
特殊事件触发信号
PWM 时基
注: 为清晰起见,图中未给出 PWM 发生器 #1 #2 的细节。
DS70118G_CN 82 2007 Microchip Technology Inc.
dsPIC30F2010

14.1 PWM 时基

PWM 时基由带预分频器和后分频器的 15 位定时器提 供。通过 PTMR SFR 可对该时基进行访问。PTMR<15> 为只读状态位,用于表明 PWM 时基的当前计数方向。 如果 PTDIR 被清零,表明 PTMR 正进行递增计数。如 果 PTDIR 1,表明 PTMR 正进行递减计数。可通过 PTCON SFR PWM 时基进行配置。可通过置 1 /清PTCON SFR 中的 PTEN 位使能/禁止时基。当用软 件清零 PTEN 位时, PTMR 将不会被清零。
PTPER SFR 设定 PTMR 的计数周期。用户必须写入 15 位值至 PTPER<14:0>。当 PTMR<14:0> 中的值与 PTPER<14:0> 中的值相匹配时,时基将会被复位为 0
或在下一个时钟周期反转计数方向,这取决于时基的工 作模式。
注: 如果周期寄存器设定为 0x0000,定时器将
停止计数,且即使特殊事件值也是 0x0000,也不会产生中断和特殊事件触发 信号。该模块将不会更新周期寄存器,即使 它已是 0x0000 ;因此,用户必须禁止该模 块以更新周期寄存器。
PWM 时基可配置为 4 种不同的工作模式:
自由运行模式
单事件模式
连续递增/递减计数模式
带双更新中断的连续递增/递减计数模式
通过 PTCON SFR 中的 PTMOD<1:0> 位可选择这 4 种 模式。递增/递减计数模式支持产生中心对齐 PWM。 单事件模式使得 PWM 模块可支持某些电子换相电机
ECM)的脉冲控制。
PWM 时基产生的中断信号取决于模式选择位
PTMOD<1:0>)和 PTCON SFR 中的后分频比控制位 (PTOPS<3:0>)。

14.1.1 自由运行模式

在自由运行模式下, PWM 时基进行递增计数直至与时 基周期寄存器 (Time Base Period registerPTPER) 中的设定值相匹配。PTMR 寄存器将在下一输入时钟边 沿复位且只要 PTEN 位保持置 1 时基将继续进行递增计
数。 当PWM时基处于自由运行模式时(PTMOD<1:0> = 00),
每当计数值与 PTPER 寄存器匹配都将产生一个中断事件 且 PTMR 寄存器将被复位为零。在此模式下,可使用后分
频比选择位来降低中断事件的频率。

14.1.2 单事件模式

在单事件计数模式下,当 PTEN 位置 1 PWM 时基将 开始递增计数。当 PTMR 寄存器中的值与 PTPER 寄存
器匹配时,PTMR 寄存器将在下一个输入时钟边沿被复 位,且 PTEN 位将被硬件清零以中止时基的操作。
PWM 时基处于单事件模式 (PTMOD<1:0> = 01) 时,当发生与 PTPER 寄存器匹配时将产生一个中断事 件,PTMR 寄存器会在下一个输入时钟边沿复位为零且 PTEN 位将被清零。在该模式下,后分频比选择位将不
起作用。

14.1.3 连续递增 / 递减计数模式

在连续递增 / 递减计数模式下, PWM 时基将进行递增 计数直至与 PTPER 寄存器值相匹配。定时器将在下一 个输入时钟边沿开始递减计数。 PTCON SFR 中的 PTDIR 位为只读位,用于表明计数方向。当定时器进行 递减计数时, PTDIR 位将被置 1
在递增 / 递减计数模式 (PTMOD<1:0> = 10)下,每 当 PTMR 寄存器值为零时将产生中断事件且 PWM 时基
将开始递增计数。在此模式下可使用后分频比选择位来 降低中断事件的频率。
2007 Microchip Technology Inc. DS70118G_CN 83
dsPIC30F2010

14.1.4 双更新模式

在双更新模式(PTMOD<1:0> = 110)下,每当 PTMR 寄存器等于零或出现周期匹配时将产生中断事件。在此
模式下,后分频比选择位将不起作用。 双更新模式向用户提供了另外两种功能。首先,控制环
带宽可增加一倍,因为在每一个周期内 PWM 占空比可 被更新两次。其次,可产生不对称的中心对齐 PWM 波 形,可在某些电机控制应用中用于减少输出波形畸变。
注: 将周期寄存器编程设定为 0x0001 可产生一
个连续的中断脉冲,因此必须加以避免。

14.1.5 PWM 时基预分频器

PTMR 的输入时钟 (FOSC/4)可通过 PTCON SFR 存器中的 PTCKPS<1:0> 控制位选择 1:11:4、1:16 1:64 预分频比。当发生以下事件时,预分频器计数器将
被清零:
写入 PTMR 寄存器
写入 PTCON 寄存器
任何器件复位
当写入 PTCON 时, PTMR 寄存器将不会被清零。

14.1.6 PWM 时基后分频器

PTMR 的匹配输出可选择通过 4 位后分频器进行后分频
(可实现 1:1 1:16 分频)。
当发生以下事件时,后分频器计数器将被清零:
写入 PTMR 寄存器
写入 PTCON 寄存器
任何器件复位
当写入 PTCON 作时, PTMR 寄存器将不会被清零。

14.2 PWM 周期

PTPER 15 位寄存器,用来设定 PWM 时基的计数周 期。 PTPER 为双缓冲寄存器。在下列情况下,PTPER 缓冲器内容将被装入 PTPER 寄存器:
自由运行和单事件模式: 当 PTMR 寄存器复位为零时。
递增 / 递减计数模式
PWM 时基被禁止时 (PTEN = 0), PTPER 缓冲器 中的值将被自动装入 PTPER 寄存器。
可使用公式 14-1 确定 PWM 周期。

公式 14-1 PWM 周期

TPWM =
(PTMR 预分频比 )
如果 PWM 时基配置为递增 / 递减计数模式之一,则 PWM 周期可由公式 14-2 确定。
公式 14-2 PWM 周期 (递增 / 递减计数
TPWM =
(PTMR 预分频比 )
对于给定器件振荡器和 PWM 频率,最大分辨率(以位 为单位)可使用公式 14-3 进行确定:

公式 14-3 PWM 分辨率

PTPER 寄存器匹配后
:当 PTMR 寄存器为零时。
T
CY (PTPER + 1)
模式)
CY 2 (PTPER + 0.75)
T
分辨率 =
log (2)
log (2 TPWM / TCY)
DS70118G_CN 84  2007 Microchip Technology Inc.
dsPIC30F2010

14.3 边沿对齐 PWM

PWM 时基处于自由运行模式或单事件模式时,模块 将产生边沿对齐 PWM 信号。对于边沿对齐 PWM 输出, 输出信号的周期由 PTPER 中的值指定,而占空比由相
应的占空比寄存器指定(见图 14-2)。PWM 输出将在 周期的起始 (PTMR = 0)驱动为有效状态,而当占空
比寄存器中的值与 PTMR 匹配时被驱动为无效状态。
如果特定占空比寄存器的值为零,则对应 PWM 引脚上 的输出会在整个 PWM 周期中处于无效状态。此外,如 果占空比寄存器中的值大于 PTPER 寄存器中的值,则 PWM 引脚的输出将会在整个 PWM 周期中保持有效状
态。

14-2:边沿PWM

锁存的新占空比
PTPER
PTMR
0

14.4 中心对齐 PWM

PWM 时基配置为递增 / 递减计数模式时 (见 图 14-3),模块将产生中心对齐的 PWM 信号。
当占空比寄存器值与 PTMR 的值相匹配且 PWM 时基进 行递减计数 (PTDIR = 1)时, PWM 比较输出将被驱
动为有效状态。当 PWM 时基进行递增计数
PTDIR = 0)且 PTMR 寄存器中的值与占空比值匹配
时, PWM 比较输出将被驱动为无效状态。 如果特定占空比寄存器中的值为零,则整个 PWM 周期
内对应 PWM 引脚上的输出将为无效状态。此外,如果 占空比寄存器中的值等于 PTPER 寄存器中的值,则整 个 PWM 周期内 PWM 引脚上的输出将为有效状态。

14-3:中对齐 PWM

周期 /2
PTPER
占空比
0
PTMR
占空比
周期
周期

14.5 PWM 占空比比较单元

4 16 位特殊功能寄存器 (PDC1PDC2PDC3PDC4)用来指定 PWM 模块的占空比值。
每一个占空比寄存器中的值负责确定 PWM 输出处于有 效状态的时间。占空比寄存器为 16 位宽。占空比寄存 器的 LSb 用来确定开始时是否出现 PWM 边沿。因此, PWM 的分辨率实际上提高了一倍。
2007 Microchip Technology Inc. DS70118G_CN 85
dsPIC30F2010

14.5.1 占空比寄存器缓冲器

4 PWM 占空比寄存器采用双缓冲方式,因此可使 PWM 输出更新时不会产生毛刺。对于每一个占空比,
有一个用户可访问的占空比寄存器,而另外一个占空比 寄存器保存当前 PWM 周期使用的实际比较值。
对于边沿对齐 PWM 输出,当计数值与 PTPER 寄存器 值匹配且 PTMR 寄存器被复位时,将更新占空比值。当 PWM 时基被禁止 (PTEN = 0)且 PWMCON2 寄存器 中的 UDIS 位被清零时,占空比缓冲器的内容将被自动
装入占空比寄存器。 如果 PWM 时基处于递增 / 递减计数模式,则当 PTMR
寄存器值为零且 PWM 时基开始递增计数时将采用新的 对占空比值。当 PWM 时基被禁止(PTEN = 0)时 ,占
空比缓冲器中的值将被自动装入占空比寄存器。 如果PWM时基处于双更新功能的递增 /递减计数模式,
PTMR 寄存器值为零且 PTMR 的值与PTPER 寄存器 的值匹配时,将采用新的占空比值。当 PWM 时基被禁 止(PTEN = 0),占空比缓冲器中的值将被自动装入占
空比寄存器。

14.6 互补 PWM 操作

在互补工作模式下,每对 PWM 输出都是互补的 PWM 信号。对于一段两个引脚的输出均为无效的短暂时间,
可选择在器件开关过程中插入一个死区时间 (参见第
14.7 节 “死区时间发生器”)。 在互补模式下,占空比比较单元将按如下分配给相应的
PWM 输出:
•PDC1寄存器控制 PWM1H/PWM1L 输出
• PDC2 寄存器控制 PWM2H/PWM2L 输出
• PDC3 寄存器控制 PWM3H/PWM3L 输出
PWMCON1 SFR中相应的 PMODx 位清零可使 PWM I/O 引脚对工作于互补模式。在器件复位时, PWM I/O
引脚将被设定为互补模式。

14.7 死区时间发生器

当任一 PWM I/O 引脚对工作于互补输出模式时,可使 用死区时间发生功能。 PWM 输出采用推挽驱动电路。
由于功率输出器件的导通和关断都需要时间,因此在一 对互补 PWM 输出中一个开关器件的关断和另一个开关
器件的导通之间必须间隔一定的时间。

14.7.1 死区时间发生器

PWM 模块的每一对互补输出都有一个 6 位的递减计数
器,用于插入死区时间。如图 14-4 中所示,每个死区 时间单元都有与占空比比较输出相连的上升沿和下降沿 检测器。

14.7.2 死区时间范围

通过指定输入时钟预分频值和一个 6 位无符号值可设定 死区时间单元提供的死区时间。
死区时间单元提供了 4 种输入时钟预分频比选项,用户 可根据器件的工作频率选择适当的死区时间范围。使用
DTCON1 SFR 中的 DTAPS<1:0> 和 DTBPS<1:0> 控制 位可选择死区时间时钟预分频值。死区时间值可使用 4 种时钟预分频比选择之一(T
在选择预分频值之后,通过装入 6 位无符号值至 DTCON1 SFR 可对死区时间进行调整。
发生以下事件时,死区时间单元预分频器将被清零:
由于占空比比较边沿事件导致装入递减定时器。
写入 DTCON1 寄存器。
任何器件复位。
注:PWM 模块处于工作状态时(PTEN = 1),
用户不应对 DTCON1 值进行修改,否则可能 导致意外结果的发生。
CY、2TCY、4TCY或8TCY)。
DS70118G_CN 86  2007 Microchip Technology Inc.
14-4 死区时间时序图
占空比发生器
PWMxH
PWMxL
dsPIC30F2010

14.8 独立的 PWM 输出

在驱动某些类型的负载时,需要采用独立的PWM输出。 当 PWMCON1 寄存器中相应的 PMOD 位置 1 时,则相 应的 PWM 输出对将工作于独立输出模式。当模块工作 于独立模式时,相邻 PWM I/O 引脚之间将不会实现死 区时间控制而 I/O 引脚对将允许同时处于有效状态。
在独立模式下,每一个占空比发生器将被同时连接到 PWM 输出对中的两个 I/O 引脚。通过相关的占空比寄
存器和 OVDCON 寄存器中的相应位,用户可为工作于 独立模式的每一个 PWM I/O 引脚选择以下的信号输出
选项:
•I/O引脚输出 PWM 信号
•I/O引脚处于无效状态
•I/O引脚处于有效状态

14.9 单脉冲 PWM 操作

PTCON 控制位 PTMOD<1:0> = 10 时, PWM 模块 将产生单脉冲输出。在单脉冲模式下仅可产生边沿对齐
输出。在单脉冲模式下,当 PTEN 位置 1 时, PWM I/O 引脚将被驱动为有效状态。当计数值与占空比寄存
器设定值匹配时,PWM I/O 引脚将被驱动为无效状态。 当计数值与 PTPER 寄存器匹配时, PTMR 寄存器将被 清零,所有处于有效状态的 PWM I/O 引脚将被驱动为 无效状态, PTEN 位将被清零且将产生中断。

14.10 PWM 输出改写

通过 PWM 输出改写控制位 , 用户可手动驱动 PWM I/O 引脚至指定逻辑状态,而不受占空比比较单元的影响。
OVDCON 寄存器中包含了所有与 PWM 输出改写功能 相关的控制位。 OVDCON 寄存器的高字节包含 6 个数
据位,即 POVDxH<3:1> POVDxL<3:1>,用于确定 哪些 PWM I/O 引脚输出将被改写。OVDCON 寄存器的 低字节包含 POUTxH<3:1> POUTxL<3:1> 6 个数据 位,用于确定当通过 POVD 位对特定输出进行改写时的
PWM I/O 引脚的状态。

14.10.1 互补输出模式

当通过 OVDCON 寄存器驱动 PWMxL 引脚为有效状态 时,输出信号将被强制为与输出对中对应 PWMxH 引脚 输出状态相反的状态。当通过手动方式对 PWM 通道进 行改写时,死区时间插入仍然有效。

14.10.2 改写同步

如果 PWMCON2 寄存器中的 OSYNC 位置 1,所用通 过 OVDCON 寄存器执行的输出改写操作将与 PWM
基同步。同步输出改写将发生在以下时刻:
若是边沿对齐模式,则当 PTMR 为零时。
若是中心对齐模式,则当 PTMR 为零或当PTMR 值 PTPER 匹配时。
2007 Microchip Technology Inc. DS70118G_CN 第87
dsPIC30F2010

14.11 PWM 输出和极性控制

3 个与 PWM 模块有关的器件配置位用来提供 PWM 输出引脚控制:
•HPOL配置位
•LPOL配置位
•PWMPIN配置位
FPORBOR 配置寄存器中的这 3 个位 (见第 21 章)将
与位于 PWMCON1 SFR 中的 3 个 PWM 使能位
PWMEN<3:1>)配合工作。这些控制位和 PWM 使能
位确保在器件发生复位后 PWM 引脚能够处于正确的状 态。配置位 PWMPIN 使得 PWM 模块输出可选择在器 件复位时被使能。如果 PWMPIN = 0,在复位时 PWM 输出将被驱动至无效状态。如果 PWMPIN = 1(默认), PWM 模块将为三态。 HPOL 位用于指定 PWMxH 输出 的极性,而 LPOL 位指定 PWMxL 输出的极性。

14.11.1 输出引脚控制

PWMCON1 SFR 中的 PEN<3:1>H 和 PEN<3:1>L 控制
位将分别用于使能每一个高端 PWM 输出引脚和每一个 低端 PWM 输出引脚。如果某个 PWM 输出引脚未被使
能,则该引脚将被视作一般 I/O 引脚。

14.12 PWM FLTA 引脚

有一个与 PWM 模块相关的故障引脚,即 FLTA 引脚
FLTA)。当使能时,可以选择用该引脚将每个 PWM
I/O 引脚驱动至定义的状态。

14.12.1 故障引脚使能位

FLTACON SFR 具有 4 个控制位,用于确定特定 PWM I/O引脚对是否由FLTA输入引脚控制。欲使能某一PWM I/O 引脚对的 FLTA
中的相应位置 1
如果寄存器 FLTACON 中所有的使能位都被清零,则
输入引脚对 PWM 模块将没有影响,且该引脚可用
FLTA
作一般的中断引脚或 I/O 引脚。
改写功能,必须将 FLTACON 寄存器

14.12.3 故障输入模式

FLTA 输入引脚具有两种工作模式:
锁存模式:当 FLTA
出将进入 FLTACON 寄存器所定义的状态。 PWM 输出将保持在此状态,直到 FLTA 电平并且相应的中断标志由软件清零。当这两种情 况都发生时, PWM 输出将在下一个 PWM 周期开 始时或在半周期边界返回到正常工作状态。如果中 断标志在 FLTAFLTA 引脚不再有效时才恢复输出。
逐周期模式:当 FLTA 时,只要 FLTA 引脚保持为低电平, PWM 输出将 会一直保持在定义的 FLTA 驱动为高电平后, PWM 输出将在下一个 PWM 周 期开始时或半周期边界返回正常状态。
输入引脚的工作模式可通过FLTACON特殊功能寄
FLTA
存器中的 FLTAM 控制位进行选择。
引脚可通过软件方式进行手动控制。
FLTA
引脚驱动为低电平时,PWM 输
引脚被驱动为高
状态结束前清零, PWM 模块将等
输入引脚被驱动为低电平
状态。在 FLTA 引脚被

14.13 PWM 更新锁定

对于某些复杂的 PWM 应用,用户可能需要在某一时刻 对多达 4 个占空比寄存器以及时基周期寄存器 PTPER
进行写入操作。在某些应用中,在装入新的占空比和周 期设定值供模块使用之前写入所有的缓冲寄存器是很重 要的。
通过将 PWMCON2 SFR 中的 UDIS 控制位置 1 可使能 PWM 更新锁定功能。UDIS 位会影响所有占空比缓冲寄
存器和 PWM 时基周期缓冲器PTPER。当 UDIS = 1时, 占空比或周期值将不会发生变化。
注: FLTA 引脚逻辑可独立于 PWM 逻辑进行工
作。如果 FLTACON 寄存器中的所有使能位 被清零,则 FLTA 引脚可用作一般中断引 脚。每一个 FLTA 中断标志位和与之相关的中断优先级位。
引脚具有一个中断向量,

14.12.2 故障状态

FLTACON 特殊功能寄存器具有 8 个位,用于确定每一
PWM I/O 引脚被 FLTA 清零时,PWM I/O 引脚将被驱动至无效状态。如果这些
位置 1PWM I/O 引脚将被驱动至有效状态。有效和无 效状态与为每个 PWM I/O 引脚所定义的极性有关
HPOL LPOL 极性控制位)。
DS70118G_CN 88 2007 Microchip Technology Inc.
输入改写时的状态。当这些位
dsPIC30F2010

14.14 PWM 特殊事件触发器

PWM 模块具有一个特殊事件触发器,可使 A/D 转换与 PWM 时基同步。通过对 A/D 采样和转换的时间进行编
程设定,可使其发生在 PWM 周期中的任何时刻。特殊 事件触发器使用户将采集 A/D 转换结果的时间和更新占
空比值的时间之间的延迟减到最小。 PWM 特殊事件触发器使用一个称为 SEVTCMP SFR
以及 5 个控制位对其操作进行控制。用于产生特殊事件 触发信号的 PTMR 值装入 SEVTCMP 寄存器。当 PWM
时基处于递增 / 递减计数模式时,还需要一个控制位指 定特殊事件触发信号的计数方向。此计数方向是通过使
SEVTCMP SFR 中的 SEVTDIR 控制位选择的。如果 SEVTDIR 位清零,特殊事件触发信号将在 PWM 时基 的递增计数周期产生。如果 SEVTDIR 位置 1,特殊事 件触发信号将在 PWM 时基的递减计数周期产生。如果 PWM 时基不配置为递增 / 递减计数模式,SEVTDIR 控
制位不起作用。

14.14.1 特殊事件触发器后分频器

PWM特殊事件触发器有一个允许后分频比为1:1 1:16 的后分频器。通过写入 PWMCON2 SFR 中的 SEVOPS<3:0> 控制位可配置后分频器。
特殊事件输出后分频器在发生下列事件时清零:
任何写入 SEVTCMP 寄存器的操作
任何器件复位

14.15 CPU 休眠模式下的 PWM 操作

FLTA A FLTA B 输入引脚能将 CPU 从休眠状态唤醒。 在休眠模式下,如果任何一个 FLTA 引脚被驱动为低电 平, PWM 模块将产生中断。

14.16 CPU 空闲模式下的 PWM 操作

PTCON SFR 包含 PTSIDL 控制位。该位用于确定当器 件进入空闲模式时 PWM 模块将继续工作还是停止工 作。如果 PTSIDL = 0,空闲模式下模块将继续工作。如 果 PTSIDL = 1,只 要 CPU 仍然处于空闲模式,模块将
停止工作。
2007 Microchip Technology Inc. DS70118G_CN 第89
DS70118G_CN 90 2007 Microchip Technology Inc.

14-1 PWM 寄存器映射

SFR 名称
PTCON 01C0 PTEN
PTMR 01C2 PTDIR PWM 定时器计数值
PTPER 01C4
SEVTCMP 01C6 SEVTDIR PWM 特殊事件比较寄存器
PWMCON1 01C8
PWMCON2 01CA
DTCON1 01CC DTBPS<1:0> DTB<5:0> DTAPS<1:0> 死区时间 A
FLTACON 01D0
OVDCON 01D4
PDC1 01D6 PWM 占空比 #1 寄存器
PDC2 01D8 PWM 占空比 #2 寄存器
PDC3 01DA PWM 占空比 #3 寄存器
地址
图注: u = 未初始化位
注: 有关寄存器各位的描述,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN)。
Bit
15Bit 14Bit 13Bit 12Bit 11 Bit 10
—PTSIDL — PTOPS<3:0> PTCKPS<1:0> PTMOD<1:0>
PWM 时基周期寄存器
PTMOD3 PTMOD2 PTMOD1 PEN3H PEN2H PEN1H PEN3L PEN2L PEN1L 0000 0000 0111 0111
SEVOPS<3:0> OSYNC UDIS
FAOV3H FAOV3L FAOV2H FAOV2L FAOV1H FAOV1L FLTAM FAEN3 FAEN2 FAEN1
POVD3H POVD3L POVD2H POVD2L POVD1H POVD1L POUT3H POUT3L POUT2H POUT2L POUT1H POUT1L
Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2
Bit 1
Bit 0
0000 0000 0000 0000 0000 0000 0000 0000 0011 1111 1111 1111 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0011 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
复位状态
dsPIC30F2010
dsPIC30F2010

15.0 SPI 模块

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

15.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
的发送数据已经准备就绪,可进行下一次传输。
(低电平有效从选择 )。
在主模式下,通过对系统时钟进行预分频来产生时钟。 只要数据写入 SPIxBUF 就会被发送。在最后一个位传 送的过程中产生中断。
在从模式下, SCK 上出现外部时钟时,进行数据的发 送和接收。同样,当最后一个位被锁存时产生中断。如 果使能了 SSx 接收。在 SSx 模式下,当 SSx 为高时 SDOx 输出将被 禁止。
提供给模块的时钟是 F
PPRE<1:0>)和辅助预分频因子(SPRE<2:0>),对
这个时钟进行分频。 CKE 位决定发送的时钟边沿,是 在时钟从有效状态跳变到空闲状态进行发送,还是反 之。CKP 位选择时钟的空闲状态(高电平或低电平)。
控制,那么仅当 SSx 为低时使能发送和
OSC/4。而后,使用主预分频因子

15.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

15.1.2 SDOx 禁止

SPIxCON寄存器中的控制位 DISSDO,用来禁止SDOx 输出。这样可以使 SPIx 模块配置为仅输入的工作模式。 SDO 也可用作一般 I/O 口。

15.2 SPI 支持

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

15-1 SPI 框图

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

15-2 SPI 主/从器件连接

SPI 主器件
时钟 控制
SDOx
SPIxBUF
发送
移位 时钟
边沿 选择
SDIy
辅助
预分频器
1:1-1:8
使能主时钟
SPI 从器件
主预分频器
1:1, 1:4,
1:16, 1:64
CY
F
串行输入缓冲器
SPIxBUF
移位寄存器
SPIxSR
MSb
处理器 1
注: x = 1 2 y = 1 或 2
LSb
SDIx
SCKx
串行时钟
SDOy
SCKy
串行输入缓冲器
SPIyBUF
移位寄存器
SPIySR
MSb
LSb
处理器 2
DS70118G_CN 92  2007 Microchip Technology Inc.
dsPIC30F2010

15.3 从选择同步

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

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

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

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

当器件进入空闲模式时,所有的系统时钟源继续工作。 SPISIDL 位(SPIxSTAT<13>)选择 SPI 模块在空闲模 式下是停止工作还是继续工作。 如果 SPISIDL = 0,模 块将继续工作。如果 SPISIDL = 1,模块将停止。
2007 Microchip Technology Inc. DS70118G_CN 第 93
DS70118G_CN 94 2007 Microchip Technology Inc.

15-1 SPI1 寄存器映射

SFR 名称
SPI1STAT 0220 SPIEN
SPI1CON 0222
SPI1BUF 0224
地址
图注: u = 未初始化位
注: 有关寄存器中各位的描述,请参见 《dsPIC30F 系列参考手册》(DS70046E_CN)。
Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
SPISIDL —SPIROV — SPITBF SPIRBF
FRMEN SPIFSD DISSDO MODE16 SMP CKE SSEN CKP MSTEN SPRE2 SPRE1 SPRE0 PPRE1 PPRE0
发送和接收缓冲器
dsPIC30F2010
复位状态
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
dsPIC30F2010

16.0 I2C 模块

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

16.1 功能说明

硬件完全实现了 I2C 标准和快速模式规范的全部主从功 能,以及 7 位和 10 位寻址。
2
从而, I 可作为 I
16.1.1 各种 I2C™ 模式
支持 I2C 模块工作在以下模式:
•7位地址的 I
•10位地址的 I2C 从模式
•7位或 10 位地址的 I
参见图 16-1 中的 I

16.1.2 I2C™ 模块的引脚配置

I2C 有一个双引脚接口,SCL 引脚是时钟线,SDA 引脚
是数据线。
C 模块既可作为 I2C 总线上的主器件工作,也
2
C 总线上的从器件工作。
2
C 从模式
2
C 主模式
2
C 编程模型。
I2CRCV (8 位)
bit 0
I2CTRN(8 位)
bit 0
I2CBRG(9 位)
bit 0
I2CCON (16 位)
bit 0
I2CSTAT(16 位)
bit 0
I2CADD(10 位)
bit 0
2
16.1.3 I
I2CCON I2CSTAT分别是控制寄存器和状态寄存器。
I2CCON 寄存器是可读且可写的。I2CSTAT 的低 6 位是
只读的,它的其余位则是可读且可写的。
I2CRSR 是移位寄存器,用来对数据进行移位。I2CRCV
是接收缓冲寄存器,可写入、读出数据字节,如图 15-1
所示。 I2CTRN 是发送寄存器,发送操作期间,字节将
会写入 I2CTRN,如图 16-2 所示。
2007 Microchip Technology Inc. DS70118G_CN 第 95
C™ 寄存器
I2CADD 寄存器存放从地址。状态位 ADD10 表明是否为 10 位地址模式。 I2CBRG 用来保存波特率发生器
BRG)的重载值。
在进行接收时,I2CRSR 和 I2CRCV 一起形成双缓冲接 收器。在 I2CRSR 接收到一个完整的字节后,字节被送 至 I2CRCV 并产生中断脉冲。在发送期间,I2CTRN 不 是双缓冲的。
注: 10 位寻址方式下,在重复启动条件之
后,用户只需匹配前 7 位地址。
dsPIC30F2010
16-2 I2C™ 框图
内部
数据总线
SCL
SDA
移位 时钟
I2CRCV
I2CRSR
匹配检测
I2CADD
启动和停止位
检测
启动、重复启动
和停止位产生
冲突 检测
LSB
地址匹配
控制逻辑
I2CSTAT
移位 时钟
应答 产生
时钟 延长
I2CTRN
重载 控制
BRG 递减
计数器
LSB
FCY
I2CBRG
I2CCON
DS70118G_CN 96 2007 Microchip Technology Inc.
dsPIC30F2010

16.2 I2C模块地址

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

16.3 I2C7 位从模式的工作

一旦使能 (I2CEN = 1),从模块将等待一个启动位出
现 (即, I2C 模块 “空闲”)。检测到启动位之后, 8
个位将移入I2CRSR,然后地址将与I2CADD进行比较。
7 位寻址方式下 (A10M = 0), 位 I2CADD<6:0>
I2CRSR<7:1> 进行比较,而 I2CRSR<0> R_W
位。所有进入的位都是在 SCL 的上升沿采样的。
如果地址匹配的话,将发送一个应答,在第九个位
)的下降沿,从事件中断标志 (SI2CIF)置 1
ACK
地址匹配不影响 I2CRCV 缓冲器或 RBF 位的内容。

16.3.1 从模式发送

如果收到的 R_W 位为 1,串行端口将进入发送模式。模
块将在第九位发送 ACK
CPU I2CTRN 进行响应为止。通过把 SCLREL 1
SCL,而后数据的 8 个位被移出。数据位在 SCL
降沿移出,因此 SCL 为高 (参见时序图)时 SDA
效。将在第九个时钟脉冲的下降沿发出中断脉冲,而与
从主器件接收到的 ACK
,并使 SCL 保持为 0,直到
状态无关。

16.3.2 从模式接收

如果地址匹配时,接收到的 R_W 位是 0,就将启动接 收模式。在 SCL 上升沿采样进入的位。接收到 8 个位之 后,如果 I2CRCV 未满或者 I2COV 没有置 1I2CRSR 中的数据将被送至 I2CRCV。在第九个时钟发送 ACK
如果 RBF 标志置 1,表 明 I2CRCV 仍然存有前一次收到 的数据(RBF = 1),则不发送 ACK 中断脉冲。如果出现溢出,I2CRSR 的内容不会被装载 到 I2CRCV 中。
注: 如果 I2COV 位 为 1 且 RBF 标志为 0,将
装入 I2CRCV。在这种情况下,要对 I2CRCV进行读操作,但在下一次接收操作 发生之前,不会清零 I2COV 位。不发送应 答(ACK
= 1),但 I2CRCV 位会被更新。
;然而,仍将产生

16.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 位清零,模块返回到空闲状态。
2007 Microchip Technology Inc. DS70118G_CN 97
dsPIC30F2010

16.4.1 10 位地址从模式接收

一旦以上述方式使用完整的10 位地址寻址到从器件(我 们把这个状态叫做“PRIOR_ADDR_MATCH”),主器 件就可以开始送数据字节,从器件接收。

16.4.2 10 位地址从模式发送

一旦寻址到从器件,主器件就可以产生重复的启动位, 复位地址的高字节,并置 1 R_W 位,但不产生停止位, 于是开始进行从器件发送操作。

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

当模块工作在从模式下时,通过时钟低电平时间延长, 模块能够同步读缓冲器与写主器件。

16.5.1 发送时钟低电平时间延长

10 位或 7 位地址发送模式下,如果 TBF 位清零(这 表明缓冲器为空) ,则在第九个时钟的下降沿后清零 SCLREL 位,就实现了时钟延长。
在从发送模式下,始终进行时钟延长,无论 STREN 位 的状态为何。
在发送序列的第九个时钟之后,发生时钟同步。如果器 件在第九个时钟的下降沿采样到 ACK 然清零的话,则 SCLREL 位自动清零。 SCLREL 的清 零,将使得 SCL 线变低。在允许继续发送之前,用户中 断服务程序必须置 1 SCLREL 位。通过使 SCL 线保持 为低,在主器件启动另一个发送序列之前,用户就有时 间执行中断服务程序并载入 I2CTRN 的内容。
1: 如果用户载入 I2CTRN 的内容,在第九个
时钟下降沿之前置 1 TBF 位,则 SCLREL 位将不会被清零,也不会发生时钟延长。
2: 可以在软件中置 1 SCLREL 位,无论 TBF
位的状态为何。
,并且 TBF 位仍
16.5.3 7 位寻址时的时钟低电平时间延长
STREN = 1
从接收模式下,当 STREN 1 时,缓冲器已满时 SCL 线保持为低。延长 SCL 输出低电平时间的方法,对于使 用 7 位和 10 位寻址的从接收模式是相同的。
在接收序列第九个时钟之后进行时钟低电平时间延长。 在 ACK 序列末端的第九个时钟的下降沿,如果 RBF 位 置 1 的话, SCLREL 位将自动清零,这将强制 SCL 输 出保持为低。在允许继续接收之前,用户中断服务程序 必须置 1 SCLREL 位。通过使 SCL 线保持为低,在主 器件启动另一个接收序列之前,用户就有时间执行中断 服务程序并读出 I2CRCV 的内容。这将防止缓冲器溢 出。
1: 如果用户读 I2CRCV 的内容,在第九个时
钟下降沿之前置 1 RBF 位,则 SCLREL 位 将不会被清零,也不会发生时钟延长。
2: 可以在软件中置 1 SCLREL 位,无论 RBF
位的状态为何。为了防止溢出,在下一个 接收序列之前,用户应该在中断服务程序 中清零 RBF 位。
16.5.4 10 位寻址时的时钟低电平时间延长
STREN = 1
在寻址过程中自动进行时钟低电平时间延长。由于模块 有寄存器存放完整的地址,协议不必等待地址更新。
寻址过程完成后,每个数据接收或发送序列都要进行时 钟延长,如前所述。

16.5.2 接收时钟低电平时间延长

I2CCON 寄存器中的 STREN 位可以用来使能从件接收 模式下的时钟低电平时间延长。当 STREN 位置 1 时, SCL 引脚将在每个数据接收序列结束后保持为低。
DS70118G_CN 98  2007 Microchip Technology Inc.
Loading...