C8051F380/1/2/3/4/5/6/7/C 全速 USB 闪存 MCU 产品系列 修订版 1.4 模拟外设 - 10- 位 ADC ( 仅 F380/1/2/3) • 转换速率可达 500 ksps • 内建模拟多路器,单端或差分输入 • VREF 可在外部引脚、内部 VREF 或 VDD 中选择 • 内建温度传感器 • 外部转换启动输入 - 两个比较器 - 内部电压基准 ( 仅 F380/1/2/3 ) - 掉电检测器和上电复位电路 USB 控制器 - 符合 USB 规范 2.0 版 - 全速 (12 Mbps) 或低速 (1.5 Mbps) 操作 - 集成时钟恢复电路;全速或低速均无需外部晶体 - 支持 8 个灵活端点 - 1 kB USB 缓存 - 集成收发器;无需外部电阻 在片调试 - 片内调试电路提供全速、非侵入式的在系统调试 (不需 - 仿真器) 支持断点、单步、观察 / 修改存储器和寄存器 比使用仿真芯片、目标仿真头和仿真插座的仿真系统有更 优越的性能 电源电压输入 : 2.7 to 5.25 V - 使用片内电压调整器时,支持的电压范围为 2.7~5.25V 高速 8051 微控制器内核 - 流水线指令结构;70%的指令的执行时间为一个或两个系 统时钟周期 - 速度高达 48 MIPS - 扩展的中断系统 存储器 - 4352 或 2304 字节 RAM - 64 或 32 kB Flash; 可在系统编程,扇区大小为 512 字节 数字外设 - 40/25 个端口 I/O; 均耐 5 V 电压,大灌电流 - 硬件增强型 SPI™, 两个 I2C/SMBus™, 和两个增强型 UART 串口 - 6 个通用 16- 位计数器 / 定时器 - 16- 位可编程计数器阵列 (PCA),有 5 个捕捉比较模块 - 外部存储器接口 (EMIF) 时钟源 - 内部振荡器 : ±0.25% 的精度 (时钟恢复被使能时)。支 持所有 USB 和 UART 工作方式 - 外部振荡器 : 晶体 , RC, C, 或外部时钟 (1 或 2 引脚方式 ) - 低频 (80 kHz) 内部振荡器 - 可在运行中切换时钟源 封装 - 48- 脚 TQFP (C8051F380/2/4/6) - 32- 脚 LQFP (C8051F381/3/5/7) - 5x5 mm 32- 脚 QFN (C8051F381/3/5/7) 温度范围 : –40 to +85 °C 10-bit 500 ksps ADC 温度 传感器 + - + - VREG VREF UART0 UART1 SPI SMBus0 SMBus1 PCA 6个定时器 端口 0 交叉开关 A M U X 数字 I/O 仅限48脚 外部存储器接口 模拟外设 端口 1 端口 2 端口 3 端口 4 仅C 805 1F38 0/1/2/3 精准内部振荡器 USB 控制器 / 收发器 高速控制器核 修订版 1.4 10/13 64/32 kB ISP FLASH 8051 CPU 48 MIPS 4/2 kB RAM 中断系统 调试电路 POR WDT Copyright © 2013 by Silicon Laboratories C8051F380/1/2/3/4/5/6/7/C C8051F380/1/2/3/4/5/6/7/C 2 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 篇目 1. 系统概述..................................................................................................................... 16 2. C8051F34x 兼容性 .................................................................................................... 20 2.1. 硬件不兼容性 ..................................................................................................... 21 3. 引脚和封装定义.......................................................................................................... 22 4. 典型连接图 ................................................................................................................. 34 4.1. 电源 ................................................................................................................... 34 4.2. USB ................................................................................................................... 36 4.3. 参考电压 (VREF) ............................................................................................... 36 5. 电气特性..................................................................................................................... 37 5.1. 极限参数 ............................................................................................................ 37 5.2. 总体电气特性 ..................................................................................................... 38 6. 10 位 ADC (ADC0 的,只有 C8051F380/1/2/3)..................................................... 46 6.1. 输出码格式......................................................................................................... 47 6.2. 温度传感器......................................................................................................... 48 6.3. 工作方式 ............................................................................................................ 50 6.3.1. 启动转换.................................................................................................... 50 6.3.2. 跟踪方式.................................................................................................... 51 6.3.3. 建立时间要求............................................................................................. 52 6.4. 可编程窗口检测器.............................................................................................. 56 6.4.1. 窗口检测器示例 ......................................................................................... 58 6.5. ADC0 模拟多路选择器 (仅 C8051F380/1/2/3)............................................... 59 7. 电压基准..................................................................................................................... 62 8. 比较器 0 和比较器 1 ................................................................................................... 64 8.1. 比较器多路选择器.............................................................................................. 71 9. 稳压器 (REG0 和 REG1)............................................................................................ 74 9.1. 稳压器 (REG0)................................................................................................... 74 9.1.1. 稳压器方式选择 ......................................................................................... 74 9.1.2. VBUS 检测 ................................................................................................ 74 9.2. 稳压器 (REG1)................................................................................................... 74 10. 电源管理................................................................................................................... 76 10.1. 空闲方式 .......................................................................................................... 76 10.2. 停止方式 .......................................................................................................... 77 10.3. 挂起方式 .......................................................................................................... 77 11. CIP-51 微控制器....................................................................................................... 79 11.1. 指令集 .............................................................................................................. 80 11.1.1. 指令和 CPU 时序 ..................................................................................... 80 11.2. CIP-51 寄存器说明........................................................................................... 85 12. 指令预取引擎 ........................................................................................................... 88 13. 存储器组织 ............................................................................................................... 89 13.1. 程序存储器....................................................................................................... 91 13.2. 数据存储器....................................................................................................... 91 13.3. 通用寄存器....................................................................................................... 92 13.4. 位寻址空间....................................................................................................... 92 13.5. 堆栈 ................................................................................................................. 92 ??? 1.4 3 C8051F380/1/2/3/4/5/6/7/C 14. 外部数据存储器接口和片内 XRAM .......................................................................... 93 14.1. 访问 XRAM ...................................................................................................... 93 14.1.1. 16 位 MOVX 示例 .................................................................................... 93 14.1.2. 8 位 MOVX 示例 ...................................................................................... 93 14.2. 访问 USB FIFO 空间........................................................................................ 94 14.3. 配置外部存储器接口 ........................................................................................ 95 14.4. 端口配置 .......................................................................................................... 95 14.5. 复用和非复用选择............................................................................................ 98 14.5.1. 复用方式配置........................................................................................... 98 14.5.2. 非复用方式配置 ....................................................................................... 98 14.6. 存储器模式选择 ............................................................................................. 100 14.6.1. 只用内部 XRAM .................................................................................... 100 14.6.2. 无块选择的分割模式.............................................................................. 100 14.6.3. 带块选择的分割模式.............................................................................. 101 14.6.4. 只用外部存储器 ..................................................................................... 101 14.7. EMIF 时序...................................................................................................... 102 14.7.1. 非复用方式 ............................................................................................ 104 14.7.1.1. 16 位 MOVX:EMI0CF[4:2] = 101, 110,或 111 ........................ 104 14.7.1.2. 无块选择的 8 位 MOVX:EMI0CF[4:2] = 101 或 111.................... 105 14.7.1.3. 带块选择的 8 位 MOVX:EMI0CF[4:2] = 110 ............................... 106 14.7.2. 复用方式................................................................................................ 107 14.7.2.1. 16 位 MOVX:EMI0CF[4:2] = 001, 010,或 011 ....................... 107 14.7.2.2. 无块选择的 8 位 MOVX:EMI0CF[4:2] = 001 或 011 ................... 108 14.7.2.3. 带块选择的 8 位 MOVX:EMI0CF[4:2] = 010............................... 109 15. 特殊功能寄存器....................................................................................................... 111 15.1. SFR 分页 ........................................................................................................ 111 16. 中断系统..................................................................................................................118 16.1. MCU 中断源和中断向量..................................................................................119 16.1.1. 中断优先级 .............................................................................................119 16.1.2. 中断延迟.................................................................................................119 16.2. 中断寄存器说明 ..............................................................................................119 16.3. INT0 和 INT1 外部中断源............................................................................. 127 17. 复位源 .................................................................................................................... 129 17.1. 上电复位 ........................................................................................................ 130 17.2. 掉电复位 / VDD 监视器.................................................................................. 131 17.3. 外部复位 ........................................................................................................ 132 17.4. 时钟丢失检测器复位 ...................................................................................... 132 17.5. 比较器 0 复位................................................................................................. 132 17.6. PCA 看门狗定时器复位 ................................................................................. 133 17.7. FLASH 错误复位............................................................................................ 133 17.8. 软件复位 ........................................................................................................ 133 17.9. USB 复位 ....................................................................................................... 133 18. Flash 存储器.......................................................................................................... 135 18.1. FLASH 存储器编程 ........................................................................................ 135 18.1.1. FLASH 锁定和关键码功能..................................................................... 135 4 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 18.1.2. FLASH 擦除 .......................................................................................... 135 18.1.3. FLASH 写 .............................................................................................. 136 18.2. 非易失性数据存储.......................................................................................... 137 18.3. 安全选项 ........................................................................................................ 137 19. 时钟源 .................................................................................................................... 142 19.1. 系统时钟选择 ................................................................................................. 143 19.2. USB 时钟选择................................................................................................ 143 19.3. 可编程内部高频 (H-F) 振荡器 ........................................................................ 145 19.3.1. 内部振荡器挂起方式.............................................................................. 145 19.4. 时钟乘法器..................................................................................................... 147 19.5. 可编程内部低频 (L-F) 振荡器......................................................................... 148 19.5.1. 内部 L-F 振荡器标定.............................................................................. 148 19.6. 外部振荡器驱动电路 ...................................................................................... 149 19.6.1. 外部晶体方式......................................................................................... 149 19.6.2. 外部 RC 方式......................................................................................... 151 19.6.3. 外部电容方式......................................................................................... 151 20. 端口输入 / 输出....................................................................................................... 153 20.1. 优先权交叉开关译码器................................................................................... 154 20.2. 端口 I/O 初始化.............................................................................................. 158 20.3. 通用端口 I/O .................................................................................................. 161 21. 通用串行总线控制器 (USB0).................................................................................. 172 21.1. 端点地址 ........................................................................................................ 172 21.2. USB 收发器 ................................................................................................... 173 21.3. USB 寄存器访问 ............................................................................................ 175 21.4. USB 时钟配置................................................................................................ 179 21.5. FIFO 管理 ...................................................................................................... 181 21.5.1. FIFO 分割方式....................................................................................... 181 21.5.2. FIFO 双缓冲 .......................................................................................... 182 21.5.3. FIFO 访问.............................................................................................. 182 21.6. 功能地址 ........................................................................................................ 183 21.7. 功能配置和控制 ............................................................................................. 183 21.8. 中断 ............................................................................................................... 186 21.9. 串行接口引擎 ................................................................................................. 193 21.10. 端口 0 .......................................................................................................... 193 21.10.1. 端点 0 SETUP 事务 ............................................................................. 193 21.10.2. 端点 0 IN 事务 ..................................................................................... 193 21.10.3. 端点 0 OUT 事务 ................................................................................. 194 21.11. 端点 1-3 配置 ............................................................................................... 196 21.12. 端点 1~3 输入 (IN) 控制 ............................................................................... 197 21.12.1. 端点 1~3 输入 (IN) 中断或批量方式..................................................... 197 21.12.2. 端点 1~3 输入 (IN) 等时方式................................................................ 198 21.13. 端点 1~3 输出 (OUT) 控制 ........................................................................... 201 21.13.1. 端点 1~3 输出 (OUT) 中断或批量方式................................................. 201 21.13.2. 端点 1~3 输出 (OUT) 等时方式............................................................ 201 22. SMBus0 和 SMBus1 (I2C 兼容 )........................................................................... 205 ??? 1.4 5 C8051F380/1/2/3/4/5/6/7/C 22.1. 支持文档 ........................................................................................................ 206 22.2. SMBus 配置................................................................................................... 206 22.3. SMBus 操作................................................................................................... 206 22.3.1. 发送器与接收器 ..................................................................................... 207 22.3.2. 总线仲裁................................................................................................ 207 22.3.3. 时钟低电平扩展 ..................................................................................... 207 22.3.4. SCL 低电平超时 .................................................................................... 207 22.3.5. SCL 高电平 (SMBus 空闲 ) 超时 ........................................................... 208 22.4. SMBus 的使用 ............................................................................................... 208 22.4.1. SMBus 配置寄存器................................................................................ 208 22.4.2. SMBus 定时控制寄存器 ........................................................................ 210 22.4.3. SMBus 控制寄存器 SMBnCN................................................................ 214 22.4.3.1. 软件 ACK 产生 .............................................................................. 214 22.4.3.2. 硬件 ACK 产生 .............................................................................. 214 22.4.4. 硬件从地址识别 ..................................................................................... 217 22.4.5. 数据寄存器 ............................................................................................ 221 22.5. SMBus 传输方式............................................................................................ 223 22.5.1. 写操作 (主方式)................................................................................. 223 22.5.2. 读操作 (主方式)................................................................................. 224 22.5.3. 写操作 (从方式)................................................................................. 225 22.5.4. 读操作 (从方式)................................................................................. 226 22.6. SMBus 状态译码............................................................................................ 226 23. UART0 ................................................................................................................... 232 23.1. 增强的波特率发生器 ...................................................................................... 233 23.2. 工作方式 ........................................................................................................ 234 23.2.1. 8 位 UART ............................................................................................. 234 23.2.2. 9 位 UART ............................................................................................. 235 23.3. 多机通信 ........................................................................................................ 236 24. UART1 ................................................................................................................... 240 24.1. 波特率发生器 ................................................................................................. 241 24.2. 数据格式 ........................................................................................................ 242 24.3. 配置和操作..................................................................................................... 243 24.3.1. 数据发送................................................................................................ 243 24.3.2. 数据接收................................................................................................ 243 24.3.3. 多机通信................................................................................................ 244 25. 增强型串行外设接口 (SPI0) ................................................................................... 250 25.1. 信号说明 ........................................................................................................ 251 25.1.1. 主出从入 (MOSI) ................................................................................... 251 25.1.2. 主入从出 (MISO) ................................................................................... 251 25.1.3. 串行时钟 (SCK) ..................................................................................... 251 25.1.4. 从选择 (NSS)......................................................................................... 251 25.2. SPI0 主方式操作............................................................................................ 251 25.3. SPI 从方式操作.............................................................................................. 253 25.4. SPI 中断源 ..................................................................................................... 254 25.5. 串行时钟相位和极性 ...................................................................................... 254 6 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 25.6. SPI 特殊功能寄存器....................................................................................... 256 26. 定时器 .................................................................................................................... 263 26.1. 定时器 0 和定时器 1....................................................................................... 266 26.1.1. 方式 0 — 13 位计数器 / 定时器.............................................................. 266 26.1.2. 方式 1 — 16 位计数器 / 定时器.............................................................. 267 26.1.3. 方式 2 — 自动重装载的 8 位计数器 / 定时器 ......................................... 267 26.1.4. 方式 3 — 两个 8 位计数器 / 定时器 (仅限定时器 0)........................... 268 26.2. 定时器 2......................................................................................................... 274 26.2.1. 16 位自动重装载方式 ............................................................................ 274 26.2.2. 8 位自动重装载定时器........................................................................... 275 26.2.3. 定时器 2 捕捉方式:USB 帧起始捕捉或 LFO 下降沿捕捉方式.............. 275 26.3. 定时器 3......................................................................................................... 281 26.3.1. 16 位自动重装载方式 ............................................................................ 281 26.3.2. 8 位自动重装载定时器........................................................................... 282 26.3.3. 定时器 3 捕捉方式:USB 帧起始或 LFO 下降沿 ................................... 282 26.4. 定时器 4......................................................................................................... 288 26.4.1. 16 位自动重装载方式 ............................................................................ 288 26.4.2. 8 位自动重装载定时器........................................................................... 289 26.5. 定时器 5......................................................................................................... 293 26.5.1. 16 位自动重装载方式 ............................................................................ 293 26.5.2. 8 位自动重装载定时器........................................................................... 294 27. 可编程计数器阵列 .................................................................................................. 298 27.1. PCA 计数器 / 定时器...................................................................................... 299 27.2. PCA0 中断源 ................................................................................................. 300 27.3. 捕捉 / 比较模块 .............................................................................................. 301 27.3.1. 边沿触发的捕捉方式.............................................................................. 302 27.3.2. 软件定时器 (比较)方式...................................................................... 303 27.3.3. 高速输出方式......................................................................................... 304 27.3.4. 频率输出方式......................................................................................... 305 27.3.5. 8 位脉宽调制器方式 .............................................................................. 306 27.3.6. 16 位脉宽调制器方式 ............................................................................ 307 27.4. 看门狗定时器方式.......................................................................................... 308 27.4.1. 看门狗定时器操作 ................................................................................. 308 27.4.2. 看门狗定时器的使用.............................................................................. 309 27.5. PCA0 寄存器说明 ...........................................................................................311 28. C2 接口 .................................................................................................................. 316 28.1. C2 接口寄存器 ............................................................................................... 316 28.2. C2 引脚共享................................................................................................... 319 文档更改列表 ........................................................................................... 320 联系信息................................................................................................... 321 ??? 1.4 7 C8051F380/1/2/3/4/5/6/7/C 8 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 图目录 图 图 图 图 图 图 图 图 图 图 图 图 图 图 1.1. 8051F380/2/4/6 原理图框 ............................................................................ 18 1.2. C8051F381/3/5/7 原理图框 ......................................................................... 19 3.1. TQFP-48 引脚图 ( 顶视图 ) .......................................................................... 25 3.2. TQFP-48 封装图 .......................................................................................... 26 3.3. 推荐的 TQFP-48 PCB 焊盘图 ...................................................................... 27 3.4. LQFP-32 引脚图 ( 顶视图 ) .......................................................................... 28 3.5. LQFP-32 封装图 .......................................................................................... 29 3.6. 推荐的 LQFP-32 PCB 焊盘图 ...................................................................... 30 3.7. QFN-32 引脚图 ( 顶视图 ) ............................................................................ 31 3.8. QFN-32 封装图 ............................................................................................ 32 3.9. 推荐的 QFN-32 PCB 焊盘图 ........................................................................ 33 4.1. 有使用稳压器但无 USB 的连接图 ................................................................ 34 4.2. 未使用稳压器和无 USB 的连接图 ................................................................ 34 4.3. 有使用稳压器且连接 USB 的连接图 (总线供电) ....................................................................................................... 35 图 4.4. 有使用稳压器且连接 USB 的连接图 (自供电) ........................................................................................................ 35 图 4.5. USB 引脚连接图 ......................................................................................... 36 图 4.6. 内部参考电压连接图 ................................................................................... 36 图 6.1. ADC0 功能框图 ........................................................................................... 46 图 6.2. 典型的温度传感器传递函数 ......................................................................... 48 图 6.3. 1 点校准温度传感器错误 ............................................................................. 49 图 6.4. 10 位 ADC 跟踪和转换时序示例 .................................................................. 51 图 6.5. ADC0 等效输入电路 .................................................................................... 52 图 6.6. ADC 窗口比较示例 (右对齐单端方式数据) .............................................. 58 图 6.7. ADC 窗口比较示例 (左对齐单端方式数据) .............................................. 58 图 7.1. 电压基准功能框图 ....................................................................................... 62 图 8.1. 比较器 0 功能框图 ....................................................................................... 64 图 8.2. 比较器 1 功能框图 ....................................................................................... 65 图 8.3. 比较器回差电压曲线 .................................................................................... 66 图 8.4. 比较器输入多路器原理框图 ......................................................................... 71 图 11.1. CIP-51 原理框图 ........................................................................................ 79 图 13.1. 64 kB 器件 (C8051F380/1/4/5) 存储器组织图 ........................................... 89 图 13.2. 32 kB 器件 (C8051F382/3/6/7) 存储器组织图 ........................................... 90 图 13.3. 16 kB 器件 (C8051F38C) 存储器组织图 .................................................... 91 图 14.1. USB FIFO 空间和 XRAM 存储器映射 (USBFAE=‘1’) ................................ 94 图 14.2. 复用方式配置示例 ..................................................................................... 98 图 14.3. 非复用方式配置示例 .................................................................................. 99 图 14.4. EMIF 工作模式 ........................................................................................ 100 图 14.5. 非复用 16 位 MOVX 时序 ........................................................................ 104 图 14.6. 无块选择的非复用 8 位 MOVX 时序 ........................................................ 105 图 14.7. 带块选择的非复用 8 位 MOVX 时序 ........................................................ 106 图 14.8. 复用方式 16 位 MOVX 时序 ..................................................................... 107 ??? 1.4 8 C8051F380/1/2/3/4/5/6/7/C 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 9 14.9. 无块选择的复用方式 8 位 MOVX 时序 ..................................................... 108 14.10. 带块选择的复用方式 8 位 MOVX 时序 ................................................... 109 17.1. 复位源框图 .............................................................................................. 129 17.2. 上电复位和 VDD 监视器复位时序 ........................................................... 130 18.1. FLASH 程序存储器组织和安全字节 ........................................................ 137 19.1. 时钟源框图 .............................................................................................. 142 19.2. 外部晶体示例 ........................................................................................... 150 20.1. 端口 I/O 功能框图 (端口 0- 端口 3) ...................................................... 153 20.2. 端口 I/O 单元框图 .................................................................................... 154 20.3. 外设在端口 I/O 引脚上的可用性 .............................................................. 155 20.4. 没有引脚被跳过的交叉开关优先权译码器配置示例 ................................. 156 20.5. 三个引脚被跳过的交叉开关优先权译码器配置示例 ................................. 157 21.1. USB0 原理框图 ....................................................................................... 172 21.2. USB0 寄存器访问示意图 ......................................................................... 175 21.3. USB FIFO 分配 ....................................................................................... 181 22.1. SMBus 原理框图 ..................................................................................... 205 22.2. 典型的 SMBus 配置 ................................................................................. 206 22.3. SMBus 数据传输 ..................................................................................... 207 22.4. 典型的 SMBus SCL 波形 ......................................................................... 209 22.5. 典型的主器件写操作 ................................................................................ 223 22.6. 典型的主器件读操作 ................................................................................ 224 22.7. 典型的从器件写操作 ................................................................................ 225 22.8. 典型的从器件读操作 ................................................................................ 226 23.1. UART0 原理框图 ..................................................................................... 232 23.2. UART0 波特率逻辑 ................................................................................. 233 23.3. UART 连接图 ........................................................................................... 234 23.4. 位 UART 时序图 ...................................................................................... 234 23.5. 9 位 UART 时序图 ................................................................................... 235 23.6. UART 多机方式连接图 ............................................................................ 236 24.1. UART1 原理框图 ..................................................................................... 240 24.2. 没有奇偶位或额外位的 UART1 时序 ....................................................... 242 24.3. 有奇偶位时的 UART1 时序 ...................................................................... 242 24.4. 有额外位时的 UART1 时序 ...................................................................... 242 24.5. 典型 UART 连接图 ................................................................................... 243 24.6. UART 多机方式连接图 ............................................................................ 244 25.1. SPI 原理框图 ........................................................................................... 250 25.2. 多主方式连接图 ....................................................................................... 252 25.3. 3 线单主方式和 3 线单从方式连接图 ....................................................... 252 25.4. 4 线主方式和 4 线从方式连接图 .............................................................. 253 25.5. 主方式数据 / 时钟时序 ............................................................................. 255 25.6. 主方式数据 / 时钟时序 (CKPHA = 0) ....................................................... 255 25.7. 从方式数据 / 时钟时序 (CKPHA = 1) ....................................................... 256 25.8. SPI 主方式时序 (CKPHA = 0) ................................................................. 260 25.9. SPI 主方式时序 (CKPHA = 1) .................................................................. 260 25.10. SPI 从方式时序 (CKPHA = 0) ................................................................ 261 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 图 25.11. SPI 从方式时序 (CKPHA = 1) ................................................................ 261 26.1. T0 方式 0 原理框图 .................................................................................. 267 26.2. T0 方式 2 原理框图 .................................................................................. 268 26.3. T0 方式 3 原理框图 .................................................................................. 269 26.4. 定时器 2 的 16 位方式原理框图 ............................................................... 274 26.5. 定时器 2 的 8 位方式原理图 ..................................................................... 275 26.6. 定时器 2 捕捉方式 (T2SPLIT = 0) ........................................................... 276 26.7. 定时器 2 捕捉方式 (T2SPLIT = 0) ........................................................... 277 26.8. 定时器 3 的 16 位方式原理框图 ............................................................... 281 26.9. 定时器 3 的 8 位方式原理框图 ................................................................. 282 26.10. 定时器 3 捕捉方式 (T3SPLIT = 0) .......................................................... 283 26.11. 定时器 3 捕捉方式 (T3SPLIT = 0) .......................................................... 284 26.12. 定时器 4 的 16 位方式原理框图 ............................................................. 288 26.13. 定时器 4 的 8 位方式原理框图 ............................................................... 289 26.14. 定时器 5 的 16 位方式原理框图 ............................................................. 293 26.15. 定时器 5 的 8 位方式原理框图 ............................................................... 294 27.1. PCA 原理框图 ......................................................................................... 298 27.2. PCA 计数器 / 定时器原理框图 ................................................................. 299 27.3. PCA 中断原理框图 .................................................................................. 300 27.4. PCA 捕捉方式原理框图 ........................................................................... 302 27.5. PCA 软件定时器方式原理框图 ................................................................ 303 27.6. PCA 高速输出方式原理框图 .................................................................... 304 27.7. PCA 频率输出方式原理框图 .................................................................... 305 27.8. PCA 的 8 位 PWM 方式原理框图 ............................................................. 306 27.9. PCA 的 16 位 PWM 方式原理框图 ........................................................... 307 27.10. PCA 模块 4 的看门狗定时器方式 .......................................................... 308 28.1. 典型的 C2 引脚共享 ................................................................................. 319 ??? 1.4 10 C8051F380/1/2/3/4/5/6/7/C 11 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 表一览 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 表 1.1. 产品选择指南 ............................................................................................... 17 2.1. C8051F38x 替换型号 .................................................................................. 20 3.1. C8051F380/1/2/3/4/5/6/7/C 引脚定义 ......................................................... 22 3.2. TQFP-48 封装尺寸 ...................................................................................... 26 3.3. TQFP-48 PCB 焊盘布局尺寸 ...................................................................... 27 3.4. LQFP-32 封装尺寸 ...................................................................................... 29 3.5. LQFP-32 PCB 焊盘布局尺寸 ....................................................................... 30 3.6. QFN-32 封装尺寸 ........................................................................................ 32 3.7. QFN-32 PCB 焊盘布局尺寸 ........................................................................ 33 5.1. 极限参数 ...................................................................................................... 37 5.2. 总体电气特性 ............................................................................................... 38 5.3. 端口 I/O 直流电气特性 ................................................................................. 39 5.4. 复位电气特性 ............................................................................................... 39 5.5. I 内部稳压器电气特性 .................................................................................. 40 5.6. Flash 电气特性 ............................................................................................ 40 5.7. 内部高频振荡器电气特性 ............................................................................. 41 5.8. 内部低频振荡器电气特性 ............................................................................. 41 5.9. 外部振荡器电气特性 .................................................................................... 41 5.10. ADC0 电气特性 ......................................................................................... 42 5.11. 温度传感器电气特性 .................................................................................. 43 5.12. 电压基准电气特性 ..................................................................................... 43 5.13. 比较器电气特性 ......................................................................................... 44 5.14. USB 收发器电气特性 ................................................................................. 45 11.1. CIP-51 指令集一览表 ................................................................................. 81 14.1. 外部存储器接口的 AC 参数 ......................................................................110 15.1. 特殊功能寄存器 (SFR) 存储器映象 ..........................................................112 15.2. 特殊功能寄存器 ........................................................................................113 16.1. 中断一览表 .............................................................................................. 120 21.1. 端点地址 .................................................................................................. 173 21.2. USB0 控制器寄存器 ................................................................................ 178 21.3. FIFO 配置 ................................................................................................ 182 22.1. SMBus 时钟源选择 .................................................................................. 209 22.2. 最小 SDA 建立和保持时间 ...................................................................... 210 22.3. 影响 SMBnCN 的硬件变化原 ................................................................... 217 22.4. 硬件地址识别示例 (EHACK = 1) ............................................................. 218 22.5. 硬件 ACK 产生禁止时的 SMBus 状态译码 (EHACK = 0) ........................ 227 22.6. 硬件 ACK 产生被使能时的 SMBus 状态译码 (EHACK = 1) ..................... 229 23.1. 对应标准波特率的定时器设置 (使用内部振荡器) ................................. 238 24.1. 对应标准波特率的波特率发生器设置 (使用内部振荡器) ...................... 241 25.1. SPI 从方式时序参数 ................................................................................ 262 27.1. PCA 时基输入选项 .................................................................................. 299 27.2. PCA 捕捉 / 比较模块的 PCA0CPM 寄存器位设置 ................................... 301 27.3. 看门狗定时器超时间隔 1 ......................................................................... 310 ??? 1.4 11 C8051F380/1/2/3/4/5/6/7/C 12 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 寄存器列表 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 SFR 定义 6.1. ADC0CF:ADC0 配置寄存器 ............................................................... 53 6.2. ADC0H:ADC0 数据字高字节 .............................................................. 54 6.3. ADC0L:ADC0 数据字低字节 .............................................................. 54 6.4. ADC0CN:ADC0 控制寄存器 ............................................................... 55 6.5. ADC0GTH:ADC0 下限 (大于)数据字高字节 .................................. 56 6.6. ADC0GTL:ADC0 下限 (大于)数据字低字节 ................................... 56 6.7. ADC0LTH:ADC0 上限 (小于)数据字高字节 ................................... 57 6.8. ADC0LTL:ADC0 上限 (小于)数据字低字节 .................................... 57 6.9. AMX0P:AMUX0 正输入通道选择寄存器 ............................................. 60 6.10. AMX0N:AMUX0 负输入通道选择寄存器 .......................................... 61 7.1. REF0CN:电压基准控制寄存器 ........................................................... 63 8.1. CPT0CN:比较器 0 控制寄存器 ........................................................... 67 8.2. CPT0MD:比较器 0 方式选择寄存器 .................................................... 68 8.3. CPT1CN:比较器 1 控制寄存器 ........................................................... 69 8.4. CPT1MD:比较器 1 方式选择寄存器 .................................................... 70 8.5. CPT0MX:比较器 0 MUX 选择寄存器 .................................................. 72 8.6. CPT1MX:比较器 1 MUX 寄存器 ......................................................... 73 9.1. REG01CN:稳压器控制寄存器 ............................................................ 75 10.1. PCON:电源管理控制寄存器 ............................................................. 78 11.1. DPL:数据指针低字节 ........................................................................ 85 11.2. DPH:数据指针高字节 ....................................................................... 85 11.3. SP:堆栈指针 ..................................................................................... 86 11.4. ACC:累加器 ...................................................................................... 86 11.5. B:B 寄存器 ........................................................................................ 86 11.6. PSW:程序状态字 .............................................................................. 87 12.1. PFE0CN:预取引擎控制寄存器 .......................................................... 88 14.1. EMI0CN:外部存储器接口控制寄存器 ............................................... 96 14.2. EMI0CF:外部存储器接口配置寄存器 ................................................ 97 14.3. EMI0TC:外部存储器时序控制寄存器 .............................................. 103 15.1. SFRPAGE:SFR 页寄存器 .............................................................. 111 16.1. IE:中断允许寄存器 .......................................................................... 121 16.2. IP:中断优先级寄存器 ...................................................................... 122 16.3. EIE1:扩展中断允许 1 ...................................................................... 123 16.4. EIP1:扩展中断优先级 1 .................................................................. 124 16.5. EIE2:扩展中断允许 2 ...................................................................... 125 16.6. EIP2:扩展中断优先级 2 .................................................................. 126 16.7. IT01CF:INT0/INT1 配置寄存器 O ................................................... 128 17.1. VDM0CN:VDD 监视器控制寄存器 .................................................. 132 17.2. RSTSRC:复位源寄存器 .................................................................. 134 18.1. PSCTL:程序存储读写控制 .............................................................. 139 18.2. FLKEY:FLASH 锁定和关键码寄存器 .............................................. 140 18.3. FLSCL:定时寄存器 ......................................................................... 141 19.1. CLKSEL:时钟选择寄存器 ............................................................... 144 ??? 1.4 12 C8051F380/1/2/3/4/5/6/7/C SFR 定义 19.2. OSCICL:内部高频振荡器校准寄存器 .............................................. 145 SFR 定义 19.3. OSCICN:内部高频振荡器控制寄存器 ............................................. 146 SFR 定义 19.4. CLKMUL:时钟乘法器控制寄存器 .................................................... 147 SFR 定义 19.5. OSCLCN:内部低频振荡器控制寄存器 ............................................ 148 SFR 定义 19.6. OSCXCN:外部振荡器控制寄存器 ................................................... 152 SFR 定义 20.1. XBR0:端口 I/O 交叉开关寄存器 0 ................................................... 159 SFR 定义 20.2. XBR1:端口 I/O 交叉开关寄存器 1 ................................................... 160 SFR 定义 20.3. XBR2:端口 I/O 交叉开关寄存器 2 ................................................... 161 SFR 定义 20.4. P0:端口 0 寄存器 ............................................................................ 162 SFR 定义 20.5. P0MDIN:端口 0 输入方式寄存器 .................................................... 162 SFR 定义 20.6. P0MDOUT:端口 0 输出方式寄存器 ................................................ 163 SFR 定义 20.7. P0SKIP:端口 0 跳过寄存器 ............................................................ 163 SFR 定义 20.8. P1:端口 1 寄存器 ............................................................................ 164 SFR 定义 20.9. P1MDIN:端口 1 输入方式寄存器 .................................................... 164 SFR 定义 20.10. P1MDOUT:端口 1 输出方式寄存器 .............................................. 165 SFR 定义 20.11. P1SKIP:端口 1 跳过寄存器 ........................................................... 165 SFR 定义 20.12. P2:端口 2 寄存器 .......................................................................... 166 SFR 定义 20.13. P2MDIN:端口 2 输入方式寄存器 .................................................. 166 SFR 定义 20.14. P2MDOUT:端口 2 输出方式寄存器 .............................................. 167 SFR 定义 20.15. P2SKIP:端口 2 跳过寄存器 .......................................................... 167 SFR 定义 20.16. P3:端口 3 寄存器 .......................................................................... 168 SFR 定义 20.17. P3MDIN:端口 3 输入方式寄存器 .................................................. 168 SFR 定义 20.18. P3MDOUT:端口 3 输出方式寄存器 .............................................. 169 SFR 定义 20.19. P3SKIP:端口 3 跳过寄存器 .......................................................... 169 SFR 定义 20.20. P4:端口 4 寄存器 .......................................................................... 170 SFR 定义 20.21. P4MDIN:端口 4 输入方式寄存器 .................................................. 170 SFR 定义 20.22. P4MDOUT:端口 4 输出方式寄存器 .............................................. 171 SFR 定义 21.1. USB0XCN:USB0 收发器控制寄存器 .............................................. 174 SFR 定义 21.2. USB0ADR:USB0 间接地址寄存器 .................................................. 176 SFR 定义 21.3. USB0DAT:USB0 数据寄存器 ......................................................... 177 USB SFR 定义 21.4. INDEX:USB0 端点索引寄存器 ............................................... 179 USB SFR 定义 21.5. CLKREC:时钟恢复控制寄存器 ............................................... 180 USB SFR 定义 21.6. FIFOn:USB0 端点 FIFO 访问寄存器 ...................................... 182 USB SFR 定义 21.7. FADDR:USB0 功能地址寄存器 .............................................. 183 USB SFR 定义 21.8. POWER:USB0 电源控制寄存器 ............................................. 185 USB SFR 定义 21.9. FRAMEL:USB0 帧号低字节 ................................................... 186 USB SFR 定义 21.10. FRAMEH:USB0 帧号高字节 ................................................ 186 USB SFR 定义 21.11. IN1INT:USB0 输入端点中断寄存器 ...................................... 187 USB SFR 定义 21.12. OUT1INT:USB0 输出端点中断寄存器 .................................. 188 USB SFR 定义 21.13. CMINT:USB0 公共中断寄存器 ............................................. 189 USB SFR 定义 21.14. IN1IE:USB0 输入端点中断允许寄存器 ................................. 190 USB SFR 定义 21.15. OUTIE:USB0 输出端点中断允许寄存器 ............................... 191 USB SFR 定义 21.16. CMIE:USB0 公共中断允许寄存器 ........................................ 192 USB SFR 定义 21.17. E0CSR:USB0 端点 0 控制寄存器 ......................................... 195 USB SFR 定义 21.18. E0CNT:USB0 端点 0 数据计数寄存器 .................................. 196 13 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.19. EENABLE:USB0 端点使能寄存器 ........................................ 197 USB SFR 定义 21.20. EINCSRL:USB0 IN 端点控制寄存器低字节 ......................... 199 USB SFR 定义 21.21. EINCSRH:USB0 IN 端点控制寄存器高字节 ......................... 200 USB SFR 定义 21.22. EOUTCSRL:USB0 OUT 端点控制寄存器低字节 ................. 202 USB SFR 定义 21.23. EOUTCSRH:USB0 OUT 端点控制寄存器高字节 ................. 203 USB SFR 定义 21.24. EOUTCNTL:USB0 OUT 端点计数器寄存器低字节 .............. 203 USB SFR 定义 21.25. EOUTCNTH:USB0 OUT 端点计数器寄存器高字节 ............. 204 SFR 定义 22.1. SMB0CF:SMBus 时钟 / 配置寄存器 ............................................... 211 SFR 定义 22.2. SMB1CF:SMBus 时钟 / 配置寄存器 ............................................... 212 SFR 定义 22.3. SMBTC:SMBus 定时控制寄存器 ................................................... 213 SFR 定义 22.4. SMB0CN:SMBus 控制寄存器 ........................................................ 215 SFR 定义 22.5. SMB1CN:SMBus 控制寄存器 ......................................................... 216 SFR 定义 22.6. SMB0ADR:SMBus0 从地址寄存器 ................................................. 218 SFR 定义 22.7. SMB0ADM:SMBus0 从地址掩码寄存器 ......................................... 219 SFR 定义 22.8. SMB1ADR:SMBus1 从地址寄存器 ................................................. 219 SFR 定义 22.9. SMB1ADM:SMBus1 从地址掩码寄存器 ......................................... 220 SFR 定义 22.10. SMB0DAT:SMBus 数据寄存器 ..................................................... 221 SFR 定义 22.11. SMB1DAT:SMBus 数据寄存器 ..................................................... 222 SFR 定义 23.1. SCON0: UART0 控制寄存器 ........................................................... 237 SFR 定义 23.2. SBUF0:UART0 数据缓冲器 ............................................................ 238 SFR 定义 24.1. SCON1: UART1 控制寄存器 ........................................................... 245 SFR 定义 24.2. SMODE1:UART1 方式寄存器 ........................................................ 246 SFR 定义 24.3. SBUF1:UART1 数据缓冲器 ............................................................ 247 SFR 定义 24.4. SBCON1:UART1 波特率发生器控制寄存器 ................................... 248 SFR 定义 24.5. SBRLH1:UART1 波特率发生器高字节 ........................................... 248 SFR 定义 24.6. SBRLL1:UART1 波特率发生器低字节 ............................................ 249 SFR 定义 25.1. SPI0CFG:SPI0 配置寄存器 ............................................................ 257 SFR 定义 25.2. SPI0CN:SPI0 控制寄存器 .............................................................. 258 SFR 定义 25.3. SPI0CKR:SPI0 时钟速率寄存器 ..................................................... 259 SFR 定义 25.4. SPI0DAT:SPI0 数据寄存器 ............................................................. 259 SFR 定义 26.1. CKCON:时钟控制寄存器 ................................................................ 264 SFR 定义 26.2. CKCON1:时钟控制寄存器 1 ........................................................... 265 SFR 定义 26.3. TCON:定时器控制寄存器 ............................................................... 270 SFR 定义 26.4. TMOD:定时器方式寄存器 ............................................................... 271 SFR 定义 26.5. TL0:定时器 0 低字节 ....................................................................... 272 SFR 定义 26.6. TL1:定时器 1 低字节 ....................................................................... 272 SFR 定义 26.7. TH0:定时器 0 高字节 ...................................................................... 273 SFR 定义 26.8. TH1:定时器 1 高字节 ...................................................................... 273 SFR 定义 26.9. TMR2N:定时器 2 控制寄存器 ......................................................... 278 SFR 定义 26.10. TMR2RLL:定时器 2 重载寄存器低字节 ........................................ 279 SFR 定义 26.11. TMR2RLH:定时器 2 重载寄存器高字节 ........................................ 279 SFR 定义 26.12. TMR2L:定时器 2 低字节 ............................................................... 279 SFR 定义 26.13. TMR2H:定时器 2 高字节 .............................................................. 280 SFR 定义 26.14. TMR3CN:定时器 3 控制寄存器 ..................................................... 285 SFR 定义 26.15. TMR3RLL:定时器 3 重载寄存器低字节 ........................................ 286 ??? 1.4 14 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.16. TMR3RLH:定时器 3 重载寄存器高字节 ........................................ 286 SFR 定义 26.17. TMR3L:定时器 3 低字节 ............................................................... 286 SFR 定义 26.18. 定时器 3 高字节 .............................................................................. 287 SFR 定义 26.19. TMR4CN:定时器 4 控制寄存器 ..................................................... 290 SFR 定义 26.20. TMR4RLL:定时器 4 重载寄存器低字节 ........................................ 291 SFR 定义 26.21. TMR4RLH:定时器 4 重载寄存器高字节 ........................................ 291 SFR 定义 26.22. TMR4L:定时器 4 低字节 ............................................................... 291 SFR 定义 26.23. TMR4H:定时器 4 高字节 .............................................................. 292 SFR 定义 26.24. TMR5N:定时器 5 控制寄存器 ....................................................... 295 SFR 定义 26.25. TMR4RLL:定时器 5 重载寄存器低字节 ........................................ 296 SFR 定义 26.26. TMR5RLH:定时器 5 重载寄存器高字节 ........................................ 296 SFR 定义 26.27. TMR5L:定时器 5 低字节 ............................................................... 296 SFR 定义 26.28. TMR5H:定时器 5 高字节 .............................................................. 297 SFR 定义 27.1. PCA0CN:PCA 控制寄存器 ............................................................. 311 SFR 定义 27.2. PCA0MD:PCA 方式寄存器 ............................................................. 312 SFR 定义 27.3. PCA0CPMn:PCA 捕捉 / 比较方式寄存器 ....................................... 313 SFR 定义 27.4. PCA0L:PCA 计数器 / 定时器低字节 ............................................... 314 SFR 定义 27.5. PCA0H:PCA 计数器 / 定时器高字节 ............................................... 314 SFR 定义 27.6. PCA0CPLn:PCA 捕捉模块低字节 .................................................. 315 SFR 定义 27.7. PCA0CPHn:PCA 捕捉模块高字节 .................................................. 315 C2 寄存器定义 28.1. C2ADD:C2 地址寄存器 .......................................................... 316 C2 寄存器定义 28.2. DEVICEID:C2 器件 ID 寄存器 ................................................ 317 C2 寄存器定义 28.3. REVID:C2 版本 ID 寄存器 ...................................................... 317 C2 寄存器定义 28.4. FPCTL:C2 Flash 编程控制寄存器 .......................................... 318 C2 寄存器定义 28.5. FPDAT:C2 Flash 编程数据寄存器 .......................................... 318 15 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 1. 系统概述 C8051F380/1/2/3/4/5/6/7/C 器件是完全集成的混合信号片上系统型 MCU。下面列出了一些主要特性,有关 某一产品的具体特性参见表 1.1。 高速、流水线结构的 8051 兼容的微控制器内核 (可达 48 MIPS) 全速、非侵入式的在系统调试接口 (片内) 通用串行总线 (USB) 功能控制器,有 8 个灵活的端点管道,集成收发器和 1 kB FIFO RAM 电源稳压器 真正 10 位 500 ksps 的差分 / 单端 ADC,带模拟多路器 片内电压基准和和温度传感器 片内电压比较器 ( 两个 ) 精确校准的 48 MHz 内部振荡器 内部低频振荡器,提供附加的节电能力 多达 64 kB 的片内 FLASH 存储器 多达 4352 字节片内 RAM (256 + 4 kB) 48 脚封装具有外部存储器接口 (EMIF) 硬件实现的两个 I2C/SMBus, 两个 UART 和增强型 SPIrit 串行接口 6 个通用 16 位定时器 具有 5 个捕捉 / 比较模块和看门狗定时器功能的可编程计数器 / 定时器阵列 (PCA) 片内上电复位、 VDD 监视器和时钟丢失检测器 多达 40 个端口 I/O ( 容许 5 V 输入 ) 具有片内上电复位、 VDD 监视器、电压调整器、看门狗定时器和时钟振荡器的 C8051F380/1/2/3/4/5/6/7/C 器件是真正能独立工作的片上系统解决方案。 FLASH 存储器具有在系统重新编程能力,可须知于非易失性 数据存储,并允许现场更新 8051 固件。用户软件对所有外设具有完全的控制,可以关断任何一个或所有外 设以节省功耗。 片内 Silicon Labs 二线 (C2) 开发接口允许使用安装在最终应用系统上的产品 MCU 进行非侵入式 (不占用 片内资源)、全速、在系统调试。调试逻辑支持观察和修改存储器和寄存器,支持断点、单步、运行和停机 命令。在使用 C2 进行高度时,所有的模拟和数字外设都可全功能运行。两个 C2 接口引脚可以与用户功能 共享,使在系统编程和高度功能不占用封装引脚。 每种器伯都可在工业温度范围 (–40 to +85 °C) 片用 2.7–5.25 V 的电压工作。电源电压大于 3.6V 时,必须使 用内部稳压器。对于 USB 通信,电源电压最小值为 3.0V。端口 I/O 和 RST 引脚都容许 5V 的输入信号电 压。 C8051F380/1/2/3/4/5/6/7/C 具有 48 脚 TQFP、 32- 脚 LQFP 和 32 脚 QFN 封装。特性和封装选择见 第 17 页中 “ 表 1.1 产品选择指南 ”。 ??? 1.4 16 C8051F380/1/2/3/4/5/6/7/C 器件型号 MIPS (峰值) Flash 存储器 (字节) RAM 校准的内部振荡器 低频振荡器 USB (带 1k 端点 RAM) 电源电压调整器 SMBus/I2C 增强型 SPI UARTs 定时器 (16 位) 可编程计数器阵列 可数字端口 I/O 外部存储器接口 (EMIF) 10- 位 500ksps ADC 温度传感器 电压基准 模拟比较器 封装 表 1.1. 产品选择指南 C8051F380-GQ 48 64k 4352 P P P P 2 P 2 6 P 40 P P P P 2 TQFP48 C8051F381-GQ 48 64k 4352 P P P P 2 P 2 6 P 25 — P P P 2 LQFP32 C8051F381-GM 48 64k 4352 P P P P 2 P 2 6 P 25 — P P P 2 QFN32 C8051F382-GQ 48 32k 2304 P P P P 2 P 2 6 P 40 P P P P 2 TQFP48 C8051F383-GQ 48 32k 2304 P P P P 2 P 2 6 P 25 — P P P 2 LQFP32 C8051F383-GM 48 32k 2304 P P P P 2 P 2 6 P 25 — P P P 2 QFN32 C8051F384-GQ 48 64k 4352 P P P P 2 P 2 6 P 40 P — — — 2 TQFP48 C8051F385-GQ 48 64k 4352 P P P P 2 P 2 6 P 25 — — — — 2 LQFP32 C8051F385-GM 48 64k 4352 P P P P 2 P 2 6 P 25 — — — — 2 QFN32 C8051F386-GQ 48 32k 2304 P P P P 2 P 2 6 P 40 P — — — 2 TQFP48 C8051F387-GQ 48 32k 2304 P P P P 2 P 2 6 P 25 — — — — 2 LQFP32 C8051F387-GM 48 32k 2304 P P P P 2 P 2 6 P 25 — — — — 2 QFN32 17 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 端口 I/O 配置 C2D 调试 / 编程硬件 数字外设 C2CK/RST 复位 上电复位 VDD V REG UART1 定时器 0, 1, 2, 3, 4, 5 64/32 KB ISP FLASH 程序存储器 电源 监视器 端口 0 驱动器 UART0 CIP-51 8051 控制器核 优先权 交叉开关 译码器 PCA/WDT 电源 网络 稳压器 端口 1 驱动器 SMBus0 256 字节 RAM SPI 交叉开关控制 GND 系统时钟 XTAL1 XTAL2 SFR 总线 外部存储器接口 外部振荡器 P1 控制 P4 数据 时钟 恢复电路 低频 振荡器 USB 外设 D+ VBUS 端口 3 驱动器 P3. 0 P3. 1 P3. 2 P3. 3 P3. 4 P3. 5 P3. 6 P3. 7 端口 4 驱动器 P4. 0 P4. 1 P4. 2 P4. 3 P4. 4 P4. 5 P4. 6 P4. 7 P2 / P3 地址 内部振荡器 D- 端口 2 驱动器 P2. 0 P2. 1 P2. 2 P2. 3 P2. 4 P2. 5 P2. 6 P2. 7 SMBus1 4/2 KB XRAM 全速 / 低速 收发器 模拟外设 CP0 VREF VDD VR EF + + - 2 个比较器 控制器 1 KB RAM CP1 P0. 0 P0. 1 P0. 2 P0. 3 P0. 4 P0. 5 P0. 6/XTAL1 P0. 7/XTAL2 P1. 0 P1. 1 P1. 2 P1. 3 P1. 4/CNVSTR P1. 5/VREF P1. 6 P1. 7 1 0位 5 00 ksp s AD C A M U X VD D AIN0 - AIN19 温度 传感器 图 1.1. 8051F380/2/4/6 原理图框 ??? 1.4 18 C8051F380/1/2/3/4/5/6/7/C 端口 I/O 配置 C 2D 调试 / 编程硬件 数字外设 C2CK/RST 复位 上电复位 VDD VRE G UART1 定时器 0, 1, 2, 3, 4, 5 64/32 KB ISP FLASH 程序存储器 电源 监视器 端口 0 驱动器 UART0 CIP-51 8051 控制器核 优先权 交叉开关 译码器 PCA/WDT 电源 网络 稳压器 256 字节 RAM SMBus0 SMBus1 4/2 KB XRAM 端口 2 驱动器 SPI GND 系统时钟 XTAL1 XTAL2 端口 1 驱动器 SFR Bus 交叉开关控制 端口 3 驱动器 内部振荡器 低频 振荡器 模拟外设 C P0 VREF USB 外设 D+ DVBUS VD D VREF 1 KB RAM C P1 1 0位 5 00 k sp s A DC A M U X 图 1.2. C8051F381/3/5/7 原理图框 19 + + - 2 个比较器 控制器 全速 / 低速 收发器 ??? 1.4 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 P3.0/C2D 外部振荡器 时钟 恢复电路 P0.0 P0.1 P0.2/XTAL1 P0.3/XTAL2 P0.4 P0.5 P0.6/CNVS TR P0.7/VREF VDD 温度 传感器 AIN0 - AIN2 0 C8051F380/1/2/3/4/5/6/7/C 2. C8051F34x 兼容性 C8051F38x 系列是为替换 C8051F34x 系列而设计的,引脚和代码与 C8051F34x 兼容,但具有一些增强特 性。在大多数应用中, C8051F38x 器件可直接替换 C8051F34x 器件。表 2.1 列出了替换 C8051F34x 器件 的推荐型号。在将现有的 C8051F34x 设计升级到 C8051F38x 时,参见 “2.1. 硬件不兼容性 ” ,以确定是否 有需要改变之处。 表 2.1. C8051F38x 替换型号 C8051F34x 型号 C8051F38x 型号 C8051F340-GQ C8051F380-GQ C8051F341-GQ C8051F382-GQ C8051F342-GQ C8051F381-GQ C8051F342-GM C8051F381-GM C8051F343-GQ C8051F383-GQ C8051F343-GM C8051F383-GM C8051F344-GQ C8051F380-GQ C8051F345-GQ C8051F382-GQ C8051F346-GQ C8051F381-GQ C8051F346-GM C8051F381-GM C8051F347-GQ C8051F383-GQ C8051F347-GM C8051F383-GM C8051F348-GQ C8051F386-GQ C8051F349-GQ C8051F387-GQ C8051F349-GM C8051F387-GM C8051F34A-GQ C8051F381-GQ C8051F34A-GM C8051F381-GM C8051F34B-GQ C8051F383-GQ C8051F34B-GM C8051F383-GM C8051F34C-GQ C8051F384-GQ C8051F34D-GQ C8051F385-GQ ??? 1.4 20 C8051F380/1/2/3/4/5/6/7/C 2.1. 硬件不兼容性 由于 C8051F38x 系列包含一些 C8051F34x 系列所没有的新特性,在进行设计移植时应考虑这些新特性所 带来的差异。 时钟乘法器:C8051F38x 不包含 C8051F34x 系列器件中的 4x 时钟乘法器。这一变化只影响那些使用外 部振荡源且需时钟乘法器的系统。 外部振荡器 C 和 RC 方式:C8051F38x 外部振荡器的 C 和 RC 方式有二分频环节,以提高抗噪声干扰能 力。 C8051F34x 系列器件中没有该环节,因此用 C 和 RC 方式产生时钟时需做相应改变。 生产工艺:C8051F38x 所采用的工艺与 C8051F34 不同。因此,很多电气性能参数会有细微的差异。大 多数系统不受这些差异的影响,但对设计吕用到的任何功能块的电气特性进行仔细检查是非常重要的, 这样可以确保与现有硬件兼容。 21 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 3. 引脚和封装定义 表 3.1. C8051F380/1/2/3/4/5/6/7/C 引脚定义 引脚名称 引脚号 引脚类型 说明 48- 脚 32- 脚 VDD 10 6 GND 7 3 RST/ 13 9 C2CK 电源输入 电源输出 2.7–3.6 V 电源电压输入 3.3 V 稳压器输出。 地。 数字 I/O 器件复位。内部上电复位或 VDD 监视器的漏极开路输 出。一个外部源可以通过将该引脚驱动为低电平 (至 少 µs)来启动一次系统复位。 数字 I/O C2 调试接口的时钟信号。 C2D 14 — 数字 I/O C2 调试接口的双向数据信号 P3.0 / — 10 数字 I/O 端口 3.0。端口 3 的详细描述见第 20 章。 数字 I/O C2 调试接口的双向数据信号。 C2D REGIN 11 7 电源输入 5V 稳压器输入。该引脚是片内稳压器的输入。 VBUS 12 8 数字输入 VBUS 检测输入。该引脚应被连接到 USB 网络的 VBUD 信号。该引脚上出现 5V 信号表示与 USB 网络 连接。 D+ 8 4 数字 I/O USB 的 D+. D- 9 5 数字 I/O USB 的 D–. P0.0 6 2 数字 I/O 或 模拟输入 端口 0.0。端口 0 的详细描述见第 20 章。 P0.1 5 1 数字 I/O 或 模拟输入 端口 0.1 P0.2 4 32 数字 I/O 或 模拟输入 端口 0.2 P0.3 3 31 数字 I/O 或 模拟输入 端口 0.3 P0.4 2 30 数字 I/O 或 模拟输入 端口 0.4 P0.5 1 29 数字 I/O 或 模拟输入 端口 0.5 P0.6 48 28 数字 I/O 或 模拟输入 端口 0.6 ??? 1.4 22 C8051F380/1/2/3/4/5/6/7/C 表 3.1. C8051F380/1/2/3/4/5/6/7/C 引脚定义 引脚名称 引脚号 引脚类型 说明 48- 脚 32- 脚 P0.7 47 27 数字 I/O 或 模拟输入 端口 0.7 P1.0 46 26 数字 I/O 或 模拟输入 端口 1.0。端口 1 的详细描述见第 20 章。 P1.1 45 25 数字 I/O 或 模拟输入 端口 1.1 P1.2 44 24 数字 I/O 或 模拟输入 端口 1.2 P1.3 43 23 数字 I/O 或 模拟输入 端口 1.3 P1.4 42 22 数字 I/O 或 模拟输入 端口 1.4 P1.5 41 21 数字 I/O 或 模拟输入 端口 1.5 P1.6 40 20 数字 I/O 或 模拟输入 端口 1.6 P1.7 39 19 数字 I/O 或 模拟输入 端口 1.7 P2.0 38 18 数字 I/O 或 模拟输入 端口 2.0。端口 2 的详细描述见第 20 章。 P2.1 37 17 数字 I/O 或 模拟输入 端口 2.1 P2.2 36 16 数字 I/O 或 模拟输入 端口 2.2 P2.3 35 15 数字 I/O 或 模拟输入 端口 2.3 P2.4 34 14 数字 I/O 或 模拟输入 端口 2.4 P2.5 33 13 数字 I/O 或 模拟输入 端口 2.5 P2.6 32 12 数字 I/O 或 模拟输入 端口 2.6 P2.7 31 11 数字 I/O 或 模拟输入 端口 2.7 23 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 表 3.1. C8051F380/1/2/3/4/5/6/7/C 引脚定义 引脚名称 引脚号 引脚类型 说明 48- 脚 32- 脚 P3.0 30 — 数字 I/O 或 模拟输入 端口 3.0。端口 3 的详细描述见第 20 章。 P3.1 29 — 数字 I/O 或 模拟输入 端口 3.1 P3.2 28 — 数字 I/O 或 模拟输入 端口 3.2 P3.3 27 — 数字 I/O 或 模拟输入 端口 3.3 P3.4 26 — 数字 I/O 或 模拟输入 端口 3.4 P3.5 25 — 数字 I/O 或 模拟输入 端口 3.5 P3.6 24 — 数字 I/O 或 模拟输入 端口 3.6 P3.7 23 — 数字 I/O 或 模拟输入 端口 3.7 P4.0 22 — 数字 I/O 或 模拟输入 端口 4.0。端口 4 的详细描述见第 20 章。 P4.1 21 — 数字 I/O 或 模拟输入 端口 4.1 P4.2 20 — 数字 I/O 或 模拟输入 端口 4.2 P4.3 19 — 数字 I/O 或 模拟输入 端口 4.3 P4.4 18 — 数字 I/O 或 模拟输入 端口 4.4 P4.5 17 — 数字 I/O 或 模拟输入 端口 4.5 P4.6 16 — 数字 I/O 或 模拟输入 端口 4.6 P4.7 15 — 数字 I/O 或 模拟输入 端口 4.7 ??? 1.4 24 P0.6 P0.7 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P2.0 P2.1 47 46 45 44 43 42 41 40 39 38 37 48 C8051F380/1/2/3/4/5/6/7/C P0.5 1 36 P2.2 P0.4 2 35 P2.3 P0.3 3 34 P2.4 P0.2 4 33 P2.5 P0.1 5 32 P2.6 P0.0 6 31 P2.7 GND 7 30 P3.0 D+ 8 29 P3.1 D- 9 28 P3.2 VDD 10 27 P3.3 REGIN 11 26 P3.4 VBUS 12 25 P3.5 19 20 21 22 23 24 P4.2 P4.1 P4.0 P3.7 P3.6 17 P4.5 P4.3 16 P4.6 18 15 P4.7 P4.4 14 C2D /RST / C2CK 13 C8051F380/2/4/6-GQ 顶视图 图 3.1. TQFP-48 引脚图 ( 顶视图 ) 25 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 图 3.2. TQFP-48 封装图 表 3.2. TQFP-48 封装尺寸 尺寸 A A1 A2 b c D D1 e 注: 1. 2. 3. 4. 最小值 — 0.05 0.95 0.17 0.09 典型值 — — 1.00 0.22 — 9.00 BSC 7.00 BSC 0.50 BSC 最小值 1.20 0.15 1.05 0.27 0.20 尺寸 E E1 L aaa bbb ccc ddd q 最小值 0.45 0° 典型值 9.00 BSC 7.00 BSC 0.60 0.20 0.20 0.08 0.08 3.5° 最小值 0.75 7° 除特别注意外,所有尺寸均以毫米 (mm)为单位。 尺寸和公差依照 ANSI Y14.5M-1994。 该封装外形符合 JEDEC MS-026,变体 ABC。 建议采用 JEDEC/IPC J-STD-020 对小型元件规定的回流焊温度曲线。 ??? 1.4 26 C8051F380/1/2/3/4/5/6/7/C 图 3.3. 推荐的 TQFP-48 PCB 焊盘图 表 3.3. TQFP-48 PCB 焊盘布局尺寸 尺寸 C1 C2 E X1 Y1 最小值 8.30 8.30 最大值 8.40 8.40 0.50 BSC 0.20 1.40 0.30 1.50 注: 通用 1. 除非特别注明,所有尺寸均以毫米 (mm) 为单位。 2. 本焊盘图设计基于 IPC-7351 指南。 阻焊层设计: 3. 所有金属焊盘均定义为非阻焊 (NSMD)。阻焊层与金属焊盘之间的间距 (焊 盘的四周)至少为 60 µm。 模版设计 4. 应使用激光切割的电抛光的梯形壁不锈钢模板,以确保良好的焊膏释放。 5. 模板厚度为 0.125 mm (5 密尔 )。 6. 所有外围引脚的模板开孔与焊盘尺寸的比例应为 1:1。 卡组装 7. 建议使用免清洗的 3 型焊膏。 8. 建议采用 JEDEC/IPC J-STD-020 对小型元件规定的回流焊温度曲线。 27 ??? 1.4 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P1.0 P1.1 31 30 29 28 27 26 25 32 C8051F380/1/2/3/4/5/6/7/C P0.1 1 24 P1.2 P0.0 2 23 P1.3 GND 3 22 P1.4 D+ 4 21 P1.5 D- 5 20 P1.6 VDD 6 19 P1.7 REGIN 7 18 P2.0 VBUS 8 17 P2.1 14 15 16 P2.4 P2.3 P2.2 12 P2.6 13 11 P2.7 P2.5 10 P3.0 / C2D /RST / C2CK 9 C8051F381/3/5/7-GQ 顶视图 图 3.4. LQFP-32 引脚图 ( 顶视图 ) ??? 1.4 28 C8051F380/1/2/3/4/5/6/7/C 图 3.5. LQFP-32 封装图 表 3.4. LQFP-32 封装尺寸 尺寸 A A1 A2 b c D D1 e 注: 1. 2. 3. 4. 29 最小值 — 0.05 1.35 0.30 0.09 典型值 — — 1.40 0.37 — 9.00 BSC 7.00 BSC 0.80 BSC 最大值 1.60 0.15 1.45 0.45 0.20 尺寸 E E1 L aaa bbb ccc ddd q 除特别注明外,所有尺寸均以毫米 (mm)为单位。 尺寸和公差依照 ANSI Y14.5M-1994。 该封装外形符合 JEDEC MS-026, 变体 BBA。 建议采用 JEDEC/IPC J-STD-020 对小型元件规定的回流焊温度曲线。 ??? 1.4 最小值 0.45 0° 典型值 9.00 BSC 7.00 BSC 0.60 0.20 0.20 0.10 0.20 3.5° 最大值 0.75 7° C8051F380/1/2/3/4/5/6/7/C 图 3.6. 推荐的 LQFP-32 PCB 焊盘图 表 3.5. LQFP-32 PCB 焊盘布局尺寸 尺寸 C1 C2 E X1 Y1 最小值 8.40 8.40 最大值 8.50 8.50 0.80 BSC 0.40 1.25 0.50 1.35 注: 通用 1. 除非特别注明,所有尺寸均以毫米 (mm) 为单位。 2. 本焊盘图设计基于 IPC-7351 指南。 阻焊层设计: 3. 所有金属焊盘均定义为非阻焊 (NSMD)。阻焊层与金属焊盘之间的间距 (焊 盘的四周)至少为 60 µm。 模版设计 4. 应使用激光切割的电抛光的梯形壁不锈钢模板,以确保良好的焊膏释放。 5. 模板厚度为 0.125 mm (5 密尔 )。 6. 所有外围引脚的模板开孔与焊盘尺寸的比例应为 1:1。 卡组装 7. 建议使用免清洗的 3 型焊膏。 8. 建议采用 JEDEC/IPC J-STD-020 对小型元件规定的回流焊温度曲线。 ??? 1.4 30 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P1.0 P1.1 31 30 29 28 27 26 25 32 C8051F380/1/2/3/4/5/6/7/C P0.1 1 24 P1.2 P0.0 2 23 P1.3 GND 3 22 P1.4 D+ 4 21 P1.5 D– 5 20 P1.6 VDD 6 19 P1.7 REGIN 7 18 P2.0 17 P2.1 C8051F381/3/5/7-GM 顶视图 GND (optional) 10 11 12 13 14 15 16 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 RST / C2CK P3.0 / C2D 8 9 VBUS 图 3.7. QFN-32 引脚图 ( 顶视图 ) 31 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 图 3.8. QFN-32 封装图 表 3.6. QFN-32 封装尺寸 尺寸 A A1 b D D2 e E 最小值 0.80 0.00 0.18 3.20 典型值 0.85 0.02 0.25 5.00 BSC 3.30 0.50 BSC 5.00 BSC 最大值 0.90 0.05 0.30 3.40 尺寸 E2 L aaa bbb ddd eee 最小值 3.20 0.35 — — — — 典型值 3.30 0.40 — — — — 最大值 3.40 0.45 0.10 0.10 0.05 0.08 注: 1. 除特别注明外,所有尺寸均以毫米 (mm) 为单位。 2. 尺寸和公差依照 ANSI Y14.5M-1994。 3. 该封装外形符合 JEDEC MS-220, 变体 VHHD。但定制特性 D2、 E2 和 L 除外,它们的公差由供 应商指定。 4. 建议采用 JEDEC/IPC J-STD-020 对小型元件规定的回流焊温度曲线。 ??? 1.4 32 C8051F380/1/2/3/4/5/6/7/C 图 3.9. 推荐的 QFN-32 PCB 焊盘图 表 3.7. QFN-32 PCB 焊盘布局尺寸 尺寸 C1 C2 E X1 最小值 最大值 4.80 4.90 4.80 4.90 0.50 BSC 0.20 0.30 尺寸 X2 Y1 Y2 最小值 3.20 0.75 3.20 最大值 3.40 0.85 3.40 注: 通用 1. 除非特别注明,所有尺寸均以毫米 (mm) 为单位。 2. 本焊盘图设计基于 IPC-7351 指南。 阻焊层设计: 3. 所有金属焊盘均定义为非阻焊 (NSMD)。阻焊层与金属焊盘之间的间距 (焊盘的四周)至少 为 60 µm。 模版设计 4. 应使用激光切割的电抛光的梯形壁不锈钢模板,以确保良好的焊膏释放。 5. 模板厚度为 0.125 mm (5 密尔)。 6. 所有外围引脚的模板开孔与焊盘尺寸的比例应为 1:1。 卡组装 7. 建议使用免清洗的 3 型焊膏。 8. 建议采用 JEDEC/IPC J-STD-020 对小型元件规定的回流焊温度曲线。 33 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 4. 典型连接图 本节提供 C8051F38x 设备的典型连接图 4.1. 电源 图 4.1 显示在有使用内部稳压器但未使用 USB 时, C8051F38x 设备电源引脚的典型连接图。 C8051F38x 设备 3.6-5.25 V(输入) 稳压器 REGIN 3.3 V(输出) 1 µF 及 0.1 µF 旁路各个电源引脚所必 需的电容器,尽可能靠 近引脚放置。 VDD VBUS GND 图 4.1. 有使用稳压器但无 USB 的连接图 图 4.2 显示在未使用内部稳压器和无 USB 时, C8051F38x 设备电源引脚的典型连接图。 C8051F38x 设备 2.7-3.6 V(输入) 稳压器 REGIN 1 µF 及 0.1 µF 旁路各个电源引脚所必 需的电容器,尽可能靠 近引脚放置。 VDD VBUS GND 图 4.2. 未使用稳压器和无 USB 的连接图 图 4.3 显示在有使用内部稳压器且连接 USB( 总线供电 ) 时,C8051F38x 设备电源引脚的典型连接图。VBUS 信号用来检测何时 USB 连接至主机设备,且用 100 Ω 的限流电阻器显示。建议该限流电阻器用于会遇到静 ??? 1.4 34 C8051F380/1/2/3/4/5/6/7/C 电泄放 (ESD)、闩锁效应且极有机会与无相同接地电位的系统共享信号的系统。这对大多数应用来说,并非 必要部件。 ӻᔰ䇤θ䶔ᗻ䴶 USB 5 Vδ䗉ޛε C8051F38x 䇴༽ 100 ȍ VBUS 3.3 Vδ䗉࠰ε 1 μF 0.1 μF 䐥Ѡ⭫Ⓠᕋ㝐ᡶᗻ 䴶Ⲻ⭫ᇯಞθታਥ㜳䶖 䘇ᕋ㝐᭴㖤Ⱦ どুಞ REGIN VDD GND 图 4.3. 有使用稳压器且连接 USB 的连接图 (总线供电) 图 4.4 显示在有使用内部稳压器且连接 USB 时,C8051F38x 设备电源引脚的典型连接图(自供电)。VBUS 信号用来检测何时 USB 连接至主机设备,且用 100 Ω 的限流电阻器显示。建议该限流电阻器用于会遇到静 电泄放 (ESD)、闩锁效应且极有机会与无相同接地电位的系统共享信号的系统。这对大多数应用来说,并非 必要部件。 ӻѰᔰ䇤θ䶔ᗻ䴶 USB 5 VδỶ⎁ε 3.6-5.25 Vδ䗉ޛε 1 μF 0.1 μF 䐥Ѡ⭫Ⓠᕋ㝐ᡶᗻ 䴶Ⲻ⭫ᇯಞθታਥ㜳䶖 䘇ᕋ㝐᭴㖤Ⱦ C8051F38x 䇴༽ 100 ȍ VBUS 3.3 Vδ䗉࠰ε REGIN VDD GND 图 4.4. 有使用稳压器且连接 USB 的连接图 (自供电) 35 ??? 1.4 どুಞ C8051F380/1/2/3/4/5/6/7/C 4.2. USB 图 4.5 显示 C8051F38x 设备的 USB 引脚典型连接图,包括 VBUS 检测引脚上的 100 Ω 限流电阻器和 USB 引脚上的 ESD 保护二极管。建议该限流电阻器用于会遇到静电泄放 (ESD)、闩锁效应且极有机会与无相同 接地电位的系统共享信号的系统。这对大多数应用来说,并非必要部件。 ӻѰᔰ䇤θ䶔ᗻ䴶 USB 䘔ಞ C8051F38x 䇴༽ 100 ȍ VBUS VBUS D+ USB D+ D- D- ؗਭ GND SP0503BAHT ᡌੂㅿ USB ESD ؓᣚӂᶷ㇗ GND 图 4.5. USB 引脚连接图 4.3. 参考电压 (VREF) 图 4.6 显示在使用内部参考电压时,C8051F38x 设备的参考电压 (VREF) 引脚典型连接图。当使用外部参考 电压时,查阅适当设备的数据表,以获得连接建议。 C8051F38x 设备 2.42 V(输出) 参考电压 4.7 µF 及 0.1 µF 旁路各个电源引脚所必需 的电容器,尽可能靠近引 脚放置。 VREF GND 图 4.6. 内部参考电压连接图 ??? 1.4 36 C8051F380/1/2/3/4/5/6/7/C 37 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 5. 电气特性 5.1. 极限参数 表 5.1. 极限参数 参数 条件 结温 (通电情况下) 储存温度 RST、 VBUS 或有关 GND 任何端 口 I/O 引脚上的电压 VDD 相对 GND 的电压 VDD > 2.2 V VDD < 2.2 V 稳压器 1 正常方式 稳压器 1 旁路方式 通过 VDD 或 GND 的最大总电流 RST 或任何端口引脚的最大输出 灌电流 最小值 典型值 最大值 单位 –55 –65 –0.3 –0.3 –0.3 –0.3 — — — — — — — — — — 125 150 5.8 VDD+ 3.6 4.2 1.98 500 100 °C °C V V V V mA mA 注意 : 超过这些列出的 “ 极限参数 ” 可能导致器件永久性损坏。这只是负荷等级,并不表示器件在上述或高于规格操 作列表所指的任何其它条件下的功能操作。长时间的最大允许值或超过最大允许值的条件下工作可能影响器件 的可靠性。 ??? 1.4 37 C8051F380/1/2/3/4/5/6/7/C 5.2. 总体电气特性 表 5.2. 总体电气特性 –40 to +85 °C, 25 MHz 系统时钟 (除非特别说明)。 参数 数字电源电压 测量条件 最小值 典型值 最大值 单位 VRST1 — 0 –40 3.3 1.5 — — 3.6 — 48 +85 V V MHz °C — — — — 12 7 0.45 280 14 8 0.85 — mA mA mA µA — — — — — 6.5 3.5 0.35 220 1 8 5 — — — mA mA mA µA µA 振荡器不运行 (停止或挂起方式), REG0 和 REG1 均处于低功耗方式, VDD = 3.3 V. — 100 — µA 振荡器不运行 (停机或挂起方式), REG0 关断,VDD = 3.3 V. USB 时钟 = 48 MHz, VDD = 3.3 V — 150 — µA — 8 — mA 1 RAM 数据保持电源电压 SYSCLK (系统时钟) 2 额定工作温度范围 数字电源电流 —CPU 活动 (正常方式,从 FLASH 中取指令) IDD3 SYSCLK = 48 MHz, VDD = 3.3 V SYSCLK = 24 MHz, VDD = 3.3 V SYSCLK = 1 MHz, VDD = 3.3 V SYSCLK = 80 kHz, VDD = 3.3 V 数字电源电流 —CPU 不活动 (空闲方式,从 FLASH 中取指令) 空闲 IDD3 数字电源电流 (停止、挂起 或判断方式) USB 模块数字电源电流 (USB 处于活动状态 4) 注: 1. 2. 3. 4. 38 SYSCLK = 48 MHz, VDD = 3.3 V SYSCLK = 24 MHz, VDD = 3.3 V SYSCLK = 1 MHz, VDD = 3.3 V SYSCLK = 80 kHz, VDD = 3.3 V 振荡器不运行 (停机方式), 内部稳压器关断, VDD = 3.3 V USB 需要最小 3.0 V 的电源电压。 为能使用高度功能, SYSCLK 至少应为 32 kHz。 包括 REG0 和 REG1 正常方式的偏置电流。不包括内部振荡器、 USB 或其它模拟外设的电流。 当 USB 上拉被使能时, D+ 或 D- 上拉另有 220uA 的电流。 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 表 5.3. 端口 I/O 直流电气特性 VDD = 2.7 to 3.6 V, –40 to +85 °C (除非特别注明)。 参数 测量条件 最小值 典型值 最大值 单位 输出高电平 IOH = –3 mA,端口 I/O 为推挽方式 IOH = –10 µA,端口 I/O 为推挽方式 IOH = –10 mA,端口 I/O 为推挽方式 VDD – 0.7 VDD – 0.1 — — — VDD – 0.8 — — — V 输出低电平 IOL = 8.5 mA IOL = 10 µA IOL = 25 mA — — — — — 1.0 0.6 0.1 — V 输入高电平 2.0 — — V 输入低电平 — — 0.8 V — — — 15 ±1 50 µA 输入漏电流 弱上拉禁止 弱上拉使能 On, VIN = 0 V 表 5.4. 复位电气特性 –40 to +85 °C (除非特别注明)。 参数 测量条件 最小值 典型 值 最大值 单位 IOL = 8.5 mA, VDD = 2.7 V to 3.6 V — — 0.6 V RST 输入高电平 0.7 x VDD — — V RST 输入低电平 — — 0.3 x VDD V — 15 40 µA 2.60 2.65 2.70 V RST 输出低电平 RST 输入上拉电流 RST = 0.0 V VDD 监视器门限 (VRST) 时钟丢失检测器超时 从最后一个系统时钟上升沿到 复位启动 80 580 800 µs 复位时间延迟 从任何复位源解除到开始执行 位于 0x0000 地址的代码之间 的延时 — — 250 µs 产生系统复位的最小 RST 低电 平时间 15 — — µs VDD 监视器启动时间 — — 100 µs VDD 监视器电源电流 — 15 50 µA ??? 1.4 39 C8051F380/1/2/3/4/5/6/7/C 表 5.5. I 内部稳压器电气特性 –40 to +85 °C (除非特别注明)。 参数 测量条件 最小值 典型值 最大值 单位 稳压器 (REG0) 输入电压范围 1 输出电压 (VDD) 2 输出电流 = 1 to 100 mA 2.7 — 5.25 V 3.0 3.3 3.6 V 输出电流 2 — — 100 mA 电压降落 (VDO)3 — 1 — mV/mA 1.8 — 3.6 V 稳压器 REG1 输入电压范围 注: 1. 额定稳压输入范围。当使用外部稳压器时,应接 VDD。 2. 输出电流为总调整电流,包括 C8051F380/1/2/3/4/5/6/7/C 所需要的任何电流。 3. 最小输入电压为 2.70 V 和 VDD + VDO (最大负载)中之最大者。 表 5.6. Flash 电气特性 参数 Flash 大小 条件 最小值 典型值 最大值 单位 C8051F380/1/4/5* C8051F382/3/6/7 65536* 32768 10k 10 10 — — 字节 字节 100k 15 15 — 22.5 20 擦/写 ms 擦写寿命 擦除时间 写入时间 25 MHz 系统时钟 25 MHz 系统时钟 注: 1. 位于地址 0xFC00-0xFFFF 的 1024 字节不能用于程序存储。 2. 在 “ 季度质量和可靠性报告 ” 中发布了 “ 数据保留信息 ”。 40 ??? 1.4 µs C8051F380/1/2/3/4/5/6/7/C 表 5.7. 内部高频振荡器电气特性 VDD = 2.7 to 3.6 V ; TA = –40 to +85 °C (除非特别注明);使用出厂校准设置。 参数 测量条件 最小值 典型值 最大值 单位 IFCN = 11b 47.3 48 48.7 MHz 25 °C, VDD = 3.0 V, OSCICN.7 = 1, OCSICN.5 = 0 — 900 — µA 电源敏感度 恒度 — 110 — ppm/V 温度敏感度 恒压 — 25 — ppm/°C 振荡器频率 振荡器供电电流 (自 VDD) 表 5.8. 内部低频振荡器电气特性 VDD = 2.7 to 3.6 V ; TA = –40 to +85 °C (除非特别注明);使用出厂标准设置。 参数 测量条件 最小值 典型值 最大值 单位 OSCLD = 11b 75 80 85 kHz 25 °C, VDD = 3.0 V, OSCLCN.7 = 1 — 4 — µA 电源敏感度 恒度 — 0.05 — %/V 温度敏感度 恒压 — 65 — ppm/°C 最小值 典型值 最大值 单位 0.02 — 30 MHz 0 — 48 MHz 振荡器频率 振荡器供电民流 (自 VDD) 表 5.9. 外部振荡器电气特性 VDD = 2.7 to 3.6 V ; TA = –40 to +85 °C (除非特别注明)。 参数 测量条件 外部晶体频率 外部 CMOS 振荡器频率 ??? 1.4 41 C8051F380/1/2/3/4/5/6/7/C 表 5.10. ADC0 电气特性 VDD = 3.0 V, VREF = 2.40 V (REFSL=0), PGA 增益 = 1, –40 to +85 °C (除非特别注明) 参数 测量条件 最小值 典型值 最大值 单位 直流精度 分辨率 位 10 积分非线性 — ±0.5 ±1 LSB — ±0.5 ±1 LSB 偏移误差 –2 0 2 LSB 满度误差 –5 –2 0 LSB 偏移温度系数 — 0.005 — LSB/°C 55 58 — dB — –73 — dB — 78 — dB — — 8.33 MHz 13 11 — — — — 时钟 时钟 300 — — ns — — 500 ksps 单端 (AIN+ – GND) 0 — VREF V 差分 (AIN+ – AIN–) –VREF — VREF V 单端或差分 0 — VDD V 采样电容 — 30 — pF 输入多路器阻抗 — 5 — kW — 750 1000 µA — 1 — mV/V 微分非线性 保证单调 动态性能 (10 kHz 正弦波单端输入 , 满度值之 1 dB, 500 ksps) 信号与噪声加失直比 总谐波失真 到 5 次谐波 无失真动态范围 转换速率 SAR 转换时钟 转换时间 (SAR 时钟数) 10 位方式 8 位方式 跟踪 / 保持捕获时间 转换速率 模拟输入 ADC 输入电压范围 相对 GND 的绝对引脚电压 电源指标 电源电流 (VDD 给 ADC0 供电) 工作方式, 500 ksps 电源抑制比 注意 : 表示偏离平均真一个标准差。 42 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 表 5.11. 温度传感器电气特性 VDD = 3.0 V, –40 to +85 °C (除非特别注明)。 参数 测量条件 最小值 典型值 最大值 单位 线性度 — ± 0.5 — °C 增益 — 2.87 — mV/°C 增益误差 * — ±120 — µV/°C 偏移 温度 = 0 °C — 764 — mV 偏移误差 * 温度 = 0 °C — ±15 — mV 注意 : 代表偏离平均值一个标准差。 表 5.12. 电压基准电气特性 VDD = 3.0 V ; –40 to +85 °C (除非特别注明) 参数 测量条件 最小值 典型值 最大值 单位 内部基准 (REFBE = 1) 输出电压 环境温度 25 °C 2.38 2.42 2.46 V VREF 短路电流 — — 8 mA VREF 温度系数 — 35 — ppm/°C 负载 = 0 to 200 µA 到 GND — 1.5 — ppm/µA VREF 启动时间 1 4.7 µF 钽电容, 0.1 µF 陶瓷旁路电容 — 3 — ms VREF 启动时间 2 0.1 µF 陶瓷旁路电容 — 100 — µs — 140 — ppm/V 1 — VDD V — 9 — µA — 75 — µA 负载调整 电源抑制比 外部基准 (REFBE = 0) 输入电压范围 输入电流 采样频率 = 500 ksps ; VREF = 3.0 V 电源指标 电源电流 ??? 1.4 43 C8051F380/1/2/3/4/5/6/7/C 表 5.13. 比较器电气特性 VDD = 3.0 V, –40 to +85 °C (除非特别注明 ) 参数 响应时间: 方式 0, Vcm* = 1.5 V 响应时间: 方式 1, Vcm* = 1.5 V 响应时间: 方式 2, Vcm* = 1.5 V 响应时间: 方式 3, Vcm* = 1.5 V 测量条件 最小值 典型值 最大值 单位 CP0+ – CP0– = 100 mV — 100 — ns CP0+ – CP0– = –100 mV — 250 — ns CP0+ – CP0– = 100 mV — 175 — ns CP0+ – CP0– = –100 mV — 500 — ns CP0+ – CP0– = 100 mV — 320 — ns CP0+ – CP0– = –100 mV — 1100 — ns CP0+ – CP0– = 100 mV — 1050 — ns CP0+ – CP0– = –100 mV — 5200 — ns — 1.5 4 mV/V 共模抑制比 正向回差电低 1 CP0HYP1–0 = 00 — 0 1 mV 正向回差电低 2 CP0HYP1–0 = 01 2 5 10 mV 正向回差电低 3 CP0HYP1–0 = 10 7 10 20 mV 正向回差电低 4 CP0HYP1–0 = 11 15 20 30 mV 负向回差电低 1 CP0HYN1–0 = 00 — 0 1 mV 负向回差电低 2 CP0HYN1–0 = 01 2 5 10 mV 负向回差电低 3 CP0HYN1–0 = 10 7 10 20 mV 负向回差电低 4 CP0HYN1–0 = 11 15 20 30 mV –0.25 — VDD + 0.25 V 输入电容 — 4 — pF 输入偏置电流 — 0.001 — nA 输入偏移电压 –5 — +5 mV 电源抑制比 — 0.1 — mV/V 上电时间 — 10 — µs 方式 0 — 20 — µA 方式 1 — 10 — µA 方式 2 — 4 — µA 方式 3 — 1 — µA 反相或同相输入电压范围 电源 供电电流 (DC) 注意 : Vcm 是 CP0+ 和 CP0– 上的共模电压。 44 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 表 5.14. USB 收发器电气特性 VDD = 3.0 V to 3.6 V, –40 to +85 °C (除非特别说明) 参数 测量条件 最小值 典型值 最大值 单位 输出高电平 (VOH) 2.8 — — V 输出低电平 (VOL) — — 0.8 V VBUS 检测输入低电平 — — 1.0 V VBUS 检测输入高电平 3.0 — — V 输出交叉点 (VCRS) 1.3 — 2.0 V 发送器 输出阻抗 (ZDRV) 驱动高电平 驱动低电平 — — 38 38 — — W 上拉电阻 (RPU) 全速 (D+ 上拉) 低速 (D– 上拉) 1.425 1.5 1.575 kW 输出上升时间 (TR) 低速 全速 75 4 — — 300 20 ns 输出下降时间 (TF) 低速 全速 75 4 — — 300 20 ns | (D+) – (D–) | 0.2 — — V 0.8 — 2.5 V — <1.0 — µA 接收器 差分输入敏感度 (VDI) 差分输入共模范围 (VCM) 输入漏电流 (IL) 上拉电阻禁止 注意 : 时序图和符号定义请参见 USB 规范。 ??? 1.4 45 C8051F380/1/2/3/4/5/6/7/C 46 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 6. 10 位 ADC (ADC0 的,只有 C8051F380/1/2/3) C8051F380/1/2/3 中的 ADC0 是一个 500 ksps, 10 位的逐次逼近寄存器型 (SAR) ADC,ADC 中集成了跟踪 保持电路、和可编程窗口检测器。该 ADC 可完全由软件通过特殊功能寄存器为配置。通过使用第 59 页 6.5. 节 “ADC0 模拟多路选择器 (仅 C8051F380/1/2/3) ” 中描述的模拟多路器, ADC 可以配置为测量各种 不同的信号。ADC 的电压基准选择见第 62 页 7. 节 “ 电压基准 ” 。只有当 ADC 控制寄存器 (ADC0CN) 中的 ADC0EN 位被置 1 时, ADC0 子系统才被使能。当 AD0EN 位为 0 时, ADC0 子系统处于低功耗关。 正输入 (AIN+) AMUX 温度 传感器 10 位 SAR AIN+ ADC AIN- 端口I/O 引脚* 101 110 111 负输入 (AIN-) AMUX AD0BUSY (W) 定时器0溢出 定时器2溢出 定时器1溢出 C NVSTR 输入 定时器3溢出 定时器4溢出 定时器5溢出 SYSCL K REF VREF 启动转换 VD D ADC0H VDD 000 001 010 011 1 00 ADC0L AM X0P 5 AM X0P 4 AM X0P 3 AM X0P 2 AM X0P 1 AM X0P 0 端口I/O 引脚* AD0C M0 ADC0CN AD0 EN AD0 TM A D0INT AD0 BUSY AD0WIN T AD0C M2 AD0C M1 AMX0P AD0 WINT * 32 脚 封装 有21 个输 入选 择 48 脚封 装有32 个 输入 选择 AMX0N AD0SC0 AD0LJST AD0SC4 AD0SC3 AD0SC2 AD0SC1 AMX0N 5 AMX0N 4 AMX0N 3 AMX0N 2 AMX0N 1 AMX0N 0 GND ADC0CF 32 ADC0LTH ADC0LTL 窗口 比较 逻辑 ADC0GTH ADC0GTL 图 6.1. ADC0 功能框图 ??? 1.4 46 C8051F380/1/2/3/4/5/6/7/C 6.1. 输出码格式 单端和差分方式的转换码格式是不同的。每次转换结束后,寄存器 ADC0H 和 ADC0L 中保存 ADC 输出转换 码的高字节和低字节。转换数据在寄存器对 ADC0H ∶ ADC0L 中的储存方式可以是左对齐或右对齐,由 AD0LJST 位 (ADC0CN.0) 的设置决定。当工作在单端方式时,转换码以 10 位无符号整数形式表示。输入 测量范围为 0~VREF×1023/1024。下面的表给出了右对齐和左对齐数据的代码示例。 ADC0H 和 ADC0L 寄 存器中未使用的位被清 0。 . 输入电压 ( 单端 ) 右对齐的 ADC0H:ADC0L (AD0LJST = 0) 左对齐的 ADC0H:ADC0L (AD0LJST = 1) VREF x 1023/1024 VREF x 512/1024 VREF x 256/1024 0 0x03FF 0x0200 0x0100 0x0000 0xFFC0 0x8000 0x4000 0x0000 ADC 工作在差分方式时,转换码以 10 位有符号 2 的补码表示。输入测量范围为 –VREF~VREF x 511/512。 下面的表给出了右对齐和左对齐数据的代码示例。对于右对齐数据, ADC0H 中未使用的高位是数据字的符 号扩展。对于左对齐数据, ADC0L 中未使用的低位被清 0。 输入电压 ( 差分 ) 右对齐的 ADC0H:ADC0L (AD0LJST = 0) 左对齐的 ADC0H:ADC0L (AD0LJST = 1) VREF x 511/512 VREF x 256/512 0 –VREF x 256/512 –VREF 0x01FF 0x0100 0x0000 0xFF00 0xFE00 0x7FC0 0x4000 0x0000 0xC000 0x8000 47 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 6.2. 温度传感器 典型的温度传感器传递函数如图 6.2 所示。输出电压 (VTEMP) 是正 ADC 输入时,温度传感器选择位在寄存 器 AMX0P AMX0P5-0。 (mV) 1200 1100 1000 900 V TEMP = Slope*(TEMP C) + Offset mV 800 700 -50 0 50 100 (Celsius) 图 6.2. 典型的温度传感器传递函数 未校准的温度传感器的输出是非常合适的线性和相对温度测量(见第 42 页上 “ 表 5.10 ADC0 电气特性 ” 表 4.10, “ADC0 的电气特性 ” 的线性规格)。为绝对温度的测量,增益和 / 或偏移校准建议。 1 点校准通常包 括以下步骤: 步骤 步骤 步骤 步骤 1. 2. 3. 4. 控制 / 测量环境温度 (此温度必须已知 )。 电力设备,并允许自加热几秒钟的延迟。 执行作为正输入和负输入选择地选择温度传感 , ADC 转换。 计算偏移和 / 或增益特性,并在随后的温度传感器测量使用的非易失性内存中存储这些值。 图 6.3 显示了典型的温度传感器错误假设 1 点校准在 25°C。请注意,影响 ADC 测量的参数,在特定的电压 参考价值,也将影响温度测量。 ??? 1.4 48 C8051F380/1/2/3/4/5/6/7/C 图 6.3. 1 点校准温度传感器错误 49 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 6.3. 工作方式 ADC0 的最高转换速度为 500 ksps。 ADC0 的转换时钟由系统时钟分频得到,时钟分频系数由 ADC0CF 寄 存器的 AD0SC 位决定。 6.3.1. 启动转换 有 8 种 ADC 转换启动方式,由寄存器 ADC0CN 中的 ADC0 转换启动方式位 (AD0CM2–0) 的状态决定采用 哪一种方式。转换触发源有: 1. 2. 3. 4. 5. 6. 7. 8. 写 1 到寄存器 ADC0CN 的 AD0BUSY 位; 定时器 0 溢出 ( 即定时的连续转换 ) ; 定时器 2 溢出; 定时器 1 溢出; CNVSTR 输入信号的上升沿; 定时器 3 溢出; 定时器 4 溢出; 定时器 5 溢出; 向 AD0BUSY 写 1 的方式提供了用软件按需要控制 ADC0 转换的能力。AD0BUSY 位在转换期间被置 1,转 换结束后被清 0。 AD0BUSY 位的下降沿触发中断 (当被允许时)并置位 ADC0 中断标志 (AD0INT)。当 ADC0 位为逻辑 1 时, ADC0 数据寄存器 ADC0H:ADC0L 中的转换结果有效。注意:当转换源是定时器 2、 3、4 或定时器 5 溢出时,如果定时器工作在 8 位方式,使用定时器的低字节溢出;如果定时器工作在 16 位 方式,则使用定时器的高字节溢出。有关定时器配置方面的信息见第 263 页 26. 节 “ 定时器 ” 。 有关 CNVSTR 的重要注意事项:CNVSTR 输入引脚还是端口 I/O 引脚。当使用 CNVSTR 输入作为 ADC0 转换启动源时,对应的引脚应被数字交叉开关跳过。有关端口 I/O 配置的详细信息,见第 153 页 20. 节 “ 端 口输入 / 输出 ” 。 ??? 1.4 50 C8051F380/1/2/3/4/5/6/7/C 6.3.2. 跟踪方式 寄存器 ADC0CN 中的 AD0TM 位控制 ADC0 的跟踪和保持方式。在缺少状态,除转换期间外 ADC0 输入被 连续跟踪。当 AD0TM 位为逻辑 1 时, ADC0 工作在低功耗跟踪和保持方式。在该方式,每次转换之前都有 3 个 SAR 时钟的跟踪时间 ( 在转换启动信号之后 )。 在 CNVSTR 的上升沿开始转换。跟踪和转换时序详见 图 6.4。当器件工作在低功耗待机或休眠方式时,跟踪也可以被禁止 (关断) 。低功耗跟踪和保持方式在 AMUX 的设置频繁改变时非常有用。因为 ADC 有建立时间要求(见第 52 页 6.3.3. 节 “ 建立时间要求 ” )。 A. 使用外部触发源的ADC0时序 CNV STR ( AD0 CM[2 :0]=10 0) 1 2 3 4 5 6 7 8 9 10 11 SAR 时钟 AD0TM=1 AD0TM=0 低 功耗 或 转换 跟踪 跟踪 或转换 转换 低功 耗方式 转换 跟踪 B. 使用内部触发源的ADC0时序 向AD0B US Y写1, 定时器 0、 定时器2、 定时器1、定 时器3溢出 (AD0C M[2:0]=000,001, 010,011,101) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 S AR 时钟 AD0TM=1 低功耗 或转换 跟踪 1 2 3 转换 4 5 6 7 8 9 低功耗方 式 10 11 S AR 时钟 AD0TM=0 跟踪或转 换 转换 图 6.4. 10 位 ADC 跟踪和转换时序示例 51 ??? 1.4 跟踪 C8051F380/1/2/3/4/5/6/7/C 6.3.3. 建立时间要求 在每次转换之前需要一个最小的跟踪时间,以保证精确转换。该跟踪时间由 AMUX0 的电阻、 ADC0 采样电 容、任何外部源阻抗以及所有要求的转换精度决定。注意:在低功耗跟踪方式,每次转换开始时需要用三个 SAR 时钟跟踪。对于大多数应用来说,三个 SAR 时钟可以满足最小跟踪时间要求。(外部源阻抗较大时, 所需要的建立时间增加。) 图 6.5 给出了等效的 ADC0 输入电路。对于一个给定的建立精度 (SA),所需要的 ADC0 建立时间可以用方 程 6.1 估算。表 5.10 给出了 ADC0 的最小建立时间要求以及多路器的阻抗和采样电容值。 2n t = ln -------- R C TOTAL SAMPLE SA 方程 6.1. ADC0 建立时间要求 其中: SA 是建立精度,用一个 LSB 的分数表示 (例如,建立数度 0.25 对应 1/4 LSB); t 为所需要的建立时间,以秒为单位; RTOTAL 为 AMUX0 电阻与外部信号源电阻之和; n 为 ADC 的分辨率,用比特表示 (10)。 差分方式 单端方式 MUX选择 MUX选择 Px .x Px .x RMUX R MUX C SAMPLE CSAMPL E RCInput = RMUX * CSAMPLE RCInput = RMUX * C SAMPL E C SAMPLE Px .x RMUX MUX选择 图 6.5. ADC0 等效输入电路 ??? 1.4 52 C8051F380/1/2/3/4/5/6/7/C SFR 定义 6.1. ADC0CF:ADC0 配置寄存器 位 7 6 5 4 3 2 1 0 名称 AD0SC[4:0] AD0LJST 保留 类型 R/W R/W R/W 复位 1 1 1 1 1 0 0 0 SFR 地址 = 0xBC ; SFR 页 = 所有页 位 7:3 名称 功能 AD0SC[4:0] ADC0 SAR 转换时钟周期位 SAR 转换时钟来源于系统时钟,由下面的方程给出,其中 AD0SC 表示 AD0SC4[4:0] 中保存的 5 位数值。对于 SAR 转换时钟的要求在 ADC 规格表中给出。 SYSCLK AD0SC = ------------------------ – 1 CLK SAR 注意 : 如果储存器电源控制器被使能 (MPCE = '1'), 则 AD0SC 至少应被设置为 "00001",以保 证 ADC 正确工作。 2 AD0LJST ADC0 左对齐选择 0:ADC0H:ADC0L 寄存器中的数据为右对齐。 1:ADC0H:ADC0L 寄存器中的数据为左对齐。 注意 : AD0LJST 位仅对 0 位方式有效 (AD08BE = 0)。 1:0 53 保留 必须写 00b. ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 6.2. ADC0H:ADC0 数据字高字节 位 7 6 5 4 3 名称 ADC0H[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xBE ; SFR 页 = 所有页 位 名称 7:0 ADC0H[7:0] ADC0 数据字高位 . 功能 AD0LJST = 0 时:位 7–2 为 10 位 ADC0 数据位 1 的符号扩展位,位 1–0 为 10 位 ADC0 数据的高 2 位。 AD0LJST = 1 时:位 7–0 是 10 位 ADC0 数据的高 8 位。 SFR 定义 6.3. ADC0L:ADC0 数据字低字节 位 7 6 5 4 3 名称 ADC0L[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xBD ; SFR 页 = 所有页 位 7:0 名称 ADC0L[7:0] ADC0 数据字低位。 功能 AD0LJST = 0 时:位 7-0 是 10 位 ADC0 数据的低 8 位。 AD0LJST = 1 时:位 7-6 是 10 位 ADC0 数据的低 2 位,位 5-0 的读出值为 000000b。 ??? 1.4 54 C8051F380/1/2/3/4/5/6/7/C SFR 定义 6.4. ADC0CN:ADC0 控制寄存器 位 7 6 5 名称 AD0EN AD0TM AD0INT 类型 R/W R/W R/W R/W R/W 复位 0 0 0 0 0 4 3 2 1 AD0BUSY AD0WINT 0 AD0CM[2:0] R/W 0 0 0 SFR 地址 = 0xE8 ; SFR 页 = 所有页;可位寻址 位 名称 7 AD0EN 功能 ADC0 使能位。 0:ADC0 禁止。ADC0 处于低功耗掉电状态。 1:ADC0 使能。ADC0 处于活动状态,可以进行数据转换。 6 AD0TM ADC0 使能位。 0:正常跟踪方式:当 ADC0 被使能时,除了转换期间之外一直处于跟踪方式。在发 生由 AD0CM[2:0] 定义的转换启动事件后立即开始转换。 1:延迟跟踪方式:当 ADC0 被使能时,除了转换期间外输入被跟踪。转换启动信号 会启动三个 SAR 时钟的额外跟踪时间,然后开始转换。注意:但使用 CNVSTR 时 (AD0CM[2:0] = 100),没有跟踪延迟。 5 AD0INT ADC0 转换结束中断标志。 0:自最后一次将该位清 0 后, ADC0 还没有完成一次数据转换。 1:ADC0 完成了一次数据转换。 4 AD0BUSY ADC0 忙位。 读: 写: 0:ADC0 当前不在进行数据转换。 0:无作用。 1:ADC0 正在进行转换。 1:若 AD0CM[2:0] = 000b 则启动 ADC0 转换。 3 AD0WINT ADC0 窗口比较中断标志。 0:自该标志最后一次被清 0 以来未发生 ADC0 窗口比较数据匹配。 1:发生了 ADC0 窗口比较数据匹配。 2:0 AD0CM[2:0] ADC0 转换启动方式选择 000:ADC0 的转换启动源为向 AD0BUSY 写 1。 001:ADC0 的转换启动源为定时器 0 溢出。 010:ADC0 的转换启动源为定时器 2 溢出。 011:ADC0 的转换启动源为定时器 1 溢出。 100:ADC0 的转换启动源为外部 CNVSTR 信号的上升沿。 101:ADC0 的转换启动源为定时器 3 溢出。 110:ADC0 的转换启动源为定时器 4 溢出。 111:ADC0 的转换启动源为定时器 5 溢出。 55 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 6.4. 可编程窗口检测器 ADC 可编程窗口检测器不停地将 ADC0 输出与用户编程的极限值进行比较,并在检测到期望条件时通知系 统控制器。这在一个中断驱动的系统中尤其有效,既可以节省代码空间和 CPU 带宽,又能提供快速响应时 间。窗口检测器中断标志 (AD0WINT 中的 ADC0CN) 也可被用于查询方式。 ADC0 下限 (大于)寄存器 (ADC0GTH, ADC0GTL) 和 ADC0 上限 (小于)寄存器 (ADC0LTH, ADC0LTL) 中保持比较值。窗口检测器 标志既可以在测量数据位于用户编程的极限值以内时有效,也可以在测量数据位于用户编程的极限值以外时 有效,这取决于 ADC0GT 和 ADC0LT 寄存器的编程值。 SFR 定义 6.5. ADC0GTH:ADC0 下限 (大于)数据字高字节 位 7 6 5 4 3 名称 ADC0GTH[7:0] 类型 R/W 复位 1 1 1 1 1 2 1 0 1 1 1 2 1 0 1 1 1 SFR 地址 = 0xC4 ; SFR 页 = 所有页 位 名称 功能 7:0 ADC0GTH[7:0] ADC0 下限数据字高字节。 16 位上限窗口比较寄存器的高字节。 SFR 定义 6.6. ADC0GTL:ADC0 下限 (大于)数据字低字节 位 7 6 5 4 3 名称 ADC0GTL[7:0] 类型 R/W 复位 1 1 1 1 1 SFR 地址 = 0xC3 ; SFR 页 = 所有页 位 7:0 名称 功能 ADC0GTL[7:0] ADC0 下限数据字低字节 16 位下限窗口比较寄存器的低字节。 ??? 1.4 56 C8051F380/1/2/3/4/5/6/7/C SFR 定义 6.7. ADC0LTH:ADC0 上限 (小于)数据字高字节 位 7 6 5 4 3 名称 ADC0LTH[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xC6 ; SFR 页 = 所有页 位 7:0 名称 功能 ADC0LTH[7:0] ADC0 上限数据字高字节。 16 位上限窗口比较寄存器的高字节。 SFR 定义 6.8. ADC0LTL:ADC0 上限 (小于)数据字低字节 位 7 6 5 4 3 名称 ADC0LTL[7:0] 类型 R/W 复位 0 0 0 0 0 SFR 地址 = 0xC5 ; SFR 页 = 所有页 位 7:0 名称 功能 ADC0LTL[7:0] ADC0 上限数据字低字节。 16 位上限窗口比较寄存器的低字节。 57 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 6.4.1. 窗口检测器示例 图 6.6 给出了单端方式下数据右对齐窗口比较的两个例子。左边的例子所使用的极限值为:ADC0LTH: ADC0LTL = 0x0080 (128d) 和 ADC0GTH:ADC0GTL = 0x0040 (64d) ;右边的例子所使用的极限值为: VREF x (1023/1024) (相对于 GND),转换码是 10 位无符号整数。在左边的例子中,如果 ADC0 转换结 果数据字位于由 ADC0GTH:ADC0GTL 和 ADC0LTH:ADC0LTL 定义的范围之内 (即 0x0040 < ADC0H: ADC0L < 0x0080),则会产生一个 AD0WINT 中断。在右边的例子中,如果 ADC0 转换结果数据字位于由 ADC0GT 和 ADC0LT 定义的范围之外(即 ADC0H:ADC0L < 0x0040 或 ADC0H:ADC0L > 0x0080),则会 产生一个 AD0WINT 中断。图 6.7 给出了使用相同比较值的单端方式下数据左对齐窗口比较的例子。 ADC0H:A DC0L ADC0H:A DC0L 输入电压 (A IN - GN D) V REF x (1023/1024) 输入电压 (AIN - GN D) 0x03FF V REF x (1023/1024) 0x03FF A D0WINT 不受影响 A D0WINT=1 0x 0081 VREF x (128/1024) 0x 0080 0x007F 0x00 81 AD C0LTH:ADC0LTL VREF x (128/1024) 0x00 80 0x007F AD C0G TH:ADC0GTL A D0WINT 不受影响 A D0WINT=1 VREF x (64/1024) 0x 0041 0x 0040 AD C0G TH:ADC0GTL VREF x (64 /1024) 0x003F 0x00 41 0x00 40 AD C0LTH:ADC0LTL 0x003F A D0WINT=1 A D0WINT 不受影响 0x 0000 0 0x00 00 0 图 6.6. ADC 窗口比较示例 (右对齐单端方式数据) ADC0H:A DC0L ADC0H:A DC0L 输入电压 (A IN - GN D) V REF x (1023/1024) 输入电压 (AIN - GN D) V REF x (1023/1024) 0xFFC0 0xFFC0 A D0WINT 不受影响 A D0WINT=1 0x 2040 VREF x (128/1024) 0x 2000 0x1FC0 0x20 40 AD C0LTH:ADC0LTL VREF x (128/1024) 0x20 00 0x1FC0 AD C0G TH:ADC0GTL A D0WINT=1 VREF x (64/1024) 0x 1040 0x 1000 AD C0G TH:ADC0GTL VREF x (64 /1024) 0x0FC0 0x10 40 0x10 00 AD C0LTH:ADC0LTL 0x0FC0 A D0WINT=1 A D0WINT 不受影响 0 A D0WINT 不受影响 0x 0000 0 0x00 00 图 6.7. ADC 窗口比较示例 (左对齐单端方式数据) ??? 1.4 58 C8051F380/1/2/3/4/5/6/7/C 59 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 6.5. ADC0 模拟多路选择器 (仅 C8051F380/1/2/3) 模拟多路选择器 (AMUX0) 选择去 ADC 的正输入和负输入,正输入 (AIN+) 可被连接到端口引脚、片内温度 传感器输出或正电源 (VDD)。负输入 (AIN-) 可被连接到商品引脚、VREF 或 GND。当 GDN 被选择为负输入 时,ADC0 工作在单端方式;在所有其它时间,ADC0 工作在分差方式。ADC0 的输入通道由寄存器 AMX0P 和 AMX0N 选择 (见 SFR 定义 6.9 和 SFR 定义 6.10)。 有关 ADC0 输入配置的重要注意事项:被选择为 ADC0 输入的引脚应被配置为模拟输入,并且应被数字交叉 开关跳过。要将一个端口引脚配置为模拟输入,应将 PnMDIN 寄存器中的对应位清 0。为强制交叉开关跳过 一 个端口引脚,应将 PnSKIP 寄存器中的对应位置 1。有关商品 I/O 配置的详细信息见第 153 页 20. 节 “ 端口输 入 / 输出 ” 。 ??? 1.4 59 C8051F380/1/2/3/4/5/6/7/C SFR 定义 6.9. AMX0P:AMUX0 正输入通道选择寄存器 位 7 6 5 4 3 2 1 0 0 0 AMX0P[5:0] 名称 类型 R R 复位 0 0 R/W 0 0 0 0 SFR 地址 = 0xBB ; SFR 页 = 所有页 位 7:6 名称 功能 未使用 读 = 00b ;写 = 忽略。 5:0 AMX0P[5:0] AMUX0 正输入选择。 AMX0P 000000: 000001: 000010: 000011: 000100: 000101: 000110: 000111: 001000: 001001: 001010: 001011: 001100: 001101: 001110: 001111: 010000: 010001: 60 32 脚封装 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 P3.0 P0.0 48 脚封装 P2.0 P2.1 P2.2 P2.3 P2.5 P2.6 P3.0 P3.1 P3.4 P3.5 P3.7 P4.0 P4.3 P4.4 P4.5 P4.6 保留 P0.3 ??? 1.4 AMX0P 010010: 010011: 010100: 010101: 010110: 010111: 011000: 011001: 011010: 011011: 011100: 011101: 011110: 011111: 100000: 100001: 100010: 100011 111111: 32 脚封装 P0.1 P0.4 P0.5 保留 保留 保留 保留 保留 保留 保留 保留 保留 温度传感器 VDD 保留 保留 保留 保留 48 脚封装 P0.4 P1.1 P1.2 P1.0 P1.3 P1.6 P1.7 P2.4 P2.7 P3.2 P3.3 P3.6 温度传感器 VDD P4.1 P4.2 P4.7 保留 C8051F380/1/2/3/4/5/6/7/C SFR 定义 6.10. AMX0N:AMUX0 负输入通道选择寄存器 位 7 6 5 4 3 2 1 0 0 0 AMX0N[5:0] 名称 类型 R R 复位 0 0 R/W 0 0 0 0 SFR 地址 = 0xBA ; SFR 页 = 所有页 位 7:6 名称 功能 未使用 读 = 00b ;写 = 忽略。 5:0 AMX0N[5:0] AMUX0 负输入选择。 AMX0N 000000: 000001: 000010: 000011: 000100: 000101: 000110: 000111: 001000: 001001: 001010: 001011: 001100: 001101: 32 脚封装 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 48 脚封装 P2.0 P2.1 P2.2 P2.3 P2.5 P2.6 P3.0 P3.1 P3.4 P3.5 P3.7 P4.0 P4.3 P4.4 AMX0N 010010: 010011: 010100: 010101: 010110: 010111: 011000: 011001: 011010: 011011: 011100: 011101: 011110: 011111: 001110: 001111: 010000: 010001: P2.6 P2.7 P3.0 P0.0 P4.5 P4.6 100000: 100001: 100010: 100011 111111: 保留 P0.3 ??? 1.4 32 脚封装 P0.1 P0.4 P0.5 保留 保留 保留 保留 保留 保留 保留 保留 保留 VREF GND (单端测量) 保留 保留 保留 保留 48 脚封装 P0.4 P1.1 P1.2 P1.0 P1.3 P1.6 P1.7 P2.4 P2.7 P3.2 P3.3 P3.6 VREF GND (单端测量) P4.1 P4.2 P4.7 保留 61 C8051F380/1/2/3/4/5/6/7/C 62 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 7. 电压基准 ADC 的电压基准多路器可以被配置为使用一个外部连接的电压基准、连接到 VREF 引脚的内部电压基准发 生器、未经稳压的电源电压 VDD 或稳压后的 1.8V 内部电源(见图 7.1)。基准控制寄存器(REF0CN,SFR 定义 7.1)中的 REFSL 位用于选择 ADC 的基准源。使用外部或内部基准时,REFSL 位应被设置为 0,以选 择 VREF 引脚;使用 VDD 作为基准源时, REFSL 应被置 1。要用内部稳压器取代 VDD,则可将 REGOVR 位置 1。 REF0CN 中的 BIASE 位使能内部偏压发生器,片内很多模拟外设要使用该偏压发生器。当这些外设中的任 何一个被使能时,偏压发生器被自动使能,不需手动使能。也可以通过向 REF0CN 中的 BIASE 位写 1 来使 能偏压发生器。表 5.12 给出了电压基准电路的电气特性。 C8051F380/1/2/3 器件还包含一个片内基准电路,该电路由一个温度稳定性好的 1.2V 带隙电压基准发生器 和一个可选择增益的输出缓冲放大器组成。使用寄存器 REF0CN 中的 REFBGS 位可将缓冲放大器配置为 1x 或 2x 增益。在 1x 增益设置,输出标称电压为 1.2V ;在 2x 增益设置,输出标称电压为 2.4V。通过将寄存 器 REF0CN 中的 REFBE 位置 1,可将片内电压基准驱动到 VREF 引脚。VREF 引脚对地的最大负载必须小 于 200 µA。建议在 VREF 引脚与地之间接 0.1 µF 和 4.7 µF 的旁路电容,至少需要一个 0.1 µF 的电容。如 果不使用片内基准,应将 REFBE 位清 0。表 5.12 给出了片内电压基准的电气特性。 有关 VREF 引脚的重要注意事项:当使用外部电压基准或片内基准电路时,VREF 引脚应被配置为模拟方式 并被数字交叉开关跳过。有关 VREF 引脚的位置以及如何将其配置为模拟方式和使交叉开关跳过该引脚,参 见第 153 页 20. 节 “ 端口输入 / 输出 ” 。 REGOVR REF SL T EM PE BIASE REFBE REFBGS REF0C N EN 去AD C、内部振荡 器、电 压基准、 温 度传感 器 偏置发生 器 IOSC EN EN VD D 温度传感 器 去 模拟MU X 外 部电压 基 准电路 R1 VREF 1 x/2x 1.2V 电压基准 EN R EFBE R EFBGS GN D 0 0 4.7 F + 0.1 F 建议的旁 路电容 VD D VR EF (去 ADC) 1 内部稳 压器 1 R EGOVR 图 7.1. 电压基准功能框图 ??? 1.4 62 C8051F380/1/2/3/4/5/6/7/C SFR 定义 7.1. REF0CN:电压基准控制寄存器 位 7 名称 REFBGS 类型 R/W R 复位 0 0 6 5 4 3 2 1 0 REGOVR REFSL TEMPE BIASE REFBE R R/W R/W R/W R/W R/W 0 0 0 0 0 0 SFR 地址 = 0xD1 ; SFR 页 = 所有页 位 7 名称 功能 REFBGS 基准缓冲器增益选择。 该位选择片内电压基准缓冲器的增益为 1x 或 2x。 0:2x 增益。 1:1x 增益。 6:5 4 未使用 读 = 00b ;写 = 忽略。 REGOVR 稳压器基准替代。 该位 “ 超越 ”REFSL 位,允许使用内部稳压器作为基准源。 0:电压基准源由 REFSL 位选择。 1:内部稳压器作为电压基准。 3 REFSL 电压基准选择。 该位选择 ADC0 的电压基准。 0:VREF 引脚用作电压基准。 1:VDD 用作电压基准。 2 TEMPE 温度传感器使能。 0:内部温度传感器禁止。 1:内部温度传感器使能。 1 BIASE 内部模拟偏压发生器使能。 0:内部偏压发生器禁止。 1:内部偏压发生器使能。 0 REFBE 内部电压基准缓冲器使能。 0:内部基准缓冲器禁止。 1:内部基准缓冲器使能。内部电压基准被驱动到 VREF 引脚。 63 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 8. 比较器 0 和比较器 1 C8051F380/1/2/3/4/5/6/7/C 器件内部有两个可编程电压比较器,比较图 0 (见图 8.1) 和比较器 1 (见 图 8.2)。两个比较器除了具有以下几点不同之处,其操作完全相同:(1) 输入选择不同,详见第 71 页 8.1. 节 “ 比较器多路选择器 ” ; (2) 比较器 0 可用作复位源。 比较器的响应时间和回差电压都是可编程的。每个比较器有一个模拟输入多路器和两个可以通过交叉开关接 到外部引脚的输出:一个同步 “ 锁存 ” 输出 (CP0 或 CP1) 和一个异步 “ 直接 ” 输出 (CP0A 或 CP1A)。即使 在系统时间停止时,异步输出信号仍然可用,这就允许比较器在器件处于停机 (STOP) 方式时工作并产生输 出。当被分配了端口引脚时,比较器的输出可以被配置为漏极开路或推挽方式(见第 158 页 20.2. 节 “ 端口 I/O 初始化 ” )。比较器 0 可用作复位源 (见第 132 页 17.5. 节 “ 比较器 0 复位 ” )。 比较器的输入由比较器输入多路器选择,详见第 71 页 8.1. 节 “ 比较器多路选择器 ” 。 CPT 0CN CP0EN CP0OUT CP0RIF CP0FIF CP0HYP1 CP0HYP0 CP0HY N1 CP0HY N0 V DD CP0 + 比较器 输入MUX + CP0 - CP0 D SET Q - CLR D Q SET CLR Q Q 交叉开关 (同步电路) CP0A GND CPT 0MD CP0RIE CP 0FIE CP0MD CP0MD 64 复位 表决树 0 图 8.1. 比较器 0 功能框图 修订版 1.4 CP0EN EA C8051F380/1/2/3/4/5/6/7/C CPT 1CN CP1EN CP1OUT CP1RIF CP1FIF CP1HYP1 CP1HYP0 CP1HY N1 CP1HY N0 V DD CP1 + 比较器 输入MUX + CP1 - CP1 D SET Q - CLR D Q SET CLR Q Q 交叉开关 (同步电路) CP1A GND CPT 1MD CP1RIE CP 1FIE CP1MD1 CP1MD0 0 CP1RIF CP1FIF CP1EN EA 1 0 0 0 1 1 CP 1 中断 1 图 8.2. 比较器 1 功能框图 比较器的输出可以被软件查询,可以作为中断源和 / 或被连到端口引脚。当被连到端口引脚时,比较器的输 出可以是与系统时钟同步的或者是不同步的。即使在停止方式 (系统时钟停止),异步输出信号仍然可用。 当被禁止时,比较器输出 (如果已通过交叉开关分配了端口 I/O 引脚)的缺省值为逻辑低电平,比较器的电 源被断开。有关通过交叉开关配置比较器输出的详细信息见第 154 页 20.1. 节 “ 优先权交叉开关译码器 ” 。 比较器的输入可以承受 –0.25 V 到 (VDD) + 0.25 V 的外部驱动电压而不至损坏或发生工作错误。比较器的详 细电气特性见第 37 页 5. 节 “ 电气特性 ” 。 可以通过对寄存器 CPTnMD (见 SFR 定义 8.2 和 SFR 定义 8.4)编程来设置比较器的响应时间。选择较长 的响应时间可以减小比较器的电源电流。 修订版 1.4 65 C8051F380/1/2/3/4/5/6/7/C VIN + VIN - CPn+ + CPn _ C Pn - OUT 电路 配置 正向回差电压 (用C P0H YP位编程) VIN - 负向回差电压 (用CP0 HYN位编程) 输入 VIN + VOH 输出 VOL 负向回差禁止 正向回差禁止 最大负向回差电压 最大正向回差电压 图 8.3. 比较器回差电压曲线 比较器有可软件编辑的回差电压。使用比较器控制寄存器 CPTnCN (n = 0 或 1) 既可以对回差电压值编程, 也可以对该回差电压围绕门限电压的正向和负向回差对称度编程。 比较器回差电压由比较器控制寄存器 CPTnCN ( 见 SFR 定义 8.1)中的位 3-0 的设置决定。负向回差电压由 CPnHYN 位的设置决定。可以设置 20mV、 10mV 或 5 mV 的负向回差电压值,也可以禁止负向回差电压。 类似地,正向回差电压由 CPnHYP 位的设置决定。 在比较器输出的上升沿和下降沿都可以产生中断(关于中断使能和优先级控制,见第 119 页 16.1. 节 “MCU 中断源和中断向量 ” )。比较器的下降沿发生时,CPnFIF 标志被置 1 ;比较器的上升沿发生时,CPnRIF 标 志被置 1。这些位一旦被置 1,将一直保持 1 状态直到被软件清 0。通过将 CPnRIE 置 1 来使能比较器上升 沿中断,通过将 CPnFIE 置 1 来使能比较器下降下沿中断。 可以在任意时刻通过读取 CPnOUT 位得到比较器的输出状态。通过针 CPnEN 位置 1 来使能比较器,通过 将该位清 0 来禁止比较器。 注意:在对比器上电或改变比较器的回差电压或响应时间控制位时,可能会检测到假上升沿或下降沿。因 此,建议在比较器被使能或方式位改变后经过一段延时后将上升沿和下降沿标志显式清 0. 66 修订版 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 8.1. CPT0CN:比较器 0 控制寄存器 位 7 6 5 4 名称 CP0EN CP0OUT CP0RIF CP0FIF CP0HYP[1:0] CP0HYN[1:0] 类型 R/W R R/W R/W R/W R/W 复位 0 0 0 0 3 0 2 0 1 0 0 0 SFR 地址 = 0x9B ; SFR 页 = 所有页 位 名称 7 CP0EN 功能 比较器 0 使能位。 0:比较器 0 禁止。 1:比较器 0 使能。 6 CP0OUT 比较器 0 输出状态标志。 0:电压值 CP0+ < CP0–. 1:电压值 CP0+ > CP0–. 5 CP0RIF 比较器 0 上升沿标志,必须用软件清 0。 0:自该标志最后一次被清 0 后,未检测到比较器 0 上升沿。 1:检测到比较器 0 上升沿。 4 CP0FIF 比较器 0 下降沿标志,必须用软件清 0. 0:自该标志最后一次被 0 后,未检测到比较器 0 下降沿。 1:检测到比较器 0 下降沿。 3:2 CP0HYP[1:0] 比较器 0 正向回差电压控制位。 00:正向回差电压禁止。 01:正向回差电压 = 5 mV. 10:正向回差电压 = 10 mV. 11:正向回差电压 = 20 mV. 1:0 CP0HYN[1:0] 比较器 0 负向回差电压控制位。 00:负向回差电压禁止。 01:负正向回差电压 = 5 mV. 10:负正向回差电压 = 10 mV. 11:负正向回差电压 = 20 mV. 修订版 1.4 67 C8051F380/1/2/3/4/5/6/7/C SFR 定义 8.2. CPT0MD:比较器 0 方式选择寄存器 位 7 6 名称 5 4 CP0RIE CP0FIE 3 2 R R R/W R/W R R 复位 0 0 0 0 0 0 SFR 地址 = 0x9D ; SFR 页 = 所有页 5 名称 未使用 CP0RIE 功能 读 = 00b,写 = 忽略 比较器 0 上升沿中断使能。 0:比较器 0 上升沿中断禁止。 1:比较器 0 上升沿中断允许。 4 CP0FIE 比较器 0 下降沿中断使能。 0:比较器 0 上下降中断禁止。 1:比较器 0 上下降中断允许。 3:2 1:0 读 = 00b,写 = 忽略。 未使用 CP0MD[1:0] 比较器 0 方式选择。 这两位影响比较器 0 的响应时间和功耗 00:方式 0 (最快响应时间,最高功耗)。 01:方式 1。 10:方式 2。 11:方式 3 (最慢响应时间,最低功耗)。 68 修订版 1.4 0 CP0MD[1:0] 类型 位 7:6 1 R/W 1 0 C8051F380/1/2/3/4/5/6/7/C SFR 定义 8.3. CPT1CN:比较器 1 控制寄存器 位 7 6 5 4 名称 CP1EN CP1OUT CP1RIF CP1FIF CP1HYP[1:0] CP1HYN[1:0] 类型 R/W R R/W R/W R/W R/W 复位 0 0 0 0 3 0 2 0 1 0 0 0 SFR 地址 = 0x9A ; SFR 页 = 所有页 位 名称 7 CP1EN 功能 比较器 1 使能位。 0:比较器 1 禁止。 1:比较器 1 使能。 6 CP1OUT 比较器 1 输出状态标志。 0:电压值 CP1+ < CP1–. 1:电压值 CP1+ > CP1–. 5 CP1RIF 比较器 1 上升沿标志,必须用软件清 0。 0:自该标志最后一次被清 0 后,未检测到比较器 1 上升沿。 1:检测到比较器 1 上升沿。 4 CP1FIF 比较器 1 下降沿标志,必须用软件清 0。 0:自该标志最后一次被清 0 后,未检测到比较器 1 下降沿。 1:检测到比较器 1 下降沿。 3:2 CP1HYP[1:0] 比较器 1 正向回差电压控制位。 00:正向回差电压禁止。 01:正向回差电压 = 5 mV. 10:正向回差电压 = 10 mV. 11:正向回差电压 = 20 mV. 1:0 CP1HYN[1:0] 比较器 1 负向回差电压控制位。 00:负向回差电压禁止。 01:负向回差电压 = 5 mV. 10:负向回差电压 = 10 mV. 11:负向回差电压 = 20 mV. 修订版 1.4 69 C8051F380/1/2/3/4/5/6/7/C SFR 定义 8.4. CPT1MD:比较器 1 方式选择寄存器 位 7 6 名称 5 4 CP1RIE CP1FIE 3 2 R R R/W R/W R R 复位 0 0 0 0 0 0 SFR 地址 = 0x9C ; SFR 页 = 所有页 5 名称 未使用 CP1RIE 功能 读 = 00b,写 = 忽略。 比较器 1 上升沿中断使能。 0:比较器 1 上升沿中断禁止 1:比较器 1 上升沿中断允许 4 CP1FIE 比较器 1 下降沿中断使能。 0:比较器 1 下降沿中断禁止 1:比较器 1 下降沿中断允许 3:2 1:0 读 = 00b,写 = 忽略。 未使用 CP1MD[1:0] 比较器 1 方式选择位。 这两位影响比较器 1 的响应时间和功耗。 00:方式 0 ( 最快响应时间,最高功耗)。 01:方式 1 10:方式 2 11:方式 3 ( 最慢响应时间,最低功耗 )。 70 修订版 1.4 0 CP1MD[1:0] 类型 位 7:6 1 R/W 1 0 C8051F380/1/2/3/4/5/6/7/C 8.1. 比较器多路选择器 C8051F380/1/2/3/4/5/6/7/C 器件内部包含了一个模拟输入多路选择器,将端口 I/O 引脚连接到比较器输入。 比较器的输入用 CPTnMX 寄存器(见 SFR 定义 8.5 和 SFR 定义 8.6)选择。CMXnP2–CMXnP0 位选择比 较器的正输入, CMXnN2–CMXnN0 位选择比较器的负输入。 有关比较器输入配置的重要注意事项:被选择为比较器输入的端口引脚应在相应的端口配置寄存器中被配置 为模拟输入并被数字交叉开关跳过。有关端口配置的详细信息见第 161 页 20.3. 节 “ 通用端口 I/O” 。 VDD CP0 + CP0 - VDD CP1 + + CP1 - - - CMX1N2 CMX1N1 CMX1N0 CPT0MX CMX1P2 CMX1P1 CMX1P0 GND CMX0P2 CMX0P1 CMX0P0 CMX0N2 CMX0N1 CMX0N0 GND + CPT1MX 图 8.4. 比较器输入多路器原理框图 ??? 1.4 71 C8051F380/1/2/3/4/5/6/7/C SFR 定义 8.5. CPT0MX:比较器 0 MUX 选择寄存器 位 7 6 5 4 3 2 CMX0N[2:0] 名称 类型 R 复位 0 R 0 0 0 R/W 0 SFR 地址 = 0x9F ; SFR 页 = 所有页 位 7 6:4 名称 功能 未使用 读 = 0b ;写 = 忽略。 CMX0N[2:0] 比较器 0 负输入 MUX 选择。 选择 000: 001: 010: 011: 100: 101-111: 3 2:0 未使用 72 32 脚封装 P1.1 P1.5 P2.1 P2.5 P0.1 48 脚封装 P2.1 P2.6 P3.5 P4.4 P0.4 保留 保留 读 = 0b ;写 = 忽略。 CMX0P[2:0] 比较器 0 正输入 MUX 选择。 选择 000: 001: 010: 011: 100: 101-111: 0 CMX0P[2:0] R/W 0 1 32 脚封装 P1.0 P1.4 P2.0 P2.4 P0.0 48 脚封装 P2.0 P2.5 P3.4 P4.3 P0.3 保留 保留 ??? 1.4 0 0 C8051F380/1/2/3/4/5/6/7/C SFR 定义 8.6. CPT1MX:比较器 1 MUX 寄存器 位 7 6 5 4 3 2 CMX1N[2:0] 名称 类型 R 复位 0 R 0 0 CMX1P[2:0] R/W 0 1 0 0 R/W 0 0 0 SFR 地址 = 0x9E ; SFR 页 = 所有页 位 7 6:4 名称 功能 未使用 读 = 0b ;写 = 忽略。 CMX1N[2:0] 比较器 1 负输入 MUX 选择。 选择 000: 001: 010: 011: 100: 101-111: 3 2:0 32 脚封装 P1.3 P1.7 P2.3 保留 P0.5 48 脚封装 P2.3 P3.1 P4.0 P4.6 P1.2 保留 保留 读 = 0b ;写 = 忽略 未使用 CMX1P[2:0] 比较器 1 正输入 MUX 选择。 选择 000: 001: 010: 011: 100: 101-111: 32 脚封装 P1.2 P1.6 P2.2 保留 P0.4 48 脚封装 P2.2 P3.0 P3.7 P4.5 P1.1 保留 保留 ??? 1.4 73 C8051F380/1/2/3/4/5/6/7/C 74 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 9. 稳压器 (REG0 和 REG1) C8051F380/1/2/3/4/5/6/7 器件包含两个内部稳压器:一个将加在 REGIN 引脚的电压稳压到 3.3V (REG0), 另一个从 1.8 ~ 3.6V 的 VDD 电源稳压出内核电源 1.8V (REG1)。当被使能时,REG0 输出连到 VDD 引脚, 可为外部器件提供电源。可以用软件通过寄存器 REG01CN (SFR 定义 9.1)中的 REG0DIS 位使能 / 禁止 REG0。 REG1 有两种内建节电方式,可以在低功耗应用中帮助减小电流消耗。这些方式通过 REG01CN 寄 存器控制。片内稳压器的电气特性见第 40 页上的表 5.5。 注意:当在 USB 网络中使用 C8051F380/1/2/3/4/5/6/7 器件时,VBUS 信号必须被连到 VBUS 引脚。VBUS 信号只应在器件工作于总线供电方式时被连接到 REGIN 引脚。REG0 的配置选项示于 “4. 典型连接图 ” 图 4.1 ~ 图 4.4 中。 9.1. 稳压器 (REG0) 请见 “4. 典型连接图 ” ,用于使用 REG0 稳压器的典型连接图。 9.1.1. 稳压器方式选择 REG0 提供低功耗工作方式,在器件处于挂起方式时使用。在低功耗方式, REG0 输出电压保持正常,但 REG0 的动态性能(响应时间)降低。表 5.5 给出了正常方式和低功耗方式下的电源电流。REG0 方式选择 由寄存器 REG01CN 中的 REG0MD 位控制。 9.1.2. VBUS 检测 当使用 USB 功能控制器时(见第 172 页 21. 节 “ 通用串行总线控制器 (USB0)” ), VBUS 信号应被连接到 VBUS 引脚。 VBSTAT 位 (寄存器 REG01CN)指示 VBUS 信号的当前逻辑电平。在 VBUS 信号的上升沿 或下降沿会产生 VBUS 中断(如果被允许)。 VBUS 中断是边沿敏感的,没有相应的中断请求标志。 VBUS 输入信号参数见表 5.5。 注意:在 USB 被选择为复位源的情况下,当 VBUS 引脚上出现上升沿或下降沿时,会产生系统复位。有关 选择 USB 作为复位源的详细信息,见第 129 页 17. 节 “ 复位源 ” 。 9.2. 稳压器 (REG1) 在缺省条件下,当器件进入停止 (STOP) 方式时内部 REG1 稳压器会保持使能状态。这就允许任何被使能的 复位源产生器件复位并使器件脱离 STOP 方式。为了进一步节省功耗,可以在器件进入 STOP 方式时用 STOPCF 位关断稳压器和器件的内部电源网络。当 STOPCF 位被置 1 时,只有 /RST 引脚和完整的上电过 程擦才能产生器件复位。 REG1 还提供低功耗工作方式,在器件处于挂起方式时使用。在正常工作期间或 REG0 稳压器被禁止时,不 应使用低功耗方式。表 5.5给出了正常方式和低功耗方式下的电源电流。REG1方式选择由寄存器REG01CN 中的 REG1MD 位控制。 注意:在将 REG1 置于低功耗方式之后,至少需经过 12 个时钟周期才能将内部高频振荡器挂起 (OSCICN.5 = 1)。 ??? 1.4 74 C8051F380/1/2/3/4/5/6/7/C SFR 定义 9.1. REG01CN:稳压器控制寄存器 位 7 6 5 4 3 2 1 0 名称 REG0DIS VBSTAT 保留 REG0MD STOPCF 保留 REG1MD 保留 类型 R/W R R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xC9 ; SFR 页 = 所有页 位 7 名称 功能 REG0DIS 稳压器 REG0 禁止。 该位使能或禁止 REG0 稳压器。 0:稳压器使能。 1:稳压器禁止。 6 VBSTAT VBUS 信号状态。 该位指示器件是否接入一个 USB 网络。 0:当前无 VBUS 信号 (器件未连接到 USB 网络)。 1:当前有 VBUS 信号 (器件连接到 USB 网络)。 5 4 必须写 0b。 保留 REG0MD 稳压器 REG0 方式选择。 该位选择稳压器 REG0 的工作方式。当 REG0MD 被置 1 时, REG0 稳压器工作在低功 耗 (挂起)方式。 0:REG0 稳压器工作在正常方式。 1:REG0 稳压器工作在低功耗方式。 3 STOPCF STOP 方式配置 (REG1)。 该位配置稳压器 REG1 在器件进入 STOP 方式时的行为。 0:REG1 稳压器在 STOP 方式仍然保持使能状态。任何被使能的复位源都能产生器件 复位。 1:REG1 稳压器在 STOP 方式下被关断。只有 /RST 引脚或重新上电才能使器件复位。 2 1 未使用 必须写 0b。 REG1MD 稳压器 REG1 方式选择。 该位选择稳压器 REG0 的工作方式。当 REG1MD 被置 1 时, REG1 稳压器工作在低功 耗方式。 0:REG1 稳压器工作在正常方式。 1:REG1 稳压器工作在低功耗方式。 如果稳压器 REG0 被禁止,则该位不应被置 1。 0 75 保留 必须写 0b。 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 10. 电源管理 C8051F380/1/2/3/4/5/6/7/C 器件有 3 种软件可编程的电源管理方式:空闲、停止和挂起。空闲方式和停止 方式是标准 8051 体系结构的一部分,而挂起方式是由高速振荡器外设实现的一种增强节电方式。 在空闲方式, CPU 停止工作,而外设和时钟处于活动状态。在停止方式, CPU 停止工作,所有中断和定时 器(时钟丢失检测器除外)都不工作,内部振荡器停止(模拟外设保持其所选状态,外部振荡器不受影响)。 从内部振荡器停止运行的角度看,挂起方式类似于停止方式,但器件可以通过 USB 收发器唤醒。如果需要, CPU 在挂起方式可不停止运行,而用另一个振荡器运行。在空闲方式,因为时钟是运行的,所有功耗取决 于系统时钟频率和进入空闲方式之前处于活动状态和外设数量。停止方式和挂起方式消耗最少的功率,因为 器件的绝大部分电路都因没有时钟而停止运行。SFR 定义 10.1 描述用于控制 C8051F380/1/2/3/4/5/6/7/C 器 件停止和空闲电源管理方式的电源控制寄存器 (PCON)。挂起方式由 OSCICN 寄存器(SFR 定义 19.3)中 的 SUSPEND。 虽然 C8051F380/1/2/3/4/5/6/7/C 器件具有空闲、停止和挂起方式,但根据需要使能 / 禁止每个外设可以进 一步控制器件功耗。生个模拟外设在不使用时都可以被禁止,从而被置于低功耗方式。数字外设如定时器或 串行总线在不使用时消耗很小的功率。关闭振荡器可使功耗显示著降低,但以减少功能为代价。 10.1. 空闲方式 将空闲方式选择位 (PCON.0) 置 1 使硬件停止 CPU 运行并进入空闲方式,在执行完对该位置 1 的指令后 MCU 立即进入空闲方式。所有内部寄存器和存储器都保持原来的数据不变。所有模拟和数字外设在空闲方 式期间都可以保持活动状态。 有被 允许的 中断发 生或有 效复位 将结束 空闲方 式。当有 一个被 允许的 中断发 生时,空 闲方式 选择位 (PCON.0) 被清 0,CPU 将恢复工作。该中断将得到服务,中断返回 (RETI) 后将开始执行设置空闲方式选择 位的那条指令的下一条指令。如果空闲方式因一个内部或外部复位而结束,则 CIP-51 进行正常的复位过程 并从地址 0x0000 开始执行程序。 注意:如果在写 IDLE 位的指令之后是一条单字节指令,并且在将 IDLE 位置 1 的指令的执行阶段发生了中 断,则将来再发生中断时 CPU 可能不会被唤醒。因此,将 IDLE 位置 1 的指令的后面应跟随一条具有 2 或 多字节操作码的指令。例如: // 用 ‘C’ 语言: PCON |= 0x01; PCON = PCON; ; 用汇编语言: ORL PCON, #01h MOV PCON, PCON // 将 IDLE 位置 1 // ... 跟随一条 3 字节操作码的虚指令 ; 将 IDLE 位置 1 ; ... 跟随一条 3 字节操作码的虚指令 如果被使能,看门狗定时器 (WDT) 将产生一个内部看门狗复位,从而结束空闲方式。这一功能可以保护系 统不会因为对 PCON 寄存器的意外写入而导致永久性停机。如果不需要这种功能,可以在进入空闲方式之 前用软件禁止 WDT (如果 WDT 被初始化为允许该操作)。这将进一步节省功耗,允许系统一直保持在空 闲状态,等待一个外部激励唤醒系统。有关使用和配置 WDT 的详细信息,见第 133 页 17.6. 节 “PCA 看门 狗定时器复位 ” 。 ??? 1.4 76 C8051F380/1/2/3/4/5/6/7/C 10.2. 停止方式 将停止方式选择位 (PCON.1) 置 1 使控制器进入停止方式,在执行完对该位置 1 的指令后 MCU 立即进入停 止方式。在停止方式,内部振荡器、CPU 和所有数字外设都停止工作,但外部振荡器电路的状态不受影响。 在进入停止方式之前,每个模拟外设(包括外部振荡器电路)都可以被单独关断。只有内部或外部复位能结 束停止方式。复位时,器件进行正常的复位过程并从地址 0x0000 开始执行程序。 如果被使能,时钟丢失检测器 (MCD) 将产生一个内部复位,从而结束停止方式。如果想要使 CPU 处于停止 方式的时间大于 MCD 超时时间,则应禁止时钟丢失检测器。 在停止方式,在缺少状态下内部稳压器仍然保持使能状态,但也可以将内部稳压器关断以节省功耗。要在停 止方式关断稳压器,应在置位 STOP 位 (见 SFR 定义 9.1)之前将寄存器 REG01CN 中的 STOPCF 位置 1. 如果使用 STOPCF 位将稳压器关断,则只有 RST 引脚或一次上电过程能将器件复位。 10.3. 挂起方式 将 SUSPEND 位 (OSCICN.5) 置 1 使硬件停止高频内部振荡器运行,在执行完对该位置 1 的指令后 MCU 立 即进入挂起方式。所有内部寄存器和存储器都保持原来的数据不变。在挂起方式, CPU 不停止运行,所有 仍可使用高频内部振荡器以外的另一个振荡器执行程序。 USB 数据引脚上的恢复信号或器件复位事件可结束挂起方式。当挂起方式结束时,如果振荡器源是内部高 频振荡器,则器件从置位 SUSPEND 那条指令的下一条指令恢复执行。如果唤醒事件被配置为产生中断,则 该中断在器件唤醒时立即得到服务。如果挂起方式由外部或内部复位结束,则 CIP-51 执行正睥复位过程, 从 0x0000 地址开始执行程序。 77 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 10.1. PCON:电源管理控制寄存器 位 7 6 5 4 3 2 1 0 名称 GF[5:0] STOP IDLE 类型 R/W R/W R/W 0 0 复位 0 0 0 0 0 0 SFR 地址 = 0x87 ; SFR 页 = 所有页 位 名称 7:2 GF[5:0] 功 能 通用标志 5–0 这些位是受软件控制的通用标志。 1 STOP 停机方式选择 将该位置 1 使 CIP-51 进入停止方式。该位的读出值总是为 0。 1:CPU 进入停止方式 (内部振荡器停止) 0 IDLE IDLE:空闲方式选择 将该位置 1 使 CIP-51 进入空闲方式。该位的读出值总是为 0。 1:CPU 进入空闲方式。(关闭供给 CPU 的时钟信号,但定时器、中断、串口和模拟 外设仍保持活动状态。) ??? 1.4 78 C8051F380/1/2/3/4/5/6/7/C 79 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 11. CIP-51 微控制器 MCU 系统控制器的内核是 CIP-51 微控制器。 CIP-51 与 MCS-51™ 指令集完全兼容,可以使用标准 803x/ 805x 的汇编和编译器进行软件开发。该系列 MCU 的外设是标准 8051 的所有外设的超集。 CIP-51 还包含 片内调试硬件 (详见第 28 章),与模拟和数字子系统直接接口,在一个集成电路内提供了完全的数据采集 或控制系统解决方案。 CIP-51 微控制器内核除了具有标准 8051 的系统结构和外设以外,另有增加的定制外设和功能,大大增强了 它的处理能力 (见图 11.1 的原理框图)。 CIP-51 具有下列特性: 与 MCS-51 指令集完全兼容 峰值速度为 48 MIPS ( 48 MHz 时钟) 0-48 MHz 时钟频率 扩展的中断处理系统 复位输入 电源管理方式 片内调试逻辑 程序和数据存储器安全 性能 CIP-51 采用流水线结构 8051,与标准的 8051 结构相比指令执行速度有很大提高。在一个标准的 8501 中, 除 MUL 和 DIV 以外所有指令都需要 12 或 24 个系统时钟周期,并且通常最大系统时钟频率为 12 MHz。 而 对于 CIP-51 内核,70% 的指令的执行时间为 1 或 2 个系统时钟周期,没有执行时间超过 8 个系统时钟周期 的指令。 D8 D8 累加 器 ACC 堆 栈指 针 SP T MP 2 P SW D8 D8 ALU S RA M 地址 寄存器 SRA M (256 X 8) D8 TM P1 D8 数据总 线 B 寄存 器 D8 D8 D8 数 据总线 数 据总线 SF R 地 址 缓 冲 器 D8 D8 数据 指针 D8 S FR 总线 接口 SF R 控 制 S F R 写数 据 S F R 读数 据 P C 增 量器 存 储器地 址 D8 数据 总线 程 序计 数器 程序 地址 寄存器 存 储器控 制 A16 存储器 接 口 存储 器写数 据 存储 器读数 据 流 水线 复位 D8 控制 逻辑 系统中 断 时钟 中断 接口 D8 停机 空闲 电源 控制 寄 存 器 仿真中 断 D8 图 11.1. CIP-51 原理框图 CIP-51 工作在量大系统时钟频率 48 MHz 时,它的峰值速度达到 48 MIPS。CIP-51 共有 11 条指令。下表列 出了各种指令执行时间所对应的指令条数。 ??? 1.4 79 C8051F380/1/2/3/4/5/6/7/C 执行周期数 1 2 2/4 3 3/5 4 5 4/6 6 8 指令数 26 50 5 10 6 5 2 2 2 1 编程和调试支持 对 Flash 程度存储器的在系统编程和与片内调试支持逻辑的通信是通过 Silicon Labs 2 线开发接口 (C2) 实现 的。 片内调试逻辑支持全速的在系统调试,允许设置硬件断点,支持开始、停止和单步执行 (包括中断服务程 序)命令,支持检查程序调用堆栈及读 / 写寄存器和存储器。这种片内调试方式完全是非侵入式的,不需要 占用 RAM、推栈、定时器或其它片内资源。有关 C2 接口的详细信息见第 316 页 28. 节 “C2 接口 ” 。 CIP-51 有 Silicon Labs 和第三方供应商的开发工具支持。 Silicon Labs 提供一个集成开发环境 (IDE),包括 编辑器、调试器和编辑器。 IDE 的调试器和编辑器与 CIP-51 之间的 C2 接口连接,提供快速和有效的在系 统编程和调试。也有第三方的宏汇编器和 C 编译器可用。 11.1. 指令集 CIP-51 系统控制器的指令集与标准 MCS-51™ 指令集完全兼容,可以使用标准 8051 的开发工具开发 CIP51 的软件。所有的 CIP-51 指令在二进制码 MCS-51™ 产品完全相同,包括操作码、寻址方式和对 PSW 标 志的影响,但是指令时序与标准 8051 不同。 11.1.1. 指令和 CPU 时序 在很多 8051 实现方案中,机器周期和时钟周期是不同的,机器周期的长度在 2 到 12 个时钟周期之间。但 是 CIP-51 只基于时钟周期,所有指令时序都以时钟周期计算。 由于 CIP-51 采用了流水线结构,大多数指令执行所需的时钟周期数与指令的字节数一致。条件转移指令在 不发生转移时的执行周期数比发生转换时少 1 个。表 11.1 给出了所有 CIP-51 指令一览表,包括每条指令的 助记符、字节数和时钟周期数。 80 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 表 11.1. CIP-51 指令集一览表 助记符 功能说明 字节数 时钟周期 数 算术操作类指令 ADD A, Rn ADD A, direct ADD A, @Ri ADD A, #data ADDC A, Rn ADDC A, direct ADDC A, @Ri ADDC A, #data SUBB A, Rn SUBB A, direct SUBB A, @Ri SUBB A, #data INC A INC Rn INC direct INC @Ri DEC A DEC Rn DEC direct DEC @Ri INC DPTR MUL AB DIV AB DA A 寄存器加到累加器 直接寻址字节加到累加器 间址 RAM 内容加到累加器 立即数加到累加器 寄存器加到累加器 (带进位) 直接寻址字节加到累加器 (带进位) 间址 RAM 加到累加器 (带进位) 立即数加到累加器 (带进位) 累加器减去寄存器 (带借位) 累加器减去直接寻址字节 (带借位) 累加器减去间址 RAM (带借位) 累加器减去立即数 (带借位) 累加器加 1 寄存器加 1 直接寻址字节加 1 间址 RAM 加 1 累加器减 1 寄存器减 1 直接寻址字节减 1 间址 RAM 减 1 数据指针加 1 累加器与寄存器 B 相乘 累加器除以寄存器 B 累加器十进制调整 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 1 2 1 1 1 1 1 1 2 2 2 1 2 2 2 1 2 2 2 1 1 2 2 1 1 2 2 1 4 8 1 逻辑操作类指令 ANL A, Rn ANL A, direct ANL A, @Ri ANL A, #data ANL direct, A ANL direct, #data ORL A, Rn ORL A, direct ORL A, @Ri ORL A, #data ORL direct, A ORL direct, #data XRL A, Rn XRL A, direct XRL A, @Ri XRL A, #data XRL direct, A 寄存器 “ 与 ” 到累加器 直接寻址字节 “ 与 ” 到累加器 间址 RAM“ 与 ” 到累加器 立即数 “ 与 ” 到累加器 累加器 “ 与 ” 到直接寻址字节 立即数 “ 与 ” 到直接寻址字节 寄存器 “ 或 ” 到累加器 直接寻址字节 “ 或 ” 到累加器 间址 RAM“ 或 ” 到累加器 立即数 “ 或 ” 到累加器 累加器 “ 或 ” 到直接寻址字节 立即数 “ 或 ” 到直接寻址字节 寄存器 “ 异或 ” 到累加器 直接寻址字节 “ 异或 ” 到累加器 间址 RAM“ 异或 ” 到累加器 立即数 “ 异或 ” 到累加器 累加器 “ 异或 ” 到直接寻址字节 1 2 1 2 2 3 1 2 1 2 2 3 1 2 1 2 2 1 2 2 2 2 3 1 2 2 2 2 3 1 2 2 2 2 ??? 1.4 81 C8051F380/1/2/3/4/5/6/7/C 表 11.1. CIP-51 指令集一览表 (Continued) 助记符 功能说明 XRL direct, #data CLR A CPL A RL A RLC A RR A RRC A SWAP A 立即数 “ 异或 ” 到直接寻址字节 累加数清零 累加器求反 累加器循环左移 带进位的累加器循环左移 累加器循环右器 带进位的累加器循环右移 累加器内高低半字节交换 3 1 1 1 1 1 1 1 时钟周期 数 3 1 1 1 1 1 1 1 数据传送类指令 MOV A, Rn MOV A, direct MOV A, @Ri MOV A, #data MOV Rn, A MOV Rn, direct MOV Rn, #data MOV direct, A MOV direct, Rn MOV direct, direct MOV direct, @Ri MOV direct, #data MOV @Ri, A MOV @Ri, direct MOV @Ri, #data MOV DPTR, #data16 MOVC A, @A+DPTR MOVC A, @A+PC MOVX A, @Ri MOVX @Ri, A MOVX A, @DPTR MOVX @DPTR, A PUSH direct POP direct XCH A, Rn XCH A, direct XCH A, @Ri XCHD A, @Ri 寄存器传送到累加器 直接寻址字节传送到累加器 间址 RAM 传送到累加器 立即数传送到累加器 累加器传送到寄存器 直接寻址字节传送到寄存器 立即数传送到寄存器 累加器传送到直接寻址字节 寄存器传送到直接寻址字节 直接寻址字节传送到直接寻址字节 间址 RAM 传送到直接寻址字节 立即数传送到直接寻址字节 累加器传送到间址 RAM 直接寻址字节传送到间址 RAM 立即数传送到间址 RAM 16 位常数装入 DPTR 相对于 DPTR 的代码字节传送到累加器 相对于 PC 的代码字节传送到累加器 外部 RAM (8 位地址)传送到累加器 累加器传到外部 RAM (8 位地址) 外部 RAM (16 位地址)传送到累加器 累加器传到外部 RAM (16 位地址) 直接寻址字节压入栈顶 栈顶数据弹出到直接寻址字节 寄存器和累加器交换 直接寻址字节与累加器交换 间接 RAM 与累加器交换 间址 RAM 和累加器交换低半字节 1 2 1 2 1 2 2 2 2 3 2 3 1 2 2 3 1 1 1 1 1 1 2 2 1 2 1 1 1 2 2 2 1 2 2 2 2 3 2 3 2 2 2 3 3 3 3 3 3 3 2 2 1 2 2 2 位操作类指令 CLR C CLR bit SETB C SETB bit CPL C CPL bit 清进位位 清直接寻址位 进位位置 1 直接寻址位置位 进位位取反 直接寻址位取反 1 2 1 2 1 2 1 2 1 2 1 2 82 ??? 1.4 字节数 C8051F380/1/2/3/4/5/6/7/C 表 11.1. CIP-51 指令集一览表 (Continued) 助记符 ANL C, bit ANL C, /bit ORL C, bit ORL C, /bit MOV C, bit MOV bit, C 功能说明 直接寻址位 “ 与 ” 到进位位 直接寻址位的反码 “ 与 ” 到进位位 直接寻址位 “ 或 ” 到进位位 直接寻址位的反码 “ 或 ” 到进位位 直接寻址位传送到进位位 进位位传送到直接寻址位 字节数 2 2 2 2 2 2 时钟周期 数 2 2 2 2 2 2 程序流控制类指令 所列时间为 PFE 使能和 FLRT = 0 的情况。如果 FLRT = 1,则转换需额外加一个周期。 JC rel 2 若进位位为 1 则跳转 JNC rel 2 若进位位为零则跳转 JB bit, rel 3 若直接寻址位为 1 则跳转 JNB bit, rel 3 若直接寻址位为 0 则跳转 JBC bit, rel 3 若直接寻址位 1 则跳转,并清除该位 ACALL addr11 2 绝对调用子程序 LCALL addr16 3 长调用子程序 RET 1 从子程序返回 RETI 1 从中断返回 AJMP addr11 2 绝对跳转 LJMP addr16 3 长跳转 SJMP rel 2 短跳转 (相对地址) JMP @A+DPTR 1 相对 DPTR 的间接跳转 JZ rel 2 累加器为 0 则跳转 JNZ rel 2 累加器为非 0 则跳转 CJNE A, direct, rel 3 比较直接寻址字节与累加器,不相等则跳转 CJNE A, #data, rel 3 比较立即数与累加器,不相等则跳转 CJNE Rn, #data, rel 3 比较立即数与寄存器,不相等则跳转 CJNE @Ri, #data, rel 3 比较立即数与间接寻址 RAM,不相等则跳转 DJNZ Rn, rel 2 寄存器减 1,不为零则跳转 DJNZ direct, rel 3 直接寻址字节减 1,不为零则跳转 NOP 1 空操作 ??? 1.4 2/4 2/4 3/5 3/5 3/5 4 5 6 6 4 5 4 4 2/4 2/4 4/6 3/5 3/5 4/6 2/4 3/5 1 83 C8051F380/1/2/3/4/5/6/7/C 寄存器、操作数和寻址方式说明 : Rn - 当前选择的寄存器区的寄存器 R0–R7。 @Ri - 通过寄存器 R0 或 R1 间接寻址的数据 RAM。 rel - 相对于下一条指令第一个字节的 8 位有符号 (2 的补码)偏移量。 SJMP 和所有条件转移指令使 用。 direct - 8 位内部数据存储器地址。可以是直接访问数据 RAM 地址 (0x00–0x7F) 或一个 SFR 地址 (0x80–0xFF)。 #data - 8 位常数 #data16 - 16 位常数 bit - 数据 RAM 或 SFR 中的直接寻址位 addr11 - ACALL 和 AJMP 使用的 11 位目的地址。目的地址必须与下一条指令第一个字节处于同一个 2K 字节的程序存储器页。 addr16 - LCALL 和 LJMP 使用的 16 位目的地址。目的地址可以是 64KB 程序存储器空间内的任何位 置。 有一个未使用的操作码 (0xA5),它执行与 NOP 指令相同的功能。 所有助记符归 Intel Corporation 1980 版权所有。 84 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 11.2. CIP-51 寄存器说明 下面对与 CIP-51 系统控制器操作有关的 SFR 进行说明。保留位应被设置为 SFR 定义中指定的值。将来的 产品版本可能会使用这些位实现新功能,在这种情况下各位的复位值将是 SFR 定义中的指定值,以选择缺 少状态。有关其它 STR 的详细说明见本数据表中与它们对应的系统功能相关的章节。 SFR 定义 11.1. DPL:数据指针低字节 位 7 6 5 4 名称 DPL[7:0] 类型 R/W 复位 0 0 0 0 3 2 1 0 0 0 0 0 SFR 地址 = 0x82 ; SFR 页 = 所有页 位 名称 7:0 DPL[7:0] 功能 数据指针低字节。 DPL 为 16 位数据指针 DPTR 的低字节。 DPTR 用于访问间接寻址的 FLASH 存储器 和 XRAM。 SFR 定义 11.2. DPH:数据指针高字节 位 7 6 5 4 名称 DPH[7:0] 类型 R/W 复位 0 0 0 0 3 2 1 0 0 0 0 0 SFR 地址 = 0x83 ; SFR 页 = 所有页 位 名称 7:0 DPH[7:0] 功能 数据指针高字节。 DPH 为 16 位数据指针 DPTR 的高字节。 DPTR 用于访问间接寻址的 FLASH 存储器 和 XRAM。 ??? 1.4 85 C8051F380/1/2/3/4/5/6/7/C SFR 定义 11.3. SP:堆栈指针 位 7 6 5 4 名称 SP[7:0] 类型 R/W 复位 0 0 0 0 3 2 1 0 0 1 1 1 SFR 地址 = 0x81 ; SFR 页 = 所有页 位 名称 功能 7:0 SP[7:0] 堆栈指针。 堆栈指针保持栈顶位置。在每次执行 PUSH 操作前,堆栈指针加 1。 SP 寄存器复位 后的默认值为 0x07。 SFR 定义 11.4. ACC:累加器 位 7 6 5 4 名称 ACC[7:0] 类型 R/W 复位 0 0 0 0 3 2 1 0 0 0 0 0 3 2 1 0 0 0 0 0 SFR 地址 = 0xE0 ; SFR 页 = 所有页;可位寻址 位 名称 7:0 ACC[7:0] 功能 累加器。 该寄存器为算术操作用的累加器。 SFR 定义 11.5. B:B 寄存器 位 7 6 5 4 名称 B[7:0] 类型 R/W 复位 0 0 0 0 SFR 地址 = 0xF0 ; SFR 页 = 所有页;可位寻址 位 名称 7:0 B[7:0] 功能 B 寄存器。 该寄存器为某些算术操作的第二累加器。 86 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 11.6. PSW:程序状态字 位 7 6 5 名称 CY AC F0 类型 R/W R/W R/W 复位 0 0 0 4 3 2 1 0 RS[1:0] OV F1 PARITY R/W R/W R/W R 0 0 0 0 0 SFR 地址 = 0xD0 ; SFR 页 = 所有页;可位寻址 位 名称 功能 7 CY 进位标志。 当最后一次算术操作产生进位 (加法)或借位 (减法)时,该位置 1。其它算术操作 将其清 0。 6 AC 辅助进位标志。 当最后一次算术操作向高半字节有进位 (加法)或借位 (减法)时,该位置 1。其它 算术操作将其清 0。 5 F0 用户标志 0。 这是一个可位寻址、受软件控制的通用标志位。 4:3 RS[1:0] 寄存器区选择。 该两位选择访问寄存器时所使用的寄存器区。 00:0 区,地址为 0x00-0x07。 01:1 区,地址为 0x08-0x0F。 10:2 区,地址为 0x10-0x17。 11:3 区,地址为 0x18-0x1F。 2 OV 溢出标志。 该位的下列情况下被置 1: ADD, ADDC 或 SUBB 指令引起符号位变化溢出。 指令引出溢出 ( 结果大于 255)。 DIV 指令的除数为 0。 MUL ADD、ADDC、 SUBB、MUL 和 DIV 指令的所有其它情况使该位清 0。 1 F1 用户标志 1。 这是一个可位寻址、受软件控制的通用标志位。 0 PARITY 奇偶标志。 累加器中 8 个位的和为奇数时该位被置 1,为偶数时被清 0。 ??? 1.4 87 C8051F380/1/2/3/4/5/6/7/C 88 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 12. 指令预取引擎 C8051F380/1/2/3/4/5/6/7/C 系统器件包含一个 2 字节指令预取引擎。由于 FLASH 存储器的访问时间是 40ns, 而最短指令执行时间约为 20ns,所以需要有预取引擎才能使程序全速执行。预取引擎每次从 FLASH 存储器 读取 2 个指令字节,送给 CIP-51 处理器核执行。当运行线性代码时 (程序没有任何转移),预取引擎使程 序能全速执行。当程序发生转移时处理器可能停止一到两个时钟周期,等待下一组代码字节从 FLASH 存储 器读出。 FLRT 位 (FLSCL.4)决定从 FLASH 中读一组代码字节 (两字节)所用的时钟周期数。当系统时 钟为 25MHz 或更低时, FLRT 位应被清 0,使预取引擎的每次读操作只用一个时钟周期。当系统时钟为 25MHz (最大 48MHz)时, FLRT 位应被置 1,使预取引擎的每次读操作使用两个时钟周期。 注意: 为了节约用电,当设备处于暂停模式时,可以禁用预取引擎。 SFR 定义 12.1. PFE0CN:预取引擎控制寄存器 位 7 6 5 4 3 2 1 PFEN 名称 0 FLBWE 类型 R R R/W R R R R R/W 复位 0 0 1 0 0 0 0 0 SFR 地址 = 0xAF ; SFR 页 = 所有页 位 名称 7:6 未使用 PFEN 5 功 能 读 = 00b,写 = 忽略。 预取使能位。 该位使能预取引擎。 0:禁止预取引擎。 1:使能预取引擎。 4:1 0 未使用 FLBWE 读 = 0000b. 写 = 忽略。 Flash 块写使能位。 该位允许软件对 FLASH 存储器执行块写操作。 0:软件 FLASH 写操作的每个字节都被单独写入。 1:FLASH 字节按 2 字节为一组写入。 ??? 1.4 88 C8051F380/1/2/3/4/5/6/7/C 89 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 13. 存储器组织 CIP-51 系统控制器的存储器组织与标准 8051 类似。有两个独立的存储器空间:程序存储器和数据存储器。 程序和数据存储器共享同一个地址空间,但用不同的指令类型访问。 C8041F380/1/2/3/4/5/6/7 器件的存储 器组织如图 13.1 和图 13.2 所示。 数据存储器 (RAM) 内部数据地址空间 程序/数据存储器(FLASH) 0xFFFF 0xFC00 保留 0xFBFF 0xFF 高 128 RAM (只能间接寻址 ) 特殊功能寄存器 (只能直接寻址) 0x80 0x7F (直接和间接寻址 ) FLASH 0x30 0x2F (在系统可编程, 扇区尺寸为512字节) 0x20 0x1F 0x00 位寻址空间 低128 RAM (直接和间接寻址) 通用寄存器 外部数据地址空间 0x0000 0xFFFF 片外 XRAM (仅限具有 EMIF的器件) 0x1000 0x0FFF XRAM - 4096 字节 (用MOVX指令访问 ) USB FIFO 1024 字节 0x07FF 0x0400 0x0000 图 13.1. 64 kB 器件 (C8051F380/1/4/5) 存储器组织图 ??? 1.4 89 C8051F380/1/2/3/4/5/6/7/C 数据存储器 (RAM) 内部数据地址空间 程序/数据存储器(FLASH) 0xFF 0x7FFF 高 128 RAM (只能间接寻址 ) FLASH 0x80 0x7F (在系统可编程, 扇区尺寸为512字节) (直接和间接寻址 ) 0x30 0x2F 0x0000 特殊功能寄存器 (只能直接寻址) 0x20 0x1F 0x00 位寻址空间 低128 RAM (直接和间接寻址) 通用寄存器 外部数据地址空间 0xFFFF 片外 XRAM (仅限具有 EMIF的器件) 0x0800 0x07FF XRAM - 2048 字节 USB FIFO 1024 字节 (用MOVX指令访问 ) 0x0000 图 13.2. 32 kB 器件 (C8051F382/3/6/7) 存储器组织图 90 ??? 1.4 0x07FF 0x0400 C8051F380/1/2/3/4/5/6/7/C 数据存储器 (RAM) 内部数据地址空间 程序/数据存储器(FLASH) 0xFF 0x7FFF 特殊功能寄存器 (只能直接寻址) 0x80 0x7F FLASH (在系统可编程, 扇区尺寸为512字节) (直接和间接寻址) 0x30 0x2F 0x0000 高 128 RAM (只能间接寻址) 0x20 0x1F 0x00 位寻址空间 低128 RAM (直接和间接寻址) 通用寄存器 外部数据地址空间 0xFFFF 片外 XRAM (仅限具有 EMIF的器件) 0x0800 0x07FF XRAM - 2048 字节 (用MOVX指令访问) USB FIFO 1024 字节 0x07FF 0x0400 0x0000 图 13.3. 16 kB 器件 (C8051F38C) 存储器组织图 13.1. 程序存储器 CIP-51 有 64KB 的程序存储器空间。 C8051F380/1/2/3/4/5/6/7/C 采用 64 kB、 32 kB 或 16 kB 的程序内存 空间作为系统内可再编程的闪存。注意:在 C8051F380/1/4/5 (64 kB 器件 ) 中,0xFBFF 以上的地址被保留。 程序存储器通常被认为是只读的。但是 CIP-51 可以通过置 1 程序存储写允许位 (PSCTL.0) 允许用 MOVX 指 令对程序存储器写入。这一特性为 CIP-51 提供了更新程序代码和将程序存储器空间用于非易失性数据存储 的机制。更详细的信息见第 135 页 18. 节 “Flash 存储器 ” 。 13.2. 数据存储器 CIP-51 包含 256 字节的内部 RAM,映射到 8051 的数据存储器空间 0x00~0xFF。数据存储器中的低 128 字 节用于通用寄存器和临时存储器。可以用直接或间接寻址方式访问数据存储器的低 128 字节。从 128 字节 用于通用寄存器和临时存储器。可以用直接或间接寻址方式访问数据存储器的低 128 字节。从 0x00 到 0x1F 为 4 个通用寄存器区,每个区有 8 个 8 位寄存器。接下来的 16 字节,从地址 0x20 到 0x2F, 既可以按字节 寻址又可以作为 128 个位地址用直接寻址方式访问。 ??? 1.4 91 C8051F380/1/2/3/4/5/6/7/C 数据存储器中的高 128 字节只能用间接寻址访问。该存储区与特殊功能寄存器 (SFR)占据相同的地址空 间,但物理上与 SFR 空间是分开的。当寻址高于 0x7F 的地址时,指令所用的寻址方式决定了 CPU 是访问 数据存储器的高 128 字节还是访问 SFR。使用直接寻址方式的指令将访问 SFR 空间,间接寻址高于 0x7F 地址的指令将访问数据存储器的高 128 字节。图 13.1 给出了 CIP-51 数据存储器组织的示意图。 13.3. 通用寄存器 数据存储器的低 32 字节,从地址 0x00 到 0x1F,可以作为 4 个通用寄存器区访问。每个区有 8 个 8 位寄存 器,称为 R0-R7。在某一时刻只能选择一个寄存器区。程序状态字中的 RS0 (PSW.3) 和 RS1 (PSW.4) 位用 于选择当前的寄存器区 (见 SFR 定义 11.6 中 PSW 的说明)。这允许在进入子程序或中断服务程序时进行 快速现场切换。间接寻址方式使用 R0 和 R1 作为间址寄存器。 13.4. 位寻址空间 除了直接访问按字节组织的数据存储器我,从 0x20 到 0x2F 的 16 个数据存储器单元还可以作为 128 个独立 寻址位访问。每个位有一个位地址,从 0x00 到 0x7F。位于地址 0x20 的数据字节的位 0 具有位地址 0x00, 位于 0x20 的数据字节的位 7 具有位地址 0x07。位于 0x2F 的数据字节的位 7 具有位地址 0x7F。由所用指 令的类型来区分是位寻址还是字节寻址。 MCS-51™ 汇编语言允许用 XX.B 的形式替代位地址, XX 为字节地址,B 为寻址位在字节中的位置。例如, 指令: MOV C, 22h.3 uqf 0x13 中的布尔值 (字节地址 0x22 中的位 3)传送到进位标志。 13.5. 堆栈 程序的堆栈可以位于 256 字节数据存储器中的任何位置。堆栈区域由堆栈指针 (SP) SFR 指定。SP 指向最后 使用的位置。下一个压入堆栈的数据将被存放在 SP+1,然后 SP 加 1。复位后堆栈指针被初始化为地址 0x07, 因此第一个被压入堆栈的数据将被存放在地址 0x08,这也是寄存器区 1 的第一个寄存器 (R0)。如果使用不止 一个寄存器区, SP 应被初始化为数据存储器中不用于数据存储的位置。堆栈深度最大可达 256 字节。 92 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 14. 外部数据存储器接口和片内 XRAM 器件 内部有 4 kB (C8051F380/1/4/5) 或 2 kB (C8051F382/3/6/7) 映射 到外部 数据存 储器空 间的 RAM (XRAM)。 1 kB 的 USB FIFO 也可以被映射到 XRAM 地址空间,作为额外的通用数据存储器使用。另外, C8051F380/2/4/6 器件还有可用于访问连接到 GPIO 端口的片外存储器和存储器映射器件的外部存储器接口 (EMIF)。外部存储器空间可以用外部传送指令 (MOVX) 和数据指针 (DPTR) 访问,或者通过使用 R0 或 R1 用间接寻址方式访问。如果 MOVX 指令使用一个 8 位地址操作数 (例如 @R1),则 16 位地址的高字节由 外部存储器接口控制寄存器 (EMI0CN,见 SFR 定义 14.1)提供。注意:MOVX 指令还用于写 FLASH 存 储器,详见第 135 页 18. 节 “Flash 存储器 ” 。缺省情况下 MOVX 指令访问 XRAM。 14.1. 访问 XRAM XRAM 存储器空间用 MOVX 指令访问。 MOVX 指令有两种形式,这两种形式都使用间接寻址方式。第一种 方法使用数据指针 DPTR,该 16 位寄存器中含有待读或写的 XRAM 单元的实际地址。第二种方法使用 R0 或 R1,与 EMI0CN 寄存器一起形成实际 XRAM 地址。下面举例说明这两种方法。 14.1.1. 16 位 MOVX 示例 16 位形式的 MOVX 指令访问由 DPTR 寄存器的内容所指向的存储器单元。下面的指令将地址 0x1234 的内 容读入累加器 A: MOV MOVX DPTR, #1234h A, @DPTR ;将待读单元的 16 位地址 (0x1234) 装入 DPTR ;将地址 0x1234 的内容装入累加器 A 上面的例子使用 16 位立即数 MOV 指令设置 DPTR 的内容。还可以通过访问特殊功能寄存器 DPH(DPTR 的 高 8 位)和 (DPTR 的低 8 位 ) 来改变 DPTR 的内容。 14.1.2. 8 位 MOVX 示例 8 位形式的 MOVX 指令使用特殊功能寄存器 EMI0CN 的内容给出待访地址的高 8 位,由 R0 或 R1 的内容给 出待访问地址的低 8 位。下面的指令将地址 0x1234 的内容读入累加器 A: MOV MOV MOVX EMI0CN, #12h R0, #34h a, @R0 ;将地址的高字节装入 EMI0CN ;将地址的低字节装入 R0 ( 或 R1) ;将地址 0x1234 的内容装入累加器 A ??? 1.4 93 C8051F380/1/2/3/4/5/6/7/C 14.2. 访问 USB FIFO 空间 C8051F380/1/2/3/4/5/6/7/C 内容包含 1KB 的 RAM 作为 USB FIFO 空间。图 14.1 给出了 FIFO 空间和用户 XRAM的扩展示意图。FIFO空间一般通过USB FIFO寄存器访问。有关访问FIFO空间的详细信息见第 181 页 21.5. 节 “FIFO 管理 ” 。不应使用 MOVX 指令装载或修改位于 FIFO 空间的 USB 数据。 如果需要, FIFO 空间中未使用的区域可被用作通用 XRAM。 FIFO 存储块工作在 USB 时钟域,因此在访问 FIFO 空间时,USB 时钟必须处于活动状态。注意:在访问 USB FIFO 空间时,MOVX 指令所需要的 SYSCLK 周期数增加。 若要用 MOVX 指令直接访问 FIFO RAM,则必须满足下述条件:1) 寄存器 EMI0CF 中的 USBFAE 位必须被 置 1 ; 2) USB 时钟必须大于或等于 SYSCLK 的 2 倍 (USBCLK > 2 x SYSCLK)。当该位被置 1 时, USB FIFO 被映射到 XRAM 空间的 0x0400-0x07FF。在 USBFAE 位被置 1 时,位于相同地址的一般 RAM (片 内或片外)不能被访问。 注意:在访问 FIFO 空间时, USB 时钟必须处于活动状态。 0xFFFF 片内 /片外 XRAM 0x0800 0x07FF 0x07C0 0x07B F 0x0740 0 x07 3F 端点0 (64 字节) 端点1 (1 28字节) 端点2 (2 56字节) US B FIFO 空间 0x0640 0 x06 3F (US B时 钟域) 端点3 (5 12字节) 0x0440 0 x04 3F 0x0400 0x03FF 未使用 (64 字节) 片内 /片外 XRAM 0x0000 图 14.1. USB FIFO 空间和 XRAM 存储器映射 (USBFAE=‘1’) 94 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 14.3. 配置外部存储器接口 配置外部存储器接口的过程包括下面 5 个步骤 : 1. 配置相应端口引脚的输出方式为推挽或漏极开路 (最常用的推挽方式),并在交叉开关中跳过这些引 脚。 2. 配置对应 EMIF 引脚的端口锁存器为休眠态 (通常将它们设置为逻辑 1)。 3. 选择复用方式或非复用方式。 4. 选择存储器模式 (只用片内存储器、不带块选择的分割方式、带块选择的分割方式或只用片外存储器) 5. 设置与片外存储器或外设接口的时序。 下面将对上述 5 个步骤作出详细说明。端口选择、复用方式选择和存储器模式位都位于 EMI0CF 寄存器中, 见 SFR 定义 14.5。 14.4. 端口配置 访问片外存储器时,外部存储器接口位于端口 4、 3、 2 和 1。使用 EMIF 时,应使用 P1SKIP 寄存器将交叉 开关配置为跳过控制线 P1.7 (WR)、P1.6 (RD) 和 P1.3 (ALE,如果选择复用方式 )。有关配置交叉开关的详 细信息,见第 153 页 图 20.1. 节 “ 端口 I/O 功能框图 (端口 0- 端口 3) ” 。 外部存储器接口只在执行片外 MOVX 指令期间使用相关的端口引脚。一旦 MOVX 指令执行完毕,端口锁存 器或交叉开关重新恢复对端口引脚的控制。有关交叉开关及端口操作和控制的详细信息见第 153 页 20. 节 “ 端口输入 / 输出 ” 。端口锁存器应被显式配置为使外部存储器接口引脚处于休眠状态,通常将它们设置为逻 辑 1。 在执行 MOVX 指令期间,外部存储器接口将禁止所有作为输入的那些端口引脚的驱动器 (例如,读操作期 间的 Data[7:0])。端口引脚的输出方式(无论引脚被配置为漏极开路或是推挽方式)不受外部存储器接口操 作的影响,始终受 PnMDOUT 寄存器的控制。在大多数情况下,所有 EMIF 引脚的输出方式都应被配置为推 挽方式。 ??? 1.4 95 C8051F380/1/2/3/4/5/6/7/C SFR 定义 14.1. EMI0CN:外部存储器接口控制寄存器 位 7 6 5 4 3 名称 PGSEL[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xAA ; SFR 页 = 所有页 位 名称 7:0 PGSEL[7:0] 功能 XRAM 页选择位。 当使用 8 位的 MOVX 命令时, XRAM 页选择拉提供 16 位外部数据存储器地址的高 字节,实际上是选择一个 256 字节的 RAM 页。 0x00:0x0000 to 0x00FF 0x01:0x0100 to 0x01FF ... 0xFE:0xFE00 to 0xFEFF 0xFF:0xFF00 to 0xFFFF 96 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 14.2. EMI0CF:外部存储器接口配置寄存器 位 7 6 5 USBFAE 名称 4 3 2 1 0 EMD2 EMD[1:0] EALE[1:0] R/W R/W 类型 R R/W R R/W 复位 0 0 0 0 0 0 1 1 SFR 地址 = 0x85 ; SFR 页 = 所有页 位 7 6 名称 未使用 USBFAE 功能 读 = 0b ;写 = 忽略。 USB FIFO 访问使能。 0:不能用 MOVX 指令访问 USB FIFO RAM。 1:可以用 MOVX 指令访问 USB FIFO RAM。 1k 的 USB RAM 被映射到 XRAM 空 间的 0x0400-0x07FF。在用 MOVX 指令访问该区域时, USB 时钟必须处于活动状 态,并且必须大于或等用于 SYSCLK 的 2 倍 (USBCLK > 2 x SYSCLK) 。 5 4 未使用 EMD2 读 = 0b ;读 = 忽略。 EMIF 复用方式选择位。 0:EMIF 工作地址 / 数据复用方式。 1:EMIF 工作在非复用方式 (独立的地址和数据引脚)。 3:2 EMD[1:0] EMIF 工作模式选择位。 这两位控制外部存储器接口的工作模式。 00:只用内部存储器。 MOVX 只寻址片内 XRAM。所有有效地址都指向片内存储 器空间。 01:不带块选择的分割方式。寻址低于片内 XRAM 边界的地址时访问片存储器, 寻址高于片内 XRAM 边界的地址时访问片外存储器。 8 位片外 MOVX 操作使用地 址高端口锁存器的当前内容作为地址的高字节。注意:为了能访问片外存储器空 间, EMI0CN 必须被设置成一个不属于片内地址空间的页地址。 10:带块选择的分割方式。寻址低于片内 XRAM 边界的地址时访问片内存储器, 寻址高于片内 XRAM 边界的地址时访问片外存储器。 8 位片外 MOVX 操作使用 EMI0CN 的内容作为地址的高字节。 11:只用外部存储器。MOVX 只寻址片外 XRAM。片内 XRAM 对 CPU 为不可见。 1:0 EALE[1:0] ALE 脉冲宽度选择位 ( 只有 EMD2 = 0 时有效 )。 00:ALE 高和 ALE 低脉冲宽度 = 1 个 SYSCLK 周期。 01:ALE 高和 ALE 低脉冲宽度 = 2 个 SYSCLK 周期。 10:ALE 高和 ALE 低脉冲宽度 = 3 个 SYSCLK 周期。 11:ALE 高和 ALE 低脉冲宽度 = 4 个 SYSCLK 周期。 ??? 1.4 97 C8051F380/1/2/3/4/5/6/7/C 14.5. 复用和非复用选择 外部存储器接口可以工作在复用方式或非复用方式,由 EMD2 位 (EMI0CF.4) 的状态决定。 14.5.1. 复用方式配置 在复用方式,数据总线和地址总线的低 8 位共享相同的端口引脚:AD[7:0]。在该方式下,要用一个外部锁 存器 (74HC373 或相同功能的逻辑门 ) 保持 RAM 地址的低 8 位。外部锁存器由 ALE ( 地址锁存使能 ) 信号 控制, ALE 信号由外部存储器接口逻辑驱动。图 14.2 给出了复用方式配置的一个例子。 在复用方式,可以根据 ALE 信号的状态将外部 MOVX 操作分成两个阶段。在第一阶段, ALE 为高电平,地 址总线的低 8 位出现在 AD[7:0]。在该阶段,地址锁存器的 ‘Q’ 输出直接反映 ‘D’ 输入的状态。ALE 由高变低 时标志第二阶段开始,地址锁存器的输出保持不变,即与锁存器的输入无关。在第二阶段后期,当 RD 或 WR 有效时,数据总线控制 AD[7:0] 端口的状态。 更详细的信息见第 107 页 14.7.2. 节 “ 复用方式 ” 。 A[15:8] 地址总线 A[15:8 ] 74HC373 E M I F G ALE AD[7 :0] 地址/数据总线 D Q A[7:0] V DD 64K X 8 SRAM (可选) 8 I/O[7:0] CE WE OE /WR /RD 图 14.2. 复用方式配置示例 14.5.2. 非复用方式配置 在非复用方式,数据总线和地址总线是分开的。图 14.3 给出了非复用方式配置的一个例子。关于非复用方 式操作的更详细的信息见第 104 页 14.7.1. 节 “ 非复用方式 ” 。 98 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C E M I F A[15:0] 地址总线 A[15:0] V DD (可选) 8 D[7:0] 数据总线 64K X 8 SRAM I/O[7:0] CE WE OE /WR /RD 图 14.3. 非复用方式配置示例 ??? 1.4 99 C8051F380/1/2/3/4/5/6/7/C 14.6. 存储器模式选择 可以用 EMI0CF 寄存器(SFR 定义 14.5)中的 EMIF 模式选择位将外部数据存储器空间配置为图 14.4 所示 的四种工作模式之一。下面简要介绍这些模式。有关不同模式的更详细信息见第 102 页 14.7. 节 “EMIF 时序 ”。 E MI0CF[3:2] = 00 EM I0CF[3:2] = 01 0xFFF F EM I0CF[3:2] = 10 0xFF FF E MI0CF[3:2] = 11 0xF FFF 0xF FFF 片 内 XR AM 片 内 XR AM 片外 存储器 (不带 块选择 ) 片外 存储器 ( 带块选 择) 片 内 XR AM 片外 存储器 片 内 XR AM 片 内 XR AM 片内 X RA M 片内 X RA M 片 内 XR AM 0x0000 0x0000 0x0000 0x0000 图 14.4. EMIF 工作模式 14.6.1. 只用内部 XRAM 当 EMI0CF.[3:2] 被设置为 00,所有 MOVX 指令都将访问器件内部的 XRAM 空间。存储器寻址的地址大于 实际地址空间时将以 2K 或 4K(取决于器件内部 XRAM 的大小)为边界回绕。例如:地址 0x1000 和 0x2000 都指向片内 XRAM 空间的 0x0000 地址。 8 位 MOVX 操作使用特殊功能寄存器 EMI0CN 的内容作为有效地址的高字节,由 R0 或 R1 给出有效地址 的低字节。 16 位 MOVX 操作使用 16 位寄存器 DPTR 的内容作为有效地址。 14.6.2. 无块选择的分割模式 当 EMI0CF.[3:2] 被设置为 01 时, XRAM 存储器空间被分割成两个区域,照片内空间和片外空间。 有效地址低于内部 XRAM 尺寸边界时将访问片内 XRAM 空间。 有效地址高于内部 XRAM 尺寸边界时将访问片内 XRAM 空间。 8 位 MOVX 操作使用特殊功能寄存器 EMI0CN 的内容确定是访问片内还是片外存储器。然而对于 “ 无块选 择 ” 模式,在访问片外存储器期间一个 8 位 MOVX 操作不驱动地址总线的高 8 位 A[15:8]。这就允许用 户通过直接设置商品的状态来按自己的意愿操作高位地址。下面将要描述的 “ 带块选择的分割模式 ” 则 与此相反。地址总线的低 8 位 A[7:0] 被驱动,由 R0 和 R1。 16 位 MOVX 操作使用 DPTR 的内容确定是访问片内还是片外存储器。与 8 位 MOVX 操作不同的是,在访 问片外存储器时,地址总线 A[15:0] 的全部 16 位都被驱动。 100 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 14.6.3. 带块选择的分割模式 当 EMI0CF.[3:2] 被设置为 10 时, XRAM 存储器空间被分割成两个区域,即片内空间和片外空间。 有效地址低于内部 XRAM 尺寸边界时将访问片内 XRAM 空间。 有效地址高于内部 XRAM 尺寸边界时将访问片外空间。 8位 MOVX操作使用特殊功能寄存器EMI0CN 的内容确定是访问片内还是片外存储器,地址总线的高8位 A[15:8] 由 EMI0CN 给出,而地址总线的低 8 位 A[7:0] 由 R0 或 R1 给出。在 “ 块选择 ” 模式,地址总线 A[15:0] 的全部 16 位都被驱动。 16 位 MOVX 操作使用 DPTR 的内容确定是访问片还是片外存储器,在访问片外存储器时,地址总线 A[15:0] 的全部 16 位都被驱动。 14.6.4. 只用外部存储器 当 EMI0CF[3:2] 被设置为 11 时,所有 MOVX 指令都将访问器件外部 XRAM 空间。片内 XRAM 对 CPU 为 不可见。该方式在访问从 0x0000 开始到内部 XRAM 尺寸边界之间的片外存储器时有用。 8 位 MOVX 操作忽略 EMI0CN 的内容。高地址位 A[15:8] 不被驱动(与 “ 不带块选择的分割模式 ” 中描述的访 问片外存储器的行为相同)。这就允许用户通过直接设置商品的状态来按自己的意愿操作高位地址。有 效地址的低 8 位 A[7:0] 由 R0 或 R1 给出。 16 位 MOVX 操作使用 DPTR 的内容确定有效地址 A[15:0]。在访问片外存储器时,地址总线 A[15:0] 的全部 16 位都被驱动。 ??? 1.4 101 C8051F380/1/2/3/4/5/6/7/C 14.7. EMIF 时序 外部存储器接口的时序参数是可编程的,这就允许连接具有不同建立时间和保持时间要求的器件。地址建立 时间、地址保持时间、RD 和 WR 选通脉冲的宽度以及利用方式下 ALE 脉冲的宽度都可以通过 EMI0TC(见 SFR 定义 13.3)和 EMI0CF[1:0] 编程,编程单位为 SYSCLK 周期。 片外 MOVX 指令的时序可以通过将 EMI0TC 寄存器中定义的时序参数加上 4 个 SYSCLK 周期来计算。在非 复用方式,一次片外 XRAM 操作的最小执行时间为 5 个 SYSCLK 周期(用于 RD 或 WR 脉冲的 1 个 SYSCLK+ 4 个 SYSCLK)。对于复用方式,地址锁存使能信号至少需要 2 个附加的 SYSCLK 周期。因此,在复用方 式,一次片外 XRAM 操作的最小执行时间为 7 个 SYSCLK 周期 (用于 ALE 的 2 个 SYSCLK+ 用于 RD 或 WR + 4 个 SYSCLK)。在器件复位后,可编程建立和保持时间的缺省值为最大延迟设置。 表 13.1 列出了外部存储器接口的 AC 参数,图 13.5~ 图 13.10 给出了对应不同外部存储器接口模式和 MOVX 操作的时序图。 102 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 14.3. EMI0TC:外部存储器时序控制寄存器 位 7 6 5 4 3 2 1 0 名称 EAS[1:0] EWR[3:0] EAH[1:0] 类型 R/W R/W R/W 复位 1 1 1 1 1 1 1 1 SFR 地址 = 0x84 ; SFR 页 = 所有页 位 名称 7:6 EAS[1:0] 功能 EMIF 地址建立时间位。 00:地址建立时间 = 0 个 SYSCLK 周期。 01:地址建立时间 = 1 个 SYSCLK 周期。 10:地址建立时间 = 2 个 SYSCLK 周期。 11:地址建立时间 = 3 个 SYSCLK 周期。 5:2 EWR[3:0] EMIF WR 和 RD 脉冲宽度控制位。 0000:WR 和 RD 脉冲宽度 = 1 个 SYSCLK 周期。 0001:WR 和 RD 脉冲宽度 = 2 个 SYSCLK 周期。 0010:WR 和 RD 脉冲宽度 = 3 个 SYSCLK 周期。 0011:WR 和 RD 脉冲宽度 = 4 个 SYSCLK 周期。 0100:WR 和 RD 脉冲宽度 = 5 个 SYSCLK 周期。 0101:WR 和 RD 脉冲宽度 = 6 个 SYSCLK 周期。 0110:WR 和 RD 脉冲宽度 = 7 个 SYSCLK 周期。 0111:WR 和 RD 脉冲宽度 = 8 个 SYSCLK 周期。 1000:WR 和 RD 脉冲宽度 = 9 个 SYSCLK 周期。 1001:WR 和 RD 脉冲宽度 = 10 个 SYSCLK 周期。 1010:WR 和 RD 脉冲宽度 = 11 个 SYSCLK 周期。 1011:WR 和 RD 脉冲宽度 = 12 个 SYSCLK 周期。 1100:WR 和 RD 脉冲宽度 = 13 个 SYSCLK 周期。 1101:WR 和 RD 脉冲宽度 = 14 个 SYSCLK 周期。 1110:WR 和 RD 脉冲宽度 = 15 个 SYSCLK 周期。 1111:WR 和 RD 脉冲宽度 = 16 个 SYSCLK 周期。 1:0 EAH[1:0] EMIF 地址保持时间位。 00:地址保持时间 = 0 个 SYSCLK 周期。 01:地址保持时间 = 1 个 SYSCLK 周期。 10:地址保持时间 = 2 个 SYSCLK 周期。 11:地址保持时间 = 3 个 SYSCLK 周期。 ??? 1.4 103 C8051F380/1/2/3/4/5/6/7/C 14.7.1. 非复用方式 14.7.1.1. 16 位 MOVX:EMI0CF[4:2] = 101, 110,或 111 非复用 16位写 A DDR[15:8] P2 来自DP H的EMIF高8 位地址 P2 A DDR[7:0] P3 来自 DPL的E MIF低8位地址 P3 DATA [7:0] P4 E MIF写数据 P4 T T WDS T ACS WDH T T ACW ACH /WR P1.7 P1.7 /RD P1.6 P1.6 非复用 16位读 A DDR[15:8] P2 来自DP H的EMIF高8 位地址 P2 A DDR[7:0] P3 来自 DPL的E MIF低8位地址 P3 DATA [7:0] P4 T RDS T ACS T T ACW RDH T ACH /RD P1.6 P1.6 /WR P1.7 P1.7 图 14.5. 非复用 16 位 MOVX 时序 104 P4 EMIF读数据 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 14.7.1.2. 无块选择的 8 位 MOVX:EMI0CF[4:2] = 101 或 111 不带块选择的非复用 8 位写 A DDR[15:8] P2 A DDR[7:0] P3 来自 R0或R1的 EMIF低8位地址 P3 DATA [7:0] P4 E MIF写数据 P4 T T WDS T ACS WDH T T ACW ACH /WR P1.7 P1.7 /RD P1.6 P1.6 不带块选择的非复用 8 位读 A DDR[15:8] P2 A DDR[7:0] P3 来自 R0或R1的 EMIF低8位地址 P3 DATA [7:0] P4 EMIF读数据 P4 T RDS T ACS T ACW T RDH T ACH /RD P1.6 P1.6 /WR P1.7 P1.7 图 14.6. 无块选择的非复用 8 位 MOVX 时序 ??? 1.4 105 C8051F380/1/2/3/4/5/6/7/C 14.7.1.3. 带块选择的 8 位 MOVX:EMI0CF[4:2] = 110 带块选择的非复用 8位写 ADDR[15 :8] P2 来自EMI0 CN的高 8位EMIF地址 P2 ADDR[7:0] P3 来自 R0或R1 的低8位EMIF地址 P3 DATA[7:0] P5 EMIF写数据 P4 T T WDS T WDH T ACS T ACW ACH /WR P1.7 P 1.7 /RD P1.6 P 1.6 带块选择的非复用 8位读 ADDR[15 :8] P2 来自EMI0 CN的高 8位EMIF地址 P2 ADDR[7:0] P3 来自 R0或R1 的低8位EMIF地址 P3 DATA[7:0] P4 EMIF读数据 P4 T RDS T T ACS ACW T RDH T ACH /RD P1.6 P 1.6 /WR P1.7 P 1.7 图 14.7. 带块选择的非复用 8 位 MOVX 时序 106 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 14.7.2. 复用方式 14.7.2.1. 16 位 MOVX:EMI0CF[4:2] = 001, 010,或 011 复用方式16 位写 ADDR[15:8] P3 AD[7:0] P4 来自DPH的EMIF高8位地址 来自 DPL的EMIF低8位地址 T ALEH A LE P3 EMIF写数据 P4 T ALEL P1.3 P1.3 T T WDS T ACS WDH T T ACW ACH /WR P1.7 P1.7 /RD P1.6 P1.6 复用方式16 位读 ADDR[15:8] P3 AD[7:0] P4 来自DPH的EMIF高8位地址 来自 DPL的EMIF低8位地址 T ALEH A LE P3 EMI F读数据 T T ALEL RDS P4 T RDH P1.3 P1.3 T ACS T ACW T ACH /RD P1.6 P1.6 /WR P1.7 P1.7 图 14.8. 复用方式 16 位 MOVX 时序 ??? 1.4 107 C8051F380/1/2/3/4/5/6/7/C 14.7.2.2. 无块选择的 8 位 MOVX:EMI0CF[4:2] = 001 或 011 无块选择的复用方式 8位写 ADDR[15:8] AD[7:0] P3 P4 来自R0或R1的EMIF低8位地址 T ALEH ALE EMIF写数据 P4 T ALEL P1.3 P1.3 T T WDS T ACS WDH T T ACW AC H /WR P1.7 P1.7 /RD P1.6 P1.6 无块选择的复用方式 8位读 ADDR[15:8] AD[7:0] P3 P4 来自R0或R1的EMIF低8位地址 T ALEH ALE EMI F读数据 T ALEL T RDS T RDH P1.3 P1.3 T ACS T ACW T AC H /RD P1.6 P1.6 /WR P1.7 P1.7 图 14.9. 无块选择的复用方式 8 位 MOVX 时序 108 P4 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 14.7.2.3. 带块选择的 8 位 MOVX:EMI0CF[4:2] = 010 带块选择的复用方式 8位写 ADDR[15:8] P3 AD[7:0] P4 来自EMI0CN的EMIF 高8位地址 来自R0或R1的EMIF低8位地址 T ALEH A LE P3 EMIF写数据 P4 T ALEL P1.3 P1.3 T T WDS T ACS WDH T T ACW ACH /WR P1.7 P1.7 /RD P1.6 P1.6 带块选择的复用方式 8位读 ADDR[15:8] P3 AD[7:0] P4 来自EMI0CN的EMIF 高8位地址 来自R0或R1的EMIF低8位地址 T ALEH A LE P3 EMI F读数据 T T ALEL RDS P4 T RDH P1.3 P1.3 T ACS T ACW T ACH /RD P1.6 P1.6 /WR P1.7 P1.7 图 14.10. 带块选择的复用方式 8 位 MOVX 时序 ??? 1.4 109 C8051F380/1/2/3/4/5/6/7/C 表 14.1. 外部存储器接口的 AC 参数 参数 说明 最小值 * 最大值 * 单位 TACS 地址 / 控制信号建立时间 0 3 x TSYSCLK ns TACW 地址 / 控制信号脉冲宽度 1 x TSYSCLK 16 x TSYSCLK ns TACH 地址 / 控制信号保持时间 0 3 x TSYSCLK ns TALEH 地址锁存使能信号高电平时间 1 x TSYSCLK 4 x TSYSCLK ns TALEL 地址锁存使能信号低电平时间 1 x TSYSCLK 4 x TSYSCLK ns TWDS 写数据建立时间 1 x TSYSCLK 19 x TSYSCLK ns TWDH 写数据保持时间 0 3 x TSYSCLK ns TRDS 读数据建立时间 20 ns TRDH 读数据保持时间 0 ns 注意 : TSYSCLK 等于系统时钟 (SYSCLK) 的第一个周期。 110 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 15. 特殊功能寄存器 从 0x80 到 0xFF 的 直接 寻址数 据存储 器空间 为特殊 功能寄 存器 (SFR)。 SFR 提供对 C8051F380/1/2/3/4/5/6/7/C 的资源和外设的控制及 CIP-51 与这些资源和外设之间的数据交换。CIP-51 控制 器核不仅具有标准 8051 中的全部 SFR,还增加了一些用于配置和访问 C8051F380/1/2/3/4/5/6/7/C 专有子 系统 的 SFR。这 就允许 在保证 与 MCS-51™ 指令集 兼容的 前提下 增加新 的功能。表 15.1 列出了 C8051F380/1/2/3/4/5/6/7/C 器件中实现的全部 SFR。 任何时刻用直接寻址方式访问从 0x80 到 0xFF 的存储器空间,都将访问特殊功能寄存器 (SFR)。地址以 0x0 或 0x8 结尾的 SFR (例如 P0, TCON, SCON0, IE, 等)既可以按字节寻址,所有其它 SFR 只能按字节寻 址。SFR 空间中未使用的地址保留炎将来使用,访问这些地址会产生不确定的结果,应予避免。有关表 15.2 中列出的每个寄存器的详细说明请参见本数据表的相关部分。 15.1. SFR 分页 CIP-51 实现了 SFR 分页机制,允许器件将很多 SFR 映射到 0x80 - 0xFF 这个存储器地址空间。 SFR 存储 0xFF 的每个 存储器 地址可 以访问 最多 256 个 SFR。 器空 间有 256 页。这样 一来, 0x80 C8051F380/1/2/3/4/5/6/7/C 器件使用两个 SFR 页:0x0 和 0xF。大多数 SFR 在这两个页都可用。使用页选 择寄存器 SFRPAGE 来选择 SFR 页。读和写 SFR 的步骤如下: 1. 用 SFRPAGE 寄存器选择正确的 SFR 页。 2. 使用直接寻址方式读或写特殊功能寄存器 (MOV 指令)。 注意:当在一个中断服务程序 (ISR) 中读或写那些不是在所有页都可用的 SFR 时,建议在进入 ISR 时保存 SFRPAGE 寄存器的状态,在中断返回前恢复 SFRPAGE 寄存器的状态。 SFR 定义 15.1. SFRPAGE:SFR 页寄存器 位 7 6 5 4 3 名称 SFRPAGE[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xBF ; SFR 页 = 所有页 位 名称 7:0 SFRPAGE[7:0] 功能 SFR 页选择位。 指明 C8051 核读或修改特殊功能寄存器时使用的 SFR 页。 写:设置 SFR 页。 读:返回 C8051 核正在使用的 SFR 页。 ??? 1.4 111 C8051F380/1/2/3/4/5/6/7/C 页 地址 表 15.1. 特殊功能寄存器 (SFR) 存储器映象 F8 F0 E8 E0 0 F D8 D0 0 F 0 C0 F 0 B8 F B0 A8 A0 98 0 90 F 88 80 C8 0(8) 1(9) 2(A) 3(B) 4(C) 6(E) 7(F) SPI0CN PCA0L PCA0H PCA0CPL0 PCA0CPH0 PCA0CPL4 PCA0CPH4 VDM0CN B P0MDIN P1MDIN P2MDIN P3MDIN P4MDIN EIP1 EIP2 ADC0CN PCA0CPL1 PCA0CPH1 PCA0CPL2 PCA0CPH2 PCA0CPL3 PCA0CPH3 RSTSRC IT01CF ACC XBR0 XBR1 XBR2 SMOD1 EIE1 EIE2 CKCON1 PCA0CN PCA0MD PCA0CPM0 PCA0CPM1 PCA0CPM2 PCA0CPM3 PCA0CPM4 P3SKIP PSW REF0CN SCON1 SBUF1 P0SKIP P1SKIP P2SKIP USB0XCN TMR2CN TMR2RLL TMR2RLH TMR2L TMR2H SMB0ADM SMB0ADR REG01CN TMR5CN TMR5RLL TMR5RLH TMR5L TMR5H SMB1ADM SMB1ADR SMB0CN SMB0CF SMB0DAT ADC0GTL ADC0GTH ADC0LTL ADC0LTH P4 SMB1CN SMB1CF SMB1DAT CLKMUL ADC0CF IP AMX0N AMX0P ADC0L ADC0H SFRPAGE SMBTC P3 OSCXCN OSCICN OSCICL SBRLL1 SBRLH1 FLSCL FLKEY IE CLKSEL EMI0CN SBCON1 P4MDOUT PFE0CN P2 SPI0CFG SPI0CKR SPI0DAT P0MDOUT P1MDOUT P2MDOUT P3MDOUT SCON0 SBUF0 CPT1CN CPT0CN CPT1MD CPT0MD CPT1MX CPT0MX TMR3CN TMR3RLL TMR3RLH TMR3L TMR3H P1 USB0ADR USB0DAT TMR4CN TMR4RLL TMR4RLH TMR4L TMR4H TCON TMOD TL0 TL1 TH0 TH1 CKCON PSCTL P0 SP DPL DPH EMI0TC EMI0CF OSCLCN PCON 0(8) 1(9) 2(A) 3(B) 4(C) 5(D) 6(E) 7(F) 注: 1. 地址以 0x0 或 0x8 结尾的 SFR 是可位寻址的,可以用来操作指令访问。 2. 除特别注明者外, SFR 的 0 页和 F 页都可用。 112 5(D) ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 表 15.2. 特殊功能寄存器 SFR 以字母顺序排列,所有未定义的 SFR 位置保留。 寄存器 地址 页 0xE0 所有页 累加器 ACC 说明 页码 86 ADC0CF 0xBC 所有页 ADC0 配置寄存器 53 ADC0CN 0xE8 所有页 ADC0 控制寄存器 55 ADC0GTH 0xC4 所有页 ADC0 下限 (大于)比较字高字节 56 ADC0GTL 0xC3 所有页 ADC0 下限 (大于)比较字低字节 56 ADC0H 0xBE 所有页 ADC0 数据字高字节 54 ADC0L 0xBD 所有页 ADC0 数据字低字节 54 ADC0LTH 0xC6 所有页 ADC0 下限 (大于)比较字 57 ADC0LTL 0xC5 所有页 ADC0 下限 (大于)比较字 57 AMX0N 0xBA 所有页 AMUX0 负通道选择寄存器 61 AMX0P 0xBB 所有页 AMUX0 正通道选择寄存器 61 B 0xF0 所有页 B 寄存器 86 CKCON 0x8E 所有页 时钟控制寄存器 264 CKCON1 0xE4 F 时钟控制寄存器 1 265 CLKMUL 0xB9 0 时钟乘法寄存器 147 CLKSEL 0xA9 所有页 时钟控制寄存器 144 CPT0CN 0x9B 所有页 比较器 0 控制寄存器 67 CPT0MD 0x9D 所有页 比较器 0 方式选择寄存器 68 CPT0MX 0x9F 所有页 比较器 0 MUX 选择寄存器 72 CPT1CN 0x9A 所有页 比较器 1 控制寄存器 69 CPT1MD 0x9C 所有页 比较器 1 方式选择寄存器 70 CPT1MX 0x9E 所有页 比较器 1 MUX 选择寄存器 73 DPH 0x83 所有页 数据指针高字节 85 DPL 0x82 所有页 数据指针低字节 85 EIE1 0xE6 所有页 扩展中断允许寄存器 1 123 EIE2 0xE7 所有页 扩展中断允许寄存器 2 125 EIP1 0xF6 所有页 扩展中断优先级寄存器 1 124 EIP2 0xF7 所有页 扩展中断优先级寄存器 2 126 EMI0CF 0x85 所有页 外部存储器接口配置寄存器 97 EMI0CN 0xAA 所有页 外部存储器接口控制寄存器 96 EMI0TC 0x84 所有页 外部存储器接口时序控制寄存器 103 FLKEY 0xB7 所有页 Flash 锁定和关键码寄存器 140 FLSCL 0xB6 所有页 Flash 存储器时序预分频器 141 ??? 1.4 113 C8051F380/1/2/3/4/5/6/7/C 表 15.2. 特殊功能寄存器 (Continued) SFR 以字母顺序排列,所有未定义的 SFR 位置保留。 寄存器 地址 页 0xA8 所有页 中断允许寄存器 IE IP 0xB8 所有页 IT01CF 0xE4 OSCICL 说明 页码 121 中断优先级寄存器 122 0 INT0/INT1 配置寄存器 128 0xB3 所有页 内部振荡器校准寄存器 145 OSCICN 0xB2 所有页 内部低振荡器控制寄存器 146 OSCLCN 0x86 所有页 内部低频振荡器控制寄存器 148 OSCXCN 0xB1 所有页 外部振荡器控制寄存器 152 P0 0x80 所有页 端口 0 锁存器 162 P0MDIN 0xF1 所有页 端口 0 输入方式配置寄存器 162 P0MDOUT 0xA4 所有页 端口 0 输出方式配置寄存器 163 P0SKIP 0xD4 所有页 端口 0 跳过寄存器 163 P1 0x90 所有页 端口 1 锁存器 164 P1MDIN 0xF2 所有页 端口 1 输入方式配置寄存器 164 P1MDOUT 0xA5 所有页 端口 1 输出方式配置寄存器 165 P1SKIP 0xD5 所有页 端口 1 跳过寄存器 165 P2 0xA0 所有页 端口 2 锁存器 166 P2MDIN 0xF3 所有页 端口 2 输入方式配置寄存器 166 P2MDOUT 0xA6 所有页 端口 2 输出方式配置寄存器 167 P2SKIP 0xD6 所有页 端口 2 跳过锁存器 167 P3 0xB0 所有页 端口 3 锁存器 168 P3MDIN 0xF4 所有页 端口 3 输入方式配置寄存器 168 P3MDOUT 0xA7 所有页 端口 3 输出方式配置寄存器 169 P3SKIP 0xDF 所有页 端口 3 跳过锁存器 169 P4 0xC7 所有页 端口 4 锁存器 170 P4MDIN 0xF5 所有页 端口 4 输入方式配置寄存器 170 P4MDOUT 0xAE 所有页 端口 4 输出方式配置寄存器 171 PCA0CN 0xD8 所有页 PCA 控制寄存器 311 PCA0CPH0 0xFC 所有页 PCA 捕捉模块 0 高字节 315 PCA0CPH1 0xEA 所有页 PCA 捕捉模块 1 高字节 315 PCA0CPH2 0xEC 所有页 PCA 捕捉模块 2 高字节 315 PCA0CPH3 0xEE 所有页 PCA 捕捉模块 3 高字节 315 PCA0CPH4 0xFE 所有页 PCA 捕捉模块 4 高字节 315 PCA0CPL0 0xFB 所有页 PCA 捕捉模块 0 低字节 315 PCA0CPL1 0xE9 所有页 PCA 捕捉模块 1 低字节 315 114 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 表 15.2. 特殊功能寄存器 (Continued) SFR 以字母顺序排列,所有未定义的 SFR 位置保留。 寄存器 地址 页 0xEB 所有页 PCA 捕捉模块 2 低字节 PCA0CPL2 说明 页码 315 PCA0CPL3 0xED 所有页 PCA 捕捉模块 3 低字节 315 PCA0CPL4 0xFD 所有页 PCA 捕捉模块 4 低字节 315 PCA0CPM0 0xDA 所有页 PCA 模块 0 方式寄存器 313 PCA0CPM1 0xDB 所有页 PCA 模块 1 方式寄存器 313 PCA0CPM2 0xDC 所有页 PCA 模块 2 方式寄存器 313 PCA0CPM3 0xDD 所有页 PCA 模块 3 方式寄存器 313 PCA0CPM4 0xDE 所有页 PCA 模块 4 方式寄存器 313 PCA0H 0xFA 所有页 PCA 计数器高字节 314 PCA0L 0xF9 所有页 PCA 计数器低字节 314 PCA0MD 0xD9 所有页 PCA 方式寄存器 312 PCON 0x87 所有页 电源控制寄存器 78 PFE0CN 0xAF 所有页 预取引擎控制寄存器 88 PSCTL 0x8F 所有页 程序存储读 / 写控制寄存器 139 PSW 0xD0 所有页 程序状态字 87 REF0CN 0xD1 所有页 电压基准控制寄存器 63 REG01CN 0xC9 所有页 稳夺器控制寄存器 75 RSTSRC 0xEF 所有页 复位源配置 / 状态寄存器 134 SBCON1 0xAC 所有页 UART1 波特率发生器控制寄存器 248 SBRLH1 0xB5 所有页 UART1 波特率发生器高字节 248 SBRLL1 0xB4 所有页 UART1 波特率发生器低字节 249 SBUF0 0x99 所有页 UART0 数据缓冲器 238 SBUF1 0xD3 所有页 UART1 数据缓冲器 247 SCON0 0x98 所有页 UART0 控制寄存器 237 SCON1 0xD2 所有页 UART1 控制寄存器 245 SFRPAGE 0xBF 所有页 SFR 页选择寄存器 111 SMB0ADM 0xCE 0 SMBus0 地址掩码寄存器 219 SMB0ADR 0xCF 0 SMBus0 地址寄存器 218 SMB0CF 0xC1 0 SMBus0 配置寄存器 211 SMB0CN 0xC0 0 SMBus0 控制寄存器 215 SMB0DAT 0xC2 0 SMBus0 数据寄存器 221 SMB1ADM 0xCE F SMBus1 地址掩码寄存器 220 SMB1ADR 0xCF F SMBus1 地址寄存器 219 SMB1CF 0xC1 F SMBus1 配置寄存器 211 ??? 1.4 115 C8051F380/1/2/3/4/5/6/7/C 表 15.2. 特殊功能寄存器 (Continued) SFR 以字母顺序排列,所有未定义的 SFR 位置保留。 寄存器 地址 页 0xC0 F SMBus1 控制寄存器 SMB1CN 说明 页码 216 SMB1DAT 0xC2 F SMBus1 数据寄存器 222 SMBTC 0xB9 F SMBus0/1 时间控制寄存器 213 SMOD1 0xE5 所有页 UART1 方式寄存器 246 SP 0x81 所有页 堆栈指针 86 SPI0CFG 0xA1 所有页 SPI 配置寄存器 257 SPI0CKR 0xA2 所有页 SPI 时钟频率控制寄存器 259 SPI0CN 0xF8 所有页 SPI 控制寄存器 258 SPI0DAT 0xA3 所有页 SPI 数据寄存器 259 TCON 0x88 所有页 计数器 / 定时器控制寄存器 270 TH0 0x8C 所有页 计数器 / 定时器 0 高字节 273 TH1 0x8D 所有页 计数器 / 定时器 1 高字节 273 TL0 0x8A 所有页 计数器 / 定时器 0 低字节 272 TL1 0x8B 所有页 计数器 / 定时器 1 低字节 272 TMOD 0x89 所有页 计数器 / 定时器方式寄存器 271 TMR2CN 0xC8 0 计数器 / 定时器 2 控制寄存器 278 TMR2H 0xCD 0 计数器 / 定时器 2 高字节 280 TMR2L 0xCC 0 计数器 / 定时器 2 低字节 279 TMR2RLH 0xCB 0 计数器 / 定时器 2 重载值高字节 279 TMR2RLL 0xCA 0 计数器 / 定时器 2 重载值低字节 279 TMR3CN 0x91 0 计数器 / 定时器 3 控制寄存器 285 TMR3H 0x95 0 计数器 / 定时器 3 高字节 287 TMR3L 0x94 0 计数器 / 定时器 3 低字节 286 TMR3RLH 0x93 0 计数器 / 定时器 3 重载值高字节 286 TMR3RLL 0x92 0 计数器 / 定时器 3 重载值高字节 286 TMR4CN 0x91 F 计数器 / 定时器 4 控制寄存器 290 TMR4H 0x95 F 计数器 / 定时器 4 高字节 292 TMR4L 0x94 F 计数器 / 定时器 4 低字节 291 TMR4RLH 0x93 F 计数器 / 定时器 4 重载值高字节 286 TMR4RLL 0x92 F 计数器 / 定时器 4 重载值低字节 286 TMR5CN 0xC8 F 计数器 / 定时器 5 控制寄存器 295 TMR5H 0xCD F 计数器 / 定时器 5 高字节 297 TMR5L 0xCC F 计数器 / 定时器 5 低字节 296 TMR5RLH 0xCB F 计数器 / 定时器 5 重载值高字节 296 116 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 表 15.2. 特殊功能寄存器 (Continued) SFR 以字母顺序排列,所有未定义的 SFR 位置保留。 寄存器 地址 页 说明 0xCA F 计数器 / 定时器 5 重载值低字节 TMR5RLL 页码 296 USB0ADR 0x96 所有页 USB0 间接地址寄存器 176 USB0DAT 0x97 所有页 USB0 数据寄存器 177 USB0XCN 0xD7 所有页 USB0 收发器控制寄存器 174 VDM0CN 0xFF 所有页 VDD 监视器控制寄存器 132 XBR0 0xE1 所有页 端口 I/O 交叉开关控制 0 159 XBR1 0xE2 所有页 端口 I/O 交叉开关控制 1 160 XBR2 0xE3 所有页 端口 I/O 交叉开关控制 2 161 ??? 1.4 117 C8051F380/1/2/3/4/5/6/7/C 118 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 16. 中断系统 C8051F380/1/2/3/4/5/6/7/C 包含一个扩展的中断系统,支持多个中断源,每个中断源有两个优先级。中断 源在片内外设与外部输入引脚之间的分配随随器件的不同而变化。每个中断源在一个 SFR 中有一个或多个 中断标志。当一个外设或外部源满足有效的中断条件时,相应的中断标志被置为逻辑 1。 如果中断源的中断被使能,则当中断标志置 1 时会产生中断请求。一旦当前指令执行结束, CPU 立即产生 一个 LCALL 到预定地址,开始执行中断服务程序 (ISR)。每个 ISR 必须以 RETI 指令结束,使程序回到中断 前执行的那条指令的下一条指令。如果中断未被允许,中断标志将被硬件忽略,程序继续正常执行。(中断 标志置 1 与否不受中断允许 / 禁止状态的影响。) 通过使用位于某个 SFR (IE, EIE1 或 EIE2) 中的相关中断使能位,可以单独使能或禁止每个中断源。但是必 须通过将 EA 位 (IE.7) 置 1 来总体使能中断,以保证每个单独的中断允许位有效。不管每个中断允许位的设 置如何,清除 EA 位将禁止所有中断。 注意:将某个清 0 以禁止一个中断的任何指令之后都应紧跟一条有 2 或 3 个操作码字节的指令。以 EA (总 体中断允许位)为例: // 用 'C' 语言 : EA = 0; // 清 EA 位 EA = 0; // 这是一条 2 字节操作码的虚指令 ; 用汇编语言 : CLR EA ; 清 EA 位 CLR EA ; 这是一条 2 字节操作码的虚指令 例如,如果在 "CLR EA" 操作码 (或任何将某位清 0 以禁止一个中断的指令)的执行阶段产生了中断请求, 而该指令之后是一条单周期指令,则可能发生中断。然而,在中断服务程序内读中断使能位会返回 0 值。当 位清除操作码后面是一条多周期指令时,则不会发生中断。 某些中断标志在 CPU 进入 ISR 时被硬件自动清除,但大多数中断标志不是由硬件清除的,必须从 ISR 返回 前用软件清除。如果一个中断标志在 CPU 执行完中断返回(RETI)指令后仍然保持置 1 状态,则会立即产 生一个新的中断请求, CPU 将在执行完下一条指令后再次进入该 ISR。 ??? 1.4 118 C8051F380/1/2/3/4/5/6/7/C 16.1. MCU 中断源和中断向量 C8051F380/1/2/3/4/5/6/7/C 支持多个中断源。软件可以通过将一个中断标志设置为逻辑 1 来模拟中断。如 果中断标志被允许,系统将产生一个中断请求,CPU 将转身与该中断标志对应的 ISR 地址。表 16.1 列出了 MCU 中断源、中断向量地址、优先顺序和控制位。关于某个外设的有效中断条件和中断标志位行为方面的 详细信息,请见与特定外设相关的章节。 16.1.1. 中断优先级 每个中断源都可以被独立地编程为两个优先级中的一个:低优先级或高优先级。一个低优先级的中断服务程 序可以被高优先级的中断所中断,但高优先级的中断不能被中断。每个中断在一个 SFR (IP, EIP1 或 EIP2) 中都有一个中断优先级设置位,用于配置其优先级,缺少值为低优先级。如果两个中断同时被识别,则具有 高优先级的中断先得到服务。如果这两个中断的优先级相同,则由表 16.1 给出的固定优先顺序决定哪一个 中断先得到服务。 16.1.2. 中断延迟 中断响应时间取决于中断发生时 CPU 的状态。中断系统在每个系统时钟周期对中断请求标志采样并对优先 级译码。最快的响应时间为 6 个系统时钟周期:一个周期用于检测中断, 5 个周期用于完成对 ISR 的长调用 (LCALL)。如果中断标志有效时 CPU 正在执行 RETI 指令,则需要再执行一条指令才能进入中断服务程序。 因此,最长的中断响应时间(没有其它中断正被服务或新中断具有较高优先级)发生在 CPU 正在执行 RETI 指令,而下一条指令是 DIV 的情况。在这种情况下,响应时间为 20 个系统时钟周期:1 个时钟周期检测中 断,6 个时钟周期执行 RETI,8 个时钟周期完成 DIV 指令,5 个时钟周期执行对 ISR 的长调用 (LCALL)。如 果 CPU 正在执行一个具有相同或更高优先级的中断的 ISR,则新中断要等到当前 ISR 执行完 (包括 RETI 和下一条指令 )才能得到服务。 注意:在 FLASH 写操作和用 MOVX 指令访问 USB FIFO 期间 CPU 暂停执行程序。如此时发生中断,则中 断服务延迟会增加。这种情况下的中断延迟由标准中断服务过程 (如上所述)和 CPU 暂停时间决定。 16.2. 中断寄存器说明 下面介绍用于允许中断源和设置中断优先级的特殊功能寄存器。关于外设的有效中断条件和中断标志行为方 面的详细信息,请见与特定片内外设相关的章节。 119 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 硬件清除 中断源 位寻址 表 16.1. 中断一览表 中断 向量 优先级 中断标志 中断允许 复位 外部中断 0 (INT0) 定时器 0 溢出 外部中断 1 (INT1) 定时器 1 溢出 UART0 0x0000 0x0003 0x000B 0x0013 0x001B 0x0023 最高 0 1 2 3 4 定时器 2 溢出 0x002B 5 SPI0 0x0033 6 SMB0 0x003B 7 无 IE0 (TCON.1) TF0 (TCON.5) IE1 (TCON.3) TF1 (TCON.7) RI0 (SCON0.0) TI0 (SCON0.1) TF2H (TMR2CN.7) TF2L (TMR2CN.6) SPIF (SPI0CN.7) WCOL (SPI0CN.6) MODF (SPI0CN.5) RXOVRN (SPI0CN.4) SI (SMB0CN.0) USB0 0x0043 8 ADC0 窗口比较 0x004B 9 ADC0 转换结束 0x0053 10 可编程计数器阵列 0x005B 11 比较器 0 0x0063 12 比较器 1 0x006B 13 定时器 3 溢出 0x0073 14 VBUS 电平 0x007B 15 UART1 0x0083 16 N/A Y Y Y Y Y N/A Y Y Y Y N 始终允许 EX0 (IE.0) ET0 (IE.1) EX1 (IE.2) ET1 (IE.3) ES0 (IE.4) Y N Y N ESPI0 (IE.6) PSPI0 (IP.6) Y N 特殊 N N AD0WINT (ADC0CN.3) AD0INT (ADC0CN.5) Y N Y N CF (PCA0CN.7) CCFn (PCA0CN.n) CP0FIF (CPT0CN.4) CP0RIF (CPT0CN.5) CP1FIF (CPT1CN.4) CP1RIF (CPT1CN.5) TF3H (TMR3CN.7) TF3L (TMR3CN.6) N/A Y N N N N N N N N/A N/A N N N/A Y N/A N N N Y N ESMB0 (EIE1.0) EUSB0 (EIE1.1) EWADC0 (EIE1.2) EADC0 (EIE1.3) EPCA0 (EIE1.4) ECP0 (EIE1.5) ECP1 (EIE1.6) ET3 (EIE1.7) EVBUS (EIE2.0) ES1 (EIE2.1) N/A ESMB1 (EIE2.3) ET4 (EIE2.4) ET5 (EIE2.5) PSMB0 (EIP1.0) PUSB0 (EIP1.1) PWADC0 (EIP1.2) PADC0 (EIP1.3) PPCA0 (EIP1.4) PCP0 (EIP1.5) PCP1 (EIP1.6) PT3 (EIP1.7) PVBUS (EIP2.0) PS1 (EIP2.1) N/A PSMB1 (EIP2.3) PT4 (E!P2.4) PT5 (E!P2.5) 保留 SMB1 0x008B 0x0093 17 18 定时器 4 溢出 0x009B 19 定时器 5 溢出 0x00A3 20 RI1 (SCON1.0) TI1 (SCON1.1) N/A SI (SMB1CN.0) TF4H (TMR4CN.7) TF4L (TMR4CN.6) TF5H (TMR5CN.7) TF5L (TMR5CN.6) ??? 1.4 优先级 控 制 总是最高 PX0 (IP.0) PT0 (IP.1) PX1 (IP.2) PT1 (IP.3) PS0 (IP.4) ET2 (IE.5) PT2 (IP.5) 120 C8051F380/1/2/3/4/5/6/7/C SFR 定义 16.1. IE:中断允许寄存器 位 7 6 5 4 3 2 1 0 名称 EA ESPI0 ET2 ES0 ET1 EX1 ET0 EX0 类型 R/W R/W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xA8 ; SFR 页 = 所有页;可位寻址 位 名称 7 EA 6 ESPI0 功 能 使能所有中断。 该位总体允许 / 禁止所有中断。它超越所有的单独中断屏蔽设置。 0:禁止所有中断源。 1:开发中断。每个中断由其对应的中断屏蔽设置决定。 使能串行外设接口 (SPI0)中断。 该位设置 SPI0 的中断屏蔽。 0:禁止所有 SPI0 中断。 1:允许由 SPI0 产生的中断请求。 5 ET2 使能定时器 2 中断 该位设置定时器 2 的中断屏蔽。 0:禁止定时器 2 中断。 1:允许由 TF2L 或 TF2H 标志产生的中断请求。 4 ES0 使能 UART0 中断。 该位设置 UART0 的中断屏蔽。 0:禁止 UART0 中断。 1:允许 UART0 中断。 3 ET1 使能定时器 1 中断。 该位设置定时器 1 的中断屏蔽。 0:禁止定时器 1 中断。 1:允许由 TF1 标志产生的中断请求。 2 EX1 使能外部中断 1。 该位设置外部中断 1 的中断屏蔽。 0:禁止外部中断 1。 1:允许由 INT1 输入产生的中断请求。 1 ET0 使能定时器 0 中断。 该位设置定时器 0 的中断屏蔽。 0:禁止定时器 0 中断。 1:允许由 TF0 标志产生的中断请求。 0 EX0 使能外部中断 0. 该位设置外部中断 0 的中断屏蔽。 0:禁止外部中断 0。 1:允许由 INT0 输入产生的中断请求。 121 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 16.2. IP:中断优先级寄存器 位 7 名称 6 5 4 3 2 1 0 PSPI0 PT2 PS0 PT1 PX1 PT0 PX0 类型 R R/W R/W R/W R/W R/W R/W R/W 复位 1 0 0 0 0 0 0 0 SFR 地址 = 0xB8 ; SFR 页 = 所有页;可位寻址 位 名称 7 未使用 PSPI0 6 功 能 读 = 1b, 写 = 忽略。 串行外设接口 (SPI0) 中断优先级控制。 该位设置外部中断 SPI0 的中断优先级。 0:SPI0 中断为低优先级。 1:SPI0 中断为高优先级。 5 PT2 定时器 2 中断优先级控制。 该位设置定时器 2 中断的优先级。 0:定时器 2 中断为低优先级。 1:定时器 2 中断为高优先级。 4 PS0 UART0 中断优先级控制。 该位设置 UART0 中断的优先级。 0:UART0 中断为低优先级。 1:UART0 中断为高优先级。 3 PT1 定时器 1 中断优先级控制。 该位设置定时器 1 中断的优先级。 0:定时器 1 中断为低优先级。 1:定时器 1 中断为高优先级。 2 PX1 外部中断 1 优先级控制。 该位设置外部中断 1 的中断优先级。 0:外部中断 1 为低优先级。 1:外部中断 1 为高优先级。 . 1 PT0 定时器 0 中断优先级控制。 该位位置定时器 0 中断的优先级。 0:定时器 0 中断为低优先级。 1:定时器 0 中断为高优先级。 0 PX0 外部中断 0 优先级控制。 该位设置外部中断 0 的中断优先级。 0:外部中断 0 为低优先级。 1:外部中断 0 为高优先级。 ??? 1.4 122 C8051F380/1/2/3/4/5/6/7/C SFR 定义 16.3. EIE1:扩展中断允许 1 位 7 6 5 4 3 2 1 0 名称 ET3 ECP1 ECP0 EPCA0 EADC0 EWADC0 EUSB0 ESMB0 类型 R/W R/W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xE6 ; SFR 页 = 所有页 位 名称 7 ET3 功 能 使能定时器 3 中断。 该位设置定时器 3 的中断屏蔽。 0:禁止定时器 3 中断。 1:允许由 TF3L 或 TF3H 标志产生的中断请求。 6 ECP1 使能比较器 1 (CP1)中断。 该位设置 CP1 的中断屏蔽。 0:禁止 CP1 中断。 1:允许 CP1RIF 或 CP1FIF 标志产生的中断请求。 5 ECP0 使能比较器 0(CP0)中断。 该位设置 CP0 的中断屏蔽。 0:禁止 CP0 中断。 1:允许 CP0RIF 或 CP0FIF 标志产生的中断请求。 4 EPCA0 使能可编程计数器阵列 (PCA0)中断。 该位设置 PCA0 的中断屏蔽。 0:禁止所有 PCA0 中断。 1:允许 PCA0 的中断请求。 3 EADC0 使能 ADC0 转换结束中断。 该位设置 ADC0 转换结束中断屏蔽。 0:禁止 ADC0 转换结束中断。 1:允许 AD0INT 标志的中断请求。 2 EWADC0 使能 ADC0 窗口比较中断。 该位设置 ADC0 窗口比较器的中断屏蔽。 0:禁止 ADC0 窗口比较中断。 1:允许 ADC0 窗口比较标志 (AD0WINT) 的中断请求。 1 EUSB0 使能 USB (USB0) 中断。 该位设置 USB0 的中断屏蔽。 0:禁止所有 USB0 中断。 1:允许由 USB0 产生的中断请求。 0 ESMB0 使能 SMBus0 中断。 该位设置 SMB0 的中断屏蔽。 0:禁止所有 SMB0 中断。 1:允许由 SMB0 产生的中断请求。 123 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 16.4. EIP1:扩展中断优先级 1 位 7 6 5 4 3 2 1 0 名称 PT3 PCP1 PCP0 PPCA0 PADC0 PWADC0 PUSB0 PSMB0 类型 R/W R/W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xF6 ; SFR 页 = 所有页 位 名称 7 PT3 功 能 定时器 3 中断优先级控制。 该位设置定时器 3 中断的优先级。 0:定时器 3 中断为低优先级。 1:定时器 3 中断为高优先级。 6 PCP1 比较器 1 (CP1) 中断优先级控制。 该位设置 CP1 中断的优先级。 0:CP1 中断为低优先级。 1:CP1 中断为高优先级。 5 PCP0 比较器 0 (CP0) 中断优先级控制。 该位设置 CP0 中断的优先级。 0:CP0 中断为低优先级。 1:CP0 中断为高优先级。 4 PPCA0 可编程计数器阵列 (PCA0)中断优先级控制。 该位设置 PCA0 中断的优先级。 0:PCA0 中断为低优先级。 1:PCA0 可断为高优先级。 3 PADC0 ADC0 转换结束中断优先级控制。 该位设置 ADC0 转换结束中断的优先级。 0:ADC0 转换结束中断为低优先级。 1:ADC0 转换结束中断为高优先级。 2 PWADC0 ADC0 窗口比较器中断优先级控制。 该位设置 ADC0 窗口比较器中断的优先级。 0:ADC0 窗口比较器中断为低优先级。 1:ADC0 窗口比较器中断为高优先级。 1 PUSB0 USB (USB0) 中断优先级控制。 该位设置 USB0 中断的优先级。 0:USB0 中断为低优先级。 1:USB0 中断为高优先级。 0 PSMB0 SMBus0 中断优先级控制。 该位设置 SMB0 中断的优先级。 0:SMB0 中断为低优先级。 1:SMB0 中断为高优先级。 ??? 1.4 124 C8051F380/1/2/3/4/5/6/7/C SFR 定义 16.5. EIE2:扩展中断允许 2 位 7 6 名称 5 4 3 ET5 ET4 ESMB1 2 1 0 ES1 EVBUS 类型 R R R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xE7 ; SFR 页 = 所有页 位 名称 7:6 未使用 ET5 5 功 能 读 = 00b, 写 = 忽略。 使能定时器 5 中断。 该位设置定时器 5 的中断屏蔽。 0:禁止定时器 5 中断。 1:允许由 TF5L 或 TF5H 标志产生的中断请求。 4 ET4 使能定时器 4 中断。 该位设置定时器 4 的中断屏蔽。 0:禁止定时器 4 中断。 1:允许由 TF4L 或 TF4H 标志产生的中断请求。 3 ESMB1 使能 SMBus1 中断。 该位设置 SMB1 的中断屏蔽。 0:禁止所有 SMB1 中断。 1:允许由 SMB1 产生的中断请求。 1 保留 ES1 0 EVBUS 2 必须写 0b. 使能 UART1 中断。 该位设置 UART1 的中断屏蔽。 0:禁止 UART1 中断。 1:允许 UART1 中断。 使能 VBUS 电平中断。 该位设置 VBUS 的中断屏蔽。 0:禁止所有 VBUS 中断。 1:允许 VBUS 电平检测电路产生的中断请求。 125 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 16.6. EIP2:扩展中断优先级 2 位 7 6 名称 5 4 3 PT5 PT4 PSMB1 2 1 0 PS1 PVBUS 类型 R R R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xF7 ; SFR 页 = 所有页 位 名称 :6 未使用 PT5 5 功 能 读 = 00b, 写 = 忽略。 定时器 5 中断优先级控制。 该位设置定时器 5 中断的优先级。 0:定时器 5 中断为低优先级。 1:定时器 5 中断为高优先级。 4 PT4 定时器 4 中断优先级控制。 该位设置定时器 4 中断的优先级。 0:定时器 4 中断为低优先级。 1:定时器 4 中断为高优先级。 3 PSMB1 SMBus1 中断优先级控制。 该位设置 SMB1 中断的优先级。 0:SMB1 断为低优先级。 1:SMB1 断为高优先级。 2 1 保留 PS1 必须写 0b。 UART1 中断优先级控制。 该位设置 UART1 中断的优先级。 0:UART1 断为低优先级。 1:UART1 断为高优先级。 0 PVBUS VBUS 电平中断优先级控制。 该位设置 VBUS 中断的优先级。 0:VBUS 断为低优先级。 1:VBUS 断为高优先级。 ??? 1.4 126 C8051F380/1/2/3/4/5/6/7/C 16.3. INT0 和 INT1 外部中断源 两个外部中断源 INT0 和 INT1 可被配置为低电平有效或高电平有效,边沿触发或电平触发。IT01CF 寄存器 中的IN0PL (INT0 极性) 和 IN1PL (INT1 极性) 位用于选择高电平有效还是低电平有效;TCON(见第 266 页 26.1. 节 “ 定时器 0 和定时器 1” )中的 IT0 和 IT1 用于选择电平或边沿触发。下表列出了可能的配置。 IT0 IN0PL 1 1 0 0 0 1 0 1 INT0 中断 低电平有效,边沿触发 高电平有效,边沿触发 低电平有效,电平触发 高电平有效,电平触发 IT1 IN1PL 1 1 0 0 0 1 0 1 INT1 中断 低电平有效,边沿触发 高电平有效,边沿触发 低电平有效,电平触发 高电平有效,电平触发 INT0 和 INT1 所使用的端口引脚在 IT01CF 寄存器中定义 (见 SFR 定义 16.7)。注意,INT0 和 INT0 端口 引脚分配与交叉开关的设置无关。INT0 和 INT1 监视分配给它们的端口引脚,不影响被交叉开关分配了相同 引脚的外设。如果要将一个端口引脚只分配给 INT0 和 / 或 INT1,则应配置交叉开关使其跳过所选择的引 脚。这可以通过设置寄存器 PnSKIP 中的相应位来实现(有关配置交叉开关的详细信息见第 154 页 20.1. 节 “ 优先权交叉开关译码器 ” )。 IE0 (TCON.1) 和 IE1 (TCON.3) 分别为外部中断 INT0 和 INT1 的中断标志。如果 INT0 或 INT1 外部中断被 配置为边沿触发, CPU 在转向 ISR 时会用硬件自动清除相应的中断标志。当被配置为电平触发时,在输入 有效期间 (根据极性控制位 IN0PL 或 IN1PL 的定义)中断标志将保持在逻辑 1 状态;在输入无效期间该标 志保持逻辑 0 状态。电平触发的外部中断源必须一直保持输入有效直到中断请求被识到,在 ISR 执行结束之 前必须使该中断请求无效,否则将产生另一次中断请求。 127 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 16.7. IT01CF:INT0/INT1 配置寄存器 O 位 7 名称 IN1PL IN1SL[2:0] IN0PL IN0SL[2:0] 类型 R/W R/W R/W R/W 复位 0 6 0 5 0 4 3 0 0 2 0 1 0 0 1 SFR 地址 = 0xE4 ; SFR 页 = 0 位 名称 7 IN1PL 功 能 INT1 极性。 0:INT1 输入为低电平有效。 1:INT1 输入为高电平有效。 6:4 IN1SL[2:0] INT1 端口引脚选择位。 这些位用于选择分配给 INT1 的端口引脚。注意,该引脚分配与交驻开关无关; INT1 将监视分配给它的端口引脚,但不影响被交叉开关分配了相同引脚的外设。如果将交 叉开关配置为跳过所选择的引脚,则端口引脚将不会被分配给外设。 000:选择 P0.0 001:选择 P0.1 010:选择 P0.2 011:选择 P0.3 100:选择 P0.4 101:选择 P0.5 110:选择 P0.6 111:选择 P0.7 3 IN0PL INT0 极性。 0:INT0 输入为低电平有效。 1:INT0 输入为高电平有效。 2:0 IN0SL[2:0] INT0 端口引脚选择位。 这些位用于选择分配给 INT0 的端口引脚。注意,该引脚分配与交驻开关无关; INT0 将监视分配给它的端口引脚,但不影响被交叉开关分配了相同引脚的外设。如果将交 叉开关配置为跳过所选择的引脚,则端口引脚将不会被分配给外设。 000:选择 P0.0 001:选择 P0.1 010:选择 P0.2 011:选择 P0.3 100:选择 P0.4 101:选择 P0.5 110:选择 P0.6 111:选择 P0.7 ??? 1.4 128 C8051F380/1/2/3/4/5/6/7/C 129 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 17. 复位源 复位电路允许很容易地将控制器置于一个预定的缺省状态。在进入复位状态时,将发生以下过程: CIP-51 停止程序执行 特殊功能寄存器 (SFR) 被初始化为所定义的复位值 外部端口引脚被置于一个已知状态 中断和定时器被禁止。 所有的 SFR 都被初始化为预定值,SFR 中各位的复位值在 SFR 的详细说明中定义。在复位期间内部数据存 储器的内容不发生改变,复位前存储的数据保持不变。但由于堆栈指针 SFR 被复位,堆栈实际上已丢失, 尽管堆栈中的数据未发生变化。 端口 I/O 锁在器的复位值为 0xFF (全部为逻辑 1),处于漏极开路方式。在复位期间和复位之后弱上拉被使 能。对于 VDD 监视器和上电复位,RST 引脚被驱动为低电平,直到器件退出复位状态。 在退出复位状态时,程序计数器 (PC) 被复位,MCU 使用内部振荡器作为默认的系统时钟。看门狗定时器被 使能,使用系统时钟的 12 分频作为其时钟源。程序从地址 0x0000 开始执行。 VDD 上电复 位 电源 监视器 Px.x + - 比较 器 0 0 使能 RST (线或) + - Px.x C0RSEF 时钟 丢失 检测器 (单 稳) EN 复位 逻辑 PCA WDT (软件复 位) SWRSF 非法 FLA SH 操作 内 部振荡器 XTAL1 XTAL2 外 部振荡器 驱动电 路 M CD 使能 WDT 使能 EN 内部低 频 振荡器 系 统时钟 CIP-51 微控制器核 系 统复位 时钟选择 扩 展中断系统 图 17.1. 复位源框图 ??? 1.4 129 C8051F380/1/2/3/4/5/6/7/C 17.1. 上电复位 在上电期间,器件保持在复位状态, RST 引脚被驱动到低电平,直到 VDD 上升到超过 VRST 电平并稳定。 从复位开始到退出复位状态要经过一个上电简称位延时 (TPORDelay) ;该处时随着 VDD 上升时间的增大而 减小(VDD 上升时间被定义为 VDD 从 0V 上升到 VRST 的时间)。图 17.2 给出了上电和 VDD 监视器事件的 时序。最大 VDD 上升时间为 1ms ;更长的上升时间可能导致器件在 VDD 达到 VRST 电平之前退出复位状 态。上升时间小于 1ms 时,上电复位延时 (VPORDelay) 通常小于 0.3ms。 在从上电或 VDD 监视器复位状态退出时,PORSF 标志 (RSTSRC.1) 被硬件置为逻辑 1。当 PORSF 标志被 置 1 时,RSTSRC 寄存器中的所有其它复位标志都是不确定的 (PORSF 被任何其它复位源清 0)。由于所 有的复位都导致程序从同一个地址 (0x0000) 开始执行,软件可以通过读 PORSF 标志来确定是否为上电产 生的复位。在一次上电复位后,内部数据存储器中的内容应被认为是不确定的。在上电复位后, VDD 监视器 VDD VRST VD D 电源电压 被使能。 t 逻辑高电平 逻辑低电平 RST TPORD el ay VDD监视器 复位 上电复位 图 17.2. 上电复位和 VDD 监视器复位时序 130 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 17.2. 掉电复位 / VDD 监视器 当发生掉电或因电源波动导致 VDD 降到 VRST 以下时,电源监视器将 RST 引脚驱动为低电平并使 CIP-51 保持复位状态(见图 17.2)。当 VDD 又回到高于 VRST 的电平时,CIP-51 将退出复位状态。注意,尽管内 部数据存储器的内容可能没有因掉电复位而发生改变,但无法确定 VDD 是否降到了数据保持所要求的最低 电平以下。如果 PORSF 标志的读出值为 1,则内部 RAM 的数据可能不再有效。在上电复位后 VDD 监视器 被使能,它的状态 (使能 / 禁止)不受任何其它复位源的影响。例如,如果 VDD 监视器被程序禁止,执行 一次软件复位后 VDD 今天朋友可靠地仍然为禁止状态。 注意:如果要从禁止状态启用 VDD 监视器,则在选择 VDD 监视器作为复位源之前,必须先使能 VDD 监视 器。在 VDD 监视器被使能或稳定之前选其为复位源可能导致系统复位。在有些应用中,这种复位是不希望 发生的。如果在应用中不希望发生这种复位,则应在使能 VDD 监视器和将其选择为复位源之间应引入延时。 从禁止状态使能 VDD 监视器和将其配置为复位源的步骤如下: 1. 使能 VDD 监视器 (VDMEN 中的 VDM0CN 位 = 1) ; 2. 如果需要,等待 VDD 监视器稳定 (见表 5.4 的 VDD 监视器启动时间); 3. 选择 VDD 监视器作为复位源 (RSTSRC 中的 PORSF 位 =1)。 图 17.2 给出了 VDD 监视器的时序。注意:VDD 监视器复位不会产生上电复位延迟。表 5.4 给出了 VDD 监视 器的电气特性。 ??? 1.4 131 C8051F380/1/2/3/4/5/6/7/C SFR 定义 17.1. VDM0CN:VDD 监视器控制寄存器 位 7 6 名称 VDMEN VDDSTAT 类型 R/W 复位 可变 5 4 3 2 1 0 R R R R R R R 可变 可变 可变 可变 可变 可变 可变 SFR 地址 = 0xFF ; SFR 页 = 所有页 位 名称 7 VDMEN 功能 VDD 监视器使能。 该位控制 VDD 监视器电源的通断。 VDD 监视器在被选择为复位源 (在寄存器 RSTSRC 中,见 SFR 定义 17.2)之前不能产生系统复位。在 VDD 监视器稳定之前 选其为复位源可能产生系统复位。在不希望产生这种复位的系统中,在使能 VDD 监 视器和选其为复位源之间应引入延时。 VDD 监视器的最小启动时间见表 5.4。 0:禁止 VDD 监视器。 1:使能 VDD 监视器。 6 VDDSTAT VDD 状态。 该位指示当前电源状态 (VDD 监视器输出)。 0:VDD 等于或低于 VDD 监视器阈值。 1:VDD 高于 VDD 监视器阈值。 5:0 未使用 读 = 000000b ;写 = 忽略。 17.3. 外部复位 外部 RST 引脚提供了使用外部电路强制 MCU 进入复位状态的手段。在 RST 引脚上加一个低电平有效信号 将导致 MCU 进入复位状态。为防止强噪声引起复位,可能有必要对 RST 引脚提供一个外部上拉和 / 或去耦 电容。 RST 引脚的电气特性见表 5.4。从外部复位状态退出后, PINRSF 标志 (RSTSRC.0) 被置 1。 17.4. 时钟丢失检测器复位 时钟丢失检测器 (MCD) 是由系统时钟触发的单稳态电路。如果系统时钟保持高或低电平的时间大于 MCD 超 时时间,则会产生复位。在发生 MCD 复位后,MCDRST 标志 (RSTSRC.2) 的读出值为 1,表示本次复位源 为 MCD ;否则该位读出值为 0. 向 MCDRSF 位写 1 将使能时钟丢失检测器;写 0 将禁止时钟丢失检测器。 RST 引脚的状态不受该复位的影响。 17.5. 比较器 0 复位 向 C0RSEF 标志 (RSTSRC.5) 写 1 可以将比较器 0 配置为复位源。应在写 C0RSEF 之前使能比较器 0 并等 待输出稳定,以防止通电瞬间在输出端产生抖动,从而导致不希望的复位。比较器 0 复位为低电平有效:如 果同相端输入电压 (CP0+) 小于反相端输入电压 (CP0-) ,则产生系统复位。在发生比较器 0 复位后, C0RSEF 标志 (RSTSRC.5) 的读出值为 1,表示本次复位源为比较器 0 ;否则该位读出值为 0。 RST 引脚 的状态不受该复位的影响。 132 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 17.6. PCA 看门狗定时器复位 可编程计数器阵列 (PCA) 的可编程看门狗定时器 (WDT) 功能可用于在系统出现错误的情况下防止软件运行 失控。可以通过软件使能或禁止 PCA 的 WDT 功能(见第 308 页 27.4. 节 “ 看门狗定时器方式 ” )。在每次 复位后, WDT 被使能并使用 SYSCLK / 12 作为计数时钟。如果因系统出错使用户软件不能更新 WDT,则 WDT 将产生一次复位, WDTRSF 位 (RSTSRC.5) 被置 1。 RST 引脚的状态不受该复位的影响。 17.7. FLASH 错误复位 如果 Flash 读、写或擦除操作的地址为非法地址,将发生系统复位。下述的任何一种情况都会导致 FLASH 操作错误复位: 编程硬件试图写或探险的 FLASH 地址超出了用户代码空间的极限地址。 固件的 FLASH 读地址超出了用户代码空间,即 MOVC 操作的地址大于用户代码空间的极限地址。 程序读地址超出了用户代码空间。这种情况发生在用户代码试图转移到大于用户代码空间的极限地址 时。 当 FLASH 读、写或擦除被安全设置禁止时。 当在 VDD 监视器未被使能时进行 FLASH 写或探险操作。 在发生 FLASH 错误复位后, FERROR 位 (RSTSRC.6) 被置 1。 RST 引脚的状态不受该复位的影响。 17.8. 软件复位 软件可以通过向 SWRSF 位 (RSTSRC.4) 写 1 强制产生一次系统复位。在发生软件强制复位后,SWRSF 位 的读出值为 1。 RST 引脚的状态不受该复位的影响。 17.9. USB 复位 向寄存器 RSTSRC 中的 USBRSF 位写 1 将选择 USB0 为复位源。在 USB0 被选择为复位源的情况下,下 面的任何事件都会导致系统复位。 1. 在 USB 网络上检测到 RESET 命令。 USB 功能控制器 (USB0)必须被使能为检测 RESET 命令。有 关 USB 功能控制器的详细信息见第 172 页节 21.“ 通用串行总线控制器 (USB0)”。 2. VBUS 引脚上的下降沿或上升沿。 发生 USB 复位后, USBRSF 位的读出值为 1。RST 引脚的状态不受该复位的影响。 ??? 1.4 133 C8051F380/1/2/3/4/5/6/7/C SFR 定义 17.2. RSTSRC:复位源寄存器 位 7 6 5 4 3 2 1 0 名称 USBRSF FERROR C0RSEF SWRSF WDTRSF MCDRSF PORSF PINRSF 类型 R/W R R/W R/W R R/W R/W R 复位 可变 可变 可变 可变 可变 可变 可变 可变 SFR 地址 = 0xEF ; SFR 页 = 所有页 位 名称 描述 写 读 7 USBRSF USB 复位标志。 写 1 使能 USB 为复位源。 如果最后一次复位是由 USB 引起的,则置 1。 6 FERROR Flash 错误复位标志。 N/A 如果最后一次复位是由 FLASH 读 / 写 / 擦除错误 引起的,则置 1。 5 C0RSEF 比较器 0 复位使能和标志。 写 1 使能比较器 0 为复位 源 如果最后一次复位是由比 较器 0 引起的,则置 1。 4 SWRSF 写 1 强制产生一次系统复 位。 如果最后一次复位是由写 SWRSF 位引起的,则置 1。 如果最后一次复位是由 WDT 超时引起的,则置 1。 软件强制复位和标志。 3 WDTRSF 看门狗定时器复位标志 N/A 2 MCDRSF 时钟丢失检测器使能和标志 写 1 使能时钟丢失检测器 如果最后一次复位是由时 为复位源。 MCD 在检测到 钟丢失检测器超时引起的, 时钟丢失条件时触发复位。 则置 1。 1 PORSF 上电 / VDD 监视器复位标志和 , 写 1 使能 VDD 监视器为复 位源。 VDD 监视器复位使能 在 VDD 监视器被使能和稳 定之前向该位写 1 可能导 致系统复位。 0 PINRSF 硬件引脚复位标志 N/A 注意 : 不要对该寄存器使用读 - 修改 - 写操作。 134 ??? 1.4 任何时刻发生上电复位或 VDD 监视器复位,则该位 置 1。 该位被置 1 时,所有其它 RSTSRC 标志都是不确定 的。 如果最后一次复位是由 RST 引脚引起的,则置 1。 C8051F380/1/2/3/4/5/6/7/C 18. Flash 存储器 C8051F38x 内部有可再编程的 FLASH 存储器,用于程序代码和非易失性数据存储。可以通过 C2 接口或由 软件使用 MOVX 指令对 FLASH 存储器进行在系统编程。一个 FLASH 位一旦被清 0,必须经过擦除才能再 回到 1 状态。在进行重新编程之前,一般要将数据字节擦除 (置为 OxFF)。为了保证操作正确,写和擦除 操作由硬件自动定时,不需要进行数据查询来判断写 / 擦除操作何时结束。在 FLASH 写 / 擦除操作期间,程 序暂停执行。 18.1. FLASH 存储器编程 对 FLASH 存储器编程的最简单的方法是使用由 Silicon Labs 公司或第三方供应商提供的编程工具,通过 C2 接口编程,这是对未被初始化过的器件的唯一编程方法。有关对 FLASH 程序存储器编程的 C2 命令的详细 信息见第 316 页 28. 节 “C2 接口 ” 。 为了保证 FLASH 内容的正确性,强烈建议在用软件对 FLASH 存储器进行写和 / 或擦除操作的系统中使能 VDD 监视器。还有一点至关重要,就是器件使用大于 25 MHz 的时钟时,应保证寄存器 FLSCL 中的 FLRT 位被置 1。 18.1.1. FLASH 锁定和关键码功能 从用户软件写和擦除 FLASH 受 FLASH 锁定和关键码功能和保护。在进行 FLASH 操作之前,必须按顺序向 FLASH 锁定和关键码寄存器 (FLKEY) 写入正确的关键码。关键码为:0xA5, 0xF1。写关键码的时间并不 重要,但必须按顺序写。如果写关键码的顺序不对或写入了错误的关键码,FLASH 写和擦除操作将被禁止, 直到下一次系统复位。如果在正确定入关键码之前进行了 FLASH 写或擦除操作,FLASH 写和擦除也将被禁 止。每次 FLASH 写和擦除操作之后,FLASH 锁定功能复位;在进行下一次 FLASH 写或擦除操作之前,必 须重新写关键码。 SFR 定义 18.2 给出了 FLKEY 寄存器的详细说明。 18.1.2. FLASH 擦除 可以用软件使用 MOVX 指令对 FLASH 存储器编程,像一般的操作数一样为 MOVX 指令提供待编程的地址 和数据字节。在使用 MOVX 指令对 FLASH 存储器写入之前,必须先允许 FLASH 写操作。允许 FLASH 写 操作的过程是:1) 按顺序向 FLASH 锁定寄存器 (FLKEY)写入 FLASH 关键码; 2) 将程序存储写允许位 PSWE (PSCTL.0) 设置为逻辑 1 (这将使 MOVX 操作指向目标 FLASH 存储器)。 PSWE 位将保持置位状 态,直到被软件清除。 写 FLASH 存储器可以清 0 数据位,但不能使数据位置 1,只有擦除操作能将 FLASH 中的数据位置 1。所以 在写入冷的值之前,必须先擦除待编程的地址。 FLASH 存储器是以 512 字节的扇区为单位组织的,一次擦 除操作将擦除整个扇区 (将扇区内的所有字节置为 0xFF)。擦除一个 512 字节扇区 (页)的步骤如下: 1. 禁止中断 (建议这样做)。 2. 向 FLKEY 写第一个关键码:0xA5。 3. 向 FLKEY 写第二个关键码:0xF1。 4. 置 ‘1’PSEE 位 ( 寄存器 PSCTL),以允许 FLASH 扇区擦除。 5. 置 ‘1’PSWE 位 (寄存器 PSCTL),以允许 FLASH 写入。 6. 用 MOVX 指令向待擦除页内的任何一个地址写入一个数据字节。 7. 清除 PSWE 位 ( 寄存器 PSCTL)。 8. 清除 PSEE 位 ( 寄存器 PSCTI)。 ??? 1.4 135 C8051F380/1/2/3/4/5/6/7/C 18.1.3. FLASH 写 FLASH 存储器可以一次写一个字节,也可以一次写两个字节 (一组)。寄存器 PFE0CN (SFR 定义 12.1) 中的 FLBWE 控制在一次 FLASH 写操作写入一个字节或一个两字节的块。当 FLBWE 被清 0 时,每次 FLASH 写操作写入一个字节;当 FLBWE 被置 1 时,每次 FLASH 写操作写入两个字节 (块写)。块写时间与单字 节的时间相同,在向 FLASH 存储器写入大量数据时可以节省时间。 在单字节写 FLASH 期间,字节数据是分别写入的,每个 MOVX 写指令执行一次 FLASH 写操作。单字节写 FLASH 人建议步骤如下 : 1. 禁止中断 (建议这样做)。 2. 清除 FLBWE 位 (寄存器 PEE0CN),以选择单字节写方式。 3. 置 ‘1’PSWE 位 ( 寄存器 PSCTL)。 4. 清除 PSEE 位 ( 寄存器 PSCTL)。 5. 写第一个关键码:0xA5。 6. 写第二个关键码:0xF1. 7. 用 MOVX 指令向扇区内的目标地址写入一个数据字节。 8. 清除 PSWE 位。 9. 重新使能中断。 重复步骤 5-7,直到写完每个字节。 对于 FLASH 块写,只在每个块的最后一个字节被写入 (用 MOVX 写指令)后才执行 FLASH 写过程。一个 FLASH 写入块为两字节 ,从偶地址到奇地址。写操作必须按顺序进行 (即先写以 0b 结尾的地址,后写以 1b 结尾的地址)。 FLASH 写过程发生在对以 1b 结尾的地址进行的 MOVX 写操作之后。如果块中的某个字 节不需要被更新,则应向该字节写 0xFF。 FLASH 块写的建议步骤如下: 1. 2. 3. 4. 5. 6. 7. 8. 禁止中断 (建议这样做)。 置 ‘1’FLBWE 位 ( 寄存器 PFE0CN),以选择块写方式。 置 ‘1’PSCTL 中的 PSWE 位。 清除 PSCTL 中的 PSWE 位。 第一个关键码:0xA5。 第二个关键码:0xF1。 用 MOVX 指令向块中的偶地址 (以 0b 结尾)写入第一个数据字节。 写第一个关键码:0xA5。 9. 写第二个关键码:0xF1。 10.用 MOVX 指令向块中的奇地址 (以 1b 结尾)写入第二个数据字节。 11. 清除 PSWE 位。 12.重新允许中断。 重复步骤 5–10,直到写完每个块。 136 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 18.2. 非易失性数据存储 FLASH 存储器除了用于存储程序代码之外还可以用于非易失性数据存储。这就允许在程序运行时计算和存 储类似标定系数这样的数据。数据写入时用 MOVX 指令,读出时用 MOVC 指令。注意:MOVX 读指令总是 指向 XRAM。 尽管 FLASH 存储器可以每次写一个字节,但必须首先擦除整个扇区。为了修改一个多字节数据集中的某一 个字节,整个数据集必须被保存到一个临时存储区。接下来将扇区擦除,更新数据集,最后将数据集写回到 原扇区。 18.3. 安全选项 CIP-51 提供了安全选项以保护 FLASH 存储器不会被软件意外修改,以及防止产权程序保修期矣常数被读 取。程序存储器写允许 (PSCTL 寄存器的 PSWE)和程序存储器擦除允许 (PSCTL 寄存器中的 PSEE) 位保护 FLASH 存储器不会被软件意外修改。在用软件修改 FLASH 存储器的内容之前, PSWE 必须被显式 置 1 ;在用软件擦除 FLASH 存储器之前,PSWE 位和 PSEE 位都必须被置 1. 此外,CIP-51 还提供了可以 防止通过 C2 接口读取或修改产权程序代码和常数这一安全功能。 保存在 FLASH 用户空间的最后一个字节中的安全锁定字节保护 FLASH 存储器,使其不能被非保护代码或 通过 C2 接口访问 (读、写或擦除)。 FLASH 安全机制允许用户从 0 页 (地址 0x0000~0x01FF)开始锁定 n 个 512 字节的 FLASH 页,其中 n 是安全锁定字节的反码。注意:当任何一个其它 FLASH 页被锁定时, 包含 FLASH 安全锁定字节的页也被锁定。见下面的例子。 安全锁定字节: 反码: 被锁定的 FLASH 页: 被锁定的地址: 11111101b 00000010b 3 (2 + 锁定字节页 ) 前两个 FLASH 页:0x0000 to 0x03FF FLASH 锁定字节页:(0xFA00 to 0xFBFF for 64k 器件; 0x7E00 to 0x7FFF for 32k 器件 ) C8 05 1 F3 80 /2/4 /6 保留 区 0xF C00 锁定 字节 0xF BF F 0xF BF E 0xF A00 当有 任何一 个其 他 FLA SH页被锁 定时 , 该页 被锁定 C8 05 1 F38 1 /3 /5 /7 锁定 字节 F LA SH 存 储器 按5 12字节 页组 织 0x7FFF 0x7FFE 未锁 定的 FLA SH 页 0x7E00 未锁定 的 FL A SH 页 由F LA SH安全 锁定 字节 决定的 访问限 制地址 0x0000 0x0000 图 18.1. FLASH 程序存储器组织和安全字节 FLASH 安全级别取决于对 FLASH 访问的方式。有 3 种可被限制的访问方式:经 C2 调试接口的读、写和擦 除,在非锁定页执行的用户固件,在锁定页执行的用户固件。 ??? 1.4 137 C8051F380/1/2/3/4/5/6/7/C 经 C2 调试接口访问 FLASH: 1. 任何未锁定的页均可被读、写或擦除。 2. 被锁定的页不能被读、写或擦除。 3. 包含锁定字节的页在未被锁定时可以被读、写或擦除。 4. 读锁定字节的内容总是被允许。 5. 不允许追加锁定页 (将锁定字节中的 0 改写为 1)需要使用 C2 器件擦除命令,这将擦除所有页,包括 含有锁定字节的页和锁定字节本身。 6. 对 FLASH 页解除锁定 (将锁定字节中的 0 改写为 1)需要使用 C2 器件擦除命令,这将擦除所有页, 包括含有锁定字节的页和锁定字节本身。 7. 保留区不能被读、写或擦除。 在未锁定页执行的用户固件访问 FLASH: 1. 2. 3. 4. 5. 6. 7. 除包含锁定字节的页之外,任何未被锁定的页均可被读、写或擦除。 被锁定的页不能被读、写或擦除。 包含锁定字节的页不能被擦除,在未被锁定时可以被读或写。 读锁定字节的内容总是被允许。 不允许追加锁定页 (将锁定字节中的 1 改写为 0); 不能对 FLASH 页解除锁定 (将锁定字节中的 0 改写为 1)。 保留区不能被读、写或擦除。访问保留区或任何被锁定页的操作将导致 FLASH 错误型器件复位。 在被锁定页执行的用户固件访问 FLASH: 1. 2. 3. 4. 5. 6. 除包含锁定字节的页之外,任何未被锁定的页均可被读、写或擦除。 除包含锁定字节的页之外,任何未被锁定的页均可被读、写或擦除。 包含锁定字节的页不能被擦除,只能被读或写。 读锁定字节的内容总是被允许。 不允许追加锁定页 (将锁定字节中的 1 改写为 0); 不能对 FLASH 页解除锁定 (将锁定字节中的 0 改写为 1)。 7. 保留区不能被读、写或擦除。访问保留区或任何被锁定页的操作将导致 FLASH 错误型器件复位。 138 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 18.1. PSCTL:程序存储读写控制 位 7 6 5 4 3 2 名称 1 0 PSEE PSWE 类型 R R R R R R R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 =0x8F ; SFR 页 = 所有页 位 名称 7:2 1 保留 PSEE 0 PSWE 功能 必须写 000000b。 程序存储擦除允许。 将该位置 1 后允许擦除 FLASH 程序存储器中的一个页 (前提是 PSWE 位也被置 1)。 如果该位置 1 并且 FLASH 写操作被使能 (PSWE 为逻辑 1),用 MOVX 指令进行一次 写操作将擦除包含 MOVX 指令寻址的那个 FLASH 页。写入的数据字节可以是任意值。 0:禁止擦除 FLASH 程序存储器。 1:允许擦除 FLASH 程序存储器。 程序存储写允许。 将该位置 1 后允许用 MOVX 写指令向 FLASH 程序存储器写一个字节。在写数据之前必 须先将待写地址擦除。 0:禁止擦除 FLASH 程序存储器。 1:允许写 FLASH 程序存储器; MOVX 写指令寻址 FLASH 存储器。 ??? 1.4 139 C8051F380/1/2/3/4/5/6/7/C SFR 定义 18.2. FLKEY:FLASH 锁定和关键码寄存器 位 7 6 5 4 3 名称 FLKEY[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xB7 ; SFR 页 = 所有页 位 名称 功能 7:0 FLKEY[7:0] FLASH 锁定和关键码寄存器。 写: 该寄存器为 FLASH 擦除和写操作提供锁定的和关键码功能。通过向该寄存器按顺序 写入关键码 0xA5 和 0xF1 来使能 FLASH 写和擦除。在执行完一次写或擦除操作后, 后续的 FLASH 写或擦除操作被自动禁止。如果写 FLKEY 操作不正确或在写或擦除操 作被禁止时试图写或擦除 FLASH,则 FLASH 将被永久性锁定 (不能写或擦除),直 到下一次器件复位。如果应用固件从不写 FLASH,可以用软件向 FLKEY 与入一个非 0xA5 的值,以有意锁定 FLASH。 读: 位 1-0 指示当前的 FLASH 锁定状态 00:FLASH 写 / 擦除被锁定。 01:第一个关键码已被写入 (0xA5)。 10:FLASH 处于解锁状态 ( 允许写 / 擦除 )。 11:FLASH 写 / 擦除操作被禁止,直到下一次复位。 140 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 18.3. FLSCL:定时寄存器 位 7 名称 FOSE 保留 FLRT 保留 类型 R/W R/W R/W R/W 复位 1 6 5 0 4 0 3 0 0 2 0 1 0 0 0 SFR 地址 = 0xB6 ; SFR 页 = 所有页 位 名称 7 FOSE 6:5 4 3:0 保留 FLRT 保留 功能 FLASH 单稳态定时器使能。 该位用于使能 FLASH 读操作单稳态定时器。当 FLASH 单稳态定时器被禁止时, FLASH 读出读大器在整个 FLASH 读周期内被使能。当系统时钟频率低于 10MHz 时, 禁止 FLASH 单稳态定时器去增加系统功耗。 0:禁止 FLASH 单稳态定时器。 1:使能 FLASH 单稳态定时器。 必须写 00b. FLASH 读时间。 该位应被编程为所允许的最小值 (根据系统时钟速度) 0:SYSCLK <= 25 MHz. 1:SYSCLK <= 48 MHz. 必须写 0000b。 ??? 1.4 141 C8051F380/1/2/3/4/5/6/7/C 142 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 19. 时钟源 C8051F380/1/2/3/4/5/6/7/C 有一个可编程内高频振荡器、一个可编程内部低频振荡器和一个外部振荡器驱 动电路。可以用 OSCICN 和 OSCICL 寄存器来使能 / 禁止和标定内部高频振荡器,如图 19.1 所示。内部低 频振荡器用 OSCLCN 寄存器来使能 / 禁止和标定。定统时钟 (SYSCLK) 可以来自外部振荡器电路或任何一 个内部振荡器。两个内部振荡器都提供可选择的后调整功能。 USB 时钟 (USBCLK) 可以来自内部振荡器或 外部器电路 选项 2 VDD 选项 3 XT AL2 CLKSL2 CLKSL1 CLKSL0 CLKSEL USBCLK2 USBCLK1 USBCLK0 IFCN 1 IFCN 0 OSCLCN OSCLEN OSC LRD Y OSCLF3 OSCLF2 OSCLF1 OSCLF0 OSCLD1 OSCLD0 OSCICN IOSCEN IFRDY SUSPEND OSCICL OSCLEN OSCLF OSCLD 可编程内部 48 MHz时钟 EN 2 2 XTAL2 1, 2, 4, 8 (12 MHz) (24 MHz) OSCLEN OSCLF (48 MHz) EN SYSCLK 80 kHz 低频振荡器 1, 2, 4, 8 选项 1 OSCLD XTAL1 输入 电路 10M OSC XTAL2 内部 H FO MU LSEL1 MU LSEL0 MULEN MU LIN T MULRDY 内部 HFO / 8 XFCN2 XFCN1 XFCN0 EXOSC USBCLK EXOSC / 2 EXOSC / 3 OSCXCN CLKMUL EXOSC / 4 内部 LFO USBCLK2-0 XTAL2 XOSCMD2 XOSCMD1 XOSCMD0 选项 4 图 19.1. 时钟源框图 ??? 1.4 142 C8051F380/1/2/3/4/5/6/7/C 19.1. 系统时钟选择 用 CLKSL 寄存器中的 CLKSEL[2:0] 位选择用哪一个振荡器作为系统时钟源。当选择外部振荡器作为系统时 钟时, CLKSL[2:0] 必须被设置为 001b。当选择内部振荡器作为系统时钟时,外部振荡器仍然可以给外设 (定时器、 PCA)提供时钟。系统时钟可以在内部振荡器和外部振荡器之间自由切换,只要所选择的振荡器 被使能并稳定运行。 内部高频和低频振荡器仅需很短的启动时间,可以在写用于使能振荡器的寄存器后立即选其为系统时钟。外 部 RC 和 C 方式一般也不需要启动时间。 19.2. USB 时钟选择 寄存器 USBCL 中的 CLKSELK[2:0] 位选择用作 USB 时钟的振荡源。 USB 时钟可以来自内部振荡器、内部 高频振荡器分频或外部振荡器分频。注意:当 USB0 工作在全速方式时,USB 时钟必须是 48MHz ;当 USB0 工作在低速方式时, USB 时钟必须是 6MHz。 USB 的时钟选择见 SFR 定义 19.1。 下面给出了全速和低速方式下 USB 时钟配置的几个例子: USB 全速 (48 MHz) 内部振荡器 时钟信号 USB 时钟 内部振荡器 输入源选择 内部振荡器 * 不分频 外部振荡器 寄存器位设置 USBCLK = 000b IFCN = 11b 时钟信号 USB 时钟 外部振荡器 输入源选择 外部振荡器 * CMOS 振荡器方式 48 MHz 振荡器 寄存器位设置 USBCLK = 010b XOSCMD = 010b 注意 : 对于该配置,时钟恢复电路必须被使能。 USB 低速 (6 MHz) 内部振荡器 143 时钟信号 USB 时钟 内部振荡器 输入源选择 内部振荡器 / 8 不分频 外部振荡器 寄存器位设置 USBCLK = 001b IFCN = 11b 时钟信号 USB 时钟 外部振荡器 输入源选择 外部振荡器 / 4 CMOS 振荡器方式 24 MHz 振荡器 晶体振荡器方式 24 MHz 振荡器 寄存器位设置 USBCLK = 101b XOSCMD = 010b ??? 1.4 XOSCMD = 110b XFCN = 111b C8051F380/1/2/3/4/5/6/7/C SFR 定义 19.1. CLKSEL:时钟选择寄存器 位 7 6 名称 类型 R Reset 0 5 4 3 2 1 USBCLK[2:0] OUTCLK CLKSL[2:0] R/W R/W R/W 0 0 0 0 0 0 0 0 SFR 地址 = 0xA9 ; SFR 页 = 所有页 位 名称 功能 7 未使用 读 = 0b ;写 = 忽略。 6:4 USBCLK[2:0] USB 时钟源选择位。 000:USBCLK 源自内部高频振荡器。 001:USBCLK 源自内部高频振荡器 / 8。 010:USBCLK 源自外部振荡器。 011:USBCLK 源自外部振荡器 /2。 100:USBCLK 源自外部振荡器 /3。 101:USBCLK 源自外部振荡器 /4。 110:USBCLK 源自内部低频振荡器。 111:保留。 3 OUTCLK 交叉开关时钟输出选择位。 如果 SYSCLK 信号在交叉开关中被使能,该位在 SYSCLK 或与端口 I/O 引脚同步后 的 SYSCLK 之间选择输出。 0:选择 SYSCLK 作为交叉开关 SYSCLK 信号输出。 1:选择与端口 I/O 同步后的 SYSCLK 作为交叉开关 SYSCLK 信号输出。 2:0 CLKSL[2:0] 系统时钟源选择位。 000:SYSCLK 源自内部高频振荡器,根据寄存器 OSCICN 中的 IFCN 位选择分频 系数。 001:SYSCLK 源自外部振荡器。 010:SYSCLK 源自内部振荡器 / 2。 011:SYSCLK 源自内部振荡器。 100:SYSCLK 源自内部低频振荡器,根据寄存器 OSCLD 中的 OSCLCN 位选择分 频系数。 101-111:保留。 ??? 1.4 144 C8051F380/1/2/3/4/5/6/7/C 145 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 19.3. 可编程内部高频 (H-F) 振荡器 C8051F380/1/2/3/4/5/6/7/C 器件包含一个可编程内部高频振荡器,该振荡器在系统复位后被默认为系统时 钟。该振荡器的周期可以通过 OSCICL 寄存器 (见 SFR 定义 19.2)编程。 在 C8051F380/1/2/3/4/5/6/7/C 器件中, OSCICL 寄存器已经过工厂校准,对应 48 MHz 的基频。注意:系 统时钟可以从可编程内部振荡器经过 4 分频后再分频得到,分频系数由寄存器 OSCICN 中的 IFCN 位设定, 可为 1、 2、 4 或 8。复位后的缺少分频系数为 8,对应 1.5MHz 的系统时钟。 19.3.1. 内部振荡器挂起方式 向寄存器 OSCICN 中的 SUSPEND 位写 1 可以将内部高频振荡器置于挂起方式。如果系统时钟源自该内部 振荡器,则 外设或 CIP-51 的输入时钟将停止,直到检测到一个非空闲 USB 事件或 VBUS 输入信号出现上 升沿或下降下沿。注意:USB 收发器在其被禁止时仍能检测到 USB 事件。 当有振荡器唤醒事件发生时,内部振荡器、CIP-51 和受影响的外设恢复正常工作。CPU 从写 SUSPEND 位 的下一条指令恢复执行。 注:在挂起方式,可以关断预取引擎以节省功耗。此外,两个稳压器 (REG0 和 REG1) 在挂起方式都有低功 耗方式,可以进一步节省功耗。 SFR 定义 19.2. OSCICL:内部高频振荡器校准寄存器 位 7 6 5 4 3 2 1 0 可变 可变 可变 OSCICL[6:0] 名称 类型 R 复位 0 R/W 可变 可变 可变 可变 SFR 在址 = 0xB3 ; SFR 页 = 所有页 位 7 6:0 名称 功 能 读 = 0 ; 写 = 忽略。 未使用 OSCICL[6:0] 内部振荡器校准位。 这些位决定内部高频振荡器的周期。当被设置为 0000000b 时, H-F 振荡器工作在最 高频率;当被设置为 1111111b 时, H-F 振荡器工作在最低频率。该寄存器的内容已 经过工厂校准,对应 48 MHz 的内部振荡器频率。固件只能在 H-F 振荡器被禁止时 (IOSCEN = 0) 改变 OSCICL 的值。 ??? 1.4 145 C8051F380/1/2/3/4/5/6/7/C SFR 定义 19.3. OSCICN:内部高频振荡器控制寄存器 位 7 6 5 名称 IOSCEN IFRDY SUSPEND 类型 R/W R R/W R R R 复位 1 1 0 0 0 0 4 3 2 1 0 IFCN[1:0] R/W 0 0 SFR 地址 = 0xB2 ; SFR 页 = 所有页 位 名称 7 IOSCEN 功 能 内部高频振荡器使能位。 0:内部高频振荡器禁止。 1:内部高频振荡器使能。 内部高频振荡器频率准备好标志。 0:内部高频振荡器未运行在编程频率。 1:内部高频振荡器按编程频率运行。 6 IFRDY 5 SUSPEND 内部高频振荡器挂起使能位。 该位置 1 将内部振荡器置于扶起方式。当有挂起方式唤醒事件发生时,内部振荡器恢 复工作。 4:2 未使用 IFCN[1:0] 读 = 000b ; 写 = 忽略。 1:0 146 内部高频振荡器分频控制位。 内部高频振荡器经过一个 4 分频电路后再由 IFCN 位设置分频。 00:SYSCLK 为内部高频振荡器 /8 (1.5 MHz)。 01:SYSCLK 为内部高频振荡器 /4 (3 MHz)。 10:SYSCLK 为内部高频振荡器 /2 (6 MHz)。 11:SYSCLK 为内部高频振荡器输出 /1 (12 MHz)。 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 19.4. 时钟乘法器 C8051F380/1/2/3/4/5/6/7/C 器件包含一个 48 MHz 高频振荡器,取代了 12 MHz 振荡器和 4x 时钟乘法器, 因此 USB0 模块可直接用内部高频振荡器运行。为了与 C8051F34x 和 C8051F32x 器件兼容,CLKMUL 寄 存器 (SFR 定义 19.4)的行为表现就像时钟乘法器仍然存在并工作。 SFR 定义 19.4. CLKMUL:时钟乘法器控制寄存器 位 7 6 5 名称 MULEN MULINIT MULRDY 类型 R R R R R R 复位 1 1 1 0 0 0 4 3 2 1 0 MULSEL[1:0] R 0 0 SFR 地址 = 0xB9 ; SFR 页 = 0 位 名称 7 MULEN 6 MULINIT 5 MULRDY 4:2 1:0 功 能 时钟乘法器使能位。 该位的读出值总是为 1。 时钟乘法器初始化位。 该位的读出值总是为 1。 时钟乘法器准备好位。 该位的读出值总是为 1。 读 = 000b ;写 = 忽略。 未使用 MULSEL[1:0] 时钟乘法器输入选择位。 这两位的读出值总是为 00。 ??? 1.4 147 C8051F380/1/2/3/4/5/6/7/C 148 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 19.5. 可编程内部低频 (L-F) 振荡器 C8051F380/1/2/3/4/5/6/7/C 器件包含一个可编程低频内部振荡器,该振荡器的标称频率为 80 kHz。该低频 率振荡器电路包含一个分频器,分频数由寄存器 OSCLCN 中的 OSCLD 位设定,可为 1、 2、 4 或 8 (见 SFR 定义 19.5)。此外,还有 OSCLF[3:0] 位可用于调节该振荡器的输出频率。 19.5.1. 内部 L-F 振荡器标定 定时器 2 和定时器 3 具有捕捉功能,当驱动它们的时基已知时,可以用该功能获取内部 L-F 振荡器的频率。 当定时器 2 或定时器 3 被配置为 L-F 振荡器捕捉方式时,低频振荡器输出的下降沿 (定时器 2)或上升沿 (定时器 3)将导致相应定时器发生捕捉事件。当捕捉事件发生时,定时器的当前计数值 (TMRnH:TMRnL) 将复制到定时器的重载寄存器 (TMRnRLH:TMRnRLL) 中。根据两次相邻定时器捕捉值的差值,可以计算低 频振荡器的周期。然后可以调整 OSCLF 位以产生期望的振荡器频率。 SFR 定义 19.5. OSCLCN:内部低频振荡器控制寄存器 位 7 6 名称 OSCLEN OSCLRDY OSCLF[3:0] OSCLD[1:0] 类型 R/W R R.W R/W 复位 0 0 5 Varies 4 3 Varies Varies 2 Varies 1 0 0 0 SFR 地址 = 0x86 ; SFR 页 = 所有页 位 名称 7 OSCLEN 6 OSCLRDY 5:2 功能 内部低频振荡器使能位。 0:内部低频振荡器禁止。 1:内部低频振荡器使能。 内部低频振荡器频率准备好标志。 0:内部低频振荡器频率未稳定。 1:内部低频振荡器频率已稳定。 注:OSCLRDY 仅在发生器件复位和 OSCLD[1:0] 位改变时被清 0。 OSCLF[3:0] 内部低频振荡器频率控制位。 这些位是内部低频振荡器的频率微调控制位。当被设置为 000b 时, L-F 振荡器工作 在最高频率;当被设置为 1111b 时, L-F 振荡器工作在最低频率。固件只能在 L-F 振 荡器被禁止时 (OSCLEN = 0) 改变 OSCLF 位的值。 1:0 OSCLD[1:0] 内部低频振荡器分频选择位。 00:选择 8 分频。 01:选择 4 分频。 10:选择 2 分频。 11:选择 1 分频。 ??? 1.4 148 C8051F380/1/2/3/4/5/6/7/C 149 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 19.6. 外部振荡器驱动电路 外部振荡器电路可以驱动外部晶体、陶瓷谐振器、电容或 RC 网络。也可以使用一个外部 CMOS 时钟提供 时钟输入。图 19.1 给出了 4 种外部振荡器选项的原理框图。使用 OSCXCN 寄存器 ( 见 SFR 定义 19.6) 来 使能和配置外部振荡器。 有关外部振荡器使用的重要注意事项:当使用外部振荡器电路时,必须对所用端口引脚进行配置。当外部振 荡器驱动电路被配置为晶体 / 谐振器方式时,端口引脚 P0.2 和 P0.3 分别被用作 XTAL1 和 XTAL2。当外部 振荡器驱动电路被配置为电容、 RC 或 CMOS 时钟方式时,端口引脚 P0.3 被用作 XTAL2。端口 I/O 交叉开 关应被配置为跳过被振荡器电路占用的引脚。有关配置交叉开关的详细说明,见第 154 页 20.1. 节 “ 优先权 交叉开关译码器 ” 。当在晶体 / 陶瓷谐振器电容或 RC 方式使用外部振荡器电路时,应将所用的端口引脚 配 置为模拟输入。在 CMOS 时钟方式,应将所用的端口引脚配置为数字输入。有关端口输入方式选择的详细 信息见第 158 页 20.2. 节 “ 端口 I/O 初始化 ” 。 外部振荡器输出可以被选择作为系统时钟或用于给一些数字外设 (如定时器、 PCA 等)提供时钟。有关每 个数字外设的详细信息,见本手册的相关章节。有关振荡器的详细技术指标见第 37 页节 5.“ 电气特性 ”。 19.6.1. 外部晶体方式 如果外部振荡器使用晶体或陶瓷谐振器,则必须在 XTAL1 和 XTAL2 引脚跨接一个外部晶体 / 谐振器和一个 10MW 的电阻,如图 19.1 中的选项 1 所示。应在 XTAL1 和 XTAL2 引脚加合适的负载电容。XTAL1 和 XTAL2 引脚都应被配置为模拟 I/O,其数字输出驱动器被禁止。 外部晶体配置电路中的电容提供晶体正确振荡所需要的负载。从晶体来看,这两个电容是 “ 串联 ” 的,但与 XTAL1 和 XTAL2 引脚的寄生电容是 “ 并联 ” 的。 注:建议的负载电容取决于晶体的振荡频率和生产厂商。计算负载电容值时请参考晶体的数据手册。 确定两个负载电容值的公式如下: CA CB C L = ----------------------- + C S CA + CB 其中 : CA 和 CB 是连接到晶体的电容。 CS 是 PCB 的总寄生电容。 对于典型的布局布线,即晶体与电容引脚尽可能靠近的情况,每个引脚的寄生电容为 2-5 pF。如果 CA 和 CB 相同 (C),则上面的公式变为 C C L = ---- + C S 2 例如,使用 32 kHz 的音叉晶体,建议的负载电容为 12.5pF,应采用图 19.1 中的配置选项 1。如果每个 XTAL 引脚的寄生电容值为 3pF(总电容位 6pF),则 13 pF 的负载电容跨接在昌体两端的等效电容为 12.5pF,如 图 19.2 所示。 ??? 1.4 149 C8051F380/1/2/3/4/5/6/7/C 13 pF XTAL1 10 M 32 kHz XTAL2 13 pF 图 19.2. 外部晶体示例 有关外部晶体的重要注意事项:晶体振荡器电路对 PCB 布局布线非常敏感。晶体应尽可能地放置在靠近器 件的 XTAL 引脚,布线应尽可能地短并用地平面屏蔽,以防止其它引线引入噪声或干扰。 当使用外部晶体时,必须用软件将外部振荡器驱动电路配置为晶体振荡器方式或晶体振荡器 2 分频方式。 2 分频电路保证从外部振荡器获取的时钟具有 50% 的占空比。还必须根据晶体频率确定外部振荡器频率控 制值 (XFCN) ( 见 SFR 定义 19.6)。 在晶体振荡器第一次被使能时,外部振荡器有效检测电路允许软件确定外部系统时钟何时有效和运行。在晶 体振荡器稳定之前就切换到外部晶体振荡器可能产生不可预料的后果。建议的晶体启动步骤如下: 1. 2. 3. 4. 5. 6. 配置 XTAL1 和 XTAL2 为模拟 I/O。 通过向端口锁存器写的对应位写 1 来禁止 XTAL1 和 XTAL2 和数字输出驱动器。 配置并使能外部振荡器。 等待至少 1ms。 查询 XTLVLD > 1。 将系统时钟切换到外部振荡器。 150 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 19.6.2. 外部 RC 方式 如果使用外部 RC 网络作为 MCU 的外部振荡源,则电路应被配置为图 19.1 中的先期,即 RC 方式。电容值 不应大于 100pF ;但当电容值很小时, PCB 的寄生电容将在总电容中占支配地位。为了确定 OSCXCN 寄 存器中所需要的外部振荡器频率控制值 (XFCN) ,首先根据下面的方程 19.1 选择能产生所要求的振荡频率 的 PC 网络值。 其中:f= 振荡频率(以 MHz 为单位),C = 电容值(以 pF 为单位),R = 上拉电阻值(以 kW 为单位)。 3 f = 1.23 10 § R C 方程 19.1. RC 方式振荡器频率 例如,如果所期望的频率是 100 kHz,,选 R = 246 kW 和 C = 50 pF: f = 1.23( 103 ) / RC = 1.23 ( 103 ) / [ 246 x 50 ] = 0.1 MHz = 100 kHz 查 SFR 定义 19.6 中的表,得到所需要的 XFCN 设置值为 010b。 19.6.3. 外部电容方式 如果使用一个电容作为 MCU, 的外部振荡器,则电路应被配置为图 19.1 中的选项 3,即 C 方式。电容不应 大于 100 pF ;但当电容值很小时, PCB 的寄生电容将在总电容中占支配地址。要确定 OSCXCN 寄存器中 所需用的外部振荡器频率控制值(XFCN),首先根据下面的方程 19.2 选择要使用的电容并确定正当频率。 其中:f = 振荡频率(以 MHz, 为单位),C = 电容值(以 pF 为单位),VDD = MCU 电源电压(以 V 为单位)。. f = KF C V DD 方程 19.2. C 方式振荡器频率 例如:假设 VDD = 3.0 V and f = 150 kHz: f = KF / (C x VDD) 0.150 MHz = KF / (C x 3.0) 由于 所需要 的频率 大约为 150 kHz,从 is desired, select the K Factor from the table in SFR 定 义 19.6 (OSCXCN) as KF = 22: 0.150 MHz = 22 / (C x 3.0) C x 3.0 = 22 / 0.150 MHz C = 146.6 / 3.0 pF = 48.8 pF 因此,本例中要用的 XFCN 值为 011b, C 为 50 pF。 ??? 1.4 151 C8051F380/1/2/3/4/5/6/7/C SFR 定义 19.6. OSCXCN:外部振荡器控制寄存器 位 7 名称 XCLKVLD XOSCMD[2:0] 类型 R R/W 复位 0 6 5 0 0 4 3 2 1 0 XFCN[2:0] R 0 R/W 0 0 0 0 SFR 地址 = 0xB1 ; SFR 页 = 所有页 位 名称 7 XCLKVLD 6:4 3 2:0 152 功能 外部振荡器有效标志。 提供外部振荡器状态,除了外部 CMOS 时钟方式和外部 CMOS 时钟 2 分频方式 外,在所有的时间对所有的工作方式都有效。在外部 CMOS 时钟方式和外部 CMOS 时钟 2 分频方式, XCLKVLD 总是返回 0 值。 0:外部晶体振荡器未用或未稳定。 1:外部晶体振荡器稳定运行。 XOSCMD[2:0] 外部振荡器方式选择位。 00x:外部振荡器电路禁止。 010:外部 CMOS 时钟方式。 011:外部 CMOS 时钟方式二分频。 100:RC 振荡器方式二分频。 101:电容振荡器方式二分频。 110:晶体振荡器方式。 111:晶体振荡器方式二分频。 未使用 XFCN[2:0] 读 = 0 ;写 = 忽略。 外部振荡器频率控制位。 根据所期望的 RC 方式频率设置。 根据所期望的 C 方式 K 因子设置。 XFCN 晶体方式 RC 方式 电容方式 000 f 20 kHz f 25 kHz K 因子 = 0.87 001 20 kHz f 58 kHz 25 kHz f 50 kHz K 因子 = 2.6 010 58 kHz f 155 kHz 50 kHz f 100 kHz K 因子 = 7.7 011 155 kHz f 415 kHz 100 kHz f 200 kHz K 因子 = 22 100 415 kHz f 1.1 MHz 200 kHz f 400 kHz K 因子 = 65 101 1.1 MHz f 3.1 MHz 400 kHz f 800 kHz K 因子 = 180 110 3.1 MHz f 8.2 MHz 800 kHz f 1.6 MHz K 因子 = 664 111 8.2 MHz f 25 MHz 1.6 MHz f 3.2 MHz K 因子 = 1590 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 20. 端口输入 / 输出 数字和模拟资源可以通过 40 个 I/O 引脚 (C8051F380/2/4/6) 或 25 个 I/O 引脚 (C8051F381/3/5/7) 使用。端 口引脚组织如图 20.1 所示。每个端口引脚都可以被定义为通用 I/O (GPIO)或模拟输入。端口引脚 P0.0~P3.7 可以被分配给内部数字资源,如图 20.3 所示。设计者完全控制数字功能的引脚分配,只受物理 I/O 引脚数 的限制。这种资源分配的灵活性是通过使用优先权交叉开关译码器实现的。注意,不论交叉开关的设置如 何,端口 I/O 引脚的状态总是可以被读到相应的端口锁存器。 交叉开关根据优先权译码表 (图 20.3 和图 20.4)为所选择的内部数字资源分配 I/O 引脚。寄存器 XBR0、 XBR1 和 XBR2 (见 SFR 定义 20.1、 SFR 定义 20.2 和 SFR 定义 20.3)用于选择内部数字功能。 所有端口 I/O 都耐 5V 电压 (参见图 20.2 的端口 I/O 单元电路)。端口 I/O 单元可以被配置为漏极开路或推 挽方式 ( 在端口输出方式寄存器 PnMDOUT 中设置, n = 0,1,2,3,4)。 XBR0, XBR1, XBR2, PnSKIP 寄 存器 PnMD OU T, PnMD IN 寄存器 优先权 译码器 最高 优先级 2 U ART0 4 SPI 8 (内部 数字信 号) SMBu s0 C P0 输出 2 C P1 输出 2 数字 交叉开关 8 P0 I/O 单元 P0.0 P1 I/O 单元 P1.0 P2 I/O 单元 P2.0 P3 I/O 单元 P3.0 SYSC LK 8 6 PC A 2 T 0, T 1 2 UAR T1 最低 优先级 2 SMBus1 8 2 P0.7 P1.7 P2.7 P3.7 * 8 P0 (P0. 0-P0.7) P1 (P1. 0-P1.7) P2 (P2. 0-P2.7) (端口 锁存器 ) 8 8 注:P3.1-P3.7只存在于48脚的 器件中 8 P3 (P3.0-P3.7*) 图 20.1. 端口 I/O 功能框图 (端口 0- 端口 3) ??? 1.4 153 C8051F380/1/2/3/4/5/6/7/C 弱上 拉 推挽 V DD 端口 输出使能 VD D (WE AK) 端口 引脚 端口 输出 GN D 模拟选 择 模拟 输入 端口输入 图 20.2. 端口 I/O 单元框图 20.1. 优先权交叉开关译码器 优先权交叉开关译码器(图 20.3)为每个 I/O 功能分配优先权,从优先权最高的 UART0 开始。当一个数字 资源被选择时,尚未分配的端口引脚中的最低位被分配给该资源 (UART0 总是使用引脚 4 和 5)。如果一 个端口引脚已经被分配,则交叉开关在为下一个被选择的资源分配引脚时将跳过该引脚。此外,交叉开关还 将跳过PnSKIP寄存器中被置1的那些位所对应的引脚。PnSKIP寄存器允许软件跳过那些被用作模拟输入、 特定功能或 GPIO 的引脚。 如果一个端口引脚被一个外设使用而不经过交叉开关,则该引脚在 PnSKIP 寄存器中的对应位应被置 1. 这 种情况适用于 VREF 信号、外部振荡器引脚 (XTAL1, XTAL2),ADC 的外部转换启动信号 (CNVSTR)、EMIF 控制信号和任何被选择为 ADC 或比较器输入的引脚。PnSKIP 寄存器也可以用于跳过被用作 GPIO 的引脚。 交叉开关跳过那些所选择的引脚 (如同这些引脚也经被交叉开关分配) ,移向下一个未被分配的引脚。 图 20.3 示出可供每个外设使用的所有可能引脚;图 20.4 示出了没有引脚被跳过的交叉开关配置;图 20.5 给出了一个 P0.2、 P0.3 和 P1.0 被逃过情况下的交叉开关配置。 寄存器 XBR0、 XBR1 和 XBR2 用于为数字 I/O 资源分配物理 I/O 端口引脚。注意:当任何一个 SMBus 被 选择时,交叉开关将为其分配两个引脚 (SDA 和 SCL)。当任何一个 UART 被选择时,交叉开关也为其分配 两个引脚 (TX 和 RX)。UART0 的引脚分配是固定的 (这是出于引导装载的目的):UART 的 TX0 总是被分 配到 P0.4 ; UART 的 RX0 总是被分配到 P0.5。在优先功能被分配之后,标准端口 I/O 是连续的。 注意:SPI 可以工作在三线或四线方式,取决于 SPI0CN 寄存器中 NSSMD1-NSSMD0 位的状态。根据 SPI 方式不同, NSS 信号可以连到端口引脚,也可以不连到端口引脚。 154 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C XTAL1 XTAL2 48脚封装 的特殊 功能信号 在32脚封装中不可用 ALE CNVSTR VREF RD WR 32脚封装 的特殊 功能信号 CNVSTR VREF 端口 P0 P1 P2 P3 引脚号 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 XTAL1 XTAL2 TX0 RX0 SCK MISO MOSI NSS* SDA SCL CP0 CP0A CP1 CP1A SYSCLK CEX0 CEX1 CEX2 CEX3 CEX4 ECI T0 T1 TX1 RX1 SDA1 SCL1 引脚跳 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 过设置 P0SKIP P1SKIP P2SKIP P3SKIP 交叉开关按本图从上到下的优先级顺序为外设分配引脚。 这些方块代表可被分配给外设的端口引脚。 特殊功能信号不由交叉开关分配引脚,当这些信号被使能时,交叉开关应被配置为跳过对应的端口引脚。 可被“跳过”的引脚,通过将 PnSKIP中的对应位置1来实现。 * NSS只在4线SPI方式有引出脚。 图 20.3. 外设在端口 I/O 引脚上的可用性 ??? 1.4 155 C8051F380/1/2/3/4/5/6/7/C TX0 RX0 WR RD VREF CNVSTR VREF 在32脚封装中不可用 ALE CNVSTR XTAL2 48脚封装 的特殊 功能信号 XTAL1 32脚封装 的特殊 功能信号 XTAL2 端口 P0 P1 P2 P3 引脚号 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 XTAL1 TX0 和 RX0 被固定分配在这两个引脚 SCK MISO MOSI NSS* SDA SCL CP0 CP0A 其它外设的引脚分配基于引脚的可用性, 按优先顺序分配 CP1 CP1A SYSCLK CEX0 CEX1 CEX2 CEX3 CEX4 ECI T0 T1 TX1 RX1 SDA1 SCL1 引脚跳 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 过设置 P0SKIP P1SKIP P2SKIP P3SKIP 本例展示XBR0 = 0x07 和 XBR1 = 0x43时的交叉开关配置。 这些方块代表被分配给外设的端口引脚。 图 20.4. 没有引脚被跳过的交叉开关优先权译码器配置示例 156 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C RD WR VREF CNVSTR VREF 在32脚封装中不可用 ALE CNVSTR XTAL2 48脚封装 的特殊 功能信号 XTAL1 XTAL2 32脚封装 的特殊 功能信号 XTAL1 端口 P0 P1 P2 P3 引脚号 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 TX0 RX0 SCK MISO MOSI NSS* 如果一个引脚被跳过,则该引脚不能被交叉开关分配,交叉开 关会移向下一个可用于分配的引脚 SDA SCL SYSCLK CEX0 CEX1 P1.0 被跳过 CP1 CP1A P0.3 被跳过 CP0 CP0A P0.2 被跳过 CEX2 CEX3 CEX4 ECI T0 T1 TX1 RX1 SDA1 SCL1 引脚跳 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 过设置 P0SKIP P1SKIP P2SKIP P3SKIP 本例展示XBR0 = 0x07 和 XBR1 = 0x43时的交叉开关配置。 这些方块代表被分配给外设的端口引脚。 图 20.5. 三个引脚被跳过的交叉开关优先权译码器配置示例 ??? 1.4 157 C8051F380/1/2/3/4/5/6/7/C 20.2. 端口 I/O 初始化 端口 I/O 初始化包括以下步骤: 1. 用端口输入方式寄存器 (PnMDIN) 选择所有端口引脚的输入方式 (模拟或数字)。 2. 用端口输出方式寄存器 (PnMDOUT) 选择所有端口引脚的输出方式 (漏极开路或推挽)。 3. 用端口跳过寄存器 (PnSKIP) 选择应被 I/O 交叉开关跳过的那些引脚。 4. 将引脚分配给要使用的外设 (XBR0、 XBR1、 XBR2)。 5. 使能交叉开关 (XBARE = 1)。 让你有端口引脚都必须被配置为模拟或数字输入。被用作比较器或 ADC 输入的任何引脚都应被配置为模拟 输入。当一个引脚被配置为模拟输入时,其弱上拉、数字驱动器和数字接收器都被禁止,这可以节省功耗并 减小模拟输入的噪声。被配置为数字输入的引脚仍然可以被模拟外设使用,但不建议这样做。要将一个端口 引脚配置为数字输入,向 PnMDOUT 寄存器中的对应位写 0,并向对应的端口锁存器 (寄存器 Pn)写 1。 此外,应将交叉开关配置为跳过所有被用作模拟输入的引脚 (通过将 PnSKIP 寄存器中的对应位置 1 来实 现)。端口输入方式在 PnMDIN 寄存器中设置,其中 1 表示数字输入, 0 表示模拟输入。复位后所有引脚的 缺省设置都是数字输入。 I/O 引脚的输出驱动器特性由端口输出方式寄存器 PnMDOUT 决定,每个端口输出驱动器都可被配置为漏极 开路或推挽方式。即使对那些 XBRn 中被选择的数字资源,也需要进行这种选择,而不是自动的。唯一的例 外是 SMBus 引脚 (SDA, SCL, SDA1, SCL1),不管 PnMDOUT 的设置如何,这两个引脚总是被配置为漏极 开路。当 XBR1 寄存器中的 WEAKPUD 位为 0 时,输出方式为漏极开路的所有端口 I/O 的弱上拉都被使能。 WEAKPUD 不影响被配置为推挽方式的端口 I/O。当漏极开路输出被驱动为逻辑 0 时,弱上拉被自动关断 (禁止)以避免不必要的功率消耗。 寄存器 XBR0 和 XBR1 必须被装入正确的值以选择所需要的数字 I/O 功能。XBR1 中的 XBARE 位被置 1 将 使能交叉开关。不管 XBRn 寄存器的设置如何,在交叉开关被使能之前,外部引脚保持标准端口 I/O 方式 (输入方式)。对于给定的 XBRn 设置,可以使用优先权译码表确定 I/O 引脚分配;另一种方法是使用 Silicon Labs IDE 软件的配置向导功能来确定基于 XBRn 寄存器设置的端口 I/O 引脚分配。 注意:为使端口 P0, P1, P2 和 P3 工作在标准端口 I/O 输出方式,交叉开关必须被使能。当交叉开关被禁 止时,端口输出驱动器被禁止。端口 4 总是作为标准 GPIO 使用。 158 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 20.1. XBR0:端口 I/O 交叉开关寄存器 0 位 7 6 5 4 3 2 1 0 名称 CP1AE CP1E CP0AE CP0E SYSCKE SMB0E SPI0E URT0E 类型 R/W R/W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xE1 ; SFR 页 = 所有页 位 名称 7 CP1AE 功能 比较器 1 异步输出使能。 0:异步 CP1 输出不连到端口引脚。 1:异步 CP1 输出连到端口引脚。 6 CP1E 比较器 1 输出使能。 0:CP1 输出不连到端口引脚。 1:CP1 输出连到端口引脚。 5 CP0AE 比较器 0 异步输出使能。 0:异步 CP0 输出不连到端口引脚。 1:异步 CP0 输出连到端口引脚。 4 CP0E 比较器 0 输出使能。 0:CP0 输出不连到端口引脚。 1:CP0 输出连到端口引脚。 3 SYSCKE SYSCLK 输出使能。 0:SYSCLK 输出不连到端口引脚。 1:SYSCLK 输出连到端口引脚。 2 SMB0E SMBus I/O 使能。 0:SMBus I/O 不连到端口引脚。 1:SMBus I/O 连到端口引脚。 1 SPI0E SPI I/O 使能。 0:SPI I/O 不连到端口引脚。 1:SPI I/O 连到端口引脚。注意 :SPI 可以被分配 3 或 4 个 GPIO 引脚。端口引脚。 0 URT0E UART I/O 使能。 0:UART I/O 不连到端口引脚。 1:UART 的 TX0 和 RX0 连到端口引脚 P0.4 和 P0.5。 ??? 1.4 159 C8051F380/1/2/3/4/5/6/7/C SFR 定义 20.2. XBR1:端口 I/O 交叉开关寄存器 1 位 7 6 5 4 3 名称 WEAKPUD XBARE T1E T0E ECIE 类型 R/W R/W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 2 名称 7 WEAKPUD 功能 端口 I/O 弱上拉禁止。 0:弱上拉使能 (被配置为模拟方式的端口除外)。 1:弱上拉禁止。 6 XBARE 5 T1E 交叉开关使能。 0:交叉开关禁止。 1:交叉开关使能。 定时器 1 使能。 0:定时器 1 不连到端口引脚。 1:定时器 1 连到端口引脚。 4 T0E 定时器 0 使能。 0:定时器 0 不连到端口引脚。 1:定时器 0 连到端口引脚。 3 ECIE PCA0 外部计数输入 (ECI) 使能。 0:ECI 不连到端口引脚。 1:ECI 连到端口引脚。 2:0 PCA0ME[2:0] PCA 模块 I/O 使能。 000:所有的 PCA I/O 都不连到端口引脚。 001:CEX0 连到端口引脚。 010:CEX0, CEX1 连到端口引脚。 011:CEX0, CEX1, CEX2 连到端口引脚。 100:CEX0, CEX1, CEX2, CEX3 连到端口引脚。 101:CEX0, CEX1, CEX2, CEX3 连到端口引脚。 11x:保留。 160 ??? 1.4 0 PCA0ME[2:0] SFR 地址 = 0xE2 ; SFR 页 = 所有页 位 1 C8051F380/1/2/3/4/5/6/7/C SFR 定义 20.3. XBR2:端口 I/O 交叉开关寄存器 2 位 7 6 5 4 3 2 名称 1 0 SMB1E URT1E 类型 R/W R/W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xE3 ; SFR 页 = 所有页 位 名称 7:2 保留 SMB1E 1 功能 必须写 000000b。 SMBus1 I/O 使能。 0:SMBus1 I/O 不连到端口引脚。 1:SMBus1 I/O 连到端口引脚。 0 URT1E UART1 I/ 使能。 0:UART1 I/O 不连到端口引脚。 1:UART1 的 TX1 和 RX1 连到端口引脚。 20.3. 通用端口 I/O 未被交叉开关分配的端口引脚和未被模拟外设使用的端口引脚都可以作为通用 I/O 使用。通过对应的端口数 据寄存器访问端口 P3-0,这些寄存器既可以按位寻址也可以按字节寻址。端口 P4 ( 仅 C8051F380/2/4/6) 使 用的 SFR 只能按字节寻址。向端口写入时,数据被锁存到端口数据寄存器中,以保持引脚上的输出数据值 不变。读端口数据寄存器将总是返回端口输入引脚的逻辑状态,而与 XBRn 的设置值无关 (即使在引脚被 交叉开关分配给其它信号时,端口寄存器总是读其对应的端口 I/O 引脚)。例外情况是执行读 - 修改 - 写指令 期间。对端口 SFR 执行的读 - 修改 - 写指令为:ANL,ORL,XRL,JBC,CPL,INC,DEC,DJNZ 和对 端口 SFR 中的某一位执行的 MOV,CLR ,SETB。这些指令读端口寄存器(而不是引脚)的值,修改后再 写回端口 SFR。 ??? 1.4 161 C8051F380/1/2/3/4/5/6/7/C SFR 定义 20.4. P0:端口 0 寄存器 位 7 6 5 4 名称 P0[7:0] 类型 R/W 复位 1 1 1 1 3 2 1 0 1 1 1 1 SFR 地址 = 0x80 ; SFR 页 = 所有页;可位寻址 位 名称 7:0 P0[7:0] 描述 写 读 0:设置输出锁存器为逻辑 低电平。 在端口单元被配置为数字 I/O 1: 设置输出锁存器为逻辑 时,设置端口锁在器逻辑值 高电平。 或读端口引脚的逻辑状态。 端口 0 数据。 0:P0.n 端口引脚为逻辑低 电平。 1:P0.n 端口引脚为逻辑高 电平。 SFR 定义 20.5. P0MDIN:端口 0 输入方式寄存器 位 7 6 5 4 3 名称 P0MDIN[7:0] 类型 R/W 复位 1 1 1 1 1 2 1 0 1 1 1 SFR 地址 = 0xF1 ; SFR 页 = 所有页 位 名称 7:0 P0MDIN[7:0] 功能 P0.7–P0.0 的模拟配置位 ( 分别对应 )。 当端口引脚被配置为模拟方式时,其弱上拉、数字驱动器和数字接收器都被禁止。 0:对应的 P0.n 引脚被配置为模拟方式。 1:对应的 P0.n 引脚不配置为模拟方式。 162 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 20.6. P0MDOUT:端口 0 输出方式寄存器 位 7 6 5 4 3 名称 P0MDOUT[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xA4 ; SFR 页 = 所有页 位 功能 名称 7:0 P0MDOUT[7:0] P0.7–P0.0 的输出方式配置位 ( 分别对应 )。 如果 P0MDIN 寄存器中的对应位为逻辑 0,则这些位被忽略。 0:对应的 P0.n 输出为漏极开路。 1:对应的 P0.n 输出为推挽方式。 SFR 定义 20.7. P0SKIP:端口 0 跳过寄存器 位 7 6 5 4 3 名称 P0SKIP[7:0] 类型 R/W 复位 0 0 0 0 0 SFR 地址 = 0xD4 ; SFR 页 = 所有页 位 名称 7:0 P0SKIP[7:0] 功能 端口 0 交叉开关跳过使能位。 这些位选择被交叉开关译码器跳过的端口 0 引脚。用作模拟功能、特殊功能或 GPIO 的端口引脚应被交叉开关跳过。 0:对应的 P0.n 不被交叉开关跳过。 1:对应的 P0.n 被交叉开关跳过。 ??? 1.4 163 C8051F380/1/2/3/4/5/6/7/C SFR 定义 20.8. P1:端口 1 寄存器 位 7 6 5 4 名称 P1[7:0] 类型 R/W 复位 1 1 1 1 3 2 1 0 1 1 1 1 SFR 地址 = 0x90 ; SFR 页 = 所有页;可位寻址 位 名称 7:0 P1[7:0] 描述 写 读 0:设置输出锁存器为逻辑 低电平。 在端口单元被配置为数字 I/O 1:设置输出锁存器为逻辑 时,设置端口锁存器逻辑值 高电平。 或读端口引脚的逻辑状态。 端口 1 数据。 0:P1.n 端口引脚为逻辑低 电平。 1:P1.n 端口引脚为逻辑高 电平。 SFR 定义 20.9. P1MDIN:端口 1 输入方式寄存器 位 7 6 5 4 3 名称 P1MDIN[7:0] 类型 R/W 复位 1* 1 1 1 1 2 1 0 1 1 1 SFR 地址 = 0xF2 ; SFR 页 = 所有页 位 名称 7:0 P1MDIN[7:0] 功能 P1.7–P1.0 的模拟配置位 ( 分别对应 )。 当端口引脚被配置为模拟方式时,其弱上拉、数字驱动器和数字接收器都被禁止。 0:对应的 P1.n 引脚被配置为模拟方式。 1:对应的 P1.n 引脚不配置为模拟方式。 164 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 20.10. P1MDOUT:端口 1 输出方式寄存器 位 7 6 5 4 3 名称 P1MDOUT[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xA5 ; SFR 页 = 所有页 位 功能 名称 7:0 P1MDOUT[7:0] P1.7–P1.0 的输出方式配置为 ( 分别对应 )。 如果 P1MDIN 寄存器中的对应位为逻辑 0,则这些位被忽略。 0:对应的 P1.n 输出为漏极开路。 1:对应的 P1.n 输出为推挽方式。 SFR 定义 20.11. P1SKIP:端口 1 跳过寄存器 位 7 6 5 4 3 名称 P1SKIP[7:0] 类型 R/W 复位 0 0 0 0 0 SFR 地址 = 0xD5 ; SFR 页 = 所有页 位 名称 7:0 P1SKIP[7:0] 功能 端口 1 交叉开关跳过使能位。 这些位选择被交叉开关译码器跳过的端口 1 引脚。用作模拟功能、特殊功能或 GPIO 的端口引脚应被交叉开关跳过。 0:对应的 P1.n 不被交叉开关跳过。 1:对应的 P1.n 被交叉开关跳过。 ??? 1.4 165 C8051F380/1/2/3/4/5/6/7/C SFR 定义 20.12. P2:端口 2 寄存器 位 7 6 5 4 名称 P2[7:0] 类型 R/W 复位 1 1 1 1 3 2 1 0 1 1 1 1 SFR 地址 = 0xA0 ; SFR 页 = 所有页;可位寻址 位 名称 7:0 P2[7:0] 描述 写 读 0:设置输出锁存器为逻辑 低电平。 在端口单元被配置为数字 I/O 1:设置输出锁存器为逻辑 时,设置端口锁存器逻辑值 高电平。 或读端口引脚的逻辑状态。 端口 2 数据。 0:P2.n 端口引脚为逻辑低 电平。 1:P2.n 端口引脚为逻辑高 电平。 SFR 定义 20.13. P2MDIN:端口 2 输入方式寄存器 位 7 6 5 4 3 名称 P2MDIN[7:0] 类型 R/W 复位 1 1 1 1 1 2 1 0 1 1 1 SFR 地址 = 0xF3 ; SFR 页 = 所有页 位 名称 7:0 P2MDIN[7:0] 功能 P2.7–P2.0 的模拟配置位 ( 分别对应 )。 当端口引脚被配置为模拟方式时,其弱上拉、数字驱动器和数字接收器都被禁止。 0:对应的 P2.n 引脚被配置为模拟方式。 1:对应的 P2.n 引脚不配置为模拟方式。 166 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 20.14. P2MDOUT:端口 2 输出方式寄存器 位 7 6 5 4 3 名称 P2MDOUT[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xA6 ; SFR 页 = 所有页 位 功能 名称 7:0 P2MDOUT[7:0] P2.7–P2.0 的输出方式配置为 ( 分别对应 )。 如果 P2MDIN 寄存器中的对应位为逻辑 0,则这些位被忽略。 0:对应的 P2.n 输出为漏极开路。 1:对应的 P2.n 输出为推挽方式。 SFR 定义 20.15. P2SKIP:端口 2 跳过寄存器 位 7 6 5 4 3 名称 P2SKIP[7:0] 类型 R/W 复位 0 0 0 0 0 SFR 地址 = 0xD6 ; SFR 页 = 所有页 位 名称 7:0 P2SKIP[3:0] 功能 端口 2 交叉开关跳过使能位。 这些位选择被交叉开关译码器跳过的端口 2 引脚。用作模拟功能、特殊功能或 GPIO 的端口引脚应被交叉开关跳过。 0:对应的 P2.n 不被交叉开关跳过。 1:对应的 P2.n 被交叉开关跳过。 ??? 1.4 167 C8051F380/1/2/3/4/5/6/7/C SFR 定义 20.16. P3:端口 3 寄存器 位 7 6 5 4 名称 P3[7:0] 类型 R/W 复位 1 1 1 1 3 2 1 0 1 1 1 1 SFR 地址 = 0xB0 ; SFR 页 = 所有页;可位寻址 位 名称 7:0 P3[7:0] 描述 写 读 0:设置输出锁存器为逻辑 低电平。 在端口单元被配置为数字 I/O 1:设置输出锁存器为逻辑 时,设置端口锁存器逻辑值 高电平。 或读端口引脚的逻辑状态。 端口 3 数据。 0:P3.n 端口引脚为逻辑低 电平。 1:P3.n 端口引脚为逻辑高 电平。 SFR 定义 20.17. P3MDIN:端口 3 输入方式寄存器 位 7 6 5 4 3 名称 P3MDIN[7:0] 类型 R/W 复位 1 1 1 1 1 2 1 0 1 1 1 SFR 地址 = 0xF4 ; SFR 页 = 所有页 位 名称 7:0 P3MDIN[7:0] 功能 P3.7–P3.0 的模拟配置位 ( 分别对应 )。 当端口引脚被配置为模拟方式时,其弱上拉、数字驱动器和数字接收器都被禁止。 0:对应的 P3.n 引脚被配置为模拟方式。 1:对应的 P3.n 引脚不配置为模拟方式。 168 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 20.18. P3MDOUT:端口 3 输出方式寄存器 位 7 6 5 4 3 名称 P3MDOUT[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xA7 ; SFR 页 = 所有页 位 功能 名称 7:0 P3MDOUT[7:0] P3.7–P3.0 的输出方式配置为 ( 分别对应 )。 如果 P3MDIN 寄存器中的对应位为逻辑 0,则这些位被忽略。 0:对应的 P3.n 输出为漏极开路。 1:对应的 P3.n 输出为推挽方式。 SFR 定义 20.19. P3SKIP:端口 3 跳过寄存器 位 7 6 5 4 3 名称 P3SKIP[7:0] 类型 R/W 复位 0 0 0 0 0 SFR 地址 = 0xDF ; SFR 页 = 所有页 位 名称 7:0 P3SKIP[3:0] 功能 端口 3 交叉开关跳过使能位。 这些位选择被交叉开关译码器跳过的端口 3 引脚。用作模拟功能、特殊功能或 GPIO 的端口引脚应被交叉开关跳过。 0:对应的 P3.n 不被交叉开关跳过。 1:对应的 P3.n 被交叉开关跳过。 ??? 1.4 169 C8051F380/1/2/3/4/5/6/7/C SFR 定义 20.20. P4:端口 4 寄存器 位 7 6 5 4 名称 P4[7:0] 类型 R/W 复位 1 1 1 1 3 2 1 0 1 1 1 1 SFR 地址 = 0xC7 ; SFR 页 = 所有页 位 名称 7:0 P4[7:0] 描述 写 读 0:设置输出锁存器为逻辑 低电平。 在端口单元被配置为数字 I/O 1:设置输出锁存器为逻辑 时,设置端口锁存器逻辑值 高电平。 或读端口引脚的逻辑状态。 端口 4 数据。 0:P4.n 端口引脚为逻辑低 电平。 1:P4.n 端口引脚为逻辑高 电平。 SFR 定义 20.21. P4MDIN:端口 4 输入方式寄存器 位 7 6 5 4 3 名称 P4MDIN[7:0] 类型 R/W 复位 1 1 1 1 1 2 1 0 1 1 1 SFR 地址 = 0xF5 ; SFR 页 = 所有页 位 名称 7:0 P4MDIN[7:0] 功能 P4.7–P4.0 的模拟配置位 ( 分别对应 )。 当端口引脚被配置为模拟方式时,其弱上拉、数字驱动器和数字接收器都被禁止。 0:对应的 P4.n 引脚被配置为模拟方式。 1:对应的 P4.n 引脚不配置为模拟方式。 170 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 20.22. P4MDOUT:端口 4 输出方式寄存器 位 7 6 5 4 3 名称 P4MDOUT[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xAE ; SFR 页 = 所有页 位 功能 名称 7:0 P4MDOUT[7:0] P4.7–P4.0 的输出方式配置为 ( 分别对应 )。 如果 P4MDIN 寄存器中的对应位为逻辑 0,则这些位被忽略。 0:对应的 P4.n 输出为漏极开路。 1:对应的 P4.n 输出为推挽方式。 ??? 1.4 171 C8051F380/1/2/3/4/5/6/7/C 172 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 21. 通用串行总线控制器 (USB0) C8051F380/1/2/3/4/5/6/7/C 器件集成了一个完整的全速 / 低速 USB 功能控制器,用于实现 USB 外部设备。 USB 功能控制器 (USB0) 由串行接口引擎 (SIE)、 USB 收发器 (包括匹配电阻和可配置上拉电阻)、 1KB FIFO 存储器和时钟恢复电路(支持无晶体操作)组成,不需要外部元件。USB 功能控制器和收发器符合通 用串行总线规范 2.0 版。 收发器 串行接口引擎(SIE) 端点0 VDD IN/OUT D+ 数据 传输 控制 D- USB控制、 状态和 中断寄存器 端点1 端点2 CIP-51 核 端点3 OUT IN IN OUT IN OUT USB FIFO (1KB RAM) 图 21.1. USB0 原理框图 注意:本文档假设读者熟悉 USB 协议。本文档所使用的术语和缩略语在 USB 规范中定义。我们希望您能在 进一步阅读之前重温 USB 规范的最新版本。 注: C8051F380/1/2/3/4/5/6/7/C 不能被用作 USB 主设备。 21.1. 端点地址 共有 8 个端点管道。控制端点(端点 0)总是作为双向 IN/OUT 端点。其它端点被作为 3 对 IN/OUT 端点管道。 ??? 1.4 172 C8051F380/1/2/3/4/5/6/7/C 表 21.1. 端点地址 端点 相应的管道 端点 0 端点 0 输入 (IN) 端点 0 输出 (OUT) 端点 1 输入 (IN) 端点 1 输出 (OUT) 端点 2 输入 (IN) 端点 2 输出 (OUT) 端点 3 输入 (IN) 端点 3 输出 (OUT) 端点 1 端点 2 端点 3 USB 协议地址 0x00 0x00 0x81 0x01 0x82 0x02 0x83 0x03 21.2. USB 收发器 用 USB0XCN 寄存器 (见 SFR 定义 21.1)配置 USB 收发器。配置内容包括收发器使能 / 禁止、上拉电阻 使能 / 禁止及器件速度选择 (全速或低速)。当位 SPEED = 1 时, USB0 工作在全速 USB 方式,片内上拉 电阻 (如果被使能)出现在 D+ 引脚。当位 SPEED = 0 时, USB0 工作在低速 USB 方式,片内上拉电阻 (如果被使能)出现在 D- 引脚。寄存器 USB0XCN 的位 4~0 用于收发器测试(见 SFR 定义 21.1 的说明)。 上拉电阻只在有 VBUS 信号时被使能 (有关 VBUS 检测的详细信息见第 74 页 9.1.2. 节 “VBUS 检测 ” )。 注意:USB 时钟应在收发器被使能之前就处于活动状态。 173 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 21.1. USB0XCN:USB0 收发器控制寄存器 位 7 6 5 名称 PREN PHYEN SPEED 类型 R/W R/W R/W 复位 0 0 0 4 3 2 1 0 PHYTST[1:0] DFREC Dp Dn R/W R R R 0 0 0 0 0 SFR 地址 = 0xD7 ; SFR 页 = 所有页 位 名称 7 PREN 功能 内部上拉电阻使能。 上拉电阻的位置 (D+ 或 D-)由 SPEED 位决定。 0:禁止内部上拉电阻 (器件实际上脱离 USB 网络)。 1:当 VBUS 有信号时使能内部上拉电阻 (器件与 USB 网络连接)。 6 PHYEN 物理层使能。 0:禁止 USB0 物理层收发器 (挂起)。 1:使能 USB0 物理层收发器 (正常)。 5 SPEED USB0 速度选择。 该位选择 USB0 的速度。 0:USB0 工作在低速方式。内部上拉电阻 (如果被使能)出现在 D- 线。 1:USB0 工作在全速方式。内部上拉电阻 (如果被使能)出现在 D+ 线。 4:3 PHYTST[1:0] 物理层测试位。 这两位用于测试 USB0 收发器。 00:方式 0:正常 (非测试方式)(D+ = X, D- = X) 01:方式 1:强加差分 1 (D+ = 1, D- = 0) 10:方式 2:强加差分 0 (D+ = 0, D- = 1) 11:方式 3:强加单端 0 (D+ = 0, D- = 0) 2 DFREC 1 Dp 差分接收器位。 该位的状态指示出现在 D+ 和 D- 引脚的当前差分值 (当 PHYEN = 1 时)。 0:差分 0 信号出现在总线上。 1:差分 1 信号出现在总线上。 D+ 信号状态。 该位指示 D+ 引脚的当前逻辑电平。 0:D+ 信号当前为逻辑 0。 1:D+ 信号当前为逻辑 1。 0 Dn D- 信号状态。 该位指示 D- 引脚的当前逻辑电平。 0:D- 信号当前为逻辑 0。 1:D- 信号当前为逻辑 1。 ??? 1.4 174 C8051F380/1/2/3/4/5/6/7/C 21.3. USB 寄存器访问 表 21.2 中列出的 USB0 控制器寄存器是通过两个特殊功能寄存器来访问的,这两个特殊功能寄存器是: USB0 地址寄存器 (USB0ADR) 和 USB0 数据寄存器 (USB0DAT)。USB0ADR 寄存器选择读 / 写 USB0DAT 寄存器时的目标 USB 寄存器。见图 21.2。 对端点控制 / 状态寄存器的访问是通过先写 USB 寄存器 INDEX (用目标端点号)实现的。目标端点号被写 入INDEX寄存器后,就可以访问与目标端点对应的控制/状态寄存器。表 21.2 列出了端点控制/状态寄存器。 注意:访问 USB 寄存器时, USB 时钟必须是活动的。 USB 控制 器 8051 SFR 中 断寄存 器 FIFO 访问 公 用寄存 器 USB0DAT INDEX寄存器 端点0 控制/状态 寄存器 端点1 控制/状态 寄存器 端点2 控制/状态 寄存器 USB0ADR 端点3 控制/状态 寄存器 图 21.2. USB0 寄存器访问示意图 175 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 21.2. USB0ADR:USB0 间接地址寄存器 位 7 6 名称 BUSY AUTORD USBADDR[5:0] 类型 R/W R/W R/W 复位 0 0 5 0 4 3 0 0 2 0 1 0 0 0 SFR 地址 = 0x96 ; SFR 页 = 所有页 位 名称 7 BUSY 6 AUTORD 描述 写 0:无作用。 1:启动 USB0 间接寄存 该位在间接 USB0 寄存器 器读操作,目标地址由 访问期间使用。 USBADDR 位给出。 USB0 寄存器读忙标志。 读 0:USB0DAT 寄存器数据有 效。 1:USB0 正在访问间接寄 存器; USB0DAT 寄存器 数据无效。 USB0 寄存器自动读标志位。 该位用于 FIFO 块读。 0:每次 USB0 间接寄存器读操作都必须手动写 BUSY 位。 1:当软件读 USB0DAT 时,下一个间接寄存器读操作将被自动启动 (USBADDR 位不变)。 5:0 USBADDR[5:0] USB0 间接寄存器地址。 这些位保持用于间接访问 USB0 寄存器的 6 位地址。表 21.2 列出了 USB0 寄存器 和它们的间接地址。读和写 USB0DAT 将访问由 USBADDR 位指向的目标寄存 器。 ??? 1.4 176 C8051F380/1/2/3/4/5/6/7/C SFR 定义 21.3. USB0DAT:USB0 数据寄存器 位 7 6 5 4 3 名称 USB0DAT[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0x97 ; SFR 页 = 所有页 位 7:0 名称 描述 USB0DAT[7:0] USB0 数据位。 该 SFR 用于间接读和写 USB0 寄存器。 177 写 读 间接写步骤: 1. 查询 BUSY 位 (USB0ADR.7) => 0。 2. 将目标 USB0 寄存器地 址装入到寄存器 USB0ADR 中的 USBADDR 位。 3. 向 USB0DAT 写数据。 4. 重复上述步骤 (当写同 一个 USB0 寄存器时,步 骤 2 可以被跳过)。 间接读步骤: 1. 查询 BUSY 位 (USB0ADR.7) => 0。 2. 将目标 USB0 寄存器地 址装入到寄存器 USB0ADR 中的 USBADDR 位。 3. 向寄存器 USB0ADR 中 的 BUSY 位写 1 (步骤 2 和步骤 3 可以在同一个写 操作完成)。 4. 查询 BUSY 位 (USB0ADR.7) => 0。 5. 从 USB0DAT 读数据。 6. 重复从步骤 2 开始的步 骤 (当读同一个 USB0 寄 存器时,步骤 2 可以被跳 过;当 AUTORD 位 (USB0ADR.6) 为逻辑 1 时,步骤 3 可以被跳过)。 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 表 21.2. USB0 控制器寄存器 USB 寄存器名称 USB 寄存器地址 IN1INT OUT1INT CMINT IN1IE OUT1IE CMIE 0x02 0x04 0x06 0x07 0x09 0x0B FADDR POWER FRAMEL FRAMEH INDEX CLKREC EENABLE FIFOn 0x00 0x01 0x0C 0x0D 0x0E 0x0F 0x1E 0x20-0x23 E0CSR EINCSRL EINCSRH EOUTCSRL EOUTCSRH E0CNT EOUTCNTL EOUTCNTH 0x11 0x12 0x14 0x15 0x16 0x17 说 明 中断寄存器 端点 0 和端点 1-3 输入 (IN)中断标志 端点 1-3 输出 (OUT)中断标志 公共 USB 中断标志 端点 0 和端点 1-3 输入 (IN)中断使能 端点 1-3 输出 (OUT)中断使能 公共 USB 中断使能 公共寄存器 功能地址 电源管理 帧号低字节 帧号高字节 端点索引选择 时钟恢复控制 端点使能 端点 0 ~ 3 FIFO 索引寄存器 端点 0 控制 / 状态 端点输入 (IN)控制 / 状态低字节 端点输入 (IN)控制 / 状态高字节 端点输出 (OUT)控制 / 状态低字节 端点输出 (OUT)控制 / 状态高字节 端点 0 FIFO 中的接收字节数 端点输出 (OUT)包计数低字节 端点输出 (OUT)包计数高字节 ??? 1.4 页码 182 188 189 190 191 192 183 185 186 186 179 180 197 182 195 199 200 202 203 196 203 204 178 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.4. INDEX:USB0 端点索引寄存器 位 7 6 5 4 3 2 1 0 EPSEL[3:0] 名称 类型 R R R R 复位 0 0 0 0 R/W 0 0 0 0 USB 寄存器地址 = 0x0E 位 名称 7:4 未使用 EPSEL[3:0] 3:0 功 能 读 = 0000b ;写 = 忽略。 端点选择位。 当访问索引的 USB0 寄存器时,这些位选择目标端点。 0000: 端点 0 0001: 端点 1 0010: 端点 2 0011: 端点 3 0100-1111: 保留。 . 21.4. USB 时钟配置 USB0 具有全速和低速 USB 通信功能。通信速度通过特殊功能寄存器 USB0XCN 中的 SPEED 位选择。当 USB0 工作在低速方式时, USB0 时钟必须为 6 MHz ;当 USB0 工作在高速方式时, USB0 时钟必须为 48 MHz。时钟选择见第 142 页 19. 节 “ 时钟源 ” 。USB0 时钟通过特殊功能寄存器 CLKSEL 选择(见 SFR 定义 19.1)。 时钟恢复电路用输入 USB 数据流调节内部振荡器,这使内部振荡器能满足 USB 时钟的精度要求。时钟恢复 功能应在下面的配置中使用。 : 通信速度 USB 时钟 全速 低速 内部振荡器 内部振荡器 /8 当 USB0 工作在低速方式并使用时钟恢复功能时,软件必须向 CRLOW 写 1 以使能低速时钟恢复功能。在 低速方式一般不需要使用时钟恢复功能。 当 USB 网络上有强噪声时,可以使用单步方式帮助时钟恢复电路锁定。在一般的 USB 环境中不需要 (或 不建议)使用该方式。 179 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.5. CLKREC:时钟恢复控制寄存器 位 7 6 5 名称 CRE CRSSEN CRLOW 类型 R/W R/W R/W 复位 0 0 0 4 3 2 1 0 1 1 R/W 0 1 1 USB 寄存器地址 = 0x0F 位 7 6 5 4:0 名称 功 能 时钟恢复使能位。 该位使能 / 禁止 USB 时钟恢复功能。 0:禁止时钟恢复。 1:使能时钟恢复。 CRSSEN 时钟恢复单步。 该位在时钟恢复期间强制采用 “ 单步 ” 方式进行振荡器校准。 0:正常校准方式。 1:单步方式。 CRLOW 低速时钟恢复方式。 如果在 USB0 工作于低速方式时使用时钟恢复功能,则该位必须被置 1。 0:全速方式。 1:低速方式。 保留 必须写 01111b。 CRE ??? 1.4 180 C8051F380/1/2/3/4/5/6/7/C 21.5. FIFO 管理 1024 字节的片内 XRAM 被用作 USB0 的 FIFO 空间。该 FIFO 空间在端点 0 ~ 3 之间的分配如图 21.3 所示。 分配给端点 1 ~ 3 的 FIFO 空间可以被配置为输入 (IN)、输出 (OUT) 或两者兼有 (分割方式:一半空间给输 入,一半空间给输出)。 0x07FF 端点0 (64字节 ) 0x07C0 0x07BF 0x0740 0x073F 端点 1 (128字节 ) 端点 2 (256字节 ) 可配置 为 IN、 OUT或 IN/OUT(分割方式) 0x0640 0x063F 端点 3 (512字节 ) 0x0440 0x043F 未使用 (64 字节 ) 0x0400 USB 时 钟域 系统 时钟域 0x03FF 用 户 XRAM (1024 字节 ) 0x0000 图 21.3. USB FIFO 分配 21.5.1. FIFO 分割方式 端点 1 ~ 3 的 FIFO 空间可以被分割成两半,高半部分 FIFO 空间由输入端点使用,低半部分 FIFO 空间由输 出端点使用。例如,端点 3 被配置为分割方式,则高 256 字节 (0x0540 – 0x063F) 为端点 3 输入 (IN) 使用, 低 256 字节 (0x0440 – 0x053F) 为端点 3 输出 (OUT) 使用。 如果一个端点的 FIFO 不被配置为分割方式,则端点输入 / 输出 (IN/OUT) 对的 FIFO 被组合成一个单独的输 入 (IN) 或输出 (OUT)FIFO。在这种情况下,端点输入 / 输出对在某一时刻只能有一个方向被使用。端点方向 (输入 / 输出)由相应端点的 EINCSRH 寄存器中的 DIRSEL 位决定 (见 SFR 定义 21.3)。 181 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 21.5.2. FIFO 双缓冲 端点 1 ~ 3 的 FIFO 空间可以被配置为双缓冲模式。在该模式,最大数据包的字节数为 FIFO 空间的一半, FIFO 中可以同时有两个数据包。该模式只适用于端点 1 ~ 3。当一个端点被配置为分割方式时,输入 (IN) 端 点和 / 或输出 (OUT) 端点都可以被配置为双缓冲模式。当分割方式未被使能时,整个端点 FIFO 可以被设置 为双缓冲模式。表 21.3 列出了每种 FIFO 配置下的最大数据包的长度。 表 21.3. FIFO 配置 端点号 分割方式使能? 0 N/A N Y N Y N Y 1 2 3 最大输出数据包长度 (双缓冲禁止 / 使能) 最大输入数据包长度 (双缓冲禁止 / 使能) 64 128 / 64 64 / 32 64 / 32 256 / 128 128 / 64 128 / 64 512 / 256 256 / 128 256 / 128 21.5.3. FIFO 访问 对每个端点 FIFO 的访问是通过对应的 FIFOn 寄存器来实现的。对一个端点 FIFOn 寄存器的读操作从该端 点的 FIFO 中卸载一个字节;对一个端点 FIFOn 寄存器的写操作将一个字节加载到该端点的 FIFO。当一个 端点 FIFO 被配置为分割方式时,对端点 FIFOn 寄存器的读操作从输出端点 FIFO 中卸载一个字节,对端点 FIFOn 寄存器的写操作将一个字节装入输入端点 FIFO。 USB SFR 定义 21.6. FIFOn:USB0 端点 FIFO 访问寄存器 位 7 6 5 4 3 名称 FIFODATA[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 USB 寄存器地址 = 0x20-0x23 位 7:0 功 能 名称 FIFODATA[7:0] 端点 FIFO 访问位。 使用 USB 地址 0x20 ~ 0x23 访问 4 对端点 FIFO。 0x20:端点 0 0x21:端点 1 0x22:端点 2 0x23:端点 3 对 FIFO 地址的写操作将数据加载到相应端点的 IN FIFO。 对 FIFO 地址的读操作将数据从相应端点的 OUT FIFO 中卸载。 ??? 1.4 182 C8051F380/1/2/3/4/5/6/7/C 21.6. 功能地址 FADDR 寄存器中保存有当前的 USB0 功能地址。USB0 接收到的 SET_ADDRESS 命令中有 7 位功能地址, 软件应在接收到该命令时将主机分配的 7 位功能地址写入 FADDR 寄存器。只有在当前传输结束后(一般是 在 SET_ADDRESS 命令传输的状态段),写入 FADDR 的新地址才生效(生效之前 USB0 不响应新地址)。 当软件向 FADDR 寄存器写入新地址时, UPDATE 位 (FADDR.7)被硬件置 1。当新地址生效后,硬件将 UPDATE 位清 0。 USB SFR 定义 21.7. FADDR:USB0 功能地址寄存器 位 7 名称 UPDATE FADDR[6:0] 类型 R R/W 复位 0 6 0 5 0 4 0 3 0 2 1 0 0 0 0 USB 寄存器地址 = 0x00 位 功 能 名称 功能地址更新位。 当软件写 FADDR 寄存器时被硬件置 1。当新地址生效后,硬件将该位清 0。 0:最后写入 FADDR 的地址已经生效。 1:最后写入 FADDR 的地址尚未生效。 6:0 FADDR[6:0] 功能地址位。 保持 USB0 的 7 位功能地址。当端点 0 收到 SET_ADDRESS 标准设备请求时,软件 应写该地址。设备请求完成后新地址生效。 7 UPDATE 21.7. 功能配置和控制 USB 寄存器 POWER(见 USB 寄存器定义 21.8)用于在设备级配置和控制 USB0(使能 / 禁止,复位 / 挂 起 / 恢复等)。 USB 复位:当检测到总线上的复位信号时,USBRST 位 (POWER.3) 被硬件置 1。检测到复位信号时会发生 以下过程: 1. USB0 地址被复位 (FADDR = 0x00)。 2. 端点 FIFO 被清空。 3. 控制 / 状态寄存器被复位为 0x00 (E0CSR、 EINCSRL、 EINCSRH、 EOUTCSRL、 EOUTCSRH)。 4. USB 寄存器 INDEX 被复位为 0x00。 5. 所有 USB 中断 (挂起中断除外)都被使能,对应的中断标志被清 0。 6. 产生 USB 复位中断 (如果被使能)。 向 USBRST 位写 1 将产生异步 USB0 复位。在发生异步复位后,所有 USB 寄存器复位到它们的缺省值。 挂起方式:在挂起检测被使能的情况下 (SUSEN = 1),当总线上检测到挂起信号时, USB0 进入挂起方式, 并产生中断 (如果中断被使能,即 SUSINTE = 1)。挂起中断服务程序 (ISR) 应执行与应用相关的配置任 务,如禁止相应的外设和 / 或配置时钟源为低功耗方式。有关内部振荡器配置 (包括内部振荡器的挂起方式 功能)的详细信息见第 145 页 19.3. 节 “ 可编程内部高频 (H-F) 振荡器 ” 。 183 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 当有下面任何一种情况发生时,USB0 退出挂起方式:1) 检测到或产生恢复信号,2) 检测到复位信号,3) 发 生设备或 USB 复位。如果 USB0 被挂起,则在发生上述事件时内部振荡器退出挂起方式。 恢复信号:当总线上检测到恢复信号时, USB0 退出挂起方式,并产生恢复中断 (如果中断被使能,即 RESINTE = 1)。软件可以通过向 RESUME 位 (POWER.2) 写 1 来强制产生远程唤醒。当强制产生远程唤 醒时,软件应在远程唤醒被启动 (RESUME = 1) 后 10 ~ 15ms 向 RESUME 位写 0,以结束恢复信号。 ISO 更新:当软件向 ISOUP 位 (POWER.7) 写 1 后, ISO 更新功能被使能。在 ISO 更新功能被使能时,写 入到一个 ISO IN 端点的新数据包要等到收到一个新的帧起始 (SOF) 信号后才被发送。如果 ISO 输入端点在 收到 SOF 之前收到一个 IN 令牌, USB0 将发送一个长度为零的数据包。当 ISOUP = 1 时,所有 ISO 端点 的 ISO 更新功能都被使能。 USB 使能:在上电复位(POR)后 USB0 被禁止。通过清除 USBINH 位 (POWER.4) 来使能 USB0。USBINH 一旦被写入 0,则只能在发生下列事件之一时被置 1:1) 上电复位 (POR),2) 向 USBRST 位 (POWER.3) 位 写 1 导致的异步 USB0 复位。 软件应在使能 USB0 之前执行所有的 USB0 配置。建议的配置步骤如下: 1. 2. 3. 4. 5. 选择并使能 USB 时钟源。 通过向 USBRST 位写 1 来复位 USB0。 配置并使能 USB 收发器。 执行任何 USB0 功能配置 (中断、挂起检测)。 通过向 USBINH 位写 0 来使能 USB0。 ??? 1.4 184 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.8. POWER:USB0 电源控制寄存器 位 7 名称 ISOUD 类型 R/W R/W 复位 0 0 6 5 4 3 2 1 0 USBINH USBRST RESUME SUSMD SUSEN R/W R/W R/W R/W R R/W 0 0 0 0 0 0 USB 寄存器地址 = 0x01 位 名称 7 ISOUD 功 能 ISO 更新位。 该位影响所有 IN 等时端点。 0:当软件向 INPRDY 写 1 时, USB0 在收到下一个 IN 令牌后发送数据包。 1:当软件向 INPRDY 写 1 时, USB0 等待 SOF 令牌,然后发送数据包。如果在 SOF 令 牌之前收到 IN 令牌,则 USB0 将发送长度为 0 的数据包。 6:5 4 未使用 读 = 00b。写 = 忽略。 USBINH USB0 禁止位。 该位在发生上电复位 (POR) 或异步 USB0 复位后被置 1。软件应在完成所有 USB0 和收 发器的初始化后将该位清 0。软件不能将该位置 1。 0:使能 USB。 1:禁止 USB。所有 USB 通信都被忽略。 读: 0:总线上未检测到复位信号。 1:总线上检测到复位信号。 写: 向该位写 1 强制产生异步 USB0 复位。 3 USBRST 复位检测。 2 RESUME 强制恢复。 在挂起方式 (SUSMD = 1) 向该位写 1 将强制 USB0 在总线上产生恢复信号 (一个远程唤 醒事件)。软件应在 10 ~ 15ms 后向 RESUME 位写 0,以结束恢复信号。软件向 RESUME 位写 0 后将产生中断,并且硬件将 SUSMD 清 0。 1 SUSMD 挂起方式。 当 USB0 进入挂起方式时,该位被硬件置 1。当软件向 RESUME 位写 0 (后面跟随一次 远程唤醒)或在检测到总线上的恢复信号后读 CMINT 寄存器时硬件将该位清 0。 0:USB0 不处于挂起模式。 1:USB0 处于挂起模式。 0 SUSEN 挂起检测使能。 0:禁止挂起检测。 USB0 将忽略总线上的挂起信号。 1:使能挂起检测。如果检测到总线上的挂起信号,则 USB0 进入挂起方式。 185 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.9. FRAMEL:USB0 帧号低字节 位 7 6 5 4 3 名称 FRMEL[7:0] 类型 R 0 复位 0 0 0 0 2 1 0 0 0 0 2 1 0 USB 寄存器地址 = 0x0C 位 功能 名称 7:0 FRMEL[7:0] 帧号低字节位。 该寄存器包含最后接收帧号的位 7-0。 USB SFR 定义 21.10. FRAMEH:USB0 帧号高字节 位 7 6 5 4 3 FRMEH[2:0] 名称 类型 R R R R R 复位 0 0 0 0 0 R 0 0 0 USB 寄存器地址 = 0x0D 位 功能 名称 未使用 读 = 00000b。写 = 忽略。 2:0 FRMEH[2:0] 帧号高字节位。 该寄存器包含最后接收帧号的位 10-8。 7:3 21.8. 中断 USB0 的中断标志(只读)位于 USB 寄存器定义 21.11~ USB 寄存器定义 21.13 所示的 USB 寄存器中。相 应的中断使能位位于 USB 寄存器定义 21.14 ~ USB 寄存器定义 21.16 所示的 USB 寄存器中。当这些 USB 中断标志中的任何一个被置 1 时,就会产生 USB0 中断。USB0 中断通过特殊功能寄存器 EIE1 来使能(见 第 118 页 16. 节 “ 中断系统 ” )。 注意:读一个中断标志寄存器将使该寄存器中的所有标志位清 0。 ??? 1.4 186 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.11. IN1INT:USB0 输入端点中断寄存器 位 7 6 5 4 名称 3 2 1 0 IN3 IN2 IN1 EP0 类型 R R R R R R R R 复位 0 0 0 0 0 0 0 0 USB 寄存器 = 0x02 位 名称 7:4 未使用 IN3 3 功 能 读 = 0000b。写 = 忽略。 IN 端点 3 中断标志。 该位在软件读 IN1INT 寄存器后被清 0。 0:IN 端点 3 中断无效。 1:IN 端点 3 中断有效。 2 IN2 IN 端点 2 中断标志。 该位在软件读 IN1INT 寄存器后被清 0。 0:IN 端点 2 中断无效。 1:IN 端点 2 中断有效。 1 IN1 IN 端点 1 中断标志。 该位在软件读 IN1INT 寄存器后被清 0。 0:IN 端点 1 中断无效。 1:IN 端点 1 中断有效。 0 EP0 端点 0 中断标志。 该位在软件读 IN1INT 寄存器后被清 0。 0:端点 0 中断无效。 1:端点 0 中断有效。 187 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.12. OUT1INT:USB0 输出端点中断寄存器 位 7 6 5 4 名称 3 2 1 OUT3 OUT2 OUT1 0 类型 R R R R R R R R 复位 0 0 0 0 0 0 0 0 USB 寄存器地址 = 0x04 位 名称 7:4 未使用 OUT3 3 功能 读 = 0000b。写 = 忽略。 OUT 端点 3 中断标志。 该位在软件读 OUT1INT 寄存器后被清 0。 0:OUT 端点 3 中断无效。 1:OUT 端点 3 中断有效。 2 OUT2 OUT 端点 2 中断标志。 该位在软件读 OUT1INT 寄存器后被清 0。 0:OUT 端点 2 中断无效。 1:OUT 端点 2 中断有效。 1 OUT1 OUT 端点 1 中断标志。 该位在软件读 OUT1INT 寄存器后被清 0。 0:OUT 端点 1 中断无效。 1:OUT 端点 1 中断有效。 0 未使用 读 = 0b。写 = 忽略。 ??? 1.4 188 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.13. CMINT:USB0 公共中断寄存器 位 7 6 5 4 名称 3 2 1 0 SOF RSTINT RSUINT SUSINT 类型 R R R R R R R R 复位 0 0 0 0 0 0 0 0 USB 寄存器地址 = 0x06 位 名称 7:4 未使用 SOF 3 功能 读 = 0000b。写 = 忽略。 帧起始中断标志。 该位在收到 SOF 令牌时被硬件置 1。该中断事件由硬件综合产生:当硬件期望收到一 个 SOF 事件时,就会产生中断,即使实际的 SOF 信号丢失或损坏。 该位在软件读 CMINT 寄存器后被清 0。 0:帧起始中断无效。 1:帧起始中断有效。 2 RSTINT 复位中断标志。 当总线上检测到复位信号时该位被硬件置 1。 该位在软件读 CMINT 寄存器后被清 0。 0:复位中断无效。 1:复位中断有效。 1 RSUINT 恢复中断标志。 在 USB0 处于挂起方式期间,当总线上检测到恢复信号时该位被硬件置 1。 该位在软件读 CMINT 寄存器后被清 0。 0:恢复中断无效。 1:恢复中断有效。 0 189 SUSINT 挂起中断标志。 在挂起检测被使能的情况下 (寄存器 POWER 中的 SUSEN 位),当总线上检测到挂 起信号时该位被硬件置 1。 该位在软件读 CMINT 寄存器后被清 0。 0:挂起中断无效。 1:挂起中断有效。 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.14. IN1IE:USB0 输入端点中断允许寄存器 位 7 6 5 4 名称 3 2 1 0 IN3E IN2E IN1E EP0E 类型 R R R R R/W R/W R/W R/W 复位 0 0 0 0 1 1 1 1 USB 寄存器地址 = 0x07 位 名称 7:4 未使用 IN3E 3 功能 读 = 0000b。写 = 忽略。 IN 端点 3 中断使能。 0:禁止 IN 端点 3 中断。 1:允许 IN 端点 3 中断。 2 IN2E IN 端点 2 中断使能。 0:禁止 IN 端点 2 中断。 1:允许 IN 端点 2 中断。 1 IN1E IN 端点 1 中断使能。 0:禁止 IN 端点 1 中断。 1:允许 IN 端点 1 中断。 0 EP0E 端点 0 中断使能。 0:禁止端点 0 中断。 1:允许端点 0 中断。 ??? 1.4 190 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.15. OUTIE:USB0 输出端点中断允许寄存器 位 7 6 5 4 名称 3 2 1 OUT3E OUT2E OUT1E 0 类型 R R R R R/W R/W R/W R 复位 0 0 0 0 1 1 1 0 USB 寄存器地址 = 0x09 位 名称 7:4 未使用 OUT3E 3 功 能 读 = 0000b。写 = 忽略。 OUT 端点 3 中断使能。 0:禁止 OUT 端点 3 中断。 1:允许 OUT 端点 3 中断。 2 OUT2E OUT 端点 2 中断使能。 0:禁止 OUT 端点 2 中断。 1:允许 OUT 端点 2 中断。 1 OUT1E OUT 端点 1 中断使能。 0:禁止 OUT 端点 1 中断。 1:允许 OUT 端点 1 中断。 0 191 未使用 读 = 0b。写 = 忽略。 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.16. CMIE:USB0 公共中断允许寄存器 位 7 6 5 4 名称 3 2 1 0 SOFE RSTINTE RSUINTE SUSINTE 类型 R R R R R/W R/W R/W R/W 复位 0 0 0 0 0 1 1 0 USB 寄存器地址 = 0x0B 位 名称 7:4 未使用 SOFE 3 功能 读 = 0000b。写 = 忽略。 帧起始中断使能。 0:禁止帧起始中断。 1:允许帧起始中断。 2 RSTINTE 1 RSUINTE 0 SUSINTE 复位中断使能。 0:禁止复位中断。 1:允许复位中断。 恢复中断标志。 0:禁止恢复中断。 1:允许恢复中断。 起中断标志。 0:禁止挂起中断。 1:允许挂起中断。 ??? 1.4 192 C8051F380/1/2/3/4/5/6/7/C 21.9. 串行接口引擎 串行接口引擎 (SIE) 执行所有低层 USB 协议,在数据被成功发送或接收后中断处理器。当接收数据时,SIE 在接收完一个完整的数据包后中断处理器;相应的握手信号由 SIE 自动产生。当发送数据时,SIE 在发送完 一个完整的数据包并且收到正确的握手信号后中断处理器。 当收到损坏 / 错误的数据包时, SIE 不中断处理器。 21.10. 端口 0 通过 USB 寄存器 E0CSR (见 USB 寄存器定义 21.18)管理端点 0。访问 E0CSR 寄存器时, INDEX 寄存 器必须被装入 0x00 值。 当发生下列情况时产生端点 0 中断: 1. 当收到一个数据包 (OUT 或 SETUP)并将其装入端点 0 的 FIFO 时。 OPRDY 位 (E0CSR.0) 被硬件 置 1。 2. 当一个 IN 数据包从端点 0 的 FIFO 成功卸载并发送到主机时。 INPRDY 位被硬件清 0。 3. 一次 IN 事务结束 (该中断在 IN 事务的状态阶段产生)。 4. 在控制传输因违反协议而结束后,硬件将 STSTL 位 (E0CSR.2) 置 1。 5. 因控制传输在固件置 ‘1’DATAEND 位 (E0CSR.3) 之前结束,导致硬件将 SUEND 位 (E0CSR.4) 置 1。 E0CNT 寄存器 (见 USB 寄存器定义 21.11)保持端点 0 FIFO 中的接收数据字节数。 硬件将自动检测协议错误并发送 STALL 条件作为应答。固件可以强制产生一个 STALL 条件以放弃当前的传 输。当产生 STALL 条件时, STSTL 位被置 1 并产生中断。下述情况会导致硬件产生 STALL 条件。 1. 2. 3. 4. 当 DATAEND 位被置 1 后,主机在 OUT 数据阶段发送一个 OUT 令牌。 当 DATAEND 位被置 1 后,主机在 IN 数据阶段发送一个 IN 令牌。 主机发送一个超过端点 0 最大数据包大小的数据包。 主机在一次 IN 事务的状态段发送一个非零长度的 DATA1 数据包。 固件将 SDSTL 位 (E0CSR.5) 置 1。 21.10.1. 端点 0 SETUP 事务 所有控制传输都必须从一个 SETUP 包开始。SETUP 包与 OUT 包类似,包含一个由主机发送的 8 字节数据 域。包含一个非 8 字节命令域的任何 SETUP 包都会被 USB0 自动丢弃。当 SETUP 包的数据被装入到端点 0 FIFO 时会产生端点 0 中断。软件应从端点 0 FIFO 卸载命令,对命令译码,执行所要求的任务,并将 SOPRDY 位置 1 以指示执行完 OUT 包服务。 21.10.2. 端点 0 IN 事务 当 USB0 收到一个要求发送数据到主机的 SETUP 请求时,主机会发送一个或多个 IN 请求。对于第一个 IN 事务,固件应将一个 IN 数据包装入到端点 0 FIFO 并将 INPRDY 位 (E0CSR.1) 置 1。 IN 数据包被成功发送 后会产生中断。注意:如果在固件将一个数据包装入到端点 0 FIFO 之前收到 IN 请求,则不会产生中断。如 果所请求的数据超过了端点 0 最大数据包的大小(已报告给主机),则数据应被分成多个包;除最后一个数 据包外,每个包应为最大数据包长度。如果所请求的数据是端点 0 最大数据包长度的整数倍,则最后一个数 据包应为零长度包,指示传输结束。固件在将一次传输的最后一个数据包装入端点 0 FIFO 之后,应将 DATAEND 位置 1。 对于特定的控制传输,在收到第一个 IN 令牌后,端点 0 处于发送方式。在该方式,主机应向端点 0 只发送 IN 令牌。在端点 0 处于发送方式时,如果收到一个 SETUP 或 OUT 令牌,则 SUEND 位 (E0CSR.4) 被置 1。 193 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 在发生下列任一事件之前,端点 0 将一直保持在发送方式: 1. USB0 接收一个端点 0 SETUP 或 OUT 令牌。 2. 固件发送一个小于端点 0 最大数据包长度的数据包。 3. 固件发送一个零长度的数据包。 当执行上述的 (2) 和 (3) 时,固件应将 DATAEND 位 (E0CSR.3) 置 1。 如果在 IN FIFO 中没有准备好的数据包 (INPRDY = 0),则 SIE 会发送一个 NAK 作为对 IN 令牌的应答。 21.10.3. 端点 0 OUT 事务 当 USB0 收到一个要求主机发送数据到 USB0 的 SETUP 请求时,主机会发送一个或多个 OUT 请求。当 USB0 成功接收到一个 OUT 数据包时,硬件将 OPRDY 位 (E0CSR.0) 置 1 并产生端点 0 中断。在发生该中 断后,固件应将 OUT 数据包从端点 0 FIFO 卸载并将 SOPRDY 位 (E0CSR.6) 置 1。 如果所请求的数据超过了端点 0 最大数据包长度,则数据将被分成多个包。如果所请求的数据是端点 0 最大 数据包长度的整数倍 (已报告给主机),则主机发送的最后一个数据包应为零长度包,以指示传输结束。 对于特定的控制传输,在收到第一个 OUT 令牌后,端点 0 处于接收方式。在该方式,主机应向端点 0 只发 送 OUT 令牌。在端点 0 处于接收方式时,如果收到一个 SETUP 或 IN 令牌,则 SUEND 位 (E0CSR.4) 被置 1。 在发生下列任一事件之前,端点 0 将一直保持在接收方式: 1. SIE 接收一个 SETUP 或 IN 令牌。 2. 主机发送一个小于端点 0 最大数据包长度的数据包。 3. 主机发送一个零长度的数据包。 当接收到所期望数量的数据时,固件应将 DATAEND 位 (E0CSR.3) 置 1。如果主机在固件将 DATAEND 位 置 1 之后发送一个 OUT 包,则 SIE 将发送一个 STALL 条件。在 STALL 条件被发送后,STSTL 位 (E0CSR.2) 被置 1 并产生端点 0 中断。 ??? 1.4 194 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.17. E0CSR:USB0 端点 0 控制寄存器 位 7 6 5 4 3 2 1 0 名称 SSUEND SOPRDY SDSTL SUEND DATAEND STSTL INPRDY OPRDY 类型 R/W R/W R/W R R/W R/W R/W R 复位 0 0 0 0 0 0 0 0 USB 寄存器地址 = 0x11 位 7 6 5 4 3 名称 描述 写 读 写:软件应在处理完 SETUP 结束 读:该位的读出值总是 SSUEND SETUP 结束服务位。 事件 (SUEND) 后将该位置 1。软件 为 0。 向 SSUEND 写 1 后,硬件将 SUEND 位清 0 写:软件应在处理完接收到的端点 读:该位的读出值总是 SOPRDY OPRDY 服务位。 0 数据包后将该位置 1。软件向 为 0。 SOPRDY 写 1 后,硬件将 OPRDY 位清 0。 SDSTL 发送 STALL 位。 软件可以通过向该位写 1 来结束当前的数据传输 (因为错误条件、不希望的传输请求 等)。当 STALL 信号被发送后,硬件将该位清 0。 SUEND SETUP 结束标志位。 当一次控制传输在软件向 DATAEND 位写 1 之前结束时,硬件将该只读位置 1。软件向 SSUEND 写 1 后,硬件将该位清 0。 DATAEND 数据结束位。 软件应在下列情况向该位写 1: 1. 当发送最后一个数据包后固件向 INPRDY 写 1 时。 2. 当发送一个零长度数据包后固件向 INPRDY 写 1 时。 3. 当接收完最后一个数据包后固件向 SOPRDY 写 1 时。 该位被硬件自动清 0。 2 STSTL STALL 已发送位。 发送 STALL 握手信号后,硬件将该位置 1。该位必须用软件清 0。 1 INPRDY 输入 (IN) 数据包准备好位。 软件应在将一个要发送的数据包装入端点 0 FIFO 后向该位写 1。在发生下列条件之一时 硬件将该位清 0 并产生中断。 1. 数据包已发送。 2. 数据包被一个进入的 SETUP 包覆盖。 3. 数据包被一个进入的 OUT 包覆盖。 0 OPRDY 输出 (OUT) 数据包准备好位。 当收到一个数据包时,硬件将该只读位置 1 并产生中断。软件向 SOPRDY 位写 1 时该 位被清 0。 195 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.18. E0CNT:USB0 端点 0 数据计数寄存器 位 7 6 5 4 3 2 1 0 0 0 0 E0CNT[6:0] 名称 类型 R 复位 0 R 0 0 0 0 USB 寄存器地址 = 0x16 位 功能 名称 未使用 读 = 0b。写 = 忽略。 6:0 E0CNT[6:0] 端点 0 数据计数。 7 该 7 位值指示端点 0 FIFO 中接收的数据字节数。该值只在 OPRDY 位为 1 期间有效。 21.11. 端点 1-3 配置 对端点 1~3 的配置和控制是通过它们各自的一组控制 / 状态寄存器来实现的,这些寄存器是:IN 寄存器 EINCSRL、EINCSRH 和 OUT 寄存器 EOUTCSRL、EOUTCSRH。在某一时刻只能有一组端点控制 / 状态 寄存器被映射到 USB 寄存器地址空间,由 INDEX 寄存器定义 (见 USB 寄存器定义 21.4)。 如第 21.5.1 章所述,端点 1~3 可以被配置为 IN、OUT 或 IN/OUT (分割方式)。由寄存器 EINCSRH 中的 SPLIT 位选择端点方式 (分割方式 / 正常方式)。 当 SPLIT = 1 时,相应的端点 FIFO 被分割成两部分, IN 和 OUT 管道都可用。 当 SPLIT = 0 时,相应的端点功能只能为 IN 或 OUT 中的一个,端点方向由寄存器 EINCSRH 中的 DIRSEL 位选择。 通过写 ENABLE 寄存器中的相应位,可以单个禁止端点 1~3。当一个端点被禁止时,它不能响应总线通信 或冻结总线。缺省状态下所有端点都被使能。 ??? 1.4 196 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.19. EENABLE:USB0 端点使能寄存器 位 7 6 5 4 名称 3 2 1 EEN3 EEN2 EEN1 0 类型 R R R R R/W R/W R/W R/W 复位 1 1 1 1 1 1 1 1 USB 寄存器地址 = 0x1E 位 名称 7:4 未使用 EEN3 3 功能 读 = 1111b。写 = 忽略。 端点 3 使能。 该位使能 / 禁止端点 3。 0:禁止端点 3 (不在 USB 网络上出现 NACK、 ACK 或 STALL)。 1:使能端点 3 (正常)。 2 EEN2 端点 2 使能。 该位使能 / 禁止端点 2。 0:禁止端点 2 (不在 USB 网络上出现 NACK、 ACK 或 STALL)。 1:使能端点 2 (正常)。 1 EEN1 端点 1 使能。 该位使能 / 禁止端点 1。 0:禁止端点 1 (不在 USB 网络上出现 NACK、 ACK 或 STALL)。 1:使能端点 1 (正常)。 0 保留 必须写 1b。 21.12. 端点 1~3 输入 (IN) 控制 对端点 1~3 输入 (IN) 的管理是通过 USB 寄存器 EINCSRL 和 EINCSRH 来实现的。所有 IN 端点都可以被用 于中断、批量或等时传输。通过向寄存器 EINCSRH 中的 ISO 位写 1 来使能等时 (ISO) 方式。硬件对批量和 中断传输的控制与此完全相同。 在发生下述条件之一时,会产生端点 1~3 输入 (IN) 中断: 1. 一个 IN 数据包被成功传送到主机。 2. 目标 FIFO 未空,而软件向 FLUSH 位 (EINCSRL.3) 写 1。 3. 硬件产生一个 STALL 条件。 21.12.1. 端点 1~3 输入 (IN) 中断或批量方式 当 ISO 位 (EINCSRH.6) = 0 时,目标端点工作在批量或中断方式。一旦一个端点被配置为批量 / 中断 IN 方 式 (通常在端点 0 的 SET_INTERFACE 命令之后),固件应将一个 IN 数据包装入端点的 IN FIFO 并将 INPRDY 位(EINCSRL.0)位置 1。在收到一个 IN 令牌后,硬件将发送数据,清除 INPRDY 位,并产生中断。 在没有向端点 FIFO 写任何数据的情况下向 INPRDY 写 1 会导致在收到下一个 IN 令牌时发送一个零长度的 数据包。 197 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 可以通过向 SDSTL 位 (EINCSRL.4) 写 1 来停止批量或中断管道。当 SDSTL = 1 时,硬件对所有的 IN 请求 都以 STALL 条件回应。每当硬件产生一个 STALL 条件时,会产生一个中断,且 STSTL 位 (EINCSRL.5) 被 置 1。 STSTL 位必须用固件清 0。 当端点 FIFO 中有一个打开的数据包时隙 (slot) 时,硬件自动将 INPRDY 位清 0。注意:如果目标端点被使 能为双缓冲模式,则固件可能在同一时间向 IN FIFO 装入两个数据包。在这种情况下,在固件将第一个数据 包装入 FIFO 并将 INPRDY 位置 1 后,硬件会立即清 ‘0’INPRDY 位。在这种情况下没有中断产生,只在数 据包已被发送时产生中断。 当固件向 FCDT 位 (EINCSRH.3) 写 1 时,每个 IN 数据包的数据切换 (toggle) 会不停地进行,与从主机接收 到的握手信号无关。该特性一般在中断端点中使用,为等时端点提供速率反馈通信。当 FCDT= 0 时,数据 切换 (toggle) 位只在主机发送了 ACK (对一个 IN 数据包应答)后被切换。 21.12.2. 端点 1~3 输入 (IN) 等时方式 当 ISO 位 (EINCSRH.6)被置 1 时,目标端点工作在等时 (ISO) 方式。一旦一个端点被配置为 ISO 输入 (IN) 方式,主机将在每帧都发送一个 IN 令牌(数据请求);数据在每帧中的位置可以不同。因此建议将 ISO IN 端点使能为双缓冲方式。 当端点 FIFO 中有一个打开的数据包时隙 (slot) 时,硬件自动将 INPRDY 位 (EINCSRL.0) 清 0。注意:如果 目标端点被使能为双缓冲模式,则固件可能在同一时间向 IN FIFO 装入两个数据包。在这种情况下,在固件 将第一个数据包装入 FIFO 并将 INPRDY 位置 1 后,硬件会立即清 ‘0’INPRDY 位。在这种情况下没有中断 产生,只在数据包已被发送时产生中断。 如果在 USB0 从主机接收到一个 IN 令牌时,在端点 FIFO 中没有已准备好的数据包,则 USB0 会发送一个 零长度的数据包并将 UNDRUN 位 (EINCSRL.2) 置 1。 ISO 更新功能(见第 21.7 章)在开始一个双缓冲的 ISO IN 端点时可能有用。如果在固件向端点 FIFO 写第 一个数据包时主机已经建立了 ISO IN 管道 (已经开始发送 IN 令牌),则在固件向 FIFO 写完第二个 (双缓 冲)数据包之前,下一个 IN 令牌可能到达,第一个数据包已经发送。ISO 更新功能保证写到端点 FIFO 中的 任何数据包不在当前帧发送,只在接收到 SOF 信号后发送该数据包。 ??? 1.4 198 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.20. EINCSRL:USB0 IN 端点控制寄存器低字节 位 7 名称 6 5 4 3 2 1 0 CLRDT STSTL SDSTL FLUSH UNDRUN FIFONE INPRDY 类型 R W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 USB 寄存器地址 = 0x11 位 7 名称 描述 读 = 0b,写 = 忽略。 6 未使用 CLRDT 5 STSTL STALL 已发送位。 清除数据切换位。 写 读 写:软件向该位置 1 将 IN 端 读:该位的读出值总是为 0。 点的数据切换位清 0。 当 STALL 握手信号被发送后,硬件将该位置 1。 FIFO 被清空, INPRDY 位被清 0。该标 志必须用软件清 0。 4 SDSTL 发送 STALL 位。 软件应向该位写 1 以产生 STALL 信号作为对一个 IN 令牌的应答。软件应向该位写 0 以 结束 STALL 信号。该位对 ISO 方式没有影响。 3 FLUSH FIFO 清空位。 向该位写 1 将从 IN 端点 FIFO 中清除待发送的下一个数据包。 FIFO 指针被复位, INPRDY 位被清 0。如果 FIFO 中包含多个数据包,软件必须对每个数据包向 FLUSH 写 1。当 FIFO 清空完成后,硬件将 FLUSH 位清 0。 2 1 UNDRUN 数据欠载位。 该位的功能取决于 IN 端点的方式: ISO:在 INPRDY = 0 并且收到一个 IN 令牌后发送了一个零长度数据包时,该位被置 1。 中断 / 批量:在对 IN 令牌回应时返回 NAK,则该位被置 1。 该位必须用软件清 0。 FIFONE FIFO 非空。 0:IN 端点 FIFO 为空。 1:IN 端点 FIFO 包含一个或多个数据包。 0 INPRDY IN 数据包准备好。 软件应在将一个数据包装入 IN 端点 FIFO 后向该位写 1。在发生下列条件之一时硬件将该 位清 0。 1. 数据包已发送。 2. 双缓冲被使能 (DBIEN = 1) 且有一个打开的 FIFO 数据包时隙。 3. 如果端点处于等时方式 (ISO = 1) 并且 ISOUD = 1,在收到下一个 SOF 之前 INPRDY 的读出值为 0。 注: 199 当硬件因发送数据包而将 INPRDY 清 0 时会产生中断 (如果被允许)。 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.21. EINCSRH:USB0 IN 端点控制寄存器高字节 位 7 6 5 名称 DBIEN ISO DIRSEL 类型 R/W R/W R/W 复位 0 0 0 4 3 2 1 0 FCDT SPLIT R R/W R/W R R 0 0 0 0 0 USB 寄存器地址 = 0x12 功能 位 名称 7 DBIEN 6 ISO 5 DIRSEL 4 读 = 0b,写 = 忽略。 3 未使用 FCDT 2 SPLIT FIFO 分割使能。 IN 端点双缓冲使能。 0:禁止所选 IN 端点的双缓冲功能。 1:使能所选 IN 端点的双缓冲功能。 等时传输使能。 该位使能 / 禁止在当前端点进行等时传输 0:端点被配置为批量 / 中断传输。 1:端点被配置为等时传输。 端点方向选择。 该位只在所选 FIFO 为不分割方式 (SPLIT = 0) 时有效。 0:选择端点方向为 OUT。 1:选择端点方向为 IN。 强制数据切换位。 0:端点数据切换只在发送完一个数据包后收到 ACK 时切换。 1:端点数据切换在每发送完一个数据包后被强制切换,不管是否收到 ACK。 当 SPLIT = 1 时,所选端点的 FIFO 被分割。所选 FIFO 的高半部分为 IN 端点使用,所 选 FIFO 的低半部分为 OUT 端点使用。 1:0 未使用 读 = 00b,写 = 忽略。 ??? 1.4 200 C8051F380/1/2/3/4/5/6/7/C 21.13. 端点 1~3 输出 (OUT) 控制 对端点 1~3 输出 (OUT) 的管理是通过 USB 寄存器 EOUTCSRL 和 EOUTCSRH 来实现的。所有 OUT 端点 都可以用于中断、批量或等时传输。通过向寄存器 EOUTCSRH 中的 ISO 位写 1 来使能等时 (ISO) 方式。硬 件对批量和中断传输的控制与此完全相同。 在发生下述条件之一时,会产生端点 1~3 输出 (OUT) 中断: 1. 硬件将 OPRDY 位 (EOUTCSRL.0) 置 1。 2. 硬件产生一个 STALL 条件。 21.13.1. 端点 1~3 输出 (OUT) 中断或批量方式 当 ISO 位 (EOUTCSRH.6)= 0 时,目标端点工作在批量或中断方式。一旦一个端点被配置为批量 / 中断输出 (OUT) 方式(通常在端点 0 的 SET_INTERFACE 命令之后),硬件将 OPRDY 位 (EOUTCSRL.0) 位置 1 并 在收到一个 OUT 令牌和数据包后产生中断。当前 OUT 数据包(已准备好从 FIFO 卸载的数据包)中的字节 数由寄存器 EOUTCNTH 和 EOUTCNTL 给出。响应该中断时,固件应将数据包从 OUT FIFO 中卸载并将 OPRDY 位清 0。 可以通过向 SDSTL 位 (EOUTCSRL.5) 写 1 来停止批量或中断管道。当 SDSTL = 1 时,硬件对所有的 OUT 请求都以STALL条件回应。每当硬件产生一个STALL条件时,会产生一个中断,且STSTL位(EOUTCSRL.6) 被置 1。 STSTL 位必须用固件清 0。 当 OUT FIFO 中有一个准备好的数据包时,硬件自动将 OPRDY 位置 1。注意:如果目标端点被使能为双缓 冲模式,则 OUT FIFO 中可能同时有两个数据包准备好。在这种情况下,在固件将第一个数据包卸载并将 OPRDY 位清 0 后,硬件会立即将 OPRDY 位置 1。在这种情况下会产生第二个中断。 21.13.2. 端点 1~3 输出 (OUT) 等时方式 当 ISO 位 (EOUTCSRH.6) 被置 1 时,目标端点工作在等时 (ISO) 方式。一旦一个端点被配置为 ISO OUT 方 式,主机将每帧发送一个数据包;但数据包在每帧中的位置可以不同。因此建议将 ISO OUT 端点使能为双 缓冲方式。 每次收到一个数据包时,硬件将接收到的数据包装入端点 FIFO,将 OPRDY 位 (EOUTCSRL.0) 置 1,并产 生中断 (如果被允许)。固件一般用该中断将数据包从端点 FIFO 卸载,并将 OPRDY 位清 0。 如果在端点 FIFO 没有空间的情况下收到一个数据包,则会产生中断,并且 OVRUN 位 (EOUTCSRL.2) 被 置 1。如果 USB0 接收到一个有 CRC 错误的 ISO 数据包,则该数据包被装入端点 FIFO, OPRDY 被置 1, 产生中断 (如果被允许),并且 DATAERR 位 (EOUTCSRL.3) 被置 1。软件应在每次将数据包从 ISO OUT 端点 FIFO 卸载后检查 DATAERR 位。 201 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.22. EOUTCSRL:USB0 OUT 端点控制寄存器低字节 位 7 6 5 4 3 2 1 0 名称 CLRDT STSTL SDSTL FLUSH DATERR OVRUN FIFOFUL OPRDY 类型 W R/W R/W R/W R R/W R R/W 复位 0 0 0 0 0 0 0 0 USB 寄存器地址 = 0x14 位 名称 描述 7 CLRDT 清除数据切换位。 6 STSTL STALL 已发送位。 写 写:软件向该位置 1 将 OUT 端点的数据切换位清 0。 读 读:该位的读出值总是为 0。 当 STALL 握手信号被发送后,硬件将该位置 1。该标志必须用软件清 0。 5 SDSTL 发送 STALL 位。 软件应向该位写 1 以产生 STALL 握手信号。软件应向该位写 0 以结束 STALL 信号。该 位对 ISO 方式没有影响。 4 FLUSH FIFO 清空位。 向该位写 1 将从 OUT 端点 FIFO 中清除下一个数据包。FIFO 指针被复位,OPRDY 位被 清 0。如果 FIFO 中包含多个数据包,软件必须对每个数据包向 FLUSH 写 1。当 FIFO 清空完成后,硬件将 FLUSH 位清 0。 注: 注:如果当前包的数据已被从 FIFO 中读出,则不应用 FLUSH 位清空该包。而是应当手动 读取整个包。 3 DATERR 数据错误位。 在 ISO 方式,如果接收到的数据包有 CRC 或位填充错误,该位被硬件置 1。当软件清除 OPRDY 时,该位被清 0。该位只在 ISO 方式有效。 2 OVRUN 数据溢出位。 当一个输入数据包不能被装入到 OUT 端点 FIFO 时,该位被硬件置 1。该位只在 ISO 方 式有效。该位必须用软件清 0。 0:无数据溢出。 1:自该标志最后一次被清除以来,因 FIFO 已满导致数据包丢失。 1 FIFOFUL OUT FIFO 满。 该位指示 OUT FIFO 的内容。如果端点被使能为双缓冲模式 (DBIEN = 1),当 FIFO 中有 两个数据包时 FIFO 已满。如果 DBIEN = 0,当 FIFO 中有一个数据包时 FIFO 已满。 0:OUT 端点 FIFO 未满。 1:OUT 端点 FIFO 已满。 0 OPRDY 输出 (OUT) 数据包准备好。 当有数据包可用时硬件将该位置 1 并产生中断。软件应在将每个数据包从 OUT 端点 FIFO 卸载后将该位清 0。 ??? 1.4 202 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.23. EOUTCSRH:USB0 OUT 端点控制寄存器高字节 位 7 6 名称 DBOEN ISO 类型 R/W 复位 0 5 4 3 2 1 0 R/W R R R R R R 0 0 0 0 0 0 0 USB 寄存器地址 = 0x15 位 名称 7 DBOEN 功 能 双缓冲使能。 0:禁止所选 OUT 端点的双缓冲功能。 1:使能所选 OUT 端点的双缓冲功能。 6 ISO 5:0 未使用 等时传输使能。 该位使能 / 禁止在当前端点进行等时传输 0:端点被配置为批量 / 中断传输。 1:端点被配置为等时传输。 读 = 000000b,写 = 忽略。 USB SFR 定义 21.24. EOUTCNTL:USB0 OUT 端点计数器寄存器低字节 位 7 6 5 4 名称 EOCL[7:0] 类型 R 复位 0 0 0 0 3 2 1 0 0 0 0 0 USB 寄存器地址 = 0x16 位 功能 名称 7:0 EOCL[7:0] OUT 端点计数器低字节。 EOCL 保持在当前 OUT 端点 FIFO 中的最后一个接收数据包之 10 位数据字节数的低 8 位。该数值只在 OPRDY = 1 时有效。 203 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C USB SFR 定义 21.25. EOUTCNTH:USB0 OUT 端点计数器寄存器高字节 位 7 6 5 4 3 2 1 0 EOCH[1:0] 名称 类型 R R R R R R R R 复位 0 0 0 0 0 0 0 0 USB 寄存器地址 = 0x17 位 名称 功能 未使用 读 = 000000b。写 = 忽略。 1:0 EOCH[1:0] OUT 端点计数器高字节。 EOCH 保持在当前 OUT 端点 FIFO 中的最后一个接收数据包之 10 位数据字节数的高 2 位。该数值只在 OPRDY = 1 时有效。 7:2 ??? 1.4 204 C8051F380/1/2/3/4/5/6/7/C 205 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 22. SMBus0 和 SMBus1 (I2C 兼容 ) SMBus I/O 接口是一个二线的双向串行总线。 SMBus 完全符合系统管理总线规范 1.1 版,并与 I2C 串行总 线兼容。 C8051F380/1/2/3/4/5/6/7/C 器件包含两个 SMBus 接口:SMBus0 和 SMBus1。 系统控制器对接口的读出操作都是以字节为单位的,由 SMBus 接口自动控制数据的串行传输。在作为主或从 器件时,数据传输的最大速率可达系统时钟频率的二十分之一 (这可能比 SMBus 接口自动控制数据的串行 传输。在作为主或从器件时,数据传输的最大速率可达系统时钟频率的二十分之一 (这可能比 SMBus 的规 定速度要快,取决于所使用的系统时钟)。可以采用延长低电平时间的方法协调同一总线上不同速度的器件。 SMBus 可以工作在主和 / 或从方式,可以在一个多主总线工作。 SMBus 提供了 SDA (串行数据)控制、 SCL (串行时钟)产生和同步、仲裁逻辑以及起始 / 停止的控制和产生电路。 SMBus 外设可以完全由软件 驱动 (即软件接受 / 拒绝从地址和产生 ACK),或者被使能为由硬件识别从地址和自动产生 ACK 以减小软 件开销。SMBus0 外设的原理框图和相关的 SFR 示于图 22.1。除了用于时钟源的定时器以及实现 SCL 低电 平超时功能所用的定时器不同外, SMBus1 与 SMBus0 完全相同。更详细的信息见具体的 SFR 定义。 SMB0CN MT S S A A A S A X T T C R C I SMA O K B K T O R L E D QO R E S T SMB0CF E I B E S S S N N U XMMM S H S T B B B M Y H T F C B OO T S L E E 1 D SMBUS 控制逻辑 总线仲裁 SCL 同步 SCL 产生 (主方式) SDA 控制 硬件从地址识别 硬件ACK产生 IRQ 产生 中断请求 S M B C S 0 00 T0 溢出 01 10 T1 溢出 (SMBus0) , T5 溢出 (SMBus1) TMR2H 溢出 11 TMR2L 溢出 SCL 控制 数据通路 控制 S L V 5 S L V 4 S L V 3 S L V 2 S L V 1 SMB0ADR SG L C V 0 S S S L L L V V V MMM 6 5 4 S S S S L L L L V V V V MMMM 3 2 1 0 N 交 叉 开 关 SDA 控制 SMB0DAT 7 6 5 4 3 2 1 0 S L V 6 SCL 滤波器 端口 I/O SDA 滤波器 E H A C K SMB0ADM N 图 22.1. SMBus 原理框图 ??? 1.4 205 C8051F380/1/2/3/4/5/6/7/C 22.1. 支持文档 假设读者熟悉或有条件阅读下列支持文档: 1. I2C 总线及其使用 (包含规范),飞利浦半导体。 2. I2C 总线规范 —2.0 版,飞利浦半导体。 3. 系统管理总线规范 —1.1 版, SBS 实施者论坛 (SBS implementers forum)。 22.2. SMBus 配置 图 22.2 给出了一个典型的 SMBus 配置。SMBus 规范允许的隐性状态电压可以在 3.0V 和 5.0V 之间,总线 上不同器件的工作电压可以不同。 SCL (串行时钟)和 SDA (串行数据)线是双向的,必须通过一个上拉 电阻或等效电路将它们连到正电源电压。连接在总线上的每个器件的 SCL 和 SDA 都必须是漏极开路或集电 极开路输出,因此当总线空闲时,这两条线都被拉到高电平 (隐性状态)。总线上的最大器件数只受所需上 升和下降时间的限制,上升和下降时间分别不能超过 300ns 和 1000ns。 VDD = 5V VDD = 3V VDD = 5V VDD = 3V 主器件 从器件1 从器件2 SDA SCL 图 22.2. 典型的 SMBus 配置 22.3. SMBus 操作 有两种可能的数据传输类型:从主发送器到所寻址的从接收器 (写)和从被寻址的从发送器到主接收器 (读)。这两种数据传输都由主器件启动,主器件还在 SCL 上提供串行时钟。 SMBus 接口可以工作在主方 式或从方式,同一总线上可以有多个主器件。如果两个或多个主器件同时启动数据传输,仲裁机制将保证有 一个主器件会赢得总线。注意:没有必要在一个系统中指定某个器件作为主器件;任何一个发送起始条件 (START) 和从器件地址的器件就成为该次数据传输的主器件。 一次典型的 SMBus 数据传输包括一个起始条件 (START)、一个地址字节(位 7-1:7 位从地址;位 0:R/W 方向位)、一个或多个字节的数据和一个停止条件 (STOP)。每个接收的字节 (由一个主器件或从器件)都 必须用 SCL 高电平期间的 SDA 低电平 (见图 22.3)来确认 (ACK)。如果接收器件不确认,则发送器件将 读到一个 “ 非确认 ”(NACK),这用 SCL 高电平期间的 SDA 高电平表示。 方向位 (R/W) 占据地址字节的最低位。方向位被设置为逻辑 1 表示这是一个 “ 读 ”(READ) 操作,方向位为逻 辑 0 表示这是一个 “ 写 ”(WRITE) 操作。 206 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 所有的数据传输都由主器件启动,可以有一个或多个被寻址的从器件作为目标。主器件产生一个起始条件, 然后发送从地址和方向位。如果本次数据传输事务是一个从主器件到从器件的写操作,则主器件每发送一个 数据字节后等待来自从器件的确认。如果是一个读操作,则由从器件发送数据并在每个字节结束后等待主器 件的确认。在数据传输结束时,主器件产生一个停止条件,结束本次数据传输事务并释放总线。图 22.3 示 出了一次典型的 SMBus 数据传输事务过程。 SCL SD A SLA 6 START SLA 5-0 从地址 + R/W R/W D7 AC K D 6 -0 数 据字节 N AC K STOP 图 22.3. SMBus 数据传输 22.3.1. 发送器与接收器 在 SMBus 通信接口中,发送器是指正在总线上发送一个地址或数据字节到其它器件的器件,而接收器是指 总线上的另一器件正在向它发送一个地址或数据字节。发送器在传输地址或数据字节期间控制 SDA 线。在 发送器每发送完一个地址或数据信息字节之后,接收器在本次传送的 ACK 阶段发送一个 ACK 或 NACK 位, 在此期间接收器控制 SDA 线。 22.3.2. 总线仲裁 一个主器件只能在总线空闲时启动一次传输。在一个停止条件之后或 SCL 和 SDA 保持高电平已经超过了规 定时间 (见第 208 页 22.3.5. 节 “SCL 高电平 (SMBus 空闲 ) 超时 ” 时,总线是空闲的。在两个或多个器件 试图同时开始传送的情况下,使用仲裁机制迫使一个主器件放弃总线。这些主器件继续发送起始条件,直到 其中一个主器件发送高电平而其它主器件发送低电平。由于总线是漏极开路的,因此被拉为低电平。试图发 送高电平的主器件将检测到 SDA 上的低电平而退出竞争。赢得总线的主器件继续其数据传输过程;而未赢 得总线的器件成为从器件,如果被寻址,则在剩下的传输过程中接收数据。该仲裁机制是非破坏性的:总会 有一个器件赢得总线,不会发生数据丢失。 22.3.3. 时钟低电平扩展 SMBus 提供一种与 I2C 类似的时钟同步机制,允许不同速度的器件共存于同一个总线上。为了使低速从器 件能与高速主器件通信,在传输期间采取低电平扩展。从器件可以临时保持 SCL 线为低电平以扩展时钟低 电平时间,这实际上相当于降低了串行时钟频率。 22.3.4. SCL 低电平超时 如果 SCL 线被总线上的从器件保持为低电平,则不能再进行通信,并且主器件也不能通过强制 SCL 变为高 电平来纠正这种错误情况。为了解决这一问题, SMBus 协议规定:参加一次数据传输的器件必须检查时钟 低电平时间,若超过 25ms 则认为是 “ 超时 ”。检测到超时条件的器件必须在 10ms 以内对通信复位。 对于 SMBus0 接口,定时器 3 用于实现 SCL 低电平超时;对于 SMBus1 接口,定时器 4 用于实现 SCL 低 电平超时。当 SMBnCF 中的 SMBnTOE 位被置 1 时, SCL 低电平超时功能被使能。相应的定时器在 SCL 为高电平时被强制重装载,在 SCL 为低电平时开始计数。如果相关定时器被使能并且溢出周期被配置为 25ms(且 SMBnTOE 被置 1),则可在发生 SCL 低电平超时事件时用相应的定时器中断服务程序对 SMBus 复位 (禁止后重新使能)。 ??? 1.4 207 C8051F380/1/2/3/4/5/6/7/C 22.3.5. SCL 高电平 (SMBus 空闲 ) 超时 SMBus 规范规定:如果一个器件保持 SCL 和 SDA 线为高电平的时间超过 50 µs,则认为总线处于空闲状态。 当 SMBnCF 中的 SMBnFTE 位被置 1 时,如果 SCL 和 SDA 保持高电平的时间超过 10 个 SMBus 时钟周期 (由配置为 SMBus 时钟源的定时器定义),总线将被视为空闲。如果一个 SMBus 器件正等待产生一个主起始 条件,则该起始条件将在总线空闲超时之后立即产生。总线空闲超时检测需要一个时钟源,即使对从器件方式 也不例外。 22.4. SMBus 的使用 SMBus 既可以工作在主方式,也可以工作在从方式。SMBus 接口提供串行传输的时序和移位控制;更高层 的协议由用户软件实现。 SMBus 接口提供下述与应用无关的特性: 面向字节的串行数据传输; SCL 时钟信号产生 (仅限主方式)及 SDA 数据同步; 超时 / 总线错误识别 (按照配置寄存器 SMBnCF 中的定义); START/STOP 定时、检测和产生; 总线仲裁; 中断产生; 状态信息; 可选的硬件从地址识别和地址 / 数据的自动确认。 每次数据字节或从地址传输都产生 SMBus 中断。当硬件确认被禁止时,中断产生的时刻取决于硬件正在作 为数据发送者还是作为接收者。当作为发送者时 (即发送地址 / 数据,接收 ACK),中断产生在 ACK 周期 之后,以使软件能读取收到 ACK 的值;当接收数据时 (即接收地址 / 数据,发送 ACK),中断产生在 ACK 周期之前,使软件能确定要发出的 ACK 值。如果硬件确认被使能,这些中断总是产生在 ACK 周期之后。有 关传输时序的详细信息见第 22.5 章。 主器件产生起始条件时也会产生中断,指示数据传输开始;从器件在检测到停止条件时产生中断,指示数据 传输结束。软件应通过读 SMBnCN(SMBus 控制寄存器)来确定 SMBus 中断的原因。SMBnCN 寄存器的 说明见第 22.4.3 章。表 22.5 给出了快速 SMBnCN 译码参考 22.4.1. SMBus 配置寄存器 SMBus 配置寄存器 (SMBnCF) 用于使能 SMBus 主和 / 或从方式,选择 SMBus 时钟源和设置 SMBus 定时 和超时选项。当 ENSMB 位被置 1 时, SMBus 的所有主和从事件都被使能。可以通过将 INH 位置 1 来禁止 从事件。在从事件被禁止的情况下, SMBus 接口仍然监视 SCL 和 SDA 引脚;但在接收到地址时会发出 NACK (非确认)信号,并且不会产生任何从中断。当 INH 被置 1 时,在下一个起始条件 (START) 后所有 的从事件都将被禁止 (当前传输过程的中断将继续)。 208 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 表 22.1. SMBus 时钟源选择 SMBus0 时钟源 SMBus1 时钟源 定时器 0 溢出 定时器 1 溢出 定时器 2 高字节溢出 定时器 2 低字节溢出 定时器 0 溢出 定时器 5 溢出 定时器 2 高字节溢出 定时器 2 低字节溢出 SMBnCS1 SMBnCS0 0 0 1 1 0 1 0 1 SMBCS1-0 位选择 SMBus 时钟源,时钟源只在主方式或空闲超时检测被使能时使用。当 SMBus 接口工作 在主方式时,所选时钟源的溢出周期决定 SCL 低电平和高电平的最小时间,该最小时间由方程 22.1 给出。 SMBus 可以与其它外设共享该时钟源,前提是时钟源定时器一直保持运行状态。例如,定时器 1 溢出可以 同时用于产生 SMBus0 和 SMBus1 时钟频率。有关定时器配置见第 263 页 26. 节 “ 定时器 ” 。 1 T HighMin = T LowMin = -----------------------------------------------------------------f ClockSourceOverflow 方程 22.1. 最小 SCL 高和低电平时间 所选择的时钟源应被配置为能产生由方程 22.1 所定义的最小 SCL 高电平和低电平时间。当接口工作在主方 式时 (并且 SCL 不被总线上的任何其它器件驱动或扩展),典型的 SMBus 位速率可由方程 22.2 估算: f ClockSourceOverflow BitRate = -----------------------------------------------------------------3 方程 22.2. 典型 SMBus 位速率 图 22.4 给出了由方程 22.2 定义的典型 SCL 波形。注意,THIGH 通常为 TLOW 的两倍。实际的 SCL 输出 波形可能会因总线上有其它器件而发生改变 (SCL 可能被低速从器件扩展低电平,或被其它参与竞争的主 器件驱动为低电平)。当工作在主方式时,位速率绝不会超过由方程 22.1 定义的极限值。 定时器源 溢出 SCL TL o w SCL高电平 超时 THig h 图 22.4. 典型的 SMBus SCL 波形 ??? 1.4 209 C8051F380/1/2/3/4/5/6/7/C 设置 EXTHOLD 位为逻辑 1 将扩展 SDA 线的最小建立时间和保持时间。最小 SDA 建立时间定义了在 SCL 上升沿到来之前 SDA 的最小稳定时间。最小 SDA 保持时间定义了在 SCL 下降沿过去之后当前 SDA 值继续 保持稳定的最小时间。 SMBus 规定的最小建立和保持时间分别为 250ns 和 300ns。必要时应将 EXTHOLD 位置 1,以保证最小建立和保持时间符合 SMBus 规范。表 22.2 列出了对应两种 EXTHOLD 设置情况的最小 建立和保持时间。当 SYSCLK 大于 10MHz 时,通常需要扩展建立和保持时间。 表 22.2. 最小 SDA 建立和保持时间 最小 SDA 建立时间 EXTHOLD 最小 SDA 保持时间 Tlow – 4 个系统时钟 注: 0 或 3 个系统时钟 1 1 个系统时钟 + 软件延时 * 3 个系统时钟 12 个系统时钟 发送 ACK 位和所有数据传输中 MSB 的建立时间。当使用软件确认时,软件延时发 生在写 SMB0DAT 或 ACK 到 SI 被清除之间。注意,如果写 ACK 和清除 SI 发生在 同一个写操作,则软件延时为 0。 在 SMBnTOE 位被置 1 的情况下,定时器 3 (SMBus0) 和定时器 5 (SMBus1) 应被配置为在 25ms 后溢出, 以检测 SCL 低电平超时(见第 207 页 22.3.4. 节 “SCL 低电平超时 ” )。SMBus 接口在 SCL 为高电平时强 制重装载相应的定时器,并允许定时器在 SCL 为低电平时开始计数。应使用定时器中断服务程序对 SMBus 通信复位,这可通过先禁止然后再重新使能 SMBus 接口来实现。 通过将 SMBnFTE 位置 1 来使能 SMBus 空闲超时检测。当该位被置 1 时,如果 SCL 和 SDA 保持高电平的 时间超过 10 个 SMBus 时钟周期,总线将被视为空闲 (见图 22.4)。 22.4.2. SMBus 定时控制寄存器 SMBus 定时控制寄存器 (SMBTC) 用于在某些情况下限制对起始条件的检测。在 SDA 和 SCL 线存在严重的 阻抗或电容不匹配的一些系统中,在地址或数据传送期间有可能发生 SCL 下降沿出现在 SDA 之后的情况。 这种事件可能导致检测到总线上的假起始条件。这类事件在一个标准的 SMBus 或 I2C 系统中是不希望发生 的。在大多数系统中,不应调整该参数,建议保持其缺省值。 缺省情况下,如果在 SDA 的下降沿之后 (即一个 SYSCLK 或更多)检测到 SCL 下降沿,则器件会认为检 测到一个起始条件。 SMBTC 寄存器用于增加 SDA 和 SCL 下降沿之间所需要的保持时间,以避免器件识别 出起始条件。可以增加 2、 4 或 8 个 SYSCLK 以防止在这类总线条件的系统中检测到假起始条件。 210 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 22.1. SMB0CF:SMBus 时钟 / 配置寄存器 位 7 6 5 名称 ENSMB0 INH0 BUSY0 类型 R/W R/W R R/W R/W R/W 复位 0 0 0 0 0 0 4 3 2 EXTHOLD0 SMB0TOE SMB0FTE 1 0 SMB0CS[1:0] R/W 0 0 SFR 地址 = 0xC1 ; SFR 页 = 0 位 名称 7 ENSMB0 6 5 4 INH0 功能 SMBus0 使能。 该位被置 1 时使能 SMBus0 接口。当被使能时,接口一直监视 SDA0 和 SCL0 引 脚。 SMBus0 从禁止。 BUSY0 当该位被设置为逻辑 1 时, SMBus0 接口在有从事件发生时不产生中断。这实际上 相当于将 SMBus0 从器件移出总线。主方式中断不受影响。 SMBus0 忙标志。 EXTHOLD0 当正在进行一次传输时,该位由硬件置 1。当检测到停止条件或空闲超时时,该位被 清 0。 SMBus0 建立和保持时间扩展使能。 该位控制 SDA0 的建立和保持时间 (根据表 22.2)。 0:禁止 SDA0 建立和保持时间扩展。 3 2 SMB0TOE 1:允许 SDA0 建立和保持时间扩展。 SMBus0 SCL 超时检测使能。 SMB0FTE 该位使能 SCL 低电平超时检测。当被置 1 时, SMBus0 接口在 SCL0 为高电平时强 制重装载定时器 3,并允许定时器 3 在 SCL0 变为低电平时开始计数。如果定时器 3 被配置为分割方式,则当 SCL0 为高电平时,只有定时器 3 的高字节被重装载。应 将定时器 3 编程为 25ms 后产生中断,并使用定时器 3 中断服务程序对 SMBus0 通 信复位。 SMBus0 空闲超时检测使能。 当该位被置 1 时,如果 SCL0 和 SDA0 保持高电平的时间超过 10 个 SMBus 时钟周 期,总线将被视为空闲。 1:0 SMB0CS[1:0] SMBus0 时钟源选择。 这两位选择用于产生 SMBus0 的时钟源,该时钟源用于产生 SMBus0 位速率。应根 据方程 22.1 配置所选时钟源。 00:定时器 0 溢出。 01:定时器 1 溢出。 10:定时器 2 高字节溢出。 11:定时器 2 低字节溢出。 ??? 1.4 211 C8051F380/1/2/3/4/5/6/7/C SFR 定义 22.2. SMB1CF:SMBus 时钟 / 配置寄存器 位 7 6 5 名称 ENSMB1 INH1 BUSY1 类型 R/W R/W R R/W R/W R/W 复位 0 0 0 0 0 0 4 3 2 EXTHOLD1 SMB1TOE SMB1FTE 1 0 SMB1CS[1:0] R/W 0 0 SFR 地址 = 0xC1 ; SFR 页 = F 位 名称 7 ENSMB1 功能 SMBus1 使能。 该位被置 1 时使能 SMBus1 接口。当被使能时,接口一直监视 SDA1 和 SCL1 引 脚。 6 INH1 SMBus1 从禁止。 当该位被设置为逻辑 1 时, SMBus1 接口在有从事件发生时不产生中断。这实际上 相当于将 SMBus1 从器件移出总线。主方式中断不受影响。 5 BUSY1 SMBus1 忙标志。 当正在进行一次传输时,该位由硬件置 1。当检测到停止条件或空闲超时时,该位被 清 0。 4 EXTHOLD1 SMBus1 建立和保持时间扩展使能。 该位控制 SDA1 的建立和保持时间 (根据表 22.2)。 0:禁止 SDA1 建立和保持时间扩展。 1:允许 SDA1 建立和保持时间扩展。 3 SMB1TOE SMBus1 SCL 超时检测使能。 该位使能 SCL 低电平超时检测。当被置 1 时, SMBus1 接口在 SCL1 为高电平时强 制重装载定时器 4,并允许定时器 4 在 SCL1 变为低电平时开始计数。如果定时器 4 被配置为分割方式,则当 SCL1 为高电平时,只有定时器 4 的高字节被重装载。应 将定时器 4 编程为 25ms 后产生中断,并使用定时器 4 中断服务程序对 SMBus1 通 信复位。 2 SMB1FTE SMBus1 空闲超时检测使能。 当该位被置 1 时,如果 SCL1 和 SDA1 保持高电平的时间超过 10 个 SMBus 时钟周 期,总线将被视为空闲。 1:0 SMB1CS[1:0] SMBus1 时钟源选择。 这两位选择用于产生 SMBus1 的时钟源,该时钟源用于产生 SMBus1 位速率。应根 据方程 22.1 配置所选时钟源。 00:定时器 0 溢出。 01:定时器 5 溢出。 10:定时器 2 高字节溢出。 11:定时器 2 低字节溢出。 212 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 22.3. SMBTC:SMBus 定时控制寄存器 位 7 6 5 4 3 名称 类型 R R R R 复位 0 0 0 0 2 1 0 SMB1SDD[1:0] SMB0SDD[1:0] R/W R/W 0 0 0 0 SFR 地址 = 0xB9 ; SFR 页 = F 位 7:4 3:2 名称 功能 未使用 读 = 0000b ;写 = 忽略。 SMB1SDD[1:0] SMBus1 起始条件检测窗口。 这两位用于增加在起始条件检测时所需要的 SDA1 和 SCL1 下降沿之间的保持时间。 00:不需额外的保持时间 (0 ~ 1 SYSCLK)。 01:增加保持时间窗口到 2 ~ 3 SYSCLK。 10:增加保持时间窗口到 4 ~ 5 SYSCLK。 11:增加保持时间窗口到 8 ~ 9 SYSCLK。 1:0 SMB0SDD[1:0] SMBus0 起始条件检测窗口。 这两位用于增加在起始条件检测时所需要的 SDA0 和 SCL0 下降沿之间的保持时间。 00:不需额外的保持时间 (0 ~ 1 SYSCLK)。 01:增加保持时间窗口到 2 ~ 3 SYSCLK。 10:增加保持时间窗口到 4 ~ 5 SYSCLK。 11:增加保持时间窗口到 8 ~ 9 SYSCLK。 ??? 1.4 213 C8051F380/1/2/3/4/5/6/7/C 22.4.3. SMBus 控制寄存器 SMBnCN SMBus 控制寄存器 SMBnCN 用于控制 SMBus 接口和提供状态信息(见 SFR 定义 22.4)。SMBnCN 中的 高 4 位 (MASTER、 TXMODE、 STA 和 STO)组成一个状态向量,可利用该状态向量转移到中断服务程 序。MASTER 指示在当前传送期间器件工作在主方式还是从方式。TXMODE 指示对于当前字节器件是在发 送数据还是接收数据。 STA 和 STO 指示自上次 SMBus 中断以来检测到或产生了一个起始 (START) 和 / 或停止条件 (STOP)。当 SMBus 工作在主方式时, STA 和 STO 还用于产生起始和停止条件。当总线变成空闲时 (在起始条件产生 后, STA 未被硬件清 0),向 STA 写 1 将使 SMBus 接口进入主方式并产生一个起始条件。在主方式,向 STO 写 1 将使 SMBus 接口产生一个停止条件,并在下一个 ACK 周期后结束当前的数据传输。如果 STA 和 STO 都被置 1 (在主方式),则产生一个停止条件后再产生一个起始条件。 ARBLOST 位指示 SMBus 接口是否在一次总线竞争中失败。当接口正在发送时 (主或从方式),可能会出 现这种情况。当工作在从方式时,出现这种情况表示发生了总线错误条件。在每次 SI 被清 0 后,ARBLOST 也被硬件清 0。 在每次传输的开始和结束、每个字节帧之后或竞争失败时, SI 位 (SMBus 中断标志)被硬件置 1,详见 表 22.3。 有关 SI 位的重要注意事项:当 SI 标志被置 1 时, SMBus 接口被冻结; SCL 线被保持为低电平,总线状态 被冻结,直到 SI 被软件清 0 为止。 22.4.3.1. 软件 ACK 产生 当寄存器 SMBnADM 中的 EHACK 位被清 0 时,器件的固件必须检查接收的从地址,并对该从地址和接收 的数据字节发 ACK 或 NACK。当 SMBus 接口作为接收器时,写 ACK 位定义要发出的 ACK 值;当作为发 送器时,读 ACK 位将返回最后一个 ACK 周期的接收值。 ACKRQ 在每接收到一个字节后置 1,表示需要写 待发出的 ACK 值。当 ACKRQ 置 1 时,软件应在清除 SI 之前向 ACK 位写入要发出的 ACK 值。如果在清除 SI 之前软件未写 ACK 位,接口电路将产生一个 NACK。在向 ACK 位写入后, SDA 线将立即出现所定义的 ACK 值;但 SCL 将保持低电平,直到 SI 被清 0。如果接收的从地址未被确认,则以后的从事件将被忽略, 直到检测到下一个起始条件。 22.4.3.2. 硬件 ACK 产生 当寄存器 SMBnADM 中的 EHACK 位被置 1 时,自动从地址识别和 ACK 产生被使能。有关自动从地址识别的 更详细的信息见第 22.4.4 章。作为接收器时, ACK 位的当前值会在输入数据字节的 ACK 周期被自动发送; 当作为发送器时,读 ACK 位将返回最后一个 ACK 周期的接收值。当硬件 ACK 产生被使能时,不使用 ACKRQ 位。如果接收的从地址被硬件否认 (NACK),则以后的从事件将被忽略,直到检测到下一个起始条件,并且 不产生中断。 表 22.3 列出了影响 SMBnCN 寄存器中各个位的硬件变化源。有关使用 SMBnCN 寄存器进行 SMBus 的状 态译码的详细信息见表 22.5。 214 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 22.4. SMB0CN:SMBus 控制寄存器 位 名称 7 6 MASTER0 TXMODE0 5 4 3 STA0 STO0 2 ACKRQ0 ARBLOST0 1 0 ACK0 SI0 类型 R R R/W R/W R R R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xC0 ; SFR 页 = 0 ;可位寻址 位 7 6 名称 描述 读 写 MASTER0 SMBus0 主 / 从标志。该只读 0:SMBus0 工作 在从方 N/A 位指示 SMBus0 是否工作在主 式。 方式。 1:SMBus0 工作在主方 式。 TXMODE0 SMBus0 发送方式标志。该只 0:SMBus0 工作在接收器 N/A 读位指示 SMBus0 是否工作在 方式。 发送器方式。 5 STA0 SMBus0 起始标志。 4 STO0 SMBus0 停止标志。 1:SMBus0 工作在发送 器方式。 0:未检测到起始条件或重 0:不产生起始条件。 复起始条件。 1:当配置为主方式时,发 1:检测到起始条件或重 送起始条件或重复起始条 复起始条件。 件。 0:未检测到停止条件。 0:不发送停止条件。 1:检测到停止条件 (在 1:当配置为主方式时,导 从方式)或挂起 (在主方 致发送一个停止条件 (在 式)。 下一个 ACK 周期之后)。 3 2 1 0 ACKRQ0 0:无 ACK 请求。 由硬件清 0。 N/A 1:有 ACK 请求。 0:无仲裁错误。 N/A SMBus0 确认。 1:竞争失败。 0:收到 NACK。 0:发送 NACK。 SMBus0 中断标志。 1:收到 ACK。 0:无中断请求。 MBus0 确认请求。 ARBLOST0 SMBus0 竞争失败标志。 ACK0 SI0 当出现表 15.3 列出的条件时 该位被硬件置 1。 SI0 必须用 软件清 0。当 SI0 被置 1 时, SCL0 被保持低电平, SMBus0 被冻结。 1:有中断请求。 1:发送 ACK。 0:清除中断并启动下一个 状态机事件。 1:强制中断。 ??? 1.4 215 C8051F380/1/2/3/4/5/6/7/C SFR 定义 22.5. SMB1CN:SMBus 控制寄存器 位 名称 7 6 MASTER1 TXMODE1 5 4 STA1 STO1 3 2 ACKRQ1 ARBLOST1 1 0 ACK1 SI1 类型 R R R/W R/W R R R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xC0 ; SFR 页 = F ;可位寻址 位 7 6 名称 描述 读 写 MASTER1 SMBus1 主 / 从标志。该只读 0:SMBus1 工作在 从方 N/A 位指示 SMBus1 是否工作在主 式。 方式。 1:SMBus1 工作在主方 式。 TXMODE1 SMBus1 发送方式标志。该只 0:SMBus1 工作在接收器 N/A 读位指示 SMBus1 是否工作在 方式。 发送器方式。 5 STA1 SMBus1 起始标志。 4 STO1 SMBus1 停止标志。 1:SMBus1 工作在发送 器方式。 0:未检测到起始条件或重 0:不产生起始条件。 复起始条件。 1:当配置为主方式时,发 1:检测到起始条件或重 送起始条件或重复起始条 复起始条件。 件。 0:未检测到停止条件。 0:不发送停止条件。 1:检测到停止条件 (在 1:当配置为主方式时,导 从方式)或挂起 (在主方 致发送一个停止条件 (在 式)。 下一个 ACK 周期之后)。 3 2 1 0 ACKRQ1 0:无 ACK 请求。 由硬件清 0。 N/A 1:有 ACK 请求。 0:无仲裁错误。 N/A SMBus1 确认。 1:竞争失败。 0:收到 NACK。 0:发送 NACK。 SMBus1 中断标志。 1:收到 ACK。 0:无中断请求。 MBus1 确认请求。 ARBLOST1 SMBus1 竞争失败标志。 ACK1 SI1 当出现表 15.3 列出的条件时 该位被硬件置 1。 SI1 必须用 软件清 0。当 SI1 被置 1 时, SCL1 被保持低电平, SMBus1 被冻结。 216 1:有中断请求。 1:发送 ACK。 0:清除中断并启动下一个 状态机事件。 1:强制中断。 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 表 22.3. 影响 SMBnCN 的硬件变化原 位 MASTERn 在下述情况被硬件置 1: STAn STOn ARBLOSTn ACKn SIn 产生了停止条件。 竞争失败。 检测到起始条件。 竞争失败。 在一个 SMBus 帧开始之前未写 SMBnDAT。 必须用软件清 0。 产生了一个挂起的停止条件。 每个 ACK 周期之后。 每次 SIn 被清 0 时。 输入的 ACK 值为高 (非确认)。 必须用软件清 0。 产生了起始条件。 在一个 SMBus 帧开始之前写了 SMBnDAT。 ACKRQn 产生了起始条件。 TXMODEn 在下述情况被硬件置 0: 在起始条件后接收到一个地址字节。 在作为从器件被寻址时检测到一个停止条 件。 因检测到停止条件而导致竞争失败。 接收到一个字节并需要一个 ACK 响应值。 (仅在硬件 ACK 未被使能时)。 当 STAn 为低时,主器件检测到一个重复起始 条件 (不希望的重复起始条件)。 在试图产生一个停止条件或重复起始条件时 检测到 SCLn 为低电平。 在试图发送 1 时检测到 SDAn 为低电平(ACK 位除外)。 输入的 ACK 值为低 (确认)。 产生了一个起始条件。 竞争失败。 发送了一个字节并收到一个 ACK/NACK 收到一个字节。 在起始条件或重复起始条件之后接收到一个 从地址 +R/W。 收到一个停止条件。 22.4.4. 硬件从地址识别 SMBus 硬件具有自动识别进入的从地址和发送 ACK 的能力,无需软件干预。通过将寄存器 SMBnADM 中 的 EHACK 位置 1 来使能自动从地址识别。这将同时使能硬件自动从地址识别和自动产生接收字节的 ACK (主或从方式)。有关硬件自动产生 ACK 的详细信息见第 22.4.3.2 章。 用于定义要被硬件识别的地址的寄存器是 SMBus 从地址寄存器和 SMBus 从地址掩码寄存器。用这两个寄 存器可以指定单个地址或一个地址范围 (包括全局呼叫地址 0x00)。这两个寄存器的高 7 位用于定义要被 确认的地址。从地址掩码 SLVM[6:0] 中为 1 的位使能接收的从地址与硬件从地址 SLV[6:0] 中对应位的比较。 从地址掩码中某一位为 0 表示该位在比较时被忽略。在这种情况下,不管进入的从地址的对应位是 1 还是 0,该地址都是可接受的。另外,当寄存器 SMBnADR 中的 GCn 位被置 1 时,硬件会识别全局呼叫地址 (0x00)。表 22.4 列出了一些示例参数设置和在这些条件下能被硬件识别的从地址。 ??? 1.4 217 C8051F380/1/2/3/4/5/6/7/C 表 22.4. 硬件地址识别示例 (EHACK = 1) 硬件从地址 SLVn[6:0] 0x34 0x34 0x34 0x34 0x70 从地址掩码 SLVMn[6:0] 0x7F 0x7F 0x7E 0x7E 0x73 GCn 位 被硬件识别的从地址 0 1 0 1 0 0x34 0x34, 0x00 (General Call) 0x34, 0x35 0x34, 0x35, 0x00 (General Call) 0x70, 0x74, 0x78, 0x7C SFR 定义 22.6. SMB0ADR:SMBus0 从地址寄存器 位 7 6 5 4 3 2 1 0 名称 SLV0[6:0] GC0 类型 R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xCF ; SFR 页 = 0 位 名称 7:1 SLV0[6:0] 功能 SMBus 硬件从地址。 定义用于自动硬件确认的 SMBus0 从地址。只有 SLVM0[6:0] 中的对应位为 1 的那 些地址位与接收的地址比较。这样就允许多个地址被识别。 0 GC0 全局呼叫地址使能。 当硬件地址识别被使能时 (EHACK = 1),该位决定硬件是否也识别全局呼叫地址 (0x00)。 0:全局呼叫地址被忽略。 1:全局呼叫地址被识别。 218 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 22.7. SMB0ADM:SMBus0 从地址掩码寄存器 位 7 6 5 4 3 2 1 0 名称 SLVM0[6:0] EHACK0 类型 R/W R/W 复位 1 1 1 1 1 1 1 0 SFR 地址 = 0xCE ; SFR 页 = 0 位 名称 7:1 SLVM0[6:0] 功能 SMBus0 从地址掩码 定义寄存器 SMB0ADR 中哪些位与接收的地址字节比较,哪些位被忽略。 SLVM0[6:0] 中任何被置 1 的位使能与 SLV0[6:0] 中对应位的比较。值为 0 的那些 位被忽略 (这些位在接收的地址中可以是 0,也可以是 1)。 0 EHACK0 硬件确认使能。 使能硬件对从地址和所接收的数据字节的确认。 0:固件必须手动确认所有进入的地址和数据字节。 1:自动从地址识别和硬件确认被使能。 SFR 定义 22.8. SMB1ADR:SMBus1 从地址寄存器 位 7 6 5 4 3 2 1 0 名称 SLV1[6:0] GC1 类型 R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xCF ; SFR 页 = F 位 名称 7:1 SLV1[6:0] 功能 SMBus1 硬件从地址。 定义用于自动硬件确认的 SMBus1 从地址。只有 SLVM1[6:0] 中的对应位为 1 的那 些地址位与接收的地址比较。这样就允许多个地址被识别。 0 GC1 全局呼叫地址使能。 当硬件地址识别被使能时 (EHACK = 1),该位决定硬件是否也识别全局呼叫地址 (0x00)。 0:全局呼叫地址被忽略。 1:全局呼叫地址被识别。 ??? 1.4 219 C8051F380/1/2/3/4/5/6/7/C SFR 定义 22.9. SMB1ADM:SMBus1 从地址掩码寄存器 位 7 6 5 4 3 2 1 0 名称 SLVM1[6:0] EHACK1 类型 R/W R/W 复位 1 1 1 1 1 1 1 0 SFR 地址 = 0xCE ; SFR 页 = F 位 名称 7:1 SLVM1[6:0] 功能 SMBus1 从地址掩码。 定义寄存器 SMB1ADR 中哪些位与接收的地址字节比较,哪些位被忽略。 SLVM1[6:0] 中任何被置 1 的位使能与 SLV1[6:0] 中对应位的比较。值为 0 的那些 位被忽略 (这些位在接收的地址中可以是 0,也可以是 1)。 0 EHACK1 硬件确认使能。 使能硬件对从地址和所接收的数据字节的确认。 0:固件必须手动确认所有进入的地址和数据字节。 1:自动从地址识别和硬件确认被使能。 220 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 22.4.5. 数据寄存器 SMBus 数据寄存器 SMBnDAT 保存要发送或刚接收的串行数据字节。在 SIn 标志被置 1 时,软件可以安全 地读 / 写数据寄存器。当 SMBus 被使能但 SIn 标志被清为逻辑 0 时软件不应访问 SMBnDAT 寄存器,因为 接口可能正在对该寄存器中的数据字节进行移入或移出操作。 SMBnDAT 中的数据总是先移出 MSB。在收到一个字节后,接收数据的第一位位于 SMBnDAT 的 MSB。在 数据被移出的同时,总线上的数据被移入,所以 SMBnDAT 中总是保存最后出现在总线上的数据字节。在竞 争失败后,从主发送器变为从接收器时 SMBnDAT 中的数据或地址保持不变。 SFR 定义 22.10. SMB0DAT:SMBus 数据寄存器 位 7 6 5 4 3 名称 SMB0DAT[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xC2 ; SFR 页 = 0 位 名称 功能 7:0 SMB0DAT[7:0] SMBus0 数据。 SMB0DAT 寄存器保存要发送到 SMBus0 串行接口上的一个数据字节,或刚从 SMBus0 串行接口接收到的一个字节。一旦 SI0 串行中断标志被置 1, CPU 即可读 或写该寄存器。只要 SI0 串行中断标志位 (SMB0CN.0) 为逻辑 1,该寄存器内的串 行数据就是稳定的。当 SI0 标志位不为 1 时,系统可能正在移入 / 移出数据,此时 CPU 不应访问该寄存器。 ??? 1.4 221 C8051F380/1/2/3/4/5/6/7/C SFR 定义 22.11. SMB1DAT:SMBus 数据寄存器 位 7 6 5 4 3 名称 SMB1DAT[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xC2 ; SFR 页 = F 位 名称 功能 7:0 SMB1DAT[7:0] SMBus1 数据。 SMB1DAT 寄存器保存要发送到 SMBus1 串行接口上的一个数据字节,或刚从 SMBus1 串行接口接收到的一个字节。一旦 SI1 串行中断标志被置 1, CPU 即可读 或写该寄存器。只要 SI1 串行中断标志位 (SMB1CN.0) 为逻辑 1,该寄存器内的串 行数据就是稳定的。当 SI1 标志位不为 1 时,系统可能正在移入 / 移出数据,此时 CPU 不应访问该寄存器。 222 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 22.5. SMBus 传输方式 SMBus 接口可以被配置为工作在主方式和 / 或从方式。在任一时刻,它将工作在下述 4 种方式之一:主发 送器、主接收器、从发送器或从接收器。 SMBus 接口在产生起始条件时进入主方式,并保持在该方式直到 产生一个停止条件或在总线竞争中失败。 SMBus 在每个字节帧结束后都产生中断。在作为接收器工作时, ACK 中断的位置取决于硬件 ACK 产生是否被使能。作为接收器时,在硬件 ACK 产生被禁止的情况下,ACK 中断发生在 ACK 之前;在硬件 ACK 产生被使能的情况下,ACK 中断发生在 ACK 之后。作为发送器时中断 发生在 ACK 之后,与硬件 ACK 产生是否被使能无关。 22.5.1. 写操作 (主方式) 在一次写过程期间, SMBus 主器件向从器件写数据。这次传送中的主器件在地址字节和所有数据字节期间 都将作为发送器。 SMBus 接口首先产生一个起始条件,然后发送含有目标从器件地址和数据方向位的第一 个字节。在这种情况下,数据方向位 (R/W) 应为逻辑 0 (WRITE),表示这是一个写操作。主器件接着发送一 个或多个字节的串行数据。在每发送一个字节后,从器件产生一个确认位。当 STO 位被置 1 并产生一个停 止条件后,本次传送结束。注意,如果在发生主发送器中断后没有向 SMBnDAT 写入数据,则接口将切换到 主接收器方式。图 22.5 给出了典型的主器件写过程,只给出了发送两个字节的传输时序,尽管可以发送任 意多个字节。注意,在该方式下,所有的 “ 数据字节传输结束 ” 中断都发生在 ACK 周期之后,与硬件 ACK 产生是否被使能无关。 硬件 ACK被使 能时(EHACK = 1)产生 的中断 S SLA W A 数据 字节 A 数据字节 A P 硬件 ACK被禁 止时(EHACK = 0)产生 的中断 S = START P = STOP A = ACK W = WRIT E SLA = 从地 址 SMBus 接口接 收 SMBus 接口发 送 图 22.5. 典型的主器件写操作 ??? 1.4 223 C8051F380/1/2/3/4/5/6/7/C 22.5.2. 读操作 (主方式) 在一次读操作期间, SMBus 主器件从一个从器件读数据。这次传送中的主器件在地址字节期间为发送器, 在所有的数据字节期间都将作为接收器。 SMBus 接口首先产生一个起始条件,然后发送含有目标从器件地 址和数据方向位的第一个字节。在这种情况下,数据方向位 (R/W) 应为逻辑 1(READ),表示这是一个读操 作。然后, SMBus 接口接收 SDA 线上来自从器件的串行数据,并输出 SMBus 串行时钟。从器件发送一个 或多个字节的串行数据。 如果硬件 ACK 产生被禁止,则每接收到一个字节后 ACKRQ 位被置 1 并产生中断。此时软件必须写 ACK 位 以确认 (ACK) 或否认 (NACK) 所接收的字节。 在硬件 ACK 产生被使能的情况下, SMBus 硬件会自动产生 ACK/NACK,并产生中断。注意:当硬件 ACK 产生被使能时,软件应在接收字节前写正确的 ACK 或 NACK 值。 向 ACK 位写 1 产生一个 ACK,写 0 产生一个 NACK。软件应在最后一次数据传送时向 ACK 位写 0,以发 送 NACK。接口电路将在对 STO 位置 1 并产生一个停止条件后退出主接收器方式。在主接收器方式,如果 执行了 SMBnDAT 写操作,接口将切换到主发送器方式。图 22.6 给出了典型的主方式读过程,只给出了接 收两个字节的传输时序,尽管可以接收任意多个字节。注意,在该方式下, “ 数据字节传输结束 ” 中断可发 生在过程中的不同位置,取决于硬件 ACK 产生是否被使能。当硬件 ACK 产生被禁止时,中断发生在 ACK 之前;当硬件 ACK 产生被使能时,中断发生在 ACK 之后。 硬件 ACK被使 能时(EHACK = 1)产生 的中断 S SLA R A 数据 字节 A 数据字节 硬件 ACK被禁 止时(EHACK = 0)产生 的中断 S = START P = STOP A = ACK N = NACK R = READ SLA = 从地 址 SMBus 接口接 收 SMBus 接口发 送 图 22.6. 典型的主器件读操作 224 ??? 1.4 N P C8051F380/1/2/3/4/5/6/7/C 22.5.3. 写操作 (从方式) 在一次写操作期间, SMBus 主器件向从器件写数据。这次传送中的从器件在地址字节期间为接收器,在所 有的数据字节期间也作为接收器。在从事件被允许的情况下 (INH = 0),当接收到一个起始条件 (START) 和 一个含有从地址和数据方向位 (此处应为 WRITE)的字节时, SMBus 接口进入从接收器方式。如果硬件 ACK 产生被禁止,在进入从接收器方式时将产生中断,并且 ACKRQ 被置 1。软件必须用一个 ACK 对接收 到的从地址确认,或用一个 NACK 忽略接收到的从地址。如果硬件 ACK 产生被使能,硬件会对一个匹配的 从地址产生 ACK,该地址要与由 SMB0ADR 和 SMB0ADM 设置的判别条件匹配。中断发生在 ACK 周期之后。 如果接收到的从地址被忽略 (由硬件或软件),从事件中断将被禁止,直到检测到下一个起始条件。如果收 到的从地址被确认,将接收 0 个或多个字节的数据。 如果硬件 ACK 产生被禁止,则每接收到一个字节后 ACKRQ 位被置 1 并产生中断。此时软件必须写 ACK 位 以确认 (ACK) 或否认 (NACK) 所接收的字节。 在硬件 ACK 产生被使能的情况下, SMBus 硬件会自动产生 ACK/NACK,并产生中断。注意:当硬件 ACK 产生被使能时,软件应在接收字节前设置正确的 ACK 或 NACK 值。 在收到一个停止条件后, SMBus 接口退出从接收器方式。注意,如果在从接收器方式对 SMBnDAT 进行写 操作,接口将切换到从发送器方式。图 22.7 给出了典型的从方式写过程,只给出了接收两个字节的传输时 序,尽管可以接收任意多个字节。注意,在该方式下, “ 数据字节传输结束 ” 中断可发生在该过程中的不同 位置,取决于硬件 ACK 产生是否被使能。当硬件 ACK 产生被禁止时,中断发生在 ACK 之前;当硬件 ACK 产生被使能时,中断发生在 ACK 之后。 硬 件ACK被 使能时(EHACK = 1)产生的 中断 S SLA W A 数据字节 A 数据字 节 A P 硬 件ACK被 禁止时(EHACK = 0)产生的 中断 S = START P = STOP A = ACK W = WRITE SLA = 从 地址 SMBus 接口接收 SMBus 接口发送 图 22.7. 典型的从器件写操作 ??? 1.4 225 C8051F380/1/2/3/4/5/6/7/C 22.5.4. 读操作 (从方式) 在一次读操作期间, SMBus 主器件从一个从器件读数据。这次传送中的从器件在地址字节期间为接收器, 在所有的数据字节期间都将作为发送器。在从事件被允许的情况下 (INH = 0),当接收到一个起始条件 (START) 和一个含有从地址和数据方向位 (此处应为 READ)的字节时, SMBus 接口进入从接收器方式 (接收从地址)。如果硬件 ACK 产生被禁止,在进入从接收器方式时将产生中断,并且 ACKRQ 被置 1。软 件必须用一个 ACK 对接收到的从地址确认,或用一个 NACK 忽略接收到的从地址。如果硬件 ACK 产生被 使能,硬件会对一个匹配的从地址产生 ACK,该地址要与由 SMB0ADR 和 SMB0ADM 设置的判别条件匹 配。中断发生在 ACK 周期之后。 如果接收到的从地址被忽略 (由硬件或软件),从事件中断将被禁止,直到检测到下一个起始条件。如果收 到的从地址被确认,将发送 0 个或多个字节的数据。如果收到的从地址被确认,软件应向 SMBnDAT 写入待 发送的数据。 SMBus 接口进入从发送器方式,并发送一个或多个字节的数据。在每发送一个字节后,主器 件发送一个确认位。如果确认位为 ACK,应向 SMBnDAT 写入下一个数据字节;如果确认位为 NACK,在 SI 被清除前不应再写 SMBnDAT (注:在从发送器方式,如果在收到 NACK 后写 SMBnDAT,将会导致一 个错误条件)。在收到停止条件后,SMBus 接口退出从发送器方式。注意,如果在一个从发送器中断发生之 后没有对 SMBnDAT 进行写操作,接口将切换到从接收器方式。图 22.8 给出了典型的从方式读过程,只给 出了发送两个字节的传输时序,尽管可以发送任意多个字节。注意,在该方式下 “ 数据字节传输结束 ” 中断 发生在 ACK 周期之后,与硬件 ACK 产生是否被使能无关。 硬件ACK被使能时(EHACK = 1)产生的中断 S SLA R A 数据字节 A 数据字节 N P 硬件ACK被禁止时(EHACK = 0)产生的中断 S = START P = STOP N = NACK R = READ SLA = 从地址 SMBus 接口接收 SMBus 接口发送 图 22.8. 典型的从器件读操作 22.6. SMBus 状态译码 用 SMBnCN 寄存器可以很容易地对 SMBus 的当前状态译码。响应一个 SMBus 事件要采取的合适动作取决 于硬件从地址识别和 ACK 产生是被使能还是被禁止。表 22.5 中描述了硬件从地址识别和 ACK 产生被禁止 时的典型动作。表 22.6 中描述了硬件从地址识别和 ACK 产生被使能时的典型动作。在这两个表中,状态向 量指的是 SMB0CN 中的高 4 位:MASTER、 TXMODE、 STA 和 STO。表中只列出了典型的响应选项。只 要符合 SMBus 规范,特定应用过程是允许的。表中被突出显示的响应选项是硬件允许的,但不符合 SMBus 规范。 226 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C ARBLOST 0 X 起始条件已产生。 0 0 STA STO 0 0 X 1100 主数据或地址字节已发送; 置位 STA 以重新启动数据传输。 1 0 X 1110 收到 NACK。 放弃发送。 0 1 X — 主数据或地址字节已发送; 将下一数据字节装入 SMBnDAT。 0 0 X 1100 用停止条件结束数据传输。 0 1 X — 用停止条件结束数据传输并开始 另一次传输。 1 1 X — 发送重复起始条件。 1 0 X 1110 切换到主接收器方式 (清除 SI, 0 不向 SMBnDAT 写新数据)。 0 X 1000 确认接收字节;读 SMBnDAT。 0 0 1 1000 发 NACK,表示这是最后一个字 节,发停止条件。 0 1 0 — 发 NACK,表示这是最后一个字 节,接着发停止条件,再发起始 条件。 1 1 0 1110 发 ACK 后再发重复起始条件。 1 0 1 1110 1 0 0 1110 0 0 1 1100 发 NACK 并切换到主发送器方式 0 (在清除 SI 之前与 SMBnDAT)。 0 0 1100 收到 ACK。 1100 0 主接收器 0 1000 1 0 1 典型响应选项 状态向量 ACKRQ 0 ACK 状态向量 方式 主发送器 1110 SMbus 的当前状态 ACK 写入值 读取值 下一个期望的 表 22.5. 硬件 ACK 产生禁止时的 SMBus 状态译码 (EHACK = 0) 将从地址 +R/W 装入到 SMBnDAT。 发 NACK,表示这是最后一个字 0 X 收到主数据字节;请求 ACK。 节,接着发重复起始条件。 发 ACK 并切换到主发送器方式 (在清除 SI 之前写 SMBnDAT)。 ??? 1.4 227 C8051F380/1/2/3/4/5/6/7/C ACK 0 从字节已发送;收到 NACK。 不需任何操作 (等待停止条 件)。 0 0 1 从字节已发送;收到 ACK。 0 STO 0 0 X 0001 将下一个要发送的数据字节装入 到 SMBnDAT。 0 0 X 0100 1 X 从字节已发送;检测到错误。 不需任何操作 (等待主器件结束 传输)。 0 0 X 0001 0 0 X — 如果写,对接收到的地址进行确 认。 0 0 1 0000 如果读,向 SMBnDAT 装入数据 字节;对接收到的地址进行确 认。 0 0 1 0100 否认接收到的地址。 0 0 0 — 如果写,对接收到的地址进行确 认。 0 0 1 0000 如果读,向 SMBnDAT 装入数据 0 字节;对接收到的地址进行确 认。 0 1 0100 否认接收到的地址。 0 0 0 — 重新安排失败的传输;否认接收 到的地址。 1 0 0 1110 从发送期间检测到非法停止条 0 X X 件或总线错误。 清 STO。 1 0 X 接收到从地址 +R/W ;请求 ACK。 作为主器件竞争失败; 0010 收到从地址 +R/W ; 从接收器 请求 ACK。 1 228 1 X 0 0 X 作为从发送器或从接收器被寻 清 STO。 址时,检测到停止条件。 0 0 X — 1 1 X 试图发送停止条件时竞争失 败。 不需任何操作 (传输完成 / 放 弃)。 0 0 0 — 0 0 1 0000 0 X 接收到从字节;请求 ACK。 确认接收的字节;读 SMBnDAT。 否认接收到的字节。 0 0 0 — 0001 0000 状态向量 ARBLOST 0 典型响应选项 STA 0101 ACKRQ 状态向量 方式 从发送器 0100 0 SMbus 的当前状态 ACK 写入值 读取值 下一个期望的 表 22.5. 硬件 ACK 产生禁止时的 SMBus 状态译码 (EHACK = 0) (Continued) 1 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C ARBLOST STA STO 0 放弃失败的传输。 1 X 试图发送重复起始条件时竞争 失败。 重新安排失败的传输。 0 0 X — 1 0 X 1110 0001 0 放弃失败的传输。 1 X 由于检测到停止条件而竞争失 败。 重新安排失败的传输 0 0 X — 1 0 X 1110 0000 1 放弃失败的传输。 1 X 试图作为主器件发送数据字节 时竞争失败。 重新安排失败的传输。 0 0 0 — 1 0 0 1110 SMbus 的当前状态 典型响应选项 ACK ACKRQ 0010 ACK 状态向量 方式 总线错误条件 状态向量 写入值 读取值 下一个期望的 表 22.5. 硬件 ACK 产生禁止时的 SMBus 状态译码 (EHACK = 0) (Continued) ARBLOST 0 X 主起始条件已产生。 0 0 收到 NACK。 主发送器 主数据或地址字节已发送; 收到 ACK。 1100 0 0 1 STO 主数据或地址字节已发送; STA 0 典型响应选项 状态向量 ACKRQ 0 ACK 状态向量 方式 1110 SMbus 的当前状态 ACK 写入值 读取值 下一个期望的 表 22.6. 硬件 ACK 产生被使能时的 SMBus 状态译码 (EHACK = 1) 0 0 X 1100 置位 STA 以重新启动数据传输。 1 0 放弃发送。 0 X 1110 1 X — 将下一数据字节装入 SMBnDAT。 0 0 X 1100 用停止条件结束数据传输。 0 1 X — 用停止条件结束数据传输并启动 另一次传输。 1 1 X — 发送重复起始条件。 1 0 X 1110 0 1000 将从地址 +R/W 装入 SMBnDAT。 切换到主接收器方式 (清除 SI, 0 不向 SMBnDAT 写新数据)。为 初始数据字节置位 ACK。 ??? 1.4 1 229 C8051F380/1/2/3/4/5/6/7/C 已发送 ACK。 ACK 收到主数据字节; STO 典型响应选项 STA ACK ARBLOST ACKRQ 状态向量 方式 SMbus 的当前状态 状态向量 写入值 读取值 下一个期望的 表 22.6. 硬件 ACK 产生被使能时的 SMBus 状态译码 (EHACK = 1) (Continued) 设置 ACK,准备接收下一数据字 0 节; 0 1 1000 读 SMBnDAT。 主接收器 0 从发送器 1 1000 0 0100 0101 230 0 0 0 0 0 0 0 0 1 0 1 X 0 X X 设置 NACK,指示下一数据字节 是最后一个数据字节;读 SMBnDAT。 0 0 0 1000 启动一个重复起始条件 1 0 0 1110 0 X 1100 收到主数据字节; 切换到主发送器方式 (在清除 SI 0 之前写 SMBnDAT)。 读 SMBnDAT,发送停止条件。 0 已发送 NACK (最后一个字 节)。 读 SMBnDAT,发送停止条件后 再发起始条件。 启动重复起始条件。 1 0 — 1 1 0 1110 1 0 0 1110 0 X 1100 0 X 0001 0 X 0100 0 X 0001 0 X — 切换到主发送器方式 (在清除 SI 0 之前写 SMBnDAT)。 0 不需任何操作 (等待停止条 从字节已发送;收到 NACK。 件)。 将下一个要发送的数据字节装入 0 从字节已发送;收到 ACK。 到 SMBnDAT。 不需任何操作 (等待主器件结束 0 从字节已发送;检测到错误。 传输)。 0 从发送期间检测到非法停止条 清 STO。 件或总线错误。 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 0 X ACK 已发送。 作为主器件竞争失败; 0010 收到从地址 +R/W ; 从接收器 0 ACK 已发送。 如果写,设置第一个数据字节的 ACK。 0 0 1 0000 如果读,向 SMBnDAT 装入数据 字节。 0 0 X 0100 如果写,设置第一个数据字节的 ACK。 0 0 1 0000 如果读,向 SMBnDAT 装入数据 字节。 0 0 X 0100 重新安排失败的传输。 1 0 X 1110 0 0 X 作为从发送器或从接收器被寻 清 STO。 址时,检测到停止条件。 0 0 X — 0 1 X 试图发送停止条件时竞争失 败。 不需任何操作 (传输完成 / 放 弃)。 0 0 0 — 为下一数据字节设置 ACK ; 0 0 1 0000 0 0 0 0000 0001 0000 1 X ACK 0 STO 接收到从地址 +R/W ; 典型响应选项 STA ACK ARBLOST ACKRQ 状态向量 方式 SMbus 的当前状态 状态向量 写入值 读取值 下一个期望的 表 22.6. 硬件 ACK 产生被使能时的 SMBus 状态译码 (EHACK = 1) (Continued) 0 0 X 接收到从字节。 读 SMBnDAT。 为下一数据字节设置 NACK ; 总线错误条件 读 SMBnDAT。 0010 0 放弃失败的传输。 1 X 试图发送重复起始条件时竞争 失败。 重新安排失败的传输。 0 0 X — 1 0 X 1110 0001 0 放弃失败的传输。 1 X 由于检测到停止条件而竞争失 败。 重新安排失败的传输。 0 0 X — 1 0 X 1110 0000 0 放弃失败的传输。 1 X 试图作为主器件发送数据字节 时竞争失败。 重新安排失败的传输。 0 0 X — 1 0 X 1110 ??? 1.4 231 C8051F380/1/2/3/4/5/6/7/C 232 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 23. UART0 UART0 是一个异步、全双工串口,它提供标准 8051 UART 的方式 1 和方式 3。增强的波特率支持允许使用 宽范围的时钟源来产生标准波特率 (详见第 233 页 23.1. 节 “ 增强的波特率发生器 ” )。接收数据缓冲机制 允许 UART0 在软件尚未读取前一个数据字节的情况下开始接收第二个输入数据字节。 UART0 有两个相关的特殊功能寄存器:串行控制寄存器 (SCON0) 和串行数据缓冲器 (SBUF0)。用同一个 SBUF0 地址可以访问发送寄存器和接收寄存器。写 SBUF0 时总是访问发送寄存器;读 SBUF0 时总是访问 接收寄存器,不可能从发送寄存器中读数据。 如果 UART0 中断被允许,则每次发送完成 (SCON0 中的 TI0 位被置 1)或接收到一个数据字节 (SCON0 中的 RI0 位被置 1)时将产生中断。当 CPU 转向中断服务程序时硬件不清除 UART0 中断标志。中断标志必 须用软件清除,这就允许软件判断 UART0 中断的原因 (发送完成或接收完成)。 SFR 总线 写SBUF TB 8 SBUF (发送移位) SE T D Q TX CLR 交叉开关 零检测器 停止 位 移位 开始 数据 发送控制 发送时 钟 发送 Tx I RQ SCON TI 串行 口 中断 MC E REN TB8 RB8 TI RI SMODE U ART 波特率 发生器 端口I /O RI Rx IRQ 接收时 钟 接收控制 开始 装载 移位 0 x1F F RB8 SBUF 输入移位寄存器 (9 位) 装载SBUF SBU F (接收锁存器) 读 SBUF SFR 总线 RX 交叉开关 图 23.1. UART0 原理框图 ??? 1.4 232 C8051F380/1/2/3/4/5/6/7/C 23.1. 增强的波特率发生器 UART0 波特率由定时器 1 工作在 8 位自动重装载方式产生。发送 (TX) 时钟由 TL1 产生;接收 (RX) 时钟由 TL1 的副本(图 23.2 中的 RX 定时器)产生,该寄存器不能被用户访问。TX 和 RX 定时器的溢出信号经过 二分频后用于产生 TX 和 RX 波特率。当定时器 1 被使能时, RX 定时器运行并使用与定时器 1 相同的重载 值 (TH1)。在检测到 RX 引脚上的起始条件时 RX 定时器被强制重载,这就允许在检测到起始位时立即开始 接收过程,而与 TX 定时器的状态无关。 定时器1 TL1 UART 溢出 2 发送时钟 溢出 2 接收时钟 TH1 检测到 起始位 RX定 时器 图 23.2. UART0 波特率逻辑 定时器 1 应被配置为方式 2,即 8 位自动重装载方式(见第 267 页 26.1.3. 节 “ 方式 2 — 自动重装载的 8 位 计数器 / 定时器 ” )。定时器 1 的重载值应设置为使其溢出频率为所期望的 UART 波特率频率的两倍。注意, 定时器 1 的时钟可以在 6 个时钟源中选择:SYSCLK、 SYSCLK/4、 SYSCLK/12、 SYSCLK/48、外部振荡 器时钟 /8 和外部输入 T1。对于任何给定的定时器 1 时钟源,UART0 的波特率由方程 23.1-A 和方程 23.1-B 决定: A) B) 1 UARTB??? = --- T1 ??? 2 T1 CLK T1??? = -------------------------256 – TH1 方程 23.1. UART0 波特率 其中 T1CLK 是定时器 1 的时钟频率, TH1 是定时器 1 的高字节 (重载值)。定时器 1 时钟频率的选择见 第 263 页 26. 节 “ 定时器 ” 。表 23.1 给出了典型波特率和系统时钟频率的对照表。注意,当外部振荡器驱 动定时器 1 时,内部振荡器仍可产生系统时钟。 233 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 23.2. 工作方式 UART0 提供标准的异步、全双工通信,其工作方式 (8 位或 9 位)通过 S0MODE 位 (SCON0.7) 来选择。 典型的 UART 连接方式如图 23.3 所示。 TX RS- 232 R S- 232 电平转换器 RX C8051Fxxx 或 TX TX RX RX MCU C805 1Fxxx 图 23.3. UART 连接图 23.2.1. 8 位 UART 在 8 位 UART 方式,每个数据字节共使用 10 位:一个起始位、 8 个数据位 (LSB 在先)和一个停止位。数 据从 TX0 引脚发送(LSB 在先),在 RX0 引脚接收。在接收时,8 个数据位存入 SBUF0,停止位进入 RB80 (SCON0.2)。 当软件向 SBUF0 寄存器写入一个数据字节时开始数据发送。在发送结束时 (停止位开始)发送中断标志 TI0 (SCON0.1) 被置 1。在接收允许位 REN0 (SCON0.4) 被置 1 后,数据接收可以在任何时刻开始。收到停 止位后,如果满足下述条件则数据字节将被装入到接收寄存器 SBUF0:RI0 必须为逻辑 0 ;如果 MCE0 为 逻辑 1,则停止位必须为 1。在发生接收数据溢出的情况下,先接收到的 8 位数据被锁存到 SBUF0,而后面 的溢出数据被丢弃。 如果这些条件满足,则 8 位数据被存入 SBUF0,停止位被存入 RB80, RI0 标志被置 1。如果这些条件不满 足,则不装载 SBUF0 和 RB80,RI0 标志也不会被置 1。如果中断被允许,在 TI0 或 RI0 置 1 时将产生中断。 MARK 起始位 D0 D1 D2 D3 D4 SPACE D5 D6 D7 停止位 位时间 位采样 图 23.4. 位 UART 时序图 ??? 1.4 234 C8051F380/1/2/3/4/5/6/7/C 23.2.2. 9 位 UART 在 9 位 UART 方式,每个数据字节共使用 11 位:一个起始位、 8 个数据位 (LSB 在先)、一个可编程的第 9 位和一个停止位。第 9 发送数据位由 TB80 (SCON0.3) 中的值决定,由用户软件赋值。它可以被赋值为 PSW 中的奇偶位 P(用于错误检测),或用于多处理器通信。在接收时,第 9 数据位进入 RB80 (SCON0.2), 停止位被忽略。 当执行一条向 SBUF0 寄存器写一个数据字节的指令时开始数据发送。在发送结束时 (停止位开始)发送中 断标志 TI0 被置 1。在接收允许位 REN0 (SCON0.4) 被置 1 后,数据接收可以在任何时刻开始。收到停止位 后如果满足下述条件则数据字节将被装入到接收寄存器 SBUF0:1) RI0 必须为逻辑 0 ; 2) 如果 MCE0 为 逻辑 1,则第 9 位必须为逻辑 1 (当 MCE0 为逻辑 0 时,第 9 位数据的状态并不重要)。如果这些条件满 足,则 8 位数据被存入 SBUF0,第 9 位被存入 RB80, RI0 标志被置 1。如果这些条件不满足,则不装载 SBUF0 和 RB80, RI0 标志也不会被置 1。如果中断被允许,在 TI0 或 RI0 置位时将产生 UART0 中断。 MARK 起始位 D0 D1 D2 D3 D4 D5 SPACE 位时间 位采样 图 23.5. 9 位 UART 时序图 235 ??? 1.4 D6 D7 D8 停止位 C8051F380/1/2/3/4/5/6/7/C 23.3. 多机通信 9 位 UART 方式通过使用第 9 数据位可以支持一个主处理器与一个或多个从处理器之间的多机通信。当主机 要发送数据给一个或多个从机时,它先发送一个用于选择目标的地址字节。地址字节与数据字节的区别是: 地址字节的第 9 位为逻辑 1 ;数据字节的第 9 位总是设置为逻辑 0。 如果从机的 MCE0 位 (SCON0.5) 被置 1,则只有当 UART 接收到的第 9 位为逻辑 1 (RB80 = 1) 并收到有效 的停止位后 UART 才会产生中断,意味着接收到一个地址字节。在 UART 的中断处理程序中,软件将接收 到的地址与从机自身的 8 位地址进行比较。如果地址匹配,从机将清除它的 MCE0 位以允许后面接收数据 字节时产生中断。未被寻址的从机仍保持其 MCE0 位为 1,在收到后续的数据字节时不产生中断,从而忽略 收到的数据。一旦接收完整个消息,被寻址的从机将它的 MCE0 位重新置 1 以忽略所有的数据传输,直到 它收到下一个地址字节。 可以将多个地址分配给一个从机,或将一个地址分配给多个从机从而允许同时向多个从机 “ 广播 ” 发送。主 机可以被配置为接收所有的传输数据,或通过实现某种协议使主 / 从角色能临时变换以允许原来的主机和从 机之间进行半双工通信。 主器件 从器件 从器件 从器件 V+ RX TX RX TX RX TX RX TX 图 23.6. UART 多机方式连接图 ??? 1.4 236 C8051F380/1/2/3/4/5/6/7/C SFR 定义 23.1. SCON0:UART0 控制寄存器 位 7 6 5 4 3 2 1 0 名称 S0MODE - MCE0 REN0 TB80 RB80 TI0 RI0 类型 R/W R R/W R/W R/W R/W R/W R/W 复位 0 1 0 0 0 0 0 0 SFR 寺址 = 0x98 ; SFR 页 = 所有页;可位寻址 位 7 名称 功能 S0MODE UART0 工作方式。 该位选择 UART0 的工作方式。 0:波特率可编程的 8 位 UART。 1:波特率可编程的 9 位 UART。 6 5 未使用 MCE0 读 = 1b ;写 = 忽略。 多处理器通信使能。 该位的功能取决于 UART0 工作方式。 方式 0 (8 位 UART):检查有效停止位。 0:停止位的逻辑电平被忽略。 1:只有当停止位为逻辑 1 时 RI0 被激活。 方式 1 (9 位 UART):多处理器通信使能。 0:第 9 位的逻辑电平被忽略。 1:只有当第 9 位为逻辑 1 时 RI0 才被置 1 并产生中断。 4 REN0 接收允许。 该位使能 / 禁止 UART 接收器。 0:UART0 接收禁止。 1:UART0 接收允许。 3 TB80 第 9 发送位。 该位的逻辑电平被赋值给 9 位 UART 方式的第 9 发送位 (方式 1)。在 8 位 UART 方 式 (方式 0)中未使用。 2 RB80 第 9 接收位。 在方式 0, RB80 被赋值为停止位的值。在方式 1,该位被赋值为第 9 数据位的值。 1 TI0 发送中断标志。 当 UART0 发送完一个字节数据后该位被硬件置 1 (在 8 位 UART 方式时,是在发送第 8 位后;在 9 位 UART 方式时,是在停止位开始)。当 UART0 中断被允许时,置 1 该 位将导致 CPU 转到 UART0 中断服务程序。该位必须用软件清 0。 0 RI0 接收中断标志。 当 UART0 接收到一个字节数据时该位被硬件置 1 (在采样停止位时)。当 UART0 中 断被允许时,置 1 该位将会使 CPU 转到 UART0 中断服务程序。该位必须用软件清 0。 237 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 23.2. SBUF0:UART0 数据缓冲器 位 7 6 5 4 3 名称 SBUF0[7:0] 类型 R/W 0 复位 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0x99 ; SFR 页 = 所有页 位 7:0 名称 功能 SBUF0[7:0] UART0 数据缓冲器位 7-0 (MSB-LSB)。 该 SFR 访问两个寄存器:发送移位寄存器和接收锁存寄存器。当数据被写到 SBUF0 时,它进入发送移位寄存器等待串行发送。向 SBUF0 写入一个字节即启动发送过程。 读 SBUF0 时返回接收锁存器的内容。 SYSCLK = 48 MHz SYSCLK = 24 MHz SYSCLK = 12 MHz 表 23.1. 对应标准波特率的定时器设置 (使用内部振荡器) 目标 波特率 (bps) 实际 波特率 (bps) 波特率 误差 振荡器 分频系数 定时器 时钟源 SCA1-SCA0 (分频选择) T1M 定时器 1 重载值 (hex) 230400 115200 57600 28800 14400 9600 2400 1200 230400 115200 57600 28800 14400 9600 2400 1200 230400 115200 57600 28800 14400 9600 2400 230769 115385 57692 28846 14423 9615 2404 1202 230769 115385 57692 28846 14423 9615 2404 1202 230769 115385 57692 28846 14388 9615 2404 0.16% 0.16% 0.16% 0.16% 0.16% 0.16% 0.16% 0.16% 0.16% 0.16% 0.16% 0.16% 0.16% 0.16% 0.16% 0.16% 0.16% 0.16% 0.16% 0.16% 0.08% 0.16% 0.16% 52 104 208 416 832 1248 4992 9984 104 208 416 832 1664 2496 9984 19968 208 416 832 1664 3336 4992 19968 SYSCLK SYSCLK SYSCLK SYSCLK SYSCLK / 4 SYSCLK / 4 SYSCLK / 12 SYSCLK / 48 SYSCLK SYSCLK SYSCLK SYSCLK / 4 SYSCLK / 4 SYSCLK / 12 SYSCLK / 48 SYSCLK / 48 SYSCLK SYSCLK SYSCLK / 4 SYSCLK / 4 SYSCLK / 12 SYSCLK / 12 SYSCLK / 48 XX XX XX XX 01 01 00 10 XX XX XX 01 01 00 10 10 XX XX 01 01 00 00 10 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0xE6 0xCC 0x98 0x30 0x98 0x64 0x30 0x98 0xCC 0x98 0x30 0x98 0x30 0x98 0x98 0x30 0x98 0x30 0x98 0x30 0x75 0x30 0x30 ??? 1.4 238 C8051F380/1/2/3/4/5/6/7/C 表 23.1. 对应标准波特率的定时器设置 (使用内部振荡器) 目标 波特率 (bps) 注: 239 实际 波特率 (bps) 波特率 误差 振荡器 分频系数 SCA1-SCA0 和 T1M 位定义定时器时钟源。 X = 无关。 ??? 1.4 定时器 时钟源 SCA1-SCA0 (分频选择) T1M 定时器 1 重载值 (hex) C8051F380/1/2/3/4/5/6/7/C 24. UART1 UART1 是一个异步、全双工串口,它提供多种数据格式选择。 UART1 包含一个由 16 位定时器和可编程预 分频器构成的专用波特率发生器,能产生很宽范围的波特率 (详见第 241 页 24.1. 节 “ 波特率发生器 ” )。 接收数据 FIFO 允许 UART1 接收多达 3 个字节而不会发生数据丢失或溢出。 UART1 有六个相关的特殊功能寄存器。三个用于波特率发生器 (SBCON1、 SBRLH1 和 SBRLL1),两个 用于数据格式、控制和状态功能 (SCON1 和 SMOD1) ,一个用于发送和接收数据 (SBUF1)。用同一个 SBUF1 地址可以访问发送寄存器和接收 FIFO。写 SBUF1 时总是访问发送保持寄存器;读 SBUF1 时总是 访问接收 FIFO 的第一个字节,不可能从发送保持寄存器中读数据。 如果 UART1 中断被允许,则每次发送完成 (SCON1 中的 TI1 位被置 1)或接收到数据字节 (SCON1 中 的 RI1 位被置 1)时将产生中断。当 CPU 转向中断服务程序时硬件不清除 UART1 中断标志。中断标志必须 用软件清除,这就允许软件判断 UART1 中断的原因 (发送完成或接收完成)。注意:如果接收 FIFO 中还 有数据字节,则 RI1 位不能被软件清 0。 数据格式控制 波特率发生器 定时器 (16位) EN 发送逻辑 TX1 预分频器 (1, 4, 12, 48) MC E1 S 1PT1 S 1PT0 P E1 S 1D L1 S 1D L0 XB E1 SB L1 SMOD 1 溢出 发送保持 寄存器 写SB UF1 S BU F1 SB CON 1 控制/状态 S CON 1 OV R1 PE R R1 TH R E1 R E N1 TBX1 R BX1 TI1 RI1 SB1 RU N SYS CL K SBR L L1 SB1P S1 SB1P S0 SBR LH 1 读SB UF1 接收FIFO (3字节) 接收逻辑 RX1 U AR T1 中断 图 24.1. UART1 原理框图 ??? 1.4 240 C8051F380/1/2/3/4/5/6/7/C 24.1. 波特率发生器 UART1 波特率由一个专用的 16 位定时器产生。该定时器使用控制器内核时钟 (SYSCLK) 工作,并有一个预 分频器,可选择 1、4、12 或 48 分频。定时器和预分频器选项的组合允许在多种不同的 SYSCLK 频率下都 可以有很宽的波特率选择范围。 用三个寄存器(SBCON1、SBRLH1 和 SBRLL1)来配置波特率发生器。UART1 波特率发生器控制寄存器 (SBCON1,SFR 定义 24.4)使能或禁止波特率发生器,并为定时器选择预分频值。使用 UART1 时,波特 率发生器必须被使能。寄存器 SBRLH1 和 SBRLL1 包含该专用定时器的 16 位重载值。定时器从重载值开始 向上计数,每个时钟加 1。定时器发生溢出(从 0xFFFF 到 0x0000)时立即被重新装载。对于可靠的 UART 操作,建议不要将 UART 波特率配置为大于 SYSCLK/16。 UART1 的波特率由方程 24.1 决定: 1 SYSCLK 1 ??? = ------------------------------------------------------------------------------ --- --------- 65536 – (SBRLH1:SBRLL1) 2 ???? 方程 24.1. UART1 波特率 表 24.1 给出了典型波特率与系统时钟频率的对照表。 SYSCLK = 48 MHz SYSCLK = 24 MHz SYSCLK = 12 MHz 表 24.1. 对应标准波特率的波特率发生器设置 (使用内部振荡器) 241 目标波特率 (bps) 230400 115200 57600 28800 14400 9600 2400 1200 230400 115200 57600 28800 14400 9600 2400 1200 230400 115200 57600 28800 14400 9600 2400 1200 实际波特率 (bps) 230769 115385 57692 28846 14388 9600 2400 1200 230769 115385 57692 28777 14406 9600 2400 1200 230769 115385 57554 28812 14397 9600 2400 1200 波特率 误差 0.16% 0.16% 0.16% 0.16% 0.08% 0.0% 0.0% 0.0% 0.16% 0.16% 0.16% 0.08% 0.04% 0.0% 0.0% 0.0% 0.16% 0.16% 0.08% 0.04% 0.02% 0.0% 0.0% 0.0% 振荡器 分频系数 52 104 208 416 834 1250 5000 10000 104 208 416 834 1666 2500 10000 20000 208 416 834 1666 3334 5000 20000 40000 ??? 1.4 SB1PS[1:0] (预分频位) 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 SBRLH1:SBRLL1 中的重载值 0xFFE6 0xFFCC 0xFF98 0xFF30 0xFE5F 0xFD8F 0xF63C 0xEC78 0xFFCC 0xFF98 0xFF30 0xFE5F 0xFCBF 0xFB1E 0xEC78 0xD8F0 0xFF98 0xFF30 0xFE5F 0xFCBF 0xF97D 0xF63C 0xD8F0 0xB1E0 C8051F380/1/2/3/4/5/6/7/C 24.2. 数据格式 UART1 提供多种数据格式选项。数据传输以起始位 (逻辑低电平)开始,其后是数据位 (LSB 在先),数 据位之后是奇偶位或额外位 (如果选择),最后是一个或两个停止位 (逻辑高电平)。数据长度在 5 ~ 8 位 之间。可以在数据位后添加一个奇偶位,硬件可以自动产生和检测奇偶位 (偶、奇、传号或空号)。可以选 择短 (一个位时间)或长 (1.5 或 2 个位时间)停止位。 UART1 具有多处理器通信工作方式。所有数据格 式选项都通过 SMOD1 寄存器配置,见 SFR 定义 24.2。图 24.2 给出了没有奇偶位或额外位的 UART1 数据 传输时序。图 24.3 给出了使能校验位 (PE1 = 1) 的 UART1 数据传输时序。图 24.4 给出了使能额外位 (XBE = 1) 的 UART1 数据传输时序。注意:额外位功能在奇偶位被使能时不可用,只有在数据长度为 6、 7 或 8 位时才能使用第二停止位。 MARK 起始位 D0 D1 D N-2 DN- 1 停止位1 SPAC E 停 止位2 位时间 可选 N位 ; N = 5, 6, 7, or 8 (6 ,7 ,8 位数据 ) 图 24.2. 没有奇偶位或额外位的 UART1 时序 MARK 起始位 D0 D1 DN-2 D N- 1 奇偶位 SPAC E 停止位1 停 止位2 位时间 可选 (6 ,7 ,8 N位; N = 5, 6, 7, or 8 位数据) 图 24.3. 有奇偶位时的 UART1 时序 MARK 起始位 D0 D1 DN-2 D N- 1 SPAC E 额外位 停止位1 停 止位2 位时间 可选 N位; N = 5, 6, 7, or 8 (6 ,7 ,8 位数据) 图 24.4. 有额外位时的 UART1 时序 ??? 1.4 242 C8051F380/1/2/3/4/5/6/7/C 24.3. 配置和操作 UART1 提供标准的异步、全双工通信。它可以工作在点对点串行方式,也可以作为多处理器串行接口的一 个节点。当工作在点对点方式,即串行总线上只有两个器件时, SMOD1 中的 MCE1 位应被清 0。当作为多 处理器通信总线上的一个器件工作时, SMOD1 中的 MCE1 位和 XBE1 位应被置 1。在上述两种工作方式, 数据都是从 TX1 引脚发送,在 RX1 引脚接收。使用交叉开关和端口 I/O 寄存器配置 TX1 和 RX1 引脚,详 见第 153 页 20. 节 “ 端口输入 / 输出 ” 。 在典型的 UART 通信中,一个器件的发送 (TX) 输出被连接到另一器件的接收 (RX) 输入,可以直接连接,也 可以通过总线收发器,如图 24.5 所示。 PC机 串行口 TX RS-232 RS-232 电平转换器 RX C8051Fxxx 或 TX TX RX RX MCU C8 051Fxxx 图 24.5. 典型 UART 连接图 24.3.1. 数据发送 数据发送是双缓冲的,当软件向 SBUF1 寄存器写入一个字节时开始数据发送。写 SBUF1 时将数据保存在 发送保持寄存器,同时发送保持寄存器空标志 (THRE1) 被清 0。如果 UART 移位寄存器为空 (即没有数据 在发送),则数据将被置入移位寄存器,且 THRE1 被置 1。如果数据发送正在进行,则数据将保存在发送 保持寄存器中,直到当前的发送过程结束。在发送结束时 (停止位开始)发送中断标志 TI1 (SCON1.1) 被 置 1。如果中断被使能,则在 TI1 置位时会产生中断。 如果额外位功能被使能 (XBE1 = 1),且奇偶位功能被禁止 (PE1 = 0),则 TBX1 (SCON1.3) 位将被发送(在 额外位的位置)。当奇偶位功能被使能 (PE1 = 1) 时,硬件会根据所选择的奇偶位类型(用 S1PT[1:0] 选择) 产生奇偶位,并将其加到数据域之后。注意:当奇偶位被使能时,额外位功能不可用。 24.3.2. 数据接收 在接收允许位 REN1 (SCON1.4) 被置 1 后,数据接收可以在任何时刻开始。收到停止位后,如果满足下述 条件则数据字节将被装入到接收 FIFO:接收 FIFO (3 字节深度)必须未满;停止位必须为逻辑 1。在接收 FIFO 已满的情况下,接收的字节被丢弃,并会产生接收 FIFO 溢出错误 (寄存器 SCON1 中的 OVR1 被置 1)。如果停止位为逻辑 0,则接收数据不会被保存到接收 FIFO 中。如果接收条件满足,则数据被保存到接 收 FIFO 中,且 RI1 标志被置 1。注意:当 MCE1 = 1 时,只有在额外位也等于 1 时 RI1 才会被置 1。可以 通过读 SBUF1 寄存器从接收 FIFO 中读取数据。SBUF1 寄存器中保存的是 FIFO 中最老的数据。在 SBUF1 被读取后,FIFO 中的下一个字节被装入到 SBUF1 中,FIFO 中空出的位置可以接收一个新字节。如果中断 被使能,则在 RI1 置位时会产生中断。只有当 FIFO 中不再有信息时,RI1 才能由软件清 0。清空 FIFO 内容 的建议步骤如下: 1. 将 RI1 清 0 ; 2. 读 SBUF1 ; 3. 检查 RI1,如果 RI1 被置 1 则重复步骤 1。 243 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 如果额外位功能被使能 (XBE1 = 1),且奇偶位功能被禁止 (PE1 = 0),则 FIFO 中最老字节的额外位可以从 RBX1 位 (SCON1.2) 读出。如果额外位功能未被使能,则 RBX1 代表 FIFO 中最老字节的停止位。如果奇偶 位功能被使能 (PE1 = 1),硬件会在接收数据时根据所选择的奇偶位类型 (用 S1PT[1:0] 选择)检查接收到 的奇偶位。如果接收到的字节具有奇偶错误,则 PERR1 标志被置 1。该标志必须用软件清 0。注意:当奇 偶位被使能时,额外位功能不可用。 24.3.3. 多机通信 UART1 通过使用额外位可以支持一个主处理器与一个或多个从处理器之间的多机通信。当主机要发送数据 给一个或多个从机时,它先发送一个用于选择目标的地址字节。地址字节与数据字节的区别是:地址字节的 额外位为逻辑 1 ;数据字节的的额外位总是设置为逻辑 0。 如果从机的 MCE1 位 (SMOD1.7) 被置 1,则 UART 被配置为只有当接收到的额外位为逻辑 1 (RBX1 = 1) 并 收到有效的停止位后 UART 才会产生中断,表示收到一个地址字节。在 UART 的中断处理程序中,软件将 接收到的地址与从机自身的地址进行比较。如果地址匹配,从机将清除它的 MCE1 位以允许后面接收数据字 节时产生中断。未被寻址的从机仍保持其 MCE1 位为 1,在收到后续的数据字节时不产生中断,从而忽略收 到的数据。一旦接收完整个消息,被寻址的从机将它的 MCE1 位重新置 1,以忽略所有的数据传输,直到它 收到下一个地址字节。 可以将多个地址分配给一个从机,或将一个地址分配给多个从机,从而允许同时向多个从机 “ 广播 ” 发送。 主机可以被配置为接收所有的传输数据,或通过实现某种协议使主 / 从角色能临时变换以允许原来的主机和 从机之间进行半双工通信。 主器件 从器件 从器件 从器件 V+ RX TX RX TX RX TX RX TX 图 24.6. UART 多机方式连接图 ??? 1.4 244 C8051F380/1/2/3/4/5/6/7/C SFR 定义 24.1. SCON1:UART1 控制寄存器 位 7 6 5 4 3 2 1 0 名称 OVR1 PERR1 THRE1 REN1 TBX1 RBX1 TI1 RI1 类型 R/W R/W R R/W R/W R/W R/W R/W 复位 0 0 1 0 0 0 0 0 SFR 地址 = 0xD2 ; SFR 页 = 所有页 位 名称 7 OVR1 功 能 接收 FIFO 溢出标志。 该位用于指示接收 FIFO 溢出状态,在接收字符因 FIFO 已满而被丢弃时被置 1。该位必 须用软件清 0。 0:未发生接收 FIFO 溢出。 1:发生了接收 FIFO 溢出。 6 PERR1 奇偶错误标志。 当奇偶位被使能时,该位用于指示是否发生了奇偶错误。当 FIFO 中的最老字节的奇偶 位与所选择的奇偶类型不匹配时,该位被置 1。该位必须用软件清 0。 0:未发生奇偶错误。 1:发生了奇偶错误。 5 THRE1 发送保持寄存器空标志。 0:发送保持寄存器不空 — 不能写 SBUF1。 0:发送保持寄存器为空 — 可以写 SBUF1。 4 REN1 接收允许。 该位使能 / 禁止 UART 接收器。当被禁止时,仍可从接收 FIFO 中读取字节。 0:UART1 接收禁止。 1:UART1 接收允许。 3 TBX1 额外发送位。 当 XBE = 1 时,该位的逻辑电平被赋值给额外发送位。当奇偶位功能被使能时,该位未 使用。 2 RBX1 额外接收位。 当 XBE = 1 时, RBX1 被赋予额外位的值。当 XBE1 被清 0 时, RBX1 被赋予第一个停 止位的值。当奇偶位功能被使能时,该位无效。 1 TI1 发送中断标志。 在数据被发送之后、停止位开始时该位被硬件置 1。当 UART1 中断被允许时,置 1 该 位将导致 CPU 转到 UART1 中断服务程序。该位必须用软件手动清 0。 0 RI1 接收中断标志。 当 UART1 接收到一个字节数据时该位被硬件置 1 (在采样停止位时)。当 UART1 中 断被允许时,置 1 该位将会使 CPU 转到 UART1 中断服务程序。该位必须用软件手动 清 0。注意:只要 UART 接收 FIFO 中仍有数据,则 RI1 将保持置 1 状态。在最后一个 字节被从 FIFO 移到 SBUF1 后, RI1 可以被清 0。 245 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 24.2. SMODE1:UART1 方式寄存器 位 7 名称 MCE1 S1PT[1:0] PE1 类型 R/W R/W R/W 复位 0 6 5 0 0 4 3 0 2 1 0 S1DL[1:0] XBE1 SBL1 R/W R/W R/W 0 0 1 1 SFR 地址 = 0xE5 ; SFR 页 = 所有页 位 名称 7 MCE1 功能 多处理器通信使能。 0:RI 在停止位为 1 时置位。 1:RI 在停止位和额外位均为 1 时置位 (必须用 XBE1 使能额外位)。 注意:当硬件奇偶位功能被使能时,该位不可用。 6:5 S1PT[1:0] 奇偶位类型。 00:奇。 01:偶。 10:传号。 11:空号。 4 PE1 奇偶位使能。 该位使能 / 禁止硬件奇偶位产生和检查。当奇偶位功能被使能时,奇偶位类型由 S1PT1~0 位选择。 0:硬件奇偶位禁止。 1:硬件奇偶位使能。 3:2 S1DL[1:0] 数据长度。 00:5 位数据 01:6 位数据 10:7 位数据 11:8 位数据 1 XBE1 额外位使能。 当被使能时, TBX1 的值被加到数据域之后。 0:额外位禁止。 1:额外位使能。 0 SBL1 停止位长度。 0:短 — 停止位有效时间为一个位时间 (所有数据域长度)。 1:长 — 停止位有效时间为两个位时间 (数据长度 = 6、 7 或 8 位)或 1.5 个位时间 (数据长度 = 5 位)。 ??? 1.4 246 C8051F380/1/2/3/4/5/6/7/C SFR 定义 24.3. SBUF1:UART1 数据缓冲器 位 7 6 5 4 3 名称 SBUF1[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xD3 ; SFR 页 = 所有页 位 7:0 名称 描述 SBUF1[7:0] UART1 数据缓冲器位。 该 SFR 用于从 UART 发送数 据和从 UART1 接收 FIFO 接 收数据。 247 写 向 SBUF1 写入一个字节 即启动发送过程。当数据 被写入 SBUF1 时,它首 先进入发送保持寄存器等 待串行发送。当发送移位 寄存器可用时,数据被传 送到移位寄存器,此时可 再次向 SBUF1 写数据。 ??? 1.4 读 读 SBUF1 时从接收 FIFO 中提取数据。读 SBUF1 时,返回 FIFO 中最老的 字节,该字节被从 FIFO 中清除。 FIFO 中最多可以 保持 3 个字节。如果 FIFO 中还有数据字节可读,则 RI1 位将保持在逻辑 1 状 态,不能被软件清 0。 C8051F380/1/2/3/4/5/6/7/C SFR 定义 24.4. SBCON1:UART1 波特率发生器控制寄存器 位 7 6 5 4 3 2 SB1RUN 名称 1 0 SB1PS[1:0] 类型 R/W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xAC ; SFR 页 = 所有页 位 名称 7 保留 SB1RUN 6 功 能 读 = 0b ;必须写 0b。 波特率发生器使能。 0:波特率发生器禁止。 UART1 不能工作。 1:波特率发生器使能。 保留 读 = 0000b ;必须写 0000b。 1:0 SB1PS[1:0] 波特率预分频选择。 5:2 00:预分频 = 12 01:预分频 = 4 10:预分频 = 48 11:预分频 = 1 SFR 定义 24.5. SBRLH1:UART1 波特率发生器高字节 位 7 6 5 4 3 名称 SBRLH1[7:0] 类型 R/W 复位 0 0 0 0 0 SFR 地址 = 0xB5 ; SFR 页 = 所有页 位 功能 名称 7:0 SBRLH1[7:0] UART1 波特率发生器重载值高位。 UART1 波特率发生器重载值的高字节。 ??? 1.4 248 C8051F380/1/2/3/4/5/6/7/C SFR 定义 24.6. SBRLL1:UART1 波特率发生器低字节 位 7 6 5 4 3 名称 SBRLL1[7:0] 类型 R/W 复位 0 0 0 0 0 SFR 地址 = 0xB4 ; SFR 页 = 所有页 位 功能 名称 7:0 SBRLL1[7:0] UART1 波特率发生器重载值低位。 UART1 波特率发生器重载值的低字节。 249 ??? 1.4 2 1 0 0 0 0 C8051F380/1/2/3/4/5/6/7/C 25. 增强型串行外设接口 (SPI0) 增强型串行外设接口 (SPI0) 提供访问灵活的全双工同步串行总线的能力。SPI0 可以作为主器件或从器件工 作,可以使用 3 线或 4 线方式,并可在同一 SPI 总线上支持多个主器件和从器件。从选择信号 (NSS) 可被 配置为输入,以选择工作在从方式的 SPI0,或在多主环境中禁止主方式操作,以避免两个以上主器件试图 同时进行数据传输时发生 SPI 总线冲突。 NSS 可以被配置为片选输出 (在主方式),或在 3 线操作时被禁 止。在主方式,可以用其它通用端口 I/O 引脚选择多个从器件。 SFR 总线 SYSCLK SPI0CFG SPIBSY MSTEN CKPHA CKPOL SLVSEL NSSIN SRMT RXBMT SPI0CN SPIF WCOL MODF RXOVRN NSSMD1 NSSMD0 TXBMT SPIEN SPI0CKR SCR7 SCR6 SCR5 SCR4 SCR3 SCR2 SCR1 SCR0 时 钟分频逻辑 SP I 控制逻辑 SPI IRQ 数 据通路 控 制 引脚 接口 控 制 MOSI Tx 数据 SPI0DAT SCK 发 送数据缓 冲器 移位寄存器 7 6 5 4 3 2 1 0 Rx 数据 引脚 控制 逻辑 MISO 接 收数据缓 冲器 写 SPI 0DAT 交 叉 开 关 端口I/O NSS 读 SPI 0DA T SFR 总线 图 25.1. SPI 原理框图 ??? 1.4 250 C8051F380/1/2/3/4/5/6/7/C 25.1. 信号说明 下面介绍 SPI0 所使用的 4 个信号 (MOSI、 MISO、 SCK、 NSS)。 25.1.1. 主出从入 (MOSI) 主出从入 (MOSI) 信号是主器件的输出和从器件的输入,用于从主器件到从器件的串行数据传输。当 SPI0 作 为主器件时,该信号是输出;当 SPI0 作为从器件时,该信号是输入。数据传输时最高位在先。当被配置为 主器件时, MOSI 由移位寄存器的 MSB 驱动。 25.1.2. 主入从出 (MISO) 主入从出 (MISO) 信号是从器件的输出和主器件的输入,用于由从器件到主器件的串行数据传输。当 SPI0 作为主器件时,该信号是输入;当 SPI0 作为从器件时,该信号是输出。数据传输时最高位在先。当 SPI 被 禁止或工作在 4 线从方式而未被选中时,MISO 引脚被置于高阻态。当作为从器件工作在 3 线方式时,MISO 总是由移位寄存器的 MSB 驱动。 25.1.3. 串行时钟 (SCK) 串行时钟 (SCK) 信号是主器件的输出和从器件的输入,用于同步主器件和从器件之间在 MOSI 和 MISO 线 上的串行数据传输。当 SPI0 作为主器件时产生该信号。在 4 线从方式,当从器件未被选中时 (NSS=1),SCK 信号被忽略。 25.1.4. 从选择 (NSS) 从选择 (NSS) 信号的功能取决于 SPI0CN 寄存器中 NSSMD1 和 NSSMD0 位的设置。有 3 种可选择的方式: 1. NSSMD[1:0] = 00:3 线主方式或从方式:SPI0 工作在 3 线方式, NSS 被禁止。当作为从器件工作在 3 线方式时, SPI0 总是被选择。由于没有选择信号, SPI0 工作在 3 线方式时必须是总线唯一的从器件。 这种情况用于一个主器件和一个从器件之间点对点通信。 2. NSSMD[1:0] = 01:4 线从方式或多主方式:SPI0 工作在 4 线方式, NSS 被使能为输入。当作为从器件 时, NSS 选择 SPI0 器件。当作为主器件时, NSS 信号的负跳变禁止 SPI0 的主器件功能,以便可以在 同一个 SPI 总线上使用多个主器件。 3. NSSMD[1:0] = 1x:4 线主方式:SPI0 工作在 4 线方式, NSS 被使能为输出。 NSSMD0 的设置值决定 NSS 引脚的输出逻辑电平。这种配置只能在 SPI0 作为主器件时使用。 图 25.2 、图 25.3 和图 25.4 给出了不同工作方式下的典型连接图。注意:NSSMD 位的设置影响器件的引 脚分配。当工作在 3 线主或从方式时, NSS 不被交叉开关分配引脚。在所有其它方式, NSS 被映射到器件 引脚。有关通用端口 I/O 和交叉开关的信息见第 153 页节 20.“ 端口输入 / 输出 ”。 25.2. SPI0 主方式操作 SPI 总线上的所有数据传输都由 SPI 主器件启动。通过置 1 主允许标志 (MSTEN, SPI0CFG.6)将 SPI0 设置为主方式。当处于主方式时,向 SPI0 数据寄存器 (SPI0DAT) 写入一个数据字节时是写发送缓冲器。如 果 SPI 移位寄存器为空,发送缓冲器中的数据字节被传送到移位寄存器,数据传输开始。 SPI0 主器件立即 在 MOSI 线上串行移出数据,同时在 SCK 上提供串行时钟。在传输结束后 SPIF (SPI0CN.7) 标志被置为逻 辑 1。如果中断被允许,在 SPIF 标志置位时将产生中断请求。在全双工操作中,当 SPI 主器件在 MOSI 线 向从器件发送数据时,被寻址的 SPI 从器件可以同时在 MISO 线上向主器件发送其移位寄存器中的内容。因 此,SPIF 标志既作为发送完成标志又作为接收数据就绪标志。从从器件接收的数据字节以 MSB 在先的形式 传送到主器件的移位寄存器。当一个数据字节被完全移入移位寄存器时,便被传送到接收缓冲器,处理器通 过读 SPI0DAT 来读该缓冲器。 当被配置为主器件时,SPI0 可以工作在下面的三种方式之一:多主方式、3 线单主方式或 4 线单主方式。当 NSSMD1 (SPI0CN.3) =0 且 NSSMD0 (SPI0CN.2) =1 时,是默认的多主方式。在该方式,NSS 是器件的输 入,用于 禁止主 SPI0,以允许另 一主器件 访问总线。在 该方式,当 NSS 被拉为低 电平时, MSTEN 251 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C (SPI0CN.6) 和 SPIEN (SPI0CN.0) 位被清 0,以禁止 SPI 主器件,且方式错误标志 (MODF, SPI0CN.5) 被置 1。如果中断被允许,将产生方式错误中断。在这种情况下,必须用软件重新使能 SPI0。在多主系统 中,当器件不作为系统主器件使用时,一般被默认为从器件。在多主方式,可以用通用 I/O 引脚对从器件单 独寻址 (如果需要)。图 25.2 给出了两个主器件在多主方式下的连接图。 当 NSSMD1 (SPI0CN.3) = 0 且 NSSMD0 (SPI0CN.2) = 0 时,SPI0 工作在 3 线单主方式。在该方式,NSS 未使用,也不被交叉开关映射到外部端口引脚。在该方式,应使用通用 I/O 引脚选择要寻址的任何从器件。 图 25.3 给出了一个 3 线主方式主器件和一个从器件的连接图。 当 NSSMD1 (SPI0CN.3) = 1 时, SPI0 工作在 4 线单主方式。在该方式, NSS 被配置为输出引脚,可被用 作从选择信号去选中一个 SPI 器件。在该方式, NSS 的输出值由 NSSMD0 (SPI0CN.2) 控制 (用软件)。 可以用通用 I/O 引脚寻址另外的从器件。图 25.4 给出了一个 4 线主方式主器件和两个从器件的连接图。 主器件 1 N SS GPIO M ISO M ISO M OSI M OSI SC K SC K GPIO N SS 主器件 2 图 25.2. 多主方式连接图 主器件 从器件 M ISO M ISO M OSI M OSI SC K SC K 图 25.3. 3 线单主方式和 3 线单从方式连接图 ??? 1.4 252 C8051F380/1/2/3/4/5/6/7/C 主器件 GPIO M ISO M ISO M OSI M OSI SC K SC K N SS N SS M ISO M OSI 从器件 从器件 SC K N SS 图 25.4. 4 线主方式和 4 线从方式连接图 25.3. SPI 从方式操作 当 SPI0 被使能而未被配置为主器件时,它将作为 SPI 从器件工作。作为从器件,由主器件控制串行时钟 (SCK) 信号,从 MOSI 引脚移入数据,从 MISO 引脚移出数据。 SPI0 逻辑中的位计数器对 SCK 边沿计数。 当8位数据经过移位寄存器后,SPIF标志被置为逻辑1,接收到的字节被复制到接收缓冲器。通过读SPI0DAT 来读取接收缓冲器中的数据。从器件不能启动数据传送。通过写 SPI0DAT 将要发送给主器件的数据预装到 移位寄存器。写往 SPI0DAT 的数据是双缓冲的,首先被放在发送缓冲器。如果移位寄存器为空,发送缓冲 器中的数据会立即被传送到移位寄存器。当移位寄存器中已经有数据时,SPI 将在下一次(或当前)SPI 传 输的最后一个 SCK 边沿过去后再将发送缓冲器的内容装入移位寄存器。 当被配置为从器件时,SPI0 可以工作 4 线或 3 线方式。当 NSSMD1 (SPI0CN.3) = 0 且 NSSMD0 (SPI0CN.2) = 1 时,是默认的 4 线从方式。在 4 线方式,NSS 信号被分配到一个端口引脚并被配置为数字输入。当 NSS 为逻辑 0 时, SPI0 被使能;当 NSS 为逻辑 1 时, SPI0 被禁止。在 NSS 的下降沿,位计数器被复位。注 意,对于每次字节传输,在第一个有效 SCK 边沿到来之前, NSS 信号必须被驱动到低电平至少两个系统时 钟周期。图 25.4 给出了两个 4 线方式从器件和一个主器件的连接图。 当 NSSMD1 (SPI0CN.3) = 0 且 NSSMD0 (SPI0CN.2) = 0 时,SPI0 工作在 3 线从方式。在该方式,NSS 未 使用,也不被交叉开关映射到外部端口引脚。由于在 3 线从方式无法唯一地寻址从器件,所以 SPI0 必须是 总线上唯一的从器件。需要注意的是,在 3 线从方式,没有外部手段对位计数器复位以判断是否收到一个完 整的字节。只能通过用 SPIEN 位禁止并重新使能 SPI0 来复位位计数器。图 25.3 给出了一个 3 线从器件和 一个主器件的连接图。 253 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 25.4. SPI 中断源 如果 SPI0 中断被允许,在下述 4 个标志位被置 1 时将产生中断。 注意:这 4 个标志位都必须用软件清 0。 在每次字节传输结束时, SPI 中断标志 SPIF (SPI0CN.7) 被置 1。该标志适用于所有 SPI0 方式。 如果在发送缓冲器中的数据尚未被传送到 SPI 移位寄存器时写 SPI0DAT,写冲突标志 WCOL (SPI0CN.6) 被置 1。发生这种情况时,写 SPI0DAT 的操作被忽略,不会对发送缓冲器写入。该标志适用于所有 SPI0 方式。 当 SPI0 被配置为工作于多主方式的主器件而 NSS 被拉为低电平时,方式错误标志 MODF (SPI0CN.5) 被 置 1。当发生方式错误时, SPI0CN 中的 MSTEN 和 SPI0EN 位被清 0,以禁止 SPI0 并允许另一个主器 件访问总线。 当 SPI0 被配置为从器件并且一次传输结束,而接收缓冲器中还保持着上一次传输的数据未被读取时,接 收溢出标志 RXOVRN (SPI0CN.4) 被置 1。新接收的字节将不被传送到接收缓冲器,允许前面接收的字 节被读取。引起溢出的数据字节丢失。 25.5. 串行时钟相位和极性 使用 SPI0 配置寄存器 (SPI0CFG) 中的时钟控制位可以在串行时钟相位和极性的 4 种组合中选择其一。 CKPHA 位 (SPI0CFG.5) 选择两种时钟相位(锁存数据所用的边沿)中的一种。 CKPOL 位 (SPI0CFG.4) 在 高电平有效和低电平有效的时钟之间选择。主器件和从器件必须被配置为使用相同的时钟相位和极性。在改 变时钟相位和极性期间应禁止 SPI0 (通过清除 SPI0EN 位, SPI0CN.0)。主方式下时钟和数据线的时序关 系示于图 25.5。从方式下时钟和数据的时序关系示于图 25.6 和图 25.7。注意:当 Silicon Labs 的两个 C8051F 器件通信时,不论 SPI0 工作在主方式还是从方式, CKPHA 都应被清 0。 SFR 定义 25.3 所示的 SPI0 时钟速率寄存器 (SPI0CKR) 控制主方式的串行时钟频率。当工作于从方式时该 寄存器被忽略。当 SPI 被配置为主器件时,最大数据传输率(位 / 秒)是系统时钟频率的二分之一或 12.5MHz (取较低者)。当 SPI 被配置为从器件时,全双工操作的最大数据传输率 (位 / 秒)是系统时钟频率的十分 之一,前提是主器件与从器件的系统时钟同步发出 SCK、 NSS (在 4 线从方式)和串行输入数据。如果主 器件发出的 SCK、 NSS 及串行输入数据不同步,则最大数据传输率 (位 / 秒)必须小于系统时钟频率的十 分之一。在主器件只发送数据到从器件而不需要接收从器件发出的数据 (即半双工操作)这一特殊情况下, SPI 从器件接收数据时的最大数据传输率 (位 / 秒)是系统时钟频率的四分之一,这是在假设由主器件发出 SCK、 NSS 和串行输入数据与从器件的系统时钟同步的情况下。 ??? 1.4 254 C8051F380/1/2/3/4/5/6/7/C SCK (CKPOL=0, CKPHA=0) SCK (CKPOL=0, CKPHA=1) SCK (CKPOL=1, CKPHA=0) SCK (CKPOL=1, CKPHA=1) MISO/MOSI MSB Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 NSS(在多主方式必须 保持高电平) 图 25.5. 主方式数据 / 时钟时序 SCK (CKPOL=0, CKPHA=0) SCK (CKPOL=0, CKPHA=1) SCK (CKPOL=1, CKPHA=0) SCK (CKPOL=1, CKPHA=1) MISO/MOSI MSB Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 NSS( 在多主方式必须 保持高电平) 图 25.6. 主方式数据 / 时钟时序 (CKPHA = 0) 255 ??? 1.4 Bit 1 Bit 0 C8051F380/1/2/3/4/5/6/7/C SCK (CKPOL=0, CKPHA=0) SCK (CKPOL=1, CKPHA=0) MOSI MISO MSB MSB Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 NSS(4线方式) 图 25.7. 从方式数据 / 时钟时序 (CKPHA = 1) 25.6. SPI 特殊功能寄存器 对 SPI0 的访问和控制是通过系统控制器中的 4 个特殊功能寄存器实现的:控制寄存器 SPI0CN、数据寄存 器 SPI0DAT、配置寄存器 SPI0CFG 和时钟频率寄存器 SPI0CKR。下面的 SFR 定义将介绍这些与 SPI0 总 线操作有关的特殊功能寄存器。 ??? 1.4 256 C8051F380/1/2/3/4/5/6/7/C SFR 定义 25.1. SPI0CFG:SPI0 配置寄存器 位 7 6 5 4 3 2 1 0 名称 SPIBSY MSTEN CKPHA CKPOL SLVSEL NSSIN SRMT RXBMT 类型 R R/W R/W R/W R R R R 复位 0 0 0 0 0 1 1 1 SFR 发址 = 0xA1 ; SFR 页 = 所有页 位 名称 7 SPIBSY 功 能 SPI 忙标志。 当一次 SPI 传输正在进行时 (主或从方式),该位被置为逻辑 1。 6 MSTEN 主方式使能。 0:禁止主方式,工作在从方式。 1:使能主方式,工作在主方式。 5 CKPHA SPI0 时钟相位。 该位控制 SPI 时钟的相位。 0:数据以 SCK 周期的第一个边沿为中心 *。 1:数据以 SCK 周期的第二个边沿为中心 *。 4 CKPOL SPI0 时钟极性。 该位控制 SPI 时钟的极性。 0:SCK 在空闲状态时处于低电平。 1:SCK 在空闲状态时处于高电平。 3 SLVSEL 2 NSSIN 从选择标志。 当 NSS 引脚为低电平时该位被置 1,指示 SPI0 是被选中的从器件。当 NSS 引脚 为高电平时 (未被选中为从器件)该位被清 0。该位不指示 NSS 引脚的即时值, 而是该引脚输入的去噪版本。 NSS 引脚即时输入。 该位指示读该寄存器时 NSS 端口引脚的即时值。该信号未被去噪。 1 SRMT 移位寄存器空标志 (仅在从方式有效) 当所有数据都被移入 / 移出移位寄存器并且没有新数据可以从发送缓冲器读出或向 接收缓冲器写入时,该位被置 1。当数据字节被从发送缓冲器传送到移位寄存器或 SCK 发生变化时,该位被清 0。在主方式时 SRMT = 1。 0 RXBMT 接收缓冲器空标志 (仅在从方式有效)。 当接收缓冲器被读取并且没有新数据时,该位被置为逻辑 1。如果在接收缓冲器中 还有新数据未被读取,则该位又被清 0。在主方式时, RXBMT = 1。 注: 257 在从方式, MOSI 上的数据是在每个数据位的中间被采样。在主方式, MISO 上的数据是在每个数据位结束前 一个 SYSCLK 被采样,为从器件提供最大的建立时间。时序参数见表 25.1。 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 25.2. SPI0CN:SPI0 控制寄存器 位 7 6 5 4 名称 SPIF WCOL MODF RXOVRN 类型 R/W R/W R/W R/W 复位 0 0 0 0 3 2 1 0 NSSMD[1:0] TXBMT SPIEN R/W R R/W 1 0 0 1 SFR 地址 = 0xF8 ; SFR 页 = 所有页;可位寻址 位 名称 7 SPIF 功 能 SPI0 断标志。 该位在一次数据传送结束后被硬件置为逻辑 1。如果 SPI 中断被使能,则会产生中 断。该位不能被硬件自动清 0,必须用软件清 0。 6 WCOL 写冲突标志。 如果在 TXBMT 为 0 时试图写 SPI0DAT,该位被硬件置为逻辑 1。当这种情况发生 时,写 SPI0DAT 操作被忽略,不会写发送缓冲器。如果 SPI 中断被使能,则会产 生中断。该位不能被硬件自动清 0,必须用软件清 0。 5 MODF 方式错误标志。 当检测到主方式冲突 (NSS 为低电平, MSTEN = 1, NSSMD[1:0] = 01)时,该 位被硬件置为逻辑 1。如果 SPI 中断被使能,则会产生中断。该位不能被硬件自动 清 0,必须用软件清 0。 4 RXOVRN 接收溢出标志 (仅在从方式有效)。 当前传输的最后一位已经移入 SPI0 移位寄存器,而接收缓冲器中仍保存着前一次 传输未被读取的数据时,该位由硬件置为逻辑 1。如果 SPI 中断被使能,则会产生 中断。该位不会被硬件自动清 0,必须用软件清 0。 3:2 NSSMD[1:0] 1 TXBMT 发送缓冲器空标志。 当新数据被写入发送缓冲器时,该位被清 0。当发送缓冲器中的数据被传送到 SPI 移位寄存器时,该位被置 1,表示可以安全地向发送缓冲器写新字节。 0 SPIEN SPI0 使能。 从选择方式。 选择 NSS 工作方式 (见第 25.2 章和第 25.3 章): 00:3 线从方式或 3 线主方式。 NSS 信号不连到端口引脚。 01:4 线从方式或多主方式 (默认值)。 NSS 是器件的输入。 1x:4 线单主方式。 NSS 信号被分配一个输出引脚并输出 NSSMD0 的值。 0:禁止 SPI0。 1:使能 SPI0。 ??? 1.4 258 C8051F380/1/2/3/4/5/6/7/C SFR 定义 25.3. SPI0CKR:SPI0 时钟速率寄存器 位 7 6 5 4 名称 SCR[7:0] 类型 R/W 复位 0 0 0 0 3 2 1 0 0 0 0 0 SFR 地址 = 0xA2 ; SFR 页 = 所有页 位 名称 7:0 SCR[7:0] 功 能 SPI0 时钟频率。 当 SPI0 模块被配置为工作于主方式时,这些位决定 SCK 输出的频率。 SCK 时钟 频率是从系统时钟分频得到的,由下面的方程给出,其中:SYSCLK 是系统时钟频 率, SPI0CKR 是 SPI0CKR 寄存器中的 8 位值。 . SYSCLK f SCK = ------------------------------------------------------------2 SPI0CKR[7:0] + 1 0 <= SPI0CKR <= 255 例如:如果 SYSCLK = 2 MHz ,SPI0CKR = 0x04,则 2000000 f SCK = --------------------------2 4 + 1 f SCK = 200kHz SFR 定义 25.4. SPI0DAT:SPI0 数据寄存器 位 7 6 5 4 3 名称 SPI0DAT[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xA3 ; SFR 页 = 所有页 位 7:0 名称 功 能 SPI0DAT[7:0] SPI0 发送和接收数据。 SPI0DAT 寄存器用于发送和接收 SPI0 数据。在主方式下,向 SPI0DAT 写入数据 时,数据被放到发送缓冲器并启动发送。读 SPI0DAT 返回接收缓冲器的内容。 259 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SCK* T T MCKH MCK L T T MIS MIH M ISO MOSI * 这是对应 CKPOL = 0时的 SCK 波形。对于 CKPOL = 1,SCK波形的极性反向。 图 25.8. SPI 主方式时序 (CKPHA = 0) SCK* T T MCKH MCK L T T MIS MIH MISO MOSI * 这是对应 CKPOL = 0时的 SCK 波形。对于 CKPOL = 1,SCK波形的极性反向。 图 25.9. SPI 主方式时序 (CKPHA = 1) ??? 1.4 260 C8051F380/1/2/3/4/5/6/7/C NSS T T SE T CKL SD SCK* T CKH T T SIS SIH MOSI T SOH TSE Z TS DZ MISO * 这是对应 CKPOL = 0时的 SCK 波形。对于 CKPOL = 1,SCK波形的极性反向。 图 25.10. SPI 从方式时序 (CKPHA = 0) NSS T T SE T C KL SD SCK* T C KH T SIS T SIH MOSI TSEZ T SOH TSLH MISO * 这是对应 CKPOL = 0时的 SCK 波形。对于 CKPOL = 1,SCK波形的极性反向。 图 25.11. SPI 从方式时序 (CKPHA = 1) 261 ??? 1.4 TSDZ C8051F380/1/2/3/4/5/6/7/C 表 25.1. SPI 从方式时序参数 参数 说明 最小值 最大值 单位 主方式时序 (见图 25.8 和图 25.9) TMCKH SCK 高电平时间 1 x TSYSCLK — ns TMCKL SCK 低电平时间 1 x TSYSCLK — ns TMIS MISO 有效到 SCK 移位边沿 1 x TSYSCLK + 20 — ns TMIH SCK 移位边沿到 MISO 发生改变 0 — ns 从方式时序 * (见图 25.10 和图 25.11) TSE NSS 下降沿到第一个 SCK 边沿 2 x TSYSCLK — ns TSD 最后一个 SCK 边沿到 NSS 上升沿 2 x TSYSCLK — ns TSEZ NSS 下降沿到 MISO 有效 — 4 x TSYSCLK ns TSDZ NSS 上升沿到 MISO 变为高阻态 — 4 x TSYSCLK ns TCKH SCK 高电平时间 5 x TSYSCLK — ns TCKL SCK 低电平时间 5 x TSYSCLK — ns TSIS MOSI 有效到 SCK 采样边沿 2 x TSYSCLK — ns TSIH SCK 采样边沿到 MOSI 发生改变 2 x TSYSCLK — ns TSOH SCK 移位边沿到 MISO 发生改变 — 4 x TSYSCLK ns TSLH 最后一个 SCK 边沿到 MISO 发生改变 (只限于 CKPHA = 1) 6 x TSYSCLK 8 x TSYSCLK ns 注: TSYSCLK 为器件系统时钟 (SYSCLK)的一个周期。 ??? 1.4 262 C8051F380/1/2/3/4/5/6/7/C 263 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 26. 定时器 每个 MCU 内部都有 6 个计数器 / 定时器:其中两个 16 位计数器 / 定时器与标准 8051 中的计数器 / 定时器 兼容,另外 4 个是 16 位自动重装载定时器,可用于 SMBus 或作为通用定时器使用。这些定时器可以用于 测量时间间隔,对外部事件计数或产生周期性的中断请求。定时器 0 和定时器 1 几乎完全相同,有四种工作 方式。定时器 2、 3、 4 和 5 均可作为一个 16 位或两个 8 位自动重装载定时器。 定时器 0 和定时器 1 工作方式 定时器 2、 3、 4 和 5 工作方式 13 位计数器 / 定时器 16 位计数器 / 定时器 8 位自动重装载的计数器 / 定时器 两个 8 位计数器 / 定时器 (仅限定时器 0) 16 位自动重装载定时器 两个 8 位自动重装载定时器 定时器 0 和定时器 1 有 5 个可选择的时钟源,由定时器方式选择位 (T1M-T0M) 和时钟分频位 (SCA1-SCA0) 决定。时钟分频位定义一个预分频时钟,作为定时器 0 和 / 或定时器 1 的时钟源 (见 SFR 定义 26.1)。 定时器 0 和定时器 1 可以被配置为使用预分频时钟或系统时钟。定时器 2、3、4 和 5 可以使用系统时钟、系 统时钟 /12 或外部振荡器时钟源 /8 输出作为时钟源。 定时器 0 和定时器 1 还可以工作在计数器方式。当作为计数器使用时,在为定时器所选择的输入引脚 (T0 或 T1) 上出现负跳变时计数器 / 定时器寄存器的值加 1。对事件计数的最大频率可达到系统时钟频率的四分之 一。输入信号不需要是周期性的,但在一个给定电平上的保持时间至少应为两个完整的系统时钟周期,以保 证该电平能够被正确采样。 ??? 1.4 263 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.1. CKCON:时钟控制寄存器 位 7 6 5 4 3 2 名称 T3MH T3ML T2MH T2ML T1M T0M SCA[1:0] 类型 R/W R/W R/W R/W R/W R/W R/W 0 0 0 0 0 0 复位 SFR 地址 = 0x8E ; SFR 页 = 所有页 位 名称 7 T3MH 1 0 0 0 功 能 定时器 3 高字节时钟选择。 该位选择供给定时器 3 高字节的时钟 (仅限分割 8 位定时器方式)。 0:定时器 3 高字节使用 TMR3CN 中的 T3XCLK 位定义的时钟。 1:定时器 3 高字节使用系统时钟。 6 T3ML 定时器 3 低字节时钟选择。 该位选择供给定时器 3 的时钟。选择供给低 8 位定时器的时钟(分割 8 位定时器方式)。 0:定时器 3 低字节使用 TMR3CN 中的 T3XCLK 位定义的时钟。 1:定时器 3 低字节使用系统时钟。 5 T2MH 定时器 2 高字节时钟选择。 该位选择供给定时器 2 高字节的时钟 (仅限分割 8 位定时器方式)。 0:定时器 2 高字节使用 TMR2CN 中的 T2XCLK 位定义的时钟。 1:定时器 2 高字节使用系统时钟。 4 T2ML 定时器 2 低字节时钟选择。 该位选择供给定时器 2 的时钟。如果定时器 2 被配置为分割 8 位定时器方式,选择供给 低 8 位定时器的时钟。 0:定时器 2 低字节使用 TMR2CN 中的 T2XCLK 位定义的时钟。 1:定时器 2 低字节使用系统时钟。 3 T1 定时器 1 时钟选择。 该位选择定时器 1 的时钟源。当 C/T1 被设置为逻辑 1 时, T1M 被忽略。 0:定时器 1 使用由分频位 (SCA[1:0]) 定义的时钟。 1:定时器 1 使用系统时钟。 2 T0 定时器 0 时钟选择。 该位选择定时器 0 的时钟源。当 C/T0 被设置为逻辑 1 时, T0M 被忽略。 0:定时器 0 使用由分频位 (SCA[1:0]) 定义的时钟。 1:定时器 0 使用系统时钟。 1:0 SCA[1:0] 定时器 0/1 预分频位。 这两位控制定时器 0/1 时钟预分频。 00:系统时钟 /12 01:系统时钟 /4 10:系统时钟 /48 11:外部时钟 /8 (与系统时钟同步) 264 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.2. CKCON1:时钟控制寄存器 1 位 7 6 5 4 名称 3 2 1 0 T5MH T5ML T4MH T4ML 类型 R R R R R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xE4 ; SFR 页 = F 位 名称 7:4 未使用 T5MH 3 功 能 读 = 0000b ;写 = 忽略。 定时器 5 高字节时钟选择。 该位选择定时器 5 高字节的时钟源 (仅限分割 8 位定时器方式)。 0:定时器 5 高字节使用由 TMR5CN 中的 T5XCLK 位定义的时钟。 1:定时器 5 高字节使用系统时钟。 2 T5ML 定时器 5 低字节时钟选择。 该位选择定时器 5 的时钟源。在分割 8 位定时器方式选择低 8 位定时器的时钟源。 0:定时器 5 低字节使用由 TMR5CN 中的 T5XCLK 位定义的时钟。 1:定时器 5 低字节使用系统时钟。 1 T4MH 定时器 4 高字节时钟选择。 该位选择定时器 4 高字节的时钟源 (仅限分割 8 位定时器方式)。 0:定时器 4 高字节使用由 TMR4CN 中的 T4XCLK 位定义的时钟。 1:定时器 4 高字节使用系统时钟。 0 T4ML 定时器 4 低字节时钟选择。 该位选择定时器 4 的时钟源。在分割 8 位定时器方式选择低 8 位定时器的时钟源。 0:定时器 4 低字节使用由 TMR4CN 中的 T4XCLK 位定义的时钟。 1:定时器 4 低字节使用系统时钟。 ??? 1.4 265 C8051F380/1/2/3/4/5/6/7/C 266 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 26.1. 定时器 0 和定时器 1 每个计数器 / 定时器都是一个 16 位的寄存器,在被访问时分为两个字节:一个低字节 (TL0 或 TL1)和一 个高字节(TH0 或 TH1)。计数器 / 定时器控制寄存器 (TCON) 用于使能定时器 0 和定时器 1 以及指示它们 的状态。通过将 IE 寄存器中的 ET0 位置 1 来允许定时器 0 中断,通过将 ET1 位置 1 来允许定时器 1 中断。 这两个计数器 / 定时器都有四种工作方式,通过设置计数器 / 定时器方式寄存器 (TMOD) 中的方式选择位 T1M1-T0M0 来选择工作方式,每个定时器都可以被独立配置。下面对每种工作方式进行详细说明。 26.1.1. 方式 0 — 13 位计数器 / 定时器 在方式 0,定时器 0 和定时器 1 被作为 13 位的计数器 / 定时器使用。下面介绍对定时器 0 的配置和操作。由 于这两个定时器在工作上完全相同,所以定时器 1 的配置过程与定时器 0 一样。 TH0 寄存器保持 13 位计数器 / 定时器的高 8 位,TL0 在 TL0.4-TL0.0 位置保持低 5 位。TL0 的高 3 位 (TL0.7TL0.5) 是不确定的,在读计数值时应屏蔽掉或忽略这 3 位。作为 13 位定时器寄存器,计到 0x1FFF (全 1) 后再计一次将发生溢出,使计数值回到 0x0000,此时定时器溢出标志 TF0 (TCON.5) 被置 1 并产生中断(如 果定时器 0 中断被允许)。 C/T0 位 (TMOD.2) 选择计数器 / 定时器的时钟源。当 C/T0 被设置为逻辑 1 时,在所选定时器 0 输入引脚 (T0) 上出现的负跳变使定时器寄存器加 1 (有关选择和配置外部 I/O 引脚的详细信息见第 154 页 20.1. 节 “ 优先权交叉开关译码器 ” )。清除 C/T0 位将选择由 T0M 位 (CKCON.3) 定义的时钟作为定时器的输入。当 T0M 被置 1 时,定时器 0 的时钟为系统时钟;当 T0M 位被清 0 时,定时器 0 的时钟源由 CKCON(见 SFR 定义 26.1)中的时钟分频位定义。 当 GATE0 (TMOD.3) 为逻辑 0 或输入信号 /INT0 有效时(有效电平由 IT01CF 寄存器中的 IN0PL 位定义), 将 TR0 位 (TCON.4) 置 1 允许定时器 0 工作。将 GATE0 置 1 允许定时器受外部输入信号 /INT0 的控制,便 于脉冲宽度测量。 TR0 GATE0 INT0 计数器 / 定时器 0 1 1 1 X 0 1 1 X X 0 1 禁止 使能 禁止 使能 注意 : 注:X= 忽略。 注意,置位 TR0 并不强制定时器 0 复位。应在定时器被使能前将定时器寄存器装入所期望的初值。 与上述的 TL0 和 TH0 一样, TL1 和 TH1 构成定时器 1 的 13 位寄存器。定时器 1 的配置和控制方法与定时 器 0 一样,使用 TCON 和 TMOD 中的对应位。输入信号 /INT1 为定时器 1 所用,其极性由 IT01CF 寄存器 中的 IN1PL 位定义。 ??? 1.4 266 C8051F380/1/2/3/4/5/6/7/C CKC ON T TT T TT SS 3 3 2 2 1 0 CC M M MM M M A A H LHL 1 0 预分 频时钟 0 SYSC LK 1 TM OD G A T E 1 C T / 1 TM 1 1 T 1 M 0 G A T E 0 C T / 0 TM 0 1 IT01C F T 0 M 0 I N 1 P L I N 1 S L 2 I I NN 1 1 SS L L 1 0 I N 0 P L I N 0 S L 2 I I NN 0 0 SS L L 1 0 0 1 TC LK T R0 T L0 (5 位 ) GATE 0 交叉开关 I N0PL /IN T0 T H0 (8 位 ) TC ON T0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 中断 XO R 图 26.1. T0 方式 0 原理框图 26.1.2. 方式 1 — 16 位计数器 / 定时器 方式 1 的操作与方式 0 完全一样,所不同的是计数器 / 定时器使用全部 16 位。用与方式 0 相同的方法使能 和配置工作在方式 1 的计数器 / 定时器。 26.1.3. 方式 2 — 自动重装载的 8 位计数器 / 定时器 方式 2 将定时器 0 和定时器 1 配置为具有自动重新装入计数初值能力的 8 位计数器 / 定时器。TL0 保持计数 值,而 TH0 保持重载值。当 TL0 中的计数值发生溢出(从全 1 到 0x00)时,定时器溢出标志 TF0 (TCON.5) 被置 1,TH0 中的重载值被重新装入到 TL0。如果定时器 0 中断被允许,在 TF0 被置 1 时将产生中断。TH0 中的重载值保持不变。为了保证第一次计数正确,必须在使能定时器之前将 TL0 初始化为所希望的计数初 值。当工作于方式 2 时,定时器 1 的操作与定时器 0 完全相同。 在方式 2,定时器 1 和定时器 0 的使能和配置方法与方式 0 相同。当 GATE0 (TMOD.3) 为逻辑 0 或输入信 号 /INT0 有效时(有效电平由 IT01CF 寄存器中的 IN0PL 位定义,有关外部输入信号 /INT0 和 /INT1 的详细 说明见 SFR 定义 16.7),置位 TR0 (TCON.4) 位将使能定时器 0。 267 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C CKCON TTTTTTSS 3 3 2 2 1 0CC MMMMMM A A H LH L 1 0 预分频时钟 TMOD G A T E 1 C T T / 1 1 TM M 1 1 0 G A T E 0 C / T 0 IT01CF T 0 M 1 T 0 M 0 I N 1 P L I N 1 S L 2 I N 1 S L 1 I N 1 S L 0 I N 0 P L I N 0 S L 2 I N 0 S L 1 I N 0 S L 0 0 0 1 SYSCLK 1 T0 TL0 (8 位) TCON TCL K TR0 交叉开关 GATE0 TH0 (8 位) /INT0 IN0PL TF 1 TR1 TF 0 TR0 IE1 IT1 IE0 IT0 中断 重 装载 XOR 图 26.2. T0 方式 2 原理框图 26.1.4. 方式 3 — 两个 8 位计数器 / 定时器 (仅限定时器 0) 在方式 3 时,定时器 0 被配置为两个独立的 8 位定时器 / 计数器,计数值分别在 TL0 和 TH0 中。在 TL0 中 的计数器 / 定时器使用 TCON 和 TMOD 中定时器 0 的控制 / 状态位:TR0、 C/T0、 GATE0 和 TF0。 TL0 既 可以使用系统时钟也可以使用一个外部输入信号作为时基。TH0 寄存器只能作为定时器使用,由系统时钟或 预分频时钟提供时基。 TH0 使用定时器 1 的运行控制位 TR1,在发生溢出时将定时器 1 的溢出标志位 TF1 置 1,所以它控制定时器 1 的中断。 定时器 1 在方式 3 时停止运行。在定时器 0 工作于方式 3 时,定时器 1 可以工作在方式 0、 1 或 2,但不能 用外部信号作为时钟,也不能设置 TF1 标志和产生中断。但是定时器 1 溢出可以用于为其它外设产生波特 率或溢出条件。当定时器 0 工作在方式 3 时,定时器 1 的运行控制由其方式设置决定。为了在定时器 0 工作 于方式 3 时使用定时器 1,应将定时器 1 的工作方式设置为 0、1 或 2。如果要禁止定时器 1,将其配置为方 式 3 即可。 ??? 1.4 268 C8051F380/1/2/3/4/5/6/7/C CKC ON T T T T T T SS 3 3 2 21 0CC M MM M MM A A HLH L 10 预分 频时钟 T MOD G A T E 1 C T T / 1 1 T MM 1 1 0 GC A / T T E 0 0 TT 0 0 MM 1 0 0 T R1 TH0 (8 位) TC ON 1 SYSC LK 0 1 T0 TL 0 (8 位) TR 0 交叉 开关 /IN T0 GATE0 IN 0PL XOR 图 26.3. T0 方式 3 原理框图 269 ??? 1.4 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 中断 中断 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.3. TCON:定时器控制寄存器 位 7 6 5 4 3 2 1 0 名称 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 类型 R/W R/W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0x88 ; SFR 页 = 所有页;可位寻址 位 名称 7 TF1 功能 定时器 1 溢出标志。 当定时器 1 溢出时由硬件置 1。该位可以用软件清 0,但当 CPU 转向定时器 1 中断 服务程序时该位被自动清 0。 6 TR1 定时器 1 运行控制。 通过将该位置 1 来使能定时器 1。 5 TF0 定时器 0 溢出标志。 当定时器 0 溢出时由硬件置 1。该位可以用软件清 0,但当 CPU 转向定时器 0 中断 服务程序时该位被自动清 0。 4 TR0 定时器 0 运行控制。 通过将该位置 1 来使能定时器 0。 3 IE1 外部中断 1 标志。 当检测到一个由 IT1 定义的边沿 / 电平时,该标志由硬件置 1。该位可以用软件清 0, 但在边沿触发方式下当 CPU 转向外部中断 1 的中断服务程序时被自动清 0。 2 IT1 中断 1 类型选择。 该位选择 /INT1 中断是边沿触发还是电平触发。可以用 IT01CF 寄存器中的 IN1PL 位 将 /INT1 配置为低电平有效或高电平有效 (见 SFR 定义 16.7)。 0:/INT1 为电平触发。 1:/INT1 为边沿触发。 1 IE0 外部中断 0 标志。 当检测到一个由 IT0 定义的边沿 / 电平时,该标志由硬件置 1。该位可以用软件清 0, 但在边沿触发方式下当 CPU 转向外部中断 0 的中断服务程序时被自动清 0。 0 IT0 中断 0 类型选择。 该位选择 /INT0 中断是边沿触发还是电平触发。可以用 IT01CF 寄存器中的 IN0PL 位 将 /INT0 配置为低电平有效或高电平有效 (见 SFR 定义 16.7)。 0:/INT0 为电平触发。 1:/INT0 为边沿触发。 ??? 1.4 270 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.4. TMOD:定时器方式寄存器 位 7 6 名称 GATE1 C/T1 类型 R/W R/W 复位 0 0 5 4 3 2 T1M[1:0] GATE0 C/T0 T0M[1:0] R/W R/W R/W R/W 0 0 0 0 1 0 0 0 SFR 地址 = 0x89 ; SFR 页 = 所有页 位 名称 7 GATE1 功能 定时器 1 门控位。 0:当 TR1=1 时定时器 1 工作,与 /INT1 的逻辑电平无关。 1:只有当 TR1=1 并且 /INT1 有效时定时器 1 才被使能 (有效电平由 IT01CF 寄存器 中的 IN1PL 位定义,见 SFR 定义 16.7)。 6 C/T1 计数器 / 定时器 1 功能选择。 0:定时器功能:定时器 1 由 CKCON 寄存器中的 T1M 位定义的时钟加 1。 1:计数器功能:定时器 1 由外部输入引脚 (T1)的负跳变加 1。 5:4 T1M[1:0] 定时器 1 方式选择。 这些位选择定时器 1 的工作方式。 00:方式 0:13 位计数器 / 定时器 01:方式 1:16 位计数器 / 定时器 10:方式 2:自动重装载的 8 位计数器 / 定时器 11:方式 3:定时器 1 停止运行 3 GATE0 定时器 0 门控位。 0:当 TR0=1 时定时器 0 工作,与 /INT0 的逻辑电平无关。 1:只有当 TR0=1 并且 /INT0 有效时定时器 0 才被使能 (有效电平由 IT01CF 寄存器 中的 IN0PL 位定义,见 SFR 定义 16.7)。 2 C/T0 计数器 / 定时器 0 功能选择。 0:定时器功能:定时器 0 由 CKCON 寄存器中的 T0M 位定义的时钟加 1。 1:计数器功能:定时器 0 由外部输入引脚 (T0)的负跳变加 1。 1:0 T0M[1:0] 定时器 0 方式选择。 这些位选择定时器 0 的工作方式。 00:方式 0:13 位计数器 / 定时器 01:方式 1:16 位计数器 / 定时器 10:方式 2:自动重装载的 8 位计数器 / 定时器 11:方式 3:两个 8 位计数器 / 定时器 271 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.5. TL0:定时器 0 低字节 位 7 6 5 4 名称 TL0[7:0] 类型 R/W 复位 0 0 0 0 3 2 1 0 0 0 0 0 3 2 1 0 0 0 0 0 SFR 地址 = 0x8A ; SFR 页 = 所有页 位 名称 7:0 TL0[7:0] 功能 定时器 0 低字节。 TL0 寄存器是 16 位定时器 0 的低字节。 SFR 定义 26.6. TL1:定时器 1 低字节 位 7 6 5 4 名称 TL1[7:0] 类型 R/W 复位 0 0 0 0 SFR 地址 = 0x8B ; SFR 页 = 所有页 位 名称 7:0 TL1[7:0] 功能 定时器 1 低字节。 TL1 寄存器是 16 位定时器 1 的低字节。 ??? 1.4 272 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.7. TH0:定时器 0 高字节 位 7 6 5 4 名称 TH0[7:0] 类型 R/W 复位 0 0 0 0 3 2 1 0 0 0 0 0 3 2 1 0 0 0 0 0 SFR 地址 = 0x8C ; SFR 页 = 所有页 位 名称 7:0 TH0[7:0] 功能 定时器 0 高字节。 TH0 寄存器是 16 位定时器 0 的高字节。 SFR 定义 26.8. TH1:定时器 1 高字节 位 7 6 5 4 名称 TH1[7:0] 类型 R/W 复位 0 0 0 0 SFR 地址 = 0x8D ; SFR 页 = 所有页 位 名称 7:0 TH1[7:0] 功能 定时器 1 高字节。 TH1 寄存器是 16 位定时器 1 的高字节。 273 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 26.2. 定时器 2 定时器 2 是一个 16 位的定时器,由两个 8 位 SFR 组成:TMR2L (低字节)和 TMR2H (高字节)。定时 器 2 可以工作在 16 位自动重装载方式、(分割) 8 位自二甲双胍重载方式、 USB 帧起始 (SOF) 捕捉方式或 低频振荡器 (LFO) 下降沿捕捉方式。定时器 2 的工作方式由 T2SPLIT 位 (TMR2CN.3), T2CE 位 (TMR2CN.4) 和 T2CSS 位 (TMR2CN.1) 定义。 定时器 2 的时钟源可以是系统时钟、系统时钟 /12 或外部振荡源时钟 /8. 在使用实用时钟 (RTC) 功能时,外 部时钟方式是理想的选择,此时用内部振荡器驱动系统时钟,而定时器 2 (和 / 或 PCA)的时钟由一个精确 的外部振荡器提供。注意,外部振荡源时钟 /8 与系统时钟同步。 26.2.1. 16 位自动重装载方式 当 T2SPLIT (TMR2CN.3) 为 0 时,定时器 2 工作在自动重装载的 16 位定时器方式(见图 26.4)。定时器 2 可以使用 SYSCLK, SYSCLK /12 或外部振荡器时钟 /8 作为其时钟源。当 16 位定时器寄存器发生溢出 (从 0xFFF 到 0x0000)时,定时器 2 重载寄存器 (TMR2RLH 和 TMR2RLL) 中的 16 位计数初值被自动装入到 定时器 2 寄存器,并将定时器 2 高字节溢出标志 TF2H (TMR2CN.7) 置 1。如果定时器 2 中断被允许(如果 IE.5 被置 1),则每次定时器 2 溢出都将产生中断。如果 定时器 2 中断被允许并且 TF2LEN 位 (TMR2CN.5) 被置 1,则每次低 8 位 (TMR2L) 溢出时 (从 0xFF 到 0x00)将产生中断。 C K C ON T T T T TT S S 3 3 2 2 10 CC T2 X C LK M M M M M M A A H LH L 1 0 S YS C LK / 1 2 去A DC、 S MB us 去S MB us 0 T L2 溢 出 0 S YS C LK 1 T CLK TM R 2L TM R2 H TM R 2C N TR2 外部 时钟 / 8 1 TF2H TF2 L TF2 LEN T2C E T2SPLIT TR2 T2C SS T2 XCLK 中断 TMR 2 RL L TMR 2 RL H 重 装载 图 26.4. 定时器 2 的 16 位方式原理框图 ??? 1.4 274 C8051F380/1/2/3/4/5/6/7/C 26.2.2. 8 位自动重装载定时器 当 T2SPLIT 位被置 1 时,定时器 2 工作在双 8 位定时器方式 (TMR2H 和 TMR2L)。这两个 8 位定时器都 工作在自动重装载方式,如图 26.5 所示。TMR2RLL 保持 TMR2L 的重载值,而 TMR2RLH 保持 TMR2H 的 重载值。 TMR2CN 中的 TR2 是 TMR2H 的运行控制位。当定时器 2 被配置为 8 位方式时, TMR2L 总是处 于运行状态。 每个 8 位定时器都可以被配置为使用 SYSCLK、SYSCLK/12 或外部振荡器时钟 /8 作为其时钟源。定时器 2 时钟选择位(CKCON 中的 T2MH 和 T2ML)选择 SYSCLK 或由定时器 2 外部时钟选择位(TMR2CN 中的 T2XCLK)定义的时钟源。时钟源的选择情况如下所示。 T2MH T2XCLK 0 0 1 0 1 X TMR2H 时钟源 SYSCLK / 12 外部时钟 / 8 SYSCLK T2ML T2XCLK 0 0 1 0 1 X TMR2L Clock Source SYSCLK / 12 外部时钟 / 8 SYSCLK 当 TMR2H 发生溢出时 (从 0xFF 到 0x00), TF2H 被置 1 ;当 TMR2L 发生溢出时 (从 0xFF 到 0x00), TF2L 被置 1。如果定时器 2 中断被允许,则每次 TMR2H 溢出时都将产生中断。如果定时器 2 中断被允许 并且 TF2LEN 位 (TMR2CN.5) 被置 1,则每当 TMR2L 和 TMR2H 中的任何一个发生溢出时将产生中断。在 TF2LEN 位被置 1 的情况下,软件必须检查 TF2H 和 TF2L 标志,以确定中断的来源。 TF2H 和 TF2L 标志 不能被硬件自动清除,必须用软件手动清除。 CK C ON T TT T T T S S 3 32 2 1 0 CC MMMMMMA A HLHL 1 0 T2 XC LK S YS CL K / 12 0 外 部时钟 / 8 1 TMR 2 R LH 重装载 去 SM Bu s 0 TC L K TR2 TM R2 H TM R 2R L L 重装载 S YSC L K TM R2 CN 1 TF2H TF2 L TF2 LEN T2C E T2SPL IT TR2 T2C SS T2 XCL K 中断 1 TC L K TMR 2 L 去A D C、 SM Bu s 0 图 26.5. 定时器 2 的 8 位方式原理图 26.2.3. 定时器 2 捕捉方式:USB 帧起始捕捉或 LFO 下降沿捕捉方式 当 T2CE = 1 时,定时器 2 工作在两种特殊捕捉方式之一。捕捉事件可以是 USB 帧起始 (SOF) 捕捉或低频 振荡器 (LFO) 下降沿捕捉,用 T2CSS 位选择。 USB SOF 捕捉方式可用于根据已知的 USB 主 SOF 时钟来 校准系统时钟或外部振荡器。LFO 下降沿捕捉方式可用于根据内部高频振荡器或外部时钟源校准内部低频振 荡器。当 T2SPLIT = 0 时,定时器 2 向上计数,并在计数值从 0xFFFF 变为 0x0000 时溢出。每次收到捕捉 事件时,定时器 2 寄存器 (TMR2H:TMR2L) 的内容被锁存到定时器 2 重装载寄存器 (TMR2RLH:TMR2RLL) 中,并产生定时器 2 中断 (如果被使能)。 275 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C TMR2CN TT TT TT TT FF F2 2R22 2 2 2 CS 2 C X H L L EP S C E L SL N I K T SYSC LK / 12 CKCON TT TT TTSS 33 22 10CC M MM MM MA A HLHL 10 去SMBus 0 TL2 溢出 0 TR2 外部时钟 / 8 SYSCLK T CLK 1 TMR2L TMR2H 去ADC、 SMBus 1 USB 帧起始 (SOF ) 0 捕捉 低频振荡器下 降沿 TMR2RLL TMR2R LH 1 T2CSS 使能 中断 图 26.6. 定时器 2 捕捉方式 (T2SPLIT = 0) 当 T2SPLIT = 1 时,定时器 2 寄存器 (TMR2H 和 TMR2L)分成两个 8 位计数器。每个计数器都独立地向 上计数并在计数值从 0xFF 变为 0x00 时溢出。每次收到捕捉事件时,定时器 2 寄存器被锁存到定时器 2 重 装载寄存器 (TMR2RLH 和 TMR2RLL)中,并产生定时器 2 中断 (如果被使能)。 ??? 1.4 276 C8051F380/1/2/3/4/5/6/7/C TMR2CN TT FF 2 2 HL T F 2 L E N TTTT T 2 2 R2 2 CS2 C X EP S C L S L I K T SYSCLK / 12 0 外部时钟/ 8 1 CKCON TT 3 3 MM HL TT TT 2 2 1 0 MMMM HL SS CC AA 1 0 TMR2RLH 使能 捕捉 0 TCLK T R2 T MR2H 去SMBus 1 TMR2R LL 捕捉 SYSCLK 1 TCLK TMR2L 去 ADC, SMBus 0 USB 帧起始 (SOF) 0 低频振荡器下降沿 1 T2CSS 图 26.7. 定时器 2 捕捉方式 (T2SPLIT = 0) 277 ??? 1.4 中断 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.9. TMR2N:定时器 2 控制寄存器 位 7 6 5 4 3 2 1 0 名称 TF2H TF2L TF2LEN TF2CEN T2SPLIT TR2 T2CSS T2XCLK 类型 R/W R/W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xC8 ; SFR 页 = 0 ;可位寻址 位 名称 7 TF2H 功能 定时器 2 高字节溢出标志。 当定时器 2 高字节发生溢出时 (从 0xFF 到 0x00)由硬件置 1。在 16 位方式,当定 时器 2 发生从 0xFFFF 到 0x0000 的溢出时由硬件置 1。当定时器 2 中断被允许时, 该位置 1 将导致 CPU 转向定时器 2 的中断服务程序。该位不能由硬件自动清 0,必 须用软件清 0。 6 TF2L 定时器 2 低字节溢出标志。 当定时器 2 低字节发生溢出时 (从 0xFF 到 0x00)由硬件置 1。当定时器 2 中断被 允许并且 TF2LEN 位被设置为逻辑 1 时,该位置 1 将产生中断。 TF2L 在低字节溢出 时置 1,与定时器 2 的工作方式无关。该位不能由硬件自动清 0,必须用软件清 0。 5 TF2LEN 定时器 2 低字节中断允许。 该位置 1 将允许定时器 2 低字节中断。如果定时器 2 中断也被允许,则当定时器 2 低 字节发生溢出时将产生中断。当定时器 2 工作在 16 位方式时,该位应被清 0。 4 TF2CEN 定时器 2 低频振荡器捕捉使能。 该位被置 1 时使能定时器 2 低频振荡器捕捉方式。如果 TF2CEN 被置 1 且定时器 2 中断被使能,则在低频振荡器是输出的下降沿会产生中断,且 TMR2H:TMR2L 中的 当前 16 位定时器值被复制到 TMR2RLH:TMR2RLL 中。 3 T2SPLIT 定时器 2 分割方式 (双 8 位)使能。 当该位被置 1 时,定时器 2 工作在双 8 位自动重装载定时器方式。否则,定时器 2 工 作在 16 位自动重装载方式。 2 TR2 定时器 2 运行控制。 通过将该位置 1 来使能定时器 2。在 8 位方式,该位仅使能 / 禁止 TMR2H, TMR2L 在分割方式总是被使能。 1 T2CSS 定时器 2 捕捉源选择。 当 T2CE 被置 1 时,该位选择捕捉事件源。 0:捕捉源为 USB SOF 事件。 1:捕捉源为低频振荡器下降沿。 0 T2XCLK 定时器 2 外部时钟选择。 该位选择定时器 2 的外部时钟源。但仍可用定时器 2 时钟选择位 (CKCON 寄存器中 的 T2MH 和 T2ML)在外部时钟和系统时钟之间作出选择。 0:定时器 2 时钟为系统时钟 /12。 1:定时器 2 时钟为外部时钟 /8 (与系统时钟同步)。 ??? 1.4 278 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.10. TMR2RLL:定时器 2 重载寄存器低字节 位 7 6 5 4 3 名称 TMR2RLL[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 2 1 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xCA ; SFR 页 = 0 位 7:0 名称 功能 TMR2RLL[7:0] 定时器 2 重载寄存器的低字节。 TMR2RLL 保持定时器 2 重载值的低字节。 SFR 定义 26.11. TMR2RLH:定时器 2 重载寄存器高字节 位 7 6 5 4 3 名称 TMR2RLH[7:0] 类型 R/W 复位 0 0 0 0 0 SFR 地址 = 0xCB ; SFR 页 = 0 位 名称 功能 7:0 TMR2RLH[7:0] 定时器 2 重载寄存器的高字节。 TMR2RLH 保持定时器 2 重载值的高字节。 SFR 定义 26.12. TMR2L:定时器 2 低字节 位 7 6 5 4 3 名称 TMR2L[7:0] 类型 R/W 复位 0 0 0 0 0 SFR 地址 = 0xCC ; SFR 页 = 0 位 7:0 名称 功能 TMR2L[7:0] 定时器 2 低字节。 在 16 位方式, TMR2L 寄存器保持 16 位定时器 2 的低字节。在 8 位方式, TMR2L 中 保持 8 位低字节定时器值。 279 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.13. TMR2H:定时器 2 高字节 位 7 6 5 4 3 名称 TMR2H[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xCD ; SFR 页 = 0 位 7:0 名称 功能 TMR2H[7:0] 定时器 2 高字节。 在 16 位方式, TMR2H 寄存器保持 16 位定时器 2 的高字节。在 8 位方式, TMR2H 中保持 8 位高字节定时器值。 ??? 1.4 280 C8051F380/1/2/3/4/5/6/7/C 281 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 26.3. 定时器 3 定时器 3 是一个 16 位定时器,由两个 8 位的 SFR 组成:TMR3L (低字节)和 TMR3H (高字节)。定时 器 3 可以工作在 16 位自动重装载方式、(分割) 8 位自动重装载方式 (两个 8 位定时器)、 USB 帧起始 (SOF) 捕捉方式或低频振荡器 (LFO) 上升沿捕捉方式。T3SPLIT 位 (TMR3CN.3)、T3CE 位 (TMR3CN.4) 和 T3CSS 位 (TMR3CN.1) 定义定时器 3 的工作方式。 定时器 3 的时钟源可以是系统时钟、系统时钟 /12 或外部振荡源时钟 /8。在使用实时时钟 (RTC) 功能时,外 部时钟方式是理想的选择,此时用内部振荡器驱动系统时钟,而定时器 3 (和 / 或 PCA)的时钟由一个精确 的外部振荡器提供。注意,外部振荡源时钟 /8 与系统时钟同步。 26.3.1. 16 位自动重装载方式 当 T3SPLIT 位 (TMR3CN.3) 为 0 时,定时器 3 工作在自动重装载的 16 位定时器方式 (见图 26.8)。定时 器 3 可以使用 SYSCLK、 SYSCLK/12 或外部振荡器时钟 /8 作为其时钟源。当 16 位定时器寄存器发生溢出 (从 0xFFFF 到 0x0000)时,定时器 3 重载寄存器 (TMR3RLH 和 TMR3RLL)中的 16 位计数初值被自动 装入到定时器 3 寄存器,并将定时器 3 高字节溢出标志 TF3H (TMR3CN.7) 置 1。如果定时器 3 中断被允许 (如果 EIE1.7 被置 1),则每次定时器 3 溢出都将产生中断。如果定时器 3 中断被允许并且 TF3LEN 位 (TMR3CN.5) 被置 1,则每次低 8 位 (TMR3L) 溢出时 (从 0xFF 到 0x00)将产生中断。 T3 XC L K S YS C LK / 12 C KC ON T T T T T TS S 3 3 2 2 1 0CC M M M M MM A A HL HL 1 0 去 A DC 0 0 S YSC L K 1 TCLK TMR 3L TMR3 H TMR 3 CN T R3 外部 时钟 / 8 1 TF3H TF3 L TF3 LEN T3C E T3SPL IT TR3 T3C SS T3XCL K 中断 TM R 3R LL TM R 3R LH 重装 载 图 26.8. 定时器 3 的 16 位方式原理框图 ??? 1.4 281 C8051F380/1/2/3/4/5/6/7/C 26.3.2. 8 位自动重装载定时器 当 T3SPLIT 位 (TMR3CN.3) 为 1 且 T3CE = 0 时,定时器 3 工作在双 8 位定时器方式(TMR3H 和 TMR3L)。 两个 8 位定时器 TMR3H 和 TMR3L 都工作在自动重装载方式 (见图 26.9)。 TMR3RLL 保持 TMR3L 的重 载值,而 TMR3RLH 保持 TMR3H 的重载值。 TMR3CN 中的 TR3 是 TMR3H 的运行控制位。当定时器 3 被 配置为 8 位方式时, TMR3L 总是处于运行状态。 每个 8 位定时器都可以被配置为使用 SYSCLK、SYSCLK/12 或外部振荡器时钟 /8 作为其时钟源。定时器 3 时钟选择位(CKCON 中的 T3MH 和 T3ML)选择 SYSCLK 或由定时器 3 外部时钟选择位(TMR3CN 中的 T3XCLK)定义的时钟源。时钟源的选择情况如下所示。 T3MH 0 0 1 T3XCLK 0 1 X TMR3H 时钟源 SYSCLK / 12 外部时钟 / 8 SYSCLK T3ML 0 0 1 T3XCLK 0 1 X TMR3L 时钟源 SYSCLK / 12 外部时钟 / 8 SYSCLK 当 TMR3H 发生溢出时 (从 0xFF 到 0x00), TF3H 被置 1 ;当 TMR3L 发生溢出时 (从 0xFF 到 0x00), TF3L 被置 1。如果定时器 3 中断被允许,则每次 TMR3H 溢出时都将产生中断。如果定时器 3 中断被允许 并且 TF3LEN 位 (TMR3CN.5) 被置 1,则每当 TMR3L 或 TMR3H 发生溢出时都将产生中断。在 TF3LEN 位 被使能的情况下,软件必须检查 TF3H 和 TF3L 标志,以确定中断的来源。 TF3H 和 TF3L 标志不能被硬件 自动清除,必须通过软件清除。 ltu C K C ON TT T T T T S S 33 2 2 1 0 CC MMMMMMA A HL H L 1 0 T3 XC L K S YS C LK / 12 TMR 3 R LH 重装载 0 去 AD C 0 外 部时钟 / 8 1 TC L K TR 3 TM R 3H TM R 3 RL L 重装载 S YSC L K TMR3 C N 1 TF3H TF3 L TF3LEN T3C E T3 SPL IT TR3 T3C SS T3XCL K 中断 1 TC L K TMR 3 L 0 图 26.9. 定时器 3 的 8 位方式原理框图 26.3.3. 定时器 3 捕捉方式:USB 帧起始或 LFO 下降沿 当 T3CE = 1 时,定时器 3 工作在两种特殊捕捉方式之一。捕捉事件可以是 USB 帧起始 (SOF) 捕捉或低频 振荡器 (LFO) 下降沿捕捉,用 T3CSS 位选择。 USB SOF 捕捉方式可用于根据已知的 USB 主 SOF 时钟来 校准系统时钟或外部振荡器。LFO 下降沿捕捉方式可用于根据内部高频振荡器或外部时钟源校准内部低频振 荡器。当 T3SPLIT = 0 时,定时器 3 向上计数,并在计数值从 0xFFFF 变为 0x0000 时溢出。每次收到捕捉 事件时,定时器 3 寄存器 (TMR3H:TMR3L) 的内容被锁存到定时器 3 重装载寄存器 (TMR3RLH:TMR3RLL) 中,并产生定时器 3 中断 (如果被使能)。 282 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C TMR3CN T F 3 H T F 3 L TT F3 3C LE E N SYSCLK / 12 TT TT 3 R 3 3 S3 CX P SC L S L I K T CKCON T 3 M H TT TTTSS 3 2 2 1 0 CC MMMM MA A L H L 1 0 0 0 外部时钟 / 8 SYSCLK T R3 TCLK 1 TMR3L TMR3H 去 ADC 1 USB 帧起始 (SOF) 0 捕捉 低频振荡器下降沿 TMR3RLL TMR3RLH 1 T3CSS 使能 中断 图 26.10. 定时器 3 捕捉方式 (T3SPLIT = 0) 当 T3SPLIT = 1 时,定时器 3 寄存器 (TMR3H 和 TMR3L)分成两个 8 位计数器。每个计数器都独立地向 上计数并在计数值从 0xFF 变为 0x00 时溢出。每次收到捕捉事件时,定时器 3 寄存器被锁存到定时器 3 重 装载寄存器 (TMR3RLH 和 TMR3RLL)中,并产生定时器 3 中断 (如果被使能)。 ??? 1.4 283 C8051F380/1/2/3/4/5/6/7/C TMR3CN TT FF 3 3 HL T F 3 L E N SYSCLK / 12 TTTT T 3 3 R3 3 CS3 C X EP S C L S L I K T CKC ON TT TTTT SS 3 3 2 2 1 0 CC MMMM MM A A HL HL 1 0 TMR3RLH 使能 捕捉 0 0 外部时钟 / 8 1 TCLK T R3 T MR3H To ADC 1 TMR3R LL 捕捉 SYSCLK 1 TCLK TMR3L 0 U SB 帧起始 (SOF ) 0 低频振荡器下降沿 1 T3CSS 图 26.11. 定时器 3 捕捉方式 (T3SPLIT = 0) 284 ??? 1.4 中断 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.14. TMR3CN:定时器 3 控制寄存器 位 7 6 5 4 3 2 1 0 名称 TF3H TF3L TF3LEN TF3CEN T3SPLIT TR3 T3CSS T3XCLK 类型 R/W R/W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0x91 ; SFR 页 = 0 位 名称 7 TF3H 功能 定时器 3 高字节溢出标志。 当定时器 3 高字节发生溢出时 (从 0xFF 到 0x00)由硬件置 1。在 16 位方式,当定 时器 3 发生从 0xFFFF 到 0x0000 的溢出时由硬件置 1。当定时器 3 中断被允许时, 该位置 1 将导致 CPU 转向定时器 3 的中断服务程序。该位不能由硬件自动清 0,必 须用软件清 0。 6 TF3L 定时器 3 低字节溢出标志。 当定时器 3 低字节发生溢出时 (从 0xFF 到 0x00)由硬件置 1。当定时器 3 中断被 允许并且 TF3LEN 位被设置为逻辑 1 时,该位置 1 将产生中断。 TF3L 在低字节溢出 时置 1,与定时器 3 的工作方式无关。该位不能由硬件自动清 0,必须用软件清 0。 5 TF3LEN 定时器 3 低字节中断允许。 该位置 1 将允许定时器 3 低字节中断。如果定时器 3 中断也被允许,则当定时器 3 低字节发生溢出时将产生中断。当定时器 3 工作在 16 位方式时,该位应被清 0。 4 TF3CEN 定时器 3 低频振荡器捕捉使能。 该位被置 1 时使能定时器 3 低频振荡器捕捉方式。如果 TF3CEN 被置 1 且定时器 3 中断被使能,则在低频振荡器输出的下降沿会产生中断,且 TMR3H:TMR3L 中的当 前 16 位定时器值被复制到 TMR3RLH:TMR3RLL 中。 3 T3SPLIT 定时器 3 分割方式 (双 8 位)使能。 当该位被置 1 时,定时器 3 工作在双 8 位自动重装载定时器方式。否则,定时器 3 工作在 16 位自动重装载方式。 2 TR3 定时器 3 运行控制。 通过将该位置 1 来使能定时器 3。在 8 位方式,该位仅使能 / 禁止 TMR3H, TMR3L 在分割方式总是被使能。 1 T3CSS 定时器 3 捕捉源选择。 当 T3CE 被置 1 时,该位选择捕捉事件源。 0:捕捉源为 USB SOF 事件。 1:捕捉源为低频振荡器下降沿。 0 T3XCLK 定时器 3 外部时钟选择。 该位选择定时器 3 的外部时钟源。但仍可用定时器 3 时钟选择位(寄存器 CKCON 中 的 T3MH 和 T3ML)在外部时钟和系统时钟之间作出选择。 0:定时器 3 时钟为系统时钟 /12。 1:定时器 3 时钟为外部时钟 /8 (与系统时钟同步)。 ??? 1.4 285 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.15. TMR3RLL:定时器 3 重载寄存器低字节 位 7 6 5 4 3 名称 TMR3RLL[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 2 1 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0x92 ; SFR 页 = 0 位 7:0 名称 功能 TMR3RLL[7:0] 定时器 3 重载寄存器的低字节。 TMR3RLL 保持定时器 3 重载值的低字节。 SFR 定义 26.16. TMR3RLH:定时器 3 重载寄存器高字节 位 7 6 5 4 3 名称 TMR3RLH[7:0] 类型 R/W 复位 0 0 0 0 0 SFR 地址 = 0x93 ; SFR 页 = 0 位 名称 功能 7:0 TMR3RLH[7:0] 定时器 3 重载寄存器的高字节。 TMR3RLH 保持定时器 3 重载值的高字节。 SFR 定义 26.17. TMR3L:定时器 3 低字节 位 7 6 5 4 3 名称 TMR3L[7:0] 复位 R/W 0 0 0 0 0 SFR 地址 = 0x94 ; SFR 页 = 0 位 名称 7:0 TMR3L[7:0] 功能 定时器 3 低字节。 在 16 位方式, TMR3L 寄存器保持 16 位定时器 3 的低字节。在 8 位方式, TMR3L 中保持 8 位低字节定时器的值。 286 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.18. 定时器 3 高字节 位 7 6 5 4 3 名称 TMR3H[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0x95 ; SFR 页 = 0 位 名称 7:0 TMR3H[7:0] 功能 定时器 3 高字节。 在 16 位方式, TMR3H 寄存器保持 16 位定时器 3 的高字节。在 8 位方式, TMR3H 中保持 8 位高字节定时器的值。 ??? 1.4 287 C8051F380/1/2/3/4/5/6/7/C 288 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 26.4. 定时器 4 定时器 4 是一个 16 位定时器,由两个 8 位的 SFR 组成:TMR4L (低字节)和 TMR4H (高字节)。定时 器 4 可以工作在 16 位自动重装载方式或 (分割) 8 位自动重装载方式 (两个 8 位定时器)。 T4SPLIT 位 (TMR4CN.3) 定义定时器 4 的工作方式。 定时器 4 的时钟源可以是系统时钟、系统时钟 /12 或外部振荡源 /8。注意,外部振荡源 /8 与系统时钟同步。 26.4.1. 16 位自动重装载方式 当 T4SPLIT 位 (TMR4CN.3) 为 0 时,定时器 4 工作在自动重装载的 16 位定时器方式(见图 26.12)。定时 器 4 可以使用 SYSCLK、 SYSCLK/12 或外部振荡器时钟 /8 作为其时钟源。当 16 位定时器寄存器向上计数 并发生溢出 (从 0xFFFF 到 0x0000)时,定时器 4 重载寄存器 (TMR4RLH 和 TMR4RLL)中的 16 位计 数初值被自动装入到定时器 4 寄存器,并将定时器 4 高字节溢出标志 TF4H (TMR4CN.7) 置 1。如果定时器 4 中断被允许 (如果 EIE1.7 被置 1),则每次定时器 4 溢出都将产生中断。如果定时器 4 中断被允许并且 TF4LEN 位 (TMR4CN.5) 被置 1,则每次低 8 位 (TMR4L) 溢出时 (从 0xFF 到 0x00)将产生中断。 C KC ON1 TT TT 5 5 4 4 MMMM HL H L T4XCLK SYSCLK / 12 去 ADC 0 0 SYSCLK TR4 1 TCLK TMR4 L TMR4 H TMR4CN 外部时钟 / 8 1 TMR4RLL TMR4RLH TF4 H TF4L TF4 L EN T4 CE T4S PLIT TR 4 T4C SS T4 XC LK 中断 重装载 图 26.12. 定时器 4 的 16 位方式原理框图 ??? 1.4 288 C8051F380/1/2/3/4/5/6/7/C 26.4.2. 8 位自动重装载定时器 当 T4SPLIT 位 (TMR4CN.3) 为 1 且 T4CE = 0 时,定时器 4 工作在双 8 位定时器方式(TMR4H 和 TMR4L)。 两个 8 位定时器 TMR4H 和 TMR4L 都工作在自动重装载方式(见图 26.13)。TMR4RLL 保持 TMR4L 的重 载值,而 TMR4RLH 保持 TMR4H 的重载值。 TMR4CN 中的 TR4 是 TMR4H 的运行控制位。当定时器 4 被 配置为 8 位方式时, TMR4L 总是处于运行状态。 每个 8 位定时器都可以被配置为使用 SYSCLK、SYSCLK/12 或外部振荡器时钟 /8 作为其时钟源。定时器 4 时钟选择位 (CKCON1 中的 T4MH 和 T4ML)选择 SYSCLK 或由定时器 4 外部时钟选择位 (TMR4CN 中 的 T4XCLK)定义的时钟源。时钟源的选择情况如下所示。 : T4MH T4XCLK 0 0 1 0 1 X TMR4H 时钟源 SYSCLK/12 外部时钟 /8 SYSCLK T4ML T4XCLK 0 0 1 0 1 X TMR4L 时钟源 SYSCLK/12 E 外部时钟 /8 SYSCLK 当 TMR4H 发生溢出时 (从 0xFF 到 0x00), TF4H 被置 1 ;当 TMR4L 发生溢出时 (从 0xFF 到 0x00), TF4L 被置 1。如果定时器 4 中断被允许,则每次 TMR4H 溢出时都将产生中断。如果定时器 4 中断被允许 并且 TF4LEN 位 (TMR4CN.5)被置 1,则每当 TMR4L 或 TMR4H 发生溢出时都将产生中断。在 TF4LEN 位被使能的情况下,软件必须检查 TF4H 和 TF4L 标志,以确定中断的来源。 TF4H 和 TF4L 标志不能被硬 件自动清除,必须通过软件清除。 C K C ON1 TTTT 5 5 4 4 M MM M HLH L T4 X CL K SY SC LK / 1 2 TM R 4R L H 重装 载 0 去 AD C 0 外部时 钟 / 8 1 TC LK TR 4 TMR 4H TMR 4 R LL 重装 载 S YSC L K 1 TC LK TM R4 L 0 图 26.13. 定时器 4 的 8 位方式原理框图 289 ??? 1.4 TM R4 C N 1 TF4 H TF4L TF4L EN T4CE T4 SPLIT TR 4 T4CSS T4XC LK 中断 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.19. TMR4CN:定时器 4 控制寄存器 位 7 6 5 名称 TF4H TF4L TF4LEN 类型 R/W R/W R/W 复位 0 0 0 4 3 2 1 0 T4SPLIT TR4 R R/W R/W R R/W 0 0 0 0 0 T4XCLK SFR 地址 = 0x91 ; SFR 页 = F 位 名称 7 TF4H 功能 定时器 4 高字节溢出标志。 当定时器 4 高字节发生溢出时 (从 0xFF 到 0x00)由硬件置 1。在 16 位方式,当定 时器 4 发生从 0xFFFF 到 0x0000 的溢出时由硬件置 1。当定时器 4 中断被允许时, 该位置 1 将导致 CPU 转向定时器 4 的中断服务程序。该位不能由硬件自动清 0,必 须用软件清 0。 6 TF4L 定时器 4 低字节溢出标志。 当定时器 4 低字节发生溢出时 (从 0xFF 到 0x00)由硬件置 1。当定时器 4 中断被 允许并且 TF4LEN 位被设置为逻辑 1 时,该位置 1 将产生中断。 TF4L 在低字节溢出 时置 1,与定时器 4 的工作方式无关。该位不能由硬件自动清 0,必须用软件清 0。 5 TF4LEN 定时器 4 低字节中断允许。 该位置 1 将允许定时器 4 低字节中断。如果定时器 4 中断也被允许,则当定时器 4 低字节发生溢出时将产生中断。当定时器 4 工作在 16 位方式时,该位应被清 0。 4 3 未使用 T4SPLIT 读 = 0b ;写 = 忽略。 定时器 4 分割方式 (双 8 位)使能。 当该位被置 1 时,定时器 4 工作在双 8 位自动重装载定时器方式。 0:定时器 4 工作在 16 位自动重装载方式。 1:定时器 4 工作在双 8 位自动重装载方式。 2 TR4 定时器 4 运行控制。 通过将该位置 1 来使能定时器 4。在 8 位方式,该位仅使能 / 禁止 TMR4H, TMR4L 在分割方式总是被使能。 1 0 未使用 T4XCLK 读 = 0b ;写 = 忽略。 定时器 4 外部时钟选择。 该位选择定时器 4 的外部时钟源。但仍可用定时器 4 时钟选择位 (CKCON1 中的 T4MH 和 T4ML)在外部时钟和系统时钟之间作出选择。 0:定时器 4 时钟为系统时钟 /12。 1:定时器 4 时钟为外部时钟 /8 (与系统时钟同步)。 ??? 1.4 290 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.20. TMR4RLL:定时器 4 重载寄存器低字节 位 7 6 5 4 3 名称 TMR4RLL[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 2 1 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0x92 ; SFR 页 = F 位 7:0 名称 功能 TMR4RLL[7:0] 定时器 4 重载寄存器的低字节。 TMR4RLL 保持定时器 4 重载值的低字节。 SFR 定义 26.21. TMR4RLH:定时器 4 重载寄存器高字节 位 7 6 5 4 3 名称 TMR4RLH[7:0] 类型 R/W 复位 0 0 0 0 0 SFR 地址 = 0x93 ; SFR 页 = F 位 名称 功能 7:0 TMR4RLH[7:0] 定时器 4 重载寄存器的高字节。 TMR4RLH 保持定时器 4 重载值的高字节。 SFR 定义 26.22. TMR4L:定时器 4 低字节 位 7 6 5 4 3 名称 TMR4L[7:0] 类型 R/W 复位 0 0 0 0 0 SFR 地址 = 0x94 ; SFR 页 = F 位 名称 7:0 TMR4L[7:0] 功能 定时器 4 低字节。 在 16 位方式, TMR4L 寄存器保持 16 位定时器 4 的低字节。在 8 位方式, TMR4L 中保持 8 位低字节定时器的值。 291 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.23. TMR4H:定时器 4 高字节 位 7 6 5 4 3 名称 TMR4H[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0x95 ; SFR 页 = F 位 名称 7:0 TMR4H[7:0] 功能 定时器 4 高字节。 在 16 位方式, TMR4H 寄存器保持 16 位定时器 4 的高字节。在 8 位方式, TMR4H 中保持 8 位高字节定时器的值。 ??? 1.4 292 C8051F380/1/2/3/4/5/6/7/C 293 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 26.5. 定时器 5 定时器 5 是一个 16 位定时器,由两个 8 位的 SFR 组成:TMR5L (低字节)和 TMR5H (高字节)。定时 器 5 可以工作在 16 位自动重装载方式或 8 位自动重装载方式(两个 8 位定时器)。T5SPLIT 位 (TMR5CN.3) 定义定时器 5 的工作方式。 定时器 5 的时钟源可以是系统时钟、系统时钟 /12 或外部振荡源 /8。注意,外部振荡源 /8 与系统时钟同步。 26.5.1. 16 位自动重装载方式 当 T5SPLIT 位 (TMR5CN.3) 为 0 时,定时器 5 工作在自动重装载的 16 位定时器方式(见图 26.14)。定时 器 5 可以使用 SYSCLK、 SYSCLK/12 或外部振荡器时钟 /8 作为其时钟源。当 16 位定时器寄存器向上计数 并发生溢出 (从 0xFFFF 到 0x0000)时,定时器 5 重载寄存器 (TMR5RLH 和 TMR5RLL)中的 16 位计 数初值被自动装入到定时器 5 寄存器,并将定时器 5 高字节溢出标志 TF5H (TMR5CN.7) 置 1。如果定时器 5 中断被允许 (如果 EIE1.7 被置 1),则每次定时器 5 溢出都将产生中断。如果定时器 5 中断被允许并且 TF5LEN 位 (TMR5CN.5) 被置 1,则每次低 8 位 (TMR5L) 溢出时 (从 0xFF 到 0x00)将产生中断。 C KC ON1 TT T T 55 4 4 MMMM HL HL T5 XC LK SY SC L K / 1 2 0 外部 时钟 / 8 1 去 A DC 0 T CLK TMR5 L TMR 5 H TM R 5C N SY SC LK TR5 1 TF5H TF5 L TF5 LEN T5C E T5SPL IT TR5 T5C SS T5 XCL K 中断 TMR 5 R LL TM R5 R LH 重装载 图 26.14. 定时器 5 的 16 位方式原理框图 ??? 1.4 293 C8051F380/1/2/3/4/5/6/7/C 26.5.2. 8 位自动重装载定时器 当 T5SPLIT 位 (TMR5CN.3) 为 1 且 T5CE = 0 时,定时器 5 工作在双 8 位定时器方式(TMR5H 和 TMR5L)。 两个 8 位定时器 TMR5H 和 TMR5L 都工作在自动重装载方式(见图 26.15)。TMR5RLL 保持 TMR5L 的重 载值,而 TMR5RLH 保持 TMR5H 的重载值。 TMR5CN 中的 TR5 是 TMR5H 的运行控制位。当定时器 5 被 配置为 8 位方式时, TMR5L 总是处于运行状态。 每个 8 位定时器都可以被配置为使用 SYSCLK、SYSCLK/12 或外部振荡器时钟 /8 作为其时钟源。定时器 5 时钟选择位 (CKCON1 中的 T5MH 和 T5ML)选择 SYSCLK 或由定时器 5 外部时钟选择位 (TMR5CN 中 的 T5XCLK)定义的时钟源。时钟源的选择情况如下所示。 : T5MH T5XCLK 0 0 1 0 1 X TMR5H 时钟源 SYSCLK/12 外部时钟 /8 SYSCLK T5ML T5XCLK 0 0 1 0 1 X TMR5L 时钟源 SYSCLK/12 外部时钟 /8 SYSCLK 当 TMR5H 发生溢出时 (从 0xFF 到 0x00), TF5H 被置 1 ;当 TMR5L 发生溢出时 (从 0xFF 到 0x00), TF5L 被置 1。如果定时器 5 中断被允许,则每次 TMR5H 溢出时都将产生中断。如果定时器 5 中断被允许 并且 TF5LEN 位 (TMR5CN.5) 被置 1,则每当 TMR5L 或 TMR5H 发生溢出时都将产生中断。在 TF5LEN 位 被使能的情况下,软件必须检查 TF5H 和 TF5L 标志,以确定中断的来源。 TF5H 和 TF5L 标志不能被硬件 自动清除,必须通过软件清除。 C K CON 1 TTTT 5 5 4 4 MMMM H LH L T5 X CL K SY SC LK / 1 2 TM R 5R L H 重装 载 0 去 AD C 0 外 部时钟 / 8 1 TC LK TR 5 TMR 5H TMR 5 R LL 重装 载 S YSC L K 1 TC LK TM R5 L 0 图 26.15. 定时器 5 的 8 位方式原理框图 294 ??? 1.4 TM R5 C N 1 TF5 H TF5L TF5L EN T5CE T5 SPLIT TR 5 T5CSS T5XC LK 中断 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.24. TMR5N:定时器 5 控制寄存器 位 7 6 5 名称 TF5H TF5L TF5LEN 类型 R/W R/W R/W 复位 0 0 0 4 3 2 1 0 T5SPLIT TR5 R R/W R/W R R/W 0 0 0 0 0 T5XCLK SFR 地址 = 0xC8 ; SFR 页 = F ;可位寻址 位 名称 7 TF5H 功能 定时器 5 高字节溢出标志。 当定时器 5 高字节发生溢出时 (从 0xFF 到 0x00)由硬件置 1。在 16 位方式,当定 时器 5 发生从 0xFFFF 到 0x0000 的溢出时由硬件置 1。当定时器 5 中断被允许时, 该位置 1 将导致 CPU 转向定时器 5 的中断服务程序。该位不能由硬件自动清 0,必 须用软件清 0。 6 TF5L 定时器 5 低字节溢出标志。 当定时器 5 低字节发生溢出时 (从 0xFF 到 0x00)由硬件置 1。当定时器 5 中断被 允许并且 TF5LEN 位被设置为逻辑 1 时,该位置 1 将产生中断。 TF5L 在低字节溢出 时置 1,与定时器 5 的工作方式无关。该位不能由硬件自动清 0,必须用软件清 0。 5 TF5LEN 定时器 5 低字节中断允许。 该位置 1 将允许定时器 5 低字节中断。如果定时器 5 中断也被允许,则当定时器 5 低字节发生溢出时将产生中断。当定时器 5 工作在 16 位方式时,该位应被清 0。 4 3 未使用 T5SPLIT 读 = 0b ;写 = 忽略。 定时器 5 分割方式 (双 8 位)使能。 当该位被置 1 时,定时器 5 工作在双 8 位自动重装载定时器方式。 0:定时器 5 工作在 16 位自动重装载方式。 1:定时器 5 工作在双 8 位自动重装载方式。 2 TR5 定时器 5 运行控制。 通过将该位置 1 来使能定时器 5。在 8 位方式,该位仅使能 / 禁止 TMR5H, TMR5L 在分割方式总是被使能。 1 0 未使用 T5XCLK 读 = 0b ;写 = 忽略。 定时器 5 外部时钟选择。 该位选择定时器 5 的外部时钟源。但仍可用定时器 5 时钟选择位 (寄存器 CKCON1 中 的 T5MH 和 T5ML)在外部时钟和系统时钟之间作出选择。 0:定时器 5 时钟为系统时钟 /12。 1:定时器 5 时钟为外部时钟 /8 (与系统时钟同步)。 ??? 1.4 295 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.25. TMR4RLL:定时器 5 重载寄存器低字节 位 7 6 5 4 3 名称 TMR5RLL[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 2 1 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xCA ; SFR 页 = F 位 7:0 名称 功能 TMR5RLL[7:0] 定时器 5 重载寄存器的低字节。 TMR5RLL 保持定时器 5 重载值的低字节。 SFR 定义 26.26. TMR5RLH:定时器 5 重载寄存器高字节 位 7 6 5 4 3 名称 TMR5RLH[7:0] 类型 R/W 复位 0 0 0 0 0 SFR 地址 = 0xCB ; SFR 页 = F 位 名称 功能 7:0 TMR5RLH[7:0] 定时器 5 重载寄存器的高字节。 TMR5RLH 保持定时器 5 重载值的高字节。 SFR 定义 26.27. TMR5L:定时器 5 低字节 位 7 6 5 4 3 名称 TMR5L[7:0] 类型 R/W 复位 0 0 0 0 0 SFR 地址 = 0xCC ; SFR 页 = F 位 名称 7:0 TMR5L[7:0] 功能 定时器 5 低字节。 在 16 位方式, TMR5L 寄存器保持 16 位定时器 5 的低字节。在 8 位方式, TMR5L 中保持 8 位低字节定时器的值。 296 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 26.28. TMR5H:定时器 5 高字节 位 7 6 5 4 3 名称 TMR5H[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 SFR 地址 = 0xCD ; SFR 页 = F 位 名称 7:0 TMR5H[7:0] 功能 定时器 5 高字节。 在 16 位方式, TMR5H 寄存器保持 16 位定时器 5 的高字节。在 8 位方式, TMR5H 中保持 8 位高字节定时器的值。 ??? 1.4 297 C8051F380/1/2/3/4/5/6/7/C 298 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 27. 可编程计数器阵列 可编程计数器阵列 (PCA0) 提供增强的定时器功能,与标准 8051 的计数器 / 定时器相比,它需要较少的 CPU 干预。 PCA 由一个专用的 16 位计数器 / 定时器和 5 个 16 位捕捉 / 比较模块组成。每个捕捉 / 比较模块有其 自己的 I/O 线 (CEXn),这些 I/O 线在被允许通过交叉开关连到端口 I/O。计数器 / 定时器由一个可编程的时基 信号驱动,时其信号可以在 6 个时钟源中选择:系统时钟、系统时钟 /4、系统时钟 /12、外部振荡器时钟 /8、 定时器 0 溢出或 ECI 输入引脚上的外部时钟信号。每个捕捉 / 比较模块都可被独立配置,有 6 种工作方式: 边沿触发捕捉、软件定时器、高速输出、频率输出、8 位 PWM 和 16 位 PWM(每种方式的描述见第 301 页 27.3. 节 “ 捕捉 / 比较模块 ” )。在使用实时时钟 (RTC) 功能时,外部振荡器提供。对 PCA 的配置和控制是 通过系统控制器的特殊功能寄存器来实现的。 PCA 的原理框图示于 图 27.1。 重要注意事项:PCA 的模块 4 可被用作看门狗定时器 (WDT),在系统复位后女柔 被使能为该方式。在看门 狗方式被使能时,对某些 PCA 寄存器的访问受到限制。详见第 27.4 章。 SY SCLK/12 SY SCLK/4 定时 器0溢出 E CI SY SCLK PCA 时钟 选择 电路 16位 计数 器/定 时器 外部 时钟 /8 捕捉 /比较 模块 0 捕捉/ 比较 模块 1 捕 捉/比 较 模块 2 捕捉 /比较 模块 3 捕捉/ 比较 模块 4 /WDT C EX4 C EX3 C EX2 C EX1 C EX0 ECI 交叉开关 端口 I/O 图 27.1. PCA 原理框图 ??? 1.4 298 C8051F380/1/2/3/4/5/6/7/C 27.1. PCA 计数器 / 定时器 16- 位的 PCA 计数器 / 定时器由两个 8 位的 SFR 组成:PCA0L 和 PCA0H。 PCA0H 是 16 位计数器 / 定时 器的高字节 (MSB), 而 PCA0L 是低字节 (LSB)。在读 PCAOL 时,PCA0H 的值被自动锁存到 “ 快照寄存器 ”,随后读 PCA0H 时将访问这个 “ 快照寄存器 ” 而不是 PCA0H 本身。先读 PCA0L 寄存器可以保证正确读 取整个 16 位 PCA0 计数器的值。 读 PCA0H 或 PCA0L 不影响计数器工作。 PCA0MD 寄存器中的 CPS2– CPS0 位用于选择 PCA 计数器 / 定时器的时基,如表 27.1 所示。 当计数器 / 定时器溢出时 (从 0xFFFF 到 0x0000), PCA0MD 中的计数器溢出标志 (CF) 被置为逻辑 1 并 产生一个中断请求 (如果 CF 中断被允许)。将 PCA0MD 中 ECF 位设置为逻辑 1 即可允许 CF 标志产生中 断请求。当 CPU 转向中断服务程序时, CF 位不能被硬件自动清除,必须用软件清除。清除 PCA0MD 寄存 器中的 CIDL 位将允许 PCA 在 CPU 处于空闲方式时继续正常工作。 表 27.1. PCA 时基输入选项 CPS2 0 0 0 0 1 1 1 注: CPS1 0 0 1 1 0 0 1 时间基准 系统时钟 /12 系统时钟 /4 定时器 0 溢出 ECI 下降沿 (最大速率 = 系统时钟频率 /4) 系统时钟 外部振荡器 /8* 保留 CPS0 0 1 0 1 0 1 x 外部振荡器 /8 与系统时钟同步。 IDLE PCA 0MD CW I D D T L E W D L C K C P S 2 C P S 1 C E P C S F 0 PCA 0CN CC F R C C F 4 C C F 3 C C F 2 C C F 1 C C F 0 去 SFR 总线 读PCA0L 快照 寄存器 SYSCLK/12 SYSCLK/4 定时器 0 溢出 ECI SYSCLK 外部时钟/8 000 001 010 0 011 1 PCA0H PCA0L 去 PCA 中断系统 CF 100 101 去 P CA 模块 图 27.2. PCA 计数器 / 定时器原理框图 299 溢出 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 27.2. PCA0 中断源 图 27.3 给出了 PCA 中断树的原理框图。有 6 个独立的事件标志可用于产生 PCA0 中断。它们是:主 pcauto.com.cn 计数器溢出标志 (CF),该标志在 16 位 PCA0 计数器溢出时置 1,以及每个 PCA 通道的独立 标志位 (CCF0, CCF1, CCF2, CCF3 和 CCF4),这些标志根据对应模块的工作方式被置 1。当触发条 件发生时,这些事件标志被置 1. 通过使用相应的中断允许位 (ECF 对应 CF, ECCFn 对应每个 CCFn)来 选择要产生 PCA0 中断的每个标志。要想使任何一个独立的中断源能被处理器识别,必须先总体允许 PCA0 中断。 n =0~ 4 PCA 0CP Mn P E C CM T P E W C A AA O W C M OP P TGM C 1 MP N n n n F 6 nn n n n CC F R PC A0C N CCCC CCCC FF F F 43 2 1 C C F 0 P CA 0M D C WW C C C E I DD PP PC D TL SS S F L EC 2 1 0 K 0 PCA 计数器/ 定时器溢出 1 ECCF0 EPCA0 0 PCA 模块 0 (CCF 0) 1 ECCF1 EA 0 0 1 1 中断 优先级 译码器 0 PCA 模块 1 (CCF 1) 1 ECCF2 0 PCA 模块 2 (CCF 2) 1 ECCF3 0 PCA 模块 3 (CCF 3) 1 ECCF4 PCA 模块 4 (CCF 4) 0 1 图 27.3. PCA 中断原理框图 ??? 1.4 300 C8051F380/1/2/3/4/5/6/7/C 27.3. 捕捉 / 比较模块 每个模块都可被配置为独立工作,有 6 种工作方式:边沿触发捕捉、软件定时器、高速输出、频率输出、 8 位脉宽调制器和 16 位脉宽调制器。每个模块在 CIP-51 系统控制器中都有属于自己的特殊功能寄存器 (SFR),这些寄存器用于配置模块的工作方式和与模块交换数据。表 27.2 概述了模块工作在不同方式时、 PCA0CPMn 寄存器各位的设置情况。置 ‘1’PCA0CPMn 寄存器中的 ECCFn 位将允许模块的 CCFn 中断。 表 27.2. PCA 捕捉 / 比较模块的 PCA0CPM 寄存器位设置 工作方式 PCA0CPMn 位号 7 X X X X X X 0 1 用 CEXn 的正沿触发捕捉 用 CEXn 的负沿触发捕捉 用 CEXn 的任一边沿触发捕捉 软件定时器 高速输出 频率输出 8 位脉冲宽度调制器 16 位脉冲宽度调制器 6 5 4 3 2 1 0 X 1 0 0 0 0 A X 0 1 0 0 0 A X 1 1 0 0 0 A B 0 0 1 0 0 A B 0 0 1 1 0 A B 0 0 0 1 1 A B 0 0 C 0 1 A B 0 0 C 0 1 A 注: 1. X = 任意值 (对每个单独的模块而言,该位为 1 或为 0 没有功能差别)。 2. A = 使能该模块的中断 (CCFn 被置 1 时触发 PCA 中断)。 3. B = 当被设置为 0 时,数字比较器不工作。对于高速和频率输出方式,相关引脚的电平不发生切换。在任何一 种 PWM 方式,将产生 0% 的占空比 (输出 =0)。 4. C = 被置 1 时,一个匹配事件会导致相关通道的 CCFn 标志被置 1。 301 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 27.3.1. 边沿触发的捕捉方式 在该方式, CEXn 引脚上出现的有效电平跳变导致 PCA 捕捉 PCA 计数器 / 定时器的值并将其装入到对应模 块的 16 位捕捉 / 比较寄存器 (PCA0CPLn 和 PCA0CPHn)。 PCA0CPMn 寄存器中的 CAPPn 和 CAPNn 位用于选择触发捕捉的电平变化类型:低电平到高电平 (正沿)、高电平到低电平 (负沿)或任何变化 (正 沿或负沿)。当捕捉发生时,PCA0CN 可的捕捉 / 比较标志 (CCFn) 被置为逻辑 1. 如果该模块的 CCFn 中断 被允许,将产生一个中断请求。当 CPU 转向中断服务程序时, CCFn 位不位被硬件自动清除,必须用软件 清 0. 如果 CAPPn 和 CAPNn 位都被置为逻辑 1,则可以通过直接读 CEXn 对应端口引脚的状态来确定本次 捕捉是由上升沿触发还是由下降沿触发。 PCA 中断 PCA0CPMn PCA0CN P E WC MC nF n ECC CAA O P P MPN n n n MT AO TG n n 0 0 0 0 x C C F R 0 端口 I/O 交叉开关 CEX n C C F 4 C C F 3 C C F 2 C C F 1 (去 CCFn) P W M 1 6 n x 1 C C F 0 PCA0CPLn PCA0CPH n 捕捉 0 1 PCA 时基 PCA 0L PCA0H 图 27.4. PCA 捕捉方式原理框图 注: CEXn 输入信号必须在高电平或低电平期间至少保持两个系统时钟周期,以保证能够被硬件识别。 ??? 1.4 302 C8051F380/1/2/3/4/5/6/7/C 27.3.2. 软件定时器 (比较)方式 在软件定时器方式, PCA 将计数器 / 定时器的值与模块的 16 位捕捉 / 比较寄存器 (PCA0CPHn 和 PCA0CPLn)进行比较。当发生匹配时, PCA0CN 中的捕捉 / 比较标志 (CCFn) 被置为逻辑 1。如果该模块 的 CCFn 中断被允许,将产生一个中断请求。当 CPU 转向中断服务程序时,CCFn 位不能被硬件自动清除, 必须用软件清 0。置位 PCA0CPMn 寄存器中的 ECOMn 和 MATn 位将使能软件定时器方式。 关于捕捉 / 比较寄存器的重要注意事项: 当向 PCA0 的捕捉 / 比较寄存器写入一个 16 位数值时,应先写低 字节。向 PCA0CPLn 的定入操作将 ECOMn 位清 0 ;向 PCA0CPHn 写入时将 ECOMn 位置 1。 写 PCA 0CPLn 0 ENB 复位 写 PCA0CPHn PCA 中断 ENB 1 PCA0CPMn P E C C MT P E W C AAAOWC MOP PT GMC 1 MP N n n n F 6 n n n n n x 0 0 0 0 x PCA0CN PCA0CPLn 使能 PCA0CPHn 16位比较器 PCA 时基 PCA0L PCA0H 图 27.5. PCA 软件定时器方式原理框图 303 ??? 1.4 CC F R 匹配 C C F 4 0 1 CC CC F F 3 2 C C F 1 C C F 0 C8051F380/1/2/3/4/5/6/7/C 27.3.3. 高速输出方式 在高速输出方式,每当 PCA 计数器与模块的 16 位捕捉 / 比较寄存器(PCA0CPHn 和 PCA0CPLn)发生匹 配时,模块的 CEXn 引脚上的逻辑电平将发生切换。当发生匹配时, PCA0CN 中的捕捉 / 比较标志 (CCFn) 被置为逻辑 1。如果该模块的 CCFn 中断被允许,将产生一个中断请求。当 CPU 转向中断服务程序时,CCFn 位不能被硬件自动清除,必须用软件清 0。置位 PCA0CPMn 寄存器中的 TOGn、 MATn 和 ECOMn 位将使 能高速输出方式。如果 ECOMn 被清 0,则模块的 CEXn 引脚将保持其状态,在下一个匹配事件到来时不会 发生电平切换。 关于捕捉 / 比较寄存器的重要注意事项: 当向 PCA0 的捕捉 / 比较寄存器写入一个 16 位数值时,应先写低 字节。向 PCA0CPLn 的写入操作将 ECOMn 位清 0 ;向 PCA0CPHn 写入时将 ECOMn 位置 1。 写 PCA0CPLn 0 E NB 复位 PCA 0CPMn 写 PCA0CPHn P E CCMT P W CAA AOW M O P P TG M 1 M PN n n n 6 n n n n x 0 0 0 E NB 1 E C C F n x PCA 中断 PCA0CN PCA 0CPLn 使能 C C F R PCA0CPH n 16 位比较器 匹配 C C F 4 C C F 3 C C F 0 0 TO G n 0 1 PCA0L C C F 1 1 电平切换 PCA 时基 C C F 2 CEX n 交叉开关 端口 I/O PCA0H 图 27.6. PCA 高速输出方式原理框图 ??? 1.4 304 C8051F380/1/2/3/4/5/6/7/C 27.3.4. 频率输出方式 频率输出方式在模块的相关 CEXn 引脚产生可编程频率的方波。捕捉 / 比较模块的高字节保持输出电平改变 前要计的 PCA 时钟数。所产生的方波的频率由方程 27.1 定义: F PCA F CEXn = ------------------------------------------2 PCA0CPHn 注: 对于该方程, PCA0CPHn 判断对话框看到中的值为 0x00 时,相当于 256。 方程 27.1. 方波输出频率 其中:FPCA 就由 PCA 方式寄存器 PCA0MD 中的 CPS2–0 位选择的 PCA 时钟的频率。捕捉 / 比较模块的 低字节与 PCA 计数器的低字节比较;两者匹配时,CEXn 的电平发生翻转,高字节中的低移值与 PCA0CPLn 中的匹配值相加。通过将 PCA0CPMn 寄存器中 ECOMn、TOGn 和 PWMn 位置 1 来使能频率输出方式。注 意:在该方式, MATn 一般应被设置为 0。如果 MATn 被设置为 1,则当 16 位 PCA0 计数器与通道的 16 位 捕捉比较寄存器相等时,该通道的 CCFn 标志被置 1。 写 P CA0CPLn 0 ENB 复位 写 P CA0CP Hn ENB 1 PC A0C PMn P E C CM T P E W C A A A OW C MO P P T G M C 1 MP N n n n F 6 n nn n n x 0 0 0 P CA0 C PLn 8位 加法器 翻转 x 使能 PCA 时基 8位 比较器 匹配 P CA0 L 图 27.7. PCA 频率输出方式原理框图 305 PC A0 C PH n 加 法器 使能 ??? 1.4 TOGn 0 CEXn 1 交叉开关 端口 I/O C8051F380/1/2/3/4/5/6/7/C 27.3.5. 8 位脉宽调制器方式 在 8 位 PWM 方式,PWM 输出信号的占空比用模块的 pca0cpln 捕捉 / 比较寄存器来改变。当 PCA 计数器 / 定时器的低字节 (PCA0L) PCA0CPLn 中的值相等时,CEXn 引脚上的输出被置 1 ;当 PCA0L 举出时,CEXn 输出被复位 (见图 27.8)。当计数器 / 定时器的低字节 (PCA0L) 溢出时 (从 0xFF 到 0x00), PCA0CPLn 被自动重装到模块的捕捉/比较高字节(PCA0CPHn),不需软件干预。通过将PCA0CPMn寄存器中的ECOMn 和 PWMn 位置 1 来使能 8 位脉冲宽度调制器方式。如果 MATn 被置 1,则每当发生一次 8 位比较器匹配时 (上升沿),相应模块的 CCFn 标志被置 1。 8 位 PWM 方式的占空比由方程 27.2 给出。 关于捕捉 / 比较寄存器的重要注意事项: 当向 PCA0 的捕捉 / 比较寄存器写入一个 16 位数值时,应先写低 字节。向 PCA0CPLn 写入时将 ECOMn 位清 0 ;向 PCA0CPHn 写入时将 ECOMn 位置 1。 256 – PCA0CPHn ??? = ------------------------------------------------------256 方程 27.2. 16 位 PWM 占空比 由方程 27.2 可知,最大占空比为 100% (PCA0CPHn = 0),最小占空比为 0.39% (PCA0CPHn = 0xFF)。可 以通过将 ECOMn 位清 0 来产生 0% 的占空比。 写 PCA0CPL n 0 P CA 0 CPH n ENB 复位 写 PC A0C PHn ENB 1 PC A0 CP Mn P E C CM T P E W C A A A OW C MO P P T G MC 1 MPNn n n F 6 n n n n n 0 0 0 x 0 PC A 0CP Ln x 允许 匹配 8 位比较 器 S R PCA 时 基 PC A0L SET CLR Q CEXn 交叉 开关 端口 I/O Q 溢出 图 27.8. PCA 的 8 位 PWM 方式原理框图 ??? 1.4 306 C8051F380/1/2/3/4/5/6/7/C 27.3.6. 16 位脉宽调制器方式 PCA 模块还可以工作在 16 位 PWM 方式。在该方式下,16 位捕捉 / 比较模块定义 PWM 信号低电平时间的 PCA 计数器与模块的内容一致时, CEXn 的输出被置为高电平;当 16 位计数器溢出时, CEXn 输出被置为 低电平。为了输出一个占空比可变的波形,新值的写入应与 PCA 的 CCFn 匹配中断同步。通过将 PCA0CPMn 寄存器中的 ECOMn、PWMn 和 PWM16n 位置 1 来使能 16 位 PWM 方式。为了得到可变的占空比,应允许 匹配中断 (ECCFn = 1 并且 MATn = 1),以帮助对捕捉 / 的写操作同步。如果 MATn 被置 1,则每当发生一 次 16 位比较器匹配时 (上升沿),模块的 CCFn 标志被置 1。 PCA0CN 的 CF 标志可用于检测溢出 (下降 沿)。 16 位 PWM 方式的占空比由方程 27.3 给出。 关于捕捉 / 比较寄存器的重要注意事项: 当向 PCA0 的捕捉 / 比较寄存器写入一个 16 位数值时,应先写低 字节。向 PCA0CPLn 写入时将 ECOMn 位清 0 ;向 PCA0CPHn 写入时将 ECOMn 位置 1。 65536 – PCA0CPn ??? = --------------------------------------------------------65536 方程 27.3. 16 位 PWM 占空比 由方程 27.3 可知,最大占空比为 100% (PCA0CPn = 0),最小占空比为 0.0015% (PCA0CPn = 0xFFFF)。 可以通过将 ECOMn 位清 0 来产生 0% 的占空比。 写PCA0CPLn 0 ENB 复位 写 PCA0CPHn ENB 1 P W M 1 6 n 1 PC A0 C PM n E C C MT P E C AAAOWC OP PT GM C MP N n n n F n n n n 0 0 x 0 PCA 0 CPH n PC A0 C PL n x 允许 匹配 1 6 位比 较器 S R PCA 时基 PC A0 H PC A0 L S ET CLR Q Q 溢出 图 27.9. PCA 的 16 位 PWM 方式原理框图 307 ??? 1.4 C EXn 交叉 开关 端 口 I/O C8051F380/1/2/3/4/5/6/7/C 27.4. 看门狗定时器方式 通过 PCA 的模块 4 可以实现可编程看门狗定时器 (WDT) 功能。如果两次对 WDT 更新寄存器 (PCA0CPH4) 的写操作相隔的时间超过规定的极限,WDT 将产生一次复位。可以根据需要用软件配置和使能 / 禁止 WDT。 当 PCA0MD 寄存器中的 WDTE 位被置 1 时,模块 4 被作为看门狗定时器 (WDT) 使用。模块 4 高字节与 PCA 计数器的高字节比较;模块 4 低字节保持执行 WDT 更新时要使用的偏移值。看门狗定时器在系统复位 后被使能。在看门狗定时器被使能时,对某些 PCA 寄存器的写操作受到限制。WDT 会在程序开始执行后很 短时间就产生复位。为了避免这种复位, WDT 应被显式禁止 (如果需要在系统中使用,可以重新配置和使 能 WDT)。 27.4.1. 看门狗定时器操作 当 WDT 被使能时: PCA 计数器被强制运行。 不允许写 PCA0L 和 PCA0H。 PCA 时钟源选择位 (CPS2–CPS0) 被冻结。 PCA 空闲控制位 (CIDL) 被冻结。 模块 4 被强制进行软件定时器方式。 对模块 4 方式寄存器 (PCA0CPM4) 的写操作被禁止。 当 WDT 被使能时,写 CR 位并不改变 PCA 计数器的状态;计数器将一直保持运行状态,直到 WDT 被禁 止。如果 WDT 被使能,但用户软件没有使能 PCA 计数器,则读 PCA 运行控制 (CR) 位时将返回 0。如果 在 WDT 被使能时 PCA0CPH4 与 PCA0H 发生匹配,则会产生系统复位。为了防止 WDT 复位,需要通过向 PCA0CPH4 写入任意值为更新 WDT。在写 PCA0CPH4 时,PCA0H 的值加上 PCA0CPL4 中保存的偏移值 后被装入到 PCA0CPH4 ( 见图 27.10)。 PC A0MD CW I D D T LE W D L C K C P S 2 C P S 1 C E P C S F 0 PCA0C PH4 使能 PC A0CPL 4 写 PCA0CPH4 8 位加法 器 8 位比较器 匹配 PC A0H 复位 PCA0 L 溢出 加法器 使能 图 27.10. PCA 模块 4 的看门狗定时器方式 保存在 PCA0CPH4 中的 8 位偏移值与 16 位 PCA 计数器的高字节进行比较,该偏移值是复位前 PCA0L 的 溢出次数。 PCA0L 的第一次溢出周期取决于进行更新操作时 PCA0L 的值,最长可达 256 个 PCA 时钟。总 ??? 1.4 308 C8051F380/1/2/3/4/5/6/7/C 偏移值 (PCA 时钟数)由方程 27.4 给出,其中 PCA0L 是执行更新操作时 PCA0L 寄存器的值。 . ??? = 256 PCA0CPL4 + 256 – PCA0L 方程 27.4. 看门狗定时器偏移值 (PCA 时钟数) 当 PCA0L 发生溢出并且 PCA0CPH4 和 PCA0H 匹配时,WDT 将产生一次复位。在 WDT 被使能的情况下, 软件可以通过向 CCF4 标志 (PCA0CN.4) 写 1 来强制产生 WDT 复位。 27.4.2. 看门狗定时器的使用 配置 WDT 的步骤如下: 1. 通过向 WDTE 位写 0 来禁止 WDT。 2. 选择所希望的 PCA 时钟源 (用 CPS2–CPS0 位 )。 3. 向 PCA0CPL4 装入所希望的 WDT 更新偏移值。 4. 配置 PCA 的空闲方式位 (如果希望在 CPU 处于空闲方式时 WDT 停止工作,则应将 CIDL 位置 1)。 5. 通过向 WDTE 位写 1 来使能 WDT。 6. 通过写 PCA0CPH4 来复位 WDT 定时器。 在 WDT 被使能时,不能改变 PCA 时钟源和空闲方式的设置值。通过向 PCA0MD 寄存器的 WDTE 或 WDLCK 位写 1 来使能 WDT。当 WDLCK 被置 1 时,在发生下一次系统复位之前将不能禁止 WDT。如果 WDCLK 未 被置 1,清除 WDTE 位将禁止 WDT。 WDT 在任何系统复位之后都被使能。 PCA0 计数器的默认时钟为系统时钟的十二分频 (SYSCLK/12) 。 PCA0L 和 PCA0CPL4 的默认值均为 0x00。根据方程 27.4,这些值将产生 256 个 PCA 时钟周期或 3072 个 系统时钟周期的 WDT 超时间隔。表 27.3 列出了对应某些典型系统时钟频率的超时间隔示例。 309 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 表 27.3. 看门狗定时器超时间隔 1 系统时钟 (Hz) PCA0CPL4 超时间隔 (ms) 48,000,000 255 16.4 48,000,000 128 8.3 48,000,000 32 2.1 12,000,000 255 65.5 12,000,000 128 33.0 12,000,000 32 8.4 1,500,0002 255 524.3 1,500,0002 128 264.2 1,500,0002 32 67.6 32,768 255 24,000 32,768 128 12,094 32,768 32 3,094 注: 1. 假设 PCA 使用 SYSCLK/12 作为时钟源,更新时 PCA0L 的值为 0x00。 2. 内部 SYSCLK 复位频率 = 内部振荡器频率 /8。 ??? 1.4 310 C8051F380/1/2/3/4/5/6/7/C 27.5. PCA0 寄存器说明 下面对与 PCA 工作有关的特殊功能寄存器进行详细说明。 SFR 定义 27.1. PCA0CN:PCA 控制寄存器 位 7 6 名称 CF CR 类型 R/W R/W 复位 0 0 5 4 3 2 1 0 CCF4 CCF3 CCF2 CCF1 CCF0 R R/W R/W R/W R/W R/W 0 0 0 0 0 0 SFR 地址 = 0xD8 ; SFR 页 = 所有页;可位寻址 位 名称 7 CF 功能 PCA 计数器 / 定时器溢出标志。 当 PCA 计数器 / 定时器从 0xFFFF 到 0x0000 溢出时由硬件置 1。在计数器、定时器溢 出 (CF) 中断被允许时,该位置 1 将导致 CPU 转身 PCA 中断服务程序。该位不能由硬 件自动清 0,必须用软件清 0。 6 CR PCA 计数器 / 定时器运行控制。 该位使能 / 禁止 PCA 计数器 / 定时器。 0:禁止 PCA 计数器 / 定时器。 1:使能 PCA 计数器 / 定时器。 5 2 未使用 CCF4 读 = 0b,写 = 忽略。 PCA 模块 4 捕捉 / 比较标志。 当发生一次匹配或捕捉时,该位由硬件置 1。当 CCF4 中断被允许时,该位置 1 将导致 CPU 转向 PCA 中断服务程序。该位不能由硬件自动清 0,必须用软件清 0。 1 CCF3 PCA 模块 3 捕捉 / 比较标志。 当发生一次匹配或捕捉时,该位由硬件置 1。当 CCF3 中断被允许时,该位置 1 将导致 CPU 转向 PCA 中断服务程序。该位不能由硬件自动清 0,必须用软件清 0。 2 CCF2 PCA 模块 2 捕捉 / 比较标志。 当发生一次匹配或捕捉时,该位由硬件置 1。当 CCF2 中断被允许时,该位置 1 将导致 CPU 转向 PCA 中断服务程序。该位不能由硬件自动清 0,必须用软件清 0。 1 CCF1 PCA 模块 1 捕捉 / 比较标志。 当发生一次匹配或捕捉时,该位由硬件置 1。当 CCF1 中断被允许时,该位置 1 将导致 CPU 转向 PCA 中断服务程序。该位不能由硬件自动清 0,必须用软件清 0。 0 CCF0 PCA 模块 0 捕捉 / 比较标志。 当发生一次匹配或捕捉时,该位由硬件置 1。当 CCF0 中断被允许时,该位置 1 将导致 CPU 转向 PCA 中断服务程序。该位不能由硬件自动清 0,必须用软件清 0。 311 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 27.2. PCA0MD:PCA 方式寄存器 位 7 6 5 名称 CIDL WDTE WDLCK 类型 R/W R/W R/W R 复位 0 1 0 0 4 3 2 1 0 CPS[2:0] ECF R/W R/W 0 0 0 0 SFR 地址 = 0xD9 ; SFR 页 = 所有页 位 名称 7 CIDL 功能 PCA 计数器 / 定时器空闲控制。 设置 PCA 空闲方式下 CPU 的行为。 0:当系统控制器处于空闲方式时, PCA 继续正常工作。 1:当系统控制器处于空闲方式时, PCA 停止工作。 看门狗定时器使能。 如果该位被置 1, PCA 模块 4 被用作看门狗定时器。 0:看门狗定时器被禁止。 1:PCA 模块 4 被用作看门狗定时器。 6 WDTE 5 WDLCK 4 未使用 读 = 0b,写 = 忽略。 CPS[2:0] PCA 计数器 / 定时器时钟选择。 3:1 看门狗定时器锁定。 该位对看门狗定时器使能位锁定 / 解锁。 WDLCK 被置 1 时,在发生下一次系统复位之 前将不能禁止 WDT。 0:看门狗定时器使能位未锁定。 1:看门狗定时器使能位被锁定。 这些位选择 PCA 计数器的时钟源。 000:系统时钟 /12 001:系统时钟 /4 010:定时器 0 溢出 011:ECI 下降沿 (最大速率 = 系统时钟频率 /4) 100:系统时钟 101:外部时钟 /8 (与系统时钟同步) 11x:保留。 0 ECF PCA 计数器 / 定时器溢出中断允许。 该位是 PCA 计数器 / 定时器溢出 (CF) 中断的屏蔽位。 0:禁止 CF 中断。 1:当 CF (PCA0CN.7) 被置 1 时,允许 PCA 计数器 / 定时器溢出中断请求。 注: 当 WDTE 位被置 1 时,不能改变 PCA0MD 寄存器的其它位。若要改变 PCA0MD 的内容,必须先禁止看门狗 定时器。 ??? 1.4 312 C8051F380/1/2/3/4/5/6/7/C SFR 定义 27.3. PCA0CPMn:PCA 捕捉 / 比较方式寄存器 位 7 6 5 4 3 2 1 0 名称 PWM16n ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn 类型 R/W R/W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址:0xDA (n = 0), 0xDB (n = 1), 0xDC (n = 2), 0xDD (n = 3), 0xDE (n = 4) SFR 页:所有页 (n = 0),所有页 (n = 1),所有页 (n = 2),所有页 (n = 3),所有页 (n = 4) 位 7 名称 功能 PWM16n 16 位脉冲宽度调制使能。 当脉冲宽度调制方式被使能时,该位选择 16 位方式。 0:选择 8 位 PWM。 1:选择 16 位 PWM。 6 ECOMn 比较器功能使能。 该位置 1 时使能 PCA 模块 n 的比较器功能。 5 CAPPn 正沿捕捉功能使能。 该位置 1 时使能 PCA 模块 n 的正边沿捕捉。 4 CAPNn 负沿捕捉功能使能。 该位置 1 时使能 PCA 模块 n 的负边沿捕捉。 3 MATn 匹配功能使能。 该位置 1 时使能 PCA 模块 n 的匹配功能。如果被使能,当 PCA 计数器与一个模块的捕 捉 / 比较寄存器匹配时, PCA0MD 寄存器中的 CCFn 位被置为逻辑 1。 2 TOGn 电平切换功能使能。 该位置 1 时使能 PCA 模块 n 的电平切换功能。如果被使能,当 PCA 计数器与一个模块 的捕捉 / 比较寄存器匹配时, CEXn 引脚的逻辑电平发生切换。如果 PWMn 位也被置 1,模块将工作在频率输出方式。 1 PWMn 脉宽调制方式使能。 该位置 1 时使能 PCA 模块 n 的 PWM 功能。如果被使能,当 CEXn 引脚输出脉冲宽度 调制信号。 PWM16n 为 0 时使用 8 位 PWM 方式; PWM16n 为 1 时使用 16 位方式。 如果 TOGn 位也被置 1,则模块工作在频率输出方式。 0 ECCFn 捕捉 / 比较标志中断允许。 该位置捕捉 / 比较标志 (CCFn) 的中断屏蔽。 0:禁止 CCFn 中断。 1:允许 CCFn 位被置 1 时捕捉 / 比较标志的中断请求。 注: 313 当 WDTE 位被置 1 时,不能修改 PCA0CPM4 寄存器,模块 4 工作在看门狗定时器方式。若要改变 PCA0CPM4 寄存器的内容或模块 4 的功能,必须先禁止看门狗定时器。 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C SFR 定义 27.4. PCA0L:PCA 计数器 / 定时器低字节 位 7 6 5 4 3 2 1 0 PCA0[7:0] 名称 类型 R/W R/W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xF9 ; SFR 页 = 所有页 位 7:0 名称 功能 PCA0[7:0] PCA 计数器 / 定时器的低字节。 PCA0L 寄存器保存 16 位 PCA 计数器 / 定时器的低字节 (LSB) 注: 当 WDTE 位被置 1 时,不能用软件修改 PCA0L 寄存器。若要改变 PCA0L 寄存器的内容,必须先禁止看门狗 定时器。 SFR 定义 27.5. PCA0H:PCA 计数器 / 定时器高字节 位 7 6 5 4 3 2 1 0 PCA0[15:8] 名称 类型 R/W R/W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址 = 0xFA ; SFR 页 = 所有页 位 7:0 名称 功能 PCA0[15:8] PCA 计数器 / 定时器的高字节。 PCA0H 寄存器保存 16 位 PCA 计数器 / 定时器的高字节 (MSB)。读该寄存器时读的是 “ 快照 ” 寄存器的内容,是在读 PCA0L 的内容时被锁存的 (见第 27.1 章)。 注: 当 WDTE 位被置 1 时,不能用软件修改 PCA0H 寄存器。若要改变 PCA0H 寄存器的内容,必须先禁止看门 狗定时器。 ??? 1.4 314 C8051F380/1/2/3/4/5/6/7/C SFR 定义 27.6. PCA0CPLn:PCA 捕捉模块低字节 位 7 6 5 4 3 2 1 0 PCA0CPn[7:0] 名称 类型 R/W R/W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址:0xFB (n = 0), 0xE9 (n = 1), 0xEB (n = 2), 0xED (n = 3), 0xFD (n = 4) SFR 页:所有页 (n = 0),所有页 (n = 1),所有页 (n = 2),所有页 (n = 3),所有页 (n = 4) 位 7:0 名称 功能 PCA0CPn[7:0] PCA 捕捉模块低字节。 PCA0CPLn 寄存器保存 16 位捕捉模块 n 的低字节 (LSB)。 注: 写该寄存器时将模块的 ECOMn 位清 0。 SFR 定义 27.7. PCA0CPHn:PCA 捕捉模块高字节 位 7 6 5 4 3 2 1 0 PCA0CPn[15:8] 名称 类型 R/W R/W R/W R/W R/W R/W R/W R/W 复位 0 0 0 0 0 0 0 0 SFR 地址:0xFC (n = 0), 0xEA (n = 1), 0xEC (n = 2), 0xEE (n = 3), 0xFE (n = 4) SFR 页:所有页 (n = 0),所有页 (n = 1),所有页 (n = 2),所有页 (n = 3),所有页 (n = 4) 位 名称 功能 7:0 PCA0CPn[15:8] PCA 捕捉模块高字节。 PCA0CPHn 寄存器保存 16 位捕捉模块 n 的高字节 (MSB)。 注: 315 写该寄存器时将模块的 ECOMn 位置 1。 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 28. C2 接口 C8051F380/1/2/3/4/5/6/7/C 器件内部有一个 Silicon Labs 2 线 (C2) 调试接口,支持 FLASH 编程和使用安装 在最终应用系统中的器件进行在系统调试。C2 接口使用一个时钟信号 (C2CK) 和一个双向的的 C2 数据信号 (C2D) 在器件和宿主机之间传送信息。有关 C2 协议的详细信息见 C2 接口规范。 28.1. C2 接口寄存器 下面对通过 C2 接口进行 FLASH 编程所必须的 C2 寄存器进行说明。对所有 C2 寄存器的访问都要通过 C2 接口实现 (详见 C2 接口规范)。 C2 寄存器定义 28.1. C2ADD:C2 地址寄存器 位 7 6 5 4 3 名称 C2ADD[7:0] 类型 R/W 复位 位 0 0 0 0 名称 0 2 1 0 0 0 0 功能 7:0 C2ADD[7:0] C2 地址 . C2ADD 寄存器通过 C2 接口访问,它选择 C2 数据读和数据写命令的目标数据寄存 器。 地址 0x00 0x01 0x02 0xAD 说明 选择器件 ID 寄存器 (数据读指令)。 选择版本 ID 寄存器 (数据读指令)。 选择 C2 Flash 编程控制寄存器 (数据读 / 写指令) 选择 C2 Flash 编程数据寄存器 (数据读 / 写指令) ??? 1.4 316 C8051F380/1/2/3/4/5/6/7/C C2 寄存器定义 28.2. DEVICEID:C2 器件 ID 寄存器 位 7 6 5 4 3 名称 DEVICEID[7:0] 类型 R/W 复位 0 0 1 0 1 2 1 0 0 0 0 C2 地址:0x00 位 7:0 名称 功能 DEVICEID[7:0] 器件 ID. 该只读寄存器返回 8 位的器件 ID:0x28 (C8051F380/1/2/3/4/5/6/7/C). C2 寄存器定义 28.3. REVID:C2 版本 ID 寄存器 位 7 6 5 4 3 名称 REVID[7:0] 类型 R/W 复位 可变 可变 可变 可变 可变 2 1 0 可变 可变 可变 C2 地址:0x01 位 7:0 名称 功能 REVID[7:0] 版本 ID. 该只读寄存器返回 8 位的版本 ID。例如:0x00 = 版本 A. 317 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C C2 寄存器定义 28.4. FPCTL:C2 Flash 编程控制寄存器 位 7 6 5 4 3 名称 FPCTL[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 C2 地址:0x02 位 7:0 名称 功能 FPCTL[7:0] C2 Flash 编程控制寄存器 该寄存器用于使能通过 C2 接口对 FLASH 编程。为了使能 C2 Flash 编程,必须按顺 序写代码:0x02, 0x01。注意:一旦 C2 Flash 编程被使能,必须进行一次复位才能使 系统恢复正常工作。 C2 寄存器定义 28.5. FPDAT:C2 Flash 编程数据寄存器 位 7 6 5 4 3 名称 FPDAT[7:0] 类型 R/W 复位 0 0 0 0 0 2 1 0 0 0 0 C2 地址:0xAD 位 7:0 名称 功能 FPDAT[7:0] C2 Flash 编程数据寄存器 该寄存器用于在 C2 Flash 访问期间传递 Flash 编程命令、地址和数据。下面列出了有 效的编程命令。 代码 0x06 0x07 0x08 0x03 命令 Flash 块读 Flash 块写 Flash 页擦除 器件擦除 ??? 1.4 318 C8051F380/1/2/3/4/5/6/7/C 28.2. C2 引脚共享 C2 协议允许用户功能,可在系统调试和闪存编程的 C2 引脚共享。这是可能的,因为 C2 通信设备处于停止 状态,所有片上外设和用户软件陷入僵局时,通常执行。在此停止状态, C2 接口可以安全地 “ 借用 ”C2CK (RST) 和 C2D 引脚。在大多数应用中,需要外部电阻隔离 C2 接口的流量,从用户应用程序。一个典型的隔 离配置如图 28.1 所示。 C8051Fxxx RST (a) C2CK Input (b) C2D Output (c) C2 Interface Master 图 28.1. 典型的 C2 引脚共享 在图 28.1 中的配置假设如下: 1. 用户输入 (b) 不能改变,而目标设备停止状态。 2. 目标设备上的 RST 引脚用作只能输入。 取决于具体的应用,可能需要额外的电阻。 319 ??? 1.4 C8051F380/1/2/3/4/5/6/7/C 文档更改列表 修订版 0.2 至修订版 1.0 使用最新数据更新了电气特性表:表 4.2、表 4.4、表 4.5、表 4.7、表 4.8、表 4.10、表 4.11 和 表 4.12。 将 SFR 定义 8.1 中的位 REG01CN.5 更改为保留,并在 16.9 和 18.3.1 部分中更新了相应的说明。 更新了图 18.1。振荡器选项。 更改了 SFR 定义 21.2 中的 SFR 页。 更新了 SRF 定义 18.6 中对电容器 XOSCMD 和 RC 模式的说明。 修订版 1.0 至修订版 1.1 更新了封面上的图,以反映定时器的正确数量是 6 个而不是 4 个。 更新了见第 26 页上 “ 表 3.2 TQFP-48 封装尺寸 ” 具体如下所述: 将最右边的列名从最小值更正为最大值 添加了尺寸 A、 A1、 A2、 b、 c、 L 和 q 的最大值 使用正确的 QFN-32 封装图和尺寸更新了 Figure 3.8 和表 3.6。 使用 ADC0 电源电流新的最大值更新了见第 42 页上 “ 表 5.10 ADC0 电气特性 ” 。 这解决了 2012 年 5 月 18 日勘误表中的一个问题。 添加了关于温度传感器的第 6.2 章 。 删除了 “6. 10 位 ADC (ADC0 的,只有 C8051F380/1/2/3) ” 中可编程增益的参考。 更新了见第 112 页上 “ 表 15.1 特殊功能寄存器 (SFR) 存储器映象 ” 以填补 0xC8 行所缺失的行信息。 更新了见第 120 页上 “ 表 16.1 中断一览表 ”。 TMR4CN 寄存器不可位寻址。 更新了 SFR 定义 19.1 (CLKSEL) 中 CLKSL 位的 000b 值以包括四因子。 修订版 1.1 至修订版 1.2 更新的比较器输入补偿电压规格在第 44 页的表 5.13 内。 修订版 1.2 至修订版 1.3 添加 VBUS 至见第 37 页上 “ 表 5.1 极限参数 ”。 添加 “4. 典型连接图 ” 一章。 被删除的图 8.1、图 8.2、图 8.3 和图 8.4。这些图由以下的引用所代替 “4. 典型连接图 ” 一章。 修订版 1.3 至修订版 1.4 添加了新设备 C8051F38C。 更新了 “ 闪存耐久性 ” 的最低规格、 “ 闪存擦除周期时间 ” 的最高规格,并 为第 40 页的表 5.6 添加了一条注释。 更新了图 22.1,使其可显示 SMBus0 和 SMBus1 的正常时钟源。 ??? 1.4 320 Simplicity Studio One-click access to MCU and wireless tools, documentation, software, source code libraries & more. Available for Windows, Mac and Linux! IoT Portfolio www.silabs.com/IoT SW/HW Quality Support and Community www.silabs.com/simplicity www.silabs.com/quality community.silabs.com Disclaimer Silicon Laboratories intends to provide customers with the latest, accurate, and in-depth documentation of all peripherals and modules available for system and software implementers using or intending to use the Silicon Laboratories products. Characterization data, available modules and peripherals, memory sizes and memory addresses refer to each specific device, and "Typical" parameters provided can and do vary in different applications. Application examples described herein are for illustrative purposes only. Silicon Laboratories reserves the right to make changes without further notice and limitation to product information, specifications, and descriptions herein, and does not give warranties as to the accuracy or completeness of the included information. Silicon Laboratories shall have no liability for the consequences of use of the information supplied herein. This document does not imply or express copyright licenses granted hereunder to design or fabricate any integrated circuits. The products must not be used within any Life Support System without the specific written consent of Silicon Laboratories. A "Life Support System" is any product or system intended to support or sustain life and/or health, which, if it fails, can be reasonably expected to result in significant personal injury or death. Silicon Laboratories products are generally not intended for military applications. Silicon Laboratories products shall under no circumstances be used in weapons of mass destruction including (but not limited to) nuclear, biological or chemical weapons, or missiles capable of delivering such weapons. Trademark Information Silicon Laboratories Inc., Silicon Laboratories, Silicon Labs, SiLabs and the Silicon Labs logo, CMEMS®, EFM, EFM32, EFR, Energy Micro, Energy Micro logo and combinations thereof, "the world’s most energy friendly microcontrollers", Ember®, EZLink®, EZMac®, EZRadio®, EZRadioPRO®, DSPLL®, ISOmodem ®, Precision32®, ProSLIC®, SiPHY®, USBXpress® and others are trademarks or registered trademarks of Silicon Laboratories Inc. ARM, CORTEX, Cortex-M3 and THUMB are trademarks or registered trademarks of ARM Holdings. Keil is a registered trademark of ARM Limited. All other products or brand names mentioned herein are trademarks of their respective holders. Silicon Laboratories Inc. 400 West Cesar Chavez Austin, TX 78701 USA http://www.silabs.com