《单片机原理及应用》第十章 高速SOC单片机C8051F_第1页
《单片机原理及应用》第十章 高速SOC单片机C8051F_第2页
《单片机原理及应用》第十章 高速SOC单片机C8051F_第3页
《单片机原理及应用》第十章 高速SOC单片机C8051F_第4页
《单片机原理及应用》第十章 高速SOC单片机C8051F_第5页
已阅读5页,还剩232页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机原理及应用第10章 高速 SOC单片机C8051FC8051F系列单片机是集成的混合信号片上系统SOC(System on chip),具有与MCS-51内核及指令集完全兼容的微控制器,除了具有标准8051的数字外设部件之外,片内还集成了数据采集和控制系统中常用的模拟部件和其它数字外设及功能部件。 该产品原来是总部位于美国德克萨斯州的美国Cygnal 公司的,这是1999年3月成立的一家新兴的半导体公司,公司专业从事混合信号片上系统单片机的设计与制造,于2003年并入SiliconLaboratories公司。 10.1 C8051F系列单片机特点C8051F系列单片机是真正能独立工作的

2、片上系统(SOC)。CPU有效地管理模拟和数字外设,可以关闭单个或全部外设以节省功耗。FLASH存储器还具有在系统重新编程的能力,即可用作程序存储器又可用作于非易失性数据存储 。片内JTAG调试电路允许使用安装在最终应用系统上的产品SCM进行非侵入式(不占用片内资源)、全速、在系统调试。该调试系统支持观察和修改存储器和寄存器,支持断点、观察点、单步及运行和停机命令。 CIP-51内核 C8051F系列单片机内核采用与MCS-51兼容的CIP-51。在一个标准的8051中,除MUL和DIV以外所有指令都需要12或24个系统时钟周期,最大系统时钟频率为12-24MHz。 CIP-51内核,70%的

3、指令的执行时间为1或2个系统时钟周期,只有4条指令的执行时间大于4个系统时钟周期。 指令数与系统时钟周期数的关系 执行周期数122/333/444/558指令数265051673121微控制器内核峰值执行速度比较 10.2 C8051F020单片机10.2.1 概述C8051F020系列器件使用Cygnal 的专利CIP-51微控制器内核。CIP-51与MCS-51TM指令集完全兼容,可以使用标准803x/805x的汇编器和编译器进行软件开发。CIP-51内核具有标准8052的所有外设部件,包括5个16位的计数器/定时器、两个全双工UART、256字节内部RAM、128字节特殊功能寄存器(SF

4、R)地址空间及8个字节宽的I/0的端口。下面列出了一些主要特性:高速、流水线结构的8051 兼容的CIP-51 内核(可达25MIPS)全速、非侵入式的在系统调试接口(片内)真正12位、100 ksps 的8通道ADC,带PGA和模拟多路开关真正8位500 ksps 的ADC,带PGA和8通道模拟多路开关两个12 位DAC,具有可编程数据更新方式64K 字节可在系统编程的FLASH 存储器4352(4096+256)字节的片内RAM可寻址64K字节地址空间的外部数据存储器接口硬件实现的SPI、SMBus/ I2C 和两个UART 串行接口5个通用的16位定时器具有5个捕捉/比较模块的可编程计数

5、器/定时器阵列片内看门狗定时器、VDD 监视器和温度传感器调试环境示意图 Silicon Labs 提供一个集成开发环境(IDE),包括编辑器、宏汇编器、调试器和编程器。 C8051F020芯片示意图 C8051F020原理框 10.2.2 存贮器组织 1 程序存贮器 CIP-51 有64K 字节的程序存储器空间。 FLASH 存储器,地址0 x0000 到0 xFFFF。存储器中有512 字节(0 xEE00 0 xFFFF)保留给工厂使用,不能用于存储用户程序。通过设置程序存储写允许位(PSCTL.0)用MOVX 指令对程序存储器写入。这一特性为CIP-51 提供了更新程序代码和将程序存储

6、器空间用于非易失性数据存储的机制。 1 程序存贮器C8051F020的FLASH存储器中有一个附加的128字节的扇区,可用于非易失性数据存储。尽管FLASH存储器可以每次写一个字节,必须首先擦除整个扇区。但128字节的扇区规模使数据更新更加容易。该128字节的扇区在64K字节FLASH存储器中是双映射的;它的地址范围是从0 x00到Ox7F 。为了访问该扇区,PSCTL寄存器中的SFLE位必须被设置为逻辑“1”。该扇区不能用于存储程序代码。2 内部数据存贮器 256字节的RAM,地址0 x00到0 xFF。 低128 字节用于通用寄存器和临时存储器。寻址方式:直接或间接。0 x000 x1F:

7、4个通用寄存器区,每个区有8个寄存器。0 x200 x2F:既可以按字节寻址又可以作为128个位地址用直接位寻址方式访问。高128字节只能用间接寻址访问。 3. 存储器模式选择可以用EMI0CF寄存器中EMIF模式选择位将外部数据存储器空间配置为四种工作模式之一。EMI0CF的格式如下:其中:位7-6:未用。读=00b,写=忽略。位5:PRTSEL:EMIF端口选择位0:EMIF在P0-P3。1:EMIF在P4-P7。SFR地址:0 xA3位0位1位2位3位4位5位6位700000011EALE0EALE1EMD0EMD1EMD2PRTSEL-复位值R/WR/WR/WR/WR/WR/WR/WR

8、/W位4:EMD2:EMIF复用方式选择位0:EMIF工作在地址/数据复用方式。1:EMIF工作在非复用方式 (分离的地址和数据引脚)。位3-2:EMDl0:EMIF模式选择位这两位控制外部存储器接口的工作模式00:只用内部存储器:MOVX只寻址片内XRAM。所有有效地址都指向片内存储器空间01:不带块选择的分片方式。10:带块选择的分片方式。11:只用外部存储器:MOVX只寻址片外XRAM。片内XRAM对CPU为不可见。位1-0:EALEl-0:ALE脉冲宽度选择位 (只在EMD2=0时有效)00:ALE高和ALE低脉冲宽度=1个SYSCLK周期。01:ALE高和ALE低脉冲宽度=2个SYS

9、CLK周期。10:ALE高和ALE低脉冲宽度=3个SYSCLK周期。11:ALE高和ALE低脉冲宽度=4个SYSCLK周期。外部数据存储器工作模式 复用和非复用选择 外部存储器接口可以工作在复用方式或非复用方式,由EMD2位(EMI0CF.4)的状态决定。 (1)复用方式配置在复用方式,数据总线和地址总线的低8位共享相同的端口引脚:AD7:0。在该方式下,要用一个外部锁存器(74HC373 或相同功能的逻辑门)保持RAM 地址的低8 位。外部锁存器由ALE(地址锁存使能)信号控制,ALE 信号由外部存储器接口逻辑驱动 外部存储器接口复用方式 复用方式16位MOVX指令的读写时序 非复用方式配置

10、 在非复用方式,数据总线和地址总线是分开的。由于EMIF可被配置为使用低I/O端口 (P0-P3) 或高I/O端口 (P4-P7)。 如配置使用低I/O端口(P0-P3),则地址总线高8位使用P1口、地址总线低8位使用P2口,数据总线使用P3口,/RD使用P0.6,/WR使用P0.7。 外部存储器接口非复用方式 非复用方式16位MOVX指令的读写时序 4 特殊功能寄存器 0 x80 0 xFF :直接寻址存储器空间为特殊功能寄存器SFR(Special Function Registers)的地址空间。 与内部RAM高128地址在物理上是两个空间。SFR 提供对CIP-51的资源和外设的控制及

11、CIP-51与这些资源和外设之间的数据交换。 CIP-51有120多个SFR,具体见SFR表格。主要的SFR有ACC(Accumulator)累加器 、B(B Register)寄存器 、SP(Stack Pointer)是8位的堆栈指针 、DPTR(Data Pointer)为16位的数据指针 、PSW(Progrram Status Word)是程序状态字 。PSW的各位定义 ()位7: CY:进位标志。当最后一次算术操作产生进位(加法)或借位(减法)时,该位置1。其它算术操作将其清0。位6: AC:辅助进位标志。当最后一次算术操作向高半字节有进位(加法)或借位(减法)时,该位置1。其它算

12、术操作将其清0。 R/WR/WR/WR/WR/WR/WR/WR复位值CYAC F0RS1RS0OVF1PARITY00000000位7位6位5位4位3位2位1位0(可位寻址)SFR地址:0 xD0PSW的各位定义 ()位5: F0:用户标志0。这是一个可位寻址、受软件控制的通用标志位。位4-3: RS1-RS0:寄存器区选择。RS1 RS0寄存器区片内RAM地址0 0第0组0 x00-0 x070 1第1组0 x08-0 x0F1 0第2组0 x10-0 x171 1第3组0 x18-0 x1FPSW的各位定义 ()位2: OV:溢出标志。该位在下列情况下被置1:ADD、ADDC 或SUBB

13、指令引起符号位变化溢出。MUL 指令引起溢出(结果大于255)。DIV 指令的除数为0。位1: F1:用户标志1。这是一个可位寻址、受软件控制的通用标志位。位0: PARITY:奇偶标志。若累加器中有奇数个“1”时该位置1,有偶数个“1”时清0。10.2.3 I/0口与数字交叉开关 C8051F020单片机有8个8位I/O端口、64个数字I/O引脚。低端口(P0、P1、P2 和P3)既可以按位寻址也可以按字节寻址。高端口(P4、P5、P6 和P7)只能按字节寻址。所有引脚都耐5V 电压,都可以被配置为漏极开路或推挽输出方式和弱上拉。 C8051F020 单片机有大量的数字资源需要通过4个低端I

14、/O端口P0、P1、P2和P3才能使用。P0、P1、P2和P3中的每个引脚既可定义为通用的端口I/O(GPIO)引脚,又可以分配给一个数字外设或功能(例如:UART0 或/INT1)。 这种资源分配的灵活性是通过使用优先权交叉开关译码器实现的。低端I/O端口的功能框图 1.端口0-3和优先权交叉开关译码器或称为“交叉开关”,按优先权顺序将端口0 3 的引脚分配给器件上的数字外设(UART、SMBus、PCA、定时器等)。端口引脚的分配顺序是从P0.0 开始,可以一直分配到P3.7。为数字外设分配端口引脚的优先权顺序为UART0具有最高优先权,而CNVSTR具有最低优先权。优先权交叉开关的配置是

15、通过3个特殊功能寄存器XBR0、XBR1、XBR2来实现的,当交叉开关配置寄存器XBR0、XBR1 和XBR2中外设的对应使能位被设置为逻辑1时,交叉开关将端口引脚分配给外设。 优先权交叉开关译码表 2.交叉开关引脚分配示例 配置交叉开关:系统使用UART0、SMBus、UART1、/INT0 和/INT1(共8 个引脚)。将外部存储器接口配置为复用方式并使用低端口。将P1.2、P1.3 和P1.4 配置为模拟输入,以便用ADC1 测量加在这些引脚上的电压。 配置步骤:1按UART0EN = 1、UART1E = 1、SMB0EN = 1、INT0E = 1、INT1E = 1 和EMIFLE

16、 =1设置XBR0、XBR1 和XBR2,则有:XBR0 = 0 x05,XBR1 = 0 x14,XBR2 = 0 x06。2将外部存储器接口配置为复用方式并使用低端口,有:PRTSEL = 0(EMI0CF.5),EMD2 (EMI0CF.4)= 0。3将作为模拟输入的端口1 引脚配置为模拟输入方式:设置P1MDIN 为0 xE3(P1.4、P1.3 和P1.2 为模拟输入,所以它们的对应P1MDIN 被设置为逻辑0)。实例的交叉开关配置表 10.3 模/数转换器A/D是将模拟量转换成数字量的器件。模拟量可以是电压、电流等电信号,也可以是声、光、压力、湿度、温度等随时间连续变化的非电的物理

17、量。非电的模拟量可通过合适的传感器(如光电传感器、压力传感器、温度传感器)转换成电信号。C8051F020片内包含一个9通道的12位的模数转换器ADC0和8通道8位的模数转换器ADC1。1. ADC结构 C8051F020的ADC0子系统就是一个100ksps、12 位分辨率的逐次逼近寄存器型ADC。 它包括一个9通道的可编程模拟多路选择器(AMUX0),一个可编程增益放大器(PGA0)和一个100ksps、12 位分辨率的逐次逼近寄存器型ADC,ADC中集成了跟踪保持电路和可编程窗口检测器。 ADC0子系统功能框图 ADC0的运行主要与图上标的10个SFR有关。8个外部输入的模拟量可以通过通

18、道配置寄存器AMX0CF设定为单端输入或双端输入;8个外部输入的模拟量和一个内部温度传感器量通过通道选择寄存器AMX0SL设定在某一时刻通过多路选择器的模拟量;通过ADC配置寄存器ADC0CF设定ADC转换速度和对模拟量的放大倍数;由控制寄存器ADC0CN对ADC进行模拟量转换的启动、启动方式、采用保持、转换结束、数字量格式等进行设定;12位的转换好的数字量存放在数据字寄存器ADC0H、ADC0L中;ADC0中提供了可编程窗口检测器,通过上下限寄存器ADC0GTH、ADC0GTL、ADC0LTH、ADC0LTL设定所需要的比较极限值。在进行模拟量转换前设定好以上SFR,CPU就按设定好的模式在

19、模拟量转换好时用指令读出数据寄存器中的数字量或在中断服务程序中读取数字量。然后在进行下一次的转换。 2.模拟多路开关和PGA (1)模拟多路选择器AMUX(Analog Multiplexer)中的8个通道用于外部测量,而第九通道在内部被接到片内温度传感器。 通道选择寄存器AMX0SL配置寄存器AMX0CF进行选择和配置将AMUX 输入对编程为差分或单端方式。 5.1.3 2.模拟多路开关和PGA (2)配置寄存器AMX0CF的格式如下: R/WR/WR/WR/WR/WR/WR/WR/W复位值AIN67ICAIN45ICAIN23ICAIN01IC00000000位7位6位5位4位3位2位1位

20、0SFR地址:0 xBA位3 :AIN67IC:AIN6、AIN7 输入对配置位 0: AIN6 和AIN7 为独立的单端输入 1: AIN6, AIN7 为+, -差分输入对其余位类推。 2.模拟多路开关和PGA(3)通道选择寄存器AMX0SL的格式如下: R/WR/WR/WR/WR/WR/WR/WR/W复位值AMX0AD3AMX0AD2AMX0AD1AMX0AD000000000位7位6位5位4位3位2位1位0SFR地址:0 xBB位3-0: AMX0AD3-0: AMUX0 地址位0000-1111b: 根据不同组合选择ADC 输入的通道。 参见书上的表格2.模拟多路开关和PGA(4)P

21、GA (programmable gain amplifier),可编程增益放大器.它对AMUX 输出信号的放大倍数由ADC0 配置寄存器ADC0CF中的AMP0GN2-0 确定。PGA 增益可以用软件编程为0.5、1、2、4、8 或16,复位后的默认增益为1。注意,PGA0 的增益对温度传感器也起作用。 3. ADC的工作过程 (1)(1)转换过程ADC0的转换过程由控制寄存器ADC0CN来设置控制寄存器ADC0CN的格式如下:R/WR/WR/WR/WR/WR/WR/WR/W复位值AD0ENAD0TMAD0INTAD0BUSYAD0CM1AD0CM0AD0WINTAD0LJST0000000

22、0位7位6位5位4位3位2位1位0(可位寻址)SFR地址:0 xE83. ADC的工作过程(2)C8051F020的ADC0有4 种转换启动方式,由ADC0CN 中的ADC0 启动转换方式位(AD0CM1,AD0CM0)的状态决定。 00:向AD0BUSY 写1 启动ADC0 转换。01:定时器3 溢出启动ADC0 转换。10:CNVSTR 上升沿启动ADC0 转换。11:定时器2 溢出启动ADC0 转换。 AD0BUSY 位在转换期间被置1,转换结束后复0 建议的查询步骤如下:(1) 写0到AD0INT;(2) 向AD0BUSY 写1;(3) 查询并等待AD0INT 变1;(4) 处理ADC

23、0 数据(2) 跟踪方式 ADC0CN 中的AD0TM 位控制ADC0 的跟踪保持方式。在缺省状态,除了转换期间之外ADC0 输入被连续跟踪。当AD0TM =1,ADC0 工作在低功耗跟踪保持方式。每次转换之前都有3 个SAR 时钟的跟踪周期(在启动转换信号有效之后)。当CNVSTR 信号用于在低功耗跟踪保持方式启动转换时,ADC0 只在CNVSTR 为低电平时跟踪;在CNVSTR 的上升沿开始转换。当整个芯片处于低功耗待机或休眠方式时,跟踪可以被禁止(关断)。12位ADC 跟踪和转换时序 (3)建立时间要求 当ADC0 输入配置发生改变时(AMUX 或PGA 的选择发生变化),在进行一次精确

24、的转换之前需要有一个最小的跟踪时间。 对于一个给定的建立精度(SA),所需要的ADC0 建立时间可以用方程估算: ADC0 建立时间 :SA 是建立精度,用一个LSB 的分数表示(例如,建立精度0.25 对应1/4 LSB);t 为所需要的建立时间,以秒为单位;RTOTAL 为ADC0 模拟多路器电阻与外部信号源电阻之和;n 为ADC0 的分辨率,用比特表示。 ADC0 等效输入电路 (4) ADC0 可编程窗口检测器 ADC0 可编程窗口检测器提供一个中断,当ADC0转换值在ADC0下限(大于)寄存器ADC0GTH:ADC0GTL和ADC0上限(小于)寄存器ADC0LTH:ADC0LTL范围

25、之内,并且中断开启时,引发相应中断。 ADC0 右对齐的单端数据窗口中断示例 10.4 电压输出数/模转换器C8051F020 单片机有两个片内12 位电压方式数/模转换器(DAC)。每个DAC的输出摆幅均为0V 到(VREF-1LSB),对应的输入码范围是0 x000 到0 xFFF。控制寄存器DAC0CN 和DAC1CN 使能/禁止DAC0 和DAC1。在被禁止时,DAC 的输出保持在高阻状态,DAC 的供电电流降到1A 或更小。每个DAC 的电压基准在VREFD引脚提供。如果使用内部电压基准,为了使DAC 输出有效,该基准必须被使能。 DAC 功能框图 控制DAC工作的主要是控制寄存器D

26、AC0CN和DAC1CN,两个SFR分别控制DAC0和DAC1,以DAC0CN为例来说明。 R/WR/WR/WR/WR/WR/WR/WR/W复位值DAC0ENDAC0MD1DAC0MD0DAC0DF2DAC0DF1DAC0DF000000000位7位6位5位4位3位2位1位0SFR地址:0 xD4位7: DAC0EN:DAC0 使能位 位4-3: DAC0MD1-0:DAC0 方式位。00:DAC 输出更新发生在写DAC0H 时。01:DAC 输出更新发生在定时器3 溢出时。10:DAC 输出更新发生在定时器4 溢出时。11:DAC 输出更新发生在定时器2 溢出时。 位2-0: DAC0DF2

27、-0:DAC0 数据格式位:000:DAC0 数据字的高4 位在DAC0H3:0,低字节在DAC0L 中。 其余类推。DAC0HDAC0LMSBLSB001:DAC0 数据字的高5 位在DAC0H4:0,低7 位在DAC0L7:1。 DAC0HDAC0LMSBLSB1. DAC 输出更新 每个DAC 都具有灵活的输出更新机制,允许全量程内平滑变化并支持无抖动输出更新,适合于波形发生器应用。1根据软件命令更新输出 在缺省方式下(DAC0CN.4:3 =00),DAC0 的输出在写DAC0 数据寄存器高字节(DAC0H)时更新。注意:写DAC0L 时数据被保持,对DAC0 输出没有影响,直到对DA

28、C0H的写操作发生。 2基于定时器溢出的输出更新 当DAC0MD位(DAC0CN.4:3)被设置为01、10或11时(分别为定时器3、定时器4 或定时器2),对DAC 数据寄存器的写操作被保持,直到相应的定时器溢出事件发生时DAC0H:DAC0L 的内容才被复制到DAC 输入锁存器,允许DAC 数据改变为新值。2DAC 输出定标/调整 对DAC0 进行写入操作之前应对输入数据移位,以正确调整DAC 输入寄存器中的数据。这种操作一般需要一个或多个装入和移位指令,因而增加软件开销和降低DAC的数据通过率。数据格式化功能为用户提供了一种能对数据寄存器DAC0H 和DAC0L 中的数据格式编程的手段。

29、三个DAC0DF 位(DAC0CN.2:0)允许用户在5 种数据字格式指定一种,见DAC0CN 寄存器定义。5.2.5 数模转换举例 D/A转换器的编程相对A/D转换器要简单。按照要求设置好输出更新的条件,将要转换的数值量送到DAC数据寄存器就行。下面是产生锯齿波和阶梯波的示例。将DAC0设置成输出更新发生在写DAC0H 时,即直接更新。DAC1设置成输出更新发生在定时器2 溢出时。 产生阶梯波 DAC0用程序更新输出,产生一个阶梯波形。void main(void)int i;config();for(i=0;i=4095;i+)/形成阶梯波形DAC0=i;/送数字量到DAC0直接更新输出d

30、1ms(T); 延时程序 void d1ms(int count) int j;while(count-!=0)for(j=0;j100;j+);配置程序 void config (void) int n = 0;WDTCN = 0 x07;/ 看门狗控制寄存器 WDTCN = 0 xDE; / 禁止看门狗 WDTCN = 0 xAD;OSCXCN = 0 x67;/ 外部振荡器寄存器,采用11.0952MHz for (n = 0; n =0 x1000)DAC1=0;/形成锯齿波配制程序void config (void) int n = 0;WDTCN = 0 x07;/ 看门狗控制寄存

31、器 WDTCN = 0 xDE; / 禁止看门狗 WDTCN = 0 xAD;OSCXCN = 0 x67;/ 外部振荡器寄存器,采用11.0952MHz for (n = 0; n 255; n+) ; / 等待振荡器启动 while ( (OSCXCN & 0 x80) = 0 ); / 等待晶振稳定 REF0CN = 0 x02;/ 内部偏压发生器工作 DAC1CN = 0 x98;/ 允许DAC1,T2溢出中断更新输出,数据右对齐 DAC1L = 0 x00;/ DAC1数据寄存器初值 DAC1H = 0 x00; RCAP2H = 0 x05; / 重新装入的时间常数 RCAP2L

32、= 0 x00; TH2 = 0 x05; TL2 = 0 x00; / 初始值 T2CON = 0 x04; / 启动T2 10.5 电压基准 电压基准电路为控制ADC 和DAC 模块工作提供了灵活性。有三个电压基准输入引脚,允许每个ADC 和两个DAC 使用外部电压基准或片内电压基准输出。通过配置VREF 模拟开关,ADC0 还可以使用DAC0 的输出作为内部基准,ADC1 可以使用模拟电源电压作为基准。 电压基准功能框图 电压基准的设置由基准电压控制寄存器REF0CN来完成,它可使能/禁止内部基准发生器和选择ADC0、ADC1的基准输入。 位4: AD0VRS:ADC0 电压基准选择位0

33、:ADC0 电压基准取自VREF0 引脚。1:ADC0 电压基准取自DAC0 输出。位3: AD1VRS:ADC1 电压基准选择位0:ADC1 电压基准取自VREF1 引脚。1:ADC1 电压基准取自AV+。R/WR/WR/WR/WR/WR/WR/WR/W复位值AD0VRSAD1VRSTEMPEBIASEREFBE00000000位7位6位5位4位3位2位1位0SFR地址:0 xD1位2: TEMPE:温度传感器使能位0:内部温度传感器关闭。1:内部温度传感器工作。位1: BIASE:ADC/DAC 偏压发生器使能位(使用ADC 和DAC 时该位必须为1)0:内部偏压发生器关闭。1:内部偏压发

34、生器工作。位0: REFBE:内部电压基准缓冲器使能位0:内部电压基准缓冲器关闭。1:内部电压基准缓冲器工作。内部电压基准提供从VREF 引脚输出。 10.6 SMBus 为了使智能仪器微型化,首先要设法减少仪器所用芯片的引脚数。这样一来过去常用的并行总线接口方案由于需要较多的引脚而不得不舍弃,转而采用只需少量引脚数的串行总线接口方案。I2C ( Inter-Integrated Circuit )和SPI ( Serial Peripheral Interface )就是两种常用的串行总线接口。I2C双总线则只需2根引脚线就可与外部设备相连。 而SPI三线总线只需3根引脚线就可与外部设备相连

35、。采用I2C或SPI总线接口的器件相当丰富,如存储器、A/D、D/A、日历时钟、键盘显示等,采用串行总线扩展单片机外围器件正成为一种理想的选择。目前,多数单片机内部都集成有I2C总线和SPI总线接口,对于内部没有这些接口的单片机,也可以通过并行口线用软件仿真的方法来实现。C8051F单片机内部集成有与I2C公用双总线完全兼容的SMBus总线和SPI总线接口。I2C(IIC)总线是Philip公司推出的芯片间串行传输总线,C8051F的SMBus与其完全兼容。SMBus总线采用了器件地址硬件设置的方法,通过软件寻址,完全避免了用片选线对器件的寻址方法,从而使硬件系统扩展简单灵活。SMBus总线传

36、输中的所有状态都生成相应的状态码,系统中的主机能够依照这些状态码自动地进行总线管理,用户只要在程序中装入这些标准处理模块,根据数据操作要求完成总线的初始化,启动总线就能自动完成规定的数据传送操作。SMBus只用两根线就可以实现同步串行接收和发送:(1)串行数据线SDA ( Serial Data )(2)串行时钟线SCL ( Serial Clock ) SMBus发送和接收只能分时进行 1. SMBus协议主器件产生通信的开始条件(SCL高电平时,SDA产生负跳变)和结束条件(SCL高电平时,SDA产生正跳变)SDA线上的数据在SCL高电平期间必须保持稳定(高电平为1,低电平为0),否则会被

37、误认为是开始条件或结束条件,只有在SCL低电平期间才能改变SDA线上的数据SMBus总线上传输的每一个字节均为8位,但每启动一次SMBus总线,其后传输的数据字节数是没有限制的。 每传输完一个字节后都必须有一个接收器回应的应答位(低电平为应答信号ACK,高电平为非应答信号NACK),并且首先发出的是数据的最高位。 SMBus时序SMBus协议有两种数据传输类型(按传输方向):主发从收(称为写操作)和从发主收(称为读操作)。两种传输都由主器件启动,主器件还提供串行时钟。地址字节的最低位表示传输方向位,1读(R)操作,0写(W)。 如果多个主器件同时启动传输,仲裁机制将保证有一个主器件会赢得总线。

38、任何发送起始条件(START)和从器件地址的器件就成为该次传输的主器件,没有必要在系统中指定主器件。典型的SMBus传输包括起始条件(START)、地址字节(位7-1:7位从地址;位0:R/W方向位)、一个或多个后跟接收应答(ACK或NACK)的数据字节和一个停止条件(STOP,由主器件产生)。 典型SMBus数据传输过程(1)总线仲裁一个主器件只能在总线空闲时启动一次传输。在一个停止条件之后或SCL和SDA保持高电平超过指定时间,则总线是空闲的。由于产生起始条件的器件并不知道其它器件也正想占用总线,所以可能会有两个或多个主器件在同一时刻产生起始条件,这时SMBus使用仲裁机制迫使一个主器件放

39、弃总线。这些主器件继续发送起始条件,直到其中一个主器件发送高电平而其它主器件在SDA上发送低电平。由于总线是漏极开路的,总线将被拉为低电平。发送高电平的主器件将检测到这个SDA低电平并放弃总线。赢得总线的器件继续其数据传输过程,而未赢得总线的器件成为从器件。该仲裁机制是非破坏性的,总会有一个器件赢得总线,不会发生数据丢失。1总线仲裁一个主器件只能在总线空闲时启动一次传输。在一个停止条件之后或SCL和SDA保持高电平超过指定时间,则总线是空闲的。由于产生起始条件的器件并不知道其它器件也正想占用总线,所以可能会有两个或多个主器件在同一时刻产生起始条件,这时SMBus使用仲裁机制迫使一个主器件放弃总

40、线。这些主器件继续发送起始条件,直到其中一个主器件发送高电平而其它主器件在SDA上发送低电平。由于总线是漏极开路的,总线将被拉为低电平。发送高电平的主器件将检测到这个SDA低电平并放弃总线。赢得总线的器件继续其数据传输过程,而未赢得总线的器件成为从器件。该仲裁机制是非破坏性的,总会有一个器件赢得总线,不会发生数据丢失。(2)时钟低电平扩展SMBus提供了一种同步机制,允许不同速度的器件共存于一个总线上。为了使低速从器件能与高速主器件通信,从器件可以在传输期间保持SCL为低电平以扩展时钟低电平时间,即降低串行时钟的频率。(3)SCL低电平超时 如果SCL线被总线上的从器件保持为低电平,则不能再进

41、行通信,并且主器件也不能强制SCL为高电平来纠正这种错误。为了解决这一问题,SMBus协议规定:参加一次数据传输的器件必须检查时钟低电平时间,若超过25ms则认为是“超时”。检测到超时条件的器件必须在10ms以内复位通信电路。 (4)SCL高电平 (SMBus空闲) 超时SMBus标准规定:如果一个器件保持SCL和SDA线为高电平的时间超过50s,则可认为总线处于空闲状态。如果一个SMBus器件正等待产生一个主起始条件,则该起始条件将在总线空闲超时之后立即产生。 2. SMBus数据传输方式 (1)主发送器方式SMBus0首先产生一个起始条件,然后发送含有目标从器件地址和数据方向位的第一个字节

42、。该方式下数据方向位 (R/W)为逻辑0,表示“写”操作。接着,SMBus0在SDA线上发送一个或多个字节的串行数据、在SCL上输出串行时钟,并在每发送完一个字节后等待从器件产生的确认应答ACK或非确认应答NACK。最后,SMBus0产生一个停止条件。典型的主发送器时序如下图所示。 (2)主接收器方式SMBus0首先产生一个起始条件,然后发送含有从器件地址和数据方向的第一字节。该方式下数据方向位 (R/W)为1,表示“读”操作。接着,SMBus0接收来自从器件的串行数据并在SCL上输出串行时钟。每收到一个字节后,SMBus0根据控制寄存器SMB0CN中AA位的状态产生确认应答ACK或非确认应答

43、NACK。最后,SMBus0产生一个停止条件。典型的主接收器时序如下图所示。 (3)从发送器方式 SMBus0首先收到起始条件和含有从地址和数据方向位的字节。如果从地址与地址寄存器SMB0ADR中的一致,则SMBus0产生ACK应答。如果收到的是是全局呼叫地址 (0 x00) 并且全局呼叫允许位 (SMB0ADR.0)为1,SMBus0也会发出ACK应答。该方式下数据方向位 (R/W)为1,表示“读”操作。接着,SMBus0在SCL上接收串行时钟并在SDA上发送一个或多个字节的串行数据,每发送一个字节后等待主器件发送的ACK或NACK。最后,在收到主器件的停止条件后,SMBus0退出从方式。典

44、型时序如下图所示。(4)从接收器方式SMBus0接口首先收到一个起始条件和一个含有从地址和数据方向位的字节。如果收到的从地址与地址寄存器SMB0ADR中保存的地址一致,则SMBus0接口产生一个ACK应答。如果收到的是地址是全局呼叫地址 (0 x00) 并且全局呼叫地址允许位 (SMB0ADR.0)为1, SMBus0接口也会发出ACK应答。在这种情况下数据方向位 (R/W) 为0,表示这是一个“写”操作。接着,SMBus0接口在SCL上接收串行时钟并在SDA上接收一个或多个字节的串行数据,每收到一个字节后,SMBus0接口根据控制寄存器SMB0CN中AA位的状态产生一个确认应答ACK或非确认

45、应答NACK。最后,在收到主器件发出的停止条件后,SMBus0接口退出从接收器方式。3. SMBus特殊功能寄存器1、控制寄存器 位7:BUSY:忙状态标志位0:SMBus0空闭 1:SMBus0忙位6:ENSMB:SMBus0允许位0:禁止SMBus 1:允许SMBus位5:STA: SMBus0起始标志位0:不发送起始条件。1:作为主器件时,若总线空闲,则发送起始条件(如果总线不空闲,在收到停止条件后再发送起始条件) 。 如果STA被置1,而此时已经发送或接收了一个或多个字节并且没有收到停止条件,则发送一个重复起始条件。为保证操作正确,应在对STA位置1之前,将STO标志清0。TOE FT

46、E AA SI STO STA ENSMB BUSY 字节地址C0H D7 D6 D5 D4 D3 D2 D1 D0(1)控制寄存器位4:STO:SMBus0停止标志位0:不发送停止条件。1:将STO置为1将发送一个停止条件。当收到停止条件时,硬件将STO清0。如果STA和STO都被置1,则发送一个停止条件后再发送一个起始条件。在从方式,置位STO标志将导致SMBus的行为象收到了停止条件一样。位3:SI:SMBus0串行中断标志位当SMBus0进入27种状态之一(见表4-10)时该位被硬件置位(状态码0 xF8不使SI置位) 。 当允许中断时,该位置1将使CPU转向SMBus0中断服务程序。

47、该位不能由硬件自动清0,必须用软件清除。位2:AA:SMBus0确认标志位0:返回“非确认”应答 。1:返回“确认”应答 位1:FTE:SMBus0空闲定时器允许位0:无SCL高电平超时。1:当SCL高电平超过SMB0CR规定的极限时发生超时。位0:TOE:SMBus0超时允许位0:无SCL低电平超时。1:当SCL处于低电平的时间超过由定时器3 (如果被允许) 定义的极限值时发生超时。(2)时钟速率寄存器用于控制主方式下SCL的频率。SMB0CR寄存器中的8位字预装在一个专用的8位定时器中。该定时器向上计数,当计满回到0 x00时SCL改变逻辑状态。SMB0CR的值应根据下面的方程设置,其中S

48、MB0CR 是SMB0CR寄存器中的8位无符号数值。SYSCLK是系统时钟频率,单位为Hz。 (2)时钟速率寄存器SCL 信号的高电平和低电平时间由下式给出:使用相同的SMB0CR值,总线空闲超时周期由下式给出: (3)数据寄存器SMBus0数据寄存器SMB0DAT保存要发送或刚接收的串行数据字节。在SI为1时软件可以读或写数据寄存器;当SMBus0被允许并且SI标志被清0时软件不应访问SMB0DAT寄存器,因为硬件可能正在对该寄存器中的数据字节进行移入或移出操作。SMB0DAT中的数据总是移出MSB(Most Significant Bit,最高有效位)。在每收到一个字节后,接收数据的第一位

49、位于SMB0DAT的MSB。在数据被移出的同时,总线上的数据被移入。所以SMB0DAT中总是保存最后出现在总线上的数据字节。因此在竞争失败后,从主发送器转为从接收器时SMB0DAT中的数据保持正确。(4)地址寄存器位7-1:SLV6-SLV0:7位SMBus0从地址用于存放7位从地址,当器件工作在从方式时,SMBus0将应答该地址。SLV6是地址的最高位,对应从SMBus0收到的地址字节的第一位。位0:GC:全局呼叫地址允许位用于允许全局呼叫地址 (0 x00) 识别。0:忽略全局呼叫地址。1:识别全局呼叫地址。 GC SLV0 SLV1 SLV2 SLV3 SLV4 SLV5 SLV6 字节

50、地址C3H D7 D6 D5 D4 D3 D2 D1 D0(5) 状态寄存器状态寄存器SMB0STA保存一个8位的状态码,用于指示SMBus0接口的当前状态。共有28个可能的SMBus0状态,每个状态有一个惟一的状态码与之对应。一个有效状态码的高5位是可变的,而低3位固定为0 (当SI=1时),因此所有有效状态码都是8的整数倍。这样就可以很容易地在软件中用状态码作索引查询转移到的正确中断服务程序 (允许8字节的代码对状态提供中断服务或转到更长的中断服务程序中)。对于用户软件而言,SMB0STA的内容只在SI标志为1时才有定义。软件不应对SMB0STA寄存器进行写操作,否则会产生不确定的结果。(

51、5) 状态寄存器位7-3:STA7-STA3:5位SMBus0状态代码保存SMBus0状态码。共有28个可能的状态码,每个状态码对应一个SMBus状态。在SI标志 (SMB0CN.3) 为1时,SMB0STA中的状态码有效,当SI标志为0时,SMB0STA中的内容无定义。任何时候对SMB0STA寄存器执行写操作将导致不确定的结果。位2-0:STA2-STA0:当SI标志位为1时,这三个SMB0STA最低位的读出值总是为逻辑0。STA0 STA1 STA2 STA3 STA4 STA5 STA6 STA7 字节地址C3H D7 D6 D5 D4 D3 D2 D1 D010.7 串行外设接口总线S

52、PI(Serial Peripheral Interface 串行外设接口)总线系统是Motorola公司提出的一种同步串行外设接口,允许MCU与各种外围设备以同步串行方式进行通信。其外围设备种类繁多,从最简单的TTL移位寄存器到复杂的LCD显示驱动器、网络控制器等。SPI总线可直接与各厂家生产的多种标准外围器件直接接口,该接口一般使用4根线:串行时钟线SCK、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI低电平有效的从机选择线SS。C8051F020单片机的串行外设接口 (SPI0) 提供访问一个4线、全双工串行总线的能力。SPI0支持在同一总线上将多个从器件连接到一个主

53、器件的能力。一个独立的从选择信号 (NSS) 用于选择一个从器件并允许主器件和所选从器件之间进行数据传输。同一总线上可以有多个主器件。当两个或多个主器件试图同时进行数据传输时,系统提供了冲突检测功能。SPI0可以工作在主方式或从方式。当SPI0被配置为主器件时,最大数据传输率 (位/秒) 是系统时钟频率的二分之一。 1 信号说明(1)主输出从输入数据线主出从入(MOSI)信号线是主器件的输出和从器件的输入数据线,用于从主器件到从器件的串行数据传输。当SPI0作为主器件时,该信号是输出;当SPI0作为从器件时,该信号是输入。数据传输时最高位在先。(2)主输入从输出数据线主入从出(MISO)信号线

54、是从器件的输出和主器件的输入数据线,用于从从器件到主器件的串行数据传输。当SPI0作为主器件时,该信号是输入;当SPI0作为从器件时,该信号是输出。数据传输时最高位在先。当SPI从器件未被选中时,它将MISO引脚置于高阻状态。(3)串行时钟线串行时钟(SCK)信号线是主器件的输出和从器件的输入时钟信号线,用于同步主器件和从器件之间在MOSI和MISO线上的串行数据传输。当SPI0作为主器件时产生该信号。(4)从器件选择线从器件选择 (NSS) 信号线是从器件的输入信号线,主器件用它来选择处于从方式的SPI0器件,在器件为主方式时用于禁止SPI0。注意:NSS信号总是作为SPI0从器件的输入,S

55、PI0工作在主方式时,从选择信号必须用通用端口I/O引脚进行输出。2 SPI0操作只有SPI主器件才能启动数据传输。将主允许标志 (MSTEN,SPI0CN.1) 置1可以使SIP0处于主方式。当处于主方式时,向SPI0数据寄存器 (SPI0DAT) 写入一个字节将启动一次数据传输。SPI0主器件立即在MOSI线上串行移出数据,同时在SCK上提供串行时钟。在传输结束后SPIF (SPI0CN.7) 标志位置1。如果允许中断,在SPIF标志置位时将产生一次中断请求。SPI主器件可以配置为在一次传输操作中移入/移出1到8位数据,以适应具有不同字长度的从器件。SPI0配置寄存器中的SPIFRS位 (

56、SPI0CFG2:0) 用于选择一次传输操作中移入/移出的位数。在全双工操作中,SPI主器件在MOSI线上向从器件发送数据,被寻址的从器件可以同时在MISO线上向主器件发送其移位寄存器中的内容。接收到的从器件数据将替换主器件数据寄存器中的数据。因此,SPIF标志既可以作为发送完成标志又可以作为接收数据准备好标志。两个方向上的数据传输由主器件产生的串行时钟同步。SPI全双工操作 当SPI0被允许但未配置为主器件时,它将作为从器件工作。另一个SPI主器件通过将其NSS信号驱动为低电平启动一次数据传输。主器件用其串行时钟将移位寄存器中的数据移出到MOSI引脚。在一次数据传输结束后 (当NSS信号变为

57、高电平时),SPIF标志置1。从器件可以通过写SPI0数据寄存器来为下一次数据传输装载它的移位寄存器。从器件必须在主器件开始下一次数据传输之前至少一个SPI串行时钟周期写数据寄存器。否则,已经位于从器件移位寄存器中的数据字节将被发送。SPI0数据寄存器对读操作而言是双缓冲的,但写操作时不是。如果在一次数据传输期间试图写SPI0DAT,则WCOL标志 (SPI0CN6) 将置1,写操作被忽略,而当前的数据传输不受影响。系统控制器读SPI0数据寄存器时,实际上是读接收缓冲器。在任何时刻如果SPI0从器件检测到一个NSS上升沿,而接收缓冲器中仍保存着前一次传输未被读取的数据,则发生接收溢出,将RXO

58、VRN标志 (SPI0CN.4)置1。不将新数据传送到接收缓冲器,允许前面接收的数据等待读取,引起溢出的数据字节丢失。多个主器件可以共存于同一总线。当SPI0被配置为主器件 (MSTEN=1) 而其从选择信号NSS被拉为低电平时,方式错误标志 (MODF,SPI0CN.5) 将置1。方式错误标志置1时,SPI控制寄存器中的MSTEN和SPIEN位将由硬件清除,从而将SPI模块置于“离线”状态。在一个多主环境中,系统控制器应检查SLVSEL标志 (SPI0CN.2) 的状态,以保证置“1” MSTEN位和启动一次数据传输之前总线是空闲的。3 串行时钟时序 使用SPI0配置寄存器 (SPI0CFG

59、) 中的时钟控制选择位可以在串行时钟相位和极性的4种组合中进行选择。CKPHA位 (SPI0CFG .7) 选择两种时钟相位 (锁存数据的边沿) 中的一种。CKPOL位 (SPI0CFG .6) 在高电平有效和低电平有效的时钟之间选择。主器件和从器件必须被配置为使用相同的时钟相位和极性。4 SPI特殊功能寄存器 (1)时钟速率寄存器SPI0CKR 当SPI0工作在主方式时,SPI0CKR寄存器的值决定SCK输出的频率。SCK时钟频率是从系统时钟分频得到的,由下面的方程给出: 其中:SYSCLK是系统时钟频率,SPI0CKR是SPI0CKR寄存器中的8位值。例如:如果SYSCLK=2MHz,SP

60、I0CKR=0 x04,则(2)配置寄存器SPI0CFG位7:CKPHA:SPI0时钟相位控制位,用于选择SPI0时钟的相位。0:在SCK周期的第一个边沿采样数据。1:在SCK周期的第二个边沿采样数据。位6:CKPOL:SPI0时钟极性控制位,用于选择SPI0时钟的极性。0:SCK在空闲状态时处于低电平。1:SCK在空闲状态时处于高电平。位5-3:BC2-BC0:SPI0发送计数位,用于指示发送到了SPI字的哪一位,000到111分别对应位0到位7。位2-0:SPIFRS2-SPIFRS0:SPI0帧长度控制位,在主方式时用于控制数据传输的位数, 000到111分别对应1位到8位 。 SPIF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论