• 造梦西游3贺2012龙年 > dsPIC30F2011/2012/3012/3013
  • dsPIC30F2011/2012/3012/3013

    免费下载 下载该文档 文档格式:PDF   更新时间:2008-03-06   下载次数:0   点击次数:1
    文档基本属性
    文档语言:English
    文档格式:pdf
    文档作者:U.S. House of Representatives
    关键词:
    主题:
    备注:
    点击这里显示更多文档属性
    dsPIC30F2011/2012/3012/3013 数据手册
    高性能 16 位 数字信号控制器
    2007 Microchip Technology Inc.
    DS70139E_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, KEELOQ, KEELOQ 徽标, microID, MPLAB, PIC, PICmicro, PICSTART, PRO MATE, rfPIC 和 SmartShunt 均为 Microchip Technology Inc. 在美国和其他国家或地区的 注册商标. AmpLab, FilterLab, Linear Active Thermistor, Migratable Memory, MXDEV, MXLAB, SEEVAL, SmartSensor 和 The Embedded Control Solutions Company 均为 Microchip Technology Inc. 在美国的注册商标. Analog-for-the-Digital Age, Application Maestro, CodeGuard, dsPICDEM, dsPICDEM.net, dsPICworks, dsSPEAK, ECAN, ECONOMONITOR, FanSense, FlexROM, fuzzyLAB, In-Circuit Serial Programming, ICSP, ICEPIC, Mindi, MiWi, MPASM, MPLAB Certified 徽标,MPLIB,MPLINK,PICkit,PICDEM,PICDEM.net, PICLAB, PICtail, PowerCal, PowerInfo, PowerMate, PowerTool, REAL ICE, rfLAB, Select Mode, Smart Serial, SmartTel, Total Endurance, UNI/O, WiperLock 和 ZENA 均为 Microchip Technology Inc. 在美国和其他国家或地 区的商标. SQTP 是 Microchip Technology Inc. 在美国的服务标记. 在此提及的所有其他商标均为各持有公司所有. 2007, Microchip Technology Inc. 版权所有.
    Microchip 位于美国亚利桑那州 Chandler 和 Tempe 与位于俄勒冈州 Gresham 的全球总部,设计和晶圆生产厂及位于美国加利福尼亚州和 印度的设计中心均通过了 ISO/TS-16949:2002 认证.公司在 PIC MCU 与 dsPIC DSC, KEELOQ 跳码器件,串行 EEPROM,单片机外 设,非易失性存储器和模拟产品方面的质量体系流程均符合 ISO/TS16949:2002.此外, Microchip 在开发系统的设计和生产方面的质量体 系也已通过了 ISO 9001:2000 认证.
    DS70139E_CN 第 ii 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    dsPIC30F2011/2012/3012/3013 高性能 数字信号控制器
    注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用. 有关 CPU, 外 设,寄 存 器 说 明 和 一 般 器 件 功 能 的 更 多 信 息,请 参 见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .有关器件 指令集和编程的更多信息,请参见 《dsPIC30F/33F 程序员 . 参考手册》 (DS70157B_CN) 16 位比较 /PWM 输出功能 3 线 SPI 模块 (支持 4 种帧模式) I2C 模块支持多主器件 / 从模式和 7 位 /10 位寻

    最多两个带有 FIFO 缓冲区的可寻址 UART 模块
    高性能改进型 RISC CPU:
    改进的哈佛架构 优化的 C 编译器指令集架构 灵活的寻址模式 83 条基本指令 24 位宽指令, 16 位宽数据总线 最大 24 KB 的片上闪存程序空间 最大 2 KB 的片上数据 RAM 最大 1 KB 的非易失性数据 EEPROM 16 x 16 位工作寄存器阵列 工作速度最高可达 30 MIPS :
    模拟特性:
    12 位模数转换器 (ADC)具有以下特性:
    - 转换速率为 200 ksps - 最多 10 个输入通道 - 在休眠和空闲模式下可以进行转换 可编程低电压检测 (Programmable Low-Voltage Detection , PLVD) 可编程欠压复位
    特殊数字信号控制器特性:
    增强型闪存程序存储器:
    - DC 至 40 MHz 外部时钟输入 - 4 MHz - 10 MHz 振荡器输入,带 PLL (4 倍 频, 8 倍频和 16 倍频) 最多 21 个中断源: - 每一个中断具有 8 个用户可选择的中断优先 级 - 3 个外部中断源 - 4 个处理器陷阱源
    - 对于工业级温度范围,最少擦写次数 1 万次, 典型擦写次数 10 万次.
    数据 EEPROM 存储器:
    - 对于工业级温度范围,最少擦写次数 10 万 次,典型擦写次数 100 万次.
    软件控制下,可自行再编程 上电复位 (Power-on Reset, POR) ,上电延时
    DSP 特性:
    双数据取操作 模寻址和位反转寻址模式 两个具备可选饱和逻辑的 40 位宽累加器 17 位 x 17 位单周期硬件小数 / 整数乘法器 所有 DSP 指令均为单周期指令

    - 乘 - 累加 (MAC)操作
    在一个周期内可将数据左右移位 16 位
    定时器 (Power-up Timer, PWRT)以及振荡器 起振定时器 (Oscillator Start-up Timer, OST) 灵活的看门狗定时器 (Watchdog Timer, WDT) 带有片上低功耗 RC 振荡器,能保证可靠的运行 故障保护时钟监视器操作: - 检测时钟故障并切换到片上低功耗 RC 振荡器 可编程代码保护 在线串行编程 (In-Circuit Serial Programming , ICSP)功能 可选择的功耗管理模式: - 休眠,空闲和备用时钟模式
    外设特性:
    高灌电流 / 拉电流 I/O 引脚:25 mA/25 mA 3 个 16 位定时器 / 计数器;可选择将 16 位定时器
    CMOS 技术:
    低功耗高速闪存技术 宽工作电压范围为 2.5V 至 5.5V 工业级温度范围和扩展级温度范围 低功耗
    配对组成 32 位定时器模块 16 位输入捕捉功能
    2007 Microchip Technology Inc.
    DS70139E_CN 第1 页
    dsPIC30F2011/2012/3012/3013
    dsPIC30F2011/2012/3012/3013 传感器系列
    UART 字节 dsPIC30F2011 dsPIC30F3012 dsPIC30F2012 dsPIC30F3013 18 18 28 28 12K 24K 12K 24K 指令 4K 8K 4K 8K
    2
    器件
    引脚
    SRAM 字节 1024 2048 1024 2048
    EEPROM 字节 – 1024 – 1024
    16 位 定时器 3 3 3 3
    输入 捕捉 2 2 2 2
    输出比较 / 标准 PWM 2 2 2 2
    12 位 A/D 200 Ksps 8 通道 8 通道 10 通道 10 通道
    1 1 1 2
    1 1 1 1
    引脚图
    18 引脚 PDIP 和 SOIC
    MCLR EMUD3/AN0/VREF+/CN2/RB0 EMUC3/AN1/VREF-/CN3/RB1 AN2/SS1/LVDIN/CN4/RB2 AN3/CN5/RB3 OSC1/CLKI OSC2/CLKO/RC15 EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13 EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 1 2 3 4 5 6 7 8 9 18 17 16 15 14 13 12 11 10 AVDD AVSS AN6/SCK1/INT0/OCFA/RB6 EMUD2/AN7/OC2/IC2/INT2/RB7 VDD VSS PGC/EMUC/AN5/U1RX/SDI1/SDA/CN7/RB5 PGD/EMUD/AN4/U1TX/SDO1/SCL/CN6/RB4 EMUC2/OC1/IC1/INT1/RD0
    28 引脚 PDIP 和 SOIC
    MCLR EMUD3/AN0/VREF+/CN2/RB0 EMUC3/AN1/VREF-/CN3/RB1 AN2/SS1/LVDIN/CN4/RB2 AN3/CN5/RB3 AN4/CN6/RB4 AN5/CN7/RB5 VSS OSC1/CLKI OSC2/CLKO/RC15 EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13 EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 VDD IC2/INT2/RD9 1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 27 26 25 24 23 22 21 20 19 18 17 16 15 AVDD AVSS AN6/OCFA/RB6 EMUD2/AN7/RB7 AN8/OC1/RB8 AN9/OC2/RB9 CN17/RF4 CN18/RF5 VDD VSS PGC/EMUC/U1RX/SDI1/SDA/RF2 PGD/EMUD/U1TX/SDO1/SCL/RF3 SCK1/INT0/RF6 EMUC2/IC1/INT1/RD8
    28 引脚 SPDIP 和 SOIC
    MCLR EMUD3/AN0/VREF+/CN2/RB0 EMUC3/AN1/VREF-/CN3/RB1 AN2/SS1/LVDIN/CN4/RB2 AN3/CN5/RB3 AN4/CN6/RB4 AN5/CN7/RB5 VSS OSC1/CLKI OSC2/CLKO/RC15 EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13 EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 VDD IC2/INT2/RD9 1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 27 26 25 24 23 22 21 20 19 18 17 16 15 AVDD AVSS AN6/OCFA/RB6 EMUD2/AN7/RB7 AN8/OC1/RB8 AN9/OC2/RB9 U2RX/CN17/RF4 U2TX/CN18/RF5 VDD VSS PGC/EMUC/U1RX/SDI1/SDA/RF2 PGD/EMUD/U1TX/SDO1/SCL/RF3 SCK1/INT0/RF6 EMUC2/IC1/INT1/RD8
    注:
    关于各个引脚的详细说明,请参见第 1.0 节 "器件概述" .
    dsPIC30F301
    dsPIC30F201
    dsPIC30F301 dsPIC30F201
    DS70139E_CN 第2 页
    2007 Microchip Technology Inc.
    I C 1 1 1 1
    SPI
    程序存储器
    dsPIC30F2011/2012/3012/3013
    引脚图
    28 引脚 QFN
    注:
    关于各个引脚的详细说明,请参见第 1.0 节 "器件概述" .
    2007 Microchip Technology Inc.
    EMUD1/SOSC1/T2CK/U1ATX/CN1/RC13 EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 VDD NC EMUC2/OC1/IC1/INT1/RD0 NC PGD/EMUD/AN4/U1TX/SDO1/SCL/CN6/RB4
    8 9 10 11 12 13 14
    AN2/SS1/LVDIN/CN4/RB2 AN3/CN5/RB3 NC NC VSS OSC1/CLKI OSC2/CLKO/RC15
    28 27 26 25 24 23 22
    EMUC3/AN1/VREF-/CN3/RB1 EMUD3/AN0/VREF+/CN2/RB0 MCLR AVDD AVSS AN6/SCK1/INT0/OCFA/RB6 EMUD2/AN7/OC2/IC2/INT2/RB7
    1 2 3 4 5 6 7
    dsPIC30F2011
    21 20 19 18 17 16 15
    NC NC NC NC VDD VSS PGC/EMUC/AN5/U1RX/SDI1/SDA/CN7/RB5
    DS70139E_CN 第3 页
    dsPIC30F2011/2012/3012/3013
    引脚图
    28 引脚 QFN
    注:
    关于各个引脚的详细说明,请参见第 1.0 节 "器件概述" .
    EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13 EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 VDD IC2/INT2/RD9 EMUC2/IC1/INT1/RD8 SCK1/INT0/RF6 PGD/EMUD/U1TX/SDO1/SCL/RF3
    8 9 10 11 12 13 14
    AN2/SS1/LVDIN/CN4/RB2 AN3/CN5/RB3 AN4/CN6/RB4 AN5/CN7/RB5 VSS OSC1/CLKI OSC2/CLKO/RC15
    1 2 3 4 5 6 7
    28 27 26 25 24 23 22 21 20 19 18 17 16 15
    EMUC3/AN1/VREF-/CN3/RB1 EMUD3/AN0/VREF+/CN2/RB0 MCLR AVDD AVSS AN6/OCFA/RB6 EMUD2/AN7/RB7
    dsPIC30F2012
    AN8/OC1/RB8 AN9/OC2/RB9 CN17/RF4 CN18/RF5 VDD VSS PGC/EMUC/U1RX/SDI1/SDA/RF2
    DS70139E_CN 第4 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    引脚图
    44 引脚 QFN
    44 43 42 41 40 39 38 37 36 35 34 PGC/EMUC/AN5/U1RX/SDI1/SDA/CN7/RB5 VSS NC VDD NC NC NC NC NC NC NC 1 2 3 4 5 6 7 8 9 10 11 33 32 31 30 29 28 27 26 25 24 23 OSC2/CLKO/RC15 OSC1/CLKI VSS VSS NC NC NC NC AN3/CN5/RB3 NC AN2/SS1/LVDIN/CN4/RB2
    12 13 14 15 16 17 18 19 20 21 22 EMUD2/AN7/OC2/IC2/INT2/RB7 NC AN6/SCK1/INT0/OCFA/RB6 NC AVSS AVDD MCLR EMUD3/AN0/VREF+/CN2/RB0 EMUC3/AN1/VREF-/CN3/RB1 NC NC
    注:
    关于各个引脚的详细说明,请参见第 1.0 节 "器件概述" .
    2007 Microchip Technology Inc.
    PGD/EMUD/AN4/U1TX/SDO1/SCL/CN6/RB4 NC EMUC2/OC1/IC1/INT1/RD0 NC NC NC NC NC VDD EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13
    dsPIC30F3012
    DS70139E_CN 第5 页
    dsPIC30F2011/2012/3012/3013
    引脚图
    44 引脚 QFN
    44 43 42 41 40 39 38 37 36 35 34
    PGD/EMUD/U1TX/SDO1/SCL/RF3 SCK1/INT0/RF6 EMUC2/IC1/INT1/RD8 NC NC NC NC IC2/INT2/RD9 VDD EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13
    PGC/EMUC/U1RX/SDI1/SDA/RF2 VSS NC VDD NC NC U2TX/CN18/RF5 NC U2RX/CN17/RF4 AN9/OC2/RB9 AN8/OC1/RB8
    1 2 3 4 5 6 7 8 9 10 11
    dsPIC30F3013
    33 32 31 30 29 28 27 26 25 24 23
    OSC2/CLKO/RC15 OSC1/CLKI VSS VSS NC NC AN5/CN7/RB5 AN4/CN6/RB4 AN3/CN5/RB3 NC AN2/SS1/LVDIN/CN4/RB2
    注:
    关于各个引脚的详细说明,请参见第 1.0 节 "器件概述" .
    EMUD2/AN7/RB7 NC AN6/OCFA/RB6 NC AVSS AVDD MCLR EMUD3/AN0/VREF+/CN2/RB0 EMUC3/AN1/VREF-/CN3/RB1 NC NC
    12 13 14 15 16 17 18 19 20 21 22
    DS70139E_CN 第6 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    目录
    1.0 器件概述 ....................................................................................................................................................................................... 9 2.0 CPU 架构概述 ............................................................................................................................................................................ 17 3.0 存储器构成 ................................................................................................................................................................................ 27 4.0 地址发生器单元 .......................................................................................................................................................................... 41 5.0 闪存程序存储器 .......................................................................................................................................................................... 47 6.0 数据 EEPROM 存储器 ................................................................................................................................................................ 53 7.0 I/O 端口 ...................................................................................................................................................................................... 57 8.0 中断 ............................................................................................................................................................................................ 63 9.0 Timer1 模块 ................................................................................................................................................................................ 71 10.0 Timer2/3 模块 ............................................................................................................................................................................. 75 11.0 输入捕捉模块.............................................................................................................................................................................. 81 12.0 输出比较模块.............................................................................................................................................................................. 85 13.0 SPI 模块 ..................................................................................................................................................................................... 89 14.0 I2C 模块 ...................................................................................................................................................................................... 93 15.0 通用异步收发器 (UART)模块 ............................................................................................................................................... 101 16.0 12 位模数转换器 (ADC)模块 ................................................................................................................................................ 109 17.0 系统集成 ................................................................................................................................................................................... 119 18.0 指令集汇总 ............................................................................................................................................................................... 133 19.0 开发支持 ................................................................................................................................................................................... 141 20.0 电气特性 ................................................................................................................................................................................... 145 21.0 封装信息 ................................................................................................................................................................................... 183 索引 .................................................................................................................................................................................................... 193 Microchip 网站.................................................................................................................................................................................... 199 变更通知客户服务 .............................................................................................................................................................................. 199 客户支持............................................................................................................................................................................................. 199 读者反馈表 ......................................................................................................................................................................................... 200 产品标识体系 ..................................................................................................................................................................................... 201
    致 客 户
    我们旨在提供最佳文档供客户正确使用 Microchip 产品. 为此,我们将不断改进出版物的内容和质量,使之更好地满足您的要求. 出版物的质量将随新文档及更新版本的推出而得到提升. 如果您对本出版物有任何问题和建议,请通过电子邮件联系我公司 TRC 经理,电子邮件地址为 CTRC@microchip.com,或将本 数据手册后附的 《读者反馈表》传真到 86-21-5407 5066.我们期待您的反馈.
    最新数据手册
    欲获得本数据手册的最新版本,请查询我公司的网站: http://www.microchip.com 查看数据手册中任意一页下边角处的文献编号即可确定其版本. 文献编号中数字串后的字母是版本号, : 例如 DS30000A是DS30000 的 A 版本.
    勘误表
    现有器件可能带有一份勘误表,描述了实际运行与数据手册中记载内容之间存在的细微差异以及建议的变通方法.一旦我们了解到 器件 / 文档存在某些差异时,就会发布勘误表.勘误表上将注明其所适用的硅片版本和文件版本. 欲了解某一器件是否存在勘误表,请通过以下方式之一查询: Microchip 网站 http://www.microchip.com 当地 Microchip 销售办事处 (见最后一页) 在联络销售办事处时,请说明您所使用的器件型号,硅片版本和数据手册版本 (包括文献编号) .
    客户通知系统
    欲及时获知 Microchip 产品的最新信息,请到我公司网站 www.microchip.com 上注册.
    2007 Microchip Technology Inc.
    DS70139E_CN 第7 页
    dsPIC30F2011/2012/3012/3013
    注:
    DS70139E_CN 第8 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    1.0 器件概述
    注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用. 有关 CPU, 外 设,寄 存 器 说 明 和 一 般 器 件 功 能 的 更 多 信 息,请 参 见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .有关器件 指令集和编程的更多信息,请参见 《dsPIC30F/33F 程序员 参考手册》 (DS70157B_CN) .
    该数据手册包含 dsPIC30F2011, dsPIC30F2012, dsPIC30F3012 和 dsPIC30F3013 数字信号控制器 (Digital Signal Controller, DSC)的特定信息. dsPIC30F 系列器件在高性能 16 位单片机 (MCU)架 构中融合了大量数字信号处理器 (Digital Signal Processor, DSP)功能. 下列框图给出了 dsPIC30F 系列器件的架构: 图 1-1 说明 dsPIC30F2011 图 1-2 说明 dsPIC30F2012 图 1-3 说明 dsPIC30F3012 图 1-4 说明 dsPIC30F3013
    在框图后,表 1-1 给出了引脚功能信息.
    2007 Microchip Technology Inc.
    DS70139E_CN 第 9 页
    dsPIC30F2011/2012/3012/3013
    图 1-1: dsPIC30F2011 框图
    Y 数据总线 16 X 数据总线 16 中断 控制器 24 24 24 PCU PCH PCL 程序计数器 堆栈 循环 控制 控制 逻辑 逻辑 PSV 和表 数据访问 控制模块 16 16
    8
    16
    数据锁存器 数据锁存器 X 数据 Y 数据 RAM RAM (512 字节) (512 字节) 16 地址 地址 锁存器 锁存器 16 Y AGU 16 X RAGU X WAGU 16 EMUD3/AN0/VREF+/CN2/RB0 EMUC3/AN1/VREF-/CN3/RB1 AN2/SS1/LVDIN/CN4/RB2 AN3/CN5/RB3 PGD/EMUD/AN4/U1TX/SDO1/SCL/CN6/RB4 PGC/EMUC/AN5/U1RX/SDI1/SDA/CN7/RB5 AN6/SCK1/INT0/OCFA/RB6 EMUD2/AN7/OC2/IC2/INT2/RB7 PORTB
    地址锁存器 程序存储器 (12 KB) 数据锁存器
    有效地址 16
    ROM 锁存器 24 IR 16
    16
    16 16 x 16 W 寄存器阵列 PORTC 16 16
    EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13 EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 OSC2/CLKO/RC15
    译码
    指令 译码和 控制
    上电延时 定时器 OSC1/CLKI 时序 发生 振荡器 起振定时器 POR/BOR 复位 看门狗 定时器 低电压 检测
    DSP 引擎
    除法 单元
    EMUC2/OC1/IC1/INT1/RD0
    ALU 16 16 PORTD
    MCLR VDD, VSS AVDD, AVSS
    12 位 ADC
    输入 捕捉 模块
    输出 比较 模块
    I2C
    定时器
    SPI1
    UART1
    DS70139E_CN 第10 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    图 1-2: dsPIC30F2012 框图
    Y 数据总线 16 X 数据总线 16 中断 控制器 PSV 和表 数据访问 24 控制模块 24 24 PCU PCH PCL 程序计数器 循环 堆栈 控制 控制 逻辑 逻辑 16 16
    8
    16
    数据锁存器 数据锁存器 Y 数据 X 数据 RAM RAM (512 字节) (512 字节) 16 地址 地址 锁存器 锁存器 16 Y AGU 16 X RAGU X WAGU 16 EMUD3/AN0/VREF+/CN2/RB0 EMUC3/AN1/VREF-/CN3/RB1 AN2/SS1/LVDIN/CN4/RB2 AN3/CN5/RB3 AN4/CN6/RB4 AN5/CN7/RB5 AN6/OCFA/RB6 EMUD2/AN7/RB7 AN8/OC1/RB8 AN9/OC2/RB9 PORTB
    地址锁存器 程序存储器 (12 KB) 数据锁存器
    有效地址 16
    ROM 锁存器 24 IR 16
    16
    16 16 x 16 W 寄存器阵列 16 16
    EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13 EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 OSC2/CLKO/RC15 PORTC
    译码 指令 译码和 控制 DSP 引擎
    上电 延时定时器 OSC1/CLKI 时序 发生 振荡器 起振定时器 POR/BOR 复位 MCLR VDD, VSS AVDD, AVSS 看门狗 定时器 低电压 检测
    除法 单元 EMUC2/IC1/INT1/RD8 IC2/INT2/RD9 ALU PORTD
    16
    16
    12 位 ADC
    输入 捕捉 模块
    输出 比较 模块
    I2C PGC/EMUC/U1RX/SDI1/SDA/RF2 PGD/EMUD/U1TX/SDO1/SCL/RF3 CN17/RF4 CN18/RF5 SCK1/INT0/RF6 UART1 PORTF
    定时器
    SPI1
    2007 Microchip Technology Inc.
    DS70139E_CN 第 11 页
    dsPIC30F2011/2012/3012/3013
    图 1-3: dsPIC30F3012 框图
    Y 数据总线 16 X 数据总线 16 中断 控制器 24 24 24 PCU PCH PCL 程序计数器 堆栈 循环 控制 控制 逻辑 逻辑
    PSV 和表 数据访问 控制模块
    16
    16 数据锁存器 X 数据 RAM (1 KB) 地址 锁存器
    8
    16
    数据锁存器 Y 数据 RAM (1 KB) 地址 锁存器 16 Y AGU 16
    16
    16
    X RAGU X WAGU
    地址锁存器 程序存储器 (24 KB) 数据 EEPROM (1 KB) 数据锁存器 16
    EMUD3/AN0/VREF+/CN2/RB0 EMUC3/AN1/VREF-/CN3/RB1 AN2/SS1/LVDIN/CN4/RB2 AN3/CN5/RB3 PGD/EMUD/AN4/U1TX/SDO1/SCL/CN6/RB4 PGC/EMUC/AN5/U1RX/SDI1/SDA/CN7/RB5 AN6/SCK1/INT0/OCFA/RB6 EMUD2/AN7/OC2/IC2/INT2/RB7 PORTB
    有效地址
    ROM 锁存器 24 IR 16
    16
    16 16 x 16 W 寄存器阵列 PORTC 16 16
    EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13 EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 OSC2/CLKO/RC15
    译码 指令 译码和 控制 DSP 引擎
    上电 延时定时器 OSC1/CLKI 时序 发生 振荡器 起振定时器 POR/BOR 复位 MCLR VDD, VSS AVDD, AVSS 看门狗 定时器 低电压 检测
    除法 单元
    EMUC2/OC1/IC1/INT1/RD0
    ALU 16 16 PORTD
    12 位 ADC
    输入 捕捉 模块
    输出 比较 模块
    I2C
    定时器
    SPI1
    UART1
    DS70139E_CN 第12 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    图 1-4: dsPIC30F3013 框图
    Y 数据总线 16 X 数据总线 16 中断 控制器 24 24 24 地址锁存器 程序存储器 (24 KB) 数据 EEPROM (1 KB) 数据锁存器 16 PORTB ROM 锁存器 24 IR 16 16 x 16 W 寄存器阵列 16 16 16 16 有效地址 PCU PCH PCL 程序计数器 循环 堆栈 控制 控制 逻辑 逻辑 PSV 和表 数据访问 控制模块 16 16 数据锁存器 X 数据 RAM (1 KB) 地址 锁存器 16 X RAGU X WAGU 16
    8
    16
    数据锁存器 Y 数据 RAM (1 KB) 地址 锁存器 16 Y AGU
    16
    EMUD3/AN0/VREF+/CN2/RB0 EMUC3/AN1/VREF-/CN3/RB1 AN2/SS1/LVDIN/CN4/RB2 AN3/CN5/RB3 AN4/CN6/RB4 AN5/CN7/RB5 AN6/OCFA/RB6 EMUD2/AN7/RB7 AN8/OC1/RB8 AN9/OC2/RB9
    EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13 EMUC1/SOSCO/T1CK/U1ARX/CN0/RC14 OSC2/CLKO/RC15 PORTC
    译码 指令 译码和 控制 DSP 引擎
    上电 延时定时器 OSC1/CLKI 时序 产生 振荡器 起振定时器 POR/BOR 复位 MCLR VDD, VSS AVDD, AVSS 看门狗 定时器 低电压 检测
    除法 单元 EMUC2/IC1/INT1/RD8 IC2/INT2/RD9 ALU PORTD
    16
    16
    12 位 ADC
    输入 捕捉 模块
    输出 比较 模块
    I2C PGC/EMUC/U1RX/SDI1/SDA/RF2 PGD/EMUD/U1TX/SDO1/SCL/RF3 U2RX/CN17/RF4 U2TX/CN18/RF5 SCK1/INT0/RF6 UART1, UART2 PORTF
    定时器
    SPI1
    2007 Microchip Technology Inc.
    DS70139E_CN 第 13 页
    dsPIC30F2011/2012/3012/3013
    表 1-1 对器件的引脚配置和端口引脚的复用功能进行了 简要描述.端口引脚可具有多种功能.当发生复用时, 外设模块的功能要求可强制改写端口引脚的数据方向.
    表 1-1:
    引脚说明
    引脚名称 引脚 类型 I P P I O I I/O I/O I/O I/O I/O I/O I/O I/O I I I I I I/P O I I I/O I/O I I/O I/O I/O I/O I/O I O I 缓冲器 类型 Analog P P ST/CMOS - ST ST ST ST ST ST ST ST ST ST ST ST ST Analog ST - ST ST/CMOS - ST ST ST ST ST ST ST ST — ST 模拟输入通道. 模拟模块正电源. 模拟模块的参考地. 外部时钟源输入.总是与 OSC1 引脚功能相关联. 振荡器晶振输出.在晶振模式下,连接到晶振或谐振器.在 RC 和 EC 模式下,可选择作为 CLKO.总是与 OSC2 引脚功能相关 联. 输入电平变化通知输入. 可通过软件编程设定所有输入为内部弱上拉. ICD 主通信通道数据输入 / 输出引脚. ICD 主通信通道时钟输入 / 输出引脚. ICD 第二通信通道数据输入 / 输出引脚. ICD 第二通信通道时钟输入 / 输出引脚. ICD 第三通信通道数据输入 / 输出引脚. ICD 第三通信通道时钟输入 / 输出引脚. ICD 第四通信通道数据输入 / 输出引脚. ICD 第四通信通道时钟输入 / 输出引脚. 捕捉输入 1 和 2 外部中断 0 外部中断 1 外部中断 2 低电压检测参考电压输入引脚. 主复位输入或编程电压输入.本引脚为低电平有效的器件复位输 入端. 比较输出 1 和 2. 比较故障 A 输入. 振荡器晶振输入.配置为 RC 模式时,为 ST 缓冲器;否则为 CMOS. 振荡器晶振输出.在晶振模式下,连接到晶振或谐振器.在 RC 和 EC 模式下,可选择作为 CLKO. 在线串行编程数据输入/输出引脚. 在线串行编程时钟输入引脚. PORTB 为双向 I/O 口. PORTC 为双向 I/O 口. PORTD 为双向 I/O 口. PORTF 为双向 I/O 口. SPI1 的同步串行时钟输入 / 输出. SPI1 数据输入. SPI1 数据输出. SPI1 从同步. 说明
    AN0 - AN9 AVDD AVSS CLKI CLKO CN0 - CN7 EMUD EMUC EMUD1 EMUC1 EMUD2 EMUC2 EMUD3 EMUC3 IC1 - IC2 INT0 INT1 INT2 LVDIN MCLR OC1-OC2 OCFA OSC1 OSC2 PGD PGC RB0 - RB9 RC13 - RC15 RD0, RD8 - RD9 RF2 - RF5 SCK1 SDI1 SDO1 SS1
    图注:
    CMOS = ST = I =
    CMOS 兼容输入或输出 CMOS 电平的施密特触发器输入 输入
    Analog = O = P =
    模拟输入 输出 电源
    DS70139E_CN 第14 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    表 1-1: 引脚说明 (续)
    引脚名称 SCL SDA SOSCO SOSCI T1CK T2CK U1RX U1TX U1ARX U1ATX U2RX U2TX VDD VSS VREF+ VREF引脚 类型 I/O I/O O I I I I O I O I O P P I I 缓冲器 类型 ST ST - ST/CMOS ST ST ST - ST - ST - - - Analog Analog 说明 用于 I2C 的同步串行时钟输入 / 输出. 用于 I2C 的同步串行数据输入 / 输出. 32 kHz 低功耗晶振输出. 32 kHz 低功耗晶振输入.配置为 RC 模式时,为 ST 缓冲器;否 则为 CMOS. Timer1 外部时钟输入. Timer2 外部时钟输入. UART1 接收. UART1 发送. UART1 备用接收. UART1 备用发送. UART2 接收. UART2 发送. 逻辑电路和 I/O 引脚的正电源. 逻辑电路和 I/O 引脚的参考地. 模拟参考电压 (高电压)输入. 模拟参考电压 (低电压)输入.
    图注:
    CMOS = ST = I =
    CMOS 兼容输入或输出 CMOS 电平的施密特触发器输入 输入
    Analog = O = P =
    模拟输入 输出 电源
    2007 Microchip Technology Inc.
    DS70139E_CN 第 15 页
    dsPIC30F2011/2012/3012/3013
    注:
    DS70139E_CN 第16 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    2.0 CPU 架构概述
    访问程序存储器中的数据的方法有两种: 数据存储空间的高 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 引擎,从而能够显著增强内核的运 算和吞吐能力.DSP 引擎具备一个高速 17 位 x 17 位乘 法器,一个 40 位 ALU,两个 40 位饱和累加器和一个 至多可将累 40 位双向桶形移位寄存器.在单个周期内, 加器或工作寄存器中的数据右移 15 位或左移 16 位. DSP 指令可以无缝地与所有其他指令一起操作, 其设计 可实现最佳的实时性能. MAC类指令可以同时从存储器 中取出两个数据操作数并将两个W寄存器相乘.为了能 够同时取两个数据操作数,数据空间对于这些指令拆分 为两块,但对所有其他指令保持线性.对于 MAC 类指 令,这是通过将某些工作寄存器专用于每个地址空间, 以透明而灵活的方式实现的.
    注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用. 有关 CPU, 外 设,寄 存 器 说 明 和 一 般 器 件 功 能 的 更 多 信 息,请 参 见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .有关器件 指令集和编程的更多信息,请参见 《dsPIC30F/33F 程序员 参考手册》 (DS70157B_CN) .
    本章概述了 dsPIC30F 的 CPU 架构,其内核具有 24 位 指令字. 程序计数器 (PC)为 23 位宽,且最低有效位 (Least Significant bit, LSb)总 是 处 于 清 零 状 态 (见第 3.1 节 "程序地址空间"). 除某些专用指令 外,在 正 常 程 序 执 行 期 间,忽 略 最 高 有 效 位 (Most Significant bit,MSb) 鉴于此,PC 最多可寻址 4M 指 . 令字的用户程序空间.它使用指令预取机制来帮助维持 吞吐量. 使用 DO 和 REPEAT 指令支持无需循环计数管 理开销的程序循环结构,这两条指令在任何时候都可被 中断.
    2.1
    内核概述
    工作寄存器阵列由 16 个 16 位寄存器组成, 每个工作寄 存器都可以充当数据,地址或地址偏移量寄存器.工作 寄存器 (W15)用作中断和调用操作的软件堆栈指针. 数据空间为 64 KB (32K 字) ,它被分成两块,分别称 为 X 数据存储区和 Y 数据存储区.每个存储区都有各自 独 立 的 地 址 发 生 单 元 (Address Generation Unit, AGU) 大部分指令只通过 X 存储区 AGU 进行操作, . 这样对外界而言数据空间就是单独而统一的.乘-累加 (MAC)类双源操作数 DSP 指令通过 X 和 Y 的 AGU 进 行操作,将数据地址空间分成两个部分 (见第 3.2 节 "数据地址空间" .X 和 Y 数据空间的边界视具体器件 ) 而定,不能由用户修改. 每个数据字由 2 个字节组成, 大部分指令可以按字或字节对数据进行寻址.
    2007 Microchip Technology Inc.
    DS70139E_CN 第 17 页
    dsPIC30F2011/2012/3012/3013
    内核不支持多级指令流水线,它采用的是单级指令预取 机制,该机制在执行指令的前一个周期取要执行的指令 并对其部分译码,从而使可用执行时间最长.除了某些 特例外,大部分指令都在一个指令周期内执行完毕. 内核具有用于处理陷阱和中断的向量异常处理结构,提 供 62 个独立向量.异常由最多 8 个陷阱 (其中 4 个保 留)和 54 个中断组成. 根据用户指定的 1 到 7 之间的 优先级 (1 为最低优先级, 7 为最高优先级) ,以及预 定义的 "自然顺序" ,决定每个中断的优先级.陷阱的 优先级是固定的,其优先级范围是从 8 到 15.
    2.2.1
    软件堆栈指针 / 帧指针
    dsPIC DSC 器件具有一个软件堆栈. W15 是专用的软 件堆栈指针(Stack Pointer ,SP) .它可被异常处理, 子程序调用和返回自动修改,并且也能够被任何指令引 用 (方法与引用其他工作寄存器相同) .这样就简化了 对堆栈指针的读,写和操作 (例如,创建堆栈帧) . 注: 为 了 防 止 出 现 不 对 齐 的 堆 栈 访 问, W15 始终保持为零.
    复位时 W15 被初始化为 0x0800. 在初始化期间,用户 可以将 SP 重新编程以指向数据空间内的任何单元. W14 是专用的堆栈帧指针, LNK 和 ULNK 指令定义. 由 并且也能够被任何指令引用(方法与引用其他工作寄存 器相同) .
    2.2
    编程模型
    图 2-1 为编程模型, 它包括 16 个 16 位工作寄存器 (W0 至 W15) 2 个 40 位累加器 (ACCA 和 ACCB) , ,状 态寄存器 (SR) ,数据表页寄存器 (TBLPAG) ,程序 空间可视性页寄存器(PSVPAG) DO 和 REPEAT 寄 , 存器(DOSTART,DOEND, DCOUNT 和 RCOUNT) 以及程序计数器(PC) 工作寄存器可充当数据,地址 . 或偏移量寄存器. 所有寄存器均为存储器映射. W0 用 作执行文件寄存器寻址的 W 寄存器. 其中的一些寄存器有与之关联的影子寄存器 (见图2-1) . 影子寄存器被用作临时保存寄存器,它能够在事件发生 时将其主寄存器中的内容送入其中或将自身内容送回主 寄存器. 影子寄存器都是不可直接访问的. 如下指令适 用于寄存器与影子寄存器间的数据传递. PUSH.S 和 POP.S W0, W1, W2, W3 和 SR (仅限 DC, N, OV, Z 和 C 位)与对应的影子寄存器之间进行数 据传递. DO 指令 循环开始时, DOSTART, DOEND 和 DCOUNT 寄存器的内容压入影子寄存器,在循环结束时其内 容从各自的影子寄存器中弹出. 当对一个工作寄存器执行字节操作时,仅目的寄存器的 低字节 (Least Significant Byte, LSB)会受到影响. 但对于存储器映射的工作寄存器来说,可以通过对数据 存储空间进行字节宽度的访问来对工作寄存器的低字节 和高字节 (Most Significant Byte, MSB)进行操作, 这一点是很有益的.
    2.2.2
    状态寄存器
    dsPIC DSC 内核具有一个 16 位状态寄存器(SR) ,它 的低字节 (LSB)被称为 SR 低字节 (SRL) ,它的高 字节 (MSB)被称为 SR 高字节 (SRH) 有关 SR 的 . 组成请参见图 2-1. SRL 包含了所有的 MCU ALU 运算状态标志位(包括 Z 位) 以及CPU中断优先级状态位IPL和REPEAT , 有效状态位 RA.在异常处理期间,SRL 与 PC 的 MSB 连在一起形成一个完整的字值,然后将该字的值压入堆 栈. 状态寄存器的高字节包含 DSP 加法器 / 减法器状态位, DO 循环有效位 (DA)以及半进位 (DC)状态位.
    2.2.3
    程序计数器
    程序计数器为 23 位宽; bit 0 总是为零.因此, PC 可 寻址最多 4M 指令字.
    DS70139E_CN 第 18 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    图 2-1: 编程模型
    D15 W0/WREG W1 W2 W3 W4 DSP 操作数 寄存器 W5 W6 W7 W8 DSP 地址 寄存器 W9 W10 W11 W12/DSP 偏移量寄存器 W13/DSP 回写寄存器 W14/ 帧指针 W15/ 堆栈指针 SPLIM AD39 DSP 累加器 PC22 7 TABPAG TBLPAG 7 PSVPAG 0 程序空间可视性页地址 15 RCOUNT 15 DCOUNT 22 DOSTART 22 DOEND 15 CORCON OA OB SA SB OAB SAB DA SRH DC IPL2 IPL1 IPL0 RA N OV Z 0 内核配置寄存器 DO 循环结束地址 0 DO 循环起始地址 0 DO 循环计数器 0 REPEAT 循环计数器 0 数据表页地址 ACCA ACCB PC0 0 程序计数器 AD31 堆栈指针限制寄存器 AD15 AD0 工作寄存器
    DO 影子寄存器
    D0
    PUSH.S 影子寄存器
    图注
    C
    状态寄存器
    SRL
    2007 Microchip Technology Inc.
    DS70139E_CN 第 19 页
    dsPIC30F2011/2012/3012/3013
    2.3 除法支持
    dsPIC DSC 器件支持 16 位 /16 位有符号小数除法运算, 32 位 /16 位和 16 位 /16 位有符号和无符号整数除法运 算.所有除法运算都是单指令周期内的迭代操作.支持 以下指令和数据长度: 1. 2. 3. 4. 5. DIVF — 16/16 有符号小数除法 DIV.sd — 32/16 有符号除法 DIV.ud — 32/16 无符号除法 DIV.s — 16/16 有符号除法 DIV.u — 16/16 无符号除法 必须在一个 REPEAT 循环周期内执行除法指令.任何其 他执行方式(例如一系列不连续的除法指令)都无法得 到正确的结果,因为指令流取决于 RCOUNT 的值. 除 法指令本身无法自动设置 RCOUNT 值,因此必须在 REPEAT 指令中明确且正确给出该值,如表 2-1 所示 (REPEAT 将执行目标指令 {操作数的值+ 1}次). DIV/ DIVF指令的REPEAT循环计数必须被设置为18次迭代. 因此,一个完整的除法运算需要 19 个指令周期. 注: 除法流是可中断的.但用户需要正确地保 护现场.
    16/16 除法与 32/16 除法类似(迭代次数相同) ,区别在 于发生第一次迭代时,被除数要执行零扩展或是符号扩 展.
    表 2-1:
    指令 DIVF DIV.sd DIV.s DIV.ud DIV.u
    除法指令
    功能 有符号小数除法:Wm/Wn → W0; Rem → W1 有符号除法:(Wm+1:Wm)/Wn → W0; Rem → W1 有符号除法:Wm/Wn → W0; Rem → W1 无符号除法:(Wm+1:Wm)/Wn → W0; Rem → W1 无符号除法:Wm/Wn → W0; Rem → W1
    DS70139E_CN 第 20 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    2.4 DSP 引擎
    DSP 引擎由一个高速 17 位 x 17 位乘法器, 一个桶形移 位寄存器和一个 40 位加法器 / 减法器 (带有两个目标 累加器以及舍入和饱和逻辑)组成. DSP 引擎能够执行固有的"累加器—累加器"操作,而 无需额外数据. 这些指令为 ADD, SUB 和 NEG. dsPIC30F 采用单周期指令流架构, 因此 DSP 引擎操作 和MCU指令流不能同时进行.但某些MCU ALU和DSP 引擎资源可被同一条指令同时使用 (如 ED 和 EDAC) . (有关 DSP 指令见表 2-2) . 通过 CPU 内核配置寄存器(CORCON)的不同位可以 选择 DSP 引擎的不同功能,如下所示: 1. 2. 3. 4. 5. 6. 7. 小数或整数 DSP 乘法 (IF) . 有符号或无符号 DSP 乘法 (US) . 常规或收敛舍入 (RND) . ACCA 自动饱和使能 / 禁止 (SATA) . ACCB 自动饱和使能 / 禁止 (SATB) . 用于写数据存储器的自动饱和使能/禁止 (SATDW) . 累加器饱和模式选择 (ACCSAT) . 注: 请参见表 3-3 了解 CORCON 的组成.
    图 2-1 给出了 DSP 引擎的框图.
    表 2-2:
    DSP 指令汇总
    指令 CLR ED EDAC MAC MAC MOVSAC MPY MPY.N MSC 代数运算 A=0 A = (x – y)2 A = A + (x – y)2 A = A + (x * y) A = A + x2 A 的值不发生变化 A=x*y A=–x*y A=A–x*y ACC 回写 是 否 否 是 否 是 否 否 是
    2007 Microchip Technology Inc.
    DS70139E_CN 第 21 页
    dsPIC30F2011/2012/3012/3013
    图 2-2: DSP 引擎框图
    进位 / 借位输出 进位 / 借位输入
    饱和 加法器 取补 40 桶形 移位 寄存器
    40
    40
    16
    符号扩展
    Y 数据总线
    32 33 32
    补零
    16
    17 位 乘法器 / 定标器 16 16
    到 / 来自 W 阵列
    DS70139E_CN 第 22 页
    2007 Microchip Technology Inc.
    X 数据总线
    40
    饱和
    40
    40 位累加器 A 40 位累加器 B
    40
    舍入 逻辑
    S a t 16 u r a t e
    dsPIC30F2011/2012/3012/3013
    2.4.1 乘法器 2.4.2.1 加法器 / 减法器,溢出和饱和
    17位 x 17位的乘法器可以进行有符号或无符号的运算, 其输出经过定标器进行换算后可支持 1.31 小数(Q31) 或 32 位整数结果.无符号操作数经过零扩展后,送入 乘法器输入值的第 17 位. 有符号操作数经过符号扩展, 送入乘法器输入值的第 17 位.17 位 x 17 位乘法器 / 定 标器的输出是 33 位值, 它将被符号扩展为 40 位.整型 数据的固有表示形式为有符号的二进制补码值,其中, MSb 定义为符号位.一般来说,N 位二进制补码整数的 范围为 -2N-1 到 2N-1 – 1.对于 16 位整数,数据范围是 -32768 (0x8000) 至 32767 (0x7FFF) ,包括 0 在 内.对 于 32 位 整 数,数 据 范 围 是 -2,147,483,648 (0x8000 0000)至 2,147,483,645 (0x7FFF FFFF) . 当乘法器配置为小数乘法时,数据表示为二进制补码小 数,其中 MSb 定义为符号位,小数点暗含在符号位之 后 (QX 格式) .暗含小数点的 N 位二进制补码小数的 .对于 16 位小数,Q15 数据 范围是 -1.0 至(1 – 21-N) 范围是 -1.0 (0x8000)至 0.999969482 (0x7FFF) , 包括 0 在内,其精度为 3.01518x10-5.在小数方式下, 16x16 乘法运算将产生 1.31 乘积,其精度为 4.65661 x 10-10. 同一个乘法器还用来支持 MCU 乘法指令,包括整数的 16 位有符号,无符号和混和符号乘法. MUL 指令可以使用字节或字长度的操作数.字节操作数 将产生 16 位结果,而字操作数将产生 32 位结果,结果 存放在 W 寄存器阵列的指定寄存器中. 加法器 / 减法器为一个 40 位的加法器, 一侧输入可以选 择为零,而另一侧的输入可以是数据的原码或补码.对 于加法, 进位 / 借位输入是高有效的,另一侧输入是数 据的原码 (没有求补的);对于减法,进位 / 借位输入 是低有效的,另一侧输入是数据的补码.由状态寄存器 中的 SA/SB 和 OA/OB 提供加法器 / 减法器的溢出状态 : 从 bit 39 溢出:这是一种灾难性的溢出,因为它破 坏了累加器的符号位. 溢出到警戒位 bit 32 至 bit 39:这是一种可恢复的 溢出.这些警戒位不完全相同时,该位置 1. 加法器有一个额外的饱和模块,如果选用该模块将控制 累加器的数据饱和.饱和模块使用加法器的结果,上一 段所述的溢出状态位以及 SATA/B (CORCON) 和 ACCSAT (CORCON)模式控制位来决定何时 以及在何值达到饱和. 在状态寄存器中有 6 个支持饱和及溢出的位, 它们是 : 1. 2. 3. OA: ACCA 溢出至警戒位 OB: ACCB 溢出至警戒位 SA: ACCA 已饱和 (bit 31 溢出并饱和)

    4. ACCA 溢出至警戒位并饱和 (bit 39 溢出并饱和) SB: ACCB 已饱和 (bit 31 溢出并饱和)
    2.4.2
    数据累加器和加法器 / 减法器
    数据累加器具有一个带有自动符号扩展逻辑的 40 位加 法器 / 减法器.它可以选择两个累加器 (A 或 B)之一 作为它累加前的源和累加后的目标. 对于 ADD 和 LAC 指 令,可选择通过桶形移位器在累加之前对将被累加或装 入的数据进行换算.

    5. 6. ACCB 溢出至警戒位并饱和 (bit 39 溢出并饱和) OAB: OA 和 OB 的逻辑或 (OR) SAB: SA 和 SB 的逻辑或 (OR)
    每次数据通过加法器 / 减法器,就会修改 OA 位和 OB 位.置 1 时,它们表明最近的运算已经溢出到累加器警 戒位 (bit 32 到 bit 39) 如果 OA 和 OB 位置 1 而且 . INTCON1 寄存器中相应的溢出陷阱允许位(OVATE 和 OVBTE)也置 1 的话,还可以选择用 OA 和 OB 位产生 算术警告陷阱 (见第 8.0 节 "中断" . 这使得用户能 ) 够立即采取措施,例如校正系统增益.
    2007 Microchip Technology Inc.
    DS70139E_CN 第 23 页
    dsPIC30F2011/2012/3012/3013
    每次数据通过加法器 / 减法器,就会修改 SA 和 SB 位, 但它们只能由用户清零. 置 1 时,它们表明累加器已经 溢出其最大范围 (32 位饱和是 bit 31,而 40 位饱和是 bit 39) ,将发生饱和 (如果饱和使能的话) 如果没有 . 使能饱和,SA 和 SB 置 1 默认为 bit 39 溢出, 即表明发 生灾难性溢出. 如果 INTCON1 寄存器中的 COVTE 位 置 1,当饱和被禁止时,SA 和 SB 位将产生算术警告陷 阱. 可选择将状态寄存器中的溢出和饱和状态位分别视作 OA 和 OB 的逻辑或 (OAB 位)以及 SA 和 SB 的逻辑 或(SAB 位) 这样,只需要检查状态寄存器中的一个 . 位,编程人员就能够判断出是否有累加器溢出;检查状 态寄存器中另一个位就能判断出是否有累加器饱和.对 于通常需要使用两个累加器的复数运算而言,这很有 用. 器件支持三种饱和及溢出模式: 1. Bit 39 溢出和饱和: 当发生 bit 39 溢出和饱和时, 饱和逻辑将最大的正 数 9.31 (0x7FFFFFFFFF)或最小的负数 -9.31 值(0x8000000000)装入目标累加器.SA 或 SB 位被置 1 且保持置 1 状态,直至被用户清零. 这 称为 "超饱和" ,为错误数据或不可预期的算法 问题 (例如,增益计算)提供了保护机制. 2. Bit 31 溢出和饱和: 饱和逻辑将最大的正 当发生 bit 31 溢出和饱和时, 数 1.31 (0x007FFFFFFF)或最小的负数 -1.31 装入目标累加器.SA 或 SB 位 (0x0080000000) 被置 1 且保持置 1 状态,直至被用户清零. 当此 饱和模式生效时,不使用警戒位,因此 OA, OB 或 OAB 位永远不会置 1. 3. Bit 39 灾难性溢出: 加法器的 bit 39 溢出会将 SA 或 SB 位置 1 并保 持该状态直至被用户清零. 不执行饱和操作,允 许累加器溢出 (破坏累加器的符号位) . 如果 INTCON1 寄存器中的 COVTE 位置 1, 则灾难性 溢出可能引发陷阱异常.
    2.4.2.2
    累加器 " 回写"
    MAC 类指令 (MPY, MPY.N,ED 和 EDAC 除外)可以 选择将累加器高位字 (bit 16 至 bit 31)的舍入形式写 入数据存储空间,前提是当前指令不对该累加器进行操 作. 通过 X 总线将数据写入组合的 X 和 Y 地址空间来 执行此回写操作.支持下列寻址模式: 1. W13,寄存器直接寻址: 非目标累加器的舍入内容以 1.15 小数形式写入 W13. [W13] + = 2,带后递增的寄存器间接寻址: 非目标累加器的舍入内容以 1.15 小数形式写入 W13 指向的地址. W13 的值递增 2 (对于字写 操作) .
    2.
    2.4.2.3
    舍入逻辑
    舍入逻辑为一个组合的模块,在累加器写 (存储)过程 中可以执行常规的 (有偏)或收敛的 (无偏)舍入功 能. 由 CORCON 寄存器的 RND 位的状态决定舍入模 式.它会产生一个 16 位的 1.15 数据值,该值被送入到 数据空间写饱和逻辑.如果指令没有明确指定舍入,那 么将会存储一个截取的 1.15 数据值而只丢弃低位字 (lsw) . 常规舍入取累加器 bit 15 的值,对其进行零扩展并将扩 展值加到 ACCxH 字 (累加器的 bit 16 至 bit 31) . 如 果 ACCxL 字(累加器的 bit 0 至 bit 15)的值在 0x8000 到 0xFFFF (含 0x8000)之间, ACCxH 的值递增 1. 如果 ACCxL 字的值在 0x0000 到 0x7FFF 之间,ACCxH 的值不变.此算法的结果经过一系列随机舍入操作,值 将稍稍偏大 (正偏) . 收 敛 (或 无 偏)舍 入 操 作 与 常 规 舍 入 操 作 相 同,但 ACCxL 等于 0x8000 时例外. 在此种情况下,检查 . ACCxH 的最低位 (累加器的 bit 16) 如果该位为 1, ACCxH 的值增 1. 如果该位为 0, ACCxH 的值不变. 假设 bit 16 本身就是一个随机数,那么此机制将消除任 何可能累加的舍入偏差. SAC 和 SAC.R 指令通过 X 总线将目标累加器内容的截取 值 (SAC)或舍入值 (SAC.R)存储到数据存储空间. (受数据饱和的影响,见第 2.4.2.4 节 "数据空间写饱 和" . 注意对于 MAC 类指令,累加器回写操作以相同 ) 的方式工作,通过 X 总线访问组合的 MCU (X 和 Y) 数据空间.对于此类指令,总是对数据进行舍入.
    DS70139E_CN 第 24 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    2.4.2.4 数据空间写饱和 2.4.3 桶形移位器
    除加法器 / 减法器会饱和外,写数据空间也会饱和但不 影响源累加器的内容.数据空间写饱和逻辑模块接受一 个来自舍入逻辑模块的 16 位 1.15 小数值作为其输入, 还接受来自源 (累加器)和 16 位舍入加法器的溢出状 用来选择恰当的 1.15 小数值作为输 态.这些经过组合, 出,写入至数据存储空间中. 如果 CORCON 寄存器的 SATDW 位置 1,则检测数据 (舍入和截取后的值)是否溢出并作相应调整. 针对大 于 0x007FFF 的输入数据,写入存储器的数据被强制为 最大的1.15值形式的正数0x7FFF.针对小于0xFF8000 的输入数据, 写入存储器的数据被强制为最大的 1.15 值 形式的负数 0x8000.源累加器的最高位 (bit 39)用来 决定被检测的操作数的符号. 如果 CORCON 寄存器中的 SATDW 位没有置 1,则输 入数据都将通过,在任何情况下都不会被修改. 桶形移位寄存器在单个周期内可将数据逻辑或算术右移 或左移最多 16 位.源操作数可为两个 DSP 累加器之一 或 X 总线(以支持对寄存器或存储器中的数据进行多位 移位) . 移位寄存器需要一个有符号二进制值来确定移位操作的 方向和幅度 (位的数量) 正数将操作数右移. 负数将 . 操作数左移.0 值不改变操作数. 桶形移位寄存器是 40 位宽的,于是,它为 DSP 移位操 作提供了 40 位的结果,而为 MCU 移位操作提供 16 位 的结果.来自 X 总线的数据在桶形移位寄存器中的存放 方式是:右移则数据存放在 bit 16 至 bit 31,左移则存 放在 bit 0 至 bit 15.
    2007 Microchip Technology Inc.
    DS70139E_CN 第 25 页
    dsPIC30F2011/2012/3012/3013
    注:
    DS70139E_CN 第 26 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    3.0 存储器构成
    注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用.有关CPU, 外 设,寄 存 器 说 明 和 一 般 器 件 功 能 的 更 多 信 息,请 参 见 《dsPIC30F 系列参考手册》 (DS70046E_CN) 有关器件 . 指令集和编程的更多信息,请参见 《dsPIC30F/33F 程序员 参考手册》 (DS70157B_CN) .
    当程序空间按表 3-1 中的定义映射到数据空间时,可由 来自 23 位 PC,表指令有效地址 (Effective Address, EA) 或数据空间 EA 的 24 位值寻址.注意在访问连续的 程序字时,程序空间地址应该增 2 以与数据空间寻址相 一致. 用户只能访问程序存储空间的低 4M 指令字 (地址范围 为 0x000000 至 0x7FFFFE);使用 TBLRD/TBLWT 指 令时情况有所不同,这两条指令使用 TBLPAG 来确 定访问用户空间还是配置空间. 在表 3-1 (程序空间地 址构成)中,bit 23 为 1 允许访问器件 ID,用户 ID 和配 置位.否则, bit 23 总是处于清零状态.
    3.1
    程序地址空间
    程序地址空间为 4M 指令字. dsPI30F2011/2012 的程 序存储空间映射如图 3-1 所示. dsPI30F3012/3013 的 程序存储空间映射如图 3-2 所示.
    2007 Microchip Technology Inc.
    DS70139E_CN 第 27 页
    dsPIC30F2011/2012/3012/3013
    图 3-1: dsPIC30F2011/2012 程序存 储空间映射
    复位 – GOTO 指令 复位 – 目的地址 000000 000002 000004
    图 3-2:
    dsPIC30F3012/3013 程序存 储空间映射
    复位 – GOTO 指令 复位 – 目的地址 000000 000002 000004
    中断向量表
    中断向量表 向量表
    保留
    00007E 000080
    向量表
    保留
    00007E 000080
    备用向量表 备用向量表 用户存储 空间 用户存储 空间 000084 0000FE 000100 用户闪存 程序存储器 (8K 指令字) 保留 (读为 0) 数据 EEPROM (1 KB) 7FFFFE 800000 003FFE 004000 7FFBFE 7FFC00 7FFFFE 800000
    用户闪存 程序存储器 (4K 指令字)
    000084 0000FE 000100
    001FFE 002000
    保留 (读为 0)
    配置存储 空间
    配置存储 空间
    保留
    保留
    8005BE 8005BE 8005C0 8005FE 800600 F7FFFE F80000 F8000E F80010 部件 ID (32 指令字) 保留 器件配置 寄存器 8005C0 8005FE 800600 F7FFFE F80000 F8000E F80010
    部件 ID (32 指令字) 保留 器件配置 寄存器
    保留
    保留
    DEVID (2)
    FEFFFE FF0000 FFFFFE
    DEVID (2)
    FEFFFE FF0000 FFFFFE
    DS70139E_CN 第 28 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    表 3-1: 程序空间地址构成
    访问 空间 用户 用户 (TBLPAG = 0) 配置 (TBLPAG = 1) 用户 0 0 TBLPAG TBLPAG PSVPAG 程序空间地址 PC 数据 EA 数据 EA 数据 EA 0 访问类型 指令访问 TBLRD/TBLWT TBLRD/TBLWT 程序空间可视性
    图 3-3:
    访问程序空间中的数据的地址生成方式
    23 位 使用 程序 计数器 0 程序计数器 0
    选择 使用 程序 空间 可视性 0 PSVPAG 寄存器 8位
    1
    EA
    15 位
    EA 使用 表指令 1/0 TBLPAG 寄存器 8位 用户 / 配置 空间 选择 注: 16 位
    24 位 EA
    字节 选择
    程序空间可视性不能用来对程序存储空间中字的 bit 进行访问.
    2007 Microchip Technology Inc.
    DS70139E_CN 第 29 页
    dsPIC30F2011/2012/3012/3013
    3.1.1 使用表指令访问程序存储器中的数据
    由于此类器件的架构对 24 位宽的程序存储器取指. 因 此指令始终是对齐的. 由于采用的是改进的哈佛架构, 因此也可以在程序空间中存储数据. 访问程序空间的方法有 2 种:通过特殊表指令,或通过 将 16K 字大小的程序空间页重映射到数据空间的上半部 分(见第 3.1.2 节 "使用程序空间可视性访问程序存储 器中的数据" .TBLRDL 和 TBLWTL 指令提供了无需通 ) 过 数据 空 间,直 接 读写 程 序 空 间任 何 地 址 的低 位 字 (lsw)的方法, TBLRDH 和 TBLWTH 指令是可以把一 个程序空间字的最高 8 位作为数据存取的惟一方法. 要访问两个连续的 24 位程序字,PC 的递增量为 2.这 使得程序存储器地址能够被直接映射到数据空间地址 中. 于是,程序存储器可以被看作是两个 16 位字宽的 地 址 空 间,它 们 并 排 放 置 且 具 有 相 同 的 地 址 范 围. TBLRDL 和 TBLWTL 访 问 包 含 数 据 低 位 字 的 空 间, TBLRDH 和 TBLWTH 访问包含数据最高字节的空间. 图 3-3 给出了表操作和数据空间访问(PSV = 1)时 EA 的构成方式. 在该图中, P 指程序空间字,而 D 指数据空间字. 4. 提供了一组表指令,可使用它们来在程序空间和数据空 间之间传送字节或字大小的数据(见图 3-4 和图 3-5) . 1. TBLRDL:对低位字执行表读操作 字:读程序地址的低位字; P 映射到 D. 字 节:读 程 序 地 址 的 某 个 较 低 的 字 节 ; 当字节选择位 = 0 时, P 映射到目标字节; 当字节选择位 = 1时, P映射到目标字节. TBLWTL:对低位字执行表写操作 (有关闪存编 程的详细信息见第 5.0 节 "闪存程序存储器" ) TBLRDH:对高位字执行表读操作 字:读程序地址的高位字; P 映射到 D ; D 将始终为零 (= 0) . 字 节:读 程 序 地 址 的 某 个 较 高 的 字 节 ; 当字节选择位 = 0 时, P 映射到目标字 节; 当字节选择位 = 1 时,目标字节将始终为零 (= 0) . TBLWTH:对高位字执行表写操作 (有关闪存编 程的详细信息见第 5.0 节 "闪存程序存储器" )
    2. 3.
    图 3-4:
    PC 地址
    程序数据表访问 (低位字)
    23 00000000 00000000 00000000 00000000
    16
    8
    0
    0x000000 0x000002 0x000004 0x000006
    程序存储器 "虚拟"字节 (读为 0)
    TBLRDL.W
    TBLRDL.B (Wn = 0) TBLRDL.B (Wn = 1)
    DS70139E_CN 第 30 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    图 3-5: 程序数据表访问 (MSB)
    TBLRDH.W PC 地址 0x000000 0x000002 0x000004 0x000006 00000000 00000000 00000000 00000000 TBLRDH.B(Wn = 0) 程序存储器 "虚拟"字节 (读为 0) 23
    16
    8
    0
    TBLRDH.B(Wn = 1)
    3.1.2
    使用程序空间可视性访问程序存储器 中的数据
    可选择将数据空间的高 32 KB 映射到任何 16K 字程序空 间页.这提供了对存储在 X 数据空间的常量数据的透明 访问, 而无需使用特殊指令 (即 TBLRDL/H 和 TBLWTL/ H 指令) . 如果数据空间 EA 的最高位置 1,且通过将内核控制寄 存器(CORCON)中的 PSV 位置 1 使能程序空间可视 性, 就可以通过数据空间访问程序空间.第2.4节 "DSP 引擎"中对 CORCON 的功能进行了讨论. 访问此区域的数据会增加一个额外的指令周期,因为需 要进行两次程序存储空间取操作. 注意,可寻址数据空间的上半部分始终位于 X 数据空间 内. 因此,当 DSP 操作使用程序空间映射来访问这个 存储区域时, 数据空间通常应该存放 DSP 操作的状态 Y (变量)数据,而 X 数据空间通常应该存放系数 (常 量)数据. 尽管大于等于 0x8000 的每个数据空间地址直接映射到 对应的程序存储器地址(见图 3-6) ,但只使用 24 位程 序字的低 16 位来存储数据. 应对高 8 位进行编程强制 使得对其的访问为非法以维持器件的可靠性.有关指令 编码的细节, 请参见 《dsPIC30F/33F 程序员参考手册》 (DS70157B_CN) .
    注意,每访问一个程序存储字, PC 就会递增 2,数据空 间地址的低 15 位直接被映射到相应程序空间地址的低 15 位. 其余位由程序空间可视性页寄存器 (PSVPAG) 提供,如图 3-6 所示. 注: 在表读 / 写操作时暂时禁止 PSV 访问.
    对于在 REPEAT 循环外执行的使用 PSV 的指令: 以下指令除规定的执行时间外还需一个额外的指令 周期: - 带数据操作数预取操作的 MAC 类指令 - MOV 指令 - MOV.D 指令 所有其他指令除规定的执行时间外还需两个额外的 指令周期. 对于在 REPEAT 循环内执行的使用 PSV 的指令: 以下指令除规定的执行时间外还需两个额外的指令 周期: - 在第一次迭代时执行的指令 - 在最后一次迭代时执行的指令 - 在由于中断而退出循环前执行的指令 - 中断被处理后,在重新进入循环时执行的指令 对于在 REPEAT 循环的任何其他迭代中使用 PSV 访问数据的指令,其执行时间为一个周期.
    2007 Microchip Technology Inc.
    DS70139E_CN 第 31 页
    dsPIC30F2011/2012/3012/3013
    图 3-6: 将数据空间映射到程序空间的操作
    数据空间 0x0000 15 PSVPAG(1) 0x00 8 程序空间 0x000000
    EA = 0
    数据 空间 EA
    16 15 EA = 1 0x8000 15 地址 连接 23 23 15 0 0x001200
    数据空间的上 半部分被映射 至程序空间 0xFFFF 数据读
    BSET MOV MOV MOV CORCON,#2 #0x00, W0 W0, PSVPAG 0x8200, W0 ; PSV bit set ; Set PSVPAG register ; Access program memory location ; using a data space access
    0x001FFF

    1: PSVPAG 是一个 8 位寄存器,它包含了程序空间地址的 bit .
    DS70139E_CN 第 32 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    3.2 数据地址空间
    内核具有两个数据空间.可将这两个数据空间视为两个 独立的空间 (对于某些 DSP 指令)或是一个统一的线 性寻址空间(对于 MCU 指令) 使用两个地址发生单元 . (AGU)和相互独立的数据路径对这两个数据空间进行 访问. 执行 MAC 类指令以外的任何指令时, 空间由 64 KB 数 X 据地址空间 (包括了全部的 Y 空间地址)组成. 执行 MAC类指令时, X块由不包括Y地址块 (只用于数据读操 作)的 64 KB 数据地址空间组成.也就是说,所有其他 指令将整个数据存储空间视作一个组合的地址空间. MAC 类指令把 Y 地址空间从数据空间中分离出来, 并使 用来自 W10 和 W11 的 EA 对 Y 空间寻址.使用 W8 和 W9 对剩余的 X 数据空间寻址.只有通过 MAC 类指令才 能同时访问这两个地址空间. dsPI30F2011/2012 的数据存储空间映射如图 3-7 所示. dsPI30F2012/2013 的数据存储空间映射如图 3-8 所示.
    3.2.1
    数据存储空间映射
    数据存储空间被分为两大块, 它们是 X 数据空间和 Y 数 据空间. 该架构的关键之处在于 Y 空间是 X 空间的子 集,它完全包含在 X 空间内.要提供一种表面看似线性 的寻址空间, X 空间和 Y 空间需要具有连续的地址.
    图 3-7:
    dsPIC30F2011/2012 数据存储空间映射
    MSB 地址 MSB 2 KB SFR 空间 0x0001 SFR 空间 0x07FF 0x0801 0x09FF 0x0A01 0x0BFF 0x0C01 X 数据 RAM (X) Y 数据 RAM (Y) 0x07FE 0x0800 0x09FE 0x0A00 0x0BFE 0x0C00 8 KB Near 数据 空间 16 位 LSB 0x0000 LSB 地址
    1 KB SRAM 空间
    0x1FFF
    0x1FFE
    0x8001
    0x8000
    可选择 映射至 程序 存储器
    X 数据 未实现 (X)
    0xFFFF
    0xFFFE
    2007 Microchip Technology Inc.
    DS70139E_CN 第 33 页
    dsPIC30F2011/2012/3012/3013
    图 3-8: dsPIC30F2011/3013 数据存储空间映射
    MSB 地址 MSB 2 KB SFR 空间 0x0001 SFR 空间 0x07FF 0x0801 0x0BFF 0x0C01 0x0FFF 0x1001 0x1FFF 0x07FE 0x0800 X 数据 RAM (X) Y 数据 RAM (Y) 0x0BFE 0x0C00 0x0FFE 0x1000 0x1FFE 8 KB Near 数据 空间 LSB 地址 LSB 0x0000
    16 位
    2 KB SRAM 空间
    0x8001
    0x8000
    可选择 映射至 程序存储器
    X 数据 未实现 (X)
    0xFFFF
    0xFFFE
    DS70139E_CN 第 34 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    图 3-9: MCU 和 DSP (MAC 类)指令使用的数据空间的示例
    SFR 空间 未用
    SFR 空间 X 空间 未用 MAC 类操作 (读) 使用 W10 和 W11 的间接 EA
    DS70139E_CN 第 35 页
    (Y 空间) X 空间
    Y 空间
    非 MAC 类操作 (读 / 写) MAC 类操作 (写) 使用任何 W 寄存器的间接 EA
    使用 W8 和 W9 的间接 EA
    2007 Microchip Technology Inc.
    X 空间
    未用
    dsPIC30F2011/2012/3012/3013
    3.2.2 数据空间 3.2.3 数据空间宽度
    X 数据空间可被所有指令使用且支持所有寻址模式. 其 读写数据总线是相互独立的. X 读数据总线是所有将数 据空间视为一个组合的 X 和 Y 地址空间的指令的数据返 回路径. 它也是双操作数读指令(MAC 类)的 X 地址空 间数据路径. X 写数据总线是所有指令对数据空间执行 写操作的惟一路径. X 数据空间还支持所有指令的模寻址,但是会受到寻址 模式的限制.只有写 X 数据空间的操作才支持位反转寻 址方式. MAC 类指令(CLR,ED,EDAC,MAC,MOVSAC,MPY, MPY.N 和 MSC) 配合使用 Y 数据空间与 X 数据空间以提供 两条可以同时读取数据的路径.不能通过Y总线执行任何 写操作.此类指令专门指定 W10 和 W11 始终作为寻址 Y 数据空间的 W 寄存器指针,独立于 X 数据空间;而指定 W8 和 W9 作为寻址 X 数据空间的 W 寄存器指针.注意, 在累加器回写操作期间,数据地址空间被认为是一个组 合的 X 和 Y 数据空间,因此写操作通过 X 总线进行.从 而可以对整个地址空间中的任何地址单元执行写操作. Y 数据空间仅用于与 MAC 类指令相关的数据预取操作. 它也支持对自动循环缓冲区的模寻址. 当然,所有其他 指令可通过将 Y 数据地址空间视作组合线性空间的一部 分,通过 X 数据总线对其进行访问. 图 3-8 给出了 X 和 Y 数据空间之间的边界定义, 用户不 能通过编程更改 X 和 Y 的数据空间边界.如果 EA 指向 已为其分配的数据空间之外的数据或是指向物理存储器 之外的存储单元,则将返回全零的字或字节. 例如,虽 然所有使用任何寻址模式的非 MAC 类指令都能访问 Y 地 址空间,但如果一条 MAC 类指令试图使用 W8 或 W9 (X 空间指针)从 Y 地址空间取数据,将返回 0x0000. 内核数据宽度为 16 位.所有内部寄存器都是以 16 位宽 字构成的. 数据存储空间以字节可寻址的 16 位宽的块 构成.
    3.2.4
    数据对齐
    为了保持与 PIC MCU 器件的向后兼容以及提高数据存 储空间的使用效率, dsPIC30F 指令集既支持字操作, 也支持字节操作.在数据存储器和寄存器中,数据是按 字对齐的,但所有数据空间有效地址都被解析为字节. 使用有效地址的最低位 (LSb)决定要选择哪个字节, 读数据字节的操作将读取包含此字节的整个字.选中的 字节将被放在 X 数据总线的 LSB 中 (不可能出现来自 Y数据路径的字节访问, 因为MAC类指令只能取整字) . 也就是说,数据存储器和寄存器是由两个共享 (字)地 址译码,而写入线相互独立的字节宽度的并行实体构成 的.数据字节写操作仅写入存储阵列或寄存器中与字节 地址匹配的那一侧. 这种字节访问操作可使所有的有效地址计算(包括那些 由 DSP 操作产生的有效地址,它们只能是字长度的数 据) 在内部进行换算, 以适应字对齐的存储空间. 例如, 内核将识别执行后修改寄存器间接寻址模式 [Ws++] 的 结果,对于字节操作产生的值是 Ws + 1,而对于字操作 产生的值是 Ws + 2. 所有字访问必须按偶地址对齐.不支持取不对齐的字数 据的操作,因此在混合使用字节和字的操作或移植 8 位 MCU 代码时必须要小心. 任何尝试进行非对齐读或写 的操作都将产生地址错误陷阱.如果在读操作时产生错 误,正在执行的指令将完成;如果在写操作时产生错 误,指令仍将执行,但不会进行写入.无论上述 2 种情 况的哪一种,都将产生陷阱,从而允许系统与 / 或用户 检查地址错误发生之前的机器状态.
    表 3-2:
    非法存储器访问的后果
    试图进行的操作 返回的数据 0x0000 0x0000 0x0000
    图 3-10:
    15 0001 0003 0005 MSB 字节 1 字节 3 字节 5
    数据对齐
    87 LSB 字节 0 字节 2 字节 4 0 0000 0002 0004
    EA = 未实现的地址 MAC类指令中使用W8或W9来访问 Y 数据空间 MAC类指令中使用W10或W11来访 问 X 数据空间
    所有有效地址均为16位宽, 指向数据空间中的字节.因 此,数据空间的地址范围为 64 KB 或 32K 字.
    DS70139E_CN 第 36 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    所有载入 W 寄存器的字节都将载入 W 寄存器的 LSB, W 寄存器的 MSB 不变. 提供了一条符号扩展 (SE)指令,允许用户把 8 位的 有符号数据转换为 16 位有符号值.或者,对于 16 位无 符号数据,用户可以清零任何 W 寄存器的 MSB,方法 是在相应的地址处执行一条零扩展 (ZE)指令. 尽管大多数指令能够对字或字节大小的数据进行操作, 但应该注意的是,一些指令,包括 DSP 指令,只对字 大小的数据进行操作. 堆栈指针限制寄存器 (SPLIM)与堆栈指针相关联.复 位时 SPLIM 不被初始化. 与堆栈指针的情况一样,因 为所有的堆栈操作必须是字对齐的,SPLIM 被强制 为 0. 每当使用 W15 作为源或目标指针生成有效地址 (EA)时,生成的地址要与 SPLIM 中的值做比较. 如 果堆栈指针 (W15)与 SPLIM 寄存器的内容相等,则 执行压栈操作,此时不会产生堆栈错误陷阱.但在随后 的压栈操作中会产生堆栈错误陷阱.这样的话,当堆栈 增长超过 RAM 中地址 0x2000 时, 如果要想产生堆栈错 误陷阱,用值 0x1FFE 来初始化 SPLIM 即可. 类似地,当堆栈指针地址小于 0x0800 时,就会产生堆 栈指针下溢 (堆栈错误)陷阱,这避免了堆栈进入特殊 功能寄存器 (SFR)空间. 对 SPLIM 寄存器执行写操作之后,不要立即使用 W15 对该寄存器执行间接读操作.
    3.2.5
    NEAR 数据空间
    X 地址存储空间中, 0x0000 和 0x1FFF 之间保留了一 在 个 8 KB 的 near 数据空间;在所有的存储器直接寻址指 令中,可以通过一个 13 位的绝对地址字段来直接访问 这个数据空间. 其余的 X 地址空间和全部的 Y 地址空间 都是可间接寻址的.此外,使用 MOV 指令可以寻址整个 X 数据空间, 这支持通过 16 位地址字段进行存储器直接 寻址.
    3.2.6
    软件堆栈
    dsPIC DSC 器件具有一个软件堆栈. W15 被用作堆栈 指针. 堆栈指针总是指向堆栈顶部第一个可供使用的字,从低 地址到高地址方向增长.堆栈指针在弹出堆栈之前递 减,而在压入堆栈后递增,如图 3-11 所示.注意,对于 任何 CALL 指令时的 PC 压栈,在压入堆栈之前, PC 的MSB要进行零扩展, 从而确保了MSB始终是清零的. 注: 在异常处理期间,在将 PC 压入堆栈之前, 要先将 PC 的 MSB 与 SRL 寄存器组合在 一起.
    图 3-11:
    0x0000 15
    CALL 堆栈帧
    0
    堆栈往高地址递增
    PC 000000000 PC
    W15 ( CALL 前) W15 ( CALL 后) POP : [--W15] PUSH : [W15++]
    2007 Microchip Technology Inc.
    DS70139E_CN 第 37 页
    表 3-3:
    SFR 名称 W0 W1 W2 W3 W4 W5 W6 W7 W8 W9 W10 W11 W12 W13 W14 W15 SPLIM ACCAL ACCAH ACCAU ACCBL ACCBH ACCBU PCL PCH TBLPAG PSVPAG RCOUNT DCOUNT DOSTARTL DOSTARTH DOENDL DOENDH SR 图注: 注:
    内核寄存器映射
    地址 (低地址) 0000 0002 0004 0006 0008 000A 000C 000E 0010 0012 0014 0016 0018 001A 001C 001E 0020 0022 0024 0026 0028 002A 002C 002E 0030 0032 0034 0036 0038 003A 003C 003E 0040 0042 - OA - OB - SA - SB - OAB - SAB - DA - - - - - - - - - - - - - - - - - - - - - - - - - - - - 符号扩展 (ACCB) PCL - - - RCOUNT DCOUNT DOSTARTL - DOENDL - DC - - IPL2 DOSTARTH 0 DOENDH IPL1 IPL0 RA N OV Z C 0 - PCH TBLPAG PSVPAG 符号扩展 (ACCA) ACCBL ACCBH ACCBU Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 W0/WREG W1 W2 W3 W4 W5 W6 W7 W8 W9 W10 W11 W12 W13 W14 W15 SPLIM ACCAL ACCAH ACCAU Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 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 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
    DS70139E_CN 第38 页 2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    u = 未初始化的位 有关寄存器位域的描述,请参见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    表 3-3:
    SFR 名称 CORCON MODCON XMODSRT XMODEND YMODSRT YMODEND XBREV DISICNT 图注: 注:
    内核寄存器映射 (续)
    地址 (低地址) 0044 0046 0048 004A 004C 004E 0050 0052 u = 未初始化的位 有关寄存器位域的描述,请参见 《dsPIC30F 系列参考手册》 (DS70046E_CN) . BREN - - Bit 15 - XMODEN Bit 14 - YMODEN Bit 13 - - Bit 12 US - Bit 11 EDT Bit 10 DL2 Bit 9 DL1 Bit 8 DL0 XS XE YS YE XB DISICNT Bit 7 SATA Bit 6 SATB Bit 5 Bit 4 Bit 3 IPL3 Bit 2 PSV Bit 1 RND Bit 0 IF 0 1 0 1 复位状态 0000 0000 0010 0000 0000 0000 0000 0000 uuuu uuuu uuuu uuu0 uuuu uuuu uuuu uuu1 uuuu uuuu uuuu uuu0 uuuu uuuu uuuu uuu1 uuuu uuuu uuuu uuuu 0000 0000 0000 0000
    2007 Microchip Technology Inc. DS70139E_CN 第 39 页
    SATDW ACCSAT
    BWM
    YWM
    XWM
    dsPIC30F2011/2012/3012/3013
    dsPIC30F2011/2012/3012/3013
    注:
    DS70139E_CN 第 40 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    4.0 地址发生器单元
    4.1.1 文件寄存器指令
    注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用. 有关 CPU, 外 设,寄 存 器 说 明 和 一 般 器 件 功 能 的 更 多 信 息,请 参 阅 《dsPIC30F 系列参考手册》 (DS70046E_CN) .有关器件 指令集和编程的更多信息,请参阅 《dsPIC30F/33F 程序 员参考手册》 (DS70157B_CN) .
    dsPIC DSC 内核包含两个独立的地址发生器单元: X AGU 和 Y AGU. AGU 仅支持 DSP MAC 类指令的字长 Y 度数据读取. dsPIC DSC AGU 支持如下三种数据寻址 类型 : 线性寻址 模 (循环)寻址 位反转寻址 线性和模数据寻址模式可应用于数据空间或程序空间. 位反转寻址只能用于数据空间地址.
    大多数文件寄存器指令使用一个 13 位地址字段 (f)来 直接寻址数据存储器中的前 8192 字节 (near 数据空 间) .大多数文件寄存器指令使用工作寄存器 W0,W0 在这些指令中表示为 WREG. 目的寄存器通常是同一个 文件寄存器或者 WREG(MUL 指令除外) ,把结果写入 寄存器或寄存器对. 使用 MOV 指令能够获得更大的灵活 性,在文件寄存器操作期间可以访问整个数据空间.
    4.1.2
    MCU 指令
    三操作数 MCU 指令的形式是: 操作数 3 = 操作数 1 操作数 2 其中,操作数 1 始终是工作寄存器(即,寻址模式只能 是寄存器直接寻址) ,称为 Wb.操作数 2 可以是一个 W 寄存器,取自数据存储器或一个 5 位立即数.结果位 置可以是 W 寄存器或地址单元.MCU 指令支持下列寻 址模式: 寄存器直接寻址 寄存器间接寻址 执行后修改的寄存器间接寻址 执行前修改的寄存器间接寻址 5 位或 10 位立即数寻址 注: 并非所有的指令都支持上面给出的全部寻 址模式.各条指令可能支持这些寻址模式 的某些模式,指令不同支持的寻址模式可 能不同.
    4.1
    指令寻址模式
    寻址模式经过优化可以支持各指令的具体功能,基本的 寻址模式在表 4-1 中给出.MAC 类指令中提供的寻址模 式,与其他指令类型中的寻址模式略有不同.
    表 4-1:
    支持的基本寻址模式
    寻址模式 说明 明确指定文件寄存器的地址. 直接访问寄存器的内容. Wn 的内容形成 EA. Wn 的内容形成 EA,然后用一个常量值修改 Wn (递增或递减) . 先用一个有符号常量值修改 Wn (递增或递减) ,再由此时的 Wn 内容形成 EA. Wn 和 Wb 的和形成 EA. Wn 和立即数的和形成 EA.
    文件寄存器直接寻址 寄存器直接寻址 寄存器间接寻址 执行后修改的寄存器间接寻址 执行前修改的寄存器间接寻址 带寄存器偏移量的寄存器间接寻址 带立即数偏移量的寄存器间接寻址
    2007 Microchip Technology Inc.
    DS70139E_CN 第41 页
    dsPIC30F2011/2012/3012/3013
    4.1.3 传送指令和累加器类指令
    概括地说, MAC 类指令支持下列寻址模式: 寄存器间接寻址 执行后修改 (修改量为 2)的寄存器间接寻址 执行后修改 (修改量为 4)的寄存器间接寻址 执行后修改 (修改量为 6)的寄存器间接寻址 寄存器偏移量的寄存器间接寻址 (变址寻址) 与其他指令相比,传送指令和 DSP 累加器类指令提供 了更为灵活的寻址模式.除了大多数 MCU 指令支持的 寻址模式以外,传送和累加器类指令还支持带寄存器偏 移量的寄存器间接寻址模式,这也叫做寄存器变址寻址 模式. 注: 对于 MOV 指令,指令中指定的寻址模式对 于源寄存器和目的寄存器 EA,可以是不同 的.然而,4 位 Wb(寄存器偏移量)字段 为源寄存器和目的寄存器所共用 (但通常 只由源寄存器或目的寄存器之一使用) .
    4.1.5
    其他指令
    概括地说,传送指令和累加器指令支持下列寻址模式: 寄存器直接寻址 寄存器间接寻址 执行后修改的寄存器间接寻址 执行前修改的寄存器间接寻址 寄存器偏移量的寄存器间接寻址 (变址寻址) 立即数偏移量的寄存器间接寻址 8 位立即数寻址 16 位立即数寻址 注: 并非所有的指令都支持上面给出的全部寻 址模式.各条指令可能支持这些寻址模式 的某些模式,指令不同支持的寻址模式可 能不同.
    除了上述的各种寻址模式之外,一些指令使用各种长度 的立即数常量.例如, BRA (转移)指令使用 16 位有 符号立即数来直接指定转移的目标,而 DISI 指令使用 一个 14 位无符号立即数字段. 在一些指令中, 比如 ADD Acc,操作数的来源或运算结果已经暗含在操作码中. 某些操作,比如 NOP,没有任何操作数.
    4.2
    模寻址
    模寻址模式,是一种使用硬件来自动支持循环数据缓冲 区的方法.目的是在执行紧密循环代码时 (这在许多 DSP 算法中很典型) ,不需要用软件来执行数据地址边 界检查. 可以在数据空间或程序空间中进行模寻址 (因为这两种 空间的数据指针机制本质上是相同的) .每个 X (也提 供指向程序空间的指针)和 Y 数据空间中都可支持一个 循环缓冲区.模寻址可以对任何 W 寄存器指针进行操 作.然而,最好不要将 W14 或 W15 用于模寻址,因为 这两个寄存器分别用作堆栈帧指针和堆栈指针. 总的来说,任何特定的循环缓冲区只能配置为单向工 作,因为根据缓冲区的方向,对缓冲区起始地址 (对于 递增缓冲区)或结束地址 (对于递减缓冲区)有某些限 制. 使用限制的惟一例外是那些长度为 2 的幂的缓冲区.这 些缓冲区满足起始和结束地址判据,它们可以双向工作 (即,在低地址边界和高地址边界上都将进行地址边界 检查) .
    4.1.4
    MAC 类指令
    双源操作数 DSP 指令(CLR,ED,EDAC,MAC,MPY, MPY.N,MOVSAC 和 MSC)也叫做 MAC 类指令,它们使 用一组简化的寻址模式,允许用户通过寄存器间接寻址 表有效地对数据指针进行操作. 双 源 操 作 数 预 取 寄存 器 必 须 是 集 合 {W8, W9, W10, W11} 的成员.对于数据读取操作, 和 W9 始终用于 W8 X RAGU,而 W10 和 W11 始终用于 Y AGU.从而,产 生的有效地址 (无论是在修改之前还是之后) 对于 W8 , 和 W9 必须是 X 数据空间中的有效地址,对于 W10 和 W11 则必须是 Y 数据空间中的有效地址. 注: 带寄存器偏移量的寄存器间接寻址,仅可 用于 W9 (在 X 空间中)和 W11 (在 Y 空 间中) .
    DS70139E_CN 第42 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    4.2.1 起始地址和结束地址 4.2.2 W 地址寄存器选择
    模寻址机制要求指定起始地址和结束地址,并将它们载 入 16 位 模 缓 冲 区 地 址 寄 存 器 中:XMODSRT, XMODEND,YMODSRT 和 YMODEND(见表 3-3) . 注: Y 空间模寻址的 EA 计算使用字长度的数据 (每个 EA 的 LSb 始终清零) . 模寻址和位反转寻址控制寄存器 MODCON 中包 含使能标志以及指定 W 地址寄存器的 W 寄存器字段. XWM 和 YWM 字段选择对哪些寄存器进行模寻址.如 果 XWM = 15,则禁止 X RAGU 和 X WAGU 模寻址. 类似地,如果 YWM = 15,则禁止 Y AGU 模寻址. 要对其进行模寻址的X 地址空间指针W 寄存器 (XWM) 位于 MODCON 中(见表 3-3) .当 XWM 被设置 为除15之外的任何值且XMODEN位 (MODCON) 置 1 时, X 数据空间的模寻址被使能. 要对其进行模寻址的Y 地址空间指针W 寄存器 (YWM) 位于 MODCON 中.当 YWM 被设置为除 15 之外 的任何值且 YMODEN 位 (MODCON)置 1 时, Y 数据空间的模寻址被使能.
    循环缓冲区的长度没有直接指定,由相应的起始地址和 结束地址之差决定其长度.循环缓冲区最大长度为 32K 字 (64 KB) .
    图 4-1:
    字节 地址
    模寻址操作示例
    MOV MOV MOV MOV MOV MOV MOV MOV #0x1100,W0 W0,XMODSRT #0x1163,W0 W0,MODEND #0x8001,W0 W0,MODCON #0x0000,W0 #0x1110,W1
    ;set modulo start address ;set modulo end address ;enable W1, X AGU for modulo ;W0 holds buffer fill value ;point W1 to buffer ;fill the 50 buffer locations ;fill the next location ;increment the fill value
    0x1100
    0x1163
    DO AGAIN,#0x31 MOV W0,[W1++] AGAIN: INC W0,W0
    起始地址 = 0x1100 结束地址 = 0x1163 长度 = 0x0032 字
    2007 Microchip Technology Inc.
    DS70139E_CN 第43 页
    dsPIC30F2011/2012/3012/3013
    4.2.3 模寻址的应用
    模寻址可以应用于与任何 W 寄存器相关的有效地址 (EA)计算中.重要的是要意识到,地址边界检查功 能,不仅会检查地址是否正好在地址边界上,而且会检 查地址是否小于或大于上限 (对于递增缓冲区) ,是否 低于下限 (对于递减缓冲区) .因此,地址变化可能会 越过边界,但仍然可以正确调整. 注: 只有在使用执行前修改或执行后修改寻址 模式来计算有效地址时,模修正有效地址 才被写回寄存器.如果使用了地址偏移量 (例如, [W7 + W2]) 会进行模地址修正, , 但寄存器的内容保持不变. 如果位反转缓冲区的长度是 M = 2N 字节,则数据缓冲 区起始地址的最后 "N"位必须为零. XB 是位反转地址修改量或 "中心点" (pivot point),通常是一个常数.对于 FFT 计算,其值等于 FFT 数据缓冲区长度的一半. 注: 所有位反转 EA 的计算都使用字长度数据 (每个 EA 的 LSb 始终为零) .为了产生兼 容(字节)地址,要相应地调整 XB 的值.
    4.3
    位反转寻址
    位反转寻址用来简化基 2 FFT 算法的数据重新排序.位 反转寻址为 X WAGU 所支持,仅限于数据写入. 地址修改量,可以是常数或寄存器的内容,可视为将其 位顺序反转.源地址和目的地址仍然是正常的顺序.于 是,惟一需要反转的操作数就是地址修改量.
    使能位反转寻址时,仅对预递增或后递增的寄存器间接 寻址,且仅对字长度数据写入,才会进行位反转寻址. 而对于任何其他寻址模式或字节长度数据,不会进行位 反转寻址, 而是生成正常的地址.在进行位反转寻址 时, W 地址指针将始终加上地址修改量 (XB) ,与寄 存器间接寻址模式相关的偏移量将被忽略.此外,由于 . 要求是字数据, EA 的 LSb 被忽略 (且始终被清零) 注: 不应同时使能模寻址和位反转寻址.如果 用户试图这么做的话,对于 X WAGU,位 反转寻址将优先, X WAGU 模寻址将被禁 止.然而,在 X RAGU 中,模寻址继续起 作用.
    4.3.1
    1.
    位反转寻址的实现
    当发生以下情况时,使能位反转寻址: MODCON 寄存器中 BWM (W 寄存器选择)的 值,是除 15 以外的任何值 (不能使用位反转寻 址访问堆栈) ,且 XBREV 寄存器中的 BREN 位置 1,且 使用的寻址模式是预递增或后递增的寄存器间接 寻址模式.
    如果通过置 1 BREN (XBREV)位使能了位反转 寻址,那么,在写 XBREV 寄存器之后,不应马上进行 要使用被指定为位反转指针的 W 寄存器的间接读操作.
    2. 3.
    DS70139E_CN 第44 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    图 4-2: 位反转地址示例
    正常顺序的地址 b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 0 围绕二进制值的中心 左右交换位位置 b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b1 b2 b3 b4 0
    位反转后的地址 中心点 对于 16 字位反转缓冲区, = 0x0008 XB
    表 4-2:
    A3 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 A2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
    位反转地址序列 (16 项)
    正常地址 A1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 A0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 十进制 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 A3 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 A2 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 位反转后的地址 A1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 A0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 十进制 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15
    表 4-3:
    XBREV 寄存器的位反转地址修改量
    缓冲区大小 (字) 1024 512 256 128 64 32 16 8 4 2 XB 位反转地址修改量 0x0200 0x0100 0x0080 0x0040 0x0020 0x0010 0x0008 0x0004 0x0002 0x0001
    2007 Microchip Technology Inc.
    DS70139E_CN 第45 页
    dsPIC30F2011/2012/3012/3013
    注:
    DS70139E_CN 第46 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    5.0 闪存程序存储器
    5.2 运行时自编程 (RTSP)
    注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用. 有关 CPU, 外 设,寄 存 器 说 明 和 一 般 器 件 功 能 的 更 多 信 息,请 参 见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .有关器件 指令集和编程的更多信息,请参见 《dsPIC30F/33F 程序 员参考手册》 (DS70157B_CN) .
    运行时自编程(RTSP)使用 TBLRD(表读)和 TBLWT (表写)指令实现. 使用 RTSP, 用户可以一次擦除 32 个指令字 (96 字节) 的程序存储单元,一次可写入 32 个指令字 (96 字节) 的程序存储数据.
    dsPIC30F 系列器件包含用于执行用户代码的内部闪存 程序存储器.用户可以使用以下两种方法对闪存程序存 储器编程: 1. 2. 运行时自编程 (RTSP) 在线串行编程 (ICSP)
    5.3
    表指令操作综述
    TBLRDL 和 TBLWTL 指令用来读或写程序存储器的 bit.TBLRDL 和 TBLWTL 可以以字或字节模式访 问程序存储器. TBLRDH 和 TBLWTH 指令用来读或写程序存储器的 bit. TBLRDH 和 TBLWTH 可以以字或字节模式 访问程序存储器. 使用 TBLPAG 寄存器的 bit 和来自表指令中指定的 W 寄存器的有效地址 (EA) ,形成 24 位的程序存储器 地址,如图 5-1 所示.
    5.1
    在线串行编程 (ICSP)
    可以在最终应用电路中对 dsPIC30F 器件进行串行编 程. 只需要 5 根线即可完成这一操作,其中编程时钟线 和编程数据线(名称分别为 PGC 和 PGD)各一根,其 余 3 根分别是电源线 (VDD) ,接地线 (VSS)和主复 位线 (MCLR). 这允许用户使用未编程器件生产电路 板,而仅在产品交付前才对数字信号控制器进行编程, 从而可以将最新版本的固件或者定制固件烧写到器件 中.
    图 5-1:
    表和 NVM 寄存器寻址
    24 位 使用 程序 计数器 0 程序计数器 0
    NVMADR 寄存器 EA 使用 NVMADR 寻址 1/0 NVMADRU 寄存器 8位 16 位
    工作寄存器 EA 使用 表指令 1/0 TBLPAG 寄存器 8位 16 位
    用户/配置 空间选择
    24 位 EA
    字节 选择
    2007 Microchip Technology Inc.
    DS70139E_CN 第47 页
    dsPIC30F2011/2012/3012/3013
    5.4 RTSP 操作 5.5 控制寄存器
    dsPIC30F 闪存程序存储器组织成行和板 (panel) .每 行由 32 个指令字 (96 字节)组成.每个板由 128 行 (4K x 24 个指令字)组成.RTSP 允许用户每次擦除一 行(32 个指令字) ,每次编程 4 条指令.RTSP 可以用 来对多个程序存储器板进行编程,但在每个板的边界处 必须更改表指针. 程序存储器的每个板都包含写锁存器, 它能够保存32个 指令字的编程数据.在实际编程操作前,等待写入的数 据必须先装入板的写锁存器.要写入板的数据按顺序装 载到写锁存器中:指令 0,指令 1,依此类推. 装载的 指令字必须始终来自 32 个指令字的地址边界. RTSP 编程的基本步骤是先建立一个表指针,然后执行 一系列 TBLWT 指令,装载写锁存器.通过把 NVMCON 寄存器中的特定位置 1, 进行编程.装载 32 条指令需要 32 条 TBLWTL 和 4 条 TBLWTH 指令.如果需要对多个 板进行编程,应该为下一组要写入的多个写锁存器修改 表指针. 由于只需要写表锁存器,所以所有表写操作都是单字写 .编程每一行需要一个编程周期. 入 (2 个指令周期) 在整个 VDD 范围内,正常操作期间,闪存程序存储器是 可读,可写且可擦除的. 四个特殊功能寄存器用来读,写闪存程序存储器,它们 是: NVMCON NVMADR NVMADRU NVMKEY
    5.5.1
    NVMCON 寄存器
    NVMCON 寄存器控制要擦除的存储块,要编程的存储 器类型以及编程周期的启动.
    5.5.2
    NVMADR 寄存器
    NVMADR 寄存器用来存放有效地址的两个低字节.它 捕捉已执行的上一条表指令的 EA,选择要写的 行.
    5.5.3
    NVMADRU 寄存器
    NVMADRU 寄存器用来存放有效地址的高字节. 它捕捉 已执行的上一条表指令的 EA.
    5.5.4
    NVMKEY 寄存器
    NVMKEY 是只写寄存器, 用于写保护. 要启动编程或擦 除过程,用户必须把 0x55 和 0xAA 连续写入 NVMKEY 寄存器.更多细节,请参见第 5.6 节 "编程操作" . 注: 用户也可直接写 NVMADR 和 NVMADRU 寄存器,以指定擦除或编程的程序存储器 地址.
    DS70139E_CN 第48 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    5.6 编程操作
    4. 5. 在 RTSP 模式下,对内部闪存进行编程或擦除需要完整 的编程过程. 编程操作持续时间的标称值为 2 ms, 编程 操作结束之前,处理器将暂停 (等待) .将 WR 位 (NVMCON)置 1 开始编程操作,操作结束后将 自动清零 WR 位. 从数据 RAM"镜像"中把 32 个指令字的数据写 入闪存程序存储器写锁存器. 将 32 个指令字写入闪存程序存储器. a) 设置 NVMCON 寄存器以允许对闪存程序存 储器进行多字编程,并将 WREN 位置 1. b) 把 "55"写入 NVMKEY. c) 把 "AA"写入 NVMKEY. d) 将 WR 位置 1.这将开始编程周期. e) 在编程周期中 CPU 将暂停. f) 当编程周期结束时, WR 位会被硬件清零. 根据需要,重复步骤 1 到 5,对所需的闪存程序 存储器进行编程.
    5.6.1
    闪存程序存储器的编程算法
    用户一次可擦除或编程闪存程序存储器的一行.一般过 程如下: 1. 2. 3. 读一行闪存程序存储器(32 个指令字) ,把读出 的数据作为数据 "镜像"保存到数据 RAM 中. 用期望的新数据更新数据镜像. 擦除闪存程序存储器行. a) 设置 NVMCON 寄存器以允许对闪存程序存 储器进行多字擦除,并将 WREN 位置 1. b) 把要擦除的行地址写入寄存器 NVMADRU/ NVMDR. c) 把 "55"写入 NVMKEY. d) 把 "AA"写入 NVMKEY. e) 将 WR 位置 1.这将开始擦除周期. f) 在擦除周期中 CPU 将暂停. g) 当擦除周期结束时, WR 位会被清零. 6.
    5.6.2
    擦除程序存储器的一行
    例 5-1 所示的代码序列可以用来擦除程序存储器的一行 (32 个指令字) .
    例 5-1:
    擦除程序存储器的一行
    write
    ; Setup NVMCON for erase operation, multi word ; program memory selected, and writes enabled MOV #0x4041,W0 ; MOV W0,NVMCON ; ; Init pointer to row to be ERASED MOV #tblpage(PROG_ADDR),W0 ; MOV W0,NVMADRU ; MOV #tbloffset(PROG_ADDR),W0 ; MOV W0, NVMADR ; DISI #5 ; ; MOV #0x55,W0 MOV W0,NVMKEY ; MOV #0xAA,W1 ; MOV W1,NVMKEY ; BSET NVMCON,#WR ; NOP ; NOP ;
    Init NVMCON SFR
    Initialize PM Page Boundary SFR Intialize in-page EA[15:0] pointer Initialize NVMADR SFR Block all interrupts with priority <7 for next 5 instructions Write the 0x55 key Write the 0xAA key Start the erase sequence Insert two NOPs after the erase command is asserted
    2007 Microchip Technology Inc.
    DS70139E_CN 第49 页
    dsPIC30F2011/2012/3012/3013
    5.6.3 装载写锁存器 5.6.4 启动编程序列
    例 5-2 所示的指令序列可以用来装载 96 字节的写锁存 器. 装载由表指针选择的写锁存器需要 32 条 TBLWTL 指 令和 32 条 TBLWTH 指令. 出于保护的目的,必须使用 NVMKEY 的写启动序列, 以便允许进行任何擦除或编程操作.在执行编程命令 后,用户必须等待一段时间 (编程时间) ,直至编程完 成.启动编程序列后紧跟的两条指令应该为 NOP,如例 5-3 所示.
    例 5-2:
    装载写锁存器
    ; Set up a pointer to the first program memory location to be written ; program memory selected, and writes enabled MOV #0x0000,W0 ; MOV W0,TBLPAG ; Initialize PM Page Boundary SFR MOV #0x6000,W0 ; An example program memory address ; Perform the TBLWT instructions to write the latches ; 0th_program_word MOV #LOW_WORD_0,W2 ; MOV #HIGH_BYTE_0,W3 ; TBLWTL W2,[W0] ; Write PM low word into program latch TBLWTH W3,[W0++] ; Write PM high byte into program latch ; 1st_program_word MOV #LOW_WORD_1,W2 ; MOV #HIGH_BYTE_1,W3 ; TBLWTL W2,[W0] ; Write PM low word into program latch TBLWTH W3,[W0++] ; Write PM high byte into program latch ; 2nd_program_word MOV #LOW_WORD_2,W2 ; MOV #HIGH_BYTE_2,W3 ; TBLWTL W2, [W0] ; Write PM low word into program latch TBLWTH W3, [W0++] ; Write PM high byte into program latch ; 31st_program_word MOV #LOW_WORD_31,W2 ; MOV #HIGH_BYTE_31,W3 ; TBLWTL W2, [W0] ; Write PM low word into program latch TBLWTH W3, [W0++] ; Write PM high byte into program latch
    注:在例 5-2 中, W3 高字节的内容将不起作用.
    例 5-3:
    DISI MOV MOV MOV MOV BSET NOP NOP #5
    启动编程序列
    ; ; ; ; ; ; ; ; ; Block all interrupts with priority <7 for next 5 instructions Write the 0x55 key Write the 0xAA key Start the erase sequence Insert two NOPs after the erase command is asserted
    #0x55,W0 W0,NVMKEY #0xAA,W1 W1,NVMKEY NVMCON,#WR
    DS70139E_CN 第50 页
    2007 Microchip Technology Inc.
    表 5-1:
    文件寄存器 名称 NVMCON NVMADR NVMADRU NVMKEY 图注: 注: 地址 0760 0762 0764 0766
    NVM 寄存器映射
    Bit 15 WR - - Bit 14 WREN - - Bit 13 WRERR - - Bit 12 Bit 11 Bit 10 - - - - - - - - - Bit 9 - - - Bit 8 TWRI - - Bit 7 - Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 所有复位时的状态 0000 0000 0000 0000 uuuu uuuu uuuu uuuu NVMADR KEY 0000 0000 uuuu uuuu 0000 0000 0000 0000
    2007 Microchip Technology Inc. DS70139E_CN 第51 页
    PROGOP
    NVMADR
    u = 未初始化的位 有关寄存器位域的描述,请参见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    dsPIC30F2011/2012/3012/3013
    dsPIC30F2011/2012/3012/3013
    注:
    DS70139E_CN 第52 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    6.0 数据 EEPROM 存储器
    注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用. 有关 CPU, 外 设,寄 存 器 说 明 和 一 般 器 件 功 能 的 更 多 信 息,请 参 见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .有关器件 指令集和编程的更多信息,请参见 《dsPIC30F/33F 程序员 参考手册》 (DS70157B_CN) .
    控制位 WR 启动写操作,这与闪存程序存储器写类似. 可通过软件置 1 WR 位,但不能对其清零.写操作完成 时,硬件将清零 WR 位.不能用软件清零 WR 位,这样 避免了意外或提早结束写操作. WREN 位置 1 时将允许进行写操作. 上电时, WREN 位 清零.当写操作被正常工作期间的 MCLR 复位或 WDT 超时复位所中断时, WRERR 位置 1. 在这样的情形下, 复位后,用户可以检查 WRERR 位,重写存储单元.地 址寄存器 NVMADR 保持不变. 注: 在写操作完成时, IFS0 寄存器中的中断标 志位 NVMIF 将置 1. NVMIF 位必须用软件 清零.
    在整个 VDD 范围内的正常操作期间,数据 EEPROM 存 储器是可读且可写的.数据 EEPROM 存储器直接映射 到程序存储器地址空间. 用来读写闪存程序存储器的四个特殊功能寄存器,也用 来访问数据 EEPROM 存储器.如在第 5.5 节 "控制寄 存器"中所述,这些寄存器是: NVMCON NVMADR NVMADRU NVMKEY
    6.1
    读数据 EEPROM
    TBLRD 指令读取位于当前程序字地址的字. 下面的示例 使用 W0 作为指向数据 EEPROM 的指针.结果存放在 寄存器 W4 中,如例 6-1 所示.
    EEPROM 数据存储器允许读写单个字和 16 字长的块. 针对数据存储器时, NVMADR 与 NVMADRU 寄存器 配合使用,用来寻址要访问的 EEPROM 存储单元. TBLRDL 和 TBLWTL 指令用来读写数据 EEPROM. dsPIC30F 器 件 有 最 多 8 KB (4 K 字)的 数 据 EEPROM,地址范围从 0x7FF000 到 0x7FFFFE. 字写操作之前,应该先擦除相应的存储单元.写操作完 成通常需要 2 ms,不过它将随电压和温度的变化而变 化. 对数据 EEPROM 进行编程或擦除操作,不会停止指令 流. 在启动另一次数据 EEPROM 写 / 擦除操作之前, 用 户需要等待一段适当的时间.在编程或擦除操作进行过 程中,尝试读数据 EEPROM 将返回不确定的数据.
    例 6-1:
    MOV MOV MOV TBLRDL
    读数据 EEPROM
    #LOW_ADDR_WORD,W0 ; Init Pointer #HIGH_ADDR_WORD,W1 W1,TBLPAG [ W0 ], W4 ; read data EEPROM
    2007 Microchip Technology Inc.
    DS70139E_CN 第53 页
    dsPIC30F2011/2012/3012/3013
    6.2
    6.2.1
    擦除数据 EEPROM
    擦除数据 EEPROM 的一块
    为了擦除数据 EEPROM 的一块,首先 NVMADRU 和 NVMADR 寄 存 器 必 须 指 向 要 擦 除 的 存 储 块.将 NVMCON 配 置 为 擦 除 数 据 EEPROM 块,并 置 1 NVMCON寄存器中的WR位和WREN位. 置1 WR 位, 启动擦除操作,如例 6-2 所示.
    例 6-2:
    擦除数据 EEPROM 的一块
    ; Select data EEPROM block, WR, WREN bits MOV #0x4045,W0 MOV W0,NVMCON ; Initialize NVMCON SFR ; Start erase cycle by setting WR after writing key sequence DISI #5 ; Block all interrupts with priority <7 for ; next 5 instructions MOV #0x55,W0 ; MOV W0,NVMKEY ; Write the 0x55 key MOV #0xAA,W1 ; MOV W1,NVMKEY ; Write the 0xAA key BSET NVMCON,#WR ; Initiate erase sequence NOP NOP ; Erase cycle will complete in 2mS. CPU is not stalled for the Data Erase Cycle ; User can poll WR bit, use NVMIF or Timer IRQ to determine erasure complete
    6.2.2
    擦除数据 EEPROM 的一个字
    NVMADRU 和 NVMADR 寄存器必须指向要擦除的存储 块.在 NVMCON 寄存器中,选择擦除数据 EEPROM 的一个字,置 1 WR 位和 WREN 位.置 1 WR 位,启 动擦除操作,如例 6-3 所示.
    例 6-3:
    擦除数据 EEPROM 的一个字
    ; Select data EEPROM word, WR, WREN bits MOV #0x4044,W0 MOV W0,NVMCON ; Start erase cycle by setting WR after writing key sequence DISI #5 ; Block all interrupts with priority <7 for ; next 5 instructions MOV #0x55,W0 ; MOV W0,NVMKEY ; Write the 0x55 key MOV #0xAA,W1 ; MOV W1,NVMKEY ; Write the 0xAA key BSET NVMCON,#WR ; Initiate erase sequence NOP NOP ; Erase cycle will complete in 2mS. CPU is not stalled for the Data Erase Cycle ; User can poll WR bit, use NVMIF or Timer IRQ to determine erasure complete
    DS70139E_CN 第54 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    6.3
    1.
    写数据 EEPROM
    擦除数据 EEPROM 的字. a) 在 NVMCON 寄存器中,选择字擦除数据 EEPROM,并置 1 WREN 位. b) 把要擦除的字的地址写入 NVMADR. c) 允许 NVM 中断 (可选) . d) 把 "55"写入 NVMKEY. e) 把 "AA"写入 NVMKEY. f) 置 1 WR 位.这将开始擦除周期. g) 查询 NVMIF 位或等待 NVMIF 中断. h) 当擦除周期结束时 WR 位会被清零. 把数据字写入数据 EEPROM 的写锁存器中. 把 1 个数据字编程到数据 EEPROM 中. a) 在 NVMCON 寄存器中,选择字编程数据 EEPROM,并置 1 WREN 位. b) 允许 NVM 写完成中断 (可选) . c) 把 "55"写入 NVMKEY. d) 把 "AA"写入 NVMKEY. e) 置 1 WR 位.这将开始编程周期. f) 查询 NVMIF 位,或者等待 NVM 中断. g) 当写周期结束时 WR 位会被清零.
    要写 EEPROM 数据存储单元, 必须按照下列顺序进行 :
    对于每个字,如果上述序列 (把 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 必须由软件清零.
    2. 3.
    6.3.1
    写数据 EEPROM 的一个字
    一旦用户擦除了要编程的字,则表写指令用来写写锁存 器,如例 6-4 所示.
    6.3.2
    写数据 EEPROM 的一个存储块
    要写入数据 EEPROM 的一个存储块,应首先写入所有 16 个锁存器, 然后设置 NVMCON 寄存器并对存储块进 行编程.
    例 6-4:
    数据 EEPROM 字写操作
    ; Init pointer
    ; Point to data memory MOV #LOW_ADDR_WORD,W0 MOV #HIGH_ADDR_WORD,W1 MOV W1,TBLPAG MOV #LOW(WORD),W2 TBLWTL W2,[ W0] ; The NVMADR captures last table access address ; Select data EEPROM for 1 word op MOV #0x4004,W0 MOV W0,NVMCON ; Operate key to allow write operation DISI #5
    ; Get data ; Write data
    ; Block all interrupts with priority <7 for ; next 5 instructions
    MOV #0x55,W0 MOV W0,NVMKEY ; Write the 0x55 key MOV #0xAA,W1 MOV W1,NVMKEY ; Write the 0xAA key BSET NVMCON,#WR ; Initiate program sequence NOP NOP ; Write cycle will complete in 2mS. CPU is not stalled for the Data Write Cycle ; User can poll WR bit, use NVMIF or Timer IRQ to determine write complete
    2007 Microchip Technology Inc.
    DS70139E_CN 第55 页
    dsPIC30F2011/2012/3012/3013
    例 6-5:
    MOV MOV MOV MOV TBLWTL MOV TBLWTL MOV TBLWTL MOV TBLWTL MOV TBLWTL MOV TBLWTL MOV TBLWTL MOV TBLWTL MOV TBLWTL MOV TBLWTL MOV TBLWTL MOV TBLWTL MOV TBLWTL MOV TBLWTL MOV TBLWTL MOV TBLWTL MOV MOV DISI MOV MOV MOV MOV BSET NOP NOP
    数据 EEPROM 块写操作
    #LOW_ADDR_WORD,W0 #HIGH_ADDR_WORD,W1 W1,TBLPAG #data1,W2 W2,[ W0]++ #data2,W2 W2,[ W0]++ #data3,W2 W2,[ W0]++ #data4,W2 W2,[ W0]++ #data5,W2 W2,[ W0]++ #data6,W2 W2,[ W0]++ #data7,W2 W2,[ W0]++ #data8,W2 W2,[ W0]++ #data9,W2 W2,[ W0]++ #data10,W2 W2,[ W0]++ #data11,W2 W2,[ W0]++ #data12,W2 W2,[ W0]++ #data13,W2 W2,[ W0]++ #data14,W2 W2,[ W0]++ #data15,W2 W2,[ W0]++ #data16,W2 W2,[ W0]++ #0x400A,W0 W0,NVMCON #5 #0x55,W0 W0,NVMKEY #0xAA,W1 W1,NVMKEY NVMCON,#WR ; Init pointer
    ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
    Get 1st data write data Get 2nd data write data Get 3rd data write data Get 4th data write data Get 5th data write data Get 6th data write data Get 7th data write data Get 8th data write data Get 9th data write data Get 10th data write data Get 11th data write data Get 12th data write data Get 13th data write data Get 14th data write data Get 15th data write data Get 16th data write data. The NVMADR captures last table access address. Select data EEPROM for multi word op Operate Key to allow program operation Block all interrupts with priority <7 for next 5 instructions
    ; Write the 0x55 key ; Write the 0xAA key ; Start write cycle
    6.4
    写校验
    6.5
    防止误写入
    根据不同的应用,良好的编程习惯可能要求把已写入存 储器中的值对照原始值进行校验.如果在应用中进行了 过多的写操作,可能接近规范中的上限值时,就应该进 行写校验.
    某些情况下, 并不打算写数据 EEPROM 存储器. 器件内 置了各种机制来防止误写入 EEPROM.上电时,WREN 位清零;而且, 上电延时定时器禁止 EEPROM 写操作. 写启动序列与 WREN 位一起,有助于防止欠压,电源 故障或软件异常期间的意外写入.
    DS70139E_CN 第56 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    7.0 I/O 端口
    注:本数据手册总结了 dsPIC30 系列器件的功能,但是不应 将其当作无所不包的参考手册使用. 有关 CPU, 外设, 寄存 器说明和通用器件功能的更多信息,请参见 《dsPIC30F 系 列参考手册》 (DS70046E_CN) .
    任何位及其关联的数据和控制寄存器,如果对于特定器 件而言是无效的话, 则将被禁止. 这意味着相应的 LATx 和 TRISx 寄存器以及该端口引脚将读为 0. 当一个引脚与另一个外设或定义为仅输入的功能复用 时,由于没有其他竞争的输出源,它将被视为专用端 口. 通常,与某个外设共用一个引脚的并行 I/O (PIO)端 口总是服从于该外设.外设的输出缓冲器数据和控制信 号提供给一对多路开关.多路开关选择外设还是相关的 端口将拥有 I/O 引脚的输出数据和控制信号的所有权. 图 7-1 中显示出端口与其他外设是如何复用的,以及与 外设连接的相关 I/O 引脚单元. 共用端口(PORTB,PORTC,PORTD 和 PORTF)的 寄存器格式如表 7-1 至表 7-6 所示. 注: 不同器件实际使用的位有所不同.
    所有的器件引脚(除 VDD,VSS,MCLR 和 OSC1/CLKI 以外)均由外设和并行 I/O 端口所共用. 所有 I/O 输入端口都为施密特触发器输入,以便增强抗 干扰性.
    7.1
    并行 I/O (PIO)端口
    如果外设使能,并且外设正在使用相关引脚时,该引脚 将不再作为通用 I/O 引脚使用.这时,可以读该 I/O 引 脚,但对应并行端口引脚位的输出驱动器将被禁止.如 果外设使能,但外设不在使用某引脚,则该引脚可以被 端口驱动. 所有端口引脚都有三个寄存器,这些寄存器与端口引脚 的工作直接相关.数据方向寄存器 (TRISx)决定引脚 是输入引脚还是输出引脚.如果数据方向位为 1,则为 输入引脚.复位以后,所有端口引脚被定义为输入.读 锁存器 (LATx) ,读到的是锁存的值;写锁存器,写入 锁存器 (LATx).但读取端口 (PORTx)时,读到的 是端口引脚的值;而写入端口引脚时,写入到锁存器 (LATx) .
    图 7-1:
    共用端口的结构框图
    外设模块 外设输入数据 外设模块使能 外设输出使能 外设输出数据 1 输出使能 0 1 0 读 TRIS I/O 引脚 I/O 引脚单元 输出多路开关
    PIO 模块
    输出数据
    数据总线 写 TRIS
    D CK
    Q
    TRIS 锁存器 D 写 LAT + 写端口 CK 数据锁存器 读锁存器 输入数据 读端口 Q
    2007 Microchip Technology Inc.
    DS70139E_CN 第57 页
    dsPIC30F2011/2012/3012/3013
    7.2 配置模拟端口引脚
    7.2.1 I/O 端口写 / 读时序
    ADPCFG 和 TRIS 寄存器用于控制 A/D 端口引脚的操 作.若希望端口引脚为模拟输入引脚,则必须将相应的 TRIS 位置 1 (输入) .如果将 TRIS 位清零 (输出) , . 则将转换该引脚的数字输出电平 (VOH 或 VOL) 读取端口寄存器时,所有配置为模拟输入通道的引脚均 读为 0 (低电平) . 配置为数字输入的引脚,将不对模拟输入信号进行转 换.对任何定义为数字输入的引脚 (包括 ANx 引脚) 施加模拟电平,可能导致输入缓冲器的电流消耗超出器 件规范中规定的值. 在改变端口方向或对端口执行写操作,与对同一端口执 行读操作之间需要间隔一个指令周期.通常在两者之间 插入一条 NOP 指令.
    例 7-1:
    MOV #0xF0, W0; ; MOV W0, TRISB; NOP ; btss PORTB, #7;
    端口写 / 读示例
    Configure PORTB as inputs and PORTB as outputs additional instruction cycle bit test RB7 and skip if set
    DS70139E_CN 第58 页
    2007 Microchip Technology Inc.
    表 7-1:
    SFR 名称 TRISB PORTB LATB 地址 02C6 02C8 02CB
    PORTB 寄存器映射 (dsPIC30F2011/3012)
    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 复位状态
    2007 Microchip Technology Inc. DS70139E_CN 第59 页
    TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 0000 0000 1111 1111 RB7 LATB7 RB6 LATB6 RB5 LATB5 RB4 LATB4 RB3 LATB3 RB2 LATB2 RB1 LATB1 RB0 LATB0 0000 0000 0000 0000 0000 0000 0000 0000
    表 7-2:
    SFR 名称 TRISB PORTB LATB 地址 02C6 02C8 02CB
    PORTB 寄存器映射 (dsPIC30F2012/3013)
    Bit 15 - - - Bit 14 - - - Bit 13 - - - Bit 12 - - - Bit 11 - - - Bit 10 - - - Bit 9 TRISB9 RB9 LATB9 Bit 8 TRISB8 RB8 LATB8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位状态 TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 0000 0011 1111 1111 RB7 LATB7 RB6 LATB6 RB5 LATB5 RB4 LATB4 RB3 LATB3 RB2 LATB2 RB1 LATB1 RB0 LATB0 0000 0000 0000 0000 0000 0000 0000 0000
    dsPIC30F2011/2012/3012/3013
    表 7-3:
    SFR 名称 TRISC PORTC LATC 地址 02CC 02CE 02D0
    PORTC 寄存器映射 (dsPIC30F2011/2012/3012/3013)
    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 TRISC15 TRISC14 TRISC13 RC15 LATC15 RC14 LATC14 RC13 LATC13
    表 7-4:
    SFR 名称 TRISD PORTD LATD 地址 02D2 02D4 02D6
    PORTD 寄存器映射 (dsPIC30F2011/3012)
    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 复位状态 TRISD0 0000 0000 0000 0001 RD0 LATD0 0000 0000 0000 0000 0000 0000 0000 0000
    表 7-5:
    SFR 名称 TRISD PORTD LATD 地址 02D2 02D4 02D6
    PORTD 寄存器映射 (dsPIC30F2012/3013)
    Bit 15 - - - Bit 14 - - - Bit 13 - - - Bit 12 - - - Bit 11 - - - Bit 10 - - - Bit 9 TRISD9 RD9 LATD9 Bit 8 TRISD8 RD8 LATD8 Bit 7 - - - Bit 6 - - - Bit 5 - - - Bit 4 - - - Bit 3 - - - Bit 2 - - - Bit 1 - - - Bit 0 - - - 复位状态 0000 0011 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
    DS70139E_CN 第60 页 2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    表 7-6:
    SFR 名称 TRISF PORTF LATF 地址 02DE 02E0 02E2
    PORTF 寄存器映射 (dsPIC30F2012/3013)
    Bit 15 - - - Bit 14 - - - Bit 13 - - - Bit 12 - - - Bit 11 - - - Bit 10 - - - Bit 9 - - - Bit 8 - - - Bit 7 - - - Bit 6 TRISF6 RF6 LATF6 Bit 5 TRISF5 RF5 LATF5 Bit 4 TRISF4 RF4 LATF4 Bit 3 TRISF3 RF3 LATF3 Bit 2 TRISF2 RF2 LATF2 Bit 1 - - - Bit 0 - - - 复位状态 0000 0000 0111 1100 0000 0000 0000 0000 0000 0000 0000 0000
    注:
    dsPIC30F2011/3012 器件没有 TRISF, PORTF 和 LATF 寄存器.
    dsPIC30F2011/2012/3012/3013
    7.3 输入状态变化通知模块
    I/O 端口的输入状态变化通知功能允许 dsPIC30F 器件 在选定输入引脚的状态变化时,向处理器发出中断请 求.当禁止时钟时,该特性还可在休眠模式下检测到输 入状态改变. 最多可以选择 (允许) 10 个外部信号 (CN0 至 CN7, CN17 和 CN18)在输入状态发生变化 时产生中断请求.
    表 7-7:
    SFR 名称 CNEN1 CNEN2 CNPU1 CNPU2 地址 00C0 00C2 00C4 00C6
    输入状态变化通知寄存器映射 (dsPIC30F2011/3012 (BIT 7-0) )
    Bit 7 CN7IE - CN7PUE - Bit 6 CN6IE - CN6PUE - Bit 5 CN5IE - CN5PUE - Bit 4 CN4IE - CN4PUE - Bit 3 CN3IE - CN3PUE - Bit 2 CN2IE - CN2PUE - Bit 1 CN1IE - CN1PUE - Bit 0 CN0IE - CN0PUE - 复位状态 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
    表 7-8:
    SFR 名称 CNEN1 CNEN2 CNPU1 CNPU2 地址 00C0 00C2 00C4 00C6
    输入状态变化通知寄存器映射 (dsPIC30F2012/3013 (BIT 7-0) )
    Bit 7 CN7IE - CN7PUE - Bit 6 CN6IE - CN6PUE - Bit 5 CN5IE - CN5PUE - Bit 4 CN4IE - CN4PUE - Bit 3 CN3IE - CN3PUE - Bit 2 CN2IE CN18IE CN2PUE Bit 1 CN1IE CN17IE CN1PUE Bit 0 CN0IE - CN0PUE - 复位状态 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
    CN18PUE CN17PUE
    注:
    有关寄存器位域的描述,请参见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    2007 Microchip Technology Inc.
    DS70139E_CN 第61 页
    dsPIC30F2011/2012/3012/3013
    注:
    DS70139E_CN 第62 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    8.0 中断
    注:本数据手册总结了 dsPIC30 系列器件的功能,但是不应 将其当作无所不包的参考手册使用.有关 CPU,外设,寄存 器说明和通用器件功能的更多信息,请参见 《dsPIC30F 系 列参考手册》 (DS70046E_CN) 欲知有关指令集和编程的 . 更多详细信息,请参见 《dsPIC30F/33F 程序员参考手册》 (DS70157B_CN) .
    INTCON1 和 INTCON2 全局中断控制功能由这两个寄存器提供. INTCON1 包含处理器异常的控制和状态标志位. INTCON2 寄存器控制外部中断请求信号的行为和 备用中断向量表的使用. 注: 发生中断时,无论相应的中断允许位的状 态如何, 中断标志位将置 1.用户软件应确 保在允许一个中断前清零相应的中断标志 位.
    dsPIC30F 传感器系列具有最多 21 个中断源和 4 个处理 器异常 (陷阱) ,所有中断和异常的处理必须依据优先 级机制进行仲裁. CPU 负责读取中断向量表 (IVT)并将包含在中断向量 中的地址传输给程序计数器.中断向量通过程序计数器 输入端的 24 位宽的多路开关,从程序数据总线传输到 程序计数器. 中断向量表 (IVT)和备用中断向量表 (AIVT)位于程 序存储器起始地址附近 (0x000004) IVT 和 AIVT 如 . 图 8-1 所示. 中断控制器负责在中断和处理器异常传送到处理器内核 前,对它们进行预处理.使用集中化的特殊功能寄存器 允许,控制外设中断和陷阱,并对它们进行优先级分 配. IFS0, IFS1 和 IFS2 这三个寄存器包含所有中断请求标志位.各中断请 求标志由相应的外设或外部信号置 1,标志的清零 则通过软件完成. IEC0, IEC1 和 IEC2 这三个寄存器包含所有中断允许控制位.这些控制 位用于单独允许外设或外部信号的中断. IPC0 至 IPC10 与这 41 个中断相应的用户可分配优先级集中保存 在这 11 个寄存器中. IPL 当前 CPU 优先级显示地储存在 IPL 位中. IPL 位于 CORCON 寄存器中,而 IPL 位于处理 器内核的状态寄存器 (SR)中.
    用户可通过 IPCx 寄存器,为所有中断源分配 7 个优先 级中的一个,优先级从 1 到 7. 每个中断源都与一个中 断向量相关,如表 8-1 所示.优先级 7 和 1 分别表示最 高和最低的可屏蔽优先级. 注: 为中断源分配的优先级为 0, 等效于禁止该 中断.
    若 NSTDIS 位 (INTCON1)置 1,则禁止中断嵌 套.这样可使在处理中断时,禁止处理新的中断,即使 新中断的优先级高于正在处理的中断优先级. 注: 一旦NSTDIS位置1, IPL位就变为只读位.
    某些中断具有控制边沿或电平触发中断,电平变化中断 等功能的专用控制位.对这些功能的控制仍然由产生中 断的外设模块完成. 对于某些指令,在其执行期间如果 DISI 位 (INTCON2)保持置 1 的话, 那么可以用 DISI 指 令来禁止优先级为 6 或更低的中断的处理. 处理中断时, PC 中载入存放在程序存储器中相应中断 向量存储单元中的地址.IVT 中有 63 个不同的向量 (见 表 8-1). 这些向量存放在程序存储器的 0x000004 至 0x0000FE 存储单元 (见表 8-1) 这些存储单元包含 . 24 位地址,以保持鲁棒性,如果在正常执行期间 PC 试 图取这些字中的任意一个,就会发生地址错误陷阱.这 样便可防止由于以下情况而执行随机数据:PC 意外地 递减到向量空间,意外地将数据空间地址映射到向量空 间或 PC 在到达已实现的程序存储空间的末尾后重新回 到 0x000000. 执行 GOTO 指令跳转到此向量空间也会 产生地址错误陷阱.
    2007 Microchip Technology Inc.
    DS70139E_CN 第 63 页
    dsPIC30F2011/2012/3012/3013
    8.1 中断优先级
    表 8-1: 中断向量表
    中断源 INT0 —— 外部中断 0 IC1 —— 输入捕捉 1 OC1 —— 输出比较 1 T1 —— Timer 1 IC2 —— 输入捕捉 2 OC2 —— 输出比较 2 T2 —— Timer 2 T3 —— Timer 3 SPI1 U1RX —— UART1 接收器 U1TX —— UART1 发送器 ADC —— ADC 转换完成 NVM —— NVM 写结束 SI2C —— I2C 从中断 MI2C —— I2C 主中断 输入电平变化中断 INT1 —— 外部中断 1 保留 INT2 —— 外部中断 2 U2RX* —— UART2 接收器 U2TX* —— UART2 发送器 保留 LVD —— 低电压检测 保留
    对于各中断源,用户可分配中断优先级 (IP)位 于 IPCx 寄存器中每个半字节的最低 3 位. 每个半字节 的 bit 3 未使用,读为 0.这些位定义了用户分配给某 特定中断的优先级. 注: 用户可选择优先级范围为 0(最低优先级) 至 7 (最高优先级) .
    INT 编号 向量编号 最高自然顺序优先级 0 8 1 9 2 10 3 11 4 12 5 13 6 14 7 15 8 16 9 17 10 18 11 19 12 20 13 21 14 22 15 23 16 24 17-22 25-30 23 31 24 32 25 33 26-41 34-49 42 50 43-53 51-61
    自然顺序优先级由中断在向量表中的位置决定,只是在 同时有多个中断——它们都具有相同的用户分配优先级 ——等待处理时,自然顺序优先级才会影响到中断操 作. 表 8-1 列出了 dsPIC30F2011/2012/3012/3013 器件的 中断编号和中断源,以及关联的向量编号. 注 1: 自然顺序优先级机制以 0 为最高优先级, 以 53 为最低优先级. 2: 自然顺序优先级编号与 INT 编号相同. 用户可为各中断分配七个优先级中的一个,这意味着用 户可为一个具有较低自然顺序优先级的中断分配一个非 常高的总优先级. 例如,可将低压检测 (Low-Voltage Detect, PLVD )的优先级分配为 7.将 INT0 (外部中 断 0)的优先级分配为 1,这样,它的有效优先级将非 常低.
    最低自然优先级 * 仅 dsPIC30F3013 具有 UART2 以及 U2RX 和 U2TX 中断. 这些存储单元在 dsPIC30F2011/2012/3012 中为保留的存储单元.
    DS70139E_CN 第64 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    8.2 复位过程 8.3 陷阱
    由于复位过程中不涉及到中断控制器,所以器件复位并 不是真的异常.在响应强制清零 PC 的复位时,处理器 将初始化其寄存器. 然后, 处理器从存储单元 0x000000 处开始执行程序.一条 GOTO 指令存放在第一个程序存 储单元中,紧跟着的是 GOTO 指令的地址目标.处理器 执行 GOTO,跳转到指定地址,然后开始指定目标 (起 始)地址处的操作. 可以将陷阱看作不可屏蔽中断,表明出现软件或硬件错 误,它遵从如图 8-1 所示的预定义的优先级. 陷阱旨在 为用户提供一种方法,改正在调试和在应用中工作时的 错误操作. 注: 如果用户不想在陷阱错误条件事件时采取 校正措施,那么必须在这些陷阱向量中装 入缺省陷阱处理程序的地址,缺省陷阱处 理程序仅包含 RESET 指令.否则,如果调 用了包含非法地址的陷阱向量,将产生地 址错误陷阱.
    8.2.1
    复位源
    除外部复位和上电复位(POR)外,还有 6 个错误条件 会引起器件复位. 看门狗定时器超时: 看门狗定时器已超时,表明处理器不再执行正确的 代码流. 未初始化的 W 寄存器陷阱: 试图把未初始化的 W 寄存器用作地址指针而导致 复位. 非法指令陷阱: 试图执行任何未使用的操作码而引起非法指令陷 阱. 注意,如果由于指令流更改而使非法指令在执 行前被从指令流水线中舍弃,则取此非法指令不会 引起非法指令陷阱. 欠压复位 (BOR) : 检测到可能导致器件故障的电源电压短暂降低. 陷阱锁定: 多个并发的陷阱条件将导致复位.
    注意,很多陷阱条件只有在发生的时候才能检测到. 因 此,在陷阱异常处理之前允许有问题的指令完成执行. 如果用户选择从错误中恢复,则可能需要校正导致陷阱 的错误操作的结果. 陷阱有 8 个固定优先级:优先级 8 级至优先级 15 级, 意味着处理陷阱时, IPL3 始终置 1. 如果用户当前不在执行陷阱,而将 IPL 位设置为 0111 (优先级 7) ,这样将禁止所有中断,但仍然能处 理陷阱.
    8.3.1
    陷阱源
    下列陷阱的优先级依次递增.然而,由于所有陷阱都可 以嵌套,因此优先级的作用很小.
    数学错误陷阱:
    在以下四种情况下,执行数学错误陷阱: 1. 2. 如果试图进行以零作除数的除法运算,除法运算 将在周期边界处中止,并产生陷阱. 如果使能的话, 当对累加器 A 或 B 进行的算术运 算导致了 bit 31 溢出,并且没有使用累加器警戒 位时,将产生数学错误陷阱. 如果使能的话, 当对累加器 A 或 B 进行的算术运 算导致了 bit 39 灾难性溢出,并且所有饱和被禁 止时,将产生数学错误陷阱. 如果在移位指令中指定的移位位数大于允许的最 大移位位数,将产生陷阱.
    3.
    4.
    2007 Microchip Technology Inc.
    DS70139E_CN 第 65 页
    dsPIC30F2011/2012/3012/3013
    地址错误陷阱:
    当发生以下情况时,将产生此陷阱: 1. 2. 3. 4. 试图访问未对齐的数据字. 试图从未实现的数据存储单元取数据. 试图访问未实现的程序存储单元. 试图从向量空间取指令. 注: 在 MAC 类指令中,数据空间分割为 X 和 Y 数据空间,未实现的 X 空间包括所有的 Y 空间, 未实现的 Y 空间包括所有的 X 空间.
    堆栈错误陷阱:
    当发生以下情况时,产生此陷阱: 1. 2. 堆栈指针中载入了一个大于写入到SPLIM寄存器 的 (用户可编程)极限值 (堆栈溢出)的值. 堆栈指针中载入一个小于 0x0800 的值 (简单堆 栈下溢) .
    振荡器故障陷阱:
    如果外部振荡器出现故障,器件使用备用的内部 RC 振 荡器工作,就会产生振荡器故障陷阱.
    5.
    6.
    执行 BRA #literal 指令或 GOTO #literal 指令,其中 literal 是未实现的程序存储器地 址. 修改 PC 使其指向未实现的程序存储器地址后, 执行指令.通过将值装入堆栈并执行 RETURN 指 令可以修改 PC.
    8.3.2
    硬陷阱和软陷阱
    在同一周期内可能会产生多个陷阱(例如,把不对齐的 字写入堆栈中的溢出地址) 此时,图 8-2 所示的固定 . 优先级就会起作用;为了完全纠正错误,这可能需要用 户检查是否有其他等待处理的陷阱. "软"陷阱包括优先级 8 到 11 的异常.算术错误陷阱 (优先级 11)就属于这一类陷阱. "硬"陷阱包括优先级 12 至 15 的异常.地址错误 (优 先级 12) ,堆栈错误 (优先级 13)和振荡器错误 (优 先级 14)陷阱就属于这一类. 每个硬陷阱产生时,在执行任何代码之前,必须先对它 进行响应.在优先级较高的陷阱正在等待处理,被响应 或正在处理过程中时,如果产生了较低优先级的陷阱, 就会产生硬陷阱冲突. 器件在硬陷阱冲突时自动复位. 发生复位时, TRAPR 状态位 (RCON) 1, 置 因此可用软件检测该条件.
    DS70139E_CN 第66 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    图 8-1: 陷阱向量
    复位 - GOTO 指令 复位 - GOTO 地址 保留 振荡器故障陷阱向量 地址错误陷阱向量 堆栈错误陷阱向量 数学错误陷阱向量 保留向量 保留向量 保留向量 中断向量 0 中断向量 1 — — — 中断向量 52 中断向量 53 保留 保留 保留 振荡器故障陷阱向量 堆栈错误陷阱向量 地址错误陷阱向量 数学错误陷阱向量 保留向量 保留向量 保留向量 中断向量 0 中断向量 1 — — — 中断向量 52 中断向量 53 0x000000 0x000002 0x000004
    图 8-2:
    0x0000 15 堆栈向高地址方向递增
    中断堆栈帧
    0
    递减 优先级
    IVT
    0x000014
    PC SRL IPL3 PC
    W15 (CALL 前) W15 (CALL 后) POP : [--W15]
    0x00007E 0x000080 0x000082 0x000084
    PUSH: [W15++]

    AIVT
    0x000094
    1: 用户能始终通过向 SR 写入一个新值以降 低优先级.必须在降低处理器中断优先级 之前, 在中断服务程序中清除 IFSx 寄存器 中的中断标志位以避免重复中断. 2: 处理中断时,IPL3 位(CORCON)总 是被清零.只有在进行陷阱处理时,该位 才将会被置 1.
    0x0000FE
    RETFIE (从中断返回)指令将程序计数器和状态寄存 器中的值弹出堆栈,并使处理器返回到中断过程前的状 态.
    8.4
    中断过程 8.5 备用向量表
    在程序存储器中,中断向量表 (IVT)之后紧跟备用中 断向量表 (AIVT) ,如图 8-1 所示. INTCON2 寄存器 中的 ALTIVT 位控制对备用向量表的访问. 如果 ALTIVT 位置 1,所有中断和异常处理将使用备用向量,而不是 默认的向量.备用向量与默认向量的组织方式是相同 的. AIVT 提供了一种在应用和支持环境之间切换的方 法,从而支持仿真和调试功能,而不需要对中断向量进 行再编程.这个特性也支持运行时在不同应用之间切 换,以便评估各种软件算法. 如果不需要 AIVT,则分配给 AIVT 的程序存储器可用于 其他用途.AIVT不是受保护的区域, 用户可对其自由编 程.
    在每个指令周期的开始, IFSx 寄存器都会采样全部的 中断事件标志.IFSx 寄存器中标志位等于 1,表明有等 待处理的中断请求 (IRQ) .如果中断允许 (IECx)寄 存器中相应的位置 1, IRQ 将会导致中断产生. 在 IRQ 采样后余下的指令周期中,将评估所有待处理中断请求 的优先级. 如果有待处理的 IRQ,它的优先级比 IPL 位中的当前处 理器优先级高,则处理器将被中断. 随后,处理器将当前程序计数器的值和处理器状态寄存 器 (SRL)的低字节压入堆栈,如图 8-2 所示.状态寄 存器的低字节包含中断周期开始前的处理器优先级.处 理器随后将此中断的优先级载入状态寄存器.完成中断 服务程序前,此操作禁止所有的低优先级中断.
    2007 Microchip Technology Inc.
    DS70139E_CN 第 67 页
    dsPIC30F2011/2012/3012/3013
    8.6 快速现场保护 8.7 外部中断请求
    使用影子寄存器可保存现场.为 SR 中的 DC, OV, N, Z 和 C 位及寄存器 W0 至 W3 提供了影子寄存器.影子 寄存器深度仅为一级. 仅可使用 PUSH.S 和 POP.S 指 令访问影子寄存器. 当处理器转移到中断向量开始处理中断时,可以使用 PUSH.S 指令,把上述寄存器的当前值保存到它们对应 的影子寄存器中去. 如果某个优先级的 ISR 使用 PUSH.S 和 POP.S 指令进 行快速现场保护,那么优先级更高的 ISR 就不应再使用 这两条指令.如果优先级较高的 ISR 使用了快速现场保 护,那么在优先级较低的中断处理期间,用户必须保存 关键寄存器. 中断控制器支持三个外部中断请求信号:INT0-INT2. 这些输入是边沿敏感的;它们需要从低至高或从高至低 的跳变来产生中断请求. INTCON2 寄存器具有 3 个位 (INT0EP-INT2EP) ,用于选择边沿检测电路的极性.
    8.8
    从休眠和空闲模式唤醒
    如果产生中断时处理器处于休眠或空闲模式,则可使用 中断控制器将处理器从休眠或空闲模式唤醒. 如果中断控制器收到已允许的中断请求,且中断请求优 先级足够高的话,则标准中断请求将提交给处理器. 同 时,处理器会从休眠或空闲模式唤醒,并开始执行处理 中断请求所需的中断服务程序 (ISR) .
    DS70139E_CN 第68 页
    2007 Microchip Technology Inc.
    表 8-2:
    SFR 名称 INTCON1 INTCON2 IFS0 IFS1 IFS2 IEC0 IEC1 IEC2 IPC0 IPC1 IPC2 IPC3 IPC4 IPC5 IPC6 IPC7 IPC8 IPC9 IPC10 图注: 注: 地址
    dsPIC30F2011/2012/3012 中断控制器寄存器映射
    Bit 15 Bit 14 - DISI MI2C1IF - - MI2CIE - - Bit 13 - - SI2CIF - - SI2CIE - - T1IP T31P ADIP CNIP - - INT2IP - - - - - - - - - - - - - - - - Bit 12 - - NVMIF - - NVMIE - - Bit 11 - - ADIF - - ADIE - - - - - - - - - - - - - - - - - - - Bit 10 OVATE - U1TXIF - LVDIF U1TXIE U1RXIE - LVDIE - - OC1IP T2IP U1TXIP MI2CIP - - - - - - LVDIP - - - - - - Bit 9 OVBTE - U1RXIF - Bit 8 COVTE - SPI1IF - - SPI1IE - - Bit 7 - - T3IF INT2IF - T3IE INT2IE - - - - - - - - - - - - - - 1 - - - - Bit 6 - - T2IF - - T2IE - - Bit 5 - - OC2IF - - OC2IE - - IC1IP OC2IP U1RXIP SI2CIP - - 0 - - - - - - 0 - - - - Bit 4 MATHERR - IC2IF - - IC2IE - - Bit 3 ADDRERR - T1IF - - T1IE - - - - - - - - - - - - - - 1 - - - - Bit 2 Bit 1 Bit 0 - 复位状态 0000 0000 0000 0000 0080 NSTDIS 0082 ALTIVT 0084 0086 0088 008C 008E 0090 0094 0096 0098 009A 009C 009E 00A0 00A2 00A4 00A6 00A8 CNIF - - CNIE - - - - - - - - - - - - - STKERR OSCFAIL INT2EP OC1IF - - OC1IE - - INT1EP IC1IF - - IC1IE - - INT0IP IC2IP SPI1IP NVMIP INT1IP - 0 - - - - - 0 - - - -
    2007 Microchip Technology Inc. DS70139E_CN 第69 页
    INT0EP 0000 0000 0000 0000 INT0IF INT1IF - INT0IE INT1IE - 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
    dsPIC30F2011/2012/3012/3013
    0100 0100 0100 0100 0100 0100 0100 0100 0000 0000 0000 0100 0100 0000 0000 0000 0000 0000 0100 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 0000 0000
    u = 未初始化的位 有关寄存器位域的描述,请参见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    表 8-3:
    SFR 名称 INTCON1 INTCON2 IFS0 IFS1 IFS2 IEC0 IEC1 IEC2 IPC0 IPC1 IPC2 IPC3 IPC4 IPC5 IPC6 IPC7 IPC8 IPC9 IPC10 图注: 注: 地址
    dsPIC30F3013 中断控制器寄存器映射
    Bit 15 Bit 14 - DISI MI2CIF - - MI2CIE - - Bit 13 - - SI2CIF - - SI2CIE - - T1IP T31P ADIP CNIP - - INT2IP - - - - - - - - - - - - - - - - Bit 12 - - NVMIF - - NVMIE - - Bit 11 - - ADIF - - ADIE - - - - - - - - - - - — - - - - - - - LVDIE Bit 10 OVATE - U1TXIF - LVDIF Bit 9 OVBTE - U1RXIF U2TXIF - Bit 8 COVTE - SPI1IF U2RXIF - SPI1IE U2RXIE - Bit 7 - - T3IF INT2IF - T3IE INT2IE - - - - - - - — - — - - - - - - - - - - - - - - Bit 6 - - T2IF - - T2IE - - Bit 5 - - OC2IF - - OC2IE - - IC1IP OC2IP U1RXIP SI2CIP - - U2TXIP - - - — - - - - - - Bit 4 MATHERR - IC2IF - - IC2IE - - Bit 3 ADDRERR - T1IF - - T1IE - - - - - - - - - - - - - - - - - U2RXIP - - - - - - - - Bit 2 Bit 1 Bit 0 - 复位状态 0000 0000 0000 0000 0080 NSTDIS 0082 ALTIVT 0084 0086 0088 008C 008E 0090 0094 0096 0098 009A 009C 009E 00A0 00A2 00A4 00A6 00A8 CNIF - - CNIE - - - - - - - - - - - - - STKERR OSCFAIL INT2EP OC1IF - - OC1IE - - INT1EP IC1IF - - IC1IE - - INT0IP IC2IP SPI1IP NVMIP INT1IP
    DS70139E_CN 第70 页 2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    INT0EP 0000 0000 0000 0000 INT0IF INT1IF - INT0IE INT1IE - 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 0000 0000 0000 0100 0100 0000 0000 0000 0000 0000 0100 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 0000 0000
    U1TXIE U1RXIE U2TXIE - OC1IP T2IP
    U1TXIP MI2CIP - - - - - - LVDIP
    u = 未初始化的位 有关寄存器位域的描述,请参见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    dsPIC30F2011/2012/3012/3013
    9.0 TIMER1 模块
    通过设定 16 位 SFR T1CON 中的相应位来决定这些工 作模式.图 9-1 所示为 16 位 Timer1 模块的框图. 16 位定时器模式:在 16 位定时器模式下,定时器在每 个指令周期递增, 直到与预先装入周期寄存器 PR1 中的 值匹配,然后复位至 0,继续计数. CPU 进入空闲模式时, 定时器将停止递增, 除非 TSIDL (T1CON)位 = 0.如果 TSIDL = 1,则定时器模 块逻辑将在 CPU 空闲模式结束后继续递增. 16 位同步计数器模式:在 16 位同步计数器模式下,定 时器将在外部时钟信号的上升沿递增,外部时钟信号与 内部时钟同步. 定时器计数, 直到等于 PR1 中预先装入 的值,然后复位至 0,继续计数. CPU 进入空闲模式时,定时器将停止递增,除非对应的 TSIDL 位 = 0. 如果 TSIDL = 1,则定时器模块逻辑将 在 CPU 空闲模式结束后继续递增. 16 位异步计数器模式:在 16 位异步计数器模式下,定 时器将在外部时钟信号的上升沿递增.定时器计数,直 到等于PR1中预先装入的值, 然后复位至0, 继续计数. 当定时器配置为异步工作模式时,且 CPU 进入空闲模 式的话,如果 TSIDL = 1,则定时器将停止递增.
    注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用. 有关 CPU, 外 设,寄 存 器 说 明 和 一 般 器 件 功 能 的 更 多 信 息,请 参 阅 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    本章介绍了 16 位通用 Timer1 模块以及相关的工作模 式.图 9-1 给出了 16 位 Timer1 模块的简化框图.下面 各小节将详细说明定时器的工作模式,包括其设置,控 制寄存器以及相应的框图. Timer1 模块是一个 16 位的定时器,可作为实时时钟的 时间计数器,或作为自由运行的时段定时器 / 计数器. 16 位定时器有下列模式: 16 位定时器 16 位同步计数器 16 位异步计数器 而且,支持下列操作特征: 定时器门控操作 可选的预分频比设置 CPU 空闲和休眠模式下的定时器操作 在 16 位周期寄存器匹配时或外部门控信号的下降 沿产生中断
    图 9-1:
    16 位 TIMER1 模块框图
    PR1 相等
    比较器 x16
    TSYNC 1 同步
    复位 T1IF 事件标志 0
    TMR1 0
    Q Q D CK
    TGATE SOSCO/ T1CK LPOSCEN SOSCI 门控 同步 TCY
    TCS TGATE
    1
    TGATE
    TON 1 X 0 1 0 0
    TCKPS 2 预分频器 1, 8, 64, 256
    2007 Microchip Technology Inc.
    DS70139E_CN 第71 页
    dsPIC30F2011/2012/3012/3013
    9.1 定时器门控操作 9.4 定时器中断
    16 位定时器可以置为门控时间累加模式. 该模式使得当 门控输入信号 (T1CK 引脚)为高电平时,内部 TCY 能 够递增相应的定时器.要使能该模式,必须置 1 控制位 TGATE(T1CON) .必须使能定时器(TON = 1) , 且将定时器时钟源设置为内部时钟源 (TCS = 0) . CPU 进 入 空 闲 模 式 时,定 时 器 将 停 止 递 增,除非 TSIDL = 0.如果 TSIDL = 1,则定时器将在 CPU 空闲 模式终止后继续递增. 16 位定时器具有在周期匹配时产生中断的能力.当定时 器计数与周期寄存器相匹配时, T1IF 位将置 1,如果允 许中断的话将产生中断. TT1IF 位必须用软件清零. 定 时器中断标志 T1IF 位于中断控制器的 IFS0 控制寄存器 中. 当使能了门控时间累加模式时,还将在门控信号的下降 沿 (累加周期的末尾)产生中断. 通过相应的定时器中断允许位T1IE来允许定时器中断. 定时器中断允许位位于中断控制器的 IEC0 控制寄存器 中.
    9.2
    定时器预分频器
    16 位定时器的输入时钟 (Fosc/4 或外部时钟) ,有 1:1,1:8,1:64 或 1:256 的预分频比供选择;通过控制 位 TCKPS (T1CON)来选择预分频比. 当发生以下任一事件时,预分频器的计数器将清零: 对 TMR1 寄存器进行写操作 对 T1CON 寄存器进行写操作 器件复位,如 POR 和 BOR 但是,如果定时器被禁止 (TON = 0) ,由于预分频器 的时钟停止了工作,定时器预分频器将不会复位. 写 T1CON 时,TMR1 不会被清零.当写 TMR1 寄存器 时, TMR1 将被清零.
    9.5
    实时时钟
    当 Timer1 工作在实时时钟 (RTC)模式下时,提供了 当天时间和事件时间标记的能力.RTC的主要工作特性 如下: 使用 32 kHz LP 振荡器工作 8 位预分频器 低功耗 实时时钟中断
    工作模式由 T1CON 控制寄存器中相应位的设置决定.
    9.3
    休眠模式下的定时器操作
    图 9-2:
    C1
    TIMER1 LP 振荡器 RTC 的 推荐元件
    在 CPU 休眠模式期间,定时器将继续工作,如果: 定时器模块被使能 (TON = 1) ,且 定时器时钟源选用外部时钟 (TCS = 1) ,且 TSYNC 位 (T1CON)为逻辑 0,这将外部时 钟源定义为异步的. 如果所有这三个条件都得到满足,定时器将继续计数, 直到等于周期寄存器中的值,然后复位至 0x0000. 当定时器与周期寄存器之间匹配时,如果相应的定时器 中断允许位置 1 的话,将产生中断.
    SOSCI 32.768 kHz XTAL dsPIC30FXXXX SOSCO C2 R
    C1 = C2 = 18 pF ; R = 100K
    DS70139E_CN 第72 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    9.5.1 RTC 振荡器操作 9.5.2 RTC 中断
    当 TON = 1, TCS = 1 且 TGATE = 0 时,定时器在 32 kHz LP 振荡器输出信号的上升沿递增,一直递增到 周期寄存器中指定的值,然后复位至 0. 为确保正确工作, TSYNC 位必须置为逻辑 0 (异步模 式) . 使能 LPOSCEN(OSCCON)将禁止正常的定时器 和计数器模式,而使能定时器溢出唤醒事件. 当 CPU 进入休眠模式时,如果 32 kHz 外部晶体振荡 器处于工作状态,且控制位没有改变的话,则 RTC 将 继续工作. 要使 RTC 在空闲模式下继续工作, TSIDL 位应当清零. 当中断事件发生时,相应的中断标志 T1IF 将置 1,如果 允许中断的话就将产生中断. T1IF 位必须用软件清零. 相应的定时器中断标志 T1IF 位于中断控制器的 IFS0 状 态寄存器中. 通过相应的定时器中断允许位 T1IE 来允许中断. 定时 器中断允许位位于中断控制器的 IEC0 控制寄存器中.
    2007 Microchip Technology Inc.
    DS70139E_CN 第73 页
    表 9-1:
    SFR 名称 TMR1 PR1 T1CON 图注: 注: 地址 0100 0102 0104
    TIMER1 寄存器映射
    Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Timer1 寄存器 周期寄存器 1 TON - TSIDL - - - - - - TGATE TCKPS1 TCKPS0 - TSYNC TCS - Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位状态 uuuu uuuu uuuu uuuu 1111 1111 1111 1111 0000 0000 0000 0000
    DS70139E_CN 第 74 页 2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    u = 未初始化的位 有关寄存器各位的描述,请参见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    dsPIC30F2011/2012/3012/3013
    10.0 TIMER2/3 模块
    注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用.有关CPU, 外 设,寄 存 器 说 明 和 一 般 器 件 功 能 的 更 多 信 息,请 参 阅 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    16 位定时器模式: 在 16 位模式下, Timer2 和 Timer3 可以配置为两个独立的 16 位定时器. 每个定时器均可 设置为 16 位定时器模式或 16 位同步计数器模式.这两 种工作模式的详细信息,请参见第 9.0 节 "Timer1 模 块" . Timer2 和 Timer3 之间唯一的功能差异是,Timer2 提供 了时钟预分频器输出同步.这对于高频外部时钟输入很 有用. 32 位定时器模式:在 32 位定时器模式下,定时器在每 个指令周期递增,一直递增到与预先装入组合 32 位周 期寄存器 PR3/PR2 中的值匹配, 然后复位至 0, 继续计 数. 对于 Timer2/Timer3 对的同步 32 位读操作,读低位字 (TMR2 寄存器)将导致高位字被读取并锁存到一个 16 位保持寄存器 (称作 TMR3HLD) . 对于同步 32 位写操作,必须首先写入保持寄 存器 (TMR3HLD) 如果后续操作是写 TMR2 寄存器的话, . 则 TMR3HLD 的内容将传送并锁存到 32 位定时器 (TMR3)的 MSB 中. 32 位同步计数器模式; 在 32 位同步计数器模式下, 定 时器将在外部时钟信号的上升沿递增,外部时钟信号与 内部时钟同步.定时器计数,一直递增到与预先装入组 合 32 位周期寄存器 PR3/PR2 中的值匹配, 然后复位至 0,继续计数. 当定时器配置为同步计数器模式时,且 CPU 进入空闲 模式的话,定时器将停止递增,除非 TSIDL (T2CON)位 = 0. 如果 TSIDL = 1,定时器模块 逻辑将在 CPU 空闲模式结束时继续递增 .
    本章介绍了 32 位通用定时器模块 (Timer2/3)以及相 关的工作模式.图 10-1 给出了 32 位 Timer2/3 模块的 简化框图. 10-2 和图 10-3 分别为将 Timer2/3 配置成 图 的两个独立 16 位定时器 Timer2 和 Timer3 的框图. Timer2/3 模块是 32 位定时器 (可配置为两个 16 位定 时器),具有可选择的工作模式. 这些定时器为其他外 设模块所使用,例如: 输入捕捉 输出比较 / 简单的 PWM 对于定时器的工作模式,下面的各小节将详细说明其设 置和控制寄存器以及相应的框图. 32 位定时器有下列模式: 两个独立的 16 位定时器 (Timer2 和 Timer3) , 支持所有 16 位工作模式 (异步计数器模式除外) 一个 32 位定时器 一个 32 位同步计数器 此外,支持如下工作特性: ADC 事件触发信号 定时器门控操作 可选的预分频比设置 空闲和休眠模式下的定时器工作 在 32 位周期寄存器匹配时产生中断
    通过设定 16 位 T2CON 和 T3CON SFR 中的相应位来 决定这些工作模式. 对于 32 位定时器 / 计数器操作, Timer2 是 32 位定时 器的低位字,而 Timer3 是高位字. 注: 对于 32 位定时器操作, T3CON 控制位将 被忽略. 设置和控制只使用 T2CON 控制 位 .对于 32 位定时器模块,使用的是 Timer2 时钟和门控输入,但是,中断产生 由 Timer3 中断标志位(T3IF)反映,且中 断通过Timer3中断允许位 (T3IE) 来允许.
    2007 Microchip Technology Inc.
    DS70139E_CN 第75 页
    dsPIC30F2011/2012/3012/3013
    图 10-1: 32 位 TIMER2/3 框图
    数据总线
    TMR3HLD 写 TMR2 读 TMR2 16 复位 TMR3 MSB 等于 16
    16
    TMR2 LSB
    同步
    ADC 事件触发信号
    比较器 x 32
    PR3 T3IF 事件标志 0 1 TGATE (T2CON)
    Q Q
    PR2
    D CK
    TGATE (T2CON)
    TCS TGATE
    T2CK 门控 同步 TCY
    TON 1 X
    TCKPS 2 预分频器 1, 8, 64, 256
    0 1 0 0
    注:
    定时器配置位 T32 (T2CON)必须置 1 以实现 32 位定时器/计数器操作.所有控制位都与 T2CON 寄 存器相对应.
    DS70139E_CN 第76 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    图 10-2: 16 位 TIMER2 框图
    PR2 等于
    比较器 x 16
    复位 T2IF 事件标志 0 1 TGATE
    TMR2
    同步
    Q Q
    D CK
    TGATE TCS TGATE
    T2CK 门控 同步 TCY
    TON 1 X
    TCKPS 2 预分频器 1, 8, 64, 256
    0 1 0 0
    图 10-3:
    16 位 TIMER3 框图
    PR3
    ADC 事件触发信号
    等于
    比较器 x 16
    复位 T3IF 事件标志 0 1 TGATE
    TMR3
    Q Q
    D CK
    TGATE TCS TGATE
    T3CK
    同步
    TON 1 X
    TCKPS 2 预分频器 1, 8, 64, 256
    0 1 TCY 0 0
    2007 Microchip Technology Inc.
    DS70139E_CN 第77 页
    dsPIC30F2011/2012/3012/3013
    10.1 定时器门控操作 10.4 休眠模式下的定时器操作
    32 位定时器可以置为门控时间累加模式. 该模式使得 当门控输入信号 (T2CK 引脚)为高电平时,内部 TCY 能够递增相应的定时器. 要使能该模式,必须置 1 控制 位 TGATE (T2CON) 在此模式下, Timer2 是发 . 起时钟源. 对于 Timer3, TGATE 设定被忽略.必须使 能定时器 (TON = 1) ,且定时器时钟源设置为内部时 钟源 (TCS = 0) . 外部信号的下降沿终止计数操作,但不会复位定时器. 要从零开始计数,用户必须复位定时器. 在 CPU 休眠模式期间,由于禁止了内部时钟,所以定 时器不工作.
    10.5
    定时器中断
    10.2
    ADC 事件触发信号
    32 位定时器模块具有在周期匹配时, 或者在外部门控信 号下降沿产生中断的能力. 当 32 位定时器计数与相应 的 32 位周期寄存器相匹配时, 或者检测到外部"门控" 信号的下降沿时,T3IF 位 (IFS0)将置 1,如果允 许中断的话则将产生中断.在此模式下, T3IF 中断标志 用作中断源. T3IF 位必须在软件中清零. 通过相应的定时器中断允许位 T3IE (IEC0)来允许 中断.
    当 32 位定时器 (TMR3/TMR2)与 32 位组合周期寄存 器(PR3/PR2)匹配时,或当 16 位定时器 TMR3 和 16 位周期寄存器 PR3 匹配时, Timer3 将生成 ADC 特殊事 件触发信号.
    10.3
    定时器预分频器
    定时器的输入时钟 (FOSC/4 或外部时钟) ,有 1:1, 1:8, 1:64 或 1:256 的 预 分 频 比 选 择 ; 通 过 控 制位 TCKPS (T2CON 和 T3CON)来选 择 预 分 频 比. 对 于 32 定 时 器 操 作,发 起 时 钟 源是 Timer2.在此模式下不能进行Timer3的预分频器操作. 当发生以下情况中的任何一种时,预分频器计数器清 零: 写 TMR2/TMR3 寄存器 对 T2CON/T3CON 寄存器进行写操作 器件复位,如 POR 和 BOR 但是,如果定时器被禁止 (TON = 0) ,由于预分频器 的时钟停止了工作, Timer2 预分频器将不会被复位. 当写 T2CON/T3CON 时, TMR2/TMR3 不会被清零.
    DS70139E_CN 第78 页
    2007 Microchip Technology Inc.
    表 10-1:
    SFR 名称 TMR2 TMR3HLD TMR3 PR2 PR3 T2CON T3CON 图注: 注: 地址 0106 0108 010A 010C 010E 0110 0112
    TIMER2/3 寄存器映射
    Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Timer2 寄存器 Timer3 保持寄存器 (仅适用于 32 位定时器操作) Timer3 寄存器 周期寄存器 2 周期寄存器 3 TON TON - - TSIDL TSIDL - - - - - - - - - - - - TGATE TGATE TCKPS1 TCKPS0 TCKPS1 TCKPS0 T32 - - - TCS TCS - - Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位状态 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
    2007 Microchip Technology Inc. DS70139E_CN 第 79 页
    u = 未初始化位 有关寄存器各位的描述,请参见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    dsPIC30F2011/2012/3012/3013
    dsPIC30F2011/2012/3012/3013
    注:
    DS70139E_CN 第80 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    11.0 输入捕捉模块
    注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用. 有关 CPU, 外 设,寄 存 器 说 明 和 一 般 器 件 功 能 的 更 多 信 息,请 参 阅 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    通过在 IC1CON 和 IC2CON 寄存器中设置相应的位, 选 择上述工作模式. dsPIC30F2011/2012/3012/3013 器 件具有两个捕捉通道.
    11.1

    简单捕捉事件模式
    本章对输入捕捉模块和相关的工作模式进行了介绍.此 模块提供的工作特性可用于需要进行频率(周期)和脉 冲测量的应用场合. 图 11-1 给出了输入捕捉模块的框图. 输入捕捉功能可用 于以下模式: 频率 / 周期 / 脉冲测量 其他外部中断源 输入捕捉模块的关键工作特性是: 简单捕捉事件模式 Timer2 和 Timer3 模式选择 输入捕捉事件发生时产生中断
    dsPIC30F 产品系列中的简单捕捉事件有: 在每个下降沿进行捕捉 在每个上升沿进行捕捉 在每第 4 个上升沿进行捕捉 在每第 16 个上升沿进行捕捉 在每个上升沿和下降沿进行捕捉
    通过设置适当的位 ICM (ICxCON) ,选择 上述简单输入捕捉模式.
    11.1.1
    捕捉预分频器
    有四种输入捕捉预分频器设置,它们由 ICM (ICxCON)位指定.每当捕捉通道关闭时,预分 频器计数器将清零.另外,任何复位都将清零预分频器 计数器.
    图 11-1:
    输入捕捉模式框图
    来自通用定时器模块 T2_CNT T3_CNT
    16
    16 ICTMR
    ICx 引脚 预分频器 1, 4, 16 3 时钟 同步器 ICM 模式选择 ICBNE, ICOV ICI ICxCON
    1 边沿 检测 逻辑 FIFO 读/写 逻辑
    0
    ICxBUF
    中断 逻辑
    数据总线 注:
    置 1 标志位 ICxIF
    图中 "x"指的是与相应输入捕捉通道 (1 或 2)相关的寄存器或位.
    2007 Microchip Technology Inc.
    DS70139E_CN 第81 页
    dsPIC30F2011/2012/3012/3013
    11.1.2 捕捉缓冲器操作
    11.2
    休眠和空闲模式下的输入捕捉工作
    每个捕捉通道都有一个关联的 FIFO 缓冲器,该缓冲器 宽 16 位,深度为四字.有两个状态标志,提供 FIFO 缓 冲器的状态: ICBNE——输入捕捉缓冲器非空 ICOV——输入捕捉溢出 ICBNE 将在第一个输入捕捉事件发生时被置 1,并且一 直保持置 1 状态,直到所有的捕捉事件都已从 FIFO 中 读出.每次从 FIFO 中读出一个字,余下的字将在缓冲 器中前进一个位置. 当 FIFO 已满 (FIFO 中有四个捕捉事件)时,如果在 读 FIFO 之前发生第五个捕捉事件,则将产生溢出,且 ICOV 位将被设置成逻辑 1. 第五个捕捉事件将丢失, 不 会存入 FIFO.而且在从缓冲器读出全部四个事件之前 不会再捕捉任何事件. 如果 FIFO 已空,且还没有收到新的捕捉事件,这时读 FIFO 将产生不确定的结果.
    当器件在 CPU 空闲或休眠模式下时,输入捕捉事件将 使器件唤醒,如果允许中断,还将产生中断. 如果 ICM = 111 且中断允许位置 1, 那么当捕捉事 件发生时, 输入捕捉模块将使 CPU 从休眠或空闲模式中 唤醒,这与使能的时钟无关.如果处理中断的条件已经 得到满足的话,上述唤醒还将产生中断.唤醒特性可以 用来增加额外的外部引脚中断.
    11.2.1
    CPU 休眠模式下的输入捕捉
    CPU 休眠模式允许输入捕捉模块以功能受到限制的方 式工作.在 CPU 休眠模式下, ICI 位不适用,输 入捕捉模块只能用作外部中断源. 当器件处于休眠模式下时, 为了使用输入捕捉模块, 必须把 捕捉模块设置成仅在上升沿产生中断(ICM = 111) . 在此模式下, 4:1 或 16:1 的预分频比设置不适用.
    11.2.2
    CPU 空闲模式下的输入捕捉
    11.1.3
    TIMER2 和 TIMER3 选择模式
    输入捕捉模块有最多 8 个输入捕捉通道.每个通道均可 选择两个定时器 (Timer2 和 Timer3)之一作为时基. 通过特殊功能寄存器位 ICTMR (ICxCON) ,来对 定时器资源进行选择.对于输入捕捉模块,Timer3 是默 认的可用定时器资源.
    CPU 空闲模式允许输入捕捉模块以全功能的方式工作. 在 CPU 空闲模式下,由 ICI 位选择的中断模式是 适用的, 由控制位 ICM 定义的 4:1 和 16:1 捕捉预 分频比设置同样也适用.这个模式要求使能所选择的定 时器.此外, ICSIDL 位必须置为逻辑 0. 在 CPU 空闲模式下,如果输入捕捉模块定义为 ICM = 111,则输入捕捉引脚仅用作外部中断引 脚.
    11.1.4
    霍尔传感器模式
    当输入捕捉模块设置为在每个边沿 (上升沿和下降沿, ICM = 001)进行捕捉时,输入捕捉逻辑将执行下 列操作: 输入捕捉中断标志在每个边沿 (上升沿和下降沿) 置 1. 由于每次捕捉都产生中断,捕捉时产生中断模式设 置位 ICI 被忽略. 在这个模式下,不产生捕捉溢出.
    11.3
    输入捕捉中断
    输入捕捉通道具有根据选定的捕捉事件数来产生中断的 能力.由控制位 ICI (ICxCON)来设置选 定的捕捉事件数. 每个通道都有一个中断标志位(ICxIF) .各捕捉通道中 断标志位于相应的 IFSx 寄存器中. 通过相应捕捉通道中断允许位 (ICxIE)来允许中断; 捕捉通道中断允许位位于相应的 IEC 控制寄存器中.
    DS70139E_CN 第82 页
    2007 Microchip Technology Inc.
    表 11-1:
    SFR 名称 IC1BUF IC1CON IC2BUF IC2CON 图注: 注: 地址 0140 0142 0144 0146
    输入捕捉寄存器映射
    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 复位状态 uuuu uuuu uuuu uuuu ICI ICI ICOV ICOV ICBNE ICBNE ICM ICM 0000 0000 0000 0000 uuuu uuuu uuuu uuuu 0000 0000 0000 0000 输入 1 捕捉寄存器 - - - - ICSIDL ICSIDL - - - - - - - - - - ICTMR ICTMR 输入 2 捕捉寄存器
    2007 Microchip Technology Inc. DS70139E_CN 第 83 页
    u = 未初始化位 有关寄存器各位的描述,请参见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    dsPIC30F2011/2012/3012/3013
    dsPIC30F2011/2012/3012/3013
    注:
    DS70139E_CN 第84 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    12.0 输出比较模块
    输出比较模块的关键工作特性包括: Timer2 和 Timer3 模式选择 简单输出比较匹配模式 双输出比较匹配模式 简单 PWM 模式 休眠和空闲模式下的输出比较 发生输出比较 /PWM 事件时将产生中断
    注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用.有关CPU, 外 设,寄 存 器 说 明 和 一 般 器 件 功 能 的 更 多 信 息,请 参 见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    本章对输出比较模块和相关工作模式进行了介绍.此模 块提供的特性适用于需要以下工作模式的应用: 产生可变宽度输出脉冲 功率因数校正 图 12-1 给出了输出比较模块的框图.
    通过设置 16 位 OC1CON 和 OC2CON 寄存器中的相应 位来决定这些工作模式. dsPIC30F2011/2012/3012/ 3013 器件具有 2 个比较通道. 图 12-1 中的 OCxRS 和 OCxR 表示双比较寄存器. 在 双比较模式下, OCxR寄存器用于第一次比较而OCxRS 用于第二次比较.
    图 12-1:
    输出比较模式框图
    将 OCxIF 标志位置 1
    OCxRS
    OCxR
    输出 逻辑 3
    S Q R 输出 使能 OCx
    比较器 OCTSEL
    OCM 模式选择 OCFA (对于 x = 1, 3 或 4) 2,
    0
    1
    0
    1
    来自通用 定时器模块 TMR2 TMR3 T2P2_MATCH T3P3_MATCH
    注:
    图中 'x'指的是与相应输出比较通道 1 或 2 相关的寄存器.
    2007 Microchip Technology Inc.
    DS70139E_CN 第85 页
    dsPIC30F2011/2012/3012/3013
    12.1 Timer2 和 Timer3 选择模式
    12.3.2 连续脉冲模式
    每个输出比较通道均可选择两个 16 位定时器 Timer2 和 Timer3 中的一个. 通过 OCTSEL 位 (OCxCON)来控制定时器的选 择. Timer2 是输出比较模块默认的定时器资源. 用户若要将模块配置为生成连续输出脉冲,则需要执行 下列步骤: 确定指令周期时间 TCY. 根据 TCY 计算所需的脉冲宽度值. 计算从定时器起始值 0x0000 到开始输出脉冲的时 间. 把脉冲宽度开始和停止时间分别写入 OCxR 和 OCxRS 比较寄存器 (x 表示通道 1,2,……,N) . 设置定时器周期寄存器的值,使之等于或大于 OCxRS 比较寄存器中的值. 设置 OCM = 101. 使能定时器, TON (TxCON) = 1.
    12.2
    简单输出比较匹配模式
    当控制位 OCM (OCxCON) = 001, 010 或 011 时, 所选输出比较通道被配置为下列三种简单输 出比较匹配模式之一: 比较强制 I/O 引脚为低电平 比较强制 I/O 引脚为高电平 比较使 I/O 引脚状态翻转 上述模式中使用了 OCxR 寄存器.OCxR 寄存器将装入 一个值,然后与所选的递增定时器的计数值作比较.进 行比较时,将发生上述比较匹配模式之一.如果在达到 OCxR 中的值之前, 计数器复位为零, OCx 引脚的状 则 态保持不变.
    12.4
    简单 PWM 模式
    12.3
    双输出比较匹配模式
    当控制位 OCM(OCxCON)= 110 或 111 时,所选输出比较通道被配置为 PWM 工作模式. 当配 置为 PWM 工作模式时, OCxR 是主锁存器 (只读) , OCxRS 是辅助锁存器. 这能使 PWM 电平跳变时不会 产生毛刺. 为了把输出比较模块配置为 PWM 工作模式,用户必须 执行下列步骤: 1. 2. 3. 4. 写适当的周期寄存器,设置 PWM 周期. 写 OCxRS 寄存器,设置 PWM 占空比. 把输出比较模块配置为 PWM 工作模式. 设置 TMRx 预分频比并使能定时器, TON (TxCON)= 1.
    当控制位 OCM(OCxCON)= 100 或 101 时,所选输出比较通道被配置为下列两种双输出比较匹 配模式之一: 单输出脉冲模式 连续输出脉冲模式
    12.3.1
    单脉冲模式
    用户若要将模块配置为生成单输出脉冲,需要执行下列 步骤 (假设定时器已关闭) : 确定指令周期时间 TCY. 根据 TCY 计算所需的脉冲宽度值. 计算从定时器起始值 0x0000 到开始输出脉冲的时 间. 把脉冲宽度开始和停止时间分别写入 OCxR 和 OCxRS 比较寄存器 (x 表示通道 1,2,……,N) . 设置定时器周期寄存器的值,使之等于或大于 OCxRS 比较寄存器中的值. 设置 OCM = 100. 使能定时器, TON (TxCON) = 1. 要 启 动 另 一 个 单 脉 冲,进 行 另 一 次 写 操 作 设 置 OCM = 100 即可.
    12.4.1
    PWM 的输入引脚故障保护
    当控制位 OCM (OCxCON) = 111 时,所 选输出比较通道还是配置为 PWM 工作模式,但具有输 入故障保护的附加功能. 在此模式下,如果在 OCFA/B 引脚上检测到逻辑 0,则对应的 PWM 输出引脚将被置 于高阻输入状态. OCFLT 位 (OCxCON)表明是 否产生故障条件.此状态将保持到下列两个事件都已发 生为止: 外部故障条件已经消除. 通过写适当的控制位,重新使能了 PWM 模式.
    DS70139E_CN 第86 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    12.4.2 PWM 周期
    通过写入 PRx 寄存器可以指定 PWM 周期.可使用公式 12-1 计算 PWM 周期. 当所选 TMRx 等于其对应的周期寄存器 PRx 时,在下 一个递增周期将发生如下四个事件: TMRx 清零. OCx 引脚置 1. - 例外 1:如果 PWM 占空比为 0x0000,则 OCx 引脚将保持为低电平. - 例外 2:如果占空比大于 PRx,则引脚将保持 为高电平. 把 PWM 占空比从 OCxRS 锁存到 OCxR 中. 相应的定时器中断标志置 1. 请参见图 12-2 获取关键的 PWM 周期比较.为了清晰起 见,图中引用的是 Timer3 .
    公式 12-1:
    PWM 周期 = [(PRx) + 1] 4 TOSC (TMRx 预分频比 )
    PWM 频率定义为 1/[PWM 周期 ].
    图 12-2:
    PWM 输出时序
    周期
    占空比
    TMR3 = PR3 T3IF = 1 (中断标志) OCxR = OCxRS
    TMR3 = PR3 T3IF = 1 (中断标志) OCxR = OCxRS TMR3 = 占空比 (OCxR) TMR3 = 占空比 (OCxR)
    12.5
    CPU 休眠模式期间的输出比较工作
    12.7
    输出比较中断
    当CPU进入休眠模式时, 所有的内部时钟都将停止.从 而,输出比较通道将把引脚驱动为 CPU 进入休眠模式 之前的有效状态. 例如, CPU 进入休眠状态时, 当 如果引脚为高电平, 则 引脚将继续保持为高电平. 类似地,当 CPU 进入休眠 状态时,如果引脚为低电平,它将继续保持为低电平. 在这两种情形下,当器件唤醒时,输出比较模块都将恢 复工作.
    输出比较通道具有在比较匹配时产生中断的能力,而与 选择的匹配模式无关. 对于除 PWM 之外的所有模式,当比较事件发生时,相 应的中断标志 (OCxIF)置 1,如果允许中断的话还将 产生中断.OCxIF 位位于相应的 IFS 寄存器中, 它的清 零必 须在软件 中进行. 通过 相应的比 较中断 允许位 (OCxIE) 来允许中断; OCxIE 位位于相应的 IEC 控制 寄存器中. 对于 PWM 模式,当事件发生时,对应的定时器中断标 志位 (T2IF 或 T3IF)置 1,如果允许中断的话还将产 生中断. TxIF 位在 IFS0 寄存器中,必须用软件对它清 零. 通过位于 IEC0 控制寄存器中的定时器中断允许位 (T2IE 或 T3IE) 来允许相应的中断.在 PWM 工作模式 下,输出比较中断标志始终不会置 1.
    12.6
    CPU 空闲模式期间的输出比较工作
    当 CPU 进入空闲模式时,输出比较模块仍然能够全功 能工作. 如果 OCSIDL 位 (OCxCON)为逻辑 0,所选时 基 (Timer2 或 Timer3)使能且所选定时器的 TSIDL 位 为逻辑 0, 输出比较通道将在 CPU 空闲模式期间工作.
    2007 Microchip Technology Inc.
    DS70139E_CN 第87 页
    表 12-1:
    SFR 名称 OC1RS OC1R OC1CON OC2RS OC2R OC2CON 图注: 注: 地址 0180 0182 0184 0186 0188 018A
    输出比较寄存器映射
    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 复位状态 0000 0000 0000 0000 0000 0000 0000 0000 - OCFLT OCTSEL OCM 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 - OCFLT OCTSEL OCM 0000 0000 0000 0000 输出比较 1 从寄存器 输出比较 1 主寄存器 - - OCSIDL - - - - - - - 输出比较 2 从寄存器 输出比较 2 主寄存器 - - OCSIDL - - - - - - -
    DS70139E_CN 第88 页 2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    u = 未初始化的位 有关寄存器位域的描述,请参见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    dsPIC30F2011/2012/3012/3013
    13.0 SPI 模块
    SS1 (低电平有效从选择) 在主模式下工作时, SCK1 是时钟输出, 但在从模式下 它是时钟输入. 一组 8 或 16 个时钟脉冲将数据位从 SPI1SR 移出到 SDO1 引脚, 同时将 SDI1 引脚的数据位移入 SPI1SR. 当 传 输 完 成 后 将 产 生 中 断,相 应 的 中 断 标 志 位 (SPI1IF)置 1. 通过中断允许位 (SPI1IE)可以禁止 该中断. 接收操作是双缓冲的. 当接收完字节时,将字节从 SPI1SR 传输到 SPI1BUF. 当从 SPI1SR 传输新数据到 SPI1BUF 时,如果接收缓 冲器满, 模块将使 SPIROV 位置 1, 表明产生溢出条件. 数据从 SPI1SR 向 SPI1BUF 的传输不会完成,新数据 将丢失. 当 SPIROV 为 1 时,模块将不会对 SCK1 电 平的跳变进行响应;实际上会禁止模块,直到用户软件 读 SPI1BUF 为止. 发送写操作同样也是双缓冲的. 用户写入 SPI1BUF. 当主器件或从器件传输完成后,移位寄存器(SPI1SR) 的内容将被传送给接收缓冲器.如果已经向缓冲器寄存 器写了任何发送数据,发送缓冲器的内容将被传送给 SPI1SR.于是,接收到的数据存放在 SPI1BUF 中,而 SPI1SR 中的发送数据已经准备就绪,可进行下一次传 输. 注: 发 送 缓 冲 器 (SPI1TXB)和 接 收 缓 冲 器 (SPI1RXB)都映射到相同的寄存器地址 SPI1BUF.
    注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用.有关CPU, 外 设,寄 存 器 说 明 和 一 般 器 件 功 能 的 更 多 信 息,请 参 见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    串行外设接口 (Serial Peripheral Interface, SPI)模块 是同步串行接口, 可用于与其他外设 (如 EEPROM, 移位寄存器,显示驱动器和 A/D 转换器等)或者单片机 进行通信.SPI 模块与 Motorola 的 SPI 和 SIOP 接口兼 容.dsPIC30F2011/2012/3012/3013 器件具有 SPI 模块 SPI1.
    13.1
    功能说明
    图 13-1 为 SPI 模块的简化框图, SPI 模块由一个用于将 数据移入和移出的 16 位移位寄存器 SPI1SR 和一个缓 冲寄存器 SPI1BUF 组成. 控制寄存器 SPI1CON (图 中未显示)用来配置模块.此外,还有一个状态寄存器 SPI1STAT (图中未显示)用来表明各种状态条件. 注: 有关控制和状态寄存器的详细信息请参见 《dsPIC30F系列参考手册》 (DS70046E_ CN)
    串行接口由 4 个 I/O 引脚组成: SDI1 (串行数据输入) SDO1 (串行数据输出) SCK1 (移位时钟输入或输出)
    图 13-1:
    SPI 框图
    内部 数据总线 读 SPI1BUF 接收 SPI1SR 写 SPI1BUF 发送
    SDI1 SDO1
    bit 0
    移位 时钟 SS 和 FSYNC 控制 时钟 控制 边沿 选择 辅助 预分频器 1:1 – 1:8 使能主时钟 主 预分频器 1, 4, 16, 64
    SS1
    FCY
    SCK1
    2007 Microchip Technology Inc.
    DS70139E_CN 第89 页
    dsPIC30F2011/2012/3012/3013
    图 13-2 描绘了两种处理器间的主 / 从连接. 在主模式 下,通过对系统时钟进行预分频来产生时钟.只要数据 写入 SPI1BUF 就会被发送. 在最后一个位传输的过程 中产生中断. 在从模式下, SCK1 上出现外部时钟时,进行数据的发 送和接收. 同样,当最后一个位被锁存时产生中断.如 果使能了 SS1 控制,那么仅当 SS1 为低电平时使能发 送和接收. 在 SS1 模式下,当 SS1 为高电平时 SDO1 输出将被禁止. 使用主预分 提供给模块的时钟的频率为 FOSC/4.而后, 频 因 子 (PPRE)和 辅 助 预 分 频 因 子 (SPRE) 对这个时钟进行分频.CKE 位决定发送 的时钟边沿,是在时钟从有效状态跳变到空闲状态进行 发送,还是反之. CKP 位选择时钟的空闲状态 (高电 平或低电平) . 在更改 MODE16 位之前,用户软件必须禁止模块. 用 户更改 MODE16 位时, SPI 模块被复位. 8 位和 16 位工作之间的基本区别是:8 位工作模式下数 据是从 SPI1SR 的 bit 7 开始发送的;而在 16 位工作模 式下,则是从 SPI1SR 的 bit 15 开始发送. 在两种模式 下,数据都会移入 SPI1SR 的 bit 0.
    13.1.2
    SDO1 禁止
    SPI1CON寄存器中的控制位 DISSDO, 用来禁止SDO1 输出.这样可以允许SPI1模块按仅输入配置进行连接. SDO1 也可用作一般 I/O 口.
    13.2
    帧 SPI 支持
    13.1.1
    字和字节通信
    控制位 MODE16(SPI1CON)允许模块在 8 位或 16 位模式下通信.16 位通信, 除了发送的位数是 16 而 不是 8 以外,与 8 位通信相同.
    当工作在主模式或从模式时,模块支持基本的帧 SPI 协 议. 控制位 FRMEN 使能帧 SPI 支持,并使 SS1 引脚 用作帧同步脉冲 (FSYNC)功能. 控制位 SPIFSD 决 定 SS1 引脚是输入还是输出 (即,模块是接收还是产 生帧同步脉冲) 帧脉冲在一个 SPI 时钟周期内是高电 . 平有效脉冲.当帧同步使能时,仅在 SPI 时钟的下一个 发送边沿开始发送数据.
    图 13-2:
    SPI 主 / 从连接
    SPI 主器件 SDO1 SDI1 SPI 从器件
    串行输入缓冲器 (SPI1BUF)
    串行输入缓冲器 (SPI1BUF)
    移位寄存器 (SPI1SR) MSb LSb
    SDI1
    SDO1 MSb
    移位寄存器 (SPI1SR) LSb
    SCK1 处理器 1
    串行时钟
    SCK1 处理器 2
    DS70139E_CN 第90 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    13.3 从选择同步 13.5 CPU 空闲模式期间的 SPI 工作
    SS1 引脚允许同步从模式. 必须使用 SS1 引脚控制使 能位 (SSEN = 1)把 SPI 配置为 SPI 从模式.当 SS1 引脚为低电平时,使能发送和接收且驱动 SDO1 引脚. 将不再驱动 SDO1 引脚.另 当 SS1 引脚变为高电平时, 外,可以重新同步 SPI 模块,所有的计数器 / 控制电路 都被复位. 于是,当 SS1 引脚再次为低电平时,发送 / 接收又将从 MSb 开始,即使 SS1 在发送 / 接收过程中 变为高电平. 当 器 件 进 入 空 闲 模 式 时,所 有 的 时 钟 源 继 续 工 作. SPISIDL 位(SPI1STAT)选择 SPI 模块在空闲模 式下是停止工作还是继续工作. 如果 SPISIDL = 0,模 块将继续工作.如果 SPISIDL = 1,模块将停止.
    13.4
    CPU 休眠模式期间的 SPI 工作
    在休眠模式期间, SPI 模块关闭. 如果 CPU 在 SPI 正 在进行处理时进入休眠模式,则发送和接收将中止. 在休眠模式下,发送器和接收器将停止.但进入或退出 休眠模式不影响寄存器的内容.
    2007 Microchip Technology Inc.
    DS70139E_CN 第91 页
    表 13-1:
    SFR 名称 SPI1STAT SPI1CON SPI1BUF 注: 地址 0220 0222 0224
    SPI1 寄存器映射
    Bit 15 SPIEN - Bit 14 - FRMEN Bit 13 SPISIDL SPIFSD Bit 12 - - Bit 11 - Bit 10 - Bit 9 - SMP Bit 8 - CKE Bit 7 - SSEN Bit 6 SPIROV CKP Bit 5 - MSTEN Bit 4 - SPRE2 Bit 3 - SPRE1 Bit 2 - SPRE0 Bit 1 SPITBF PPRE1 Bit 0 复位状态 SPIRBF 0000 0000 0000 0000 PPRE0 0000 0000 0000 0000 0000 0000 0000 0000
    DS70139E_CN 第92 页 2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    DISSDO MODE16
    发送和接收缓冲器
    有关寄存器位域的描述,请参见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    dsPIC30F2011/2012/3012/3013
    14.0 I2C 模块
    14.1.1 各种 I2C 模式
    注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用. 有关 CPU, 外 设,寄 存 器 说 明 和 一 般 器 件 功 能 的 更 多 信 息,请 参 见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    支持 I2C 模块工作在以下模式: 7 位地址的 I2C 从模式 10 位地址的 I2C 从模式 7 位或 10 位地址的 I2C 主模式 请参见图 14-1 中的 I2C 编程模型.
    I2C模块 (带有 16位接口) I2C串行通信标准的从模式 为 和多主器件模式提供完全的硬件支持. 模块具有以下主要特性: I2C 接口支持主,从模式工作. I2C 从模式支持 7 位和 10 位地址. I2C 主模式支持 7 位和 10 位地址. I2C 端口允许主器件和从器件之间的双向传输. I2C 端口的串行时钟同步可以用作握手机制来暂停 和继续串行传输 (SCLREL 控制) . I2C 支持多主器件工作;检测总线冲突并相应地进 行仲裁.
    14.1.2
    I2C 模式下的引脚配置
    I2C 有一个双引脚接口,SCL 引脚是时钟线,SDA 引脚 是数据线.
    14.1.3
    I2C 寄存器
    I2CCON 和 I2CSTAT 分别是控制寄存器和状态寄存器. I2CCON 寄存器是可读且可写的. I2CSTAT 的低 6 位是 只读的,它的其余位则是可读且可写的. I2CRSR 是移位寄存器,用来对数据进行移位.I2CRCV 是接收缓冲寄存器,可写入,读出数据字节,如图 14-1 所示. I2CTRN 是发送寄存器,发送操作期间,字节将 会写入 I2CTRN,如图 14-2 所示. I2CADD 寄存器存放从地址. 状态位 ADD10 表明是否为 10 位地址模式. I2CBRG 用来保存波特率发生器的重载 值. 在进行接收时,I2CRSR 和 I2CRCV 一起形成双缓冲接 收器.在 I2CRSR 接收到一个完整的字节后,字节被送 至 I2CRCV 并产生中断脉冲.在发送期间,I2CTRN 不 是双缓冲的. 注: 在 10 位寻址模式下,重复启动条件发生 后,用户只需匹配前 7 位地址.
    14.1
    功能说明
    硬件完全实现了 I2C 标准和快速模式规范下的全部主从 功能,以及 7 位和 10 位寻址. 因此, I2C 模块既可作为 I2C 总线上的主器件工作,也 可作为 I2C 总线上的从器件工作.
    图 14-1:
    编程模型
    I2CRCV (8 位) Bit 7 Bit 7 Bit 8 Bit 15 Bit 15 Bit 9 Bit 0 I2CTRN (8 位) Bit 0 I2CBRG (9 位) Bit 0 I2CCON (16 位) Bit 0 I2CSTAT (16 位) Bit 0 I2CADD (10 位) Bit 0
    2007 Microchip Technology Inc.
    DS70139E_CN第 93 页
    dsPIC30F2011/2012/3012/3013
    图 14-2: I2C 框图
    内部 数据总线
    I2CRCV SCL 移位 时钟 I2CRSR LSB SDA 地址匹配

    匹配检测
    写 I2CADD 读 启动和 停止位检测 写 启动, 重复启动和 停止位产生 I2CSTAT

    冲突 检测
    控制逻辑
    写 I2CCON
    应答 产生 时钟 延长 I2CTRN 移位 时钟 重载 控制 BRG 递减 计数器 I2CBRG FCY LSB





    DS70139E_CN 第94 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    14.2 I2C 模块地址
    14.3.2 从模式接收
    I2CADD 寄存器用于保存从地址. 它是一个 10 位寄存 器. 当 A10M 位 (I2CCON)为 0 时,模块把地址解 释为7位地址.接收地址时, 将接收到的地址与I2CADD 寄存器的低 7 位进行比较. 当 A10M 位为 1 时,模块将认为地址是 10 位地址. 接 收地址时, 将接收到的地址与二进制值 "11110 A9 A8" (其中 A9 和 A8 为 I2CADD 的高 2 位) 进行比较.如 果两者相匹配, 则将下一个地址与 I2CADD 的低 8 位进 行比较,这是 10 位寻址协议规定的. 表 14-1 中给出了 dsPIC30F 支持的 7 位 I2C 从地址. 如果地址匹配时,接收到的 R_W 位是 0,就将启动接 收模式. SCL 上升沿采样所有进入的位. 在 接收到 8 个 位之后,如果 I2CRCV 未满或者 I2COV 没有置 1, I2CRSR 中的数据将被送至 I2CRCV.在第九个时钟发 送 ACK. 如果 RBF 标志置 1, 表明 I2CRCV 仍然存有前一次收到 的数据 (RBF = 1) ,则不发送 ACK ;然而,仍将产生 中断脉冲.如果出现溢出, I2CRSR 的内容不会被装载 到 I2CRCV 中. 注: 当 I2COV 位为 1 且 RBF 标志位为 0 时, 装 载 I2CRCV 寄存器. 在这种情形下,已对 I2CRCV 寄存器执行了读操作, 但在下一次 接收操作开始之前,用户不会清除 I2COV , 位的状态.不发送应答信号 (ACK = 1) 但会更新 I2CRCV 寄存器的内容.
    表 14-1:
    0x00 0x01-0x03 0x04-0x07 0x04-0x77 0x78-0x7b 0x7c-0x7f
    7 位 I2C 从地址
    广播呼叫地址或启动字节 保留 Hs 模式主机码 7 位有效地址 10 位有效地址 (低 7 位) 保留
    14.4
    I2C 10 位从模式的工作
    在 10 位模式下,基本的接收和发送操作与 7 位模式下 的操作相同.不过,地址匹配的判据更加复杂. 对于写操作, 必须在一个启动位后跟两个 I2C规范要求, 地址字节来寻址从器件. A10M控制位置 1表明I2CADD中的地址是10位地址, 而 不是 7 位地址.报文地址首字节的地址检测协议,对于 7位和10位报文而言, 是完全相同的, 但首字节各位进行 比较的机制不同. I2CADD 存放完整的 10 位地址. 在接收到启动位后的地 址时, I2CRSR 与立即数 11110 (缺省 10 位地 址)进行比较,I2CRSR 与 I2CADD 进行比 较.如果出现匹配且 R_W = 0,则发出中断脉冲. ADD10 位清零,表明地址部分匹配.如果地址不匹配, 或者 R_W = 1,则 ADD10 位清零,模块返回到空闲状 态. 然后, 接收地址的低字节, I2CADD 进行比较. 与 如果出现匹配,则产生中断脉冲且置 1 ADD10 位,表 明 10 位地址完全匹配.如果地址不匹配的话, ADD10 位清零,模块返回到空闲状态.
    14.3
    I2C 7 位从模式的工作
    一旦使能(I2CEN = 1) ,从模块将等待启动位出现(即 I2C 模块处于 "空闲"模式) 检测到启动位后,会将 . 8 个位移入 I2CRSR,并将地址与 I2CADD 进行比较. 在 7 位模式下 (A10M = 0) ,将 I2CADD 位和 I2CRSR 进行比较,而 I2CRSR 为 R_W 位. 所有输入位均在 SCL 引脚的上升沿被采样. 如果发生地址匹配,则发送应答,且在第 9 位 (ACK) 的下降沿将从事件中断标志位 (SI2CIF)置 1.地址匹 配不会影响 I2CRCV 缓冲器的内容或 RBF 位.
    14.3.1
    从模式发送
    如果接收到的 R_W 位为 1, 则串行端口进入发送模式. 模块将在第 9 位发送 ACK,并将 SCL 引脚保持为 0, 直到 CPU 写 I2CTRN 进行响应为止.通过把 SCLREL 置 1 释放 SCL,而后数据的 8 个位被移出.数据位在 SCL 下降沿移出, 因此, SCL 为高电平时, 当 SDA 引脚 信号有效. 无论从主器件收到的 ACK 状态如何,都将 在第 9 个时钟脉冲的下降沿发送中断脉冲.
    2007 Microchip Technology Inc.
    DS70139E_CN第 95 页
    dsPIC30F2011/2012/3012/3013
    14.4.1 10 位地址从模式接收
    一旦以上述方式使用完整的10位地址寻址到从器件 (我 们把这个状态叫做"PRIOR_ADDR_MATCH" ,主器 ) 件就可以开始发送数据字节,供从器件接收. 在接收序列的第 9 个时钟后发生时钟延长. 在 ACK 序 列末端的第 9 个时钟的下降沿,如果 RBF 位被置 1,则 SCLREL 位会自动清零,从而强制将 SCL 输出保持为 低电平.用户 ISR 必须在允许继续接收之前将 SCLREL 位置 1.通过将 SCL 线保持为低电平, 使用户在主器件 启动下一个接收序列之前有时间执行 ISR,并读取 I2CRCV 的内容.这将防止发生缓冲器溢出. 注 1: 如果用户读取 I2CRCV 寄存器的内容,并 在第 9 个时钟的下降沿之前将 RBF 位清 零,则 SCLREL 位不会清零,且不会发生 时钟延长. 2: SCLREL 位可由软件置 1,而无需考虑 RBF 位的状态.在下一个接收序列开始之 前,用户应该在 ISR 中清零 RBF 位,以 避免溢出.
    14.4.2
    10 位地址从模式发送
    一旦寻址到从器件,主器件就可以产生重复启动位,复 位地址的高字节,并置 1 R_W 位,但不产生停止位, 于是开始进行从器件发送操作.
    14.5
    自动时钟延长
    在从模式下,通过时钟延长,模块能够同步读缓冲区与 写主器件.
    14.5.1
    发送时钟延长 14.5.4
    在 7 位和 10 位地址发送模式下,如果 TBF 位清零(表 明缓 冲 器为 空) ,则 在第 九 个时 钟的 下 降沿 后清 零 SCLREL 位,就实现了时钟延长. 在从发送模式下,始终进行时钟延长,而与 STREN 位 的状态无关. 在发送序列的第 9 个时钟后发生时钟同步.如果器件在 第 9 个时钟信号的下降沿采样到 ACK 且 TBF 位仍为零, 则自动清零 SCLREL 位, 从而使 SCL 线变为低电平. 用户 ISR 必须在允许继续发送之前将 SCLREL 位置 1. 通过将 SCL 线保持为低电平, 使用户在主器件启动下一 个发送序列之前有时间执行 ISR,并装载 I2CTRN 的内 容. 注 1: 如果用户载入 I2CTRN 寄存器的内容,并 在第 9 个时钟的下降沿之前将 TBF 位置 1,则 SCLREL 位不会清零,且不会发生 时钟延长. 2: SCLREL位可由软件置1, 而无需考虑TBF 位的状态.
    10 位寻址模式下的时钟延长 (STREN = 1)
    在寻址过程中自动发生时钟延长.由于模块有一个寄存 器用于存放完整的地址,协议不必等待地址更新. 寻址过程完成后,每个数据接收或发送序列都要进行时 钟延长,如前所述.
    14.6
    软件控制的时钟延长 (STREN = 1)
    当 STREN 位为 1 时, 可使用软件清零 SCLREL 位, 以允许通过软件控制时钟延长. 逻辑将写 SCLREL 位与 SCL 时钟同步. 清零 SCLREL 位不会将 SCL 输出置为低电平,直至模块检测到 SCL 输出的下降 沿且采样到 SCL 为低.在 SCL 线采样为低时,如果 用户清零 SCLREL 位,则 SCL 输出将保持为低. SCL 输出将保持为低, 一直到 SCLREL 位置 1, I 2 C 且 总线上所有其他器件都已经释放了 SCL. 这确保了写 SCLREL 位的操作不会违背 SCL 的最小高电平时间 要求. 如果 STREN 位为 0,软件对 SCLREL 位的写操作将被 忽略,不会对 SCLREL 位产生影响.
    14.5.2
    接收时钟延长
    在从接收模式下,I2CCON 寄存器的 STREN 位可用于 使能时钟延长. 将 STREN 位置 1 时,SCL 引脚在每个 数据接收序列结束时均保持低电平.
    14.5.3
    7 位寻址时的时钟延长 (STREN = 1)
    在从接收模式下,当 STREN 位置 1 时,若缓冲寄存器 满,则 SCL 线保持为低电平.对于 7 位和 10 位寻址模 式,延长 SCL 输出的方法是相同的.
    DS70139E_CN 第96 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    14.7 中断 14.11 I2C 主模式支持
    用作主器件时,支持如下六种操作: 在 SDA 和 SCL 上产生启动条件. 在 SDA 和 SCL 上产生重复启动条件. 写 I2CTRN 寄存器以启动数据 / 地址发送. 在 SDA 和 SCL 上产生停止条件. 配置 I2C 端口以接收数据. 在数据字节接收完成后产生 ACK 条件. I2C 模块产生两个中断标志:MI2CIF(I2C 主中断标志) 和 SI2CIF (I2C 从中断标志) MI2CIF 中断标志,会 . 在主器件报文事件完成时置1 (从而激活中断) SI2CIF . 中断标志,在检测到发往从器件的报文时置 1 (从而激 活中断) .
    14.8
    斜率控制
    对于快速模式 (400 kHz) I2C 标准要求对 SDA 和 , SCL 信号进行斜率控制.如果需要的话,用户可通过控 制位 DISSLW 来禁止斜率控制.对于 1 MHz 模式,必 须禁止斜率控制.
    14.12 I2C 主模式下的工作
    主器件产生所有的串行时钟脉冲以及启动和停止条件. 由停止条件或重复启动条件停止数据传输.由于重复启 动条件是下一次串行传输的开始,所以此时不会释放 I2C 总线. 在主发送模式下,由 SDA 引脚输出串行数据,而 SCL 引脚输出串行时钟.发送的第一个字节中包含接收器件 的从地址 (7 位)和数据方向位.此时,数据方向位 (R_W)为逻辑 0.每次发送 8 位串行数据.在每个字 节发送完之后,会收到一个 ACK 位.输出启动和停止 条件来表明串行传输的开始和结束. 在主接收模式下,发送的第一个字节中包含发送器件的 从地址 (7 位)和数据方向位.此时,数据方 向位 (R_W)为逻辑 1.这样,发送的第一个字节为 7 位从 地址, 后跟一个表明接收的位 1. 通过 SDA 接收串行数 据,而 SCL 输出串行时钟.每次接收 8 位串行数据.在 每个字节接收完之后,会发送到一个 ACK 位.启动和 停止条件表示发送的开始和结束.
    14.9
    IPMI 支持
    IPMIEN 控 制 位 允 许 模 块 支 持 智 能 外 设 管理接口 (Intelligent Peripheral Management Interface, IPMI) 当此位被置 1 时,模块接受所有地址并对这些 . 地址进行操作.
    14.10 广播呼叫地址支持
    广播呼叫地址可寻址所有器件. 当使用此地址时,理论 上所有器件都应对此地址作出应答. 广播呼叫地址是 I2C 协议为特定目的保留的 8 个地址之 一. 它由全 0 组成,且 R_W = 0. 当广播呼叫使能位(GCEN)被置 1(I2CCON = 1) 时识别广播呼叫地址. 检测到启动位后,将 8 位数据移 入 I2CRSR 寄存器,并将地址与 I2CADD 进行比较,同 时与固化在硬件中的广播呼叫地址进行比较. 如果发生广播呼叫地址匹配,则在第 8 个时钟之后, I2CRSR 的内容被传输到 I2CRCV,在第 9 位 (ACK 位)的下降沿将 RBF 标志位置 1,主事件中断标志 (MI2CIF)被置 1. 响应中断时,可通过读 I2CRCV 寄存器的内容检查中断 源,从而判断该地址是特定于器件的地址还是广播呼叫 地址.
    14.12.1
    I2C 主发送
    数据字节, 位地址或 10 位地址的后半部分的发送, 7 通 过简单地把值写入 I2CTRN 寄存器即可完成.当模块处 于 WAIT 状态时,用户只能写 I2CTRN 寄存器.此操作 会将缓冲器满标志位 (TBF)置 1,允许波特率发生器 开始计数并开始下一次发送. SCL 信号出现下降沿之 后,将地址 / 数据的每一位都移出到 SDA 引脚.发送状 态标志位 TRSTAT(I2CSTAT)显示主器件是否正 在发送.
    2007 Microchip Technology Inc.
    DS70139E_CN第 97 页
    dsPIC30F2011/2012/3012/3013
    14.12.2 I2C 主接收
    通过设置接收使能位 RCEN (I2CCON)可以使能 主模式接收.在 RCEN 置 1 之前,I2C 模块必须是空闲 的,否则 RCEN 位被忽略.波特率发生器开始计数,每 次计满返回到零时,在每个时钟的上升沿,SCL 引脚的 状态变为 ACK,数据移入至 I2CRSR 中. 如果正在进行发送时产生总线冲突,将停止发送,清除 TBF标志, 释放SDA和SCL线, 而后可向I2CTRN写入数 据.当用户执行 I2C 主事件中断服务程序时,如果 I2C 总线空闲 (即 P 位置 1) ,用户可以通过产生一个启动 条件继续通信. 当总线冲突发生在启动,重复启动,停止或应答条件期 间,将中止这些条件,释放 SDA 和 SCL 线,清零 I2CCON 寄存器中对应的控制位.当用户执行总线冲突 中断服务程序时, 如果 I2C 总线空闲,用户可以通过产 生一个启动条件继续通信. 主器件继续监视 SDA 和 SCL 引脚, 当产生停止条件时, 将 MI2CIF 位置 1. 写 I2CTRN 寄存器的操作将从第一个数据位开始发送数 据,而与总线冲突发生时发送器的状态无关. 在多主器件环境中,在检测到启动和停止条件时产生中 断,能够确定总线何时空闲.当 I2CSTAT 中 P 位置 1 时,器件可以控制 I2C 总线;否则,总线空闲,且 S 和 P 位清零.
    14.12.3
    2
    波特率发生器
    在 I C 主模式下,波特率发生器的重载值位于 I2CBRG 寄存器中.波特率发生器装入该值后,发生器递减计数 到 0,然后停止,直到发生再次装入.如果发生时钟仲 裁, 例如 SCL 引脚采样为高电平时, 将重载波特率发生 器. 根据 I2C 标准,FSCK 可以是 100 kHz 或 400 kHz .然 而, 用户可以指定任何波特率, 最高到 1 MHz. I2CBRG 的值不能是 0 或 1.
    公式 14-1:
    I2CBRG =
    串行时钟速率
    FCY ( FSCL – FCY 1,111,111
    )
    – 1
    14.13 CPU 休眠和空闲模式期间 I2C 模块的 工作
    14.13.1 CPU 休眠模式期间 I2C 的工作
    当器件进入休眠模式时,模块的全部时钟源都将关闭并 保持在逻辑 0.如果休眠发生在发送过程中,且时钟停 止时状态机部分进入发送,发送将中止.类似地,如果 休眠出现在接收过程中,接收也将中止.
    14.12.4
    时钟仲裁
    在任何接收,发送或重复启动 / 停止条件期间,当主器 件释放了 SCL 引脚 (允许 SCL 悬空为高电平) ,就会 出现时钟仲裁. 当释放 SCL 引脚时, 波特率发生器暂停 计数, 直到 SCL 引脚被实际采样到高电平为止. SCL 当 引 脚 被 采 样 到 高 电 平 时,波 特 率 发 生 器 重 新 装 载 I2CBRG 的内容并开始计数.在外部器件使时钟保持为 低电平时, 这可以始终保证 SCL 高电平时间至少为一个 BRG 计满返回计数周期.
    14.13.2
    CPU 空闲模式期间 I2C 的工作
    对于 I2C, I2CSIDL 位选择 CPU 空闲时模块是停止还 是继续工作.如果 I2CSIDL = 0,模块将继续工作;如 果 I2CSIDL = 1,模块将停止工作.
    14.12.5
    多主器件通信,总线冲突和总线仲裁
    多主器件工作的支持,是通过总线仲裁来实现的.当主 器件在 SDA 引脚上输出地址 / 数据位时, 第一个主器件 使 SDA 悬空为高电平从而输出一个 "1" ,而另一个主 器件要输出 "0" ,就会发生仲裁.当 SCL 引脚悬空为 高时,数据应该是稳定的.如果 SDA 上预期数据是 "1" ,但从 SDA 引脚采样到的数据是 "0" ,那么就发 生了总线冲突. 主器件将置 1 MI2CIF 脉冲,并把 I2C 端 口的主器件部分复位到空闲状态.
    DS70139E_CN 第98 页
    2007 Microchip Technology Inc.
    表 14-2:
    SFR 名称 I2CRCV I2CTRN I2CBRG I2CCON I2CSTAT I2CADD 注: 地址 0200 0202 0204 0206 0208 020A
    I2C 寄存器映射
    Bit 15 - - - I2CEN ACKSTAT - Bit 14 - - - - TRSTAT - Bit 13 - - - - - Bit 12 - - - - - Bit 11 - - - - - Bit 10 - - - A10M BCL - Bit 9 - - - DISSLW GCSTAT SMEN ADD10 GCEN IWCOL STREN I2COV Bit 8 - - ACKDT D_A 地址寄存器 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位状态 0000 0000 0000 0000 0000 0000 1111 1111 0000 0000 0000 0000 RCEN S PEN R_W RSEN RBF SEN TBF 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 接收寄存器 发送寄存器 波特率发生器 ACKEN P
    2007 Microchip Technology Inc. DS70139E_CN第 99 页
    I2CSIDL SCLREL IPMIEN
    有关寄存器位域的描述请参见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    dsPIC30F2011/2012/3012/3013
    dsPIC30F2011/2012/3012/3013
    注:
    DS70139E_CN 第100 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    15.0 通用异步收发器 (UART)模块
    15.1 UART 模块概述
    注: 本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用. 有关 CPU, 外 设,寄 存 器 说 明 和 一 般 器 件 功 能 的 更 多 信 息,请 参 见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    UART 模块的主要特性是: 全双工 8 位或 9 位数据通信 偶校验,奇校验或无奇偶校验选项 (对于 8 位数 据) 一个或两个停止位 完全集成的波特率发生器,具有 16 位预分频器 在 30 MHz 指令速率时,波特率范围为 38 bps 到 1.875 Mbps 4 字深度发送数据缓冲器 4 字深度接收数据缓冲器 奇偶校验错误,帧错误和缓冲器溢出错误检测 支持仅在地址检测 (第 9 位 = 1)时产生中断 独立的发送和接收中断 用于支持诊断的环回模式 UART1 的备用接收和发送引脚
    本 章 介 绍 了 通 用 异 步 接 收 器 / 发 送 器 通 信 模 块. dsPIC30F2011/2012/3012 处理器有一个 UART 模块 (UART1) dsPIC30F3013 处理器有两个 UART 模块 . (UART1 和 UART2) .
    图 15-1:
    UART 发送器框图
    内部数据总线 写 写
    控制和状态位
    UTX8
    UxTXREG 低字节
    发送控制 – 控制 TSR – 控制缓冲器 – 产生标志 – 产生中断
    装载 TSR UTXBRK 数据 UxTX 发送移位寄存器 (UXTSR) UxTXIF
    0 (启动) 1 (停止)
    奇偶校验位 奇偶校验位 发生器 16 分频器 16 倍频波特率时钟 来自波特率 发生器
    控制 信号
    注:
    x = 1 或 2.
    2007 Microchip Technology Inc.
    DS70139E_CN 第101 页
    dsPIC30F2011/2012/3012/3013
    图 15-2: UART 接收器框图
    内部数据总线 16





    UxMODE
    UxSTA
    URX8 UxRXREG 低字节 接收缓冲器控制 – 产生标志 – 产生中断 – 移位数据字符
    LPBACK 来自 UxTX 1 UxRX 0 启动位检测 奇偶校验 停止位检测 产生移位时钟 唤醒逻辑
    8-9 装载 RSR 至缓冲器 接收移位寄存器 (UxRSR) PERR FERR 控制 信号
    16 分频器
    来自波特率发生器的 16 倍频波特率时钟 UxRXIF
    DS70139E_CN 第102 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    15.2
    15.2.1
    使能和设置 UART
    使能 UART
    15.3
    15.3.1
    1.
    发送数据
    在 8 位数据模式下发送
    UART 模块的使能,是通过置 1 UxMODE 寄存器 (其 中,x = 1 或 2) 中的 UARTEN 位来进行的. 一旦使能, UxTX 和 UxRX 引脚被分别配置为输出和输入,这改写 了相应 I/O 端口引脚的 TRIS 和 LAT 寄存器位的设置. 在没有传输发生时, UxTX 引脚状态为逻辑 1.
    为了发送 8 位数据,必须执行下列步骤: 设置 UART: 首先,必须选择数据长度,奇偶校验和停止位的 位数.然后,在 UxMODE 和 UxSTA 寄存器中设 置发送和接收中断允许位以及优先级位.另外, 必须把适当的波特率值写入 UxBRG 寄存器. 通过置 1 UARTEN 位 (UxMODE) ,使能 UART. 置 1 UTXEN 位 (UxSTA) 从而使能发送. , 向 UxTXREG 的低字节写入要发送的字节.它将 被立即传输到发送移位寄存器 (UxTSR) ,在波 特率时钟的下一个上升沿期间,串行位流将开始 移出移位寄存器.另一种方法是,在 UTXEN = 0 时写入数据字节,而后,用户可以把 UTXEN 置 1.这将使串行位流立即开始,因为波特率时钟 将从清零状态启动. 将产生发送中断, 这取决于中断控制位UTXISEL (UxSTA)的值.
    15.2.2
    禁止 UART
    通过清零UxMODE寄存器中的UARTEN位, 禁止UART 模块.这是任何复位后的默认状态.如果 UART 被禁 止,那么所有的 I/O 引脚均用作端口引脚,受相应端口 引脚的 LAT 和 TRIS 位的控制. 禁止 UART 模块将缓冲器复位为空状态. 缓冲器中的所 有数据字符都将丢失,同时波特率计数器也将复位. 当 UART 模块被禁止时,所有与之相关的错误和状态标 志都将复位. URXDA, OERR, FERR, PERR, UTXEN, UTXBRK 和 UTXBF 位被清零,而 RIDLE 和 TRMT 被置 1.其他的控制位,包括 ADDEN, URXISEL 和 UTXISEL, 以及UxMODE和UxBRG寄存器则不受影响. 当 UART 处于工作状态时,对 UARTEN 位清零将中止 所有等待的发送和接收,同时还将象上面定义的那样将 模块复位.再次使能 UART 将使用同样的配置重新启动 UART.
    2. 3. 4.
    5.
    15.3.2
    在 9 位数据模式下发送
    15.2.3
    备用 I/O
    9 位数据发送涉及的步骤,类似于 8 位数据发送,但是 必须将一个 16 位数据字 (其中高 7 位始终为 0)写入 UxTXREG 寄存器.
    通过置 1 ALTIO 位 (UxMODE)可使能备用 I/O 功能.如果 ALTIO = 1, UART 模块将使用 UxATX 和 UxARX 引脚 (分别为备用发送引脚和备用接收引脚) 而不是 UxTX 和 UxRX 引脚. 如果 ALTIO = 0, UART 模 块将使用 UxTX 和 UxRX 引脚.
    15.3.3
    发送缓冲器 (UXTXB)
    发送缓冲器为 9 位宽, 4 字符深.把发送移位寄存器 (UxTSR)算上的话,用户实际上有一个 5 级深度的 FIFO(先进先出)缓冲器.UTXBF 位(UxSTA)表 明发送缓冲器是否已满. 如果用户试图写已满的缓冲器,新数据将不会被 FIFO 接收,缓冲器内也不会发生数据移位.这确保了能够从 缓冲器溢出条件中恢复. FIFO 在任何器件复位时复位,但当器件进入节能模式 或从节能模式唤醒时, FIFO 不受影响.
    15.2.4
    设置数据,奇偶校验以及停止位选择
    UxMODE 寄存器中的控制位 PDSEL,用来选择 发送时使用的数据长度和奇偶校验.数据长度可以是 8 位,具有偶校验位或奇校验位或没有奇偶校验位,数据 长度也可以是没有奇偶校验位的 9 位. STSEL位决定在数据发送期间, 是使用一个还是两个停 止位. UART 的默认 (上电)设置是 8 位,无奇偶校验以及 1 个停止位 (通常表示为 8, N, 1) .
    2007 Microchip Technology Inc.
    DS70139E_CN 第103 页
    dsPIC30F2011/2012/3012/3013
    15.3.4 发送中断 15.4.2 接收缓冲器 (UXRXB)
    发送中断标志 (U1TXIF 或 U2TXIF)位于相应的中断 标志寄存器中. 发送器产生一个边沿来置 1 UxTXIF 位.产生中断的条 件取决于 UTXISEL 控制位: a) 如果 UTXISEL = 0,当从发送缓冲器传输一个字 到发送移位寄存器 (UxTSR)时,将产生中断. 这意味着,发送缓冲器中至少有一个空字. 如果 UTXISEL = 1,当从发送缓冲器传输一个字 到发送移位寄存器(UxTSR)且发送缓冲器为空 时,将产生中断. 接收缓冲器是 4 字深缓冲器.加上接收移位寄存器 (UxRSR) 用户实际上有一个 5 字深的 FIFO 缓冲器. , URXDA (UxSTA) = 1 表明接收缓冲器中还有数 据. URXDA = 0 意味着缓冲器为空. 如果用户试图读空 缓冲器,读取的是缓冲器中的原有值,在 FIFO 中不会 产生数据移位. 任何器件复位时, FIFO 都将复位.当器件进入节能模 式或从节能模式中唤醒时,它不受影响.
    b)
    15.4.3
    接收中断
    工作期间可以在这两种中断方式之间切换,有时这提供 了更大的灵活性.
    15.3.5
    发送间隔字符
    可以 从相 应的中 断标 志寄存 器中 读取接 收中 断标志 (U1RXIF 或 U2RXIF) .中断标志由接收器产生的边沿 来置1. 置1接收中断标志的条件, 取决于URXISEL (UxSTA)控制位的设置. a) 如果 URXISEL = 00 或 01,每当一个数据 字从接收移位寄存器 (UxRSR)送往接收缓冲 器后就会产生中断.接收缓冲器中可以有一个或 多个字符. 如果 URXISEL = 10,当一个字从接收移位 寄存器(UxRSR)送往接收缓冲器,使得缓冲器 中有 3 个字符时,就会产生中断. 如果 URXISEL = 11, 当一个字从接收移位 寄存器 (UxRSR)送往接收缓冲器,使得缓冲 器中有 4 个字符(即缓冲器满)时,就会产生中 断.
    把 UTXBRK 位 (UxSTA)置 1,将使 UxTX 线被 驱动为逻辑 0.UTXBRK 位改写了全部的发送活动.从 而,通常用户应该在置 1 UTXBRK 之前等待发送器空 闲. 为了发送间隔字符, 必须由软件置 1 UTXBRK 位, 而且 保持该位置 1 至少 13 个波特率时钟周期.然后通过软 件将 UTXBRK位清零, 产生停止位. 在再次装载UxTXB 或开始其他发送活动前,用户必须等待至少一或两个波 特率时钟周期,以便保证产生有效的停止位.发送间隔 字符不会产生发送中断.
    b)
    c)
    15.4
    15.4.1
    1. 2. 3.
    接收数据
    在 8 位或 9 位数据模式下接收
    工作期间可以在这两种中断方式之间切换,尽管正常工 作期间这样做并不可取.
    在接收 8 位或 9 位数据时,必须执行下列步骤: 设置 UART (见第 15.3.1 节 "在 8 位数据模式 下发送" . ) 使能 UART (见第 15.3.1 节 "在 8 位数据模式 下发送" . ) 当接收到一个或多个数据字时,将产生接收中 断,这取决于接收中断的设置 (由 URXISEL 位 (UxSTA)指定) . 读 OERR 位, 判断是否产生溢出错误. OERR 位 必须在软件中复位. 从 UxRXREG 中读取接收数据. UxRXREG 的 对 读操作, 将使下一个字移动到接收 FIFO 的顶端, 且将更新 PERR 和 FERR 值.
    15.5
    15.5.1
    接收错误处理
    接收缓冲器溢出错误 (OERR 位)
    如果满足下列全部条件,OERR 位(UxSTA)将置 1: a) b) c) 接收缓冲器满. 接收移位寄存器满,但不能把字符送往接收缓冲 器. 检测到 UxRSR 中字符的停止位, 这表明 UxRSR 需要把字符送往缓冲器.
    4. 5.
    一旦 OERR 置 1,就不会有数据移入 UxRSR (除非在 软件中将 OERR 位清零,或者发生了复位) .存放在 UxRSR 和 UxRXREG 中的数据继续有效.
    DS70139E_CN 第104 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    15.5.2 帧错误 (FERR)
    15.6
    地址检测模式
    如果检测到 0 而不是停止位, FERR 位 则 (UxSTA) 置 1. 如果选用两个停止位, 则两个停止位都必须是 1, 否则将置 1 FERR. FERR 位是只读的,它将和收到的 数据一起被送入缓冲器.任何复位时都将清零 FERR 位.
    15.5.3
    奇偶校验错误 (PERR)
    置 1 ADDEN 位(UxSTA) 来使能这个特殊的模式, 在此模式下,如果第 9 位 (URX8)值为 1,则表明接 收到的字是一个地址,而不是数据.此模式仅适用于 9 位数据通信.在此模式下, URXISEL 控制位对中断产 生没有任何影响,因为中断 (如果允许的话)仅在接收 到的字的第 9 位为 1 时产生.
    如 果 接 收 到 字 的 奇 偶 校 验 错 误 的 话, PERR 位 (UxSTA)将置 1.此错误位仅在选取了奇偶校验模 式(奇校验或偶校验)时适用.PERR 位是只读的,它 将和收到的数据字节一起被送入缓冲器.任何复位时都 将清零 FERR 位.
    15.7
    环回模式
    置 1 LPBACK 位来使能这个特殊的模式,在该模式下 UxTX 引脚从内部连接到 UxRX 引脚.当配置为环回模 式时, UxRX 引脚与内部 UART 接收逻辑断开.但是, UxTX 引脚仍然正常工作. 要选择该模式: a) b) c) 将 UART 配置为所需的工作模式. 设置 LPBACK = 1,使能环回模式. 使能发送,如同第 15.3 节 "发送数据"中定义 的那样.
    15.5.4
    空闲状态
    当接收器处于活动状态(即,在最初检测到启动位与停 止位完成之间) RIDLE 位 (UxSTA)为 0.在停 , 止位完成与检测到下一个启动位之间时, RIDLE 位为 1,表明 UART 空闲.
    15.5.5
    接收间隔字符
    接收器会根据在 PDSEL (UxMODE)和 STSEL (UxMODE)位中设置的值,计数并等待一定的位 时间数. 如果间隔超过 13 个位时间,则在 PDSEL 和 STSEL 指 定的位时间数之后,认为接收完成. URXDA 位置 1, FERR 置 1,接收 FIFO 中装载零, 同时产生中断(若允 许中断)且 RIDLE 位置 1. 如果模块收到长间隔信号,同时接收器检测到了启动 位,数据位和无效的停止位 (这将把 FERR 置 1) ,那 么接收器在找寻下一个启动位之前,必须等待有效停止 位出现.接收器不能将线上的间隔条件看作是下一个启 动位. 间隔字符被视为一个全 0 的字符,且 FERR 位置 1.间 隔字符将被装载到缓冲器中.除非接收到停止位,否则 不会再进行接收.注意,当停止位还没有接收到时, RIDLE 将置 1.
    15.8
    波特率发生器
    UART 有一个 16 位波特率发生器,以便在波特率发生 时获得最大的灵活性.波特率发生器寄存器(UxBRG) 是可读写的.波特率的计算如下: BRG = UxBRG 寄存器中的 16 位值 (0 到 65535) FCY = 指令时钟速度 (1/TCY) 波特率由公式 15-1 给出.
    公式 15-1:
    波特率
    波特率 = FCY / (16*(BRG+1)) 从而,可能的最大波特率是: , FCY /16 (若 BRG = 0) 则可能的最小波特率是: FCY / (16* 65536). 对于在 30 MIPS 下工作的 16 位波特率发生器,能够达 到的最小波特率是 28.5 bps.
    2007 Microchip Technology Inc.
    DS70139E_CN 第105 页
    dsPIC30F2011/2012/3012/3013
    15.9 自动波特率支持
    15.10.2 UART 在 CPU 空闲模式下的工作
    为了让系统确定接收字符的波特率,可选择将输入连接 到所选择的捕捉输入通道 (UART1 连接到 IC1, UART2 连接到 IC2).为使能该模式,用户必须对输入捕捉模 块进行设置,以检测启动位的上升沿和下降沿. 对于 UART,USIDL 位选择当器件进入空闲模式时,模 块是停止还是继续工作.如果 USIDL = 0,模块将在空 闲模式期间继续工作.如果 USIDL = 1,模块将在空闲 模式下停止工作.
    15.10 UART 在 CPU 休眠和空闲模式下的 工作
    15.10.1 UART 在 CPU 休眠模式下的工作
    当器件进入休眠模式时,模块的所有时钟源都将关闭, 保持在逻辑 0 状态.如果在发送进行期间进入休眠模式 的话,发送将中止.并且 UxTX 引脚被驱动为逻辑 1. 类似地,如果接收进行期间进入休眠模式,接收将中 止.休眠模式不影响 UxSTA, UxMODE,发送和接收 寄存器和缓冲器以及 UxBRG 寄存器. 器件进入休眠模式前,如果 WAKE 位(UxMODE) 置 1,那么 UxRX 引脚上的下降沿将产生接收中断.接 收中断选择模式位(URXISEL)对该功能没有影响.如 果允许接收中断,那么将把器件从休眠中唤醒.为了产 生唤醒中断, UARTEN 位必须置 1.
    DS70139E_CN 第106 页
    2007 Microchip Technology Inc.
    表 15-1:
    SFR 名称 U1MODE U1STA U1TXREG U1RXREG U1BRG 图注: 地址 020C 020E 0210 0212 0214
    dsPIC30F2011/2012/3012/3013 UART1 寄存器映射
    Bit 15 UARTEN UTXISEL - - Bit 14 - - - - Bit 13 USIDL - - - Bit 12 - - - - Bit 11 - - - Bit 10 ALTIO Bit 9 - UTXBF - - Bit 8 - TRMT UTX8 URX8 波特率发生器预分频器 Bit 7 WAKE Bit 6 LPBACK Bit 5 ABAUD Bit 4 - RIDLE 发送寄存器 接收寄存器 Bit 3 - PERR Bit 2 Bit 1 Bit 0 复位状态 PDSEL1 PDSEL0 STSEL 0000 0000 0000 0000 FERR OERR URXDA 0000 0001 0001 0000 0000 000u uuuu uuuu 0000 0000 0000 0000 0000 0000 0000 0000
    2007 Microchip Technology Inc. DS70139E_CN 第107 页
    UTXBRK UTXEN - -
    URXISEL1 URXISEL0 ADDEN
    u = 未初始化的位
    表 15-2:
    SFR 名称 U2MODE U2STA U2TXREG U2RXREG U2BRG 图注: 注 1: 2: 地址 0216 0218 021A 021C 021E
    dsPIC30F3013 UART2 寄存器映射 (1)
    Bit 15 UARTEN UTXISEL - - Bit 14 - - - - Bit 13 USIDL - - - Bit 12 - - - - Bit 11 - - - Bit 10 ALTIO Bit 9 - UTXBF - - Bit 8 - TRMT UTX8 URX8 波特率发生器预分频器 Bit 7 WAKE Bit 6 LPBACK Bit 5 ABAUD Bit 4 - RIDLE 发送寄存器 接收寄存器 Bit 3 - PERR Bit 2 Bit 1 Bit 0 复位状态 PDSEL1 PDSEL0 FERR OERR STSEL 0000 0000 0000 0000 URXDA 0000 0001 0001 0000 0000 000u uuuu uuuu 0000 0000 0000 0000 0000 0000 0000 0000
    UTXBRK UTXEN - -
    URXISEL1 URXISEL0 ADDEN
    dsPIC30F2011/2012/3012/3013
    u = 未初始化的位 dsPIC30F2011/2012/3012 中没有 UART2. 有关寄存器位域的描述,请参见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    dsPIC30F2011/2012/3012/3013
    注:
    DS70139E_CN 第108 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    16.0 12 位模数转换器 (ADC)模块
    ADC 模块具有 6 个 16 位寄存器: A/D 控制寄存器 1 (ADCON1) A/D 控制寄存器 2 (ADCON2) A/D 控制寄存器 3 (ADCON3) A/D 输入选择寄存器 (ADCHS) A/D 端口配置寄存器 (ADPCFG) A/D 输入扫描选择寄存器 (ADCSSL)
    注:本数据手册总结了 dsPIC30F 系列器件的功能,但是不 应把本手册当作无所不包的参考手册来使用.有关CPU, 外 设,寄 存 器 说 明 和 一 般 器 件 功 能 的 更 多 信 息,请 参 见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    12位模数转换器可将模拟输入信号转换为12位数字值. 该 模 块 基 于 逐 次 逼 近 寄 存 器 (Successive Approximation Register, SAR)结构,可实现最大为 200 ksps 的采样速率. ADC 模块拥有最多 10 个模拟 输入通道,这些模拟输入通过多路开关连接到 1 个采样 / 保持放大器.采样 / 保持电路的输出输入到转换器, 经 转换器转换后得到数字结果. 可通过软件选- 模拟参考 择 电压为器件供电电压(AVDD/AVSS)或(VREF+/VREF-) 引脚上的电压. ADC 具有一个独特的功能:当选择 RC 振荡器时,即使器件处于休眠模式, ADC 仍能工作.
    ADCON1, ADCON2 和 ADCON3 寄存器控制 ADC 的 工作. ADCHS 寄存器选择要转换的输入通道. ADPCFG 寄存器用于将端口引脚配置为模拟输入或数 字 I/O. ADCSSL 寄存器用于选择要扫描的输入通道. 注: 当 ADON = 1 时,不应对 SSRC, ASAM,SMPI,BUFM 和 ALTS 位以 及 ADCON3 和 ADCSSL 寄存器进行写入 操作,否则将导致不确定的结果.
    图 16-1 给出了 12 位 ADC 模块的框图.
    图 16-1:
    AVDD/VREF+ AVSS/VREF-
    12 位 ADC 功能框图
    AN0 AN1 AN2 AN3 AN4 AN5 AN6 AN7 AN8 AN9
    0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 S/H CH0 采样 12 位 SAR DAC
    比较器
    转换逻辑
    16 字 12 位 双端口 缓冲器
    数据格式
    采样 / 顺序 控制
    输入 开关
    输入 MUX 控制
    2007 Microchip Technology Inc.
    DS70139E_CN 第109 页
    总线接口
    dsPIC30F2011/2012/3012/3013
    16.1 A/D 结果缓冲器 16.3 选择转换顺序
    模块包含一块称为 ADCBUF0 至 ADCBUFF 的 16 字双 口只读缓冲区,对 A/D 转换结果进行缓冲.RAM 为 12 位宽, 但其存储的数据可为 4 种不同格式的 16 位数据. 用 户 软 件 不 能 对 16 个 A/D 转 换 结 果 缓 冲 寄 存 器 ADCBUF0 至 ADCBUFF 的内容进行写入操作. 几组控制位可用来对A/D将输入连接至采样/保持通道, 转换通道,写入缓冲存储区和产生中断的过程进行选择 控制. 该过程将由采样时钟来控制. SMPI 位用于选择在中断发生前进行采集 / 转换的次数. 该数值可为每次中断采样 1 至 16 次. 当置 1 时, BUFM 位将 16 字结果缓冲器分为两个 8 字 缓冲器.每个中断事件将交替写入这两个 8 字缓冲器. BUFM 位的使用取决于中断之后有多少时间将数据从缓 冲器内移出. 如果处理器可在对一个通道进行采样和转换的时间内快 速卸空一个满的缓冲器, BUFM 位可为 0 且每次中断 则 可进行最多 16 次转换(对应于 16 个输入通道) 处理 . 器在一次采样和转换的时间内移出 16 个转换结果. 如果在采样和转换时间内处理器不能完全卸空一个满的 缓冲器, BUFM 位应为 1.例如,如果 SMPI (ADCON2) = 0111,则先将 8 个转换结果装入 其中一个 8 字缓冲器,此后将产生中断.再将另外的 8 个转换结果装入另一个 8 字缓冲器.处理器将利用相邻 中断之间的全部时间来移出 8 个转换结果. ALTS 位用来在采样过程中轮换所选的输入. 输入多 路开关具有两组采样输入:MUX A 和 MUX B.如果 ALTS 位为 0, 只选择 MUX A 输入进行采样.如果 ALTS 位为 1 且 SMPI = 0000,在第一个采样 / 转换过 程将选择 MUX A 输入通道, 而在下一个采样 / 转换过程 将选择 MUX B 输入通道. (ADCON2) 允许对多路开关输入 MUX CSCNA 位 A 组中选定数量的模拟输入进行顺序扫描.ADCSSL 寄 存器选择要扫描的输入. 如果 ADCSSL 寄存器中的某 个位为 1,则将选择相应的输入. 将在每次中断之后, 始终按照输入编号从低至高的顺序对输入进行扫描.如 果选择的输入数目大于每次中断进行的采样数,则编号 高于采样数的输入将不会被使用.
    16.2
    转换操作
    当 ADC 模块配置完毕后,置 1 SAMP 位将启动采样操 作.可编程位,定时器超时和外部事件等触发源将终止 采集并启动转换. 当 A/D 转换完成时,结果将被装入 ADCBUF0 至 ADCBUFF,且在 SMPI 位指定的采样数 之后 DONE 位和 A/D 中断标志位将被置 1. 如第 16.3 节 "选择转换顺序"所述ADC模块可被配置为以不同的频 率中断. 进行 A/D 转换时,应遵守以下步骤: 1. 配置 ADC 模块: 配置模拟引脚,参考电压和数字 I/O 选择 A/D 输入通道 选择 A/D 转换时钟 选择 A/D 转换触发源 启动 ADC 模块 配置 A/D 中断 (如果需要) : 清零 ADIF 位 选择 A/D 中断优先级 启动采样 等待所需的采集时间 触发采样结束,启动转换 等待 A/D 转换完成,可通过以下方式实现: 等待 A/D 中断 等待 DONE 位被置 1 读 A/D 结果缓冲器;清零 ADIF (如果需要)
    2.
    3. 4. 5. 6.
    7.
    DS70139E_CN 第110 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    16.4 转换触发的编程设定
    通过置 1 ADRC 位可选择内部 RC 振荡器. 为使 A/D 转换正确,必须选择合适的 A/D 转换时钟 (TAD)以确保最小 334 ns (当 VDD = 5V 时)的 TAD 时间.其他工作条件下的最小 TAD,请参见第 20.0 节 "电气特性" . 例 16-1 中显示了 ADCS 位的计算示例, 其中假定 器件工作速度为 30 MIPS. 转换触发将终止数据采集并开始进行要求的转换. SSRC 位用于选择转换触发源. SSRC 位提供最 多 4 个备用转换触发源. 当 SSRC = 000 时,转换触发由软件进行控制. 清零 SAMP 位将导致触发转换. 当 SSRC = 111 (自动启动模式)时,转换触发 由 A/D 时钟进行控制.SAMC 位选择采样起始和转换起 始之间的 A/D 时钟数. 这将提供最快的多通道转换速 率. SAMC 必须始终大于等于 1 个时钟周期. 其他触发源可能来自定时器模块或外部中断.
    例 16-1:
    最小
    ADC 转换时钟和采样速率计算
    TAD = 334 ns TCY = 33 ns (30 MIPS) TAD –1 TCY 334 ns =2 –1 33.33 ns = 19.04
    16.5
    中止转换
    ADCS = 2
    转换过程中清零ADON位将中止当前的转换并停止采样 过程, 直到下一个采样触发为止.不会用部分完成的 A/ D 采样转换来更新 ADCBUF. 即, ADCBUF 仍然保持 上一次转换完成后的值 (即上一次写入该缓冲器的 值) . 如果清零 ADON 位与自动启动同时发生, 则清零 ADON 位具有更高的优先级,且不会启动新的转换. A/D 转换中止后,在置 1 SAMP 位启动下一次采样之前 需等待 2 个 TAD 的时间.
    因此, 设置 ADCS = 19 实际 TAD = TCY (ADCS + 1) 2 33.33 ns = (19 + 1) 2 = 334 ns 如果 SSRC = 111 且 SAMC = 00001 因为, 采样时间 = 采集时间 + 转换时间 = 1 TAD + 14 TAD = 15 x 334 ns = 1 (15 x 334 ns) = ~200 kHz
    16.6
    选择 ADC 转换时钟
    ADC 转换需要 14 个 TAD. 通过软件方式使用 6 位计数 器可选择 ADC 转换的时钟源.TAD 存在 64 种可能的选 择.
    公式 16-1:
    ADC 转换时钟
    TAD = TCY * (0.5*(ADCS + 1))
    因此, 采样速率
    2007 Microchip Technology Inc.
    DS70139E_CN 第111 页
    dsPIC30F2011/2012/3012/3013
    16.7 ADC 转换速度
    dsPIC30F 的 12 位 ADC 规范允许最大 200 ksps 的采样 速率. 16-1 汇总了 dsPIC30F 12 位 ADC 的转换速度 表 及其要求的工作条件. 图 16-2 给出了转换速率高于 200 ksps 时的推荐电路. 以 dsPIC30F2011 为例.
    表 16-1:
    12 位 ADC 扩展转换速率
    dsPIC30F 12 位 ADC 转换速率 TAD 最小值 334 ns 采样时间 最小值 1 TAD Rs 最大值 2.5 k
    速度 最大 200 ksps(1)
    VDD 4.5V 至 5.5V
    温度 -40°C 至 +85°C
    通道配置
    VREF- VREF+
    ANx
    CHX S/H ADC
    最大 100 ksps
    668 ns
    1 TAD
    2.5 k
    3.0V 至 5.5V
    -40°C 至 +85°C
    VREF- VREF+ 或 或 AVSS AVDD CHX S/H ANx 或 VREFADC
    ANx

    1: 为确保正常工作,必须使用外部 VREF- 和 VREF+ 引脚.推荐电路请参见图 16-2.
    图 16-2:
    ADC 参考电压原理图
    VDD R2 10 C2 0.1 F C1 0.01F R1 10 VDD
    见注 1 :
    VDD C8 1 F VDD C7 0.1 F VDD C6 0.01 F
    注 1 :确保在每个 VDD 引脚上连接恰当的旁路电容.
    8 9 VDD 11 12 13 14
    1 21 2 20 19 3 4 dsPIC30F2011 18 VDD VSS 6 VSS 7 15
    VREF27 26 AVDD VSS 23 22
    VDD AVDD C5 1 F AVDD C4 0.1 F AVDD C3 0.01 F
    VDD
    DS70139E_CN 第112 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    以下配置指导给出了转换速率高于100 ksps时要求的设 置值. 下图给出了 ADC 运行在 200 ksps 时的时序图.按照上 述指南选择的 TAD 允许转换速度达到 200 ksps.例 161 给出了代码示例.
    16.7.1
    200 KSPS 时的配置指南
    为获得 200 ksps 的转换速率,需要进行如下配置. 符合表 16-1 中提供的条件. 按照图 16-2 所示的推荐电路连接外部 VREF+ 和 VREF- 引脚. 设置 ADCON1 寄存器的 SSRC = 111 使能 自动转换选项. 将 ADCON1 寄存器的 ASAM 控制位置 1 使能自 动采样. 写 ADCON2 寄存器的 SMPI 控制位来设置 两次中断之间所需的转换次数. 通过写 ADCON3 寄存器的 ADCS 控制位来将 ADC 时钟周期配置为: 1 (14 + 1) x 200,000 = 334 ns
    16.8
    A/D 采集要求
    图 16-3 给出了 12 位 ADC 的模拟输入模型. A/D 的总 采样时间是内部放大器稳定时间和保持电容充电时间的 函数. 为了使 ADC 达到规定的精度,必须让充电保持电容 (CHOLD)充分充电至模拟输入引脚上的电平. 信号源 ,内部走线等效阻抗 (RIC)和内部采样开 阻抗 (RS) 关阻抗(RSS)共同地直接影响电容 CHOLD 充电所需的 时间. 所以,模拟信号源的总阻抗必须足够小,以便在 选择的采样时间内对保持电容充分充电.为了把引脚泄 漏电流对 ADC 精度的影响降到最低,建议信号源阻抗 RS 的最大值为 2.5 k. 选择 (改变)了模拟输入通道 后,采样工作必须在启动转换前完成.在每次采样操作 前,内部保持电容将处于放电状态.
    通过写 SAMC = 00001 来将采样时间配置 为 1 TAD.
    图 16-3:
    12 位 A/D 转换器模拟输入模型
    VDD ANx VT = 0.6V RIC ≤ 250 采样 开关 RSS CHOLD = DAC 电容 = 18 pF VSS 图注: CPIN = 输入电容 = 电压阈值 VT I leakage = 引脚上由各结点 引起的泄漏电流 = 内部走线等效阻抗 RIC = 采样开关阻抗 RSS = 采样 / 保持电容 (来自 DAC) CHOLD RSS ≤ 3 k
    Rs VA
    CPIN
    VT = 0.6V
    I leakage ± 500 nA
    注: CPIN 值取决于器件封装,未经测试.如果 Rs ≤ 2.5 k Ω,可忽略 CPIN 的影响.
    2007 Microchip Technology Inc.
    DS70139E_CN 第113 页
    dsPIC30F2011/2012/3012/3013
    16.9 模块掉电模式
    模块具有 2 种内部功耗模式. 当 ADON 位为 1 时, 模块处于工作模式, 并处于完全供 电和工作状态. 当 ADON 为 0 时,模块处于关断模式. 电路的数字和 模拟部分将被禁止以最大程度地降低电流消耗. 为从关断模式返回工作模式,用户必须等待 ADC 电路 进入稳定状态. SLEEP 指令,这将消除转换过程中所有的数字开关噪 声.当转换操作完成之后,CONV 位将清零且转换结果 将被装入 ADCBUF 寄存器. 如果允许 A/D 中断, 则器件将从休眠状态唤醒.如果 A/ D 中断被禁止, ADC 模块将被关闭,尽管 ADON 位仍 然保持置 1 状态.
    16.10.2
    CPU 空闲模式下的 A/D 操作
    16.10 CPU 休眠和空闲模式下的 A/D 操作
    16.10.1 CPU 休眠模式下的 A/D 操作
    当器件进入休眠模式时,模块的所有时钟源将被关闭且 停留在逻辑 0 状态. 如果在转换过程中进入休眠模式,转换将中止.当器件 退出休眠模式时,转换器将不会继续进行部分完成的转 换. 器件进入或退出休眠模式将不会对寄存器内容造成影 响. 如果设置 A/D 的时钟源为 RC (ADRC = 1) ,则 ADC 模块可在休眠模式下进行工作. 当选择 RC 时钟源时, ADC在启动转换之前将等待一个指令周期.其间可执行
    ADSIDL位选择ADC模块在空闲模式下是停止工作还是 继续工作.如果 ADSIDL = 0, 当器件进入空闲模式时, 该模块将继续工作. 如果 ADSIDL = 1,该模块将停止 工作.
    16.11 复位的影响
    器件复位强制所有寄存器为复位状态. 这将迫使 ADC 模 块 关 闭 并 中 止 任 何 正 在 进 行 的 转 换 和 采 样 过 程. ADCBUF 寄存器中的值将不会被修改.上电复位后, A/D 结果寄存器将包含未知数据.
    16.12 输出格式
    A/D 结果为 12 位宽, 数据缓冲器 RAM 也是 12 位宽. 12 位数据可以四种不同格式之一读出.FORM 位 用于选择格式.每一种输出格式将数据转换为数据总线 上的 16 位结果.
    图 16-4:
    RAM 内容: 读至总线:
    A/D 输出数据格式
    d11 d10 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00
    有符号小数
    d11 d10 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00
    0
    0
    0
    0
    小数
    d11 d10 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00
    0
    0
    0
    0
    有符号整数
    d11 d11 d11 d11 d11 d10 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00
    整数
    0
    0
    0
    0
    d11 d10 d09 d08 d07 d06 d05 d04 d03 d02 d01 d00
    DS70139E_CN 第114 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    16.13 配置模拟端口引脚
    ADPCFG 和 TRIS 寄存器用于控制 A/D 端口引脚的操 作.当端口引脚作为模拟输入时, 必须将其对应的TRIS 位置 1 (输入) 如果 TRIS 位被清零 (输出) . ,将对 数字输出电平 (VOH 或 VOL)进行转换. A/D操作将不受CH0SA/CH0SB位以及TRIS 位状态的影响. 当对 PORT 寄存器进行读操作时, 所有配置为模拟输入 通道的引脚将为零. 配置为数字输入的引脚将不会对模- 输入进行转换. 拟 任 何定义为数字输入的引脚 (包括 ANx 引脚)上的模拟 电平可能导致输入缓冲器消耗的电流超过器件规范限定 值.
    16.14 连接注意事项
    模拟输入与 VDD 和 VSS 之间连接有二极管作为 ESD 保 护.这就要求模拟输入电压必须介于 VDD 和 VSS 之间. 如果输入电压超出此范围 0.3V 以上(任一方向上) ,就 会有一个二极管正偏,而且如果超过输入电流规范可能 会损坏器件. 有时可外接 RC 滤波器来对输入信号进行抗混叠滤波. R 元件的选择要确保满足采样时间要求.任何通过高阻 抗连接到模拟输入引脚上的外部元件(如电容和齐纳二 极管等)在引脚上的泄漏电流都应极小.
    2007 Microchip Technology Inc.
    DS70139E_CN 第115 页
    表 16-2:
    SFR 名称 ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 ADCBUF4 ADCBUF5 ADCBUF6 ADCBUF7 ADCBUF8 ADCBUF9 ADCBUFA ADCBUFB ADCBUFC 地址 0280 0282 0284 0286 0288 028A 028C 028E 0290 0292 0294 0296 0298
    dsPIC30F2011/3012 的 A/D 转换器寄存器映射
    Bit 15 - - - - - - - - - - - - - - - - ADON - - - - Bit 14 - - - - - - - - - - - - - - - - - VCFG - - - - - - - - CH0NB - - - - Bit 13 - - - - - - - - - - - - - - - - ADSIDL Bit 12 - - - - - - - - - - - - - - - - - - - - - CSCNA SAMC CH0SB - - - - - - FORM - - BUFS ADRC - PCFG7 CSSL7 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位状态 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu - - ASAM SAMP BUFM CH0SA PCFG3 PCFG2 PCFG1 CSSL3 CSSL2 CSSL1 PCFG0 CSSL0 DONE ALTS 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 SMPI ADCS - CSSL5 CH0NA PCFG4 CSSL4 ADC 数据缓冲器 0 ADC 数据缓冲器 1 ADC 数据缓冲器 2 ADC 数据缓冲器 3 ADC 数据缓冲器 4 ADC 数据缓冲器 5 ADC 数据缓冲器 6 ADC 数据缓冲器 7 ADC 数据缓冲器 8 ADC 数据缓冲器 9 ADC 数据缓冲器 10 ADC 数据缓冲器 11 ADC 数据缓冲器 12 ADC 数据缓冲器 13 ADC 数据缓冲器 14 ADC 数据缓冲器 15 SSRC - - - CSSL6 PCFG6 PCFG5
    DS70139E_CN 第116 页 2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    ADCBUFD 029A ADCBUFE 029C ADCBUFF ADCON1 ADCON2 ADCON3 ADCHS ADPCFG ADCSSL 图注: 注: 029E 02A0 02A2 02A4 02A6 02A8 02AA
    u = 未初始化的位 有关寄存器位域的描述,请参见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    表 16-3:
    SFR 名称 ADCBUF0 ADCBUF1 ADCBUF2 ADCBUF3 ADCBUF4 ADCBUF5 ADCBUF6 ADCBUF7 ADCBUF8 ADCBUF9 ADCBUFA ADCBUFB ADCBUFC 地址 0280 0282 0284 0286 0288 028A 028C 028E 0290 0292 0294 0296 0298
    dsPIC30F2012/3013 的 A/D 转换器寄存器映射
    Bit 15 - - - - - - - - - - - - - - - - ADON - - - - Bit 14 - - - - - - - - - - - - - - - - - VCFG - - - - - - - - CH0NB - - - - Bit 13 - - - - - - - - - - - - - - - - ADSIDL Bit 12 - - - - - - - - - - - - - - - - - - - - - CSCNA SAMC CH0SB - - CSSL9 CSSL8 FORM - - BUFS ADRC - CSSL7 PCFG9 PCFG8 PCFG7 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 复位状态 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu 0000 uuuu uuuu uuuu - - ASAM SAMP BUFM CH0SA PCFG3 PCFG2 PCFG1 CSSL3 CSSL2 CSSL1 PCFG0 CSSL0 DONE ALTS 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 SMPI ADCS - CSSL5 CH0NA PCFG4 CSSL4 ADC 数据缓冲器 0 ADC 数据缓冲器 1 ADC 数据缓冲器 2 ADC 数据缓冲器 3 ADC 数据缓冲器 4 ADC 数据缓冲器 5 ADC 数据缓冲器 6 ADC 数据缓冲器 7 ADC 数据缓冲器 8 ADC 数据缓冲器 9 ADC 数据缓冲器 10 ADC 数据缓冲器 11 ADC 数据缓冲器 12 ADC 数据缓冲器 13 ADC 数据缓冲器 14 ADC 数据缓冲器 15 SSRC - - - CSSL6 PCFG6 PCFG5
    2007 Microchip Technology Inc. DS70139E_CN 第 117 页
    dsPIC30F2011/2012/3012/3013
    ADCBUFD 029A ADCBUFE 029C ADCBUFF ADCON1 ADCON2 ADCON3 ADCHS ADPCFG ADCSSL 图注: 注: 029E 02A0 02A2 02A4 02A6 02A8 02AA
    u = 未初始化的位 有关寄存器位域的描述,请参见 《dsPIC30F 系列参考手册》 (DS70046E_CN) .
    dsPIC30F2011/2012/3012/3013
    注:
    DS70139E_CN 第118 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    17.0 系统集成
    17.1

    振荡器系统概述
    注:本数据手册总结了 dsPIC30 系列器件的功能,但是不应 将其当作无所不包的参考手册使用.有关 CPU,外设,寄存 器说明和通用器件功能的更多信息,请参见 《dsPIC30F 系 列参考手册》 (DS70046E_CN) 欲知有关指令集和编程的 . 更多详细信息,请参见 《dsPIC30F/33F 程序员参考手册》 (DS70157B_CN) .
    dsPIC30F 振荡器系统包含以下模块和功能: 可选择多种外部和内部振荡器作为时钟源 片上 PLL 可提高内部工作频率 在各种时钟源之间进行切换的时钟切换机制 可编程时钟后分频器,可节省系统功耗 故障保护时钟监视器 (FSCM) ,可检测时钟故障 并采取故障保护措施 时钟控制寄存器 (OSCCON) 用于主振荡器选择的配置位 配置位用于决定上电复位(POR)和欠压复位(BOR) 时的时钟源.此后,可在允许的时钟源间切换时钟源. OSCCON 寄存器控制时钟切换并包含与系统时钟相关 的状态位. 表 17-1 总结了 dsPIC30F 的振荡器工作模式.图 17-1 给出了振荡器系统的简化框图.
    本系列器件的下列功能,旨在最大限度地提高系统可靠 性,通过减少外部元件的使用来降低成本,提供节能工 作模式以及代码保护功能: 振荡器选择 复位 - 上电复位 (POR) - 上电延时定时器 (PWRT) - 振荡器起振定时器 (OST) - 可编程欠压复位 (BOR) 看门狗定时器 (WDT) 低电压检测 节能模式 (休眠和空闲) 代码保护 器件 ID 存储单元 在线串行编程 (ICSP) dsPIC30F 器件具备一个看门狗定时器,它可以通过配 置位永久使能,或用软件进行控制. 它依靠自身的 RC 振荡器运行,以便提升可靠性.两个定时器提供了上电 时必须的延时;一个是振荡器起振定时器 (OST) ,用 来使芯片保持复位,直到晶体振荡器稳定为止;另一个 是上电延时定时器 (PWRT),仅在上电时提供延时, 用来在电源稳定过程中使器件保持在复位状态 . 有了 这两个片内定时器,大多数应用不再需要外部复位电 路. 休眠模式旨在提供极低电流的掉电模式.用户可通过外 部复位,看门狗定时器唤醒或中断将器件从休眠状态唤 醒. 某些振荡器也可用于此模式,使此模式适合多种应 用要求. 在空闲模式下,时钟源仍然处于工作状态,但 CPU 停止工作. RC 振荡器可降低系统成本,而 LP 晶 体功能可降低系统功耗.
    2007 Microchip Technology Inc.
    DS70139E_CN 第119 页
    dsPIC30F2011/2012/3012/3013
    表 17-1:
    振荡器模式 XTL XT XT w/PLL 4x XT w/PLL 8x XT w/PLL 16x LP HS HS/2 w/PLL 4x HS/2 w/PLL 8x HS/2 w/PLL 16x HS/3 w/PLL 4x HS/3 w/PLL 8x HS/3 w/PLL 16x EC ECIO EC w/PLL 4x EC w/PLL 8x EC w/PLL 16x ERC ERCIO FRC FRC w/PLL 4x FRC w/PLL 8x FRC w/PLL 16x LPRC 注
    振荡器工作模式
    说明 OSC1:OSC2 上的晶振频率为 200 kHz 至 4 MHz. OSC1:OSC2 上的晶振频率为 4 MHz 至 10 MHz. OSC1:OSC2 上的晶振频率为 4 MHz 至 10 MHz,使能 4x PLL. OSC1:OSC2 上的晶振频率为 4 MHz 至 10 MHz,使能 8x PLL. OSC1:OSC2 上的晶振频率为 4 MHz 至 7.5 MHz,使能 16x PLL(1). SOSCO:SOSCI(2) 上的晶振频率为 32 kHz. 晶振频率为 10 MHz 至 25 MHz. 晶振频率为 10 MHz 至 20 MHz, 2 分频,使能 4x PLL. 晶振频率为 10 MHz 至 20 MHz, 2 分频,使能 8x PLL. 晶振频率为 10 MHz 至 15 MHz, 2 分频,使能 16x PLL(1). 晶振频率为 12 MHz 至 25 MHz, 3 分频,使能 4x PLL. 晶振频率为 12 MHz 至 25 MHz, 3 分频,使能 8x PLL. 晶振频率为 12 MHz 至 22.5 MHz, 3 分频,使能 16x PLL(1). 外部时钟输入 (0 至 40 MHz) . 外部时钟输入 (0 至 40 MHz) ,OSC2 引脚为 I/O. 外部时钟输入 (4 至 10 MHz) ,OSC2 引脚为 I/O,使能 4x PLL. 外部时钟输入 (4 至 10 MHz) ,OSC2 引脚为 I/O,使能 8x PLL. 外部时钟输入 (4 至 7.5 MHz) ,OSC2 引脚为 I/O,使能 16x PLL(1). 外部 RC 振荡器, OSC2 引脚为 FOSC/4 输出引脚 (3). 外部 RC 振荡器, OSC2 引脚为 I/O(3). 7.37 MHz 内部 RC 振荡器. 7.37 MHz 内部 RC 振荡器,使能 4x PLL. 7.37 MHz 内部 RC 振荡器,使能 8x PLL. 7.37 MHz 内部 RC 振荡器,使能 16x PLL. 512 kHz 内部 RC 振荡器.
    1: 必须满足 dsPIC30F 最大工作频率为 120 MHz 的要求. 2: LP 振荡器可方便地为系统时钟或 Timer1 实时时钟所共用. 3: 需要外部 R 和 C 元件.工作频率最高为 4 MHz.
    DS70139E_CN 第120 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    图 17-1: 振荡器系统框图
    振荡器配置位 PWRSAV 指令 唤醒请求 OSC1 OSC2 主振荡器 FPLL PLL x4, x8, x16 PLL COSC NOSC OSWEN Lock 主振荡器 内部 FRC 振荡器 主振荡器 稳定性 检测器
    内部快速 RC 振荡器 (FRC)
    POR 完成
    振荡器 起振 定时器 辅助振荡器 时钟切换 和控制模块 可编程 时钟分频器 系统 时钟
    SOSCO SOSCI
    32 kHzLP 振荡器
    辅助 振荡器 稳定性检测器
    2 POST
    内部低 功耗 RC 振荡器 (LPRC)
    LPRC
    FCKSM
    2
    故障保护时钟 监视器 (FSCM)
    CF 振荡器陷阱 至 Timer1
    2007 Microchip Technology Inc.
    DS70139E_CN 第121 页
    dsPIC30F2011/2012/3012/3013
    17.2
    17.2.1
    振荡器配置
    初始时钟源选择
    17.2.2
    振荡器起振定时器 (OST)
    当退出上电复位或欠压复位状态时,器件根据以下原则 进行时钟源的选择: a) b) 通过 FOS 配置位选择四个振荡器组中的一 组, 通过 FPR 配置位选择主振荡器组中的 15 个振荡器之一.
    为了确保晶振 (或陶瓷谐振器)已起振并达到稳定状 态,振荡器中包含一个振荡器起振定时器. 该定时器仅 仅是一个 10 位计数器,在允许振荡器时钟应用于系统 超时 其他部分之前该计数器将计数 1024 个 TOSC 周期. 周期称为 TOST. 每当振荡器重启(即当 POR,BOR 和从休眠模式唤醒 时)需进行 TOST 时间的延时.振荡器起振定时器适用 于 LP 振荡器和主振荡器的 XT,XTL 和 HS 模式(从休 眠中唤醒, POR 和 BOR 时) .
    具体选择方法如表 17-2 所示.
    表 17-2:
    用于时钟选择的配置位值
    振荡器源 PLL PLL PLL PLL PLL PLL PLL PLL PLL PLL PLL PLL PLL PLL PLL 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 FOS 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 X X X 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 X X X FPR 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 X X X 0 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 0 1 1 0 0 0 X X X 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 0 0 0 1 1 0 0 X X X OSC2 功能 I/O I/O I/O I/O I/O I/O OSC2 OSC2 OSC2 OSC2 OSC2 OSC2 OSC2 OSC2 OSC2 I/O OSC2 OSC2 CLKO CLKO I/O OSC2 (注 1, 2) (注 1, 2) (注 1, 2)
    振荡器模式 ECIO w/PLL 4x ECIO wPLL 8x ECIO w/ PLL 16x FRC w/PLL 4X FRC w/PLL 8x FRC w/PLL 16x XT wPLL 4x XT w/PLL 8x XT w/PLL 16x HS2 w/PLL 4x HS2 wPLL 8x HS2 w/ PLL 16x HS3 w/PLL 4x HS3 w/PLL 8x HS3 w/PLL 16x ECIO XT HS EC ERC ERCIO XTL LP FRC LPRC 注
    外部 外部 外部 外部 外部 外部 外部 辅助 内部 FRC 内部 LPRC 1: 由主振荡器模式选择位 (FPR)决定 OSC2 引脚的功能. 2: 即使始终选择辅助振荡器或内部时钟源, OSC1 引脚仍不能用作 I/O 引脚.
    DS70139E_CN 第122 页
    2007 Microchip Technology Inc.
    dsPIC30F2011/2012/3012/3013
    17.2.3
    1. 2.
    LP 振荡器控制
    注:
    由以下两个元素控制 LP 振荡器的使能: 当前振荡器组控制位 COSC. LPOSCEN 位 (OSCCON 寄存器) .
    使用 16 倍频 PLL 时,不能将 FRC 的频率 调节为大于 7.5 MHz.
    表 17-4:
    TUN 位 0111 0110 0101 0100 0011 0010 0001 0000 1111 1110 1101 1100 1011 1010 1001 1000
    FRC 调节
    FRC 频率 + 10.5% + 9.0% + 7.5% + 6.0% + 4.5% + 3.0% + 1.5% 中心频率 (振荡器运行于校准频率) - 1.5% - 3.0% - 4.5% - 6.0% - 7.5% - 9.0% - 10.5% - 12.0%
    如果 LPOSCEN = 1,则 LP 振荡器开启 (即使处于休 眠模式) .在以下条件下, LP 振荡器将作为器件时钟: COSC = 000 (选择 LP 作为主振荡器) 且 LPOSCEN = 1 保持 LP 振荡器始终开启可快速切换至 32 KHz 系统时钟 以实现低功耗运行.返回至更快速的主振荡器仍需要一 个起振延时.
    17.2.4
    锁相环 (PLL)
    PLL 可将主振荡器或快速 RC 振荡器产生的时钟信号进 行倍频.
  • 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
  • 免费下载 PDF格式下载
  • 您可能感兴趣的
  • 造梦西游3贺2012龙年v  造梦西游贺2012龙年ce  造梦西游贺2012龙年  造梦西游3龙年2012  造梦西游3货2012龙年  造梦西游2贺2012龙年  2012龙年造梦西游  造梦西游2012龙年2.5  造梦西游2012龙年贺岁