S3C8275X S3F8275X S3C8278X S3F8278X S3C8274X S3F8274X 8-位CMOS单片机 中文用户手册 版本号1.4 SAMSUNG ELECTRONICS MCU PM: 刘志勇 Steven Liu YOSUN SHANGHAI CORP.LTD Tel: 021-58365838 Ext.7835 Fax: 021-58355878 H P: 13818363447 QQ: 52647598 SKYPE: FVSTEVEN MSN: [email protected] E-Mail: [email protected] 版本信息 制成者: 产品名称: 文档名称: 三星电子,LSI 开发组, 器兴,韩国 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 8 位CMOS MCU S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 用户手册,版本号1.4 文档编号: 起效日期: 2009年12月 DIRECTIONS: Revision 1.4 SAMSUNG ELECTRONICS MCU PM: 刘志勇 Steven Liu YOSUN SHANGHAI CORP.LTD Tel: 021-58365838 Ext.7835 Fax: 021-58355878 H P: 13818363447 QQ: 52647598 SKYPE: FVSTEVEN MSN: [email protected] E-Mail: [email protected] S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 1 产品概述 产品概述 S3C8-系列MCU 三星 S3C8 系列单片机向用户提供了高效快速的CPU,丰富的外设接口,以及各种大小的可编程ROM。其中重要的 CPU特性包括: — 高效的寄存器结构 — 可选的CPU时钟源 — 可由中断唤醒的 IDLE 和 STOP 低功耗模式 — 内置有看门狗功能的Basic Timer 精心设计的中断结构支持8个中断优先级,每个中断优先级支持一个或多个中断源及中断向量。任意指定的中断优 先级都可以实现快速中断(最少只需4个CPU时钟)。 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X MCU S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X MCU 由先进的 CMOS 工艺制造,并基于三星最新的 CPU 架构。 S3C8275X/C8278X/C8274X 是一款嵌入16/8/4K字节mask ROM的微控制器。 S3F8275X/F8278X/F8274X 是一款嵌入16/8/4K字节可多次编程 Flash ROM的微控制器。 通过成熟的模块化设计方法,和基于强大的SAM8内核,在S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 中成功地集成了以下外围模块: 7个可编程I/O口,包括6个8位I/O口,1个4位I/O口,共52个管脚。 8个供外部中断使用的位可编程管脚。 1个可用于振荡稳定和看门狗(系统复位)的8位 basic timer。 2个可选工作模式的8位timer/counter。 可用作实时时钟的Watch timer。 FLASH S3F8275X/F8278X/F8274X 是S3C8275X/C8278X/C8274X的 FLASH 版本。 S3F8275X/F8278X/F8274X具有片 上 FLASH ROM 而不是 mask ROM, S3F8275X/F8278X/F8274X与S3C8275X/C8278X/C8274X在所有的功能和 管脚分配上都是兼容的,其中 S3F8275X 为 full flash 产品,full flash 产品在程序中可以使用指令对ROM写入数 据。 1-1 产品概述 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 特性 CPU 钟表定时器 (Watch Timer) SAM88RC CPU 内核 存储器 程序存储器 (ROM) - 16K8位 程序存贮器(S3C8275X/F8275X) - 8K8位 程序存贮器(S3C8278X/F8278X) - 4K8位 程序存贮器(S3C8274X/F8274X) - 内部flash 存贮器(程序存贮器) √扇区(Sector): 128 字节 √10 年数据保留 √快速编程: + 整片擦除: 50ms + 扇区擦除: 10ms + 字节编程: 30us √ 用户通过‘LDC’ 指令编程 √ 寿命: 10,000 次可擦除/编程 √ 扇区(128-字节)擦除 √ 字节编程 √ 支持外部串行编程 TM √ 可扩展的 OBP (在板编程)扇区 数据存储器 (RAM) -包括 LCD 显示数据存储器 - 544 8 位数据存储器(S3C8275X/F8275X) - 288 8 位数据存储器(S3C8278X/F8278X) - 288 8 位数据存储器(S3C8274X/F8274X) 指令集 78 条指令 用于低功耗模式的Idle 和 Stop指令 52 个 I/O 口 I/O: 16 个 I/O: 36 个 (与LCD 信号复用) 中断 8个中断级,12个中断源 支持快速中断处理 8 位 Basic Timer 看门狗功能 4种可选时钟源 2 个 8 位 Timer/Counters 1-2 可编程定时timer 外部事件计数功能 可设置为一个16 位的 timer/counter 时间间隔: 3.91mS, 0.25S, 0.5S或1S (32.768 kHz) 0.5/1/2/4 kHz 可选的蜂鸣器输出 LCD 控制/驱动器 32个段,4个公共端 静态,1/2, 1/3, 1/4 和1/8 占空比可选 内置LCD偏置需要的电阻分压电路 8 位串行输入输出接口 8 位 发送/接收模式 8 位仅接收模式 LSB 优先或MSB 优先发送可选 内部或外部时钟源 电池电压检测 3 种可选电压阈值 (2.2V, 2.4V, 2.8V) 根据功耗要求,软件使能或禁止 低电压复位(LVR) 电压阈值: 2.2V 通过smart option (ROM 地址: 3FH) 使能/禁止 2 种低功耗模式 Idle: 仅停止CPU 时钟 Stop: 停止被选中的系统时钟和CPU 时钟 振荡源 • 主时钟可选石英晶振,陶瓷振荡器或者RC • 主时钟频率:0.4 MHz – 8.0 MHz • 副时钟选用32.768 kHz 晶体振荡电路 指令执行时间 fx = 8.0 MHz 时,最快500nS 工作电压范围 • 2.0 V – 3.6 V (0.4 – 4.2 MHz) • 2.5V – 3.6 V (0.4 – 8.0 MHz) 工作温度范围 • –25C – +85C 封装形式 64-QFP-1420F, 64-LQFP-1010 Smart Option • 低电压复位 (LVR) 的使能/禁止及复位电压可由硬 件选择 (ROM 地址 3FH) • ISP 相关设置选择 (ROM 地址 3EH) S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X PRODUCT OVERVIEW 内部模块框图 TAOUT/P0.4 T1CLK/P0.3 TBOUT/P0.5 8-Bit Timer/ Counter A 8-Bit Timer/ Counter B P0.0/INT0 P0.1/INT1 P0.2/INT2 P0.3/T1CLK P0.4/TAOUT P0.5/TBOUT P0.6/CLKOUT P0.7/BUZ 16-Bit Timer/ Counter 1 XIN nRESET XTIN XOUT XTOUT VREG Watchdog Timer Basic Timer Low Voltage Reset Port I/O and Interrupt Control I/O Port 0 Clock Out Block CLKOUT/P0.6 Battery Level Detector VBLDREF/ P2.0/SEG31 Watch Timer BUZ/P0.7 COM0-COM3/P6.0-P6.3 P1.0/SCK P1.1/SO P1.2/SI P1.3/INT3 P1.4/INT4 P1.5/INT5 P1.6/INT6 P1.7/INT7 SEG8-SEG15/P4.7-P4.0 LCD Driver I/O Port 1 SEG16-SEG23/P3.7-P3.0 SEG24-SEG30/P2.7-P2.1 SEG31/P2.0/VBLDREF 544/288 Byte Register File P2.0/SEG31/VBLDREF SEG0-SEG7/P5.7-P5.0 SAM88RC CPU VLC0-VLC2 16/8/4-Kbyte ROM P1.0/SCK P1.1/SO P1.2/SI I/O Port 2 SIO P3.0-P3.7/SEG23-SEG16 I/O Port 3 I/O Port 6 P6.0-P6.3/ COM0-COM3 I/O Port 5 P4.0-P4.7/SEG15-SEG8 I/O Port 4 P5.0-P5.7/ SEG7-SEG0 P2.1-P2.7/SEG30-SEG24 图 1-1. 内部模块框图 1-3 产品概述 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 64 63 62 61 60 59 58 57 56 55 54 53 52 SEG1/P5.6 SEG2/P5.5 SEG3/P5.4 SEG4/P5.3 SEG5/P5.2 SEG6/P5.1 SEG7/P5.0 SEG8/P4.7 SEG9/P4.6 SEG10/P4.5 SEG11/P4.4 SEG12/P4.3 SEG13/P4.2 管脚分布图 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 S3C8275X/F8275X S3C8278X/F8278X S3C8274X/F8274X (64-QFP-1420F) 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 SEG14/P4.1 SEG15/P4.0 SEG16/P3.7 SEG17/P3.6 SEG18/P3.5 SEG19/P3.4 SEG20/P3.3 SEG21/P3.2 SEG22/P3.1 SEG23/P3.0 SEG24/P2.7 SEG25/P2.6 SEG26/P2.5 SEG27/P2.4 SEG28/P2.3 SEG29/P2.2 SEG30/P2.1 SEG31/P2.0/VBLDREF P1.7/INT7 P0.2/INT2 P0.3/T1CLK P0.4/TAOUT P0.5/TBOUT P0.6/CLKOUT P0.7/BUZ P1.0/SCK P1.1/SO P1.2/SI P1.3/INT3 P1.4/INT4 P1.5/INT5 P1.6/INT6 20 21 22 23 24 25 26 27 28 29 30 31 32 SEG0/P5.7 COM0/P6.0 COM1/P6.1 COM2/P6.2 COM3/P6.3 VLC0 VLC1 VLC2 VDD VSS XOUT XIN TEST XTIN XTOUT nRESET VREG P0.0/INT0 P0.1/INT1 图 1-2. S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X管脚分布图(64-QFP-1420F 封装) 1-4 PRODUCT OVERVIEW 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 SEG1/P5.6 SEG2/P5.5 SEG3/P5.4 SEG4/P5.3 SEG5/P5.2 SEG6/P5.1 SEG7/P5.0 SEG8/P4.7 SEG9/P4.6 SEG10/P4.5 SEG11/P4.4 SEG12/P4.3 SEG13/P4.2 SEG14/P4.1 SEG15/P4.0 SEG16/P3.7 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 S3C8275X/F8275X S3C8278X/F8278X S3C8274X/F8274X (64-LQFP-1010) 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 SEG17/P3.6 SEG18/P3.5 SEG19/P3.4 SEG20/P3.3 SEG21/P3.2 SEG22/P3.1 SEG23/P3.0 SEG24/P2.7 SEG25/P2.6 SEG26/P2.5 SEG27/P2.4 SEG28/P2.3 SEG29/P2.2 SEG30/P2.1 SEG31/P2.0/VBLDREF P1.7/INT7 VREG P0.0/INT0 P0.1/INT1 P0.2/INT2 P0.3/T1CLK P0.4/TAOUT P0.5/TBOUT P0.6/CLKOUT P0.7/BUZ P1.0/SCK P1.1/SO P1.2/SI P1.3/INT3 P1.4/INT4 P1.5/INT5 P1.6/INT6 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 SEG0/P5.7 COM0/P6.0 COM1/P6.1 COM2/P6.2 COM3/P6.3 VLC0 VLC1 VLC2 VDD VSS XOUT XIN TEST XTIN XTOUT nRESET 图 1-3. S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X管脚分布图(64-LQFP-1010 封装) 1-5 产品概述 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 管脚特性描述 表1-1. S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 管脚特性 管脚名称 输入/ 输出 管脚特性描述 可对该口的每一位进行功能设定,可以设定为 施密特触发器输入、推挽式输出或开漏输出。 通过软件设定上拉电阻。 管脚类 型 管脚号 复用功能 E-4 1820 21 22 23 24 25 INT0INT2 T1CLK TAOUT TBOUT CLKOUT BUZ E-4 26 27 28 2933 SCK SO SI INT3INT7 P0.0P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 I/O P1.0 P1.1 P1.2 P1.3P1.7 I/O P2.0 P2.1P2.7 I/O 可对该口的每一位进行功能设定,可以设定为 施密特触发器输入、推挽式输出或开漏输出。 通过软件设定上拉电阻。 H-10 H-8 34 3541 SEG31/VBLDREF SEG30SEG24 P3.0P3.7 I/O 可对该口的每一位进行功能设定,可以设定为 施密特触发器输入、推挽式输出或开漏输出。 通过软件设定上拉电阻。 H-8 4249 SEG23SEG16 P4.0P4.7 P5.0P5.7 P6.0P6.3 I/O 可对该口的每一位进行功能设定,可以设定为 施密特触发器输入、推挽式输出或开漏输出。 通过软件设定上拉电阻。 H-9 5057 5864, 1 25 SEG15SEG8 SEG7SEG0 COM0COM3 1-6 P0.0 - P0.2 也可用作外部中断输入 (噪声滤波器, 中 断使能和标志位控制). 可对该口的每一位进行功能设定,可以设定为 施密特触发器输入、推挽式输出或开漏输出。 通过软件设定上拉电阻。 P1.3 – P1.7 也可用作外部中断输入 (噪声滤波器, 中 断使能和标志位控制). S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X PRODUCT OVERVIEW 表 1-1. S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 管脚特性 (续) 管脚名称 VLC0VLC2 输入/ 输出 管脚特性描述 LCD 电源 管脚类 型 管脚号 复用功能 68 INT0INT2 INT3INT7 I/O 外部中断输入管脚. E-4 1820 2933 P0.0P0.2 P1.3P1.7 T1CLK I/O Timer 1/A 外部时钟输入. E-4 21 P0.3 TAOUT I/O Timer 1/A 时钟输出. E-4 22 P0.4 TBOUT I/O Timer B时钟输出. E-4 23 P0.5 CLKOUT I/O 系统时钟输出. E-4 24 P0.6 BUZ I/O 蜂鸣器信号输出管脚 E-4 25 P0.7 SCK, SO, SI I/O 串行时钟,串行数据输出,串行数据输入 E-4 26,27,28 P1.0, P1.1, P1.2 COM0–COM3 I/O LCD公共端信号输出. H-9 25 P6.0P6.3 SEG0–SEG15 SEG16–SEG30 SEG31 I/O LCD 段信号输出. H-9 H-8 H-10 1,64 50 4935 34 P5.7P4.0 P3.7P2.1 P2.0/VBLDREF VBLDREF I/O 电池电压检测参考电压输入管脚 H-10 34 P2.0/SEG31 VREG O 使用副时钟时,稳压器电压输出(需接0.1F电容) 17 nRESET I 系统复位管脚 B 16 XTIN, XTOUT 副时钟晶振管脚 14, 15 XIN, XOUT 主振荡器管脚 12, 11 TEST I 测试输入:必须接到 VSS 13 VDD, VSS 电源输入管脚 9, 10 1-7 产品概述 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 管脚电路 VDD VDD Pull-Up Resistor P-Channel In In N-Channel Schmitt Trigger 图 1-5. 管脚电路类型B (nRESET) 图 1-4. 管脚电路类型A VDD VDD Pull-up Resistor Resistor Enable Open Drain P-CH I/O Data N-CH Output Disable Schmitt Trigger 图 1-6. 管脚电路类型 E-4 (P0, P1) 1-8 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X PRODUCT OVERVIEW VLC0 VLC1 COM/SEG Out Output Disable VLC2 VSS 图 1-7. 管脚电路类型H-4 VDD VDD Pull-Up Resistor Resistor Enable Open Drain P-CH Data I/O Output Disable 1 N-CH SEG Output Disable 2 Circuit Type H-4 图 1-8. 管脚电路类型(P2.1–P2.7, P3) 1-9 产品概述 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X VDD VDD Pull-Up Resistor Resistor Enable P-CH Data I/O Output Disable 1 N-CH COM/SEG Output Disable 2 Circuit Type H-4 图 1-9. 管脚电路类型H-9 (P4, P5, P6) 1-10 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X PRODUCT OVERVIEW VDD VDD Pull-Up Resistor Resistor Enable Open-Drain P-CH Data I/O Output Disable 1 SEG Alternative Function N-CH Circuit Type H-4 BLDEN BLD Select To BLD 图 1-10. 管脚电路类型H-10 (P2.0) 1-11 产品概述 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 注释 1-12 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 2 地址空间 地址空间 概述 S3C8275X/C8278X/C8274X MCU有两类地址空间: — 内部 程序存储空间 (ROM) — 内部寄存器卷 MCU 通过16位的地址总线访问程序存储空间,通过独立的8位地址线和数据线访问内部寄存器卷。 S3C8275X内集成了16K字节的掩模可编程(mask-programmable) 存储器。S3C8278X内集成了8K字节的掩模可编 程(mask-programmable) 存储器。 S3C8274X内集成了4K字节的掩模可编程(mask-programmable) 存储器。 256字节的物理寄存器空间通过不同的寻址方式被扩展成可寻址的320字节的空间。 内建一个16字节的 LCD 显示寄存器卷。 在内部寄存器卷中,共有605个寄存器。其中,528个字节的通用寄存器(包括16个字节的工作寄存器,2个192个字 节的主寄存器区以及两个64个字节的Set区)。 13个字节用于CPU 和系统控制寄存器,48个字节用于外设控制和数 据寄存器,19个字节未使用。 2-1 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 程序存储空间 (ROM) 程序存储空间 (ROM) 保存程序代码或表格数据。S3C8275X有16K字节的内部掩模可编程程序存储空间, S3C8278X有8K字节的内部掩模可编程程序存储空间,S3C8274X有4K字节的内部掩模可编程程序存储空间。 ROM (0H–0FFH)中初始 256 字节预留作中断入口地址。未使用的地址都可用作普通的程序存储空间。在使用中断 地址区域作为程序代码空间时,注意不可覆盖中断入口地址。 在 ROM 中程序的复位地址是 0100H。 在S3F8275X(Full-Flash 产品)中,ROM复位后开始运行的起始地址可以通过smart option进行修改。详细信息请参 考第16章:嵌入式闪存接口 (Decimal) (HEX) 3FFFH 16,383 (Decimal) (HEX) 1FFFH 8,191 16K-bytes Internal Program Memory Area (Decimal) 4K-bytes Internal Program Memory Area 8FFH 255 FFH 255 FFH Smart Option Area 3CH 3CH S3C8275X/F8275X 00H 0 S3C8278X/F8278X 图 2-1. 程序存储地址空间 2-2 3FH Smart Option Area 00H FFH Interrupt Vector Area 3FH 3FH Smart Option Area 0 255 Interrupt Vector Area Interrupt Vector Area 0FFFH 4,095 8K-bytes Internal Program Memory Area Available ISP Sector Area (HEX) 3CH 00H 0 S3C8274X/F8274X 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X SMART OPTION ROM Address: 003EH MSB .7 .6 .5 .4 .3 .2 .1 ISP reset vector address selection bit: 00 = 200H (ISP area size: 256 byte) 01 = 300H (ISP area size: 512 byte) 10 = 500H (ISP area size: 1024 byte) 11 = 900H (ISP area size: 2048 byte) LSB ISP protection size selection: (note) 00 = 256 bytes 01 = 512 bytes 10 = 1024 bytes 11 = 2048 bytes Not used ISP reset vector change enable/disable bit: 0 = OBP reset vector address 1 = Normal vector (address 0100H) .0 ISP protection enable/disable bit: 0 = Enable (not erasable by LDC) 1 = Disable (erasable by LDC) ROM Address: 003FH MSB .7 .6 .5 .4 .3 .2 .1 Not used .0 LSB LVR enable/disable bit (criteria voltage: 2.2V): 0 = Disable LVR 1 = Enable LVR These bits should be always logic "110b". ROM Address: 003CH MSB .7 .6 .5 .4 .3 .2 .1 .0 LSB .1 .0 LSB Not used ROM Address: 003DH MSB .7 .6 .5 .4 .3 .2 Not used 注释: 1. 在选择ISP保护区间和ISP复位向量地址后,不要选择高于ISP区间的地址。 2. 无论用LDC指令对 Smart Option 区域 (003CH-003FH) 写入任何值,都不能改变 Smart Option 的值, Smart Option 区域 (003CH-003FH) 的值应该通过 OTP/MTP 工具 (SPW2+ 单芯片烧写器或者GWPRO2 多芯片烧写器) 烧写。 图 2-2. Smart Option 2-3 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Smart Option 是用来初始化芯片的ROM选项,决定了芯片的启动状态。ROM 中用于 Smart Option 的地址范围为 003CH ~ 003FH。 Smart option(003EH)的ISP功能只有在S3F8275X中有效。ROM的003EH地址的默认值为FFH。在使用 S3C8275X/C8278X/F8278X/C8274X/F8274X时, ROM的003EH地址的值应始终保持为FFH。 Smart option(003FH)LVR 的选择功能对所有器件都有效。S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X, ROM的003FH地址的默认值为FFH。 2-4 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 寄存器结构 在 S3C8275X/C8278X/C8274X 中,寄存器卷的高 64 字节被扩展为两个 64 字节区域,叫做 set 1 和 set 2。 Set 1 的高 32 字节区域又进一步扩展为两个 32 字节寄存器块(bank 0 和 bank 1),低 32 字节是独立的公共存 储区域。 S3C8275X可寻址的8位寄存器个数为605。其中包含,13字节的CPU和系统控制寄存器,16字节的 LCD 数据寄存 器,48字节的外设控制和数据寄存器,16字节的共享工作寄存器以及page 0-page 1中的512个通用寄存器 (在 S3C8278X/C8274X中只有page 0)。 不管当前选的是哪个寄存器页,都可以对 set 1 的寄存器进行寻址。但只能通过寄存器寻址模式进行。 通过不同寻址模式的限制,bank 选择指令(SB0,SB1),以及寄存器页面指针(PP),得以将寄存器空间扩展为各个独 立的可寻址区域(set, bank 和 page)。 表 2-1中总结了内部寄存器卷中特殊功能寄存器类型和所占字节数。 表 2-1. S3C8275X寄存器类型总结 寄存器类型 所占字节数 通用寄存器 (包括 16字节的通用工作寄存器卷,2个192字 节的主寄存器卷 (包括外设控制寄存器), 以及2个64字节的 set 2 卷) LCD 数据寄存器 CPU 和系统控制寄存器 时钟、外设、I/O 控制和数据映射寄存器 528 所有可寻址的字节数 605 16 13 48 表 2-2. S3C8278X/C8274X寄存器类型总结 寄存器类型 所占字节数 通用寄存器 (包括 16字节的通用工作寄存器卷,1个192字 节的主寄存器卷 (包括外设控制寄存器), 以及1个64字节的 set 2 卷) LCD 数据寄存器 CPU 和系统控制寄存器 时钟、外设、I/O 控制和数据映射寄存器 272 所有可寻址的字节数 349 16 13 48 2-5 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Set1 FFH Bank 1 FFH 64 Bytes FFH Bank 0 and System Peripheral Control System and Registers Peripheral Control Registers (Register Addressing Mode) 32 Bytes E0H DFH Page 0 Set 2 General-Purpose Data Registers E0H (Indirect Register, Indexed Mode, and Stack Operations) System Registers (Register Addressing Mode) D0H CFH Page 1 256 Bytes C0H BFH General Purpose Register (Register Addressing Mode) Page 0 C0H Page 2 ~ 0FH 192 Bytes Prime Data Registers 16 Bytes ~ ~ Prime Data Registers (All Addressing Modes) ~ (All addressing modes) LCD Display Reigster 00H 00H 图 2-3. 内部寄存器卷的地址空间(S3C8275X) 2-6 ~ ~ ~ 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Set1 Bank 1 FFH E0H 64 Bytes FFH Bank 0 and System Peripheral Control System and Registers Peripheral Control Registers (Register Addressing Mode) 32 Bytes DFH Page 0 Set 2 General-Purpose Data Registers E0H (Indirect Register, Indexed Mode, and Stack Operations) System Registers (Register Addressing Mode) D0H CFH C0H BFH General Purpose Register (Register Addressing Mode) C0 H 256 Bytes Page 0 Page 2 ~ 0FH 192 Bytes Prime Data Registers 16 Bytes ~ ~ Prime Data Registers ~ (All Addressing Modes) ~ (All addressing modes) LCD Display Reigster 00H 00H 注释: 在 S3C8278X/C8274X中 , 只有第 0页 和 第 2 页. 第 2 页是16个字节的 LCD显示寄存器卷 . 图 2-4. 内部寄存器卷的地址空间(S3C8278X/C8274X) 2-7 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 寄存器页面指针(PP) S3C8- 系列 MCU 支持对物理上 256 字节的内部寄存器页(page)进行逻辑扩展(通过 8 位数据总线),最多可实 现16个可独立寻址的寄存器页。页面寻址由寄存器页面指针(PP, 地址:DFH)来控制。 S3C8275X/C8278X/C8274X中将LCD数据寄存器扩展成页文件,所以访问其他页面时要改变寄存器页面指针。 复位之后,页面指针的源页(低四位)和目标页(高四位)数值缺省为“0000B”, 自动选择页面 0 作为源和目标 页来进行寄存器寻址。 Register Page Pointer (PP) DFH, Set 1, R/W MS B .7 .6 .5 .4 .3 .2 .1 .0 LSB Source register page selection bits: 0000 0001 0010 others Source: Page 0 Source: Page 1 (Not used for the S3C8278X/C8274X) Source: Page 2 Not used for the S3C8275X/C8278X/C8274X Destination register page selection bits: 0000 0001 0010 others Destination: Page 0 Destination: Page 1 (Not used for the S3C8278X/C8274X) Destination: Page 2 Not used for the S3C8275X/C8278X/C8274X 注释 : 1. 在S3C8275X 中,内部寄存器卷有三个页 (Pages 0-2). 第 0-1 页用于通用寄存器卷 , 第 2 页 为 LCD显示寄存器 或通用寄存器 2. 在 S3C8278X/C8274X 中, 内部寄存器卷有两个 Page (Pages 0, 2). 第0 页 用于通用寄存器卷 , 第 2 页为 LCD显示寄存器 或通用寄存器 3. 复位后,4位源地址和 4 位目的地址被初始化为0,当访问其它页时,需要修改此寄存器的值 图 2-5. 寄存器页面指针(PP) 2-8 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 编程实例 — 在清RAM时使用页面指针 (Page 0, Page 1) RAMCL0 RAMCL1 ; 目标 0, 源 0 LD PP,#00H SRP #0C0H LD CLR DJNZ CLR R0,#0FFH @R0 R0,RAMCL0 @R0 ; 开始对页 0 进行 RAM 清零 LD PP,#10H ; 目标 1, 源 0 LD CLR DJNZ CLR R0,#0FFH @R0 R0,RAMCL1 @R0 ; 开始对页 1 进行 RAM 清零 ; R0 = 00H ; R0 = 00H 注释: DJNZ 指令的用法详见第6-39页。 2-9 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 寄存器SET 1 Set 1 指的是寄存器卷中的高 64 字节,地址为 C0H–FFH。 这 64 字节空间(E0H-FFH)的高 32 字节又被扩展为两个 32 字节的寄存器块,bank 0 和 bank 1。通过指令 SB0 或 SB1 来访问 bank 0 或 bank 1。硬件复位后默认选择 bank 0进行寻址。 Set 1(E0H-FFH)的两个高 32 字节区域(bank0 和 bank1)包含48个系统和外设控制寄存器,低 32 字节区域包含 16 个系统寄存器(D0H-DFH)和 16 字节的通用工作寄存器(C0H-CFH)。在其它寄存器空间执行的数据操作, 也可以通过工作寄存器。 Set 1 中的寄存器可以随时通过寄存器寻址模式进行访问。16 字节的工作寄存器区域,则只能使用工作寄存器寻址 模式(更多关于工作寄存器寻址的信息,请查阅第 3 章,―寻址方式‖)。 寄存器SET 2 对 set 1 的 64 字节地址空间(C0H-FFH)进行逻辑复制,以增加额外的 64 字节寄存器空间。这个扩展的空间被称 为 set 2。在 S3C8275X中, page 0 -1可对 set 2 的地址空间 (C0H-FFH) 进行寻址。 在 S3C8278X/C8274X中, page 0可对 set 2 的地址空间 (C0H-FFH) 进行寻址。 通过寻址模式的限制,得以实现 set 1 和 set 2 的逻辑分割。Set 1 只支持寄存器寻址模式,而对 set 2 的寻址只能 采用寄存器间接寻址模式或偏址寻址模式。 Set 2 寄存器区常用作堆栈操作。 2-10 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 主寄存器区 S3C8275X/C8278X/C8274X 有1或2个寄存器页,每页有256个字节,其中低192字节 (00H–BFH) 称为主寄存器 区。主寄存器区可通过七种寻址模式中的任何一种进行访问(详见第 3 章,―寻址方式‖)。 第0页的主寄存器区在复位之后就可寻址。为访问第0,1 或 2页的主寄存器区,必须对寄存器页面指针(PP)的源 和目标进行正确设置。 FFH Set 1 Bank 0 Bank 1 FFH FFH Page 1 Page 0 Set 2 Set 2 FCH E0H D0H C0H BFH C0H Page 0 Prime Space CPU and system control Page 2 0FH General-purpose LCD Data Register Area Peripheral and I/O LCD data register 注释 : 00H 00H 在 S3C8278X/C8274X 中, 只有 第 0 页和 第 2 页. 第 2 页 的16个字节为 LCD 显示RAM 图 2-6. Set 1, Set 2, 主寄存器区和 LCD 数据寄存器 2-11 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 工作寄存器 指令可通过 4 位或 8 位地址来访问指定的 8 位寄存器或者 16 位寄存器对。当使用 4 位工作寄存器寻址模式时, 256 字节的寄存器卷可以被看成是由 32 个 8 字节寄存器组或―片 (slice) ‖组成的。每个片包含 8 个 8 位寄存器。 通过两个 8 位寄存器指针 RP1 和 RP0,可以随时选择两个工作寄存器片组成一个 16 字节的工作寄存器块。使用这 两个指针,可以将 16 字节的寄存器块移动到除 set 2 以外的任何可寻址空间。 在本手册中,术语―片(slice)‖和―块(block)‖用来帮助理解工作寄存器空间的大小和相对位置: — 一个工作寄存器―片‖是 8 个字节(8 个 8 位寄存器,R0-R7 或 R8-R15) — 一个工作寄存器―块‖是 16 个字节(16 个 8 位寄存器,R0-R15) 所有 8 字节的工作寄存器―片‖中,寄存器地址的高 5 位数值完全相同。这使得各个寄存器指针都可以指向寄存器卷 中除 set 2 以外的 32 个寄存器―片‖中任何一个。寄存器指针 RP0 和 RP1 中存放的是选定的两个 8 位寄存器―片‖的 起始地址。 系统复位后,RP0 和 RP1 总是指向 Set 1 中的 16 字节公共空间(C0H-CFH)。 FFH F8H F7H F0H Slice 32 Slice 31 1 1 1 1 1 X X X Set 1 Only RP1 (Registers R8-R15) Each register pointer points to one 8-byte slice of the register space, selecting a total 16-byte working register block. CFH C0H ~ ~ 0 0 0 0 0 X X X RP0 (Registers R0-R7) Slice 2 Slice 1 图 2-7. 8字节工作寄存器区 (Slices) 2-12 10H FH 8H 7H 0H 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 使用寄存器指针 寄存器指针 RP0 和 RP1 (地址:D6H 和 D7H,Set 1),用于选择寄存器卷中两个可移动的 8 字节工作寄存器片。 复位后,RP# 指向工作寄存器的公共空间:RP0 指向地址 C0H-C7H,RP1指向 C8H-CFH。 通过 SRP 或 LD 指令可以改变寄存器指针 RP0/ RP1 的值 (如图2-8 和 图2-9).。 用工作寄存器寻址方式,只能访问当前 RP0 和 RP1 指定的两个 8 字节的工作寄存器片。但不能用寄存器指针来选 择 set 2 (C0-FFH) 中的工作寄存器,因为这些地址空间只支持间接寄存器寻址模式和偏址寻址模式。 16 字节的工作寄存器块通常由两个相邻的 8 字节工作寄存器片组成。编程时,一般建议将 RP0 指向―低‖地址的 片,而 RP1 指向―高‖地址的片(如图 2-8)。某些情况下,可能需要将工作寄存器定义在不同的(不相邻的)寄存 器空间中(如图 2-9),RP0 指向―高‖地址的片,而 RP1 指向―低‖地址的片 。 由于寄存器指针可以指向两个工作寄存器片中的任意一个,用户可根据程序需求灵活定义工作寄存器空间。 编程实例 — 设置寄存器指针 SRP SRP1 SRP0 CLR LD #70H #48H #0A0H RP0 RP1,#0F8H ; ; ; ; ; RP0 RP0 RP0 RP0 RP0 70H, RP1 78H no change, RP1 48H, A0H, RP1 no change 00H, RP1 no change no change, RP1 0F8H Register File Contains 32 8-Byte Slices 0 0 0 0 1 X X X RP1 0 0 0 0 0 X X X FH (R15) 8-Byte Slice 8H 7H 8-Byte Slice 0H (R0) 16-Byte Contiguous Working Register block RP0 图 2-8. 相邻的 16 字节工作寄存器块 2-13 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X F7H (R7) 8-Byte Slice F0H (R0) 1 1 1 1 0 X X X Register File Contains 32 8-Byte Slices X X X 8-Byte Slice 16-Byte Contiguous working Register block RP0 7H (R15) 0 0 0 0 0 0H (R0) RP1 图 2-9. 非相邻的 16 字节工作寄存器块 编程实例 — 使用 RP 对寄存器 80H-85H 的内容求和 用寄存器指针来对寄存器 80H–85H 中的内容求和。寄存器 80H-85H 中的存放数据分别为 10H,11H,12H, 13H,14H和15H: SRP0 #80H ; RP0 80H ADD R0,R1 ; R0 R0 + R1 ADC R0,R2 ; R0 R0 + R2 + C ADC R0,R3 ; R0 R0 + R3 + C ADC R0,R4 ; R0 R0 + R4 + C ADC R0,R5 ; R0 R0 + R5 + C 6 个寄存器的和 (6FH) 存放在 R0(80H)中。例子中的指令共占用 12 字节的代码长度,执行时间为 36 个时钟周 期。如果不用寄存器指针,那就得按照下面的指令顺序来做: ADD 80H,81H ; 80H (80H) + (81H) ADC 80H,82H ; 80H (80H) + (82H) + C ADC 80H,83H ; 80H (80H) + (83H) + C ADC 80H,84H ; 80H (80H) + (84H) + C ADC 80H,85H ; 80H (80H) + (85H) + C 现在,6 个寄存器的和依然放在 80H 当中,但是所有指令总共占用了 15 字节的代码长度而非 12 字节,且执行时间 为 50 个时钟周期而非 36 个。 2-14 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 寄存器寻址 S3C8- 系列单片机的寄存器结构提供了一种效率高的工作寄存器寻址方式,该方式充分利用了短指令格式以缩短程 序执行时间。 在寄存器寻址模式中,操作数存放在某个特定的寄存器或寄存器对中。用寄存器寻址模式可以访问寄存器空间中除 set 2 以外的任何地址。使用工作寄存器寻址时,通过寄存器指针指定一个 8 字节的工作寄存器空间和该空间内的一 个 8 位寄存器。 寄存器寻址时,既可以视其为单独的 8 位寄存器,也可以视为成对的 16 位寄存器空间。在 16 位寄存器对中,第一 个8位寄存器的地址总是偶数,而另一个寄存器地址则是奇数。16 位数据的高位字节存放在偶地址寄存器中,低位 字节存放在邻近的 (+1) 奇地址寄存器中。 工作寄存器寻址模式与寄存器寻址模式的不同之处在于,它通过寄存器指针来指定一个 8 字节工作寄存器空间,以 及其中的某个 8 位工作寄存器。 MSB LSB Rn Rn+1 n = Even address 图 2-10. 16位工作寄存器结构 2-15 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Special-Purpose Registers Bank 1 General-Purpose Register Bank 0 FFH FFH Control Registers E0H Set 2 Syste m Registers D0H CFH C0 H C0H BFH RP1 Register Pointers RP0 Each register pointer (RP) can independently point to one of the 24 8-byte "slices" of the register file (other than set 2). After a reset, RP0 points to locations C0H-C7H and RP1 to locations C8H-CFH (that is, to the common working register area). Prime Registers LCD Data Registers 注释: 对于 S3C8275X/C8278X/C8274X ,可操作页 0-2;页 0-2 包含 内部寄存器卷里所有可寻址的寄存器。 00H Page 0 Register Addressing Only Can be Pointed by Register Pointer 图 2-11. 寄存器卷寻址模式 2-16 All Addressing Modes Page 0 Indirect Register, All Indexed Addressing Addressing Modes Modes Can be Pointed to By register Pointer 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 通用工作寄存器区 (C0H–CFH) 系统复位后,寄存器指针 RP0 和 RP1 自动指向 set 1中两个 8 字节的寄存器片(C0H-CFH),组成 16 字节的寄存器 块: RP0 C0H–C7H RP1 C8H–CFH 这 16 字节的地址空间称为通用工作寄存器区。就是说无论当前操作所要访问的是哪个页面,都可以把该空间的寄 存器作为工作寄存器使用。典型地,在不同页面间进行数据交换操作时,可使用工作寄存器作为临时存储。 FFH Set 1 FFH FFH Page 0 Set 2 FCH Set 2 E0 H D0 H C0 H C0 BF H H Following a hardware reset, register pointers RP0 and RP1 point to the common working register area, locations C0H-CFH. RP0 = 1100 0000 RP1 = 1100 1000 注释 : Page 1 Page 0 ~ Prime Space ~ ~ Page 2 0FH LCD Data Registers 00H 00H 在 S3C8278X/C8274X 中, 只有 第 0 页 和 第 2 页. 第 2 页的16个字节为 LCD 显示RAM 图 2-12. 通用工作寄存器区 2-17 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 编程实例 — 访问通用工作寄存器区 如下例所示,要访问通用工作寄存器(C0H-CFH),只能采用工作寄存器寻址模式: 例1: LD 0C2H,40H ; 非法寻址模式! 改为工作寄存器寻址模式: SRP #0C0H LD R2, 40H ; R2 (C2H) 地址 40H 中存放的值 ADD 0C3H, #45H ; 非法寻址模式! 例2: 改为工作寄存器寻址模式: SRP #0C0H ADD R3, #45H ; R3 (C3H) R3 + 45H 4 位工作寄存器寻址方式 每个寄存器指针定义了一个可移动的 8 字节寄存器片,其中的地址信息作为一扇寻址的―窗‖,使得指令只须 4 位地 址就可以实现对工作寄存器的有效访问。在工作寄存器寻址时,8 位地址是采用下述方法构成的: — 4 位地址的最高位选择一个寄存器指针(―0‖ 选择 RP0, ―1‖ 选择 RP1) — 寄存器指针的高 5 位选择寄存器卷中的某个 8 字节寄存器片 — 指令中 4 位地址的低 3 位选定 8 字节寄存器片中的一个 如图 2-13,操作的结果是,寄存器指针的高 5 位和指令地址的低 3 位一起组成完整的 8 位寄存器地址。只要寄存器 指针中保存的地址不变,指令中 4 位地址的低 3 位总是指向同一个 8 字节寄存器片。 图 2-14 给出了一个典型的 4 位工作寄存器寻址实例。指令―INC R6‖的最高位是―0‖,这将选择 RP0。RP0 的高 5 位 (01110B)与指令中 4 位地址的低 3 位(110B)一起组成了寄存器地址 76H(01110110B)。 2-18 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X RP0 RP1 Selects RP0 or RP1 Address OPCODE 4-bit address provides three low-order bits Register pointer provides five high-order bits Together they create an 8-bit register address 图 2-13. 4位工作寄存器寻址方式 RP0 0 1 1 1 0 RP1 0 0 0 0 1 1 1 1 0 0 0 Selects RP0 0 1 1 1 0 1 1 0 Register address (76H) R6 OPCODE 0 1 1 0 1 1 1 0 Instruction 'INC R6' 图 2-14. 4位工作寄存器寻址实例 2-19 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 8 位工作寄存器寻址方式 还可以通过 8 位工作寄存器寻址方式来访问工作寄存器区。首先,指令地址的高 4 位必须是―1100B‖,这 4 位数据 (1100B) 表示余下的 4 位与 4 位工作寄存器寻址方式相同。 如图 2-15,8 位地址的低阶位形成机制与4位工作寄存器寻址时类似:第 3 位选择 RP0 或 RP1,用来产生最终地址 的高 5 位;而最终地址的低 3 位则由原始指令提供。 图 2-16 给出了一个典型的 8 位工作寄存器寻址实例。指令地址的高 4 位 (1100B) 表明寻址方式为 8 位寄存器寻 址。第 3 位(―1‖)选择 RP1,所以 RP1中的高 5 位(10101B)成为寄存器地址的高 5 位,寄存器地址的低 3 位 (011B)则由 8 位指令地址的低 3 位提供。RP1 中的 5 个地址位和指令中的 3 个地址位组合,形成了完整的寄存 器地址,0ABH(10101011B)。 RP0 RP1 Selects RP0 or RP1 Address These address bits indicate 8-bit working register addressing 1 1 0 8-bit logical address 0 Register pointer provides five high-order bits Three low-order bits 8-bit physical address 图 2-15. 8位工作寄存器寻址方式 2-20 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X RP0 0 1 1 0 0 RP1 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0 1 0 1 1 Selects RP1 R11 1 1 0 0 1 0 1 1 8-bit address form instruction 'LD R11, R2' Register address (0ABH) Specifies working register addressing 图 2-16. 8位工作寄存器寻址实例 2-21 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 系统和用户栈 S3C8- 系列单片机通过栈来处理数据存储,子程序调用和返回。PUSH 和 POP 指令用于控制栈操作。 S3C8275X/C8278X/C8274X 支持在内部寄存器卷中进行栈操作。 栈操作 栈用来储存程序调用以及中断的返回地址,也用来储存数据。CALL 指令将 PC 的值压入栈,而 RET 指令将其从栈 中弹出。当中断发生时,PC 和 FLAGS 寄存器的值被压入栈,指令 IRET 则将这些值弹出到它们原来的地址。栈指 针总是在 PUSH 操作之前先减―1‖,在 POP 操作之后加―1‖。栈指针(SP)总是指向栈的顶端,如图 2-17 所示。 High Address PCL PCL Top of stack PCH PCH Top of stack Stack contents after a call instruction Flags Stack contents after an interrupt Low Address 图 2-17. 栈操作 用户自定义栈 可以在内部寄存器卷中堆栈自由定义栈数据储存区域。指令 PUSHUI,PUSHUD,POPUI,POPUD 支持用户自定 义栈操作。 栈指针 (SPL, SPH) 寄存器地址 D8H 和 D9H 存放用于栈操作的 16 位栈指针(SP)。SP 的高字节地址,SP15–SP8,存放在 SPH 寄存 器(D8H)中;低字节地址,SP7–SP0,存放在 SPL 寄存器(D9H)中。系统复位后,SP 的值不确定。 由于 S3C8275X/C8278X/C8274X只有内部存储空间,SPL 必须被初始化成介于 00H-FFH 之间的 8 位数值,而 SPH 则用不到,需要时可以把它作为通用寄存器使用。 当 SPH 寄存器用作通用数据寄存器时,如果因为 SPL 寄存器中正常的栈操作,如栈地址增加或减少而导致溢出发 生,将会影响到 SPH 寄存器,并覆盖当前存储的数据。为了避免 SPH 寄存器被覆盖的情况发生,最好把 SPL的初 始值设为―FFH‖而非―00H‖。S 2-22 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 编程实例 — 用 PUSH 和 POP 实现标准栈操作 下面的例子演示了在内部寄存器卷中如何通过 PUSH 和 POP 指令进行栈操作: SPL,#0FFH ; SPL FFH ; (通常 SPL 被初始化为 0FFH ) PUSH PP ; 栈地址 0FEH PP PUSH RP0 ; 栈地址 0FDH RP0 PUSH RP1 ; 栈地址 0FCH RP1 PUSH R3 ; 栈地址 0FBH R3 POP R3 ; R3 栈地址 0FBH POP RP1 ; RP1 栈地址 0FCH POP RP0 ; RP0 栈地址 0FDH POP PP ; PP 栈地址 0FEH LD • • • • • • 2-23 地址空间 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 注释 2-24 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 3 寻址模式 寻址模式 概述 通过程序指针(PC)读取程序存储空间的指令然后执行。指令隐含着要进行的操作和操作数。寻址模式是用于确定操 作数地址的一种方法。SAM88RC 指令中的操作数可以是条件代码、立即数,或者寄存器卷、程序存储区、数据存 储区的地址。 S3C8- 系列的指令集支持 7 种寻址模式,但这些寻址模式并非适用于所有指令。7 种寻址模式和它们的符号表示: — 寄存器寻址模式(R) — 间接寄存器寻址模式(IR) — 偏址寻址模式(X) — 直接寻址模式(DA) — 间接寻址模式(IA) — 相对地址寻址模式(RA) — 立即数寻址模式(IM) 3-1 寻址模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 寄存器寻址模式(R) 寄存器寻址模式(R)中,操作数是具体寄存器或寄存器对中的内容,如图 3-1。 工作寄存器寻址模式与寄存器寻址模式不同。因为工作寄存器是通过一个 16 位的寄存器指针,来指定 8 字节的工 作寄存器空间,和空间内的某个 8 位寄存器,如图 3-2。 Program Memory 8-bit Register File Address dst OPCODE One-Operand Instruction (Example) Register File Point to One Register in Register File OPERAND Value used in Instruction Execution Sample Instruction: DEC CNTR ; Where CNTR is the label of an 8-bit register address 图 3-1. 寄存器寻址模式 Register File MSB Point to RP0 ot RP1 RP0 or RP1 Selected RP points to start of working register block Program Memory 4-bit Working Register dst 3 LSBs src Point to the Working Register (1 of 8) OPCODE Two-Operand Instruction (Example) OPERAND Sample Instruction: ADD R1, R2 ; Where R1 and R2 are registers in the currently selected working register area. 图 3-2. 工作寄存器寻址模式 3-2 寻址模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 间接寄存器寻址模式(IR) 在间接寄存器寻址模式中,指定寄存器或寄存器对中存放的是操作数的地址。根据所用的指令,物理地址可能是寄 存器卷中的寄存器、程序存储器(ROM),或者外部数据存储器(如图 3-3 至 3-6)。 可以用任意的 8 位寄存器来访问其它的寄存器,也可以用任意的 16 位寄存器组来访问其它的存储空间。但要注 意,不能通过间接寄存器寻址模式对 Set 1 中地址段 C0H-FFH 进行访问。 Program Memory 8-bit Register File Address dst OPCODE One-Operand Instruction (Example) Register File Point to One Register in Register File ADDRESS Address of Operand used by Instruction Value used in Instruction Execution OPERAND Sample Instruction: RL @SHIFT ; Where SHIFT is the label of an 8-bit register address 图 3-3. 寄存器卷中的间接寄存器寻址模式 3-3 寻址模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 间接寄存器寻址模式(续) Register File Program Memory Example Instruction References Program Memory dst OPCODE Register Pair Points to Register Pair Program Memory Sample Instructions: CALL JP @RR2 @RR2 Value used in instruction OPERAND 图 3-4. 程序存储空间的间接寄存器寻址 3-4 16-Bit Address Points to Program Memory 寻址模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 间接寄存器寻址模式(续) Register File MSB Points to RP0 or RP1 RP0 or RP1 Program Memory 4-bit Working Register Address dst src OPCODE ~ ~ 3 LSBs Point to the Working Register (1 of 8) ADDRESS ~ Sample Instruction: OR R3, @R6 Value used in Instruction Selected RP points to start fo working register block ~ OPERAND 图 3-5. 寄存器卷中的间接寄存器寻址 3-5 寻址模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 间接寄存器寻址模式(续) Register File MSB Points to RP0 or RP1 RP0 or RP1 Selected RP points to start of working register block Program Memory 4-bit Working Register Address Example Instruction References either Program Memory or Data Memory dst src OPCODE Next 2-bit Point to Working Register Pair (1 of 4) LSB Selects Value used in Instruction Register Pair Program Memory or Data Memory OPERAND Sample Instructions: LCD LDE LDE R5,@RR6 R3,@RR14 @RR4, R8 ; Program memory access ; External data memory access ; External data memory access 图 3-6. 工作寄存器间接访问程序存储器或数据存储器 3-6 16-Bit address points to program memory or data memory 寻址模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 偏址寻址模式(X) 在指令执行时,偏址寻址模式(X)是在基地址的基础上加上一个偏移地址量,计算出有效的操作数地址(如图 37)。偏址寻址可以用来访问内部寄存器卷或外部数据存储器空间。但要注意,不能通过它对 Set 1 中地址段 C0HFFH 进行寻址。 在短指令寻址模式下,8 位的偏移量被认为是介于 -128 到 +127 之间的一个有符号整数,这只用于外部存储器访问 (如图 3-8)。 对寄存器卷寻址时,指令提供的 8 位基地址与工作寄存器中的 8 位偏移地址相加得到操作数地址。对外部存储器访 问时,基地址存放在指令指示的 16 位工作寄存器中,指令中给出的 8 位或 16 位偏移地址加到基地址上,得到操作 数地址(如图 3-9)。 支持对寄存器卷进行偏址寻址的指令只有 Load(LD)。LDC 和 LDE 支持内部程序存储器和外部数据存储器(如果 存在)的偏址寻址模式。 Register File RP0 or RP1 ~ Value used in Instruction + Program Memory Two-Operand Instruction Example Base Address dst/src x 3 LSBs Point to One of the Woking Register (1 of 8) OPCODE ~ Selected RP points to start of working register block OPERAND ~ ~ INDEX Sample Instruction: LD R0, #BASE[R1] ; Where BASE is an 8-bit immediate value 图 3-7. 寄存器空间的偏址寻址模式 3-7 寻址模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 偏址寻址模式(续) Register File MSB Points to RP0 or RP1 RP0 or RP1 ~ ~ Program Memory 4-bit Working Register Address OFFSET dst/src x OPCODE Selected RP points to start of working register block NEXT 2 Bits Point to Working Register Pair (1 of 4) LSB Selects + 8-Bits Register Pair Program Memory or Data Memory 16-Bit address added to offset 16-Bits 16-Bits OPERAND Value used in Instruction Sample Instructions: LDC R4, #04H[RR2] LDE R4,#04H[RR2] ; The values in the program address (RR2 + 04H) are loaded into register R4. ; Identical operation to LDC example, except that external program memory is accessed. 图 3-8. 偏址寻址模式中短格式访问程序或数据存储空间 3-8 寻址模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 偏址寻址模式(续) Register File MSB Points to RP0 or RP1 RP0 or RP1 Program Memory ~ ~ OFFSET 4-bit Working Register Address OFFSET dst/src src OPCODE Selected RP points to start of working register block NEXT 2 Bits Point to Working Register Pair LSB Selects + 16-Bits Register Pair Program Memory or Data Memory 16-Bit address added to offset 16-Bits 16-Bits OPERAND Value used in Instruction Sample Instructions: LDC R4, #1000H[RR2] LDE R4,#1000H[RR2] ; The values in the program address (RR2 + 1000H) are loaded into register R4. ; Identical operation to LDC example, except that external program memory is accessed. 图 3-9. 偏址寻址模式中长格式访问程序或数据存储空间 3-9 寻址模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 直接寻址模式(DA) 在直接寻址模式中,指令提供操作数的 16 位存储器地址。执行 Jump(JP) 和 Call(CALL) 指令时,就是采用这种寻 址模式指定 16 位目标地址并将其装入PC。 LDC 和 LDE 指令即运用直接寻址模式为数据传送操作提供源地址或目标地址,LDC 访问程序存储空间,LDE 访问 外部数据存储空间。 Program or Data Memory Program Memory Memory Address Used Upper Address Byte Lower Address Byte dst/src "0" or "1" OPCODE LSB Selects Program Memory or Data Memory: "0" = Program Memory "1" = Data Memory Sample Instructions: LDC R5,1234H ; LDE R5,1234H ; The values in the program address (1234H) are loaded into register R5. Identical operation to LDC example, except that external program memory is accessed. 图 3-10. Load 指令的直接寻址 3-10 寻址模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 直接寻址模式(续) Program Memory Next OPCODE Memory Address Used Upper Address Byte Lower Address Byte OPCODE Sample Instructions: JP CALL C,JOB1 DISPLAY ; ; Where JOB1 is a 16-bit immediate address Where DISPLAY is a 16-bit immediate address 图 3-11. Call, Jump 的直接寻址 3-11 寻址模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 间接寻址模式(IA) 在间接寻址模式中,须指定程序存储空间中低 256 字节中的某个地址,其中放有要执行的下一条指令地址。只有 CALL 指令支持间接寻址模式。 由于间接寻址模式规定操作数只能存放在程序存储空间的低 256 字节中,所以指令中只有一个 8 位地址;目标地址 的高 8 位全部为 0。 Program Memory Next Instruction LSB Must be Zero Current Instruction dst OPCODE Lower Address Byte Upper Address Byte Program Memory Locations 0-255 Sample Instruction: CALL #40H ; The 16-bit value in program memory addresses 40H and 41H is the subroutine start address. 图 3-12. 间接寻址模式 3-12 寻址模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 相对地址寻址模式(RA) 在相对寻址模式中,指令的调转范围只能在有符号数 -128 到 +127 之间。偏移量加上当前 PC 值,即为下一条要执 行指令的地址。在加偏移量之前,PC 中的内容是紧跟着当前指令的后一条指令地址。 程序控制指令用相对寻址模式来实现条件跳转。支持相对寻址模式的指令有: BTJRF, BTJRT, DJNZ, CPIJE, CPIJNE 和 JR 。 Program Memory Next OPCODE Program Memory Address Used Current Instruction Displacement OPCODE Current PC Value + Signed Displacement Value Sample Instructions: JR ULT,$+OFFSET ; Where OFFSET is a value in the range +127 to -128 图 3-13. 相对寻址 3-13 寻址模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 立即数寻址模式(IM) 立即数寻址模式中,操作数本身就包含在指令当中。根据指令的不同,操作数的长度可以是一个字节或一个字。立 即数寻址模式常用来将常量赋值给寄存器。 Program Memory OPERAND OPCODE (The Operand value is in the instruction) Sample Instruction: LD R0,#0AAH 图 3-14. 立即数寻址模式 3-14 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 4 控制寄存器 概述 本章中,S3C8275X/C8278X/C8274X控制寄存器的详细描述以易读方式排列。可以将本章视为编程时的快速参考 资源。表4-1 列出了标准寄存器描述的重要参数。 控制寄存器描述按照寄存器代表符号的字母顺序排列。更多有关控制寄存器的信息在本手册第二部分硬件资源描述 中。 数据和计数寄存器没有在本章中详细列出。关于外设寄存器的更多内容详见本手册第二部分的相关外设章节。 表 4-1 列举了S3C8275X/C8278X/C8274X所有映射寄存器的位置和读/写特性。每个映射寄存器的硬件复位值在第 八章“复位和省电模式”中描述。 表 4-1. Set 1 寄存器 寄存器名 助记标号 地址 十进制 R/W 十六进制 地址空间 D0H – D2H 未映射 Basic Timer 控制寄存器 BTCON 211 D3H R/W CLKCON 212 D4H R/W FLAGS 213 D5H R/W 寄存器指针 0 RP0 214 D6H R/W 寄存器指针 1 RP1 215 D7H R/W 堆栈指针(高字节) SPH 216 D8H R/W 堆栈指针(低字节) SPL 217 D9H R/W 指令指针(高字节) IPH 218 DAH R/W 指令指针(低字节) IPL 219 DBH R/W 中断请求寄存器 IRQ 220 DCH R 中断屏蔽寄存器 IMR 221 DDH R/W 系统模式寄存器 SYM 222 DEH R/W PP 223 DFH R/W 系统时钟控制寄存器 系统标志寄存器 寄存器页指针 4-1 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 4-2. Set 1, Bank 0 寄存器 寄存器名 助记标号 地址 R/W 十进制 十六进制 时钟 控制寄存器 OSCCON 224 E0H R/W SIO 控制寄存器 SIOCON 225 E1H R/W SIO 数据寄存器 SIODATA 226 E2H R/W SIOPS 227 E3H R/W P0 口控制寄存器(高字节) P0CONH 228 E4H R/W P0 口控制寄存器(低字节) P0CONL 229 E5H R/W P0PUR 230 E6H R/W P1 口控制寄存器(高字节) P1CONH 231 E7H R/W P1 口控制寄存器(低字节) P1CONL 232 E8H R/W P1PUR 233 E9H R/W P2 口控制寄存器(高字节) P2CONH 234 EAH R/W P2 口控制寄存器(低字节) P2CONL 235 EBH R/W P2PUR 236 ECH R/W P3 口控制寄存器(高字节) P3CONH 237 EDH R/W P3 口控制寄存器(低字节) P3CONL 238 EEH R/W P3PUR 239 EFH R/W P0 口数据寄存器 P0 240 F0H R/W P1 口数据寄存器 P1 241 F1H R/W P2 口数据寄存器 P2 242 F2H R/W P3 口数据寄存器 P3 243 F3H R/W P4 口数据寄存器 P4 244 F4H R/W P5 口数据寄存器 P5 245 F5H R/W P6 口数据寄存器 P6 246 F6H R/W EXTIPND 247 F7H R/W 外部中断控制寄存器(高字节) EXTICONH 248 F8H R/W 外部中断控制寄存器(低字节) EXTICONL 249 F9H R/W 251 FBH R/W 253 FDH R 255 FFH R/W SIO 预处理寄存器 P0 口上拉电阻使能控制寄存器 P1 口上拉电阻使能控制寄存器 P2 口上拉电阻使能控制寄存器 P3 口上拉电阻使能控制寄存器 外部中断标志寄存器 FAH 地址空间未映射 STOP 控制寄存器 STPCON FCH 地址空间未映射 Basic timer 计数器 BTCNT FEH 地址空间未映射 中断优先级寄存器 4-2 IPR 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 4-3. Set 1, Bank 1 寄存器 寄存器名 助记标号 地址 R/W 十进制 十六进制 LCON 224 E0H R/W 钟表定时器 控制寄存器 WTCON 225 E1H R/W Timer A 计数器 TACNT 226 E2H R Timer B 计数器 TBCNT 227 E3H R Timer A 数据寄存器 TADATA 228 E4H R/W Timer B 数据寄存器 TBDATA 229 E5H R/W Timer 1/A 控制寄存器 TACON 230 E6H R/W Timer B 控制寄存器 TBCON 231 E7H R/W 时钟输出控制寄存器 CLOCON 232 E8H R/W P4 口控制寄存器(高字节) P4CONH 233 E9H R/W P4 口控制寄存器(低字节) P4CONL 234 EAH R/W P5 口控制寄存器(高字节) P5CONH 235 EBH R/W P5 口控制寄存器(低字节) P5CONL 236 ECH R/W P6 口控制寄存器 P6CON 237 EDH R/W LCD 控制寄存器 EEH – EFH 地址空间未映射 闪存控制寄存器 FMCON 240 F0H R/W 闪存用户可编程使能寄存器 FMUSR 241 F1H R/W 闪存扇区地址寄存器(高字节) FMSECH 242 F2H R/W 闪存扇区地址寄存器(低字节) FMSECL 243 F3H R/W 电池电压检测控制寄存器 BLDCON 244 F4H R/W E5H – FFH 地址空间未映射 注释: 1. “x” 表示该位的值复位后不确定 2. “–“表示该位不使用或未映射,但读取该位时,读到的值为 “0”. 4-3 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Bit number(s) that is/are appended to the register name for bit addressing Register ID Name of individual bit or related bits Register location in the internal register file Register address (hexadecimal) Full Register name FLAGS - System Flags Register D5H Set 1 Bit Identifier .7 .6 .5 .4 .3 .2 .1 .0 Reset Value x x x x x x x 0 Read/Write R/W R/W R/W R/W R/W R/W R/W R/W Bit Addressing Register addressing mode only Mode .7 Carry Flag (C) .6 0 Operation does not generate a carry or borrow condition 1 Operation generates carry-out or borrow into high-order bit 7 Zero Flag (Z) 0 Operation result is a non-zero value 1 Operation result is zero .5 Sign Flag (S) 0 Operation generates positive number (MSB = "0") 1 Operation generates negative number (MSB = "1") R = Read-only W = Write-only R/W = Read/write '-' = Not used Description of the effect of specific bit settings Type of addressing that must be used to address the bit (1-bit, 4-bit, or 8-bit) nRESET value notation: '-' = Not used 'x' = Undetermined value '0' = Logic zero '1' = Logic one 图 4-1. 寄存器描述格式 4-4 Bit number: MSB = Bit 7 LSB = Bit 0 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BLDCON —电池电压检测控制寄存器 F4H Set 1, Bank 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 – – 0 0 0 0 0 0 读/写 – – R/W R R/W R/W R/W R/W 寻址模式 仅寄存器寻址模式 .7–.6 S3C8275X/C8278X/C8274X 不使用 .5 VIN源选择位 .4 .3 .2–.0 0 内部源 1 外部源 电池电压检测结果输出位 (只读) 0 VIN > VREF (使能BLD时) 1 VIN < VREF (使能BLD时) BLD使能/禁止位 0 禁止 BLD 1 使能 BLD 检测电压阀值选择 0 0 0 VBLD = 2.2V 1 0 1 VBLD = 2.4V 0 1 1 VBLD = 2.8V 其它 不可用 4-5 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BTCON — Basic Timer 控制寄存器 D3H Set 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 读/写 R/W R/W R/W R/W R/W R/W R/W R/W 寻址模式 仅寄存器寻址模式 .7–.4 看门狗时钟功能使能位 (系统复位) 1 0 1 0 其它 .3–.2 .1 .0 禁止看门狗时钟功能 使能看门狗时钟功能 Basic Timer 输入时钟选择位(3) 0 0 fxx/4096 0 1 fxx/1024 1 0 fxx/128 1 1 fxx/16 Basic Timer计数器清 0 控制位(1) 0 没有作用 1 清除 Basic Timer 计数器值 Basic Timer 和 Timer/Counters 分频器清 0(2) 0 没有作用 1 2者的分频器清 0 注释: 1. 当写”1”到 BTCON.1 时,Basic Timer 计数器被清0,之后该位也自动清0。 2. 当写”1”到 BTCON.0 时,相应的分频器被清0,之后该位也自动清0。 3. fxx 为选定的系统时钟(主时钟或副时钟)。 4-6 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X CLKCON — 系统时钟控制寄存器 D4H Set 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 – – 0 0 – – – R/W – – R/W R/W – – – 读/写 寻址模式 仅寄存器寻址模式 .7 振荡器 IRQ 唤醒功能位 0 使能省电模式下的 IRQ 唤醒主时钟 1 禁止省电模式下的 IRQ 唤醒主时钟 .6–.5 S3C8275X/C8278X/C8274X 不使用 .4–.3 CPU 时钟 (系统时钟) 选择位 (注) .2–.0 0 0 fxx/16 0 1 fxx/8 1 0 fxx/2 1 1 fxx/1 S3C8275X/C8278X/C8274X 不使用 注释: 复位后,选择最慢时钟(16分频)作为系统时钟。可通过向 CLKCON.3 和 CLKCON.4 位写合适的值选择更快的时钟 速率。 4-7 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X CLOCON — 时钟输出控制寄存器 E8H Set 1, Bank 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 – – – – – – 0 0 读/写 – – – – – – R/W R/W 寻址模式 仅寄存器寻址模式 .7–.2 S3C8275X/C8278X/C8274X 不使用 .1–.0 输出频率选择位 4-8 0 0 选择 fxx/64 0 1 选择fxx/16 1 0 选择fxx/8 1 1 选择fxx/4 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X EXTICONH — 外部中断控制寄存器(高字节) F8H Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.6 P1.7 外部中断(INT7) 设置位 .5–.4 .3–.2 .1–.0 0 0 禁止中断 0 1 使能下降沿中断 1 0 使能上升沿中断 1 1 使能上升沿和下降沿中断 P1.6外部中断(INT6) 设置位 0 0 禁止中断 0 1 使能下降沿中断 1 0 使能上升沿中断 1 1 使能上升沿和下降沿中断 P1.5外部中断(INT5) 设置位 0 0 禁止中断 0 1 使能下降沿中断 1 0 使能上升沿中断 1 1 使能上升沿和下降沿中断 P1.4外部中断(INT4) 设置位 0 0 禁止中断 0 1 使能下降沿中断 1 0 使能上升沿中断 1 1 使能上升沿和下降沿中断 4-9 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X EXTICONL — 外部中断控制寄存器 (低字节) F9H Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.6 P1.3 外部中断(INT3) 设置位 .5–.4 .3–.2 .1–.0 4-10 0 0 禁止中断 0 1 使能下降沿中断 1 0 使能上升沿中断 1 1 使能上升沿和下降沿中断 P0.2 外部中断(INT2) 设置位 0 0 禁止中断 0 1 使能下降沿中断 1 0 使能上升沿中断 1 1 使能上升沿和下降沿中断 P0.1外部中断(INT1) 设置位 0 0 禁止中断 0 1 使能下降沿中断 1 0 使能上升沿中断 1 1 使能上升沿和下降沿中断 P0.0外部中断(INT0) 设置位 0 0 禁止中断 0 1 使能下降沿中断 1 0 使能上升沿中断 1 1 使能上升沿和下降沿中断 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X EXTIPND — 外部中断标志寄存器 F7H Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7 P1.7/INT7 中断标志位 .6 .5 .4 .3 .2 .1 .0 0 无中断请求,写入0清除中断标志 1 中断请求置起(读此位时) P1.6/INT6 中断标志位 0 无中断请求,写入0清除中断标志 1 中断请求置起(读此位时) P1.5/INT5中断标志位 0 无中断请求,写入0清除中断标志 1 中断请求置起(读此位时) P1.4/INT4中断标志位 0 无中断请求,写入0清除中断标志 1 中断请求置起(读此位时) P1.3/INT3中断标志位 0 无中断请求,写入0清除中断标志 1 中断请求置起(读此位时) P0.2/INT2中断标志位 0 无中断请求,写入0清除中断标志 1 中断请求置起(读此位时) P0.1/INT1中断标志位 0 无中断请求,写入0清除中断标志 1 中断请求置起(读此位时) P0.0/INT0中断标志位 0 无中断请求,写入0清除中断标志 1 中断请求置起(读此位时) 4-11 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X FLAGS — 系统标志寄存器 D5H Set 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 x x x x x x 0 0 R/W R/W R/W R/W R/W R/W R R/W 读/写 寻址模式 仅寄存器寻址模式 .7 Carry Flag (C) .6 .5 .4 .3 .2 .1 .0 4-12 0 操作没有产生进位或借位 1 操作产生进位或者借位 Zero Flag (Z) 0 操作结果不是“0” 1 操作结果是“0” Sign Flag (S) 0 操作产生正数(MSB = “0”) 1 操作产生负数(MSB = “1”) Overflow Flag (V) 0 操作结果在 -128 ~ + 127 之间 1 操作结果不在 -128 ~ + 127 之间,即溢出 Decimal Adjust Flag (D) 0 加操作完成 1 减操作完成 Half-Carry Flag (H) 0 加法操作时第 3 位未产生进位或减法操作时第 3 位未产生借位 1 加法操作时第 3 未产生进位或减法操作时第 3 位未产生借位 Fast Interrupt Status Flag (FIS) 0 中断返回(IRET)正在进行(读此位时) 1 快速中断服务程序正在进行(读此位时) Bank Address Selection Flag (BA) 0 选择 Bank 0 1 选择 Bank 1 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X FMCON — 闪存控制寄存器 F0H Set 1, Bank 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 – – 0 R/W R/W R/W R/W R – – R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.4 闪存模式选择位 0 1 0 1 (字节) 编程模式 1 0 1 0 扇区擦除模式 0 1 1 0 Hard Lock 模式 其它 .3 不可用 扇区擦除状态位 (只读) 0 扇区擦除成功 1 扇区擦除失败 .2–.1 S3C8275X/C8278X/C8274X 不使用 .0 闪存操作启动位 0 操作停止 1 操作开始 4-13 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X FMSECH — 闪存扇区地址寄存器 (高字节) F2H Set 1, Bank 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.0 闪存扇区地址位(高字节) Flash ROM 扇区选择高8位(第15 ~ 8位)。 注释: 高字节 flash 扇区地址指针指向16位指针地址的高8位。 FMSECL — 闪存扇区地址寄存器 (低字节) F3H Set 1, Bank 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R R/W 读/写 寻址模式 仅寄存器寻址模式 .7 闪存扇区地址位(低字节) Flash ROM 扇区选择第 7 位。 .6–.0 S3C8275X/C8278X/C8274X 不使用 注释: 低字节 flash 扇区地址指针指向16位指针地址的低8位。 4-14 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X FMUSR — 闪存用户可编程使能寄存器 F1H Set 1, Bank 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.0 闪存用户可编程使能位 1 0 1 0 0 其它 1 0 1 使能用户编程模式 禁止用户编程模式 4-15 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X IMR — 中断屏蔽寄存器 DDH Set 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 x x x x x x x x R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7 中断优先级7 (IRQ7) 使能位;外部中断 P1.4–1.7 .6 .5 .4 .3 .2 .1 .0 0 禁止(屏蔽) 1 使能(未屏蔽) 中断优先级6 (IRQ6) 使能位;外部中断 P1.3 0 禁止(屏蔽) 1 使能(未屏蔽) 中断优先级5 (IRQ5) 使能位;外部中断 P0.2 0 禁止(屏蔽) 1 使能(未屏蔽) 中断优先级4 (IRQ4) 使能位;外部中断 P0.1 0 禁止(屏蔽) 1 使能(未屏蔽) 中断优先级3 (IRQ3) 使能位;外部中断 P0.0 0 禁止(屏蔽) 1 使能(未屏蔽) 中断优先级2 (IRQ2) 使能位;钟表定时器 溢出 0 禁止(屏蔽) 1 使能(未屏蔽) 中断优先级1 (IRQ1) 使能位;SIO 中断 0 禁止(屏蔽) 1 使能(未屏蔽) 中断优先级0 (IRQ0) 使能位; Timer 1/A 匹配, Timer B 匹配 0 禁止(屏蔽) 1 使能(未屏蔽) 注释: 当某个中断级被屏蔽,任何发起的中断请求都不能被 CPU 识别。 4-16 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X IPH — 指令指针 (高字节) DAH Set 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 x x x x x x x x R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.0 指令指针地址(高字节) 高字节指令指针指向 16 位指令指针地址的高 8 位(IP15-IP8)。IP 地址的低字节在 IPL 寄存器(地址:DBH)中。 IPL —指令指针(低字节) DBH Set 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 x x x x x x x x R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.0 指令指针地址(低字节) 低字节指令指针指向 16 位指令指针地址的低 8 位(IP7-IP0)。IP 地址的高字节在 IPH 寄存器(地址:DAH)中。 4-17 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X IPR — 中断优先级寄存器 FFH Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 x x x x x x x x R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7, .4, and .1 中断 A、B 和 C 组优先级控制位 .6 .5 .3 .2 .0 0 0 0 组优先级未定义 0 0 1 B > C > A 0 1 0 A > B > C 0 1 1 B > A > C 1 0 0 C > A > B 1 0 1 C > B > A 1 1 0 A > C > B 1 1 1 组优先级未定义 中断 C 子分组优先级控制位 0 IRQ6 > IRQ7 1 IRQ7 > IRQ6 中断 C 组优先级控制位 0 IRQ5 > (IRQ6, IRQ7) 1 (IRQ6, IRQ7) > IRQ5 中断 B 子分组优先级控制位 0 IRQ3 > IRQ4 1 IRQ4 > IRQ3 中断 B 组优先级控制位 0 IRQ2 > (IRQ3, IRQ4) 1 (IRQ3, IRQ4) > IRQ2 中断 A 组优先级控制位 0 IRQ0 > IRQ1 1 IRQ1 > IRQ0 注释: 中断 A 组 - IRQ0, IRQ1 中断 B 组 - IRQ2, IRQ3, IRQ4 中断 C 组 - IRQ5, IRQ6, IRQ7 4-18 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X IRQ — 中断请求寄存器 DCH Set 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 读/写 R R R R R R R R 寻址模式 仅寄存器寻址模式 .7 中断级 7 (IRQ7)请求标志位;外部中断 P1.4–1.7 .6 .5 .4 .3 .2 .1 .0 0 没有中断 1 标志位置位 中断级 6 (IRQ6)请求标志位;外部中断 P1.3 0 没有中断 1 标志位置位 中断级 5 (IRQ5)请求标志位;外部中断 P0.2 0 没有中断 1 标志位置位 中断级 4 (IRQ4)请求标志位;外部中断 P0.1 0 没有中断 1 标志位置位 中断级 3 (IRQ3)请求标志位;外部中断 P0.0 0 没有中断 1 标志位置位 中断级 2 (IRQ2)请求标志位;钟表定时器 溢出 0 没有中断 1 标志位置位 中断级 1 (IRQ1)请求标志位;SIO 中断 0 没有中断 1 标志位置位 中断级 0 (IRQ0)请求标志位;Timer 1/A 匹配, Timer B 匹配 0 没有中断 1 标志位置位 4-19 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X LCON — LCD 控制寄存器 E0H Set 1, Bank 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 – 0 R/W R/W R/W R/W R/W R/W – R/W 读/写 寻址模式 仅寄存器寻址模式 .7 内部 LCD 分压电阻使能位 .6–.5 .4–.2 0 使能LCD内部分压电阻 1 禁止LCD内部分压电阻 LCD 时钟源选择位 0 0 fw/29 (64 Hz) 0 1 fw/28 (128 Hz) 1 0 fw/27 (256 Hz) 1 1 fw/26 (512 Hz) LCD 占空比和偏置选择位 0 0 0 1/4 占空比, 1/3 偏置 0 0 1 1/3 占空比, 1/3 偏置 0 1 0 1/3 占空比, 1/2 偏置 0 1 1 1/2 占空比, 1/2 偏置 1 x x 静态 注释: 1. "x" 表示值可以为任意值. 2. 当选择 1/2 偏置时,偏置电压可设为 VLC0, VLC1 (VLC2), 和 VSS. .1 S3C8275X/C8278X/C8274X 不使用 .0 LCD 显示控制位 4-20 0 关闭显示(关闭 P-Tr) 1 打开显示 (打开 P-Tr) 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X OSCCON — 时钟控制寄存器 E0H Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 – – – 0 0 – 0 R/W – – – R/W R/W – R/W 读/写 寻址模式 仅寄存器寻址模式 .7 副时钟电路选择位 0 初始状态 1 副振荡器省电模式选择 (当副振荡器停止时自动清 "0") 注释: 1. 副振荡器工作时 OSCCON.7 必须保持 “1” 。 2. 在VREG 和 GND 之间需要加一个电容 (0.1uF)。 .6–.4 不使用,必须保持 „0‟ .3 主振荡器控制位 .2 0 主振荡器工作 1 主振荡器停止 副振荡器控制位 0 副振荡器工作 1 副振荡器停止 .1 S3C8275X/C8278X/C8274X 不使用 .0 系统时钟选择位 0 使用主振荡器作系统时钟 1 使用副振荡器作系统时钟 4-21 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P0CONH — P0 口控制寄存器 (高字节) E4H Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.6 P0.7/BUZ 设置位 .5–.4 .3–.2 .1–.0 4-22 0 0 施密特输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能 (BUZ) P0.6/CLKOUT设置位 0 0 施密特输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(CLKOUT) P0.5/TBOUT设置位 0 0 施密特输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(TBOUT) P0.4/TAOUT设置位 0 0 施密特输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(TAOUT) 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P0CONL — P0 口控制寄存器 (低字节) E5H Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.6 P0.3/T1CLK 设置位 .5–.4 .3–.2 .1–.0 0 0 施密特输入模式(T1CLK) 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 S3C8275X/C8278X/C8274X 不使用 P0.2/INT2 设置位 0 0 施密特输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 S3C8275X/C8278X/C8274X 不使用 P0.1/INT1 设置位 0 0 施密特输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 S3C8275X/C8278X/C8274X 不使用 P0.0/INT0 设置位 0 0 施密特输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 S3C8275X/C8278X/C8274X 不使用 4-23 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P0PUR — P0 口上拉电阻使能控制寄存器 E6H Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7 P0.7 上拉电阻使能控制位 .6 .5 .4 .3 .2 .1 .0 注释: 4-24 0 禁止上拉电阻 1 使能上拉电阻 P0.6上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P0.5上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P0.4上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P0.3上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P0.2上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P0.1上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P0.0上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 当相应的口设为推挽输出或复用功能时,其上拉电阻自动禁止。 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P1CONH — P1 口控制寄存器 (高字节) E7H Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.6 P1.7/INT7 设置位 .5–.4 .3–.2 .1–.0 0 0 施密特输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 S3C8275X/C8278X/C8274X 不使用 P1.6/INT6设置位 0 0 施密特输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 S3C8275X/C8278X/C8274X 不使用 P1.5/INT5设置位 0 0 施密特输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 S3C8275X/C8278X/C8274X 不使用 P1.4/INT4设置位 0 0 施密特输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 S3C8275X/C8278X/C8274X 不使用 4-25 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P1CONL — P1 口控制寄存器(低字节) E8H Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.6 P1.3/INT3设置位 .5–.4 .3–.2 .1–.0 4-26 0 0 施密特输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 S3C8275X/C8278X/C8274X 不使用 P1.2/SI设置位 0 0 施密特输入模式 (SI) 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 S3C8275X/C8278X/C8274X 不使用 P1.1/SO设置位 0 0 施密特输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SO) P1.0/SCK 设置位 0 0 施密特输入模式 (SCK) 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SCK) 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P1PUR — P1 口上拉电阻使能控制寄存器 F9H Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7 P1.7上拉电阻使能控制位 .6 .5 .4 .3 .2 .1 .0 0 禁止上拉电阻 1 使能上拉电阻 P1.6上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P1.5上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P1.4上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P1.3上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P1.2上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P1.1上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P1.0上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 注释: 当相应的口设为推挽输出或复用功能时,其上拉电阻自动禁止。 4-27 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P2CONH — P2 口控制寄存器 (高字节) EAH Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.6 P2.7/SEG24 设置位 .5-.4 .3–.2 .1–.0 4-28 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG24) P2.6/SEG25设置位 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG25) P2.5/SEG26设置位 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG26) P2.4/SEG27设置位 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG27) 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P2CONL — P2 口控制寄存器 (低字节) EBH Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.6 P2.3/SEG28设置位 .5–.4 .3–.2 .1–.0 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG28) P2.2/SEG29设置位 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG29) P2.1/SEG30设置位 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG30) P2.0/SEG31/VBLDREF设置位 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG31 或 VBLDREF) 4-29 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P2PUR — P2 口上拉电阻使能控制寄存器 ECH Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7 P2.7上拉电阻使能控制位 .6 .5 .4 .3 .2 .1 .0 0 禁止上拉电阻 1 使能上拉电阻 P2.6上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P2.5上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P2.4上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P2.3上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P2.2上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P2.1上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P2.0上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 注释: 当相应的口设为推挽输出或复用功能时,其上拉电阻自动禁止。 4-30 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P3CONH — P3 口控制寄存器 (高字节) EDH Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.6 P3.7/SEG16 设置位 .5–.4 .3–.2 .1–.0 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG16) P3.6/SEG17设置位 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG17) P3.5/SEG18设置位 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG18) P3.4/SEG19设置位 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG19) 4-31 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P3CONL — P3 口控制寄存器 (低字节) EEH Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.6 P3.3/SEG20设置位 .5–.4 .3–.2 .1–.0 4-32 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG20) P3.2/SEG21设置位 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG21) P3.1/SEG22设置位 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG22) P3.0/SEG23设置位 0 0 输入模式 0 1 N 沟道开漏输出 1 0 推挽输出模式 1 1 复用功能(SEG23) 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P3PUR — P3 口上拉电阻使能控制寄存器 EFH Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7 P3.7上拉电阻使能控制位 .6 .5 .4 .3 .2 .1 .0 0 禁止上拉电阻 1 使能上拉电阻 P3.6上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P3.5上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P3.4上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P3.3上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P3.2上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P3.1上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 P3.0上拉电阻使能控制位 0 禁止上拉电阻 1 使能上拉电阻 注释: 当相应的口设为推挽输出或复用功能时,其上拉电阻自动禁止。 4-33 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P4CONH — P4 口控制寄存器 (高字节) E9H Set 1, Bank 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.6 P4.7/SEG8 设置位 .5–.4 .3–.2 .1–.0 4-34 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG8) P4.6/SEG9设置位 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG9) P4.5/SEG10设置位 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG10) P4.4/SEG11设置位 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG11) 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P4CONL — P4 口控制寄存器 (低字节) EAH Set 1, Bank 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.6 P4.3/SEG12设置位 .5–.4 .3–.2 .1–.0 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG12) P4.2/SEG13设置位 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG13) P4.1/SEG14设置位 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG14) P4.0/SEG15设置位 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG15) 4-35 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P5CONH — P5 控制寄存器(高字节) EBH Set 1, Bank 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.6 P5.7/SEG0设置位 .5–.4 .3–.2 .1–.0 4-36 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG0) P5.6/SEG1设置位 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG1) P5.5/SEG2设置位 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG2) P5.4/SEG3设置位 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG3) 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P5CONL — P5 控制寄存器 (低字节) ECH Set 1, Bank 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.6 P5.3/SEG4设置位 .5–.4 .3–.2 .1–.0 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG4) P5.2/SEG5设置位 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG5) P5.1/SEG6设置位 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG6) P5.0/SEG7设置位 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(SEG7) 4-37 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P6CON — P6 口控制寄存器 EDH Set 1, Bank 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.6 P6.3/COM3设置位 .5–.4 .3–.2 .1–.0 4-38 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(COM3) P6.2/COM2设置位 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(COM2) P6.1/COM1设置位 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(COM1) P6.0/COM0设置位 0 0 输入模式 0 1 输入上拉模式 1 0 推挽输出模式 1 1 复用功能(COM0) 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X PP — 寄存器页指针 DFH Set 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.4 目的寄存器页选择位 0 0 0 0 目的寄存器: 第 0 页 0 0 0 1 目的寄存器: 第 1 页(S3C8278X/C8274X 不使用) 0 0 1 0 目的寄存器: 第 2 页 其它 .3– .0 S3C8275X/C8278X/C8274X 不使用 源寄存器页选择位 0 0 0 0 源寄存器:第 0 页 0 0 0 1 源寄存器:第 1 页(S3C8278X/C8274X 不使用) 0 0 1 0 源寄存器:第 2 页 其它 S3C8275X/C8278X/C8274X 不使用 注释: 1. S3C8275X内部寄存器卷分为3页 (页0-2). 页 0-1 作为通用寄存器卷使用, 页 2 作为 LCD 数据寄存器和通用寄存器使用 2. S3C8278X/C8274X内部寄存器卷分为2页 (页0,2). 页 0 作为通用寄存器卷使用, 页 2 作为 LCD 数据寄存器和通用寄存器使用 4-39 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X RP0 — 寄存器指针 0 D6H Set 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 1 1 0 0 0 – – – R/W R/W R/W R/W R/W – – – 读/写 寻址模式 仅寄存器寻址模式 .7–.3 寄存器指针 0 地址值 寄存器指针 0 可以单独指向寄存器卷中的某个 256 字节工作寄存器区域。通过使用寄 存器指针 RP0 和 RP1 同时选择 2 个 8 字节寄存器组作为有效的工作寄存器空间。复 位后,RP0 指向寄存器 Set 1 的 C0H 地址,选择从C0H 到 C7H 的 8 位工作寄存器。 .2–.0 RP1 — 寄存器指针 S3C8275X/C8278X/C8274X 不使用 1 D7H Set 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 1 1 0 0 1 – – – R/W R/W R/W R/W R/W – – – 读/写 寻址模式 仅寄存器寻址模式 .7– .3 寄存器指针 1 地址值 寄存器指针 1 可以单独指向寄存器卷中的某个 256 字节工作寄存器区域。通过使用寄 存器指针 RP0 和 RP1 同时选择 2 个 8 字节寄存器组作为有效的工作寄存器空间。复 位后,RP1 指向寄存器 Set 1 的 C8H 地址,选择从C8H 到 CFH 的 8 位工作寄存器。 .2– .0 4-40 S3C8275X/C8278X/C8274X 不使用 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X SIOCON — SIO 控制寄存器 E1H Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7 SIO 移位时钟选择位 .6 .5 .4 .3 .2 .1 .0 0 内部时钟 (P.S 时钟) 1 外部时钟 (SCK) 数据方向控制为 0 MSB优先模式 1 LSB优先模式 SIO 模式选择位 0 只接收模式 1 发送/接收模式 移位时钟边沿选择位 0 下降沿 Tx,上升沿 Rx 1 上升沿 Tx,下降沿 Rx SIO 计数器清 0 和移位启动位 0 没有作用 1 3位计数器清0,并启动移位 SIO 移位操作时能位 0 禁止移位和时钟计数 1 使能移位和时钟计数 SIO 中断使能位 0 禁止 SIO 中断 1 使能 SIO 中断 SIO 中断标志位 0 无中断标志 (读此位时), 清除中断标志 (写此位时) 0 中断标志位置位 (读此位时) 4-41 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X SPH — 堆栈指针 (高字节) D8H Set 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 x x x x x x x x R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.0 堆栈指针地址 (高字节) 高字节堆栈指针的值是 16 位堆栈指针地址(SP15–SP8)的高 8 位。低字节堆栈指针 的值位于寄存器 SPL(D9H)中。复位后,堆栈指针(SP)的值不确定。 SPL — 堆栈指针 (低字节) D9H Set 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 x x x x x x x x R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.0 堆栈指针地址(低字节) 低字节堆栈指针的值是 16 位堆栈指针地址(SP7–SP0)的低 8 位。高字节堆栈指针 的值位于寄存器 SPH(D8H)中。复位后,堆栈指针(SP)的值不确定。 4-42 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X STPCON — Stop 控制寄存器 FBH Set 1, Bank 0 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7–.0 STOP 控制位 10100101 使能 使用 stop 指令 其它值 禁止 使用 stop 指令 注释: 在执行 STOP 指令前,需要将 STPCON 寄存器设置为“10100101B”,否则,STOP 指令不会被执行,同时系统会复位 4-43 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X SYM — 系统模式寄存器 DEH Set 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 – – x x x 0 0 R/W – – R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7 始终保持逻辑 "0" .6–.5 S3C8275X/C8278X/C8274X 不使用 .4–.2 快速中断优先级选择位 (1) .1 .0 0 0 0 IRQ0 0 0 1 IRQ1 0 1 0 IRQ2 0 1 1 IRQ3 1 0 0 IRQ4 1 0 1 IRQ5 1 1 0 IRQ6 1 1 1 IRQ7 快速中断使能位 (2) 0 禁止快速中断 1 使能快速中断 全局中断使能位 (3) 0 禁止所有中断 1 使能所有中断 注释: 1. 一次只能选择一个中断优先级作为快速中断。 2. 将 SYM.1 设为“1”使能 SYM.2-SYM.4 选择的快速中断。 3. 复位后,必须通过执行 EI 指令使能全局中断(而不是往 SYM.0 写“1”)。 4-44 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X TACON — Timer 1/A 控制寄存器 E6H Set 1, Bank 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7 Timer 1 运行模式选择位 .6–.4 .3 .2 .1 .0 0 两个8 位 timer 模式 (timer A/B) 1 一个16位 timer 模式 (timer 1) Timer 1/A 时钟选择位 0 0 0 fxx/512 0 0 1 fxx/256 0 1 0 fxx/64 0 1 1 fxx/8 1 0 0 fxx (系统时钟) 1 0 1 fxt (副时钟) 1 1 0 T1CLK (外部时钟) 1 1 1 不可用 Timer 1/A 计数器清0位 0 没有作用 1 清除 timer 1/A 的计数器 (当写此位时,计数器清为"0"后该位自动清"0") Timer 1/A 计数器运行使能位 0 停止计数器计数 1 使能计数器计数 Timer 1/A 中断使能位 0 禁止中断 1 使能中断 Timer 1/A 中断标志位Interrupt Pending Bit 0 无中断标志 (读此位时), 清除中断标志 (写此位时) 1 中断标志位置位 (读此位时) 4-45 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X TBCON — Timer B 控制寄存器 E7H Set 1, Bank 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 – 0 0 0 0 0 0 0 读/写 – R/W R/W R/W R/W R/W R/W R/W 寻址模式 仅寄存器寻址模式 .7 S3C8275X/C8278X/C8274X 不使用 .6–.4 Timer B 始终选择位 0 0 0 fxx/512 0 0 1 fxx/256 0 1 0 fxx/64 0 1 1 fxx/8 1 0 0 fxt (副时钟) 其它 .3 .2 .1 .0 4-46 不可用 Timer B 计数器清0位 0 没有作用 1 清除 timer B 的计数器 (当写此位时,计数器清为"0"后该位自动清为 "0") Timer B 计数器运行使能位 0 停止计数器计数 1 使能计数器计数 Timer B 中断使能位 0 禁止中断 1 使能中断 Timer B 中断标志位 0 无中断标志 (读此位时), 清除中断标志 (写此位时) 1 中断标志位置位 (读此位时) 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X WTCON — 钟表定时器 控制寄存器 E1H Set 1, Bank 1 位 .7 .6 .5 .4 .3 .2 .1 .0 复位值 0 0 0 0 0 0 0 0 R/W R/W R/W R/W R/W R/W R/W R/W 读/写 寻址模式 仅寄存器寻址模式 .7 钟表定时器时钟选择位 .6 .5–.4 .3–.2 .1 .0 0 主时钟27 分频(fx/128) 1 副时钟 (fxt) 钟表定时器 中断使能位 0 禁止钟表定时器 中断 1 使能 钟表定时器 中断 蜂鸣器信号选择位 0 0 0.5 kHz 0 1 1 kHz 1 0 2 kHz 1 1 4 kHz 钟表定时器 速度选择位 0 0 钟表定时器中断时间: 1s 0 1 钟表定时器中断时间: 0.5s 1 0 钟表定时器中断时间:0.25s 1 1 钟表定时器中断时间:0.91ms 钟表定时器 使能位 0 禁止钟表定时器; 分频电路清0 1 使能钟表定时器 钟表定时器 中断标志位 0 无中断标志 (读此位时), 清除中断标志 (写此位时) 1 中断标志位置位 (读此位时) 注释: 假设 钟表定时器 的时钟频率 (fw) 为 32.768 kHz. 4-47 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 注释 4-48 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 5 中断结构 中断结构 概述 S3C8- 系列的中断结构由三个基本部分组成:中断级,中断向量和中断源。SAM8RC CPU 最多可以识别 8 个中 断级和 128 个中断向量。当多个中断向量同属于一个中断级时,这几个向量的优先级由硬件决定。从芯片设计的 角度来看,单个或多个中断源可以共用同一个中断向量地址。 中断级 (Levels) 中断级是优先级分配和识别的主要单元。所有的外设和 I/O 模块都可以发出中断请求。换句话说,外设和 I/O 模 块的操作都是中断驱动的(interrupt-driven)。一共有 8 个可能的中断级:IRQ0–IRQ7,也被称为优先级 0 ~ 优 先级 7。每个中断级直接与中断请求号 (IRQn) 关联。每款芯片的中断级数量不同。S3C8275X/C8278X/C8274X 的中断结构中就有 8 个中断级。 中断级序号 0~7 仅仅是一个标号,并不直接表示优先级。相对优先级由中断优先级寄存器 IPR 中的设置决定。 IPR中,中断组和子分组结构更细化了各个中断级之间的优先级定义。 中断向量 (Vectors) 每一个中断级中可以包括一个或多个中断向量,又或者没有任何中断地址。每个中断级最多支持 128 个中断向量 (但 S3C8- 系列产品中实际用到的向量个数往往远小于 128)。当一个中断级有多个中断地址时,优先级由硬件 决定。S3C8275X/C8278X/C8274X 里有 12 个中断向量。 中断源 (Sources) 中断源可以是任何产生中断的外设。可以是外部管脚或者计数器溢出。多个中断源可以共用一个中断向量。 S3C8275X/C8278X/C8274X的中断结构中有 12 个中断源。 当中断服务程序开始之后,必须清除相应的中断标志位,如果不是硬件自动清零,就必须软件手动清零。标志位类 型是由中断源的标志位产生/清除机制决定的。 5-1 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 中断类型 之前介绍的 S3C8 系列中断结构的三个组成部分 — 中断级,中断向量和中断源 — 充分使用了芯片的中断逻 辑,一起决定了芯片的中断结构。中断结构一共有三种可能的组合,分别称为 Type1,2,3。三者之间的区别在 于分配给每个中断级的中断向量和中断源的个数不同。(详见图 5-1) Type 1: 一个中断级 (IRQn) + 一个中断向量 (V1) + 一个中断源 (S1) Type 2: 一个中断级(IRQn) + 一个中断向量 (V1) + 多个中断源(S1 – Sn) Type 3: 一个中断级(IRQn) + 多个中断向量(V1 – Vn) + 多个中断源 (S1 – Sn , Sn+1 – Sn+m) S3C8275X/C8278X/C8274X只使用了上述两种 Type。 Type 1: Levels Vectors Sources IRQ n V1 S1 S1 Type 2: IRQ n V1 S2 S3 Sn Type 3: IRQ n V1 S1 V2 S2 V3 S3 Vn Sn S 注释 : 1. S n 和 Vn 中的 n 是可扩展的. 2. 在 S3C8275X/C8278X/C8274X 中 ,使用的是中断类型 1 和 3 图 5-1. S3C8-系列中的中断类型 5-2 S S n + n + n + 1 2 m 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X S3C8275X/C8278X/C8274X 中断结构 S3C8275X/C8278X/C8274X支持 12 个中断源,每一个中断源都有对应的中断向量地址。在这款芯片中,CPU 可以响应 8 个中断级 (参见图 5-2)。 多个中断级同时发出中断请求时,中断优先级寄存器(IPR)中的值决定了哪一个竞争中的中断级先被 CPU 响 应。如果同一个中断级中的多个中断源同时发出中断请求,中断向量地址最小的那个中断源拥有最高优先级,首先 被响应(同一中断级内中断源优先级顺序由硬件决定)。 当 CPU 响应某个中断请求以后,中断处理就开始了。此时所有的其他中断都处于禁止状态,PC 和 FLAGS 的 值被压入堆栈。从中断向量地址中获取中断服务程序的起始地址(16 位地址由中断向量地址处的 8 位和向量地 址之后的 8位数据一起构成),程序跳转而后开始执行中断服务程序。 Levels Vectors Sources Reset/Clear RESET 100H Basic timer overflow H/W F0H Timer 1/A match S/W F2H Timer B match S/W IRQ1 F4H SIO interrupt S/W IRQ2 F6H Watch timer overflow S/W IRQ3 E0H P0.0 external interrupt S/W IRQ4 E2H P0.1 external interrupt S/W IRQ5 E4H P0.2 external interrupt S/W IRQ6 E6H P1.3 external interrupt S/W E8H P1.4 external interrupt S/W EAH P1.5 external interrupt S/W ECH P1.6 external interrupt S/W EEH P1.7 external interrupt S/W IRQ0 IRQ7 注释: 1. 在给定的中断级中,越低的中断向量地址中断优先级越高 例如:在IRQ0中,F0H 比 F2H 优先级高, 同一中断级内部的优先级顺序出厂时已确定。 2. 外部中断由上升沿或下降沿触发,触发方式由相应的控制寄存器决定 图 5-2. S3C8275X/C8278X/C8274X 中断结构 5-3 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 中断向量地址 S3C8275X/C8278X/C8274X中断结构的所有中断向量地址都位于内部16K字节程序存储空间 (0H–3FFFH,详见图 5-3) 的向量地址区。 没有被用作中断向量的地址空间可以当作普通的程序存储空间。此时要小心千万不能与中断向量区交叠 (表 5-1 列出了所有的向量地址)。 ROM中的程序复位地址为 0100H。 S3F8275X ROM (Full Flash 产品)中的复位地址可在 smart option 中修改。详情参见第16章 嵌入式 Flash存储器 接口。 (Decimal) (HEX) 16,383 3FFFH 16-Kbyte 1FFFH 8,191 8-Kbyte 0FFFH 4,095 4-Kbyte Internal Program Memory (ROM) Area 255 Interrupt Vector Area Smart Option Area 100H FFH 3FH 3CH 0 00H 图 5-3. ROM 中断向量地址区 5-4 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 5-1. 中断向量 向量地址 中断源 中断请求 复位/清除 十进制值 十六进制值 中断优先级 级内优先级 硬件 软件 256 100H Basic timer 溢出 Reset 242 F2H Timer B 匹配 IRQ0 1 240 F0H Timer 1/A匹配 0 244 F4H SIO 中断 IRQ1 246 F6H 钟表定时器溢出 IRQ2 224 E0H P0.0 外部中断 IRQ3 226 E2H P0.1 外部中断 IRQ4 228 E4H P0.2 外部中断 IRQ5 230 E6H P1.3 外部中断 IRQ6 238 EEH P1.7 外部中断 IRQ7 3 236 ECH P1.6 外部中断 2 234 EAH P1.5 外部中断 1 232 E8H P1.4 外部中断 0 注释: 1. 中断优先级标注是反向的:"0" 的优先级最高,"1" 第二高,依次往下。 2. 若2个或多个同级中断同时发生,则向量地址较低的中断具有较高的优先级。同级中断的优先级由硬件决定。 5-5 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 使能/禁止中断的指令 (EI, DI) 执行使能中断指令 (EI) 使能全局中断结构。然后,所有的中断按照既定的优先级顺序执行。 注释 复位后,在初始化程序中应该包含 EI 指令来使能全局中断结构。 在正常的操作中,可以执行 DI (禁止中断)指令随时禁止全局中断处理。EI 和 DI 指令会改变寄存器 SYM 的 第 0 位状态。 系统级中断控制寄存器 除了特定中断源的控制寄存器外,4 个系统级寄存器也控制中断处理: — 中断屏蔽寄存器,IMR,使能 (解除屏蔽) 或者 禁止 (屏蔽) 中断级。 — 中断优先级控制寄存器,IPR, 控制各个中断级之间的相对优先级。 — 中断请求寄存器,IRQ,包含每个中断级的中断标志位 (不同于中断源的标志位)。 — 系统模式控制寄存器,SYM,使能或者禁止全局中断处理 ( SYM 的设置还可以使能快速中断并在硬件支持的 情况下控制外部接口). 表 5-2. 中断控制寄存器描述 控制寄存器 ID R/W 功能描述 中断屏蔽寄存器 IMR R/W IMR 寄存器中的位设置可以使能或禁止 IRQ0–IRQ7 中任意一 个中断级的中断处理。 中断优先级寄存器 IPR R/W 控制各个中断级间的相对优先级。S3C8275X/C8278X/C8274X 中的 7 个中断级被分作 3 个组:A,B 和C 组。A组包括 IRQ0 和 IRQ1,B组包括IRQ2,IRQ3 和 IRQ4,C 组包括 IRQ5,IRQ6 和 IRQ7。 中断请求寄存器 IRQ R 包含每个中断级的中断标志位 系统模式控制寄存器 SYM R/W 包含每个中断级的中断标志位 注释: IMR 寄存器改变成任何值前,都必须禁止所有中断。建议使用 DI 指令。 5-6 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 中断处理控制要点 中断处理控制可以通过两种方式来完成:全局或者特定中断级和中断源控制。系统级的中断结构控制要点如下: — 全局中断的使能/禁止 (通过 EI 和 DI 指令或直接操作 SYM.0) — 中断级使能/禁止 (通过寄存器 IMR) — 中断级优先级设置 (通过寄存器 IPR) — 通过相应的外设控制寄存器使能/禁止中断源 注释 包含中断处理的应用程序中,务必确保包含必须的寄存器文件地址 (寄存器指针) 信息。 EI S nRESET R Q Interrupt Request Register (Read-only) Polling Cycle IRQ0-IRQ7, Interrupts Interrupt Priority Register Vector Interrupt Cycle Interrupt Mask Register Global Interrupt Control (EI, DI or SYM.0 manipulation) 图 5-4. 中断功能框图 5-7 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 外设中断控制寄存器 每一个中断源都有一个或多个对应的外设控制寄存器来控制相关外设产生的中断。(详见表 5-3) 表 5-3. 中断源控制和数据寄存器 中断源 中断级 寄存器 Set 1寄存器地址 Timer B 匹配 Timer 1/A匹配 IRQ0 TBCON, TBDATA, TBCNT TACON, TADATA, TACNT E7H, E5H, E3H, bank 1 E6H, E4H, E2H, bank 1 SIO 中断 IRQ1 SIOCON SIODATA SIOPS E1H, bank 0 E2H, bank 0 E3H, bank 0 钟表定时器 溢出 IRQ2 WTCON E1H, bank 1 P0.0 外部中断 IRQ3 P0CONL EXTICONL EXTIPND E5H, bank 0 F9H, bank 0 F7H, bank 0 P0.1 外部中断 IRQ4 P0CONL EXTICONL EXTIPND E5H, bank 0 F9H, bank 0 F7H, bank 0 P0.2 外部中断 IRQ5 P0CONL EXTICONL EXTIPND E5H, bank 0 F9H, bank 0 F7H, bank 0 P1.3 外部中断 IRQ6 P1CONL EXTICONL EXTIPND E8H, bank 0 F9H, bank 0 F7H, bank 0 外部中断 外部中断 外部中断 外部中断 IRQ7 P1CONH EXTICONH EXTIPND E7H, bank 0 F8H, bank 0 F7H, bank 0 P1.7 P1.6 P1.5 P1.4 注释: 若某一中断在 IMR 寄存器中未被屏蔽 (使能中断级),则其中断标志位和使能位必须在DI 指令之后写入。 5-8 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 系统模式寄存器 (SYM) 系统模式寄存器 SYM (地址:DEH,Set 1) 可以用来使能/禁止全局中断处理,控制快速中断处理。(参见图55) 复位时清0 SYM.1 和 SYM.0,快速中断级选择位 SYM.4–SYM.2 的值不确定。 EI 和 DI 指令可以使能或禁止全局中断处理,相应的,也可以通过修改 SYM.0 得到同样效果。为使能中断处 理,复位后应该在初始化程序中包含 EI 指令。尽管可以通过操作 SYM.3 位直接使能或禁止中断,但还是建议用 EI 指令或 DI 指令。 System Mode Register (SYM) DEH, Set 1, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 LSB Global interrupt enable bit: 0 = Disable all interrupts processing 1 = Enable all interrupts processing Always logic "0" Not used for the S3C8275X/C8278X/C8274X Fast interrupt level selection bits: 0 0 0 = IRQ0 0 0 1 = IRQ1 0 1 0 = IRQ2 0 1 1 = IRQ3 1 0 0 = IRQ4 1 0 1 = IRQ5 1 1 0 = IRQ6 1 1 1 = IRQ7 Fast interrupt enable bit: 0 = Disable fast interrupts processing 1 = Enable fast interrupts processing 注释 : 1. 任何时刻只能有一个中断级被设定为快速中断. 2. 设置 SYM.1 为 "1" 使能由 SYM.2-SYM.4选择的中断级为快速中断 3. 复位后,必须执行一次 EI 指令以使能系统的中断处理模块 (而不是写 "1" 到 SYM.0) 图 5-5. 系统模式寄存器 (SYM) 5-9 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 中断屏蔽寄存器 (IMR) 中断屏蔽寄存器 IMR (地址:DDH,Set 1) 可用来使能或禁止各个中断级的中断处理。复位后,IMR 的所有位都 是不确定的,所以必须在初始化程序中根据应用设置该寄存器。 IMR 中的每一位都对应一个中断级,第 1 位对应于 IRQ1,第 2 位对应于 IRQ2,以此类推。当 IMR 中的某位 被清―0‖后,与之对应的中断级的中断处理就被禁止(屏蔽)了。当设置为―1‖时,相应中断级的中断处理就被使能 (解除屏蔽)了。 IMR 寄存器映射于 set 1 的DDH 地址。可通过指令使用寄存器寻址模式对每一位进行读写。 Interrupt Mask Register (IMR) DDH, Set 1, R/W MSB .7 .6 .5 .4 .3 .2 IRQ2 IRQ7 注释: IRQ6 IRQ5 IRQ4 .1 IRQ1 LSB IRQ0 IRQ3 Interrupt level enable : 0 = Disable (mask) interrupt level 1 = Enable (un-mask) interrupt level 改变IMR 寄存器的值之前,必须禁止所有中断。建议使用 DI 指令。 图 5-6. 中断屏蔽寄存器 (IMR) 5-10 .0 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 中断优先级寄存器 (IPR) 中断优先级控制寄存器 IPR (地址:FFH,Set 1,Bank 0) 可以用来设置 MCU 中断结构中各个中断级的相对优 先级。复位后,IPR 的所有位都是不确定的,所以必须在初始化程序中根据应用设置该寄存器。 当多个中断源同时发出中断请求时,优先级最高的那个中断源首先被 CPU 响应。如果同一中断级中的多个中断源 同时发出中断请求,中断向量地址最小的那个最先被响应。 为支持相对中断优先级编程,中断逻辑将中断级分为组和子组。请注意,这些组 (子组) 仅供 IPR 逻辑定义 IP 寄存器的优先级。(详见图 5-7): Group A IRQ0, IRQ1 Group B IRQ2, IRQ3, IRQ4 Group C IRQ5, IRQ6, IRQ7 IPR Group A A1 IPR Group B A2 B1 B2 B21 IRQ0 IRQ1 IPR Group C IRQ2 IRQ3 C1 B22 IRQ4 C2 C21 IRQ5 IRQ6 C22 IRQ7 图 5-7. 中断请求优先级组 如图 5-8 所示,IPR.7,IPR.4 和 IPR.1 控制中断组 ABC的相对优先级。例如,当这3位设置为―001B‖时,这 3 个中断组的优先级顺序为 B > C > A;设置为―101B‖时,这3个中断组的优先级顺序为C > B > A。 IPR 其他位控制功能描述如下: — IPR.5 控制中断组C 内中断级的相对优先级。 — 中断组C 包含一个子组,内部的中断级5,6,7有额外的优先级。子组的优先级由 IPR.6 的值决定。IPR.5 控 制中断组C。 — IPR.0 控制 IRQ0 和 IRQ1 的相对优先级。 5-11 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Interrupt Priority Register (IPR) FFH, Set 1, Bank 0, R/W MSB .7 .6 .5 .4 .3 .2 .1 Group priority: 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 = Undefined =B>C>A =A>B>C =B>A>C =C>A>B =C>B>A =A>C>B = Undefined Group B: 0 = IRQ2 > (IRQ3, IRQ4) 1 = (IRQ3, IRQ4) > IRQ2 Subgroup B: 0 = IRQ3 > IRQ4 1 = IRQ4 > IRQ3 Group C: 0 = IRQ5 > (IRQ6, IRQ7) 1 = (IRQ6, IRQ7) > IRQ5 Subgroup C: 0 = IRQ6 > IRQ7 1 = IRQ7 > IRQ6 图 5-8. 中断优先级寄存器 (IPR) 5-12 LSB Group A: 0 = IRQ0 > IRQ1 1 = IRQ1 > IRQ0 D7 D4 D1 0 0 0 0 1 1 1 1 .0 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 中断请求寄存器 (IRQ) 可以通过查询中断请求寄存器 IRQ (地址:DCH,Set 1) 的每一位监视所有中断级的中断请求情况。寄存器中的 每一位都对应于一个同序号的中断级:第 0 位对应于 IRQ0,第 1 位对应于 IRQ1,以此类推。 ―0‖ 代表目前该 中断级没有中断发生, ―1‖ 代表该中断级中的某个中断源发出了中断请求。 IRQ 寄存器是只读的。可随时使用位或字节方式访问 IRQ 寄存器来读取 (测试) 某一中断级当前的中断请求。复 位后,所有状态位清0。 即使是执行 DI 指令后,即全局中断处理禁止的情况下,仍然可以查询 IRQ 的内容。 此时如果有中断发生, CPU 并不会做出任何响应。但是仍然可以通过查询 IRQ 确定中断发生情况。可在全局中断屏蔽的情况下,使用 上述方法判断事件的发生。 Interrupt Request Register (IRQ) DCH, Set 1, Read-only MSB .7 IRQ7 .6 .5 IRQ6 IRQ5 .4 IRQ4 .3 IRQ3 .2 IRQ2 .1 IRQ1 .0 LSB IRQ0 Interrupt level request pending bits: 0 = Interrupt level is not pending 1 = Interrupt level is pending 图 5-9. 中断请求寄存器 (IRQ) 5-13 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 中断标志位类型 概述 有两种类型的中断标志位:一种会在中断服务程序执行完毕后硬件自动清零,一种必须在中断服务程序中软件清 零。 硬件自动清零的标志位 对于硬件自动清零的标志位来说,当有中断请求时,中断逻辑置高相应的标志位。然后触发 IRQ 脉冲告知 CPU 有一个中断正等待处理。CPU 随后发送 IACK 给中断源确认接受请求,然后执行服务程序,最后清除标志位。这 种类型的标志位没有被映射,所以不能在软件中对其进行读写。 中断服务程序中清零的标志位 第二类标志位必须用软件清零。中断服务程序必须在中断返回(IRET)前清除标志位。可通过对中断源的模式或 控制寄存器中的相应标志位清―0‖来实现。 编程实例 — 如何清除中断标志位 如下例所示,应使用 load 指令来清除中断标志位。 例: 1. SB0 LD IRET 5-14 EXTIPND, #11111011B ; P0.2中断标志为清0 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 中断结构 中断源查询顺序 中断请求查询和响应的步骤如下: 1. 某一中断源通过置位中断请求位产生中断请求。 2. CPU 查询程序识别该中断源的中断挂起状态。 3. CPU 检查该中断源的中断级。 4. CPU 产生中断确认信号。 5. 中断逻辑决定中断的向量地址。 6. 中断服务程序启动并将该中断源的标志位清0。(硬件清0或软件清0) 7. CPU 继续查询中断请求。 中断服务程序 中断处理前,必须满足以下条件: — 全局中断处理使能 (EI) — 该中断源所处的中断级处于使能状态(IMR 寄存器) — 若有多个中断请求,该中断级必须具有最高优先级 — 该中断源处于使能状态 (外设控制寄存器) 当所有的条件都满足之后,中断请求会在指令周期的最后被确认。随后,CPU 将开始中断处理并完成下列操作: 1. SYM 寄存器的 SYM.0 位清零,以禁止所有后续的中断。. 2. 把程序计数器 PC 和状态寄存器压入堆栈。 3. 跳转到中断向量,获取中断服务程序地址。 4. 跳转执行中断服务程序 中断服务程序完成以后,CPU 发出中断返回指令 (IRET)。中断返回指令 IRET 会将堆栈中的 PC 和 状态寄存 器重置,同时置位SYM.0,使 CPU 能响应后续的中断请求。 5-15 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 中断向量地址的生成 ROM (00H–FFH) 中的中断向量区域,包含了中断结构中的每一级对应的中断服务程序的入口地址。向量化的中断 处理流程如下: 1. 程序计数器 PC 低字节压入堆栈 2. 程序计数器 PC 高字节压入堆栈 3. FLAGS 寄存器压入堆栈 4. 从中断向量地址中取出中断服务程序入口地址 (高字节) 5. 从中断向量地址中取出中断服务程序入口地址 (低字节) 6. 跳转执行 16 位中断向量地址所确定的中断服务程序 注释 16 位向量地址始终起始于 ROM 空间 00H ~ FFH 中的某个偶数地址。 中断嵌套 可以在一个低优先级中断请求的处理过程中,嵌套一个高优先级的中断请求。为此,必须遵循如下步骤: 1. 将当前的8位 IMR 寄存器压栈。 2. 重置 IMR,仅使能那个有较高优先级的中断。 3. 执行 EI 使能中断处理 (较高优先级的中断一旦发生就可被响应) 4. 在较低优先级的中断服务处理程序最后,将 IMR 寄存器弹栈,恢复进入中断前的状态。 5. 执行中断返回指令 IRET。 可根据不同的应用,简化上述步骤。 指令指针 (IP) S3C8- 全系列都采用了指令指针 (IP) 以支持高速中断处理,又称作快速中断 (fast interrupts) 。IP实际是个寄存 器对,高 8 位 IPH (IP15–IP8) 和低 8 位 IPL (IP7–IP0) 分别位于地址单元 DAH 和 DBH。 快速中断处理 一般的中断处理需要 16 个CPU 时钟周期,而一旦将给定中断级设为快速中断,只需要大概 6 个 CPU 时钟周 期就可以完成整个中断处理。通过写 SYM.4–SYM.2 可以将快速中断处理应用于某一个中断级。然后需要置位 SYM.1 使能快速中断处理。 5-16 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 快速中断处理 (续) 快速中断处理用到其他2个系统寄存器: — 指令指针 (IP) 包含了快速中断服务程序的起始地址 (中断处理后会和 PC 交换完成中断返回) — 当快速中断发生时,FLAGS 寄存器的内容会自动载入一个没有地址映射的专用寄存器,称为 FLAGS’ 注释 对于 S3C8275X/C8278X/C8274X,8个中断级 IRQ0–IRQ7 中的任何一个都可以选择为快速中断处理的 对象。 快速中断初始化步骤 以下步骤初始化快速中断: 1. 将中断服务程序的起始地址载入指令指针 (IP)。 2. 将中断级编号 (IRQn) 载入快速中断选择区 (SYM.4–SYM.2)。 3. 在 SYM 寄存器的快速中断使能位中写 "1"。 快速中断服务程序 当指定为快速中断的中断级中出现中断请求时,如下事件发生: 1. PC 和 IP 交换内容 2. FLAGS 寄存器值载入 FLAGS' 3. FLAGS 寄存器中的快速中断状态位置高 4. 开始中断服务 5. 若快速中断标志位被置高,当中断服务程序结束后,PC 和 IP 再次交换内容 6. FLAGS’ 寄存器的值自动复制回 FLAGS 寄存器 7. FLAGS 寄存器中的快速中断标志位自动清0 中断标志位类型间关系 如前所述,有2种中断标志位:1种在中断服务程序被识别并执行之后由硬件自动清0;另一种必须由中断服务程序 软件清0。可为快速中断处理选择任一种类型的中断标志位清0 – 硬件清0或软件清0。 编程指导 切记使能/禁止快速中断的唯一方法是置位/清0 SYM 寄存器中的快速中断使能位 SYM.1。执行 EI 或 DI 指令使 能或禁止全局中断处理,包括快速中断。若使用快速中断,务必要在快速中断服务程序的最后,在IP 中写入一个 新的起始地址。 5-17 中断结构 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 注释 5-18 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 6 指令集 指令集 概述 SAM88RC 指令集支持对大容量寄存器卷的操作,一共包含 78 条指令,具有强大的数据处理能力。指令集特性如 下: — 实现了所有 8 位算术和逻辑操作,包括乘法和除法 — 没有专门的输入/输出指令(输入/输出控制寄存器和数据寄存器直接映射到寄存器卷中) — 十进制调整,包括 BCD 操作 — 16 位(字)数据可自增或自减 — 灵活的位寻址、循环和移位指令 数据类型 SAM8 CPU 可以实现位操作、字节操作、BCD 数字操作和双字节操作。寄存器的每个位可以被置 1、清 0、取反和 测试。一个字节的各位按从 7 到 0 编号,其中 0 位是最低位 (在最右边)。 寄存器访问 为访问寄存器,应指定寄存器卷中地址为 0 – 255 之间 的 8 位地址或工作寄存器的 4 位地址。工作寄存器中,寄存 器对可以访问 16 位程序存储空间和数据存储空间。关于寄存器访问的详细描述,请参考第 2 章―地址空间‖。 寻址模式 有 7 种寻址模式:寄存器寻址(R),间接寄存器寻址(IR),偏址寻址(X),直接寻址(DA),相对地址寻址(RA),立即 数寻址(IM)和间接寻址(IA)。有关寻址模式的详细描述,请参考第 3 章“寻址模式”。 6-1 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 6-1. 指令集简介 助记符 操作数 指令介绍 数据传送类指令 CLR dst 清零 LD dst,src 传送数据 LDB dst,src 传送位数据 LDE dst,src 传送数据(访问外部数据存储空间) LDC dst,src 传送数据(访问程序存储空间) LDED dst,src 传送数据后地址减 1(访问外部数据存储空间) LDCD dst,src 传送数据后地址减 1(访问程序存储空间) LDEI dst,src 传送数据后地址加 1(访问外部数据存储空间) LDCI dst,src 传送数据后地址加 1(访问程序存储空间) LDEPD dst,src 传送数据前地址减 1(访问外部数据存储空间) LDCPD dst,src 传送数据前地址减 1(访问程序存储空间) LDEPI dst,src 传送数据前地址加 1(访问外部数据存储空间) LDCPI dst,src 传送数据前地址加 1(访问程序存储空间) LDW dst,src 传送字数据 POP dst 出栈 POPUD dst,src 弹出用户栈(减 1) POPUI dst,src 弹出用户栈(加 1) PUSH src 压栈 PUSHUD dst,src 压入用户栈(减 1) PUSHUI dst,src 压入用户栈(加 1) 注释: LDE, LDED, LDEI, LDEPP 和 LDEPI 指令可用来读/写 64 K字节的外部数据存储空间。 6-2 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 6-1. 指令集简介(续) 助记符 操作数 指令描述 算术操作类指令 ADC dst,src 带进位加法 ADD dst,src 不带进位加法 CP dst,src 比较指令 DA dst 十进制调整 DEC dst 字节减 1 DECW dst 字减 1 DIV dst,src 除法指令 INC dst 字节加 1 INCW dst 字加 1 MULT dst,src 乘法指令 SBC dst,src 带借位减法 SUB dst,src 不带借位减法 AND dst,src 逻辑与 COM dst 取反 OR dst,src 逻辑或 XOR dst,src 逻辑异或 逻辑操作类指令 6-3 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 6-1. 指令集简介(续) 助记符 操作数 指令描述 程序控制指令 BTJRF dst,src 位测试,如果为 0 跳转 BTJRT dst,src 位测试,如果为 1 跳转 CALL dst 调用子程序 CPIJE dst,src 比较,如果相等跳转 CPIJNE dst,src 比较,如果不等跳转 DJNZ r,dst 寄存器减 1,不为 0 跳转 ENTER 进入 EXIT 跳出 IRET 中断返回 JP cc,dst 有条件跳转 JP dst 无条件跳转 JR cc,dst 有条件相对跳转 NEXT Next 指令 RET 子程序返回 WFI 等待中断 位操作指令 BAND dst,src 位与 BCP dst,src 位比较 BITC dst 位取反 BITR dst 位清零 BITS dst 位置 1 BOR dst,src 位或 BXOR dst,src 位异或 TCM dst,src 取反后位测试 TM dst,src 位测试指令 6-4 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 6-1. 指令集简介(续) 助记符 操作数 指令描述 循环和移位指令 RL dst 循环左移 RLC dst 带进位循环左移 RR dst 循环右移 RRC dst 带进位循环右移 SRA dst 算术右移 SWAP dst 交换 CPU控制指令 CCF 进位标志取反 DI 屏蔽全局中断 EI 使能全局中断 IDLE 进入 IDLE 模式 NOP 空操作 RCF 进位标志清零 SB0 选择寄存器块 bank 0 SB1 选择寄存器块 bank 1 SCF 进位标志置 1 SRP src 设置寄存器指针 SRP0 src 设置寄存器指针 0 SRP1 src 设置寄存器指针 1 STOP 进入 STOP 模式 6-5 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 标志寄存器(FLAGS) 8 位标志寄存器 FLAGS 描述当前 CPU 的操作状态。其中的 4 位(FLAGS.4–FLAGS.7)可以用于测试和条件转移 指令;另外两个标志位 FLAGS.3 和标志位 FLAGS.2 用于 BCD 算术操作。 还有一个标志位 FLAGS.1 用于指示快速中断处理;FLAGS.0 表示当前正在寻址的 Bank 地址状态,是 Bank 0 还是 Bank 1。 只要结果不影响到状态位,FLAGS 寄存器可以通过指令(如 LOAD 指令)置 1 或者清 0。 逻辑和算术类操作指 令,例如与、或、异或、加法和减法操作,会影响到标志位寄存器。例如,AND 指令会根据结果改变 Zero, Sign 和 Overflow (Z、S、O)标志。如果 AND 指令使用 FLAGS 作为目标寄存器,将会同时发生两次 FLAGS 寄存器的写 操作,造成不可预知的后果。 System Flags Register (FLAGS) D5H ,Set 1, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 Bank address status flag (BA) Carry flag (C) Fast interrupt status flag (FS) Zero flag (Z) Sign flag (S) Overflow flag (V) Half-carry flag (H) Decimal adjust flag (D) 图 6-1. 系统标志寄存器(FLAGS) 6-6 LSB S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 指令集 标志位描述 C 进(借)位标志 (FLAGS.7) 如果算术操作后,最高位产生进位或借位,则此标志位为 1 。移位、循环移位操作之后,此位保存最后移 出的那一位值。指令可以对此位置 1、清 0、取反操作。 Z 零标志位(FLAGS.6) 如果算术、逻辑操作的结果为 0 ,则此标志位为 1 。位测试指令、移位指令、循环移位指令都会影响此标 志位,如果结果为逻辑 0,则此标志位为 1 。 S 符号标志位 (FLAGS.5) 算术、逻辑、循环、移位操作之后,操作结果最高位的状态反映在符号位。逻辑 0 表示操作结果是正数, 逻辑 1 表示操作数结果是负数。 V 溢出标志 (FLAGS.4) 当操作结果大于 + 127 或 小于 – 128 时,溢出标志将会置 1。逻辑操作之后,它将会被清 0。 D 十进制调整标志 (FLAGS.3) DA 标志用于指明 BCD 操作中何种类型的指令是最后被执行的,因此随后的十进制调整指令可以正确执 行。编程者通常不能访问 DA 位,也不能用来做测试的条件码。 H 半字节进(借)位标志 (FLAGS.2) 当加法操作时第 3 位产生进位或减法操作时向第 4 位发生借位,H标志将被置 1。通常用在DA指令中,将 前一次的加法或减法结果(二进制码)转化为十进制结果(BCD)。程序通常不会直接用到 H 标志。 FIS 快速中断状态标志 (FLAGS.1) 在快速中断执行期间,FIS 位被置 1;快速中断返回时,FIS 位被清 0。当 FIS 被置 1 时,将禁止所有中 断,直到 IRET 指令被执行后,才重新打开快速中断。 BA 寄存器块地址标志 (FLAGS.0) BA 标志表明内部寄存器卷 Set 1 中哪个寄存器块被选中,是 bank 0 还是 bank 1。当执行 SB0 指令,BA 标志被清零(选择 bank 0);当执行 SB1 指令,BA 标志被置 1(选择 bank 1)。 6-7 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 指令集符号 表 6-2. 标志位符号 标志位 描述 C 进(借)位标志 Z 零标志 S 符号标志 V 溢出标志 D 十进制调整标志 H 半字节进(借)位标志 0 清为逻辑 0 1 置为逻辑 1 * 根据相应操作置 1 或清 0 – 不受影响 x 不确定 表 6-3. 指令集符号 符号 dst 目的操作数 src 源操作数 @ 间接寄存器地址前缀 PC 程序计数器 IP 指令指针 FLAGS RP 标志寄存器(D5H) 寄存器指针 # 立即数或寄存器访问的前缀 H 十六进制后缀 D 十进制后缀 B 二进制后追 opc 6-8 描述 指令代码 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 6-4. 指令符号的定义 符号 描述 实际操作范围 条件码 参考表格 6-6 r 工作寄存器 Rn (n = 0–15) rb 工作寄存器的位 b Rn.b (n = 0–15, b = 0–7) r0 工作寄存器的位 0,最低位 Rn (n = 0–15) rr 工作寄存器对 RRp (p = 0, 2, 4, ..., 14) R 寄存器或者工作寄存器 reg or Rn (reg = 0–255, n = 0–15) Rb 寄存器或者工作寄存器的位 b reg.b (reg = 0–255, b = 0–7) RR 寄存器对或工作寄存器对 reg or RRp (reg = 0–254, 只能是偶数 p = 0, 2, ..., 14) IA 间接寻址模式 addr (addr = 0–254, 只能是偶数) Ir 间接工作寄存器寻址 @Rn (n = 0–15) IR 间接工作寄存器寻址或间接寄存器寻址 @Rn or @reg (reg = 0–255, n = 0–15) Irr 间接工作寄存器对 @RRp (p = 0, 2, ..., 14) 间接寄存器对或间接工作寄存器对 @RRp or @reg (reg = 0–254, 只能是偶数 p = 0, 2, ..., 14) 基址寻址模式 #reg [Rn] (reg = 0–255, n = 0–15) XS 短偏址寻址模式 #addr [RRp] (addr = 范围 –128 to +127, p = 0, 2, ..., 14) xl 长偏址寻址模式 #addr [RRp] (addr = 范围 0–65535, p = 0, 2, ..., 14) da 直接寻址模式 addr (addr = 范围 0–65535) ra 相对地址寻址模式 addr (addr = 在 +127 到 -128 范围内的数字) im 立即数寻址模式 #data (data = 0–255) iml 长立即数寻址模式 #data (data = 范围 0–65535) cc IRR X 6-9 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 6-5. 指令代码快速参考 指令代码对照图 LOWER NIBBLE(HEX) – 0 1 2 3 4 5 6 7 U 0 DEC R1 DEC IR1 ADD r1,r2 ADD r1,Ir2 ADD R2,R1 ADD IR2,R1 ADD R1,IM BOR r0–Rb P 1 RLC R1 RLC IR1 ADC r1,r2 ADC r1,Ir2 ADC R2,R1 ADC IR2,R1 ADC R1,IM BCP r1.b, R2 P 2 INC R1 INC IR1 SUB r1,r2 SUB r1,Ir2 SUB R2,R1 SUB IR2,R1 SUB R1,IM BXOR r0–Rb E 3 JP IRR1 SRP/0/1 IM SBC r1,r2 SBC r1,Ir2 SBC R2,R1 SBC IR2,R1 SBC R1,IM BTJR r2.b, RA R 4 DA R1 DA IR1 OR r1,r2 OR r1,Ir2 OR R2,R1 OR IR2,R1 OR R1,IM LDB r0–Rb 5 POP R1 POP IR1 AND r1,r2 AND r1,Ir2 AND R2,R1 AND IR2,R1 AND R1,IM BITC r1.b N 6 COM R1 COM IR1 TCM r1,r2 TCM r1,Ir2 TCM R2,R1 TCM IR2,R1 TCM R1,IM BAND r0–Rb I 7 PUSH R2 PUSH IR2 TM r1,r2 TM r1,Ir2 TM R2,R1 TM IR2,R1 TM R1,IM BIT r1.b B 8 DECW RR1 DECW IR1 PUSHUD IR1,R2 PUSHUI IR1,R2 MULT R2,RR1 MULT IR2,RR1 MULT IM,RR1 LD r1, x, r2 B 9 RL R1 RL IR1 POPUD IR2,R1 POPUI IR2,R1 DIV R2,RR1 DIV IR2,RR1 DIV IM,RR1 LD r2, x, r1 L A INCW RR1 INCW IR1 CP r1,r2 CP r1,Ir2 CP R2,R1 CP IR2,R1 CP R1,IM LDC r1, Irr2, xL E B CLR R1 CLR IR1 XOR r1,r2 XOR r1,Ir2 XOR R2,R1 XOR IR2,R1 XOR R1,IM LDC r2, Irr2, xL C RRC R1 RRC IR1 CPIJE Ir,r2,RA LDC r1,Irr2 LDW RR2,RR1 LDW IR2,RR1 LDW RR1,IML LD r1, Ir2 H D SRA R1 SRA IR1 CPIJNE Irr,r2,RA LDC r2,Irr1 CALL IA1 LD IR1,IM LD Ir1, r2 E E RR R1 RR IR1 LDCD r1,Irr2 LDCI r1,Irr2 LD R2,R1 LD R2,IR1 LD R1,IM LDC r1, Irr2, xs X F SWAP R1 SWAP IR1 LDCPD r2,Irr1 LDCPI r2,Irr1 CALL IRR1 LD IR2,R1 CALL DA1 LDC r2, Irr1, xs 6-10 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 6-5. 指令代码快速参考(续) 指令代码对照图 LOWER NIBBLE(HEX) – 8 9 A B C D E F U 0 LD r1,R2 LD r2,R1 DJNZ r1,RA JR cc,RA LD r1,IM JP cc,DA INC r1 NEXT P 1 ENTER P 2 EXIT E 3 WFI R 4 SB0 5 SB1 N 6 IDLE I 7 B 8 DI B 9 EI L A RET E B IRET C RCF H D E E X F STOP SCF CCF LD r1,R2 LD r2,R1 DJNZ r1,RA JR cc,RA LD r1,IM JP cc,DA INC r1 NOP 6-11 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 条件码 条件转移指令通常包含 4 位条件转移操作判断(cc)。这些条件转移操作判断的结果将决定程序的跳转方向。例如, 比较操作后的“相等”条件转移,只有在两个操作数相等时该条件转移操作才会跳转。条件码列举在表格 6-6。 C、Z、S、V 等标志位用作条件转移判断位。指令将会根据这些标志位决定跳转方向。 表 6-6. 条件码 二进制 助记符 描述 标志位设置 0000 F 逻辑假 – 1000 T 逻辑真 – 0111 (1) C 有进位或借位 C=1 1111 (1) NC 无进位或借位 C=0 0110 (1) Z 结果为 0 Z=1 NZ 结果不为 0 Z=0 1101 PL 正数 S=0 0101 MI 负数 S=1 0100 OV 溢出 V=1 1100 NOV 没有溢出 V=0 0110 (1) EQ 相等 Z=1 1110 (1) NE 不相等 Z=0 1001 GE 大于等于 (S XOR V) = 0 0001 LT 小于 (S XOR V) = 1 1010 GT 大于 (Z OR (S XOR V)) = 0 0010 LE 小于等于 (Z OR (S XOR V)) = 1 1111 (1) UGE 无符号大于等于 C=0 0111 (1) ULT 无符号小于 C=1 1011 UGT 无符号大于 (C = 0 AND Z = 0) = 1 0011 ULE 无符号小于等于 (C OR Z) = 1 1110 (1) 注释: 1. 一次算术操作的结果可能同时影响两个标志位。例如,Z 符号位被置起时,Z、EQ 都为真。但是 ADD 指令操作之后,可能 会用到 Z ;而 CP 指令操作之后,EQ 可能被用到。 2. 如果操作数涉及到无符号数,必须使用 UGE, ULT, UGT, ULE 等条件代码。 6-12 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 指令集 指令集描述 本章详细介绍了 S3C8- 系列单片机的指令操作,同时给出了具体的编程实例。为便于参阅和快速查找,在介绍指令 时采用了统一的格式。对每条指令,采用了如下的描述方法: — 指令名称(标号) — 指令全称 — 源操作数/目的操作数的格式 — 具体指令的解释 — 每条指令操作的具体描述 — 每条指令对标志寄存器的影响 — 指令格式、执行周期和访问模式的详细介绍 — 每条指令的编程实例 6-13 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X ADC — 带进位加法 (Add with Carry) ADC dst,src 操作: dst dst + src + c 目的操作数加上源操作数和 C 位,所得结果保存在目的操作数。源操作数不受影响。在多字节加法 中,该指令允许把低字节的进位加到高字节的加法运算中。 标志位: C: Z: S: V: D: H: 如果加法运算中产生进位,则此位置 1;否则,清 0 如果运算结果为 0,则该位置 1;否则,清 0 如果运算结果为负,则该位置 1;否则,清 0 如果运算结果产生溢出,该位置 1;否则,清 0 总是被清 0 如果运算结果的低4位有进位,该位置 1;否则,清 0 格式: opc dst | src opc src opc 编程实例: dst dst src 字节数 时钟周期 指令代码 (Hex) 2 4 12 r r 6 13 r lr 6 14 R R 6 15 R IR 6 16 R IM 3 3 寻址模式 dst src 假设: R1 = 10H, R2 = 03H, C flag =“1”, 寄存器 01H = 20H, 寄存器 02H = 03H, 和寄存器 03H = 0AH: ADC R1,R2 R1 = 14H, R2 = 03H ADC R1,@R2 R1 = 1BH, R2 = 03H ADC 01H,02H 寄存器 01H = 24H, 寄存器 02H = 03H ADC 01H,@02H 寄存器 01H = 2BH, 寄存器 02H = 03H ADC 01H,#11H 寄存器 01H = 32H 在第一个例子中,目的寄存器R1内容为 10H,进位标志位为 1,源寄存器 R2 为 03H。语句“ADC R1,R2”把03H和进位位(“1”)累加到目的数 10H,结果为 14H,保存在 R1。 6-14 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X ADD ADD 操作: — 加法 (Add) dst,src dst dst + src 源操作数和目的操作数相加,结果保存在目的操作数,源操作数不受影响。 标志位: C: Z: S: V: D: H: 如果结果的最高位有进位,被置 1;否则,被清 0 如果结果为 0,被置 1;否则,被清 0 如果结果是负数,被置 1;否则,被清 0 如果有溢出,被置 1,也就是说,两个操作数符号相同,运算结果是相反的符号;否则,被清0 总是被清 0 如果结果的低4位有进位,被置 1;否则,被清 0 格式: opc dst | src opc src opc 编程实例: dst dst src 字节数 时钟周期 指令代码 (Hex) 2 4 02 r r 6 03 r lr 6 04 R R 6 05 R IR 6 06 R IM 3 3 寻址模式 dst src 假设: R1 = 12H, R2 = 03H, 寄存器 01H = 21H, 寄存器 02H = 03H, 寄存器 03H = 0AH: ADD R1,R2 R1 = 15H, R2 = 03H ADD R1,@R2 R1 = 1CH, R2 = 03H ADD 01H,02H 寄存器 01H = 24H, 寄存器 02H = 03H ADD 01H,@02H 寄存器 01H = 2BH, 寄存器 02H = 03H ADD 01H,#25H 寄存器 01H = 46H 在第一个例子中,目的工作寄存器 R1 内容为12H,源工作寄存器 R2 内容为 03H。语句“ADD R1,R2”执行 03H+12H,结果为 15H,保存在寄存器 R1。 6-15 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X AND AND 操作: — 逻辑与 (Logical AND) dst,src dst dst AND src 源操作数与目的操作数执行逻辑与操作,结果保存在目的操作数。只有当两个操作数的对应位都为 1时,结果的相应位才是 1;否则,该位为 0。源操作数不受影响。 标志位: C: Z: S: V: D: H: 不受影响 如果结果为 0,被置 1;否则,被清 0 如果结果是负数,被置 1;否则,被清 0 总是被清零 不受影响 不受影响 格式: opc dst | src opc src opc 编程实例: dst dst src 字节数 时钟周期 指令代码 (Hex) 2 4 52 r r 6 53 r lr 6 54 R R 6 55 R IR 6 56 R IM 3 3 寻址模式 dst src 假设: R1 = 12H, R2 = 03H, 寄存器 01H = 21H, 寄存器 02H = 03H, 寄存器 03H = 0AH: AND R1,R2 R1 = 02H, R2 = 03H AND R1,@R2 R1 = 02H, R2 = 03H AND 01H,02H 寄存器 01H = 01H, 寄存器 02H = 03H AND 01H,@02H 寄存器 01H = 00H, 寄存器 02H = 03H AND 01H,#25H 寄存器 01H = 21H 在第一个例子中,目的操作数 R1为 12H,源操作数 R2 为 03H,指令“AND R1,R2”对 03H 和 12H 进行逻辑与操作,结果为 02H,保存在寄存器 R1。 6-16 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BAND — 位与 (Bit AND) BAND dst,src.b BAND dst.b,src 操作: dst(0) dst(0) AND src(b) or dst(b) dst(b) AND src(0) 源操作数(或者目的操作数)的特定位与目的操作数(或者源操作数)的最低位进行逻辑与操作, 结果保存在目的操作数的特定位。目的操作数的其他位不受影响。源操作数不受影响。 标志位: C: Z: S: V: D: H: 不受影响 如果结果为 0,被置 1;否则,被清 0 总是被清零 不确定 不受影响 不受影响 格式: 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst src opc dst | b | 0 src 3 6 67 r0 Rb opc src | b | 1 dst 3 6 67 Rb r0 注释: 在 3 字节指令各式的第二个字节中,目的或者源操作数地址是 4 位,位地址是 3 位。 编程实例: 假设: R1 = 07H 和寄存器 01H = 05H: BAND R1,01H.1 R1 = 06H, 寄存器 01H = 05H BAND 01H.1,R1 寄存器 01H = 05H, R1 = 07H 在第一个例子中,源寄存器 01H 的内容是 05H,目的寄存器 R1 的内容是 07H,指令“BAND R1,01H.1”将源寄存器的位 1 和目的寄存器 R1 的位 0 进行逻辑与操作,结果为 06H,保存在寄存 器 R1。 6-17 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BCP — 位比较 (Bit Compare) BCP 操作: dst,src.b dst(0) – src(b) 源操作数的特定位与目的操作数的最低位做比较,如果相等,零标志位被置 1,否则被清 0。两个 操作数都不受影响。 标志位: C: Z: S: V: D: H: 不受影响 如果结果为 0,被置 1;否则,被清 0 总是被清零 不确定 不受影响 不受影响 格式: opc dst | b | 0 src 字节数 时钟周期 指令代码 (Hex) 3 6 17 寻址模式 dst src r0 Rb 注释: 在 3 字节指令各式的第二个字节中,目的操作数地址是 4 位,位地址是 3 位。 编程实例: 假设: R1 = 07H 和寄存器 01H = 01H: BCP R1,01H.1 R1 = 07H, 寄存器 01H = 01H 如果目的寄存器 R1 内容为 07H,源寄存器 01H 的内容为 01H,指令“BCP R1,01H.1”比较源寄 存器(01H)的位 1 和目的寄存器 R1 的位 0。因为两个位是不相等的,所以标志位寄存器的 Z 标 志位被清零。 6-18 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BITC — 位反 (Bit Complement) BITC dst.b 操作: dst(b) NOT dst(b) 这个指令对目的操作数的特定位取反而不影响其他位。 标志位: C: Z: S: V: D: H: 不受影响 如果结果为 0,被置 1;否则,被清 0 总是被清零 不确定 不受影响 不受影响 格式: opc dst | b | 0 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 4 57 rb 注释: 在指令的第二个字节中,目的操作数地址是 4 位,位地址是 3 位。 编程实例: 假设: R1 = 07H BITC R1.1 R1 = 05H 工作寄存器 R1 内容为 07H,指令“BITC R1.1“对 R1 的位 1 取反,并将结果(05H)保存在 R1。 因为结果不是“0”,所以标志位寄存器的 Z 标志被清零。 6-19 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BITR — 位清零 (Bit Reset) BITR dst.b 操作: dst(b) 0 BITR 指令将目的操作数的特定位清零,而不影响其它的位。 标志位: 没有任何标志位受影响 格式: opc 注释: 编程实例: dst | b | 0 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 4 77 rb 在指令的第二个字节中,目的操作数地址是 4 位,位地址是 3 位。 假设: R1 = 07H: BITR R1.1 R1 = 05H 工作寄存器 R1 的内容是 07H,指令“BITR R1.1”对目标寄存器 R1 的位 1 清零,结果为 05H。 6-20 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BITS — 位置1 (Bit Set) BITS dst.b 操作: dst(b) 1 BITS 指令将目的操作数的特定位设置为 1,而不影响其它的位。 标志位: 没有标志位受影响 格式: opc 注释: 编程实例: dst | b | 1 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 4 77 rb 在指令的第二个字节中,目的操作数地址是 4 位,位地址是 3 位。 假设: R1 = 07H: BITS R1.3 R1 = 0FH 工作寄存器 R1 的内容是 07H,指令“BITS R1.3”将目标寄存器 R1 的位 3 置为 1,结果为 0FH。 6-21 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BOR — 位或 (Bit OR) BOR dst,src.b BOR dst.b,src 操作: dst(0) dst(0) OR src(b) 或 dst(b) dst(b) OR src(0) 源操作数(或者目的操作数)的特定位与目的操作数(源操作数)的最低位进行逻辑或,运算结果 保存在目的操作数的特定位,目的操作数的其它位不受影响。源操作数不受影响。 标志位: C: Z: S: V: D: H: 不受影响 如果结果为 0,被置 1;否则,被清 0 总是被清零 不确定 不受影响 不受影响 格式: 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst src opc dst | b | 0 src 3 6 07 r0 Rb opc src | b | 1 dst 3 6 07 Rb r0 注释: 在 3 字节指令格式的第二个字节中,目的操作数地址是 4 位,位地址是 3 位。 编程实例: 假设: R1 = 07H 和寄存器 01H = 03H: BOR R1, 01H.1 R1 = 07H, 寄存器 01H = 03H BOR 01H.2, R1 寄存器 01H = 07H, R1 = 07H 在第一个例子里面,目的寄存器 R1 的内容为 07H,源寄存器 01H 的内容是 03H,指令“BOR R1,01H.1”将寄存器 01H 的位 1 与 R1 的位 0 进行逻辑或运算,结果(还是 07H )保存在 R1 中。 在第二个例子里面,目的寄存器 01H 的内容为 03H,源寄存器 R1 的内容是 07H,指令“BOR 01H.2,R2”将 01H 的位 2 与寄存器 R1 的位 0 进行逻辑或运算,结果(07H)保存在寄存器 01H 中。 6-22 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BTJRF — 位测试,若为假相对跳转 (Bit Test, Jump Relative on False) BTJRF dst,src.b 操作: 如果目标操作数的位 b 为“0”, 那么 PC PC + dst 测试源原操作数的特定位,如果为“0”,则将相对地址累加到程序计数器(PC),并从新的 PC 地 址开始执行程序;否则,执行 BTJRF 后面的指令。 标志位: 没有标志受影响。 格式: 字节数 时钟周期 指令代码 (Hex) 3 10 37 (注释 1) opc src | b | 0 dst 寻址模式 dst src RA rb 注释: 在 3 字节指令各式的第二个字节中,目的操作数地址是 4 位,位地址是 3 位。 编程实例: 假设: R1 = 07H: BTJRF SKIP,R1.3 PC 跳转到 SKIP 地址处 如果工作寄存器 R1 的内容是 07H,指令“BTJRF SKIP,R1.3”测试 R1 的位 3。因其为“0”,相 对地址将累加到 PC,然后 PC 跳转到 SKIP 地址处。(记住地址跳转的范围必须在 +127 至 -128 之间) 6-23 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BTJRT — 位测试,若为真,相对跳转 (Bit Test, Jump Relative on True) BTJRT dst,src.b 操作: 如果目标操作数的位 b 为“1”, 那么 PC PC + dst 测试源操作数的特定位,如果为“1”,则将相对地址累加到程序计数器(PC),并从新的 PC 地址 开始执行程序;如果为“0”,执行 BTJRT 后面的指令。 标志位: 没有标志位受影响。 格式: 字节数 时钟周期 指令代码 (Hex) 3 10 37 (注释 1) opc src | b | 1 dst 寻址模式 dst src RA rb 注释: 在 3 字节指令各式的第二个字节中,目的操作数地址是 4 位,位地址是 3 位。 编程实例: 假设: R1 = 07H: BTJRT SKIP,R1.1 工作寄存器 R1 的内容是 07H,指令“BTJRT SKIP,R1.1”测试寄存器 R1 的位 1。因该位为 “1”,相对地址将被叠加到 PC,并跳转到新的 PC 地址 SKIP 处。(记住跳转范围必须在 +127 至 -128 之间) 6-24 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BXOR — 位异或 (Bit XOR) BXOR dst,src.b BXOR dst.b,src 操作: dst(0) dst(0) XOR src(b) 或 dst(b) dst(b) XOR src(0) 源操作数(或者目的操作数)的特定位与目的操作数(源操作数)的最低位进行逻辑异或运算。结 果保存在目的寄存器的特定位中。其他位不受影响。源操作数不受影响。 标志位: C: Z: S: V: D: H: 不受影响 如果结果为 0,被置 1;否则,被清 0 总是被清零 不确定 不受影响 不受影响 格式: 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst src opc dst | b | 0 src 3 6 27 r0 Rb opc src | b | 1 dst 3 6 27 Rb r0 注释: 在 3 字节指令各式的第二个字节中,目的操作数地址是 4 位,位地址是 3 位。 编程实例: 假设:R1 = 07H (00000111B) 和寄存器 01H = 03H (00000011B): BXOR R1,01H.1 R1 = 06H, 寄存器 01H = 03H BXOR 01H.2,R1 寄存器 01H = 07H, R1 = 07H 在第一个例子中,目的寄存器 R1 的内容是 07H,源寄存器 01H 的内容是 03H,指令“BXOR R1,01H.1”将源寄存器 01H 的位 1 和 R1 的位 0 进行逻辑异或,结果保存在 R1 的位 0,将 R1 的 值从 07H 改写为 06H。源寄存器 01H 的值不受影响。 6-25 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X CALL — 程序调用 (Call Procedure) CALL dst 操作: SP @SP SP @SP PC SP – 1 PCL SP –1 PCH dst PC 的当前内容被压入堆栈,也就是紧跟 CALL 指令之后的指令地址。然后,指定的目标地址被送 给PC,指向子程序的第一条指令地址。在子程序末尾,用返回指令 RET 返回到原来的程序流程, 继续执行主程序。RET 指令的执行,将 PC 值从堆栈顶部弹出。 标志位: 没有标志位受影响 格式: opc 编程实例: dst 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 3 14 F6 DA opc dst 2 12 F4 IRR opc dst 2 14 D4 IA 假设: R0 = 35H, R1 = 21H, PC = 1A47H, 和SP = 0002H: CALL 3521H SP = 0000H (存储器 0000H = 1AH, 0001H = 4AH, 4AH 是指令后面的地址) CALL @RR0 CALL #40H SP = 0000H (0000H = 1AH, 0001H = 49H) SP = 0000H (0000H = 1AH, 0001H = 49H) 在第一个例子中,如果 PC 值为 1A47H,堆栈指针内容为 0002H,指令“CALL 3521H”将当前的 PC 数值压入堆栈顶,堆栈指针现在指向 0000H,然后 PC 装载入 3521H,从子程序的第一条指令 地址开始顺序执行。 如果 PC 和 SP 的内容与第一个例子相同,指令“CALL @RP0”运行的结果基本相同,除了堆栈 0001H 的内容是 49H(因为是 2 字节指令),然后 PC 装载数值 3521H,并顺序执行指令。如果 PC 和堆栈指针的内容与第一个例子相同,如果程序抵制 0040H 的内容为 35H,41H 的内容为 21H,指令“CALL #40H”产生和第二个例子相同的结果。 6-26 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X CCF — 进位标志位取反 (Complement Carry Flag) CCF 操作: C NOT C 进位标志 C 取反。如果C=“1”,进位标志变成 0;如果C=“0”,进位标志变成 1。 标志位: C: 取反. 其他的标志位不受影响 格式: opc 编程实例: 字节数 时钟周期 指令代码 (Hex) 1 4 EF 假设:进位标志C=“0”: CCF 如果进位标志 C=“0”,指令 CCF 对该标志为取反,在标志位寄存器中,该位从“0”变成 “1”。 6-27 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X CLR — 清零 (Clear) CLR dst 操作: dst "0" 目的操作数被清零。 标志位: 没有标志位受影响 格式: opc 编程实例: dst 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 4 B0 R 4 B1 IR 假设: 寄存器 00H = 4FH, 寄存器 01H = 02H, 和寄存器 02H = 5EH: CLR 00H CLR @01H 寄存器 00H = 00H 寄存器 01H = 02H, 寄存器 02H = 00H 在寄存器寻址模式中,指令“CLR 00H”把目的寄存器 00H 的内容清零。在第二个例子中,指令 “CLR @01H”使用间接寄存器寻址模式,把寄存器 02H 清零。 6-28 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X COM — 取反 (complement) COM dst 操作: dst NOT dst 对目标地址的内容取反,所有的“1”变成“0”,所有的“0”变成“1”。 标志位: C: Z: S: V: D: H: 不受影响 如果结果为 0,被置 1;否则,被清 0 如果结果是负数,被置 1;否则,被清 0 总是被清 0 不受影响 不受影响 格式: opc 编程实例: dst 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 4 60 R 4 61 IR 假设: R1 = 07H 和寄存器 07H = 0F1H: COM R1 R1 = 0F8H COM @R1 R1 = 07H, 寄存器 07H = 0EH 在第一个例子中,目的寄存器 R1 的内容是 07H,指令“COM R1”对R1的所有位取反,所有的逻 辑“1”变成逻辑“0”,所有的逻辑“0”变成逻辑“1”,结果为 0F8H。 在第二个例子中,应用间接寄存器寻址模式对目的寄存器 07H 的内容取反,结果为 0EH。 6-29 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X CP — 比较 (Compare) CP dst,src 操作: dst – src 源操作数和目的操作数作比较(相减),根据结果设置适当的标志位。源操作数和目的操作数均不受 影响。 标志位: C: Z: S: V: D: H: 如果源操作数大于目的操作数,被置 1;否则,被清 0 如果结果为 0,被置 1;否则,被清 0 如果结果是负数,被置 1;否则,被清 0 总是被清零 不受影响 不受影响 格式: opc dst | src opc src opc 编程实例: dst dst 字节数 时钟周期 指令代码 (Hex) 2 4 A2 r r 6 A3 r lr 6 A4 R R 6 A5 R IR 6 A6 R IM 3 src 3 寻址模式 dst src 1. 假设: R1 = 02H 和 R2 = 03H: CP R1,R2 对 C 和 S 标志位置 1 目的寄存器 R1 的内容为 02H,源寄存器 R2 的内容为 03H,指令“CP R1,R2”把 R1 减去 R2, 因为产生了借位,结果是负数,所以 C 和 S 被置 1。 2. 假设: R1 = 05H 和 R2 = 0AH: SKIP CP JP INC LD R1,R2 UGE,SKIP R1 R3,R1 在这个例子中,目的寄存器 R1 的内容是 05H,小于源寄存器 R2 的内容 0AH。指令“CP R1,R2”使得 C =“1”,JP 指令没有跳转到 SKIP 处。当执行完指令“LD R3,R1”,寄存器 R3 的内容为 06H。 6-30 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X CPIJE — 比较,增加一,若相等跳转 (Compare, Increment, and Jump on Equal) CPIJE dst,src,RA 操作: If dst – src = "0", PC PC + RA Ir Ir + 1 源操作数与目的操作数作比较 (相减)。若结果为“0”,则相对地址被叠加到 PC 上,从 PC 指向 的新地址开始执行程序。否则,继续执行 CPIJE 后面的指令。无论哪种情况下,在执行下一条指 令前,源指针增加 1。 标志位: 没有标志位受影响 格式: opc 注释: 编程实例: src dst RA 字节数 时钟周期 指令代码 (Hex) 3 12 C2 寻址模式 dst src r Ir 执行时间是 18 个时钟周期(跳转)或者 16 个时钟周期(无跳转) 假设: R1 = 02H, R2 = 03H, 和寄存器 03H = 02H: CPIJE R1,@R2,SKIP R2 = 04H, PC 跳转到地址 SKIP 处 在这个例子中,工作寄存器 R1 的内容是 02H,工作寄存器 R2 的内容是 03H,寄存器 03H 的内容 是 02H,指令“CPIJE R1,@R2,SKIP”比较@ R2 的内容 02H 和 02H,因为比较的结果是相等 的,跳转到新的 PC 地址 SKIP 处。源寄存器 R2 加 1 变成 04H。 记住 CPIJE 指令跳转的地址范围须介于 +127 至 -128 之间。 6-31 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X CPIJNE — 比较,增加一,不等跳转 (Compare, Increment, Jump on Non-Equal) CPIJNE dst,src,RA 操作: If dst – src "0", PC PC + RA Ir Ir + 1 源操作数与目的操作数作比较(相减),如果结果不为“0”,则将相对地址叠加到 PC 上,从 PC 指 向的新地址开始执行程序。否则,继续执行 CPIJE 后面的指令。无论在哪种情况下,在执行下一 条指令前,源指针增加 1。 标志位: 没有标志位受影响 格式: opc 注释: 编程实例: src dst RA 字节数 时钟周期 指令代码 (Hex) 3 12 D2 寻址模式 dst src r Ir 执行时间是 18 个时钟周期(跳转)或者 16 个时钟周期(无跳转) 假设: R1 = 02H, R2 = 03H, 和寄存器 03H = 04H: CPIJNE R1,@R2,SKIP R2 = 04H, PC 跳转到地址 SKIP 在这个例子中,工作寄存器 R1 的内容是 02H,工作寄存器 R2 的内容是 03H,寄存器 03H 的内容 是 04H,指令“CPIJE R1,@R2,SKIP”比较 @R2 的内容 04H 和 02H,因为比较的结果是不相等 的,跳转到新的 PC 地址 SKIP 处。源寄存器 R2 加 1 变成 04H。 记住 CPIJNE 指令跳转的地址范围须介于 +127 至 -128 之间。 6-32 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X DA — 十进制调整 (Decimal Adjust) DA dst 操作: dst DA dst 在加法或者减法运算后,将结果调整为 2 个 4 位 BCD 码。对于加法(ADD,ADC)或者减法 (SUB,SBC)下面的表格指明了操作如何进行。 指令 DA前的 位7-4 进位标志 (十六进制) 0 0–9 0 0–9 00 0 0 0–8 0 A–F 06 0 0 0–9 1 0–3 06 0 ADD 0 A–F 0 0–9 60 1 ADC 0 9–F 0 A–F 66 1 0 A–F 1 0–3 66 1 1 0–2 0 0–9 60 1 1 0–2 0 A–F 66 1 1 0–3 1 0–3 66 1 0 0–9 0 0–9 00 = – 00 0 SUB 0 0–8 1 6–F FA = – 06 0 SBC 1 7–F 0 0–9 A0 = – 60 1 1 6–F 1 6–F 9A = – 66 1 标志位: C: Z: S: V: D: H: 位3-0 DA前H标志 要增加的数字 (十六进制) DA后的 进位标志 如果发生进位,被置 1;否则,被清 0 如果结果为 0,被置 1;否则,被清 0 如果结果是负数,被置 1;否则,被清 0 没有定义 不受影响 不受影响 格式: opc dst 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 4 40 R 4 41 IR 6-33 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X DA — 十进制调整 (Decimal Adjust) DA (续) 编程实例: 假设:工作寄存器R0的内容是15(BCD),工作寄存器 R1 的内容是 27(BCD),地址 27H 的内 容是 46(BCD): ADD DA R1,R0 R1 C "0", H "0", Bits 4–7 = 3, bits 0–3 = C, R1 3CH R1 3CH + 06 ; ; 如果用 BCD 数值 15 和 27 进行加法运算,结果是 27。然而结果是不对的,当加法的时候,使用的 是标准的二进制运算: 0001 + 0010 0101 0111 0011 1100 15 27 = 3CH DA 指令调整了运算结果,进而得到正确的结果: 0011 + 0000 1100 0110 0100 0010 = 42 假设同样的数值,指令: SUB 27H,R0 ; C "0", H "0", Bits 4–7 = 3, bits 0–3 = 1 DA @R1 @R1 31–0 ; 执行的结果为 31(BCD),保存在地址 27H(@R1)。 6-34 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X DEC — 字节减1 (Decrement) DEC dst 操作: dst dst – 1 目的操作数的内容减 1 标志位: C: Z: S: V: D: H: 不受影响 如果结果为 0,被置 1;否则,被清 0 如果结果是负数,被置 1;否则,被清 0 如果结果溢出,被置 1;否则,被清 0 不受影响 不受影响 格式: opc 编程实例: dst 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 4 00 R 4 01 IR 假设: R1 = 03H 和寄存器 03H = 10H: DEC R1 R1 = 02H DEC @R1 寄存器 03H = 0FH 在第一个例子中,如果工作寄存器 R1 的内容是 03H,值令“DEC R1”将该 16 进制数减 1,结果 为 02H。在第二个例子中,“DEC @R1”将数值 10H 减 1,得到 0FH,保存在地址 03H。 6-35 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X DECW — 字减1 (Decrement Word) DECW dst 操作: dst dst – 1 目的地址(须为偶数)的内容减 1,把操作数视为 16 位数据。 标志位: C: Z: S: V: D: H: 不受影响 如果结果为 0,被置 1;否则,被清 0 如果结果是负数,被置 1;否则,被清 0 如果有溢出,被置 1;否则,被清 0 不受影响 不受影响 格式: opc 编程实例: dst 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 8 80 RR 8 81 IR 假设:R0 = 12H, R1 = 34H, R2 = 30H, 寄存器 30H = 0FH, 和寄存器 31H = 21H: DECW RR0 R0 = 12H, R1 = 33H DECW @R2 寄存器 30H = 0FH, 寄存器 31H = 20H 在第一个例子中,目的寄存器 R0 内容是 12H,寄存器 R1 内容 34H,指令“DECW RR0”把 R1,R0 当作 16 位数,减 1 以后,得到的结果为 33H。 注释: 当 DECW 指令与 Z 标志一起使用时,可能导致系统错误。为避免这个问题,推荐按照如下方法来 使用 DECW 指令: LOOP: DECW RR0 6-36 LD R2,R1 OR R2,R0 JR NZ,LOOP 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X DI — 屏蔽全局中断 (Disable Interrupts) DI 操作: SYM (0) 0 系统模式控制寄存器的位 0,SYM.0 被清零,将禁止全局中断。中断请求仍然会置起相应的中断悬 挂标志,但 CPU 不会响应中断服务程序,因为中断处理被屏蔽了。 标志位: 没有标志位受影响 格式: opc 编程实例: 字节数 时钟周期 指令代码 (Hex) 1 4 8F 假设: SYM = 01H: DI 如果 SYM 寄存器的值是 01H,指令 DI 将清零 SYM.0,屏蔽所有的中断处理。 在改变 IMR、中断标志位、中断源控制寄存器之前,确保 DI 状态。 6-37 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X DIV — 无符号除法(Unsigned Divide) DIV dst,src 操作: dst ÷ src dst (UPPER) REMAINDER dst (LOWER) QUOTIENT 目的操作数(16 位)除以源操作数(8 位),商(8 位)保存在目的操作数的低字节,余数(8 位)则保存在目的操作数的高字节。如果商 28,保存在目的操作数高低字节的商和余数是不正确 的。所有的操作数都是无符号整数。 标志位: C: Z: S: V: D: H: 如果V标志被设置并且商在 28 和 29 –1范围之间,被置 1;否则,被清 0。 如果除数或者商 =“0”,被置 1;否则,被清 0。 如果商的最高位 =“1”,被置 1;否则,被清 0。 如果商 28 或者除数 =“0”,被置 1;否则,被清 0。 不受影响 不受影响。 格式: opc src dst 字节数 时钟周期 指令代码 (Hex) 3 26/10* 94 RR R 26/10* 95 RR IR 26/10* 96 RR IM *注释: 如果除数为 0,运行时间需要 10 个时钟周期;其他情况下,执行时间为 26 个时钟周期。 编程实例: 假设: R0 = 10H, R1 = 03H, R2 = 40H, 寄存器 40H = 80H: DIV RR0,R2 R0 = 03H, R1 = 40H DIV RR0,@R2 R0 = 03H, R1 = 20H DIV RR0,#20H R0 = 03H, R1 = 80H 寻址模式 dst src 在第一个例子中,目的寄存器 RR0 的内容是 10H(R0)和 03H(R1),寄存器 R2 的内容是 40H。指令“DIV RR0,R2”将 16 位 RR0 被除数除以 8 位除数 R2,除法运算后,R0 内容为 03H,R1 的内容为 40H。8 位余数保存在目的寄存器 RR0 的上半部分(R0),商则保存在下半部分 (R1)。 6-38 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X DJNZ — 减1,如果非零,跳转 (Decrement and Jump if Non-Zero) DJNZ r,dst 操作: r r – 1 If r 0, PC PC + dst 作为计数器的工作寄存器值首先减 1,如果结果不为“0”,相对地址被累加到 PC,然后程序跳转 到新的地址执行。相对地址的范围是 +127 至 -128,PC 的初始值是紧跟在 DJNZ 指令后面的指令 地址。 注释: 使用 DJNZ 指令的时候,被用来做计数器的工作寄存器必须通过 SRP,SRP0,SRP1 指令设置为 0C0H~0C1H 中的一个。 标志位: 没有标志位受影响 格式: 字节数 r | opc dst 2 时钟周期 8 (jump taken) 8 (no jump) 编程实例: 假设: R1 = 02H 和 LOOP 是相对地址的地址标志符: LOOP SRP #0C0H DJNZ R1,LOOP 指令代码 (Hex) rA 寻址模式 dst RA r = 0 to F 指令 DJNZ 经常被用在循环程序中。大多数情况下,用地址标号而非数字相对地址来做目的操作 数。在这个例子中,工作寄存器 R1 内容是 02H,LOOP 是相对地址的标号。 指令“DJNZ R1, LOOP”首先将寄存器 R1 减 1,得到结果 01H,因为减 1 后 R1 的内容非 “0”,程序将跳转到标号 LOOP 指向的地址执行。 6-39 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X EI — 使能全局中断 (Enable Interrupts) EI 操作: SYM (0) 1 EI 指令对系统模式寄存器(SYM)的最低位 SYM.0 置 1,这将允许响应中断服务程序(假定该中断具 有最高优先级)。如果中断处理被屏蔽(通过执行 DI)时,又发生中断,可通过执行EI指令,来执 行中断服务程序。 标志位: 没有标志位受影响 格式: Opc 编程实例: 字节数 时钟周期 指令代码 (Hex) 1 4 9F 假设: SYM = 00H: EI 如果 SYM 寄存器的内容是 00H,也就是说,全局中断被屏蔽,执行指令“EI”将把SYM寄存器设 置为 01H,使能所有中断(SYM.0 是全局中断的使能位)。 6-40 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X ENTER — 进入 (Enter) ENTER 操作: SP @SP IP PC IP SP – 2 IP PC @IP IP + 2 这条指令在执行线性代码语言时非常有用。指令指针的内容压入堆栈,然后把程序计数器(PC) 的值写入指令指针,程序存储器中指令指针所指向的字数据载入 PC,并且指令指针的值增加 2。 标志位: 没有标志位受影响 格式: 字节数 时钟周期 指令代码 (Hex) 1 14 1F opc 编程实例: 下图给出了一个如何使用 ENTER 指令的例子。 Before Address IP After Data Address 0050 IP Address PC 0040 SP 0022 22 Data Stack 40 41 42 43 Data 0043 Data Enter Address H Address L Address H Memory 1F 01 10 Address PC 0110 SP 0020 20 21 22 IPH IPL Data 40 41 42 43 00 50 110 Data Enter Address H Address L Address H 1F 01 10 Routine Memory Stack 6-41 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X EXIT — 退出 (Exit) EXIT 操作: IP SP PC IP @SP SP + 2 @IP IP + 2 这条指令在执行线性代码语言时非常有用。被压入堆栈的值弹出并载入指令指针,程序存储器中被 指令指针指向的字数据载入程序计数器,并且指令指针的值增加 2。 标志位: 没有标志位受影响 格式: 字节数 时钟周期 指令代码 (Hex) 1 14 (内部堆栈) 2F opc 16 (外部堆栈) 编程实例: 下图给出了一个如何使用 EXIT 指令的例子。 Before Address IP After Data Address 0050 IP Address PC SP 0022 20 21 22 IPH IPL Data Stack Address PC 140 6-42 Data 0040 50 51 00 50 Data 0052 PCL old PCH Exit Memory Data 0060 60 00 60 SP 0022 22 Data Main 2F Stack Memory 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X IDLE — 空闲指令 (Idle Operation) IDLE 操作: (见描述) IDLE 指令将停止 CPU 时钟但允许系统时钟继续工作。IDLE 模式可以被中断请求(IRQ)或者是 外部复位操作唤醒。 在应用程序中,IDLE 指令后必须立即执行至少 3 个 NOP 指令。这是为了保证在下一条指令执行之 前,系统时钟有足够的时间间隔来稳定时钟信号。如果在 IDLE 指令后没有 3 个或更多个的 NOP 指令,内部总线的悬浮状态将导致漏电流的产生。 标志位: 没有标志位受影响 格式: opc 编程实例: 字节数 时钟周期 指令代码 (Hex) 1 4 6F 寻址模式 dst src – – 指令 IDLE NOP NOP NOP ; 停止 CPU 时钟但不停系统时钟 6-43 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X INC — 加1 (Increment) INC dst 操作: dst dst + 1 目标操作数的内容增加1 标志位: 没有影响 如果结果为“0”则置 1;否则清零 如果结果为负数则置 1;否则清零 如果发生溢出则置 1;否则清零 没有影响 没有影响 C: Z: S: V: D: H: 格式: dst | opc 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 1 4 rE r r = 0 到 F opc 编程实例: dst 2 假如: R0 = 1BH, 寄存器 00H = 0CH, 寄存器 1BH = 0FH: INC R0 R0 = 1CH INC 00H 寄存器 00H = 0DH INC @R0 R0 = 1BH, 寄存器 01H = 10H 4 20 R 4 21 IR 在第一个例子中,如果目标工作寄存器R0的值为1BH,那么语句“INC R0”将 R0 的值变为1CH。 第二个例子演示了 INC 指令对寄存器 00H 产生的效果,假定寄存器的值为 0CH。 第三个例子中,INC 指令用在间接寄存器(IR)寻址模式中,将寄存器 1BH 的值由 0FH 变为 10H。 6-44 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X INCW — 字加1 (Increment Word) INCW dst 操作: dst dst + 1 目标操作数(必须是偶地址)中的一个字节和下一地址中的字节数据合在一起作为一个 16 位数 据,整个 16 位的数据增加 1 标志位: C: Z: S: V: D: H: 没有影响 如果结果为“0”则置 1;否则清零 如果结果为负数则置 1;否则清零 如果发生溢出则置 1;否则清零 没有影响 没有影响 格式: opc 编程实例: 假如: dst 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 8 A0 RR 8 A1 IR R0 = 1AH, R1 = 02H, 寄存器 02H = 0FH, 寄存器 03H = 0FFH: INCW RR0 R0 = 1AH, R1 = 03H INCW @R1 寄存器 02H = 10H, 寄存器 03H = 00H 在第一个例子中,工作寄存器对 RR0 的内容是 1AH(R0) 和 02H(R1)。语句“INCW RR0”将16 位的目标数据加 1,使寄存器 R1 的值变为 03H。第二个例子中,语句“INCW @R1”用间接寄存 器(IR)寻址模式将寄存器 03H 的值从 0FFH 变为 00H,寄存器 02H 的值从 0FH 变为 10H。 注释: 如果 Zero(Z)标志位(标志位.6)与 INCW 指令一起使用,可能会发生冲突而导致系统错误。为 了避免这个问题,建议按下面的方法使用 INCW 指令: LOOP: INCW LD OR JR RR0 R2,R1 R2,R0 NZ,LOOP 6-45 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X IRET — 中断返回 (Interrupt Return) IRET IRET (正常) IRET (快速) 操作: 标志位 @SP SP SP + 1 PC @SP SP SP + 2 SYM(0) 1 PC IP 标志位 标志位' FIS 0 该指令用在中断服务程序的末尾。该指令将恢复标志寄存器和程序计数器的值,同时重新使能全局 中断。只有在快速中断状态位(FIS,标志位寄存器位 1,0D5H)被清零时(=“0”),才执行 “正常IRET”。快速中断产生时,对于在中断服务程序开始时被置 1 的 FIS 位,IRET 会将其清 零。 标志位: 所有标志位恢复到初始状态(即中断发生以前的状态) 格式: IRET (正常) 字节数 时钟周期 指令代码 (Hex) Opc 1 10 (内部堆栈) BF 12 (外部堆栈) 编程实例: IRET (快速) 字节数 时钟周期 指令代码 (Hex) opc 1 6 BF 在下图中,中断使能之前,在主程序中将指令指针初始化为 100H。中断发生时,程序计数器和指 令指针的内容相交换,这使得 PC 跳转到地址 100H 而IP则保存返回地址。中断服务程序的最后一 条指令通常是跳转到地址 FFH 处的 IRET。 这将使指令指针“重新”被赋值为 100H,且程序计数器跳回到主程序。现在,下一个中断可以发 生了,IP 寄存器的值仍然为 100H。 0H FFH 100H IRET Interrupt Service Routine JP to FFH FFFFH 注释: 6-46 上面快速中断的例子中,如果最后的指令不是跳转到 IRET,那么必须注意最后两条指令的顺序。 在 IRET 指令之后,不可紧跟用于中断状态清除的指令(例如 IPR 寄存器清 0)。 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X JP — 跳转 (Jump) JP cc,dst (条件跳转) JP dst (无条件跳转) 操作: 如果 cc 为真,PC dst 如果转移条件为真,那么条件跳转指令把系统控制交给目标地址;否则执行紧跟 JP 指令之后的指 令。无条件跳转指令只是简单的用目标地址替换 PC 的内容,然后程序控制交给由 PC 指定的语 句。 标志位: 没有标志位受影响 格式: (1) 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 3 8 ccD DA (2) cc | opc dst cc = 0 to F opc dst 2 8 30 IRR 注释: 1. 3 字节格式用于条件跳转,2 字节格式用于无条件跳转 2. 在 3 字节指令格式(条件跳转)的第一字节中,条件码和指令代码各占 4 位 编程实例: 假如: 进位标志 (C) =“1”, 寄存器 00 = 01H, 寄存器 01 = 20H: JP C,LABEL_W LABEL_W = 1000H, PC = 1000H JP @00H PC = 0120H 第一个例子是条件跳转 JP。假定进位标志为“1”,指令“JP C,LABEL_W”将 PC 的值替换为 1000H 并且跳转到该地址。如果标志位没有被置 1,那么程序将立即转到紧跟 JP 后的那条指令。 第二个例子为无条件跳转 JP。指令“JP @00”将 PC 的内容替换为寄存器对 00H 和 01H 的值, 亦即 0120H。 6-47 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X JR — 相对跳转指令 (Jump Relative) JR cc,dst 操作: 如果 cc 为真,PC PC + dst 如果转移条件为真,那么程序计数器值加上相对地址,并把程序控制转到该地址处的指令;否则执 行紧跟 JR 指令后的那条指令(见本章:转移条件码列表)。 相对地址的范围是 -128 ~ +127,并且程序计数器的初值被认为是紧跟JR指令之后的第一条指令地 址。 标志位: 没有标志位受影响 格式: 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 6 ccB RA (1) cc | opc dst cc = 0 到 F 注释: 编程实例: 2 字节指令格式中的第一个字节中,条件码和指令代码各占 4 位 假如: 进位标志位 = “1” 并且 LABEL_X = 1FF7H: JR C,LABEL_X PC = 1FF7H 如果进位标志位为“1”(也就是,转移条件为真),指令“JR C,LABEL_X”会将程序控制交给 当前 PC 指向的地址;否则,执行紧跟 JR 后的程序指令。 6-48 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X LD — 传送数据 (Load) LD dst,src 操作: dst src 源操作数的内容将赋给目标操作数。源操作数的内容不受影响。 标志位: 没有标志位受影响 格式: dst | opc src | opc src dst 字节数 时钟周期 指令代码 (Hex) 2 4 rC r IM 4 r8 r R 4 r9 R r 2 寻址模式 dst src r=0到F opc opc opc dst | src src dst 2 dst src 3 3 4 C7 r lr 4 D7 Ir r 6 E4 R R 6 E5 R IR 6 E6 R IM 6 D6 IR IM opc src dst 3 6 F5 IR R opc dst | src x 3 6 87 r x [r] opc src | dst x 3 6 97 x [r] r 6-49 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X LD — 传送数据 (Load) LD (续) 编程实例: 假如: R0 = 01H, R1 = 0AH, 寄存器 00H = 01H, 寄存器 01H = 20H, 寄存器 02H = 02H, LOOP = 30H, 寄存器 3AH = 0FFH: 6-50 LD R0,#10H R0 = 10H LD R0,01H R0 = 20H, 寄存器 01H = 20H LD 01H,R0 寄存器 01H = 01H, R0 = 01H LD R1,@R0 R1 = 20H, R0 = 01H LD @R0,R1 R0 = 01H, R1 = 0AH, 寄存器 01H = 0AH LD 00H,01H 寄存器 00H = 20H, 寄存器 01H = 20H LD 02H,@00H 寄存器 02H = 20H, 寄存器 00H = 01H LD 00H,#0AH 寄存器 00H = 0AH LD @00H,#10H 寄存器 00H = 01H, 寄存器 01H = 10H LD @00H,02H 寄存器 00H = 01H, 寄存器 01H = 02, 寄存器 02H = 02H LD R0,#LOOP[R1] R0 = 0FFH, R1 = 0AH LD #LOOP[R0],R1 寄存器 31H = 0AH, R0 = 01H, R1 = 0AH 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X LDB — 传送位数据 (Load Bit) LDB dst,src.b LDB dst.b,src 操作: dst(0) src(b) 或 dst(b) src(0) 源操作数的指定位载入目标操作数的最低位,或者源操作数的最低位载入目标操作数的指定位。目 标操作数的其它位都不受影响,源操作数也不受影响。 标志位: 没有标志位受影响 格式: 时钟周期 指令代码 (Hex) 寻址模式 dst src opc dst | b | 0 src 3 6 47 r0 Rb opc src | b | 1 dst 3 6 47 Rb r0 注释: 编程实例: 字节数 指令格式的第二个字节中,目标(或源)地址占 4 位,位地址“b”占 3 位,LSB 地址值占 1 位 假如: R0 = 06H ,通用寄存器 00H = 05H: LDB R0,00H.2 R0 = 07H, 寄存器 00H = 05H LDB 00H.0,R0 R0 = 06H, 寄存器 00H = 04H 第一个例子中,目标工作寄存器 R0 的值为 06H,源寄存器 00H 的值为 05H。指令“ R0,00h.2” 将寄存器 00H 中的第二位(bit 2)载入寄存器 R0 的最低位,R0 的值变为 07H。 第二个例子中,目标寄存器是 00H。指令“LD 00H.0,R0”将工作寄存器 R0 的最低位载入目标寄 存器 00H 的指定位(bit 0),寄存器 00H 的值变为 04H。 6-51 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X LDC/LDE — 传送程序/外部数据存储器数据 (Load Memory) LDC/LDE dst,src 操作: dst src 这条指令从程序或外部数据存储器中装载一个字节数据到工作寄存器,或者相反。源操作数不受影 响。指令 LDC 用作程序存储器,LDE 用作外部数据存储器。对于程序存储器,编译器将“Irr”或 “rr”的值编译成偶地址,而对于外部数据存储器则编译成奇地址。 标志位: 没有标志位受影响 格式: 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst src 1. opc dst | src 2 10 C3 r Irr 2. opc src | dst 2 10 D3 Irr r 3. opc dst | src XS 3 12 E7 r XS [rr] 4. opc src | dst XS 3 12 F7 XS [rr] r 5. opc dst | src XLL XLH 4 14 A7 r XL [rr] 6. opc src | dst XLL XLH 4 14 B7 XL [rr] r 7. opc dst | 0000 DAL DAH 4 14 A7 r DA 8. opc src | 0000 DAL DAH 4 14 B7 DA r 9. opc dst | 0001 DAL DAH 4 14 A7 r DA 10. opc src | 0001 DAL DAH 4 14 B7 DA r 注释: 1. 格式 5 和 6 的源操作数 [src] 或工作寄存器对 [rr] 不能使用工作寄存器对 0–1 2. 格式 3 和 4 的目标地址“XS[rr]”和源地址“XS[rr]”均为一个字节 3. 格式 3 和 4 的目标地址“XL[rr]”和源地址“XL[rr]”均为两个字节 4. 格式 7 和 8 的 DA 和 r 源操作数值用于访问程序存储器,格式 9 和 10 则用于访问外部数据存储器 5. LDE 指令可用于读/写 64K 字节的外部数据存储器。 6-52 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 指令集 LDC/LDE — 传送程序/外部数据存储器数据 (Load Memory) LDC/LDE (续) 编程实例: 假如: R0 = 11H, R1 = 34H, R2 = 01H, R3 = 04H; 程序存储器空间中 0103H = 4FH, 0104H = 1A, 0105H = 6DH, 1104H = 88H. 外部数据存储空间中 0103H = 5FH, 0104H = 2AH, 0105H = 7DH, 1104H = 98H: LDC R0,@RR2 ; R0 程序存储器地址 0104H 的内容 ; R0 = 1AH, R2 = 01H, R3 = 04H LDE R0,@RR2 ; R0 外部数据存储器地址 0104H 的内容 ; R0 = 2AH, R2 = 01H, R3 = 04H LDC (注释) @RR2,R0 ; 11H (R0 的内容) 载入程序存储器地址 0104H (RR2) ; 工作寄存器 R0, R2, R3 没有变化 LDE @RR2,R0 ; 11H (R0 的内容) 载入外部数据存储器地址 0104H (RR2) ; 工作寄存器 R0, R2, R3 没有变化 LDC R0,#01H[RR2] ; R0 程序存储器地址 0105H 的内容 ; (01H + RR2), ; R0 = 6DH, R2 = 01H, R3 = 04H LDE R0,#01H[RR2] ; R0 外部数据存储器地址 0105H 的内容 ; (01H + RR2), R0 = 7DH, R2 = 01H, R3 = 04H LDC (注释) #01H[RR2],R0 ; 11H (R0 的内容) 载入程序存储器地址 ; 0105H (01H + 0104H) LDE #01H[RR2],R0 ; 11H (R0 的内容) 载入外部数据存储器地址 ; 0105H (01H + 0104H) LDC R0,#1000H[RR2] ; R0 程序存储器地址 1104H 的内容 ; (1000H + 0104H), R0 = 88H, R2 = 01H, R3 = 04H LDE R0,#1000H[RR2] ; R0 外部数据存储器地址 1104H 的内容 ; (1000H + 0104H), R0 = 98H, R2 = 01H, R3 = 04H LDC R0,1104H ; R0 程序存储器地址 1104H 的内容, R0 = 88H LDE R0,1104H ; R0 外部数据存储器地址 1104H 的内容 ; R0 = 98H LDC (注释) 1105H,R0 ; 11H (R0 的内容) 载入程序存储器地址 ; 1105H, (1105H) 11H LDE ; 11H (R0 的内容) 载入外部数据存储器地址 ; 1105H, (1105H) 11H 注释: 1105H,R0 掩膜 ROM 类型的器件不支持 LDC/LDE 指令。 6-53 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X LDCD/LDED — 传送数据之后地址减1 (Load Memory and Decrement) LDCD/LDED dst,src 操作: dst src rr rr – 1 该指令用于用户栈或在程序/数据存储器与寄存器卷之间批量传送数据。存储器的地址由工作寄存器 对指定。源地址的内容载入目标地址,然后存储器地址自动减1,源操作数的内容不变。 LDCD 对应程序存储器,而 LDED 对应外部数据存储器。对于程序存储器,编译器将“Irr”或 “rr”的值编译成偶地址,对于数据存储器则编译成奇地址。 标志位: 没有标志位受影响 格式: opc 编程实例: dst | src 字节数 时钟周期 指令代码 (Hex) 2 10 E2 寻址模式 dst src r 假如: R6 = 10H, R7 = 33H, R8 = 12H, 程序存储器地址 1033H = 0CDH, 外部数据存储地址 1033H = 0DDH: LDCD R8,@RR6 ; 0CDH (程序存储器 1033H 的内容) 载入R8 ; RR6 减1 ; R8 = 0CDH, R6 = 10H, R7 = 32H (RR6 RR6 – 1) LDED R8,@RR6 ; 0DDH (数据存储器地址 1033H 的内容) 载入R8 ; RR6 减1 (RR6 RR6 – 1) ; R8 = 0DDH, R6 = 10H, R7 = 32H 6-54 Irr 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X LDCI/LDEI — 传送数据后地址加1 (Load Memory and Increment) LDCI/LDEI dst,src 操作: dst src rr rr + 1 该指令用于用户栈或在程序/数据存储器与寄存器卷之间批量传送数据。存储器的地址由工作寄存器 对指定。源地址的内容载入目标地址,然后存储器地址自动加 1,源操作数的内容不变。 LDCI 对应程序存储器,而 LDEI 对应外部数据存储器。对于程序存储器,编译器将“Irr”或“rr” 的值编译成偶地址,对于数据存储器则编译成奇地址。 标志位: 没有标志位受影响 格式: opc 编程实例: dst | src 字节数 时钟周期 指令代码 (Hex) 2 10 E3 寻址模式 dst src r Irr 假如: R6 = 10H, R7 = 33H, R8 = 12H, 程序存储器地址 1033H = 0CDH, 1034H = 0C5H; 外部数据存储器地址 1033H = 0DDH, 1034H = 0D5H: LDCI R8,@RR6 ; 0CDH (程序存储器地址 1033H 的内容) 载入R8 ; RR6 加1 (RR6 RR6 + 1) ; R8 = 0CDH, R6 = 10H, R7 = 34H LDEI R8,@RR6 ; 0DDH (数据存储器地址 1033H 的内容) 载入R8 ; RR6 加1 (RR6 RR6 + 1) ; R8 = 0DDH, R6 = 10H, R7 = 34H 6-55 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X LDCPD/LDEPD — 传送数据前地址减1 (Load Memory with Pre-Decrement) LDCPD/ LDEPD dst,src 操作: rr rr – 1 dst src 该指令用于用户栈或在程序/数据存储器和寄存器卷之间批量传送数据。存储器的地址由工作寄存器 对指定并首先减 1。之后源地址的内容送入目标地址,源操作数的内容不变。 LDCPD 对应程序存储器,LDEPD 对应外部数据存储器。对于程序存储器,编译器将“Irr”或 “rr”的值编译成偶地址,而对于数据存储器则编译成奇地址。 标志位: 没有标志位受影响 格式: opc 编程实例: 6-56 src | dst 字节数 时钟周期 指令代码 (Hex) 2 14 F2 寻址模式 dst src Irr r 假如: R0 = 77H, R6 = 30H, R7 = 00H: LDCPD @RR6,R0 ; (RR6 RR6 – 1) ; 77H (R0 的内容) 载入程序存储器地址 2FFFH (3000H – 1H) ; R0 = 77H, R6 = 2FH, R7 = 0FFH LDEPD @RR6,R0 ; (RR6 RR6 – 1) ; 77H (R0 的内容) 载入外部数据存储器地址 2FFFH (3000H – 1H) ; R0 = 77H, R6 = 2FH, R7 = 0FFH 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X LDCPI/LDEPI — 传送数据前地址加1 (Load Memory with Pre-Increment) LDCPI/ LDEPI dst,src 操作: rr rr + 1 dst src 该指令用于用户栈或在程序/数据存储器与寄存器卷之间批量传送数据。存储器的地址由工作寄存器 对指定并首先加 1。之后源地址的内容载入目标地址,源操作数的内容不变。 LDCPI 对应程序存储器,LDEPI 对应外部数据存储器。对于程序存储器,编译器将“Irr”或“rr” 的值编译成偶地址,而对于数据存储器则编译成奇地址。 标志位: 没有标志位受影响 格式: opc 编程实例: src | dst 字节数 时钟周期 指令代码 (Hex) 2 14 F3 寻址模式 dst src Irr r 假如: R0 = 7FH, R6 = 21H, R7 = 0FFH: LDCPI @RR6,R0 ; (RR6 RR6 + 1) ; 7FH (R0 的内容) 载入程序存储器地址 2200H (21FFH + 1H) ; R0 = 7FH, R6 = 22H, R7 = 00H LDEPI @RR6,R0 ; (RR6 RR6 + 1) ; 7FH (R0 的内容) 载入外部数据存储器地址 2200H (21FFH + 1H) ; R0 = 7FH, R6 = 22H, R7 = 00H 6-57 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X LDW — 传送字数据 (Load Word) LDW dst,src 操作: dst src 源操作数的内容(字)载入目标操作数。源操作数内容不变。 标志位: 没有标志位受影响 格式: opc opc 编程实例: src dst dst src 字节数 时钟周期 指令代码 (Hex) 3 8 C4 RR RR 8 C5 RR IR 8 C6 RR IML 4 寻址模式 dst src 假如: R4 = 06H, R5 = 1CH, R6 = 05H, R7 = 02H, 寄存器 00H = 1AH, 寄存器 01H = 02H, 寄存器 02H = 03H, 寄存器 03H = 0FH: LDW RR6,RR4 R6 = 06H, R7 = 1CH, R4 = 06H, R5 = 1CH LDW 00H,02H 寄存器 00H = 03H, 寄存器 01H = 0FH, 寄存器 02H = 03H, 寄存器 03H = 0FH LDW RR2,@R7 R2 = 03H, R3 = 0FH, LDW 04H,@01H 寄存器 04H = 03H, 寄存器 05H = 0FH LDW RR6,#1234H R6 = 12H, R7 = 34H LDW 02H,#0FEDH 寄存器 02H = 0FH, 寄存器 03H = 0EDH 第二个例子中,请注意指令“LDW 00H,02H”将源寄存器 02H 和 03H 中的内容载入目标寄存器 00H和 01H,使通用寄存器 00H 中的值变为 03H,01H 中的值变为 0FH。 其它的例子演示了如何通过不用的寻址模式和格式来使用 LDW 指令。 6-58 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X MULT — 无符号数乘法 ( Unisigned Multiply) MULT dst,src 操作: dst dst src 8 位目标操作数(寄存器对中的偶地址寄存器)与源操作数(8位)相乘,乘积(16位)保存在目 标地址指定的寄存器对中。两个操作数都为无符号整型数据。 标志位: C: Z: S: V: D: H: 如果结果 >255 则置 1;否则清零 如果结果为“0”则置 1;否则清零 如果结果的最高为“1”则置1;否则清零 清零 不受影响 不受影响 格式: opc 编程实例: src dst 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst src 3 22 84 RR R 22 85 RR IR 22 86 RR IM 假如: 寄存器 00H = 20H, 寄存器 01H = 03H, 寄存器02H = 09H, 寄存器 03H = 06H: MULT 00H, 02H 寄存器 00H = 01H, 寄存器 01H = 20H, 寄存器 02H = 09H MULT 00H, @01H 寄存器 00H = 00H, 寄存器 01H = 0C0H MULT 00H, #30H 寄存器 00H = 06H, 寄存器 01H = 00H 第一个例子中,指令“MULT 00H,02H”将 8 位目标操作数(寄存器对 00H,01H 中的 00H)与 源寄存器 02H 中的操作数(09H)相乘。16 位的乘积,0120H,保存在寄存器对 00H,01H中。 6-59 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X NEXT — Next 指令 NEXT PC @ IP 操作: IP IP + 2 NEXT 指令在执行线性代码语言时非常有用。程序存储器中指令指针所指向的字送入 PC,并且指 令指针增加 2。 标志位: 没有标志位受影响 格式: 字节数 时钟周期 指令代码 (Hex) 1 10 0F opc 编程实例: 下图是一个如何使用 NEXT 指令的例子。 Before Address 1P After Data Address 0043 1P Address PC 0120 43 44 45 120 Data Address H Address L Address H Next Memory 6-60 Data 0045 01 30 Address PC 0130 43 44 45 130 Data Address H Address L Address H Routine Memory 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X NOP — 空操作 (No Operation) NOP 操作: CPU 执行这条指令时,不做任何操作。通常用顺序执行一个或多个 NOP 指令来实现一定时长的延 时。 标志位: 没有标志位受影响 格式: opc 编程实例: 字节数 时钟周期 指令代码 (Hex) 1 4 FF 在程序中执行 NOP 指令时,没有任何操作发生,只是一个指令执行时间的延时。 6-61 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X OR — 逻辑或 (Logical OR) OR dst,src 操作: dst dst OR src 源操作数与目标操作数进行逻辑或,结果存放在目标操作数。源操作数的值不受影响。只要两个操 作数中任一个的相应位为“1”,那么或的结果就是“1”,否则为“0”。 标志位: C: Z: S: V: D: H: 不受影响 如果结果是“0”则置 1;否则清零 如果结果的第 7 位(bit 7)为“1”则置 1;否则清零 总是清零 不受影响 不受影响 格式: opc opc opc 编程实例: dst | src src dst dst src 字节数 时钟周期 指令代码 (Hex) 2 4 42 r r 6 43 r lr 6 44 R R 6 45 R IR 6 46 R IM 3 3 寻址模式 dst src 假如: R0 = 15H, R1 = 2AH, R2 = 01H, 寄存器 00H = 08H, 寄存器 01H = 37H, 寄存器 08H = 8AH: OR R0,R1 R0 = 3FH, R1 = 2AH OR R0,@R2 R0 = 37H, R2 = 01H, 寄存器 01H = 37H OR 00H,01H 寄存器 00H = 3FH, 寄存器 01H = 37H OR 01H,@00H 寄存器 00H = 08H, 寄存器 01H = 0BFH OR 00H,#02H 寄存器 00H = 0AH 第一个例子中,如果工作寄存器 R0 的值是 15H,寄存器 R1 的值是 2AH,指令“OR R0,R1”将 寄存器 R0 和 R1 的内容进行逻辑或,并将结果(3FH)存在目标寄存器 R0。 其他的例子演示了如何通过不同的寻址模式和格式来使用逻辑或指令。 6-62 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X POP — 出栈 (Pop from Stack) POP dst 操作: dst @SP SP SP + 1 堆栈指针指定地址的内容被装入目标操作数,然后堆栈指针加1。 标志位: 没有标志位受影响 格式: opc 编程实例: dst 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 8 50 R 8 51 IR 假如: 寄存器 00H = 01H, 寄存器 01H = 1BH, SPH (0D8H) = 00H, SPL (0D9H) = 0FBH, 堆栈寄存器 0FBH = 55H: POP 00H 寄存器 00H = 55H, SP = 00FCH POP @00H 寄存器 00H = 01H, 寄存器 01H = 55H, SP = 00FCH 第一个例子中,通用寄存器 00H 的值为 01H。指令“POP 00H”将地址 00FBH 中的值(55H)送 入目标寄存器 00H,然后堆栈指针加 1。寄存器 00H 的值变为 55H,并且 SP 指向地址 00FCH。 6-63 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X POPUD — 弹出用户栈 (自减) (Pop User Stack (Drementing)) POPUD dst,src 操作: dst src IR IR – 1 该指令用于寄存器卷中的用户自定义栈。用户栈指针指定地址的内容被载入目标寄存器,然后用户 栈指针减 1。 标志位: 没有标志位受影响 格式: opc 编程实例: src dst 字节数 时钟周期 指令代码 (Hex) 3 8 92 寻址模式 dst src R IR 假如: 寄存器 00H = 42H (用户栈指针寄存器), 寄存器 42H = 6FH, 寄存器 02H = 70H: POPUD 02H,@00H 寄存器 00H = 41H, 寄存器 02H = 6FH, 寄存器 42H = 6FH 如果通用寄存器 00H 的值为42H,寄存器 42H 的值为 6FH,那么指令“POPUD 02H,@00H”将 寄存器 42H 的内容载入目标寄存器 02H,然后用户栈指针减 1,变成 41H。 6-64 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X POPUI — 弹出用户栈 (自增) (Pop User Stack (Incrementing)) POPUI dst,src 操作: dst src IR IR + 1 该指令用于寄存器卷中的用户自定义栈。用户栈指针指定地址的内容载入目标寄存器,然后用户栈 指针加1。 标志位: 没有标志位受影响 格式: opc 编程实例: src 字节数 时钟周期 指令代码 (Hex) 3 8 93 dst 寻址模式 dst src R IR 假如: 寄存器 00H = 01H, 寄存器 01H = 70H: POPUI 02H,@00H 寄存器 00H = 02H, 寄存器 01H = 70H, 寄存器 02H = 70H 如果通用寄存器 00H 的值为 01H,寄存器 01H 的值为 70H,那么语句“POPUI 02H,@00H”将值 70H 载入目标通用寄存器 02H,然后用户栈指针(寄存器00H)加1,从 01H 变为 02H。 6-65 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X PUSH — 压栈 (Push to Stack) PUSH src 操作: SP SP – 1 @SP src PUSH 指令先将栈指针减 1,然后再将源操作数的内容载入减 1 后的栈地址。此操作将在栈顶置入 新的数值。 标志位: 没有标志位受影响 格式: opc src 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 8 (内部时钟) 70 R 71 IR 8 (外部时钟) 8 (内部时钟) 8 (外部时钟) 编程实例: 假如: 寄存器 40H = 4FH, 寄存器 4FH = 0AAH, SPH = 00H, SPL = 00H: PUSH 40H 寄存器 40H = 4FH, 堆栈寄存器 0FFH = 4FH, SPH = 0FFH, SPL = 0FFH PUSH @40H 寄存器 40H = 4FH, 寄存器 4FH = 0AAH, 堆栈寄存器 0FFH = 0AAH, SPH = 0FFH, SPL = 0FFH 第一个例子中,如果栈指针包含的内容为 0000H,通用寄存器 40H 的内容为 4FH,语句“PUSH 40H”使栈指针从 0000H 减为 0FFFFH,然后将寄存器 40H 的值载入地址 0FFFFH 中,即将这个 新的数值加入栈顶。 6-66 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X PUSHUD — 压入用户栈 (自减) Push User Stack (Decrementing) PUSHUD dst,src 操作: IR IR – 1 dst src 该指令用于寄存器卷中的用户自定义栈。PUSHUD 先将用户栈指针减 1,然后将源操作数的内容载 入减1后的栈指针指向的寄存器。 标志位: 没有标志位受影响 格式: opc 编程实例: dst src 字节数 时钟周期 指令代码 (Hex) 3 8 82 寻址模式 dst src IR R 假如: 寄存器 00H = 03H, 寄存器 01H = 05H, 寄存器 02H = 1AH: PUSHUD @00H,01H 寄存器 00H = 02H, 寄存器 01H = 05H, 寄存器 02H = 05H 如果用户栈指针(例如寄存器 00H)的值为 03H,语句“PUSHUD @00H,01H”使用户栈指针减 1,变为 02H。而寄存器 01H 的值,05H,则载入减 1 后的用户栈指针所指向的寄存器。 6-67 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X PUSHUI — 压入用户栈 (自增) Push User Stack (Incrementing) PUSHUI dst,src 操作: IR IR + 1 dst src 该指令用于寄存器卷中的用户自定义栈。PUSHUI 先将用户栈指针加 1,然后将源操作数的内容载 入加1后的栈指针指向的寄存器。 标志位: 没有标志位受影响 格式: opc 编程实例: dst src 字节数 时钟周期 指令代码 (Hex) 3 8 83 寻址模式 dst src IR R 假如: 寄存器 00H = 03H, 寄存器 01H = 05H, 寄存器 04H = 2AH: PUSHUI @00H,01H 寄存器 00H = 04H, 寄存器 01H = 05H, 寄存器 04H = 05H 如果用户栈指针(例如寄存器 00H)的值为 03H,语句“PUSHUI @00H,01H”使用户栈指针加 1,变为 04H。而寄存器 01H 的值,05H,则载入加 1 后的用户栈指针所指向的寄存器。 6-68 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X RCF — C清0 (Reset Carry Flag) RCF RCF 操作: C 0 进/借位标志位被无条件清零。 标志位: 清除为“0”. C: 其他标志位都不受影响 格式: opc 编程实例: 字节数 时钟周期 指令代码 (Hex) 1 4 CF 假如: C =“1” 或 “0”: 指令 RCF 将进/借位标志位(C)清零。 6-69 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X RET — 子程序返回 (Return) RET 操作: PC @SP SP SP + 2 RET 指令通常被用来从 CALL 指令所调用的子程序中返回。栈指针指向的地址内容被弹出到程序计 数器中,下一条要执行的指令地址由程序计数器的新值指定。 标志位: 没有标志位被影响 格式: opc 字节数 时钟周期 指令代码 (Hex) 1 8 (内部堆栈) AF 10 (外部堆栈) 编程实例: 假如: SP = 00FCH, (SP) = 101AH, PC = 1234: RET PC = 101AH, SP = 00FEH 指令“RET”将堆栈指针 00FCH 中的内容(10H)弹出到程序计数器的高字节中,00FDH 中的内 容(1AH)弹出到 PC 的低字节,地址 101AH 中的指令被执行。堆栈指针现在指向地址 00FEH。 6-70 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X RL — 左移(Rotate Left) RL dst 操作: C dst (7) dst (0) dst (7) dst (n + 1) dst (n), n = 0–6 目标操作数的内容左移一位,原来的第 7 位(bit 7)移到第0位(LSB)和C标志位中,如下图示: 7 0 C 标志位: C: Z: S: V: D: H: 如果从最高位(bit 7)移出的数为“1”,则置 1 如果结果为“0”则置1;否则清零 如果结果的第 7 位(bit 7)为“1”则置 1;否则清零 如果发生溢出则置 1;否则清零 不受影响 不受影响 格式: opc 编程实例: dst 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 4 90 R 4 91 IR 假如: 寄存器 00H = 0AAH, 寄存器 01H = 02H, 寄存器 02H = 17H: RL 00H 寄存器 00H = 55H, C =“1” RL @01H 寄存器 01H = 02H, 寄存器 02H = 2EH, C =“0” 第一个例子中,如果通用寄存器 00H 的值为 0AAH(10101010B),语句“RL 00H”将 0AAH 左 移一位,变为 55H(01010101B),并将进位和溢出标志置 1。 6-71 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X RLC — 带进位左移(Rotate Left Through Carry) RLC dst 操作: dst (0) C C dst (7) dst (n + 1) dst (n), n = 0–6 目标操作数的内容通过 C 标志位左移一位,原来的第 7 位(bit 7)移到 C 标志位中,原来的 C 标 志位则移至第 0 位(LSB)。 7 0 C 标志位: C: Z: S: V: D: H: 如果从最高位(bit 7)移出的为“1”则置 1 如果结果为“0”则置 1;否则清零 如果结果的第 7 位(bit 7)为“1”则置 1;否则清零 如果发生溢出,也就是目标操作数的符号在移位中发生改变,则置 1;否则清零 不受影响 不受影响 格式: opc 编程实例: dst 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 4 10 R 4 11 IR 假如: 寄存器 00H = 0AAH, 寄存器 01H = 02H, 寄存器 02H = 17H, C =“0”: RLC 00H 寄存器 00H = 54H, C =“1” RLC @01H 寄存器 01H = 02H, 寄存器 02H = 2EH, C =“0” 第一个例子中,如果通用寄存器的值为 0AAH(10101010B),语句“RLC 00H”将 0AAH 左移一 位。原来的第 7 位(bit 7)将进位标志置 1,C 标志位原来的值则移至寄存器 00H 的第 0 位 (LSB),使寄存器的值变为 55H(01010101B)。寄存器 00H 的最高位 MSB 重新置 C 标志位 为“1”,并且将溢出标志位置 1。 6-72 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X RR — 右移(Rotate Right) RR dst 操作: C dst (0) dst (7) dst (0) dst (n dst (n + 1), n = 0–6 目标操作数的内容右移一位,原来的第 0 位(LSB)移到第 7 位(MSB)和 C 标志位中。 7 0 C 标志位: C: Z: S: V: D: H: 如果从第 0 位(LSB)移出的为“1”,则置 1 如果结果为“0”则置 1;否则清零 如果结果的第 7 位(bit 7)为“1”则置 1;否则清零 如果发生溢出,也就是目标操作数的符号在移位中发生改变,则置 1;否则清零 不受影响 不受影响 格式: opc 编程实例: dst 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 4 E0 R 4 E1 IR 假如: 寄存器 00H = 31H, 寄存器 01H = 02H, 寄存器 02H = 17H: RR 00H 寄存器 00H = 98H, C =“1” RR @01H 寄存器 01H = 02H, 寄存器 02H = 8BH, C =“1” 第一个例子中,如果通用寄存器 00H 的值为 31H(00110001B),语句“RR 00H”将 00H 的值 右移一位,原来第 0 位移至第 7 位,目标寄存器的值变为 98H(10011000B)。原来的第 0 位将 C 标志位置“1”,同时符号标志和溢出标志也被置“1”。 6-73 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X RRC — 带进位右移(Rotate Right Through Carry) RRC dst 操作: dst (7) C C dst (0) dst (n) dst (n + 1), n = 0–6 目标操作数的内容通过 C 标志位右移一位,原来的第 0 位(LSB)移到C标志位中,原来的 C 标志 位则移至第 7 位(MSB)。 7 0 C 标志位: C: Z: S: V: D: H: 如果从最低位(bit 0)移出的为“1”,则置 1 如果结果为“0”则置 1;否则清零 如果结果的第 7 位(bit 7)为“1”则置 1;否则清零 如果发生溢出,也就是说目标操作数的符号在移位中发生改变,则置 1;否则清零 不受影响 不受影响 格式: opc 编程实例: dst 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 4 C0 R 4 C1 IR 假如: 寄存器 00H = 55H, 寄存器 01H = 02H, 寄存器 02H = 17H, C = "0": RRC 00H 寄存器 00H = 2AH, C =“1” RRC @01H 寄存器 01H = 02H, 寄存器 02H = 0BH, C =“1” 第一个例子中,如果通用寄存器 00H 的值为 55H(01010101B),语句“RRC 00H”将 00H 的值 右移一位,原来第 0 位(“1”)移至进位标志位,原来的 C 标志位(“1”)移至第 7 位,将目 标寄存器 00H 的变为 2AH(00101010B)。符号标志和溢出标志都被清零。 6-74 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X SB0 — 选择 Bank 0 (Select Bank 0) SB0 操作: BANK 0 SB0 指令将标志位寄存器(FLAGS)中的 bank 地址标志(FLAGS.0)清零,在寄存器卷的 set 1区 域选择 bank 0 。 标志位: 没有标志位受影响 格式: opc 编程实例: 字节数 时钟周期 指令代码 (Hex) 1 4 4F 语句 SB0 将 FLAGS.0 清零,选择 bank 0 中的寄存器进行寻址。 6-75 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X SB1 — 选择 Bank 1 (Select Bank 1) SB1 操作: BANK 1 SB1 指令将标志位寄存器(FLAGS)中的 bank 地址标志(FLAGS.0)置 1,在寄存器卷的 set 1区域 中选择 bank 1 。 注释:某些 S3C8- 系列的单片机没有 Bank 1。 标志位: 没有标志位受影响 格式: opc 编程实例: 6-76 字节数 时钟周期 指令代码 (Hex) 1 4 5F 指令 SB1 将 FLAGS.0 清零,选择 bank 1 的寄存器进行寻址 (如果存在 bank 1)。 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X SBC — 带进位减法(Subtract with Carry) SBC dst,src 操作: dst dst – src – c 目标操作数减去源操作数和当前 C 标志位的值,结果存在目标操作数中。源操作数不受影响。减法 操作是通过将源操作数的补码加到目标操作数来完成的。在多次进行的精确运算中,指令允许低阶 的操作数向高阶的操作数“借位”。 标志位: C: Z: S: V: D: H: 如果借位操作发生(src>dst)则置 1;否则清零 如果结果是“0”则置 1;否则清零 如果结果为负则置 1;否则清零 如果发生溢出,也就是说如果操作数符号相反而差值与源操作数符号相同,则置1;否则清零 总是被置 1 如果从结果低4位的最高位有进位则清零;否则置 1,表示有“借位”发生。 格式: opc opc opc 编程实例: dst | src src dst dst src 字节数 时钟周期 指令代码 (Hex) 2 4 32 r r 6 33 r lr 6 34 R R 6 35 R IR 6 36 R IM 3 3 寻址模式 dst src 假如: R1 = 10H, R2 = 03H, C =“1”, 寄存器 01H = 20H, 寄存器 02H = 03H, 寄存器 03H = 0AH: SBC R1,R2 R1 = 0CH, R2 = 03H SBC R1,@R2 R1 = 05H, R2 = 03H, 寄存器 03H = 0AH SBC 01H,02H 寄存器 01H = 1CH, 寄存器 02H = 03H SBC 01H,@02H 寄存器 01H = 15H, 寄存器 02H = 03H, 寄存器 03H = 0AH SBC 01H,#8AH 寄存器 01H = 95H; C, S, V =“1” 第一个例子中,如果工作寄存器 R1 的值为 10H,R2 的值为 03H,语句“SBC R1,R2”从目标操 作数(10H)中减去源操作数(03H)和 C 标志的值(“1”),然后将结果(0CH)存放在寄存 器 R1 中。 6-77 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X SCF — C置1 (Set Carry Flag) SCF 操作: C 1 将进位标志位(C)无条件置 1。 标志位: C: 置为“1” 其它标志位都不受影响 格式: opc 编程实例: 6-78 语句 SCF 将进位标志置 1。 字节数 时钟周期 指令代码 (Hex) 1 4 DF 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X SRA — 算术右移 (Shift Right Arithmetic) SRA dst 操作: dst (7) dst (7) C dst (0) dst (n) dst (n + 1), n = 0–6 将目标操作数算数右移一位,第 0 位(LSB)移至 C 标志,第 7 位(bit 7,符号位)不改变并且移 到第 6 位。 7 6 0 C 标志位: C: Z: S: V: D: H: 如果从第 0 位(LSB)移出的是“1”则置 1;否则清零 如果结果是“0”则置 1;否则清零 如果结果是负数则置 1;否则清零 总是清零 不受影响 不受影响 格式: opc 编程实例: dst 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 4 D0 R 4 D1 IR 假如: 寄存器 00H = 9AH, 寄存器 02H = 03H, 寄存器 03H = 0BCH, C =“1”: SRA 00H 寄存器 00H = 0CD, C =“0” SRA @02H 寄存器 02H = 03H, 寄存器 03H = 0DEH, C =“0” 第一个例子中,如果通用寄存器 00H 的值为 9AH(10011010B),语句“SRA 00H”将寄存器 00H 右移一位,第 0 位(“0”)清除 C 标志,第7位(“1”)移至第 6 位(第 7 位保持不变), 目标寄存器 00H 的值变为 0CDH(11001101B)。 6-79 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X SRP/SRP0/SRP1 — 设置寄存器指针 (Set Register Pointer) SRP src SRP0 src SRP1 src 操作: 如果 src (1) = 1 且 src (0) = 0 那么: RP0 (3–7) src (3–7) 如果 src (1) = 0 且 src (0) = 1 那么: RP1 (3–7) src (3–7) 如果 src (1) = 0 且 src (0) = 0 那么: RP0 (4–7) src (4–7), RP0 (3) 0 RP1 (4–7) src (4–7), RP1 (3) 1 源操作数的第 1 位和第 0 位(LSB)决定写入 2 个寄存器指针中的 1 个还是 2 个一起写入。如果 两个寄存器指针都被选择,那么选择的寄存器指针的 3 到 7 位被写入,然后 RP0.3 清零,RP1.3 置 1。 标志位: 没有标志位受影响 格式: opc 编程实例: src 字节数 时钟周期 指令代码 (Hex) 寻址模式 src 2 4 31 IM 语句 SRP #40H 将地址为 0D6H 的寄存器指针 0(RP0)设定在 40H,地址为 0D7H 的寄存器指针 1(RP1)设定 在 48H。 语句“SRP0 #50H”将 RP0 设为 50H,而语句“SRP1 #68H”将 RP1 设为 68H。 6-80 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X STOP — Stop 操作 (Stop Operation) STOP 操作: STOP 指令同时停止 CPU 时钟和系统时钟,使单片机进入 STOP 模式。在 STOP 模式下,CPU 寄存器、外设寄存器、I/O 口的控制和数据寄存器内容都保持不变。STOP 模式可以被外部的复位 操作或者外部中断唤醒。对于复位操作,RESET 引脚的低电平必须保持足够长的时间,以保证晶 振稳定所需的时间间隔。 在应用程序中,STOP 指令后必须跟有 3 个 NOP 指令,以保证在下条指令执行之前有足够长的时 间间隔来稳定晶振。如果 STOP 后没有使用 3 个或者多个 NOP 指令,内部总线的悬浮状态将会产 生漏电流。 标志位: 没有标志位受影响 格式: opc 编程实例: 时钟周期 指令代码 (Hex) 1 4 7F 寻址模式 dst src – – 语句 STOP NOP NOP NOP 注释: 字节数 ; 停止所有单片机操作 在执行 STOP 指令之前,必须设置 STPCON 寄存器值为“10100101b”,否则 STOP 指令不会执行。 6-81 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X SUB — 减法 (Subtract) SUB dst,src 操作: dst dst – src 目标操作数减去源操作数,结果存放在目标操作数中。源操作数的内容不受影响。减法操作是将源 操作数的补码加到目标操作数来完成的。 标志位: C: Z: S: V: D: H: 如果“借位”发生则置 1;否则清零 如果结果是“0”则置 1;否则清零 如果结果是负数则置 1;否则清零 如果发生溢出,也就是如果操作数符号相反而结果与源操作数的符号相同,则置 1;否则清零 总是被置 1 如果从结果低 4 位的最高位有进位则清零;否则置 1,表示有“借位”发生。 格式: opc opc opc 编程实例: dst | src src dst dst src 字节数 时钟周期 指令代码 (Hex) 2 4 22 r r 6 23 r lr 6 24 R R 6 25 R IR 6 26 R IM 3 3 寻址模式 dst src 假如: R1 = 12H, R2 = 03H, 寄存器 01H = 21H, 寄存器 02H = 03H, 寄存器 03H = 0AH: SUB R1,R2 R1 = 0FH, R2 = 03H SUB R1,@R2 R1 = 08H, R2 = 03H SUB 01H,02H 寄存器 01H = 1EH, 寄存器 02H = 03H SUB 01H,@02H 寄存器 01H = 17H, 寄存器 02H = 03H SUB 01H,#90H 寄存器 01H = 91H; C, S, V =“1” SUB 01H,#65H 寄存器 01H = 0BCH; C 和 S = “1”, V =“0” 在第一个例子中,如果工作寄存器 R1 的值为12H,R2 为 03H,语句“SUB R1,R2”将源操作数 (03H)从目标操作数(12H)中减去,并将结果(0FH)存在目标寄存器 R1 中。 6-82 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X SWAP — 交换 (Swap Nibbles) SWAP dst 操作: dst (0 – 3) dst (4 – 7) 目标操作数的低四位和高四位互相交换。 7 标志位: C: Z: S: V: D: H: 4 3 0 没有定义 如果结果是“0”则置 1;否则清零 如果结果的第 7 位(bit 7)为“1”则置 1;否则清零 没有定义 不受影响 不受影响 格式: opc 编程实例: dst 字节数 时钟周期 指令代码 (Hex) 寻址模式 dst 2 4 F0 R 4 F1 IR 假如: 寄存器 00H = 3EH, 寄存器 02H = 03H, 寄存器 03H = 0A4H: SWAP 00H 寄存器 00H = 0E3H SWAP @02H 寄存器 02H = 03H, 寄存器 03H = 4AH 第一个例子中,如果通用寄存器 00H 的值为 3EH(00111110B),语句“SWAP 00H”将其高四 位和低四位交换,使寄存器 00H 的值变为 0E3H(11100011B)。 6-83 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X TCM — 取反后位测试(Test Complement Under Mask) TCM dst,src 操作: (NOT dst) AND src 该指令用于测试目标操作数中特定位是否为逻辑1。被测试的位通过将源操作数中相应位设为“1” (屏蔽)来指定。TCM 语句将目标操作数取反,然后与源操作数进行与操作。通过检查零标志位 (Z)来确定结果。目标操作数和源操作数不受影响。 标志位: C: Z: S: V: D: H: 不受影响 如果结果是“0”则置 1;否则清零 如果结果的第 7 位(bit 7)为“1”则置 1;否则清零 总是清零 不受影响 不受影响 格式: opc opc opc 编程实例: dst | src src dst dst src 字节数 时钟周期 指令代码 (Hex) 2 4 62 r r 6 63 r lr 6 64 R R 6 65 R IR 6 66 R IM 3 3 寻址模式 dst src 假如: R0 = 0C7H, R1 = 02H, R2 = 12H, 寄存器 00H = 2BH, 寄存器 01H = 02H, 寄存器 02H = 23H: TCM R0,R1 R0 = 0C7H, R1 = 02H, Z =“1” TCM R0,@R1 R0 = 0C7H, R1 = 02H, 寄存器 02H = 23H, Z =“0” TCM 00H,01H 寄存器 00H = 2BH, 寄存器 01H = 02H, Z =“1” TCM 00H,@01H 寄存器 00H = 2BH, 寄存器 01H = 02H, 寄存器 02H = 23H, Z =“1” TCM 00H,#34 寄存器 00H = 2BH, Z =“0” 第一个例子中,如果工作寄存器 R0 的值为 0C7H(11000111B),寄存器 R1 为 02H (00000010B),语句“TCM R0,R1”测试目标寄存器的第 1 位(bit 1)是否为“1”。由于屏蔽 值与对应的测试位一致,Z 标志被置 1,可用来确定 TCM 操作的结果。 6-84 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X TM — 位测试(Test Under Mask) TM dst,src 操作: dst AND src 该指令用于测试目标操作数中特定位是否为逻辑 0。被测试的位通过将源操作数中相应位设为 “1”(屏蔽)来指定,然后目标操作数与源操作数进行与操作。通过检查零标志位(Z)来确定结 果。目标操作数和源操作数不受影响。 标志位: C: Z: S: V: D: H: 不受影响 如果结果是“0”则置 1;否则清零 如果结果的第 7 位为“1”则置 1;否则清零 总是清零 不受影响 不受影响 格式: opc opc opc 编程实例: dst | src src dst dst src 字节数 时钟周期 指令代码 (Hex) 2 4 72 r r 6 73 r lr 6 74 R R 6 75 R IR 6 76 R IM 3 3 寻址模式 dst src 假如: R0 = 0C7H, R1 = 02H, R2 = 18H, 寄存器 00H = 2BH, 寄存器 01H = 02H, 寄存器 02H = 23H: TM R0,R1 R0 = 0C7H, R1 = 02H, Z =“0” TM R0,@R1 R0 = 0C7H, R1 = 02H, 寄存器 02H = 23H, Z =“0” TM 00H,01H 寄存器 00H = 2BH, 寄存器 01H = 02H, Z =“0” TM 00H,@01H 寄存器 00H = 2BH, 寄存器 01H = 02H, 寄存器 02H = 23H, Z =“0” TM 00H,#54H 寄存器 00H = 2BH, Z =“1” 第一个例子中,如果工作寄存器 R0 的值为 0C7H(11000111B),寄存器 R1 的值为 02H (00000010B),语句“TM R0,R1” 测试目标寄存器的第1位是否为“0”。由于屏蔽值与对应的 的测试位不匹配,Z 标志被清零,可以用来确定 TM 操作的结果。 6-85 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X WFI — 等待中断 (Wait for Interrupt) WFI 操作: 在等待状态时,CPU 被暂停直到中断发生,只有 DMA 传送仍然可以工作。WFI 状态可以由内部中 断,包括快速中断唤醒。 标志位: 没有标志位受影响 格式: 字节数 opc 编程实例: 1 时钟周期 指令代码 (Hex) 4n 3F ( n = 1, 2, 3, … ) 以下实例程序的结构表示了“WFI”指令执行后的一系列操作: Main program . . . EI WFI (Next instruction) (Enable global interrupt) (Wait for interrupt) . . . Interrupt occurs Interrupt service routine . . . Clear interrupt flag IRET Service routine completed 6-86 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X XOR — 逻辑异或(Logical Exclusive OR) XOR dst,src 操作: dst dst XOR src 源操作数与目标操作数进行逻辑异或,结果存在目标操作数中。如果两个操作数中对应的位不相 同,那么异或的结果为“1”;否则为“0”。 标志位: C: Z: S: V: D: H: 不受影响 如果结果是“0”则置 1;否则清零 如果结果的第 7 位(bit 7)为“1”则置 1;否则清零 总是清零 不受影响 不受影响 格式: opc opc opc 编程实例: dst | src src dst dst src 字节数 时钟周期 指令代码 (Hex) 2 4 B2 r r 6 B3 r lr 6 B4 R R 6 B5 R IR 6 B6 R IM 3 3 寻址模式 dst src 假如: R0 = 0C7H, R1 = 02H, R2 = 18H, 寄存器 00H = 2BH, 寄存器 01H = 02H, 寄存器 02H = 23H: XOR R0,R1 R0 = 0C5H, R1 = 02H XOR R0,@R1 R0 = 0E4H, R1 = 02H, 寄存器 02H = 23H XOR 00H,01H 寄存器 00H = 29H, 寄存器 01H = 02H XOR 00H,@01H 寄存器 00H = 08H, 寄存器 01H = 02H, 寄存器 02H = 23H XOR 00H,#54H 寄存器 00H = 7FH 第一个例子中,如果工作寄存器 R0 的值为 0C7H,R1 的值为 02H,语句“XOR R0,R2”将R1和 R0 的值进行逻辑异或,并将结果(0C5H)存在目标寄存器 R0 中。 6-87 指令集 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 注释 6-88 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 7 时钟电路 时钟电路 概述 S3C8275X/C8278X/C8274X有2个振荡器电路:主时钟电路和副时钟电路。CPU、外设等硬件在此电路提供的系 统时钟频率下工作。S3C8275X/C8278X/C8274X的最大CPU 时钟频率由CLKCON 寄存器的设置决定。 系统时钟电路 系统时钟电路由下列部分组成: 外部晶振,陶瓷谐振器,RC 振荡源或外部时钟源 振荡器停止和唤醒功能 CPU 时钟可通过编程进行分频 (fxx 1, 2, 8, 16分频) 系统时钟控制寄存器 CLKCON 时钟控制寄存器 OSCCON 和 STOP 控制寄存器 STPCON 时钟输出控制寄存器 CLOCON CPU 时钟助记符 本文档中,下列助记符用来描述 CPU 时钟: fx: 主时钟 fxt: 副时钟 fxx: 选定的系统时钟 7-1 时钟电路 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 主振荡器电路 副振荡器电路 32.768 kHz XTIN XIN XTOUT XOUT 104 图 7-1. 石英晶体/陶瓷振荡器 (fx) VREG 图 7-4. 石英晶体振荡器 (fxt) XTIN XIN XOUT XTOUT 图 7-5. 外部振荡器 (fxt) 图 7-2. 外部振荡器 (fx) XIN R XOUT 图 7-3. RC 振荡器 (fx) 7-2 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X CLOCK CIRCUIT 省电模式下时钟状态 两种省电模式,STOP 模式和 IDLE 模式,分别对时钟振荡产生如下影响: 在STOP模式下,主振荡器停止工作。在复位操作或具有RC延时噪声滤波器的外部中断被触发下,CPU会退出 STOP模式,振荡器重新起振。副振荡器工作且watch timer的时钟源是副时钟时,CPU也能退出STOP模式。 在IDLE模式下,内部时钟信号进入CPU的通路被切断,但中断及Timer仍然工作。复位或中断 (外部中断或内 部中断) 都可以使CPU退出IDLE模式。 Stop Release INT Main-System Oscillator Circuit fx fxt Sub-system Oscillator Circuit Watch Timer LCD Controller Selector 1 fXX Stop OSCCON.3 Stop OSCCON.0 OSCCON.2 1/1-1/4096 STOP OSC inst. Basic Timer Timer/Counters STPCON Watch Timer Frequency Dividing Circuit LCD Controller SIO BLD 1/1 1/2 1/8 1/16 System Clock CLKCON.4-.3 Selector 2 CPU Clock IDLE Instruction 图 7-6. 系统时钟电路框图 7-3 CLOCK CIRCUIT S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 系统时钟控制寄存器 (CLKCON) 系统时钟控制寄存器CLKCON的地址是set 1的D4H,可读/写,有如下功能: — 禁止/使能IRQ唤醒系统时钟功能 — 系统时钟分频系数选择 CLKCON 寄存器控制外部中断能否用来唤醒stop (IRQ唤醒功能), IRQ唤醒功能的使能位是CLKCON.7。 主振荡器建立以后,fOSC /16(最慢时钟速度)被选择为CPU时钟。如有需要,也可提高CPU时钟速度至fOSC, fOSC/2 或 fOSC /8。 System Clock Control Register (CLKCON) D4H, Set 1, R/W MSB .7 .6 .5 .4 Oscillator IRQ wake-up function bit: 0 = Enable IRQ for main wake up in power down mode 1 = Disable IRQ for main wake up in power down mode Not used for S3C8275X/C8278X/C8274X (must keep always 0) .3 .2 .1 LSB Not used for S3C8275X/C8278X/C8274X (must keep always 0) Divide-by selection bits for CPU clock frequency: 00 = fxx/16 01 = fxx/8 10 = fxx/2 11 = fxx/1 (non-divided) 图 7-7. 系统时钟控制寄存器 (CLKCON) 7-4 .0 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X CLOCK CIRCUIT 时钟输出控制寄存器(CLOCON) 时钟输出控制寄存器,CLOCON的地址是 E8H, Set 1, Bank 1,可读写,有如下功能: 时钟输出频率选择 复位后,CLOCON.1.0的值为"00b",选择fxx/64作为时钟输出的频率, Clock Output Control Register (CLOCON) E8H, Set 1, Bank 1, R/W MSB .7 .6 .5 .4 .3 Not used for S3C8275X/C8278X/C8274X (must keep always "0") .2 .1 .0 LSB Clock output frequency selection bits: 00 = Select fxx/64 01 = Select fxx/16 10 = Select fxx/8 11 = Select fxx/4 图 7-8. 时钟输出控制寄存器 (CLOCON) CLOCON.1-.0 P0CONH.5-.4 fxx/64 fxx/16 fxx/8 CLKOUT/P0.6 MUX fxx/4 图 7-9. 时钟输出模块框图 7-5 CLOCK CIRCUIT S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 时钟控制寄存器 (OSCCON) 时钟控制寄存器 OSCCON的地址是 E0H, set 1, bank 0,可读写,有如下功能: System clock selection系统时钟选择 Main oscillator control 主振荡器控制 Sub oscillator control 副振荡器控制 Sub oscillator circuit selection 副振荡器电路选择 OSCCON.0控制位选择系统时钟为主振荡器或副振荡器。复位后,OSCCON.0 的值为 "0",因此选择主振荡器为 系统时钟。 设置OSCCON.3可以使主振荡器停止或起振。 设置OSCCON.2可以使副振荡器停止或起振。 Oscillator Control Register (OSCCON) E0H, Set 1, Bank 0, R/W MS B .7 .6 .5 .4 .3 .2 .1 注释: Not used for S3C8275X/C8278X/C8274X Sub oscillator control bit: 0 = Sub oscillator RUN 1 = Sub oscillator STOP 1. 副振荡器工作时,必须保持 OSCCON.7 为 "1"。 2. VREG 和 GNDA 之间需加一个 0.1uF 电容。. Main oscillator control bit: 0 = Main oscillator RUN 1 = Main oscillator STOP 图 7-10. 时钟控制寄存器 (OSCCON) 7-6 LSB System clock selection bit: 0 = Main oscillator select 1 = Sub oscillator select Not used for S3C8275X/ C8278X/C8274X Sub oscillator circuit selection bit: 0 = Initial state 1 = Power saving circuit for sub oscillator (Automatically cleared to "0" when the sub oscillator is stopped by OSCCON.2) .0 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X CLOCK CIRCUIT CPU时钟切换 载入振荡器控制寄存器OSCCON 的值,决定了CPU时钟选择主时钟或副时钟;设置CLKCON寄存器,决定时钟 分频。这就实现了在主副时钟之间动态切换以及工作频率的改变。 OSCCON.0 为CPU时钟选择主时钟(fx) 或副时钟(fxt)。OSCCON .3启动或停止主时钟振荡,OSCCON.2启动或 停止副时钟振荡。CLKCON.4–.3控制分频电路,将选定的fxx时钟1, 2, 8, 16分频。 例如,需要将CPU时钟从默认值fx (普通工作模式,主时钟为fx/16),切换到副时钟并停止主时钟。为此,可将 CLKCON.4-.3设置为"11",将OSCCON.0 设置为―1‖,同时将OSCCON.3 设置为―1‖。这就把时钟从fx切换到fxt, 并停止了主时钟振荡。 从副时钟切换到主时钟时,必须遵循以下步骤:首先,将OSCCON.3 设为―0‖以使能主时钟振荡。然后,在特定的 机器周期之后,将OSCCON.0 设置为―0‖来选择主时钟。 编程指南 — CPU时钟切换 1. 本例为如何从主时钟切换到副时钟: MA2SUB LD OSCCON,#01H ; 切换到副时钟 ; 停止主时钟振荡 RET 2. 本例为如何从副时钟切换到主时钟: SUB2MA DLY16 DEL AND CALL AND RET SRP LD NOP DJNZ RET OSCCON,#07H DLY16 OSCCON,#06H ; 启动主时钟振荡 ; 延时 16 ms ; 切换到主时钟 #0C0H R0,#20H R0,DEL 7-7 CLOCK CIRCUIT S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X STOP Control Register (STPCON) FBH, Set 1, Bank 0, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 LSB STOP control bits: Other values = Disable STOP instruction 10100101 = Enable STOP instruction 注释: 执行 STOP 指令前,必须将 STPCON 寄存器设为 "10100101b"。否则将不执行 STOP 指令,而且系统会 发生复位。 图 7-11. STOP 控制寄存器 (STPCON) 7-8 复位和省电模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 8 复位和省电模式 系统复位 概述 上电复位时,VDD电压上升到高电平而RESET管脚被强制拉到低电平。RESET信号通过一个施密特触发器电路输 入,并与CPU时钟同步。这个过程将S3C8275X/C8278X/C8274X带入既定的工作状态。 接电源后,复位管脚必须维持低电平一段时间,以允许内部 CPU 时钟振荡达到稳定。复位操作的最小振荡稳定 时间为 1ms。 正常工作模式下,VDD 和 nRESET 均为高电平。当 nRESET 管脚变为低电平时,将会导致系统复位。复位后, 系统和外围控制寄存器均恢复为默认值。 总的来说,复位后,各事件会按如下顺序依次发生: — 禁止所有中断。 — 看门狗功能启动 (basic timer)。 — P0-6 设为输入模式,所有I/O口的上拉电阻禁止。 — 外设控制和数据寄存器设置被禁止,并复位成默认值。 — 程序计数器 (PC) 被置为ROM中的程序复位地址 0100H。 — 当设定的振荡稳定时间结束以后,正常模式下ROM地址0100H (以及 0101H)中的指令被取值和执行。 — 在S3F8275X(Full-Flash产品)中, ROM中的复位地址可在Smart Option中改变。详情请参考第16章 嵌入式闪 存接口。 正常模式复位操作 正常模式下,Test管脚接到VSS。复位后,16/8/4K字节片上ROM访问被使能(外部接口非自动配置)。 注释 为改变振荡稳定时间,可在进入STOP模式前,将合适的配置写入basic timer 控制寄存器BTCON中。同 样,若不使用basic timer 的看门狗功能 (当basic timer计数器溢出时,系统复位),可在BTCON的高位写 入"1010B"来禁止该功能。 8-1 复位和省电模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 硬件复位值 表8-1,8-2,8-3列出了复位操作后CPU和系统寄存器,外设控制寄存器,以及外设数据寄存器的复位值。 用以下 的助记符来代表复位值: — "1" 或 "0" 代表复位后该位的值相应的为逻辑1或逻辑0。 — "x" 代表复位后该位的值不确定。 — 横线 ("–") 代表该位未使用或者未映射,但读取的值为0。 表 8-1. S3C8275X/C8278X/C8274X Set 1 寄存器及其复位后初始值 寄存器名 助记标号 地址 Dec Hex 复位后各位的值 7 6 5 4 3 2 1 0 D0H–D2H 地址空间未映射 Basic Timer 控制寄存器 BTCON 211 D3H 0 0 0 0 0 0 0 0 CLKCON 212 D4H 0 0 0 FLAGS 213 D5H x x x x x x 0 0 寄存器指针 0 RP0 214 D6H 1 1 0 0 0 寄存器指针 1 RP1 215 D7H 1 1 0 0 1 堆栈指针(高字节) SPH 216 D8H x x x x x x x x 堆栈指针(低字节) SPL 217 D9H x x x x x x x x 指令指针(高字节) IPH 218 DAH x x x x x x x x 指令指针(低字节) IPL 219 DBH x x x x x x x x 中断请求寄存器 IRQ 220 DCH 0 0 0 0 0 0 0 0 中断屏蔽寄存器 IMR 221 DDH x x x x x x x x 系统模式寄存器 SYM 222 DEH 0 x x x 0 0 PP 223 DFH 0 0 0 0 0 0 0 0 系统时钟控制寄存器 系统标志寄存器 寄存器页指针 8-2 复位和省电模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 8-2. S3C8275X/C8278X/C8274X Set 1, Bank 0寄存器及其复位后初始值 寄存器名 助记标记 地址 复位后各位的值 Dec Hex 7 6 5 4 3 2 1 0 时钟控制寄存器 OSCCON 224 E0H 0 0 0 0 SIO 控制寄存器 SIOCON 225 E1H 0 0 0 0 0 0 0 0 SIO 数据寄存器 SIODATA 226 E2H 0 0 0 0 0 0 0 0 SIOPS 227 E3H 0 0 0 0 0 0 0 0 P0 口控制寄存器(高字节) P0CONH 228 E4H 0 0 0 0 0 0 0 0 P0 口控制寄存器(低字节) P0CONL 229 E5H 0 0 0 0 0 0 0 0 P0PUR 230 E6H 0 0 0 0 0 0 0 0 P1 口控制寄存器(高字节) P1CONH 231 E7H 0 0 0 0 0 0 0 0 P1 口控制寄存器(低字节) P1CONL 232 E8H 0 0 0 0 0 0 0 0 P1PUR 233 E9H 0 0 0 0 0 0 0 0 P2 口控制寄存器(高字节) P2CONH 234 EAH 0 0 0 0 0 0 0 0 P2 口控制寄存器(低字节) P2CONL 235 EBH 0 0 0 0 0 0 0 0 P2PUR 236 ECH 0 0 0 0 0 0 0 0 P3 口控制寄存器(高字节) P3CONH 237 EDH 0 0 0 0 0 0 0 0 P3 口控制寄存器(低字节) P3CONL 238 EEH 0 0 0 0 0 0 0 0 P3PUR 239 EFH 0 0 0 0 0 0 0 0 P0 口数据寄存器 P0 240 F0H 0 0 0 0 0 0 0 0 P1 口数据寄存器 P1 241 F1H 0 0 0 0 0 0 0 0 P2 口数据寄存器 P2 242 F2H 0 0 0 0 0 0 0 0 P3 口数据寄存器 P3 243 F3H 0 0 0 0 0 0 0 0 P4 口数据寄存器 P4 244 F4H 0 0 0 0 0 0 0 0 P5 口数据寄存器 P5 245 F5H 0 0 0 0 0 0 0 0 P6 口数据寄存器 P6 246 F6H 0 0 0 0 EXTIPND 247 F7H 0 0 0 0 0 0 0 0 外部中断控制寄存器(高字节) EXTICONH 248 F8H 0 0 0 0 0 0 0 0 外部中断控制寄存器(低字节) EXTICONL 249 F9H 0 0 0 0 0 0 0 0 FBH 0 0 0 0 0 0 0 0 FDH 0 0 0 0 0 0 0 0 FFH x x x x x x x x SIO 预处理寄存器 P0 口上拉电阻使能控制寄存器 P1 口上拉电阻使能控制寄存器 P2 口上拉电阻使能控制寄存器 P3 口上拉电阻使能控制寄存器 外部中断标志寄存器 FAH 地址空间未映射. STOP 控制寄存器 STPCON 251 FCH 地址空间未映射 Basic timer 计数器 BTCNT 253 FEH 地址空间未映射 中断优先级寄存器 IPR 255 8-3 复位和省电模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Table 8-3. S3C8275X/C8278X/C8274X Set 1, Bank 1寄存器及其复位后初始值 寄存器名 助记标记 地址 复位后各位的值 Dec Hex 7 6 5 4 3 2 1 0 LCON 224 E0H 0 0 0 0 0 0 0 钟表定时器控制寄存器 WTCON 225 E1H 0 0 0 0 0 0 0 0 Timer A 计数器 TACNT 226 E2H 0 0 0 0 0 0 0 0 Timer B 计数器 TBCNT 227 E3H 0 0 0 0 0 0 0 0 Timer A 数据寄存器 TADATA 228 E4H 1 1 1 1 1 1 1 1 Timer B 数据寄存器 TBDATA 229 E5H 1 1 1 1 1 1 1 1 Timer 1/A 控制寄存器 TACON 230 E6H 0 0 0 0 0 0 0 0 Timer B 控制寄存器 TBCON 231 E7H 0 0 0 0 0 0 0 时钟输出控制寄存器 CLOCON 232 E8H 0 0 P4 口控制寄存器(高字节) P4CONH 233 E9H 0 0 0 0 0 0 0 0 P4 口控制寄存器(低字节) P4CONL 234 EAH 0 0 0 0 0 0 0 0 P5 口控制寄存器(高字节) P5CONH 235 EBH 0 0 0 0 0 0 0 0 P5 口控制寄存器(低字节) P5CONL 236 ECH 0 0 0 0 0 0 0 0 P6 口控制寄存器 P6CON 237 EDH 0 0 0 0 0 0 0 0 LCD 控制寄存器 EEH – EFH 地址空间未映射 闪存控制寄存器 FMCON 240 F0H 0 0 0 0 0 0 闪存用户可编程使能寄存器 FMUSR 241 F1H 0 0 0 0 0 0 0 0 闪存扇区地址寄存器(高字节) FMSECH 242 F2H 0 0 0 0 0 0 0 0 闪存扇区地址寄存器(低字节) FMSECL 243 F3H 0 0 0 0 0 0 0 0 电池电压检测控制寄存器 BLDCON 244 F4H 0 0 0 0 0 0 F5H – FFH 地址空间未映射 8-4 复位和省电模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 省电模式 STOP 模式 STOP 指令(指令码 7FH)将会使系统进入 STOP 模式。在 STOP 模式下,CPU 和所有外设将停止工作。也 就是说,片上主振荡器会停止,芯片消耗电流将减小到 3A 以下。当时钟冻结时,所有的系统功能停止,但存储 在内部寄存器卷中的数据仍然保留。可以通过 2 种方式退出 STOP 模式:复位或中断(详见图7-6)。 注释 使用外部时钟源时,不能使用STOP模式。因为 XIN 或 XTIN 管脚必须内部连接到 VSS 以减小漏电流。 使用 nRESET 退出 STOP 模式 nRESET 信号被释放并恢复高电平时,退出STOP模式:所有系统和外设控制寄存器恢复为默认值,数据寄存器 仍被保持。因为 CLKCON.3 和 CLKCON.4 被清除为―00B‖,CPU 时钟选择最慢频率(fxx/16)。振荡稳定时间 间隔之后,CPU调入ROM地址 0100H (以及0101H)的指令开始系统初始化。 使用外部中断退出 STOP 模式 具有 RC 延迟噪声滤波电路的外部中断可以让系统退出 STOP 模式。CPU当前的内部工作模式决定了退出STOP 可用的中断类型。S3C8275X/C8278X/C8274X中断结构中可用作的退出 STOP 模式的外部中断为: — 外部中断 P0.0–P0.2 (INT0INT2) 和 P1.3P1.7 (INT3INT7) 关于STOP 模式的退出请注意以下条件: — 若使用外部中断退出STOP 模式,除了STPCON 寄存器之外的所有系统和外设控制寄存器都不发生改变。 — 若使用内部或外部中断退出STOP 模式,也可对振荡稳定时间进行编程。但必须在进入STOP模式之前将控制 和时钟设置成合适的值。 — 当使用外部中断退出STOP 模式时,CLKCON.4 和 CLKCON.3 的设置不发生改变,当前选择的时钟值也将 保留。 — 在退出 STOP 模式时,系统处理外部中断服务程序。中断返回后,执行紧接着 STOP 令的下一条指令。 如何进入STOP 模式 先写STPCON 寄存器然后写 STOP 指令(保持这个顺序) 。 LD STPCON,#10100101B STOP NOP NOP NOP 8-5 复位和省电模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X IDLE 模式 IDLE 指令(指令码 6FH)将会使系统进入 IDLE 模式。在 IDLE 模式下,CPU 停止但某些外设仍然工作。 IDLE 模式下,内部时钟信号无法进入CPU,但所有外设的时钟仍然有效。I/O 口仍然保持进入IDLE模式以前的状 态(输入或输出)。 有2种方式可以退出 IDLE 模式: 1. 执行复位操作。所有的系统和外设控制寄存器复位至默认值,但所有数据寄存器的值保持不变。因为 CLKCON.3 和 CLKCON.4 清除为―00B‖,复位自动选择慢时钟(fxx/16)。如果中断被屏蔽,则复位是退出 IDLE 模式的唯一方法。 2. 激活任意使能的中断,退出 IDLE 模式。当用中断退出 IDLE 模式,CLKCON.3 和 CLKCON.4 寄存器的值 保持不变,当前选择的时钟值也不变。系统会先处理中断服务程序。中断返回后,执行紧接着 IDLE 指令的下 一条指令。 8-6 I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 9 I/O 口 概述 S3C8275X/C8278X/C8274X有7个位可编程的 I/O 口,P0–P6。其中,P1 – P5 口是8位口,P6 口是 4位口。 一共有52个I/O管脚。每个口都可以灵活配置以满足应用的需要。 CPU通过直接读写口寄存器访问 I/O口。不需要特别的I/O口指令。S3C8275X/C8278X/C8274X 的所有 I/O口都可 以设为输入或输出模式。P2P6口和 LCD 信号复用 表9-1 给出了S3C8275X/C8278X/C8274X I/O 口的功能概述。 表 9-1. S3C8275X/C8278X/C8274X 口配置描述 I/O 口 设置选项 0 可对该口的每一位进行功能设定,可以设定为施密特触发器输入、推挽式输出或开漏输出。通过 软件设定上拉电阻。 P0.0 - P0.2 也可用作外部中断输入,P0.3-P0.7可以用作T1CLK, TAOUT, TBOUT, CLKOUT, 和BUZ。 1 可对该口的每一位进行功能设定,可以设定为施密特触发器输入、推挽式输出或开漏输出。通过 软件设定上拉电阻。 P1.3 – P1.7 也可用作外部中断输入,P1.0-P1.2可以用作SCK, SO, 和SI。 2 可对该口的每一位进行功能设定,可以设定为输入、推挽式输出或开漏输出。通过软件设定上拉 电阻。 P2 也可用作LCD SEG信号 3 可对该口的每一位进行功能设定,可以设定为输入、推挽式输出或开漏输出。通过软件设定上拉 电阻。 P3 也可用作LCD SEG信号 4 可对该口的每一位进行功能设定,可以设定为输入或推挽式输出。通过软件设定上拉电阻。 P4 也可用作LCD SEG信号 5 可对该口的每一位进行功能设定,可以设定为输入或推挽式输出。通过软件设定上拉电阻。 P5 也可用作LCD SEG信号 6 可对该口的每一位进行功能设定,可以设定为输入或输出。通过软件设定上拉电阻。 P6.0P6.3 也可用作LCD COM信号 9-1 I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 口控制寄存器 表 9-2 总结了S3C8275X/C8278X/C8274X所有I/O 口数据寄存器的位置。P0, 1, 2, 3, 4, 5, 6口的数据寄存器大致 格式如图 9-1所示。 表 9-2. 端口数据寄存器 寄存器名称 助记标号 十进制 十六进制 位置 R/W P0 口数据寄存器 P0 240 F0H Set 1, Bank 0 R/W P1 口数据寄存器 P1 241 F1H Set 1, Bank 0 R/W P2 口数据寄存器 P2 242 F2H Set 1, Bank 0 R/W P3 口数据寄存器 P3 243 F3H Set 1, Bank 0 R/W P4 口数据寄存器 P4 244 F4H Set 1, Bank 0 R/W P5 口数据寄存器 P5 245 F5H Set 1, Bank 0 R/W P6 口数据寄存器 P6 246 F6H Set 1, Bank 0 R/W S3C8275X/C8278X/C8274X I/O Port Data Register Format (n = 0-6) MSB .7 .6 .5 .4 .3 .2 .1 .0 Pn.7 Pn.6 Pn.5 Pn.4 Pn.3 Pn.2 Pn.1 Pn.0 LSB 图 9-1. S3C8275X/C8278X/C8274X I/O口数据寄存器格式 9-2 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X I/O 口 P0 口 P0 口是一个8位都可单独配置的I/O口。可通过直接读写P0口数据寄存器P0 (地址:F0H, set 1, bank 0) 来访问P0 口。P0.0–P0.7 可用作输入,输出(推挽或开漏)或设置成如下的复用功能: — 低字节(P0.0–P0.3): INT0–INT2, T1CLK — 高字节(P0.4–P0.7): TAOUT, TBOUT, CLKOUT, BUZ P0 口控制寄存器 (P0CONH, P0CONL) P0 有2个8位控制寄存器:控制P0.4-P0.7的P0CONH寄存器和控制P0.0-P0.3的P0CONL寄存器。复位后, P0CONH 和 P0CONL 寄存器被清除为 "00H",设置P0.0P0.2 为带中断的输入模式,P0.3P0.7为输入模式。 可以通过控制寄存器来设置各个管脚为输入或输出(推挽或开漏)或其复用功能: 对该口编程时,请记住在P0口控制寄存器中设置外设I/O 复用功能的同时,必须在相应的外设模块中使能该功能。 P0 口上拉电阻使能控制寄存器 (P0PUR) 使用P0 口上拉电阻使能控制寄存器 P0PUR (E6H, set 1, bank 0)可以设置P0口各位的上拉电阻。 P0 口中断控制寄存器(EXTICONL.5.0, EXTIPND.2.0) 需要将P0 作为外部中断来使用时,需要设置另外两个外部中断控制寄存器:EXTICONL.5.0 (F9H, set 1, bank 0) 和EXTIPND.2.0 (F7H, set 1, bank 0) 外部中断标志寄存器EXTIPND.2.0可以用来在软件中检查中断标志位和清除中断标志。应用程序可以周期性的查 询中断标志位EXTIPND.2.0来检测中断请求。 当使能了P0口的任一个管脚的中断时,则该管脚上的电平的上升沿或下降沿就会产生中断。相应的中断标志位被 置为"1",同时相应的中断级会给CPU发出中断请求。当CPU响应中断请求后,应用程序必须在软件中给相应的中 断标志位EXTIPND位写"0"来清除中断标志。 9-3 I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Port 0 Control Register, High Byte (P0CONH) E4H, Set 1, Bank 0, R/W MSB .7 .6 .5 .4 P0.7/BUZ .3 .2 .1 .0 LSB P0.5/TBOUT P0.6/CLKOUT P0.4/TAOUT P0CONH bit-pair pin configuration settings: 00 Schmitt trigger input mode 01 N-channel open-drain output mode 10 Push-pull output mode 11 Alternative function (BUZ, CLKOUT, TBOUT, TAOUT) 图 9-2. P0 口控制寄存器高字节 (P0CONH) Port 0 Control Register, Low Byte (P0CONL) E5H, Set 1, Bank 0, R/W MSB .7 .6 P0.3/T1CLK .5 .4 P0.2/INT2 .3 .2 P0.1/INT1 .1 .0 P0.0/INT0 P0CONL bit-pair pin configuration settings: 00 Schmitt trigger input mode (T1CLK) 01 N-channel open-drain output mode 10 Push-pull output mode 11 Not available 图 9-3. P0 口控制寄存器低字节 (P0CONL) 9-4 LSB I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Port 0 Pull-up Control Register (P0PUR) E6H, Set 1, Bank 0, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 LSB P0PUR bit configuration settings: 0 Disable pull-up resistor 1 Enable pull-up resistor 注释 : 当相应的管脚被设置为推挽输出或其复用功能时 ,其上拉电阻自动 被禁止 图 9-4. P0 口上拉电阻使能控制寄存器 (P0PUR) External Interrupt Control Register, Low Byte (EXTICONL) E9H, Set 1, Bank 0, R/W MSB .7 .6 P1.3/INT3 .5 .4 P0.2/INT2 .3 .2 P0.1/INT1 .1 .0 LSB P0.0/INT0 EXTICONL bit configuration settings: 00 Disable interrupt 01 10 Enable interrupt by falling edge Enable interrupt by rising edge 11 Enable interrupt by both falling and rising edge 图 9-5. 外部中断控制寄存器,低字节 (EXTICONL) 9-5 I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X External Interrupt Pending Register (EXTIPND) F7H, Set 1, Bank 0, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 LSB P1.7 P1.6 P1.5 P1.4 P1.3 P0.2 P0.1 P0.0 (INT7) (INT6) (INT5) (INT4) (INT3) (INT2) (INT1) (INT0) EXTIPND bit configuration settings: 0 No interrupt pending (when read), clear pending bit (when write) 1 Interrupt is pending (when read) 图 9-6. 外部中断标志寄存器(EXTIPND) 9-6 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X I/O 口 P1 口 P1 口是一个8位都可单独配置的I/O口。可通过直接读写P1口数据寄存器P0 (地址:F1H, set 1, bank 0) 来访问P1 口。P1.0–P1.7 可用作输入(上拉/无上拉),输出(推挽或开漏)或设置成如下的复用功能: — 低字节(P1.0P1.3): SCK, SO, SI, INT3 — 高字节(P1.4P1.7): INT4INT7 P1 口控制寄存器 (P1CONH, P1CONL) P1 有2个8位控制寄存器:控制P1.4P1.7的P1CONH寄存器和控制P1.0P1.3的P1CONL寄存器。复位后, P1CONH和 P1CONL寄存器被清除为 "00H",设置P1.3P1.7 为带中断的输入模式,P1.3P1.7为输入模式。可 以通过控制寄存器来设置各个管脚为输入或输出(推挽输出或开漏输出)或其复用功能: 对该口编程时,请记住在P1口控制寄存器中设置外设I/O 复用功能的同时,必须在相应的外设模块中使能该功能。 P1 口上拉电阻使能控制寄存器 (P1PUR) 使用P1 口上拉电阻使能控制寄存器 P1PUR (E9H, set 1, bank 0)可以设置P1口各管脚的上拉电阻。 P1 口中断控制寄存器(EXTICONH, EXTICONL.7.6, EXTIPND.7.3) 需要将P1 作为外部中断来使用时,需要设置另外三个外部中断控制寄存器:EXTICONH/EXTICONL.5.0 (F8H/F9H, set 1, bank 0) 和EXTIPND.7.3 (F7H, set 1, bank 0) 外部中断标志寄存器EXTIPND.7.3可以用来在软件中检查中断标志位和清除中断标志。应用程序可以周期性的查 询中断标志位EXTIPND.7.3来检测中断请求。 当使能了P1口的任一个管脚的中断时,则该管脚上的电平的上升沿或下降沿就会产生中断。相应的中断标志位被 置为"1",同时相应的中断级会给CPU发出中断请求。当CPU响应中断请求后,应用程序必须在软件中给相应的中 断标志位EXTIPND位写"0"来清除中断标志。 9-7 I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Port 1 Control Register, High Byte (P1CONH) E7H, Set 1, Bank 0, R/W MSB .7 .6 P1.7/INT7 .5 .4 P1.6/INT6 .3 .2 P1.5/INT5 .1 .0 LSB P1.4/INT4 P1CONH bit-pair pin configuration settings: 00 Schmitt trigger input mode 01 N-channel open-drain output mode 10 Push-pull output mode 11 Not available 图 9-7. P1 口控制寄存器高字节 (P1CONH) Port 1 Control Register, Low Byte (P1CONL) E8H, Set 1, Bank 0, R/W MSB .7 .6 P1.3/INT3 .5 .4 P1.2/SI .3 .2 P1.1/SO .1 .0 P1.0/SCK P1CONL bit-pair pin configuration settings: 00 Schmitt trigger input mode (SI, SCK) 01 N-channel open-drain output mode 10 Push-pull output mode 11 Alternative function (SCK, SO) 图 9-8. P1 口控制寄存器低字节 (P1CONL) 9-8 LSB I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Port 1 Pull-up Control Register (P1PUR) E9H, Set 1, Bank 0, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 LSB P1PUR bit configuration settings: 0 Disable pull-up resistor 1 Enable pull-up resistor 注释 : 当相应的管脚被设置为推挽输出或 其复用功能时 ,其上拉电阻自动 被禁止 图 9-9. P1 上拉电阻使能控制寄存器 (P1PUR) External Interrupt Control Register, High Byte (EXTICONH) F8H, Set 1, Bank 0, R/W MSB .7 .6 P1.7/INT7 .5 .4 P1.6/INT6 .3 .2 P1.5/INT5 .1 .0 LSB P1.4/INT4 EXTICONH bit configuration settings: 00 Disable interrupt 01 10 Enable interrupt by falling edge Enable interrupt by rising edge 11 Enable interrupt by both falling and rising edge 图 9-10. 外部中断控制寄存器, 高字节 (EXTICONH) 9-9 I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X External Interrupt Control Register, Low Byte (EXTICONL) F9H, Set 1, Bank 0, R/W MSB .7 .6 P1.3/INT3 .5 .4 P0.2/INT2 .3 .2 P0.1/INT1 .1 .0 LSB P0.0/INT0 EXTICONL bit configuration settings: 00 Disable interrupt 01 10 Enable interrupt by falling edge Enable interrupt by rising edge 11 Enable interrupt by both falling and rising edge 图 9-11. 外部中断控制寄存器, 低字节 (EXTICONL) External Interrupt Pending Register (EXTIPND) F7H, Set 1, Bank 0, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 LSB P1.7 P1.6 P1.5 P1.4 P1.3 P0.2 P0.1 P0.0 (INT7) (INT6) (INT5) (INT4) (INT3) (INT2) (INT1) (INT0) EXTIPND bit configuration settings: 0 No interrupt pending (when read), clear pending bit (when write) 1 Interrupt is pending (when read) 图 9-12. 外部中断标志寄存器 (EXTIPND) 9-10 I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P2 口 P2 口是一个8位都可单独配置的I/O口。可通过直接读写P2口数据寄存器P2 (地址:F2H, set 1, bank 0) 来访问P2 口。P2.0–P2.7 可用作输入(上拉/无上拉),输出(推挽或开漏)或设置成如下的复用功能: — 低字节(P2.0-P2.3):SEG31SEG28, VBLDREF — 高字节(P2.4-P2.7) :SEG27SEG24 P2 口控制寄存器 (P2CONH, P2CONL) P2 有2个8位控制寄存器:控制P2.4-P2.7的P2CONH寄存器和控制P2.0P2.3的P2CONL寄存器。复位后, P2CONH和 P2CONL寄存器被清除为 "00H",设置所有管脚为输入模式。可以通过控制寄存器来设置各个管脚为 输入或输出(推挽输出或开漏输出)或其复用功能: 对该口编程时,请记住在P2口控制寄存器中设置外设I/O 复用功能的同时,必须在相应的外设模块中使能该功能。 P2 口上拉电阻使能控制寄存器 (P2PUR) 使用P2 口上拉电阻使能控制寄存器 P2PUR (ECH, set 1, bank 0)可以设置P2口各管脚的上拉电阻。 Port 2 Control Register, High Byte (P2CONH) EAH, Set 1, Bank 0, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 LSB P2.7/SEG24 P2.6/SEG25 P2.5/SEG26 P2.4/SEG27 P2CONH bit-pair pin configuration settings: 00 Input mode 01 N-channel open-drain output mode 10 Push-pull output mode 11 Alternative function (SEG24-SEG27) 图 9-13. P2 口控制寄存器高字节 (P2CONH) 9-11 I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Port 2 Control Register, Low Byte (P2CONL) EBH, Set 1, Bank 0, R/W MSB .7 .6 .5 .4 .3 .2 .1 P2.3/SEG28 P2.2/SEG29 P2.1/SEG30 .0 LSB P2.0/SEG31/VBLDREF P2CONL bit-pair pin configuration settings: 00 Input mode 01 N-channel open-drain output mode 10 Push-pull output mode 11 Alternative function (SEG28-SEG31/VBLDREF) 图 9-14. P2 口控制寄存器低字节 (P2CONL) Port 2 Pull-up Control Register (P2PUR) ECH, Set 1, Bank 0, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 LSB P2PUR bit configuration settings: 0 Disable pull-up resistor 1 Enable pull-up resistor 注释 : 当相应的管脚被设置为推挽输出或其复用功能时 ,其上拉电阻自动 被禁止 图 9-15. P2 口上拉电阻使能控制寄存器 (P2PUR) 9-12 I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P3 口 P3 口是一个8位都可单独配置的I/O口。可通过直接读写P3口数据寄存器P3 (地址:F3H, set 1, bank 0) 来访问P3 口。P3.0–P3.7 可用作输入(上拉/无上拉),输出(推挽或开漏)或设置成如下的复用功能: — 低字节(P3.0-P3.3): SEG23-SEG20 — 高字节(P3.4-P3.7): SEG19-SEG16 P3 口控制寄存器 (P3CONH, P3CONL) P3 有2个8位控制寄存器:控制P3.4-P3.7的P3CONH寄存器和控制P3.0P3.3的P3CONL寄存器。复位后, P3CONH和 P3CONL寄存器被清除为 "00H",设置所有管脚为输入模式。可以通过控制寄存器来设置各个管脚为 输入或输出(推挽输出或开漏输出)或其复用功能: 对该口编程时,请记住在P3口控制寄存器中设置外设I/O 复用功能的同时,必须在相应的外设模块中使能该功能。 P3 口上拉电阻使能控制寄存器 (P3PUR) 使用P3 口上拉电阻使能控制寄存器 P3PUR (EFH, set 1, bank 0)可以设置P3口各管脚的上拉电阻。 Port 3 Control Register, High Byte (P3CONH) EDH, Set 1, Bank 0, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 LSB P3.7/SEG16 P3.6/SEG17 P3.5/SEG18 P3.4/SEG19 P3CONH bit-pair pin configuration settings: 00 Input mode 01 N-channel open-drain output mode 10 Push-pull output mode 11 Alternative fumction (SEG16-SEG19) 图 9-16. P3 口控制寄存器高字节 (P3CONH) 9-13 I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Port 3 Control Register, Low Byte (P3CONL) EEH, Set 1, Bank 0, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 LSB P3.3/SEG20 P3.2/SEG21 P3.1/SEG22 P3.0/SEG23 P3CONL bit-pair pin configuration settings: 00 Input mode 01 N-channel open-drain output mode 10 Push-pull output mode 11 Alternative function (SEG20-SEG23) 图 9-17. P3 控制寄存器低字节(P3CONL) Port 3 Pull-up Control Register (P3PUR) EFH, Set 1, Bank 0, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0 LSB P3PUR bit configuration settings: 0 Disable pull-up resistor 1 Enable pull-up resistor 注释 : 当相应的管脚被设置为推挽输出或其复用功能时 ,其上拉电阻自动 被禁止 图 9-18. P3 上拉电阻使能控制寄存器 (P3PUR) 9-14 I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P4 口 P4 口是一个8位都可单独配置的I/O口。可通过直接读写P4口数据寄存器P4 (地址:F4H, set 1, bank 0) 来访问P4 口。P4.0–P4.7 可用作输入(上拉/无上拉),推挽输出或设置成如下的复用功能: — 低字节(P4.0-P4.3): SEG15-SEG12 — 高字节(P4.4-P4.7): SEG11-SEG8 P4 口控制寄存器 (P4CONH, P4CONL) P4有2个8位控制寄存器:控制P4.4-P4.7的P4CONH寄存器和控制P4.0P4.3的P4CONL寄存器。复位后, P4CONH和 P4CONL寄存器被清除为 "00H",设置所有管脚为输入模式。可以通过控制寄存器来设置各个管脚为 输入(上拉/无上拉)或推挽输出或其复用功能: 对该口编程时,请记住在P4口控制寄存器中设置外设I/O 复用功能的同时,必须在相应的外设模块中使能该功能。 Port 4 Control Register, High Byte (P4CONH) E9H, Set 1, Bank 1, R/W MSB .7 .6 P4.7/SEG8 .5 .4 .3 .2 .1 .0 LSB P4.6/SEG9 P4.5/SEG10 P4.4/SEG11 P4CONH bit-pair pin configuration settings: 00 Input mode 01 Input with pull-up resistor 10 Push-pull output mode 11 Alternative function (SEG8-SEG11) 图 9-19. P4 口控制寄存器高字节(P4CONH) 9-15 I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Port 4 Control Register, Low Byte (P4CONL) EAH, Set 1, Bank 1, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 P4.3/SEG12 P4.2/SEG13 P4.1/SEG14 P4.0/SEG15 P4CONH bit-pair pin configuration settings: 00 Input mode 01 Input with pull-up resistor 10 Push-pull output mode 11 Alternative function (SEG12-SEG15) 图 9-20. P4 控制寄存器低字节 (P4CONL) 9-16 LSB I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P5 口 P5 口是一个8位都可单独配置的I/O口。可通过直接读写P5口数据寄存器P5 (地址:F5H, set 1, bank 0) 来访问P5 口。P5.0–P5.7 可用作输入(上拉/无上拉),推挽输出或设置成如下的复用功能: — 低字节(P5.0-P5.3): SEG7SEG4 — 高字节(P5.4-P5.7): SEG3SEG0 P5 口控制寄存器 (P5CONH, P5CONL) P5有2个8位控制寄存器:控制P5.4-P5.7的P5CONH寄存器和控制P50P5.3的P5CONL寄存器。复位后, P5CONH和 P5CONL寄存器被清除为 "00H",设置所有管脚为输入模式。可以通过控制寄存器来设置各个管脚为 输入(上拉/无上拉) 或 推挽输出 或 其复用功能: 对该口编程时,请记住在P5口控制寄存器中设置外设I/O 复用功能的同时,必须在相应的外设模块中使能该功能。 Port 5 Control Register, High Byte (P5CONH) EBH, Set 1, Bank 1, R/W MSB .7 .6 P5.7/SEG0 .5 .4 P5.6/SEG1 .3 .2 P5.5/SEG2 .1 .0 LSB P5.4/SEG3 P5CONH bit-pair pin configuration settings: 00 Input mode 01 Input with pull-up resistor 10 Push-pull output mode 11 Alternative function (SEG0-SEG3) 图 9-21. P5 口控制寄存器高字节 (P5CONH) 9-17 I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Port 5 Control Register, Low Byte (P5CONL) ECH, Set 1, Bank 1, R/W MSB .7 .6 P5.3/SEG4 .5 .4 P5.2/SEG5 .3 .2 P5.1/SEG6 .1 P5.0/SEG7 P5CONL bit-pair pin configuration settings: 00 Input mode 01 Input with pull-up resistor 10 Push-pull output mode 11 Alternative function (SEG4-SEG7) 图 9-22. P5 控制寄存器低字节 (P5CONL) 9-18 .0 LSB I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X P6 口 P6 口是一个4位都可单独配置的I/O口。可通过直接读写P6口数据寄存器P6 (地址:F6H, set 1, bank 0) 来访问P6 口。P6.0–P6.3 可用作输入(上拉/无上拉),推挽输出或设置成如下的复用功能: — 低字节(P6.0-P6.3): COM0COM3 P6 口控制寄存器 (P6CON) P6有1个8位控制寄存器P6CON, 控制P6.0-P6.3。复位后,P6CON寄存器被清除为 "00H",设置所有管脚为输入 模式。可以通过控制寄存器来设置各个管脚为输入(上拉/无上拉) 或 推挽输出 或 其复用功能: 对该口编程时,请记住在P6口控制寄存器中设置外设I/O 复用功能的同时,必须在相应的外设模块中使能该功能。 Port 6 Control Register (P6CON) EDH, Set 1, Bank 1, R/W MSB .7 .6 P6.3/COM3 .5 .4 P6.2/COM2 .3 .2 P6.1/COM1 .1 .0 LSB P6.0/COM0 P6CON bit-pair pin configuration settings: 00 Input mode 01 Input with pull-up resistor 10 Push-pull output mode 11 Alternative function (COM3-COM0) 图 9-23. P6 口控制寄存器 (P6CON) 9-19 I/O 口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 注释 9-20 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 10 BASICT IMER BASIC TIMER 概述 Basic Timer 主要应用在两个方面: — 当系统出现异常时,Basic Timer 作为看门狗定时器,自动复位芯片。 — 在复位或退出 STOP 模式后,用于延时以稳定振荡。 Basic Timer 单元包含以下几个部分: — 时钟分频器(fosc/4096/1024/128/16) — 8 位 Basic Timer 计数器 BTCNT (地址:FDH,Set 1, Bank 0,只读) — Basic Timer 控制寄存器 BTCON (地址:D3H,Set 1,可读/写) 10-1 BASIC TIMER S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BASIC TIMER控制寄存器 (BTCON) Basic Timer 控制寄存器 BTCON,用于选择输入时钟频率、清除 BT 计数器和分频器、禁止或使能看门狗功能。它 的物理地址位于D3H,set 1,可通过寄存器寻址模式进行读/写。 复位后,BTCON 被清零为“00H”,该选项将使能看门狗功能,并选择 BT 的时钟为 fxx/4096。如果想禁用看门狗 功能,必须将 Basic Timer 控制寄存器的高四位 BTCON.7–BTCON.4 设置为“1010B”。 在正常操作情况下,可以写“1”到 BTCON.1 来清零 8 位 Basic Timer 计数器 BTCNT (set 1, bank 0, FDH)。也可 以写“1”到BTCON.0 位,来清除 Basic Timer 输入时钟的分频器。 Basic Timer Control Register (BTCON) D3H, Set 1, R/W MSB .7 .6 .5 .4 .3 Watchdog function enable bits: = Disable watchdog timer 1010B Other values = Enable watchdog timer .2 .1 .0 LSB Divider clear bit for all timers: 0 = No effect 1 = Clear divider Basic timer counter clear bit: 0 = No effect 1 = Clear BTCNT Basic timer input clock selection bits: 00 = fXX/4096 01 = fXX/1024 10 = fXX/128 11 = fXX/16 图 10-1. Basic Timer 控制寄存器 (BTCON) 10-2 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BASICT IMER BASIC TIMER功能描述 看门狗定时器功能 可通过向 BTCON.7–BTCON.4 写入非―1010B‖的任意值(―1010B‖ 将禁用看门狗功能),来对basic timer溢出信号 (BTOVF)进行编程控制,以产生系统复位。复位时 BTCON清零,自动允许看门狗功能。同时选择 Basic Timer 的时 钟信号为 fxx/4096。 无论什么时候 BT 计数器溢出,都将产生复位。正常情况下,应用程序须防止计数器溢出,为此,每隔一段时间要 清除看门狗计数器 (写“1”到 BTCON.1)。 如果由于电路噪声或其它原因造成系统失灵,Basic Timer 的清零操作不会被执行,看门狗将复位芯片。换言之,在 正常运行期间,必须通过 BTCNT 的清零操作来打破 Basic Timer 的溢出循环(8位basic timer计数器BTCNT的第7位 溢出)。如果发生异常,自动产生复位。 振荡稳定功能 还可以用 Basic Timer 对复位或 STOP 模式唤醒时的振荡稳定时间进行定时。 在 STOP 模式下,每当复位或者外部中断发生,振荡电路开始运行。然后 BTCNT 寄存器按照 fxx/4096 的频率(复 位时)或者按照预设时钟 (对外部中断)开始计数。当 BTCNT.4 溢出时,将产生一个信号表明振荡稳定时间到, CPU开始在稳定的时钟下开始工作。 总之,当系统从 STOP 模式退出时,以下的事件会依次发生: 1. 上电复位或外部中断产生,系统从 STOP 模式唤醒,振荡器起振。 2. 如果是复位操作,BTCNT 将以默认的时钟频率 fxx/4096 进行计数。如果是外部中断,BTCNT 寄存器按照预设 时钟频率计数。 3. 振荡稳定间隔计时开始,直到BTCNT第4位溢出为止。 4. 当BTCNT.4 溢出发生时,CPU 开始正常工作。 10-3 BASIC TIMER S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X RESET or STOP Bit 1 Bits 3, 2 Basic Timer Control Register (Write '1010xxxxB' to Disable) Data Bus fXX/4096 Clear fXX/1024 fXX DIV fXX/128 fXX/16 R MUX 8-Bit Up Counter (BTCNT, Read-Only) OVF RESET Start the CPU (NOTE) Bit 0 注释: 上电复位期间,CPU在振荡稳定时间到来之前处于IDLE状态,直到basic timer计数器第4位溢出。 图 10-2. Basic Timer 模块框图 10-4 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 11 TIMER 1 TIMER 1 一个16位TIMER 模式 (TIMER 1) 16位timer 1可以用作1个16位 timer 或者2个8位timers 模式。如果TACON.7 设为"1", timer 1 用作一个16位 timer。如果TACON.7设为"0", timer 1用作 2个8位timers。 1个16位timer模式 (Timer 1) 2个8位timers模式(Timer A and B) 概述 这个16位Timer 是一个16位的通用timer/counter。Timer 1 通过设置T0CON寄存器可以选择任定时工作模式。 Timer 1 有如下的功能模块: — 带多路复用的时钟分频器 (fxx /512,fxx /256,fxx C/64,fxx C/8,fxx /1和外部时钟:T1CLK) — 1个16位计数器 (TACNT, TBCNT),1个16 位比较器以及16位数据寄存器 (TADATA, TBDATA) — 产生Timer 1中断 (IRQ0, 中断向量地址 F0H) — Timer 1 控制寄存器TACON (set 1, bank 1, E6H, 读/写) 功能描述 定时模式 Timer 1可产生一种中断,匹配中断(T1INT)。T0INT中断等级为IRQ0,分配了独立的向量地址F0H。 中断响应以后,T1INT标志位应该软件清零。T1INT标志位必须通过在应用子程序里给TACON.0写"0"来清零。 在定时模式中,当计数器的值与Timer 1参考数据寄存器TADATA, TBDATA的值相等时,生成一个匹配信号。匹配 信号生成一个Timer 1匹配中断 (T1INT,向量地址 F0H) 同时计数器清零。 例如,如果分别写32H和10H 到TADATA, TBDATA,TACON写8EH,计数器计数到3210H,产生T1中断请求,计 数器值复位,开始重新计数。 11-1 TIMER 1 Timer 1 控制寄存器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X TIMER 1 (TACON) Timer 1 控制寄存器TACON可以: — 选择Timer 1工作模式 (定时模式) — 选择Timer 1 输入时钟频率 — 清零Timer 1 计数器 TACNT , TBCNT — 使能Timer 1中断 — 清零Timer 1中断标志位 TACON 位于set 1,Bank 1的地址E6H,可以通过寄存器寻址模式读/写。 复位操作将置TACON为“00H”,这将设置Timer 1 禁止定时模式,选择输入的时钟频率为fxx/512,并禁止所有 Timer 1 中断。可以通过写“1” 到TACON.3随时清l零Timer 1计数器。 要是能Timer 1中断(IRQ 0, 中断向量 F0H),必须写“1”到TACON.7, TACON.2和TACON.1。为了产生精确的定 时,必须写"10B" 到TACON.3 和 TACON.0 ,这将清零计数器和中断标志寄存器。当中断响应后,必须通过软 件对中断标志位TACON.0写“0”来清除中断标志。 Timer 1/A Control Register (TACON) E6H, Set 1, Bank 1, R/W MSB .7 .6 .5 Timer 1 operating mode selection bit: 0 = Two 8-bit timers mode (Timer A/B) 1 = One 16-bit timer mode (Timer 1) Timer 1 clock selection bits: 000 = fxx/512 001 = fxx/256 010 = fxx/64 011 = fxx/8 100 = fxx 101 = fxt (sub clock) 110 = T1CLK (external clock) 111 = Not available .4 .3 .2 .1 .0 Timer 1 interrupt pending bit: 0 = No interrupt pending (when read) Clear pending bit (when write) 1 = Interrupt is pending (when read) No effect (when write) Timer 1 interrupt enable bit: 0 = Disable interrupt 1 = Enable interrupt Timer 1 counter operating enable bit: 0 = Disable counting operation 1 = Enable counting operation Timer 1 counter clear bit: 0 = No affect 1 = Clear the timer 1 counter (when write) 图 11-1. Timer 1/A 控制寄存器 (TACON) 11-2 LSB S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BTCON.0 R TIMER 1 TACON.6-.4 1/512 Data Bus 1/256 fxx (XIN or XTIN) 1/64 DIV TACON.3 TACON.2 M LSB 1/8 U TBCNT MSB TACNTR 1/1 TACON.1 Match X fxt Clear 16-Bit Comparator T1INT TACON.0 T1CLK TAOUT LSB MSB TBDATA TADATA Buffer Buffer Match Signal T1CLR TBDATA TADATA Data Bus 注释:一个16 位 timer 模式 ( TACON.7 <- "1": Timer 1) 图11-2. Timer 1 方框图 (一个16位Timer模式) 11-3 TIMER 1 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X TIMER 1 2个8位TIMERS模式 (TIMER A 和 B) 概述 8位timer A和B 都是通用8位timers. Timer A和B 通过设置寄存器TACON和TBCON来选择定时模式。 Timer A和B包括以下几个部分: — 带多路复用的时钟分频器 对于timer A :fxx /512,fxx /256,fxx /64, 对于timer B :fxx /512,fxx /256,fxx /64, fxx /8,fxx /1, fxt, 和外部时钟T1CLK fxx /8 和 fxt — 8位计数器 (TACNT, TBCNT), 8位比较器,和8位参考数据寄存器 (TADATA, TBDATA)) — Timer A 匹配输出(TAOUT) — Timer A 匹配中断(IRQ 0, 中断向量F0H) — Timer A 控制寄存器 TACON (set 1, bank 1, E6H, 读/写) — Timer B 匹配输出(TBOUT) — Timer B 匹配中断(IRQ 0, 中断向量F2H) — Timer B 控制寄存器 TBCON (set 1, bank 1, E7H, 读/写) 功能描述 定时模式 Timer A和B可以产生timer A匹配中断(TAINT)和timer B匹配中断(TBINT)。TAINT的中断优先级为IRQ0, 分配了单 独的中断向量F0H. TBINT的中断优先级为IRQ0, 分配的单独的中断向量F2H. 中断响应以后,Timer A和B中断标志位必须通过软件清零。 在定时模式中,当计数器的值与TA或TB参考数据寄存器TADATA和TB0DATA的值相等时,生成一个匹配信号。匹 配信号生成一个匹配中断 (TAINT, 向量地址F0H; TBINT, 向量地址 F2H) 同时计数器清零。 例如,如果写"10H" 到 TBDATA,TACON.7写"0",TBCON写0EH,计数器计数到“10H”,产生timer B中断请求, 计数器值复位,开始重新计数。 Timer A和B 控制寄存器 (TACON, TBCON) 通过配置 Timer A 和 B 控制寄存器 TACON 和TBCON 可以实现: — 使能 Timer A (计时器模式) 和 B 工作 (计时器模式) — 选择Timer A和B 时钟源 — 清零 Timer A 和B计数器TACNT 和 TBCNT — 使能 Timer A 和 B 中断 — 清零Timer A 和 B 中断标志位 11-4 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X TIMER 1 TACON 和 TBCON 地址分别为E6H 和 E7H, Set1 Bank1, 可用寄存器寻址模式读写访问。 复位后,TACON 为 "00H"。 这将会禁止Timer A定时模式,选择输入时钟频率为fxx/512,禁止Timer A 中断。 可以写"1"到 TACON.3在正常工作的任何时候清零Timer A 计数器。 复位后,TBCON 为 "00H"。这将会禁止Timer B定时模式,选择输入时钟频率为fxx/512,禁止Timer B 中断。 可以写"1"到 TBCON.3在正常工作的任何时候清零Timer A 计数器。 必须写"0"到TACON.7,写"1"到TACON.2(TBCON.2)和TACON.1(TBCON.1)来使能Timer A 中断 (TAINT) 和 Timer B(TBINT) 中断。为了产生精确的计时,应该写TACON.3(TBCON.3) 和 TACON.0 (TBCON.0) 来清零计数 器和中断标志位。当相应的中断服务子程序响应以后,中断标志位必须软件清零。可以通过写 "0" 到 TACON.1 和TBCON.0实现。 Timer 1/A Control Register (TACON) E6H, Set 1, Bank 1, R/W MSB .7 .6 .5 Timer A operating mode selection bit: 0 = Two 8-bit timers mode (Timer A/B) 1 = One 16-bit timer mode (Timer 1) Timer A clock selection bits: 000 = fxx/512 001 = fxx/256 010 = fxx/64 011 = fxx/8 100 = fxx 101 = fxt (sub clock) 110 = T1CLK (external clock) 111 = Not available .4 .3 .2 .1 .0 LSB Timer A interrupt pending bit: 0 = No interrupt pending (when read) Clear pending bit (when write) 1 = Interrupt is pending (when read) No effect (when write) Timer A interrupt enable bit: 0 = Disable interrupt 1 = Enable interrupt Timer A counter operating enable bit: 0 = Disable counting operation 1 = Enable counting operation Timer A counter clear bit: 0 = No affect 1 = Clear the timer A counter (when write) 图 11-3. Timer 1/A 控制寄存器 (TACON) 11-5 TIMER 1 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Timer B Control Register (TBCON) E7H, Set 1, Bank 1, R/W MSB .7 .6 .5 Not used for S3C8275X/C8278X/C8274X Timer B clock selection bits: 000 = fxx/512 001 = fxx/256 010 = fxx/64 011 = fxx/8 100 = fxt (sub clock) Others = Not available .4 .3 .2 .1 .0 LSB Timer B interrupt pending bit: 0 = No interrupt pending (when read) Clear pending bit (when write) 1 = Interrupt is pending (when read) No effect (when write) Timer B interrupt enable bit: 0 = Disable interrupt 1 = Enable interrupt Timer B counter operating enable bit: 0 = Disable counting operation 1 = Enable counting operation Timer B counter clear bit: 0 = No affect 1 = Clear the timer B counter (when write) 图 11-4. Timer B 控制寄存器 (TBCON) 11-6 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BTCON.0 R TIMER 1 TACON.6-.4 1/512 1/256 fxx (XIN or XTIN) Data Bus DIV TACON.3 TACON.2 1/64 M 1/8 U LSB MSB TACNT 8-bit up counter R 1/1 TACON.1 Match X fxt Clear 8-Bit Comparator TACON.0 TAINT TAOUT T1CLK LSB MSB TADATA Buffer Match Signal TACLR TADATA Register Data Bus 注释:2个 8 位 timers 模式 ( TACON.7 <- "0": Timer A) 图 11-5. Timer A 框图 (2个8位timer模式) 11-7 TIMER 1 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X BTCON.0 R TBCON.6-.4 1/512 Data Bus 1/256 fxx (XIN or XTIN) DIV 1/64 1/8 M U TBCON.3 TBCON.2 LSB MSB 8-Bit timer counter R TBCNT X fxt Clear TBCON.1 Match 8-Bit Comparator TBCON.0 TBINT TBOUT LSB MSB TBDATA Buffer Match Signal TBCLR TBDATA Register Data Bus 注释:2个 8 位 timers 模式 (TACON.7 <- "0": Timer B) 图 11-6. Timer B 框图 (2个8位timer模式) 11-8 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 12 钟表定时器 钟表定时器 概述 钟表定时器的功能包括实时时钟,时间测量以及为系统时钟提供间隔定时。为了启动钟表定时器,将控制寄存器的 第 1 位(WTCON.1)设置为 "1"。如果希望使用钟表定时器的溢出中断(IRQ 2, 地址E6H),还要将WTCON.1设 置为"1"。 钟表定时器溢出中断标志(WTCON.0)必须在应用程序中进行软件清零,也就是向WTCON.0写入"0"。 钟表定时器启动之后经过一段时间,中断标志会被自动置"1",中断请求以3.91ms, 0.25s, 0.5s 或 1s的间隔发生, 这由钟表定时器的速度设置(WTCON.3–.2) 决定。 钟表定时器可以产生 稳定的0.5 kHz, 1 kHz, 2 kHz 或4 kHz信号,送到蜂鸣器输出管脚 (BUZ)。将WTCON.3 和 WTCON.2 设置为"11b",钟表定时器将工作于高速模式,每隔 1.955ms 产生一次中断。在程序调试时可使用高速 模式来对事件定时。 同时,可以通过设置WTCON.7来选择钟表定时器的时钟源。 钟表定时器为LCD控制器提供时钟频率(fLCD)。因此,如果禁止watch timer,LCD控制器将不能工作。 钟表定时器包含以下组成部分: — 实时时钟和时间测量 — 时钟源可使用主系统时钟或副系统时钟(主时钟分频系数 27(fx/128) 或 副时钟(fxt)) — LCD控制器时钟 (fLCD)生成 — 蜂鸣器频率输出引脚(P0.7, BUZ) — 高速模式下的时序测试 — 钟表定时器溢出中断(IRQ2, 地址 F6H) 发生 — 钟表定时器控制寄存器, WTCON (set 1, bank 0, E1H, 读/写) 12-1 钟表定时器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 钟表定时器控制寄存器 (WTCON: R/W) 钟表定时器控制寄存器,WTCON,用于选择定时器中断间隔和蜂鸣器信号、使能或禁止watch timer功能。它位于 set 1,bank 1,地址E1H,可通过寄存器寻址模式进行读/写。 复位后WTCON 清零,这将禁用钟表定时器功能。 所以,如果想使用钟表定时器,必须对WTCON寄存器写入适当的值。 Watch Timer Control Register (WTCON) E1H, Set 1, Bank 1, R/W MSB .7 .6 .5 .4 .3 .2 .1 Buzzer signal selection bits: 00 = 0.5 kHz 01 = 1 kHz 10 = 2 kHz 11 = 4 kHz Watch timer Enable/Disable bit: 0 = Disable watch timer; clear frequency dividing circuits 1 = Enable watch timer Watch timer speed selection bits: 00 = Set watch timer interrupt to 1 s 01 = Set watch timer interrupt to 0.5 s 10 = Set watch timer interrupt to 0.25 s 11 = Set watch timer interrupt to 3.91 ms 图12-1. 钟表定时器控制寄存器(WTCON) 14-2 LSB Watch timer interrupt pending bit: 0 = Interrupt request is not pending (Clear pending bit when write"0") 1 = Interrupt request is pending Watch timer clock selection bit: 0 = Select main clock divided by 27 (fx/128) 1 = Select sub clock (fxt) Watch timer INT Enable/Disable bit: 0 = Disable watch timer INT 1 = Enable watch timer INT .0 钟表定时器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 钟表定时器电路图 WTCON.7 WTCON.6 WT INT Enable BUZ (P0.7) WTCON.6 WTCON.5 8 MUX WTCON.4 WTCON.3 WTCON.2 WTCON.1 WTINT fW/64 (0.5 kHz) fW/32 (1 kHz) fW/16 (2 kHz) fW/8 (4 kHz) Enable/Disable Selector Circuit WTCON.0 WTCON.0 (Pending Bit) Clock Selector fW 32.768 kHz Frequency Dividing Circuit fW/27 fW/213 fW/214 fW/215 (1 Hz) fLCD = 2048 Hz fxt fx/128 fX = Main clock (where fx = 4.19 MHz) fxt = Sub clock (32.768 kHz) fW = Watch timer frequency 图 13-2. 钟表定时器电路框图 12-3 钟表定时器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 注释 14-4 LCD 控制器/驱动器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 13 LCD 控制器/驱动器 概述 S3C8275X/C8278X/C8274X 微控制器可以直接驱动最多 128 点阵 (32 segments x 4 commons)的 LCD 面板。 LCD 模块包括以下部分: — LCD 控制器/驱动器 — 存储显示数据的显示RAM (00H0FH, 第2页) — 32 个segment 输出管脚 (SEG0–SEG31) — 4 个common 输出管脚 (COM0–COM3) — 3 个LCD供电电压管脚(VLC0–VLC2) — LCD内部/外部电阻偏压 LCD控制寄存器LCON用来打开/关断LCD显示,选择帧频率,选择占空比和偏压比,控制流向用于LCD显示分压电 阻的电流。LCD对比度控制寄存器用来选择VLCD电压。写到LCD显示RAM里的数据自动传输到segment信号管 脚,不需要程序控制。 当选择副振作为LCD时钟源时,即使在主时钟STOP或者IDLE模式下LCD仍可以显示。 VLC0-VLC2 Data BUS 3 8 LCD Controller/ Driver COM0-COM3 4 SEG0-SEG31 32 图 13-1. LCD功能框图 13-1 LCD 控制器/驱动器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X LCD 电路框图 SEG31/P2.0 Port Latch SEG/Port Driver SEG16/P3.7 SEG15/P4.0 Data BUS SEG0/P5.7 LCD Display RAM (200H-20FH) COM/Port Driver fLCD COM3/P6.3 COM2/P6.2 COM0/P6.0 Timing Controller LCON LCD Voltage Controller 图 13-2. LCD 电路框图 13-2 VLC0 VLC1 VLC2 LCD 控制器/驱动器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X LCD RAM 地址空间 RAM的第2页中的空间被用作LCD数据存储。当某个显示段的值为 "1",LCD显示打开;当某个显示段的值为 "0",LCD显示关闭。 COM0 b0 b4 COM1 b1 b5 COM2 b2 b6 COM3 b3 b7 SEG30 SEG31 SEG28 SEG29 SEG26 SEG27 SEG8 SEG9 SEG6 SEG7 SEG4 SEG5 SEG2 SEG3 SEG0 SEG1 显示RAM区的数据采用与信号FLCD 同步的直接内存访问(DMA)方式,通过管脚SEG0-SEG31送出。如果这些 RAM地址没有用作LCD显示,也可以用作一般用途。 b0 b4 b0 b4 b0 b4 b0 b4 b1 b5 b1 b5 b1 b5 b1 b5 b0 b4 b0 b4 b0 b4 b1 b5 b1 b5 b1 b5 b2 b6 b2 b6 b2 b6 b2 b6 b3 b7 b3 b7 b3 b7 b3 b7 b2 b6 b2 b6 b2 b6 b3 b7 b3 b7 b3 b7 200H 201H 202H 203H 204H 20DH 20EH 20FH 图 13-3. LCD 显示数据 RAM 结构图 表 13-1. LCD 时钟信号帧频 LCDCK 频率 (fLCD) 静态 1/2 占空比 1/3占空比 1/4占空比 64 Hz 64 32 21 16 128 Hz 128 64 43 32 256Hz 256 128 85 64 512 Hz 512 256 171 128 13-3 LCD 控制器/驱动器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X LCD 控制寄存器 (LCON) LCON 位于 set 1, bank 1, E0H, 可读写,寄存器寻址模式。它包含以下功能: LCD 占空比、偏压比选择 LCD 时钟选择 LCD 显示控制 内部/外部分压电阻偏压选择 LCON 寄存器可以控制打开关断 LCD 显示,可以选择占空比和偏压比,可以选择 LCD 时钟和控制LCD分压电 阻的电流流向。复位后, LCON 的值被清零。LCD 显示关断,占空比选择1/4,偏压比选择 1/3,LCD 时钟选择 64Hz并使能LCD分压电阻。 The LCD时钟频率决定了每个segment输出COM信号的扫描频率。也被认为是LCD的帧频。既然LCD时钟由watch timer(fw)产生,LCD显示打开的时候必须使能watch timer。 LCD Control Register (LCON) E0H, Set 1, Bank 1, R/W MS B .7 .6 .5 .4 .3 .2 Internal LCD dividing register enable bit: 0 = Enable internal LCD dividing resistors 1 = Disable internal LCD dividing resistors LCD clock selection bits: 00 = fw/2 9 (64 Hz) 01 = fw/2 8 (128 Hz) 10 = fw/2 7 (256 Hz) 11 = fw/2 6 (512 Hz) .0 LSB LCD display control bit: 0 = Turn display off (Turn off the P-Tr) 1 = Turn display on (Turn on the P-Tr) Not used for S3C8275X/C8278X/C8274X LCD duty and bias selection bits: 000 = 1/4 duty, 1/3 bias 001 = 1/3 duty, 1/3 bias 010 = 1/3 duty, 1/2 bias 011 = 1/2 duty, 1/2 bias 1xx = Static 注释: 1. "x" 表示无关. 2. 当选择1/2偏压比时,偏压由VLC0, V LC1(VLC2 ), 和VSS 决定。 图 13-4. LCD 控制寄存器 (LCON) 13-4 .1 LCD 控制器/驱动器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X LCD 分压电阻 Static and 1/3 Bias 1/2 Bias S3C8275X/C8278X/C8274X S3C8275X/C8278X/C8274X VDD VDD LCON.0 LCON.7 = 0: Enable internal resistors VLC0 VLC1 VLC2 R R LCON.0 VLC1 VLCD LCON.7 = 0: Enable internal resistors VLC0 VLC2 R R R VLCD R VSS VSS Voltage Dividing Resistor Adjustment S3C8275X/C8278X/C8274X VDD LCON.0 LCON.7 = 1: Disable internal resistors VLC0 R' R' VLC1 VLC2 VLCD R' VSS 注释: 1. R = 内部分压电阻。 电阻可由 LCON.7 断开。 2. R' = 外部分压电阻 图 13-5. 内部分压电阻连接 13-5 LCD 控制器/驱动器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X COMMON (COM) 信号 根据占空比选择不同的COM信号。 — 1/4 占空比,选择 COM0-COM3 — 1/3 占空比,选择 COM0-COM2 — 1/2 占空比,选择 COM0-COM1 SEGMENT (SEG) 信号 32个LCD segment 信号管脚连到RAM的第2页的相应显示区。RAM区的显示位与COM信号输出管脚同步。 当RAM区的显示位为 "1"时,相应的segment被选中。 当显示位为"0"时,说明相应的segment没有被选中。 Select Non-Select FR 1 Frame COM VLC0 VSS SEG VLC0 VSS VLC0 VSS -VLC0 COM-SEG 图 13-6. 静态显示模式下选中/非选中信号 13-6 LCD 控制器/驱动器 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Select Non-Select FR 1 Frame VLC 0 VLC1, 2 COM Vss VLC 0 VLC1, 2 SEG Vss VLC 0 VLC1, 2 COM-SEG Vss -VLC1, 2 -VLC 0 图 13-7. 1/2占空比, 1/2偏压比显示模式下选中/非选中信号 Select Non-Select FR 1 Frame COM VLC0 VLC1 VLC2 VSS SEG VLC0 VLC1 VLC2 VSS VLC0 VLC1 VLC2 VSS -VLC2 -VLC1 -VLC0 COM-SEG 图 13-8. 1/3占空比, 1/3偏压比显示模式下选中/非选中信号 13-7 LCD 控制器/驱动器 3 0 1 2 3 SEG1.4 x C0 1 Frame 13-8 SEG5 0 1 1 0 .4 .5 .6 .7 SEG4 Data Register page 4, address B2H LD B2H, #63h 1 1 0 0 SEG3 .0 .1 .2 .3 1 1 1 0 SEG2 图 13-9. 1/4占空比, 1/3 偏压比显示模式的LCD 信号和波形图示例 .4 .5 .6 .7 COM1 -SEG1 VLC0 VLC1 VLC2 VSS -VLC2 -VLC1 -VLC0 0 1 0 1 COM1 -SEG0 VLC0 VLC1 VLC2 VSS -VLC2 -VLC1 -VLC0 Data Register page 4, address B1H LD B1H, #7Ah COM0 -SEG1 VLC0 VLC1 VLC2 VSS -VLC2 -VLC1 -VLC0 SEG1 COM0 -SEG0 VLC0 VLC1 VLC2 VSS -VLC2 -VLC1 -VLC0 .0 .1 .2 .3 VLC0 VLC1 VLC2 VSS 1 1 0 0 SEG1 SEG1.7 x C3 SEG0 SEG0 VLC0 VLC1 VLC2 VSS SEG0.3 SEG2.1 x C3 C1 .4 .5 .6 .7 VLC0 VLC1 VLC2 VSS 0 1 1 1 COM3 .0 .1 .2 .3 VLC0 VLC1 VLC2 VSS SEG0.1 x C1 SEG2.0 x C2 SEG1.6 C0 COM2 SEG1.5 x C1 COM1 VLC0 VLC1 VLC2 VSS SEG0.2 x C2 VLC0 VLC1 VLC2 VSS SEG0.0 x C0 COM0 Data Register page 4, address B0H LD B0H, #3Eh 2 COM2 COM3 FR 1 COM0 COM1 0 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 14 串行输入输出接口 串行输入输出接口 概述: 串行输入输出接口(SIO) 可以与各种外设进行串行数据通讯。SIO 模块主要包括: — 8 位控制寄存器(SIOCON) — 时钟选择逻辑 — 8 位数据缓冲器 (SIODATA) — 8 位预分频器 — 3 位串行时钟计数器 — 串行数据输入/输出引脚 (SI, SO) — 外部时钟输入引脚 (SCK) SIO 模块可以接收和发送8位数据,其接收、发送速率由寄存器设定。为了实现灵活的数据传输速率,可以选择内 部或者外部时钟源。 编程流程: SIO 模块的编程遵循以下基本的步骤: 1. 通过设置寄存器P1CONL寄存器,设置port 1中SIO对应的I/O口为SO, SCK, SI 2. 设置寄存器SIOCON,正确的配置SIO模块。SIOCON.2 必须设置为’1’以使能数据的移位。 3. 需要中断时,将中断使能位 (SIOCON.1) 置为 ‘1’。 4. 发送数据时,将要发送的数据写到数据缓冲器 SIODATA,并将 SIOCON.3 设为’1’,则开始发送数据。 5. 当数据接收/发送完成后, SIO中断标志位(SIOCON.0)置为’1’, 同时产生SIO中断请求。 14-1 串行输入输出接口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X SIO控制寄存器 (SIOCON) SIO 控制寄存器,SIOCON,地址为E1H,Set 1,Bank 0.设置SIO模块的以下功能: — 时钟源选择 (内部或者外部) — 中断使能控制 — 移位操作的边沿选择 — 清除3位计数器并开始移位操作 — 使能移位操作(发送) — 模式选择(发送/接收 或 只接收) — 数据方向选择 (高位在前或低位在前) 复位后,SIOCON的初始值为’00H’, 默认SIO选择内部时钟,工作在仅接收模式下,3位时钟计数器清零。禁止数 据移位操作(发送)和中断,选择数据方向为高位在前。 Serial I/O Module Control Register (SIOCON) E1H, Set 1, Bank 0, R/W MSB .7 .6 .5 .4 SIO shift clock selection bit: 0 = Internal clock (P.S Clock) 1 = External clock (SCK) Data direction control bit: 0 = MSB-first mode 1 = LSB-first mode SIO mode selection bit: 0 = Receive only mode 1 = Transmit/receive mode Shift clock edge selection bit: 0 = TX at falling edges, Rx at rising edges 1 = TX at rising edges, Rx at falling edges .3 .2 .1 .0 SIO interrupt pending bit: 0 = No interrupt pending 0 = Clear pending condition (when write) 1 = Interrupt is pending SIO interrupt enable bit: 0 = Disable SIO interrupt 1 = Enable SIO interrupt SIO shift operation enable bit: 0 = Disable shifter and clock counter 1 = Enable shifter and clock counter SIO counter clear and shift start bit: 0 = No action 1 = Clear 3-bit counter and start shifting 图 14-1.SIO 接口控制寄存器 (SIOCON) 14-2 LSB 串行输入输出接口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X SIO 预分频寄存器 (SIOPS) SIO 预分频寄存器,SIOPS,地址为 E3H,Set 1, Bank 0。SIOPS寄存器的值决定了SIO数据传输的波特率: 波特率 = 输入时钟频率(fxx/4) / (预分频值+ 1), 或外部输入时钟频率 SIO Pre-scaler Register (SIOPS) E3H, Set 1, Bank 0, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 LSB Baud rate = (fXX/4)/(SIOPS + 1) 图 14-2. SIO 预分频寄存器 (SIOPS) SIO 模块框图 CLK SIO INT 3-Bit Counter Clear SIOCON.0 Pending SIOCON.1 (Interrupt Enable) SIOCON.3 SIOCON.7 SIOCON.4 (Edge Select) M SCK SIOPS (E3H, set 1, bank 0) fxx/2 SIOCON.2 (Shift Enable) 8-bit P.S. 1/2 U X SIOCON.5 (Mode Select) CLK 8-Bit SIO Shift Buffer (SIODATA, E2H, set 1, bank 0) 8 SO SIOCON.6 (LSB/MSB First Mode Select) SI Data Bus 图 14-3. SIO 功能模块框图 14-3 串行输入输出接口 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X SIO 时序图 (SIO) SCK SI DI7 DI6 DI5 DI4 DI3 DI2 DI1 DI0 SO DO7 DO6 DO5 DO4 DO3 DO2 DO1 DO0 Transmit Complete SIO INT Set SIOCON.3 图 14-4. SIO串行发送-接收模式 (下降沿发送,SIOCON.4 = 0) SCK SI DI7 DI6 DI5 DI4 DI3 DI2 DI1 DI0 SO DO7 DO6 DO5 DO4 DO3 DO2 DO1 DO0 Transmit Complete SIO INT Set SIOCON.3 图 14-5. SIO串行发送-接收模式 (上升沿发送,SIOCON.4 = 1) 14-4 电池电压检测 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 15 电池电压检测 概述 S3C8275X/C8278X/C8274X内建一个BLD(电池电压检测)电路,用于检测电源电压跌落或者软件方式检测外部 输入电平。BLD电路的开关可由软件控制。因为BLD工作时的电流很大,所以建议非必要时将BLD保持关闭。BLD 阈值电压可以由软件设置。阈值电压可以设置成下列3种之一: 2.2 V, 2.4 V 或 2.8V (VDD 参考电压), 或者外部输入电平(外部参考电压) BLD仅当BLDCON.3 置‘1’时工作。如果VDD 电平低于由BLDCON.2–.0位选择的参考电压时,BLDCON.4 将被置 ‘1’。如果VDD 电平高于参考电压时,BLDCON.4 将被清零. 低功耗应用时,关闭BLD模块。 VDD Pin fBLD BLDCON.5 Battery Level Detector BLDCON.4 BLD Out MUX BLDCON.3 VBLDREF/P2.0 Battery Level Setting BLD Run P2CONL.1-.0 BLDCON.2-0 ExtRef Input Enable Set the Level 图 15-1. 电池电压检测模块图 15-1 电池电压检测 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 电池电压检测控制寄存器 (BLDCON) BLDCON.3 位控制电池电压检测的开关。系统初始化后VBLD 的值为2.2 V,通过选择电池电压检测控制寄存器 (BLDCON) 可将VBLD 设置成其它2个值。当向BLDCON中写入 3位数据时,内建的电阻串被选通并由此确定VBLD 的值。表 15-1显示了3个不同的VBLD 值。 Resistor String Battery Level Detector Control Register F4H, Set 1, Bank 1, R/W, Reset : 00H MSB .7 .6 .5 .4 .3 .2 .1 .0 Not used RBLD VIN Mux + Comparator BLD OUT VREF Bias VBAT VBLDREF fBLD BANDGAP BLD Enable/Disable P2CONL.1-.0 注释: 1. BLDCON 的初始值为 #00H. 2. VREF 大约为 1 volt. 图 15-2. 电池电压检测电路和模块图 表 15-1. BLDCON 值和检测电压 BLDCON .2.0 0 0 0 2.2 V 1 0 1 2.4 V 0 1 1 2.8 V 其它 15-2 VBLD 不可用 LSB 嵌入式闪存接口 S3F8275X 16 嵌入式闪存接口 概述 本章只针对S3F8275X,因为只有S3F8275X有片上Full Flash。该Flash支持‗LDC‘指令访问。编程的最小单位是字 节,擦除的最小单位是扇区。用户可在任何时间往闪存里写数据。S3F8275X 16K字节闪存有两种工作模式: — 用户编程模式:仅限于 S3F8275X — 工具编程模式:参考第 19 章,S3F8275X/F8278X/F8274X FLASH MCU. 16-1 嵌入式闪存接口 S3F8275X 用户编程模式 用户编程模式支持扇区擦除、字节编程、字节读取和一种保护模式(Hard Lock 保护)。只有在工具编程模式下才 可以启动读保护,所以用户需要在编程工具上勾选读保护项,使得编程完成后的芯片进入读保护状态。 S3F8275X 内部集成了自升压电路,可以产生高电压。因此,不需要在VPP (Test)管脚另加12.5V的编程电压,只是 利用芯片内部逻辑电平就可以完成对闪存的操作。用户编程模式下的片上闪存编程是通过几个专用控制寄存器来实 现的。 闪存控制寄存器(用户编程模式) 闪存控制寄存器 (FMCON) FMCON 寄存器只支持用户编程模式下选择闪存操作模式:扇区擦除、字节编程、和设置硬件锁。 Flash Memory Control Register (FMCON) F0H, Set 1, Bank 1, R/W MSB .7 .6 .5 .4 .3 Flash memory mode selection bits: 0101 = Programming mode 1010 = Sector erase mode 0110 = Hard lock mode others = Not available .2 .1 .0 LSB Flash operation start bit: 0 = Operation stop 1 = Operation start (This bit will be cleared automatically just after the corresponding operation completed). Not used for S3F8275X Sector erase status bit: 0 = Success sector erase 1 = Fail sector erase 图 16-1. 闪存控制寄存器 (FMCON) FMCON.0 是擦除和 Hard Lock 保护操作的开始位。因此,设置 FMCON.0 为―1‖,则开始擦除或 Hard Lock 保 护操作。在执行扇区擦除或Hard Lock后,需要等待一段时间才可以用‘LDC‘ 指令读或者写同一扇区的单元。闪存的 读写则不需要用到这一控制位。 扇区擦除状态位是只读的。在执行扇区擦除的过程中,即使在IMR寄存器中禁止了所有中断源,但是只要具体模块 的中断处于使能状态,并且满足中断触发条件而置起中断标志位,仍然会向CPU发出中断请求,此时扇区擦除操作 停止,CPU响应中断请求。所以,为了操作的可靠性,必须在擦除操作结束后检查扇区擦除状态位,如果为‘0‘ 则 表示操作成功,为‘1‘ 则表示操作失败,需要重新擦除。 注释: 当向FMUSR中写入"A5H" 后, FMCON的误操作或者程序跑飞都可能启动闪区擦除,用户编程或Hard Lock保护。需 要小心避免上述情况的发生。 16-2 嵌入式闪存接口 S3F8275X 闪存用户编程使能寄存器 (FMUSR) FMUSR 寄存器是为闪存的安全操作设置的。当 CPU 由于电噪声或其它原因致使程序跑飞时,这个寄存器的状态 可以避免闪存的误操作。 复位后,由于FMUSR 的值为 ―00000000B‖,用户编程模式处于禁止状态。如需操作闪存,可通过设置 FMUSR 的值为 ―10100101B‖ 来使能用户编程模式。除 ―10100101B‖ 外的其它值,将禁止用户编程模式。 Flash Memory User Programming Enable Register (FMUSR) F1H, Set 1, Bank 1, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 LSB Flash memory user programming enable bits: 10100101: Enable user programming mode Other values: Disable user programming mode 图 16-2. 闪存用户编程使能寄存器 (FMUSR) 16-3 嵌入式闪存接口 S3F8275X 闪存扇区地址寄存器 擦除或编程闪存需要两个8位扇区地址寄存器来指定操作地址。FMSECL(闪存扇区地址寄存器低字节)存储被操 作扇区基址的低 8 位地址,FMSECH(闪存扇区地址寄存器高字节)存储高8 位地址。 S3F8275X 8里有128个扇区,所以需要用到FMSECH。一个扇区由 128 个字节组成。每个扇区的起始地址不是 XX00H 就是 XX80H。所以 FMSECL 的低 7 位数据没有意义。但从操作的简单性来考虑,我们建议用户还是直 接向FMSECH 和 FMSECL 寄存器写入完整的扇区基址。 当编程闪存时,用户应该在确定扇区基址后再进行编程。如果下一个操作也是写入一字节数据,用户应该核对下一 个目的地址是否位于同一个扇区内。如果不在同一扇区,用户应该重新向 FMSECH 和 FMSECL 寄存器中写入新 的扇区基址。 Flash Memory Sector Address Register, High Byte (FMSECH) F2H, Set 1, Bank 1, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 LSB Flash Memory Setor Address (High Byte) 图 16-3. 闪存扇区地址寄存器高字节 (FMSECH) Flash Memory Sector Address Register, Low Byte (FMSECL) F3H, Set 1, Bank 1, R/W MSB .7 .6 .5 .4 .3 .2 .1 .0 Don't care Flash Memory Sector Address (Low Byte) 图 16-4. 闪存扇区地址寄存器低字节 (FMSECL) 16-4 LSB 嵌入式闪存接口 S3F8275X ISPTM (在板编程) 扇区 ISPTM 扇区可以用于存放在板编程代码(通过 I/O 接口实现软件升级的 Boot 代码)。出于安全考虑,―LDC‖指令 擦除或编程操作不会影响 ISPTM 扇区的内容,但是这要通过使能 ISP 保护来实现。 用户可以通过设置 Smart Option 中ISP使能禁止位为―0‖来使能芯片的 ISP 功能。如果不想使用 ISP 扇区,只要 将 Smart Option 中 ISP 使能禁止位设为―1‖,此时这个区域可以用作普通的程序存储空间。工具模式下,ISP 扇 区会失去保护,即通过串行编程工具还是可以擦除或编程该区域。 ISP 扇区的大小可以通过 Smart Option 来设置。根据在板编程代码的大小选择合适的 ISP 扇区尺寸。 (Decimal) 16,383 (HEX) 3FFFH 16K-bytes Internal Program Memory Area 8FFH 255 Available ISP Sector Area FFH Interrupt Vector Area 3FH Smart Option Area 3CH 0 00H S3F8275X 图 16-5. 程序存储地址空间 16-5 嵌入式闪存接口 S3F8275X 表 17-1. ISP 扇区大小 Smart Option (003EH) ISP扇区大小选择位 注释: 位 2 位 1 位 0 1 0 0 0 0 x 0 0 1 1 x 0 1 0 1 ISP 扇区 ISP 扇区大小 0 100H – 1FFH 100H – 2FFH 100H – 4FFH 100H – 8FFH 0 256 Bytes 512 Bytes 1024 Bytes 2048 Bytes 在用户模式下,通过 Smart Option 位(3E.2-3E.0)设置的 ISP 扇区空间内,用 LDC 指令实现的擦除和编程操作都 是无效的。 ISP复位向量和 ISP 扇区大小的关系 用户使能ISP 保护功能(3EH.2 = 0)并且选择了 OBP 复位向量(3EH.7 = 0)后,需要通过设置 ISP 复位向量 地址选择位(3E.7-.5)来选择恰当的 CPU 复位地址(参考表 16-2)。 表 17-2. 复位向量地址 Smart Option (003EH) ISP 复位向量地址选择 位 7 位 6 位 5 1 0 0 0 0 x 0 0 1 1 x 0 1 0 1 上电复位后的复位向 量地址 存放ISP代码的空间 ISP 扇区大小 0100H 0200H 0300H 0500H 0900H 0 100H – 1FFH 100H – 2FFH 100H – 4FFH 100H – 8FFH 0 256 Bytes 512 Bytes 1024 Bytes 2048 Bytes 注释: Smart Option 中 ISP 复位向量选择位(003EH.7 – 003EH.5)和 ISP 保护扇区选择(003EH.2 – 003EH.0)是相互独 立的。所以设置的时候要注意一致性。 16-6 嵌入式闪存接口 S3F8275X 扇区擦除 用户只能在用户编程模式下利用扇区擦除操作来部分擦除闪存。在用户编程模式下,擦除闪存的唯一单元是扇区。 S3F8275X的 16K 字节闪存空间分为 128 个扇区。 每个扇区大小为 128 个字节。因此,在对闪存内单个或多个 字节进行编程前,必须先擦除目的地址所在的扇区。在设置完被擦扇区的扇区地址并置高擦除起始位(FMCON.0) 开始擦除后,至少需要 10 ms 来完成擦除操作。工具编程模式不支持扇区擦除(MDS 模式工具或编程工具)。 3FFFH Sector 127 (128 Byte) Sector 126 (128 Byte) 3F7FH 3EFFH 1FFFH Sector 63 (128 Byte) 1F7FH 05FFH Sector 11 (128 Byte) 057FH Sector 10 (128 Byte) Sector 0-9 (128 byte x 10) 0500H 04FFH 0000H S3F8275X 图 16-6. 用户编程模式下的扇区 16-7 嵌入式闪存接口 S3F8275X 用户编程模式下扇区擦除流程 1. 设置闪存用户编程使能寄存器 (FMUSR) 为―10100101B‖。 2. 设置闪存扇区地址寄存器 (FMSECH 和 FMSECL)。 3. 设置闪存控制寄存器 (FMCON) 为―10100001B‖。 4. 设置闪存用户编程使能寄存器 (FMUSR) 为―00000000B‖。 5. 检查 "扇区擦除状态位" 判断扇区擦除操作是否成功。 编程实例 — 扇区擦除 reErase: SB1 LD LD LD CP JR LD NOP NOP LD TM JR FMUSR,#0A5H ; 使能用户擦除模式 FMSECH,#10H FMSECL,#00H ; 设置扇区地址 (1000H 107FH) UserID_Code,#User_value ; 检查用户ID (用户自设) ; User_value 可以是用户设定的任何值 NE,Not_ID_Code ; 如果不相等,跳转到Not_ID_Code FMCON,#10100001B ; 开始扇区擦除 ; 必须的空指令 ; 必须的空指令 FMUSR,#0 ; 关闭用户模式 FMCON,#00001000B ; 检查 "Sector erase status bit" NZ,reErase ; 擦除失败则跳转 reErase Not_ID_Code: SB1 LD 16-8 FMUSR,#0 ; 关闭用户模式 嵌入式闪存接口 S3F8275X 编程 扇区擦除后,闪存编程操作是以一个字节为单位来进行的。从代码安全的角度考虑,必须在编程前必须在FMSECH 和FMSECL设置合适的值。 由―LDC‖指令开始编程写操作。 在不改变 FMSECH 和 FMSECL 的值之前,最多可连续写128个字节, 因为扇区大小就是128字节. 所以如果一次编程字节超多128 字节则必须重新设置寄存器 FMSECH 和 FMSECL的值。 用户编程模式下的编程流程 1. 编程前必须保证编程地址中的值为―FFH‖(可以通过扇区擦除来实现)。 2. 设置闪存用户编程使能寄存器 (FMUSR) 为―10100101B‖。 3. 设置闪存扇区地址寄存器 (FMSECH 和 FMSECL) 为要写数据的扇区基地址的值 4. 把闪存的高位地址放进对工作寄存器的高地址寄存器中。 5. 把闪存的低位地址放进对工作寄存器的低地址寄存器中。 6. 把要发送的数据放到一个工作寄存器中。 7. 检查用户ID (用户自设) 8. 设置闪存控制寄存器 (FMCON) 为―01010001B‖。 9. 用―LDC‖指令,通过间接寻址方式把要发送的数据写入闪存地址区。 10. 设置闪存用户编程使能寄存器 (FMUSR) 为―00000000B‖,以关闭用户编程模式。 16-9 嵌入式闪存接口 S3F8275X 编程实例 — 编程 SB1 LD LD LD LD LD LD CP JR LD LDC NOP LD FMUSR,#0A5H ; 使能用户编程模式 FMSECH,#17H FMSECL,#80H ; 设置扇区地址(1780H17FFH) R2,#17H ; 设置目标地址(同一扇区) R3,#84H R4,#78H ; 临时数据 UserID_Code,#User_value ; 检查用户ID (用户自设) ; User_value 可以是用户设定的任何值 NE,Not_ID_Code ; 不相同则跳转到Not_ID_Code FMCON,#01010001B ; 开始编程 @RR2,R4 ; 写入数据 ; 必须的空指令 FMUSR,#0 ; 关闭用户编程模式 Not_ID_Code: SB1 LD 16-10 FMUSR,#0 ; 关闭用户编程模式 嵌入式闪存接口 S3F8275X 读 由―LDC‖指令开始读操作。 用户编程模式下编程流程 1. 把闪存的高位地址放进对工作寄存器的高地址寄存器中 2. 把闪存的低位地址放进对工作寄存器的低地址寄存器中 3. 用―LDC‖指令,通过间接寻址方式从闪存区读取数据。 编程实例 — 读 LOOP: LD LD LDC R2,#3H R3,#0 R0,@RR2 INC CP JP R3 R3,#0H NZ,LOOP ; 把闪存的高位地址放进工作寄存器对的高地址寄存器中 ; 低位地址放进工作寄存器对的低地址寄存器中 ; 从闪存区读数据 ; (在 300H 和 3FFH之间) 16-11 嵌入式闪存接口 S3F8275X HARD LOCK 保护 用户可通过写 ‗0110B‘ 到 FMCON7-4 开启 Hard Lock 保护。这个功能可以防止闪存区数据的变化。如果启用这 个功能,用户就不能往闪存里写或擦除数据。可通过在工具编程模式下,执行片擦除操作来接触这种保护。 在用户编程模式下,设置 Hard Lock 保护的流程如下。工具模式下,工具的制造商通过编程选项支持硬件保护。 具体请参照制造商提供的编程工具用户说明书。 用户编程模式下的编程流程 1. 设置闪存用户编程使能寄存器 (FMUSR) 为―10100101B‖。 2. 检查设置闪存控制寄存器 (FMCON) 为―01100001B‖。 3. 检查用户ID 4. 设置闪存用户编程使能寄存器 (FMUSR) 为―00000000B‖。 (用户自设) 编程实例 — Hard Lock 保护 SB1 LD CP JR LD NOP LD FMUSR,#0A5H ; 使能用户编程模式 UserID_Code,#User_value ; 检查用户ID (用户自设) ; User_value 可以是用户设定的任何值 NE,Not_ID_Code ; 如果不相等,则跳转 Not_ID_Code FMCON,#01100001B ; 选择Hard Lock 模式并开始保护 ; 必须的空指令 FMUSR,#0 ; 关闭用户编程模式 Not_ID_Code: SB1 LD 16-12 FMUSR,#0 ; 关闭用户编程模式 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 17 电气参数 电气参数 概述 本章将以表格或图表的方式提供 S3C8275X/C8278X/C8274X的电气参数。按如下顺序排列: 芯片极限物理特性 直流电气特性 STOP 模式下,RAM数据保持电压 外部中断唤醒Stop 模式时序 Stop 模式下复位时序 输入/ 输出电容 交流电气特性 外部中断输入时序 复位信号时序 SIO 时序 BLD 电气特性 LVR 复位时序 振荡器特性 振荡器稳定时间 工作电压范围 内部 Flash ROM 电气特性 17-1 电气参数 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 17-1. 芯片极限物理特性 (TA = 25 C) 参数 标号 条件 供电电压 VDD 输入电压 VI 输出电压 VO I/O 口输出电流 I OH I/O 口输入电流 I OL 范围 0.3 P0–6 口 单位 + 4.6 V 0.3 VDD + 0.3 V 0.3 V VDD + 0.3 单个 I/O 口工作 15 所有 I/O 口工作 60 单个 I/O 口工作 + 30 (峰值) 所有的 I/O 口的电流之和 + 100 (峰值) mA mA 工作温度 TA 25 + 85 C 储藏温度 TSTG 65 + 150 C 表 17-2. 直流电气特性 (TA = 25 C 参数 工作电压 输入高电平 输入低电平 输出高电平 输出低电平 + 85 C, VDD = 标号 VDD 2.0 V 3.6 V) 条件 最小值 典型值 最大值 单位 fx = 0.4 4.2MHz, fxt = 32.8kHz 2.0 3.6 V fx = 0.4 8.0MHz 2.5 3.6 VDD VIH1 除VIH2, VIH3外所有输入管脚 0.7 VDD VIH2 P0-1 口, nRESET 0.8 VDD VDD VIH3 XIN, XOUT 以及 XTIN, XTOUT VDD – 0.1 VDD VIL1 除VIL2, VIL3外所有输入管脚 0.3 VDD VIL2 P0-1 口, nRESET 0.2 VDD VIL3 XIN, XOUT, 以及XTIN, XTOUT 0.1 VOH VDD = 2.7 3.6 V; 所有输出管脚; IOH = VDD – 1.0 – V V V 1 mA VOL1 VDD = 2.7 3.6 V IOL = 15mA P0-1 口 1.0 V VOL2 VDD = 2.7 3.6 V IOL = 10mA 1.0 V 3 A 除 VOL1外所有输出管脚 输入高电平漏电流 17-2 ILIH1 VI = VDD 除 ILIH2外所有输入管脚 ILIH2 VI = VDD XIN, XOUT, XTIN, XTOUT 20 电气参数 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 17-2. 直流电气特性 (续) (TA = 25C + 85C, VDD = 参数 标号 输入低电平漏电流 ILIL1 2.0 V 3.6 V) 最小值 典型值 最大值 单位 VI = 0 V; 除 nRESET, ILIL2外所有输入管 脚 –3 A ILIL2 VI = 0 V; XIN, XOUT, XTIN, XTOUT –20 输出高电平漏电流 ILOH VO = VDD 所有输出管脚 3 输出低电平漏电流 ILOL VO = 0 V 所有输出管脚 –3 上拉电阻 RL1 VI = 0 V; VDD = 3V, TA = 25C P0–6 口 40 70 100 RL2 VI = 0 V; VDD = 3V, TA = 25C nRESET 220 360 500 ROSC1 VDD = 3 V, TA = 25 C XIN = VDD, XOUT = 0V 600 1700 3000 ROSC2 VDD = 3 V, TA = 25 C XTIN = VDD, XTOUT = 0 V 2000 4000 8000 振荡器反馈电阻 条件 k k LCD 分压电阻 RLCD TA = 25 C 60 110 160 k VLCD-COMi 压降 (i = 0-3) VDC 每个Common 管脚 15 A 120 mV VLCD-SEGx压降 (x = 0–31) VDS 每个Segment 管脚 15 A 120 VLC1 VDD = 2.7 V 到 3.6 V, 1/3 偏置 LCD 时钟= 0Hz, VLC0 = VDD 2/3VDD–0.2 2/3VDD 2/3VDD+ 0.2 1/3VDD–0.2 1/3VDD 1/3VDD+ 0.2 中间输出电压 (1) VLC2 注释: V 当VLC0 开路时的中间输出电压。 17-3 电气参数 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 17-2. 直流电气特性 (续) (TA = 25C 参数 供电电流 (1) + 85C, VDD = 2.0 V 标号 IDD1(2) IDD2(2) 3.6 V) 条件 最小值 典型值 最大值 单位 3.0 6.0 mA Run 模式: VDD = 3.3 V 0.3 V 8.0 MHz 石英晶体振荡器 C1 = C2 = 22pF 4.0 MHz 1.5 3.0 Idle模式: VDD = 3.3 V 0.3 V 8.0 MHz 0.5 1.6 石英晶体振荡器 C1 = C2 = 22pF 4.0 MHz 0.4 1.2 IDD3(3) Run 模式: VDD = 3.3 V 0.3 V, 32 kHz石英晶体振荡器 TA = 25 C, OSCCON.7=1 12.0 25.0 IDD4(3) Idle模式: VDD = 3.3 V 0.3 V, 32 kHz 石英晶体振荡器 TA = 25 C, OSCCON.7=1 2.0 4.0 IDD5(4) Stop 模式; VDD = 3.3 V 0.3 V 0.2 2.0 10 TA = 25 C TA = 25 C ~ +85 C 注释: 1. 供电电流不包括内部上拉电阻,LCD分压电阻,LVR模块消耗电流以及外部输出电流负载。 2. IDD1 和 IDD2 包含副时钟振荡的功耗。 3. IDD3 和 IDD4 是主时钟振荡停止,副时钟使用 (OSCCON.7 = 1) 时的电流。 4. IDD5 是主时钟和副时钟振荡都停止时的电流。 5. 表中所有值都是在系统时钟控制寄存器 (CLKCON.4–.3) 的位4-3设置成11B时的结果。 17-4 A 电气参数 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 17-3.Stop 模式下数据保持电压 (TA = 25 C + 85 C) 参数 标号 条件 最小值 典型值 最大值 单位 数据保持所需的供电电压 VDDDR 2.0 3.6 V 数据保持所需的供电电流 IDDDR 1 A Stop 模式, TA = 25 C VDDDR = 2.0 V 禁止LVR 模块 Idle Mode (Basic Timer Active) ~ ~ Stop Mode Normal Operating Mode Data Retention Mode ~ ~ VDD VDDDR Execution of STOP Instruction 0.8 VDD tWAIT 注释 : tWAIT 相当于 16 x 1/BT . 图 17-1. 外部中断唤醒Stop模式时序 17-5 电气参数 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Oscillation Stabilization TIme RESET Occurs ~ ~ Stop Mode Normal Operating Mode Data Retention Mode ~ ~ VDD VDDDR Execution of STOP Instrction nRESET 0.8 VDD 0.2 VDD 注释 : tWAIT tWAIT 相当于 16 1/BT. 图 17-2. Stop 模式下复位时序 表 17-4. 输入/输出电容 (TA = 25 C ~ + 85 C, VDD = 0 V) 参数 标号 条件 最小值 典型值 最大值 单位 输入电容 CIN f = 1 MHz; 不测试的管脚接 VSS 10 pF 输出电容 COUT I/O 口电容 17-6 CIO 电气参数 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 17-5. 交流电气特性 (TA = 25C + 85C, VDD = 2.0 V 参数 SCK 周期 SCK 高、低电平宽度 相对于SCK 高电平的SI建立时间 相对于SCK 高电平的SI保持时间 相对于SO的SCK 输出延时 3.6 V) 标号 条件 最小值 典型值 最大值 单位 tKCY 外部 SCK 源 1,000 ns 内部 SCK 源 1,000 外部 SCK 源 500 内部 SCK 源 tKCY/250 外部 SCK 源 250 内部 SCK 源 250 外部 SCK 源 400 内部 SCK 源 400 外部 SCK 源 300 ns tKH, tKL tSIK tKSI tKSO 内部 SCK 源 250 中断输入高、低电平宽度 tINTH, tINTL 所有外部中断 VDD = 3 V 500 700 ns nRESET 输入低电平宽度 tRSL 输入 VDD = 3 V 10 s tINTL External Interrupt tINTH 0.8 VDD 0.2 VDD 注释 : 单位 tCPU 表示一个 CPU 时钟周期 . 图 17-3. 外部中断时序 17-7 电气参数 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X tRSL nRESET 0.2 VDD 图 17-4. RESET输入时序 tKCY tKL tKH SCK 0.8VDD 0.2VDD tSIK tKSI 0.8VDD SI 0.2VDD tKSO SO Output Data 图 17-5. 串行数据传输时序 17-8 电气参数 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 17-6. 电池电压检测电气特性 (TA = 25C, VDD = 2.0 V 参数 BLD工作电压 3.6 V) 标号 条件 最小值 典型值 最大值 单位 VDDBLD 2.0 3.6 V BLDCON.2-.0 = 000b 2.0 2.2 2.4 BLDCON.2-.0 = 101b 2.15 2.4 2.65 BLDCON.2-.0 = 011b 2.5 2.8 3.1 VDD = 3.3 V 70 120 VDD = 2.2 V 50 100 VBLD BLD电压 电流消耗 IBLD A BLD时滞电压 V BLDCON.2-0 = 000b, 101b, 011b 10 100 mV BLD 电路响应时间 TB Fw = 32.768 kHz 1 ms 最小值 典型值 最大值 单位 2.0 2.2 2.4 V 表 17-7. LVR (低电压复位) 电气特性 (TA = 25C) 参数 LVR 电压 标号 VLVR 条件 TA = 25 C VDD 电压上升时间 tR 10 s VDD 电压关断时间 tOFF 0.5 s V 10 100 mV 70 120 A LVR 时滞电压 电流消耗 IDDPR VDD = 3.3 V 注释: 1. 在 “Smart Option” 中使能LVR后,LVR电路就有电流消耗。 2. 只要芯片内部具有LVR,就会消耗一定的电流 tOFF tR VDD 0.9 VDD 0.1 VDD 图 17-6. LVR (低电压复位) 时序 17-9 电气参数 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 17-8. 主振荡器特性 (TA = 25C 振荡器 + 85C) 时钟配置 石英振荡器 参数 主振荡器频率 C1 测试条件 最小 值 典型 值 最大 值 单位 2.5 V 3.6 V 0.4 8 MHz 2.0 V 3.6 V 0.4 4.2 2.5 V 3.6 V 0.4 8 2.0 V 3.6 V 0.4 4.2 2.5 V 3.6 V 0.4 8 2.0 V 3.6 V 0.4 4.2 3.3 V 0.4 1 MHz XIN XOUT 陶瓷振荡器 主振荡器频率 C1 XIN XOUT 外部时钟源 XIN 管脚输入频率 XIN XOUT RC 振荡器 频率 XIN R XOUT 表 17-9. 副振荡器特性 (TA = 25C 振荡器 石英振荡器 + 85C) 时钟配置 参数 C1 测试条件 最小 值 典型值 最大 值 单位 副振荡频率 2.0 V 3.6 V 32 32.768 35 kHz XTIN 管脚输入 频率 2.0 V 3.6 V 32 100 XTIN XTOUT VREG 104 外部时钟 XTIN XTOUT 17-10 电气参数 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 17-10. 主振荡器稳定时间 (TA = 25 C + 85 C, VDD = 2.0 V 振荡器 石英振荡器 3.6 V) 测试条件 fx > 1 MHz 最小值 典型值 最大值 单位 40 ms 10 ms 62.5 1250 ns VDD 满足最小起振电压时振荡稳定。 陶瓷振荡器 外部时钟源 XIN 输入高低电平宽度 (tXH, tXL) 1/fx tXL tX XIN VDD-0.1 V 0.1 V 图 17-7. XIN 上测得的时钟时序 17-11 电气参数 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 17-11. 副振荡稳定时间 (TA = 25 C 振荡器 + 85 C, VDD = 2.0 V 测试条件 最小值 典型值 最大值 单位 – 10 s 5 15 s 石英振荡器 外部时钟源 3.6 V) XTIN 输入高低电平宽度 (tXH, tXL) 1/fxt tXTL tXTH XTIN VDD-0.1 V 0.1 V 图 17-8. XTIN 上测得的时钟时序 17-12 电气参数 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X Instruction Clock fx (Main/Sub oscillation frequency) 2 MHz 8 MHz 1.05 MHz 4.2 MHz 6.25 kHz(main)/8.2 kHz(sub) 400 kHz (main)/32.8 kHz(sub) 1 2 3 2.5 3.6 4 Supply Voltage (V) 指令执行频率 = 1/4n x 振荡器频率 (n = 1, 2, 8, 16) 图 17-9. 工作电压范围 表17-12. 内部Flash ROM 电气特性 (TA = 25 C 参数 + 85 C, VDD = 2.2 V 3.6 V) 标号 条件 最小值 典型值 最大值 单位 编程时间 (1) Ftp 30 s 芯片擦除时间 (2) Ftp1 50 ms 扇区擦除时间 (3) Ftp2 10 ms 读频率 FtRS 25 ns FNwe 10,000(4) Times 写/擦除次数 注释: 1. 编程时间是编程一字节(8 位)所需要的时间。 2. 芯片擦除时间是擦除整个16K 字节所需要的时间。 3. 扇区擦除时间是擦除一个扇区内所有128 字节所需要的时间。 4. Full-flash(S3F8275X) 的最大擦写次数是10,000次,half flash的最大擦写次数是100次 5. 芯片擦除只在工具编程模式下可用。 17-13 电气参数 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 注释 17-14 机械尺寸 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 18 机械尺寸 OVERVIEW概述 S3C8275X/C8278X/C8274X 现有的封装为 64管脚 QFP 和 LQFP 封装 23.90 0.30 0-8 20.00 0.20 14.00 0.20 + 0.10 - 0.05 0.10 MAX 64-QFP-1420F 0.80 0.20 17.90 0.30 0.15 #64 #1 1.00 + 0.10 0.40 - 0.05 0.15 MAX 0.05 MIN (1.00) 2.650.10 3.00 MAX 0.80 + 0.20 注释:标注尺寸为毫米 (mm)。 图 18-1. 64管脚 QFP 封装尺寸 (64-QFP-1420F) 18-1 机械尺寸 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 12.00 BSC 10.00 BSC 0-7 10.00 BSC 0.08 MAX 64-LQFP-1010 0.45~0.75 12.00 BSC 0.09~0.20 #64 #1 0.20 + 0.07 - 0.03 0.50 BSC 0.100.05 1.40 0.05 1.60 MAX 注释:标注尺寸为毫米 (mm)。 图 18-2. 64管脚 LQFP 封装尺寸 (64-LQFP-1010) 18-2 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 19 S3F8275X/F8278X/F8274X FLASH MCU S3F8275X/F8278X/F8274X FLASH MCU 概述 S3F8275X/F8278X/F8274X 单片CMOS MCU是 S3C8275X/C8278X/C8274X 的Flash MCU版本。它具有片上 16K/8K/4K 字节闪存空间,可以通过串行数据格式访问。 S3F8275X/F8278X/F8274X 和S3C8275X/C8278X/C8274X 在功能和管脚上都是完全兼容的。因为编程简单可重 复,所以S3F8275X/F8278X/F8274X 非常适合用作S3C8275X/C8278X/C8274X的评估芯片。 注释 本章介绍Flash MCU 的工具编程模式。如需了解用户编程模式,请参考第 16 章” 嵌入式闪存 接口” 。 19-1 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 64 63 62 61 60 59 58 57 56 55 54 53 52 SEG1/P5.6 SEG2/P5.5 SEG3/P5.4 SEG4/P5.3 SEG5/P5.2 SEG6/P5.1 SEG7/P5.0 SEG8/P4.7 SEG9/P4.6 SEG10/P4.5 SEG11/P4.4 SEG12/P4.3 SEG13/P4.2 S3F8275X/F8278X/F8274X FLASH MCU 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 S3F8275X S3F8278X S3F8274X (64-QFP-1420F) 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 SEG14/P4.1 SEG15/P4.0 SEG16/P3.7 SEG17/P3.6 SEG18/P3.5 SEG19/P3.4 SEG20/P3.3 SEG21/P3.2 SEG22/P3.1 SEG23/P3.0 SEG24/P2.7 SEG25/P2.6 SEG26/P2.5 SEG27/P2.4 SEG28/P2.3 SEG29/P2.2 SEG30/P2.1 SEG31/P2.0/VBLDREF P1.7/INT7 P0.2/INT2 P0.3/T1CLK P0.4/TAOUT P0.5/TBOUT P0.6/CLKOUT P0.7/BUZ P1.0/SCK P1.1/SO P1.2/SI P1.3/INT3 P1.4/INT4 P1.5/INT5 P1.6/INT6 20 21 22 23 24 25 26 27 28 29 30 31 32 SEG0/P5.7 COM0/P6.0 COM1/P6.1 COM2/P6.2 COM3/P6.3 VLC0 SDAT/VLC1 SCLK/VLC2 VDD/VDD VSS/VSS XOUT XIN VPP/TEST XTIN XTOUT nRESET/nRESET VREG P0.0/INT0 P0.1/INT1 图 19-1. S3F8275X/F8278X/F8274X 管脚分配(64-QFP-1420F) 19-2 S3F8275X/F8278X/F8274X FLASH MCU 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 SEG1/P5.6 SEG2/P5.5 SEG3/P5.4 SEG4/P5.3 SEG5/P5.2 SEG6/P5.1 SEG7/P5.0 SEG8/P4.7 SEG9/P4.6 SEG10/P4.5 SEG11/P4.4 SEG12/P4.3 SEG13/P4.2 SEG14/P4.1 SEG15/P4.0 SEG16/P3.7 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 S3F8275X S3F8278X S3F8274X (64-LQFP-1010) 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 SEG17/P3.6 SEG18/P3.5 SEG19/P3.4 SEG20/P3.3 SEG21/P3.2 SEG22/P3.1 SEG23/P3.0 SEG24/P2.7 SEG25/P2.6 SEG26/P2.5 SEG27/P2.4 SEG28/P2.3 SEG29/P2.2 SEG30/P2.1 SEG31/P2.0/VBLDREF P1.7/INT7 VREG P0.0/INT0 P0.1/INT1 P0.2/INT2 P0.3/T1CLK P0.4/TAOUT P0.5/TBOUT P0.6/CLKOUT P0.7/BUZ P1.0/SCK P1.1/SO P1.2/SI P1.3/INT3 P1.4/INT4 P1.5/INT5 P1.6/INT6 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 SEG0/P5.7 COM0/P6.0 COM1/P6.1 COM2/P6.2 COM3/P6.3 VLC0 SDAT/VLC1 SCLK/VLC2 VDD/VDD VSS/VSS XOUT XIN VPP/TEST XTIN XTOUT nRESET/nRESET 图 19-2. S3F8275X/F8278X/F8274X 管脚分配(64-LQFP-1010) 19-3 S3F8275X/F8278X/F8274X FLASH MCU S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 19-1. 闪存读写管脚描述 主芯片 编程过程中 管脚名 管脚名称 管脚 No. I/O 功能 VLC1 SDAT 7 I/O 串行数据管脚(读时为输出脚,写入时为输入 脚),管脚可设置为输入和推挽式输出模式。 VLC2 SCLK 8 I/O 串行时钟管脚(仅为输入管脚)。 TEST VPP 13 I S3F8278X/F8274X: Flash ROM单元读写供电管 脚。管脚检测到12.5V时进入Flash 写模式,检测 到3.3V时进入Flash 写模式。 S3F8275X: Flash ROM单元读写供电管脚。因为 内部自升压电路,所以无论Flash写或者读模式, 都只需要3.3V 。所以TEST管脚接到VDD即可。 nRESET nRESET 16 I 芯片初始化。 VDD/VSS VDD/VSS 9 / 10 I 逻辑供电管脚 表 19-2. S3F8275X/F8278X/F8274X 和 S3C8275X/C8278X/C8274X 特性比较 特性 S3F8275X/F8278X/F8274X S3C8275X/C8278X/C8274X 程序存储空间 16/8/4-K字节Flash ROM 工作电压 (VDD) 2.0 V Flash ROM 编程模式 VDD = 3.3 V, VPP(TEST)=12.5V 管脚配置(封装) 64-QFP, 64-LQFP 64-QFP, 64-LQFP Flash ROM可编程性 用户可多次编程 工厂烧程序 注释: 19-4 ~ 3.6 V S3F8275X中,VPP (Test) 管脚必须连到VDD。 16/8/4-K字节 掩模ROM 2.0 V ~ 3.6 V S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X S3F8275X/F8278X/F8274X FLASH MCU 编程工作模式特性 当在S3F8275X/F8278X/F8274X 的VPP(TEST)管脚上加上12.5V电压时,Flash ROM即进入编程模式。 编程工作模式(读,写,读保护)由下表控制信号选择。 表 19-3. 编程工作模式选择 VDD VPP (TEST) REG/MEM 地址 模式 R/W (A15-A0) 3.3 V 3.3 V 0 0000H 1 Flash ROM 读 12.5 V 0 0000H 0 Flash ROM 编程(写) 12.5 V 1 0E3FH 0 Flash ROM 读保护 注释: 1. S3F8275X中,VPP (Test) 管脚必须连到VDD。 2. "0" 表示逻辑低电平; "1" 代表逻辑高电平。 19-5 S3F8275X/F8278X/F8274X FLASH MCU S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 注释 19-6 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 20 开发工具 开发工具 概述 三星提供了一套强大易用的开发工具,该开发工具由一个主系统,一套调试工具和相应的支持软件组成。所谓主系 统,即任何一台使用 Win95/98/2000/XP 操作系统的标准电脑。成熟的调试工具包含了硬件和软件:一个强大的电 路仿真器,SMDS2+ 或OPENice,支持所有的 S3C7-, S3C9- 和 S3C8- MCU 家族。SMDS2+为SMDS2的最新 版本。三星同时可提供各种支持仿真器的软件,包括调试器、汇编编译器和仿真器安装设置程序。 SHINE 三星的在线仿真器主机接口,SHINE,是一个支持多窗口的SMDS2+调试器。SHINE可以提供上拉和弹出菜单,支 持鼠标操作,功能热键,和基于文本的超链接帮助。它具有先进的,多窗口的用户界面,强调用户体验。每一个窗 口都可调节大小、移动,高亮、增加或完全移除。 SAMA 编译器 三星的可调节微控制器汇编器,SAMA,是一个通用的汇编器,可以产生标准的hex格式的目标文件。汇编程序代码 包括程序数据目标文件和所需的SMDS程序控制数据。汇编程序时,SAMA需要一个源文件和一个包括产品特定信 息的辅助定义文件(DEF) SASM88 SASM88是一个可重定位的适用于三星S3C8系列微控制器的汇编器。SASM88将一个包括汇编语言的源文件汇编后 生成源代码,目标代码及注释。SASM88支持宏和条件编译。它在MS-DOS模式下运行。它仅产生可重定位的目标 文件。因此用户需要链接目标文件。一个目标文件可以和另一个目标文件进行链接后装载到存储器中。 HEX2ROM HEX2ROM将由汇编器产生的hex格式的文件转换生成可执行的存储器代码。ROM代码需要烧写到掩模ROM中。在 生产ROM 代码时,ROM中未使用的字节用"FF"来填充以达到适合目标芯片的最大的存储器大小。 目标板 S3C8 - 系列 MCU 调试时需要目标板,该板上提供了所有需要的目标系统连线和调试接口。 20-1 开发工具 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X IBM-PC AT or Compatible RS-232C SMDS2+ Target Application System PROM/OTP Writer Unit RAM Break/Display Unit BUS Probe Adapter Trace/Timer Unit SAM8 Base Unit POD Power Supply Unit 图 20-1. 开发系统配置 (SMDS2+) 20-2 TB8275/8/4 Target Board EVA Chip 开发工具 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X TB8275/8/4 目标板 TB8275/8/4 是 S3C8275X/C8278X/C8274X 专用目标板。支持SMDS2+. TB8275/8/4 IDLE + OFF STOP + To User_VCC ON 25 40 GND VDD VLC0 VLC1 VLC2 External LCD Bias MDS JP6 Y1(sub-clock) XTAL 7411 VCC X-TAL RESET 1 41 J101 160 QFP S3E8270 EVA Chip 1 2 41 40 79 42 121 80 Device Selection 120 Select Smart Option Source Low: S3F8278/4 Low: Internal High: S3F8275 High: External 39 80 SW1 Smart Option 40-pin connector 81 1 J102 40-pin connector 100-pin connector 160 SMDS2 SMDS2+ 图 20-2. TB8275/8/4 目标板配置 20-3 开发工具 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 20-1. TB8275/8/4电源选择设置 "To User_Vcc" 设置 工作模式 Off SMDS2/SMDS2+ 提供VCC 给 TB8275 TB8278 TB8274 To User_VCC On 注释 VSS Target System 目标板 (评估芯片)和目标系 统。 Target System SMDS2/SMDS2+只提供VCC 给目标板 (评估芯片). 目标系统必需有自己的电源. VCC VCC SMDS2/SMDS2+ TB8275 TB8278 TB8274 To User_VCC Off On External VCC VSS VCC SMDS2/SMDS2+ NOTE: 下面的标记 "To User_Vcc" 表示两点之间短接: 表 20-2. TB8275/8/4主时钟选择控制 主时钟设置 工作模式 XIN MDS XTAL 注释 当把目标板链接到 SMDS2/SMDS2+. 时,设定XI 切换到 “MDS” EVA Chip S3E8270 XIN XOUT No Connection 100 Pin Connector SMDS2/SMDS2+ 设定 XI 切换到 “XTAL”,使用 目标板上自身的时钟源 XIN XTAL MDS EVA Chip S3E8270 XIN XOUT XTAL Target Board 20-4 开发工具 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 20-3. TB8275/8/4的Smart Option源设置 "Smart Option Source" Settings Operating Mode Select Smart Option Source Internal TB8275/8/4 External Select Smart Option Source Internal TB8275/8/4 External Comments Smart Option 由外部开关来选 择(SW1) Target System Smart Option 由芯片内部的 smart option 区域决定 (ROM 的003EH–003FH). 但是此选 择不可用。 Target System 表 20-4. TB8275/8/4的Smart Option设置 "Smart Option" Settings Smart Option SW1 Low : "0" Comments Smart Option 由此开关的状态确定。B2–B0 对应 003EH.2–.0. B7–B5 对应 003EH.7–.5. B8 对应 003FH.0. B 4–B3 没有连接。 B0 B1 B2 B3 B4 B5 B6 B7 B8 High: "1" 20-5 开发工具 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 表 20-5. TB8275/8/4的芯片选择 "Device Selection" Settings Operating Mode Comments 选择 TB8275 Device Selection S3F8278/4 S3F8275 TB8275 Target System 选择 TB8278/4 Device Selection S3F8278/4 S3F8275 TB8278/4 Target System SMDS2+ 选择 (SAM8) 为了实现SMDS2+的向程序存储器中写入数据的功能,目标板连接到SMDS2+后,需要对开关进行如下的设置。否 则,此功能不可用。 表 20-6. SMDS2+ 工具选择设置 "JP2" 设置 工作模式 JP2 SMDS2 SMDS2+ R/W SMDS2+ IDLE LED 黄色的 LED 亮时表示 评估芯片(S3E8270)进入了idle 模式. STOP LED 红色的 LED 亮表示评估芯片(S3E8270) 进入了stop 模式. 20-6 R/W Target System 开发工具 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X J101 P6.0/COM0 P6.2/COM2 VLC0 VLC2 VSS N.C N.C nRESET P0.0/INT0 P0.2/INT2 P0.4/TAOUT P0.6/CLKOUT P1.0/SCK P1.2/SI P1.4/INT4 P1.6/INT6 N.C N.C N.C N.C 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 INT7/P1.7 SEG30/P2.1 SEG28/P2.3 SEG26/P2.5 SEG24/P2.7 SEG22/P3.1 SEG20/P3.3 SEG18/P3.5 SEG16/P3.7 SEG14/P4.1 SEG12/P4.3 SEG10/P4.5 SEG8/P4.7 SEG6/P5.1 SEG4/P5.3 SEG2/P5.5 N.C N.C N.C N.C 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 40-Pin DIP Connector 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 40-Pin DIP Connector SEG31/P2.0/VBLDREF SEG29/P2.2 SEG27/P2.4 SEG25/P2.6 SEG23/P3.0 SEG21/P3.2 SEG19/P3.4 SEG17/P3.6 SEG15/P4.0 SEG13/P4.2 SEG11/P4.4 SEG9/P4.6 SEG7/P5.0 SEG5/P5.2 SEG3/P5.4 SEG1/P5.6 N.C N.C N.C N.C 图 20-3. TB8275/8/4的40脚接口(J101, J102) Target Board J101 40-Pin Connector 1 Target Board J102 2 33 J102 34 J101 33 34 1 2 63 64 31 32 Target Cable for 40-pin Connector 31 32 63 64 40-Pin Connector SEG0/P5.7 COM1/P6.1 COM3/P6.3 VLC1 VDD N.C TEST N.C VREG INT1/P0.1 T1CLK/P0.3 TBOUT/P0.5 BUZ/P0.7 SO/P1.1 INT3/P1.3 INT5/P1.5 N.C N.C N.C N.C J102 图 20-4.专为64-QFP封装的S3E8270的数据线 20-7 开发工具 S3C8275X/F8275X/C8278X/F8278X/C8274X/F8274X 注释 20-8 SAMSUNG ELECTRONICS MCU PM: 刘志勇 Steven Liu YOSUN SHANGHAI CORP.LTD Tel: 021-58365838 Ext.7835 Fax: 021-58355878 H P: 13818363447 QQ: 52647598 SKYPE: FVSTEVEN MSN: [email protected] E-Mail: [email protected]