使用Silicon Lab的专利CIP-51微控制器内核,可以使用标准803x/805x的汇编器和编译器进行软件开发,CIP-51采用流水线结构,与标准的8051结构相比指令执行速度有很大的提高,70%的指令的执行时间为1或2个系统时钟周期,只有4条指令的执行时间大于4个系统时钟周期。
CIP-51共有111条指令。下表列出了指令条数与执行时所需的系统时钟周期数的关系。
器件内部包含一个稳压器(REG0)。当被使能时,REG0输出连到VDD引脚,并可为外部器件提供电源。REG0可以被软件使能/禁止。
可在工业温度范围(-45℃到+85℃)内用2.7V-5.25V的电压工作。电源电压大于3.6V时,必须使用内部稳压器。
包含C2调试接口,支持FLASH编程和使用安装在最终应用系统中的器件进行在系统调试。
1.基本特性
时钟源:有1个可编程内部高频振荡器、1个可编程内部低频振荡器、1个外部振荡器驱动电路和1个4倍时钟乘法器。
高速内部振荡器在出厂时已经被校准为12MHz±1.5%。时钟恢复电路允许内部振荡器与4倍时钟乘法器配合,提供全速方式USB时钟源。内部振荡器还被用作低速方式下的USB时钟源。器件内集成了外部振荡器驱动电路,允许使用晶体、陶瓷谐振器、电容、RC或外部CMOS时钟源产生系统时钟。
系统时钟可以被配置为使用内部振荡器、外部振荡器或时钟乘法器输出二分频。如果需要,可以在CPU运行时切换系统时钟振荡源。低频内部振荡器或外部振荡器在低功耗系统中是非常有用的,它允许MCU从一个低频率(节电)的时钟源运行,当需要时再周期性地切换到高速时钟源。
使用外部振荡器时,必须在OSCXCN寄存器中选择外部振荡器类型,必须对所有端口引脚进行配置,对于晶体/陶瓷谐振器、电容或RC方式,应将所有端口配置为模拟输入,对于CMOS时钟方式,应将所有端口引脚配置为数字输入;对于外部晶体或陶瓷谐振器,必须在XTAL1和XTAL2引脚之间并接一个10MΩ的电阻。使用RC、电容或CMOS时钟配置,时钟源应接到XTAL2引脚。
外部晶体使用步骤:a.使能外部振荡器;b.等待至少1ms;c.查询XTLVLD =>‘1’;d.将系统时钟切换到外部振荡器。
4倍时钟乘法器配置:a.通过向寄存器CLKMUL写0x00来复位时钟乘法器;b.用MULSEL位选择时钟乘法器的输入;c.用MULEN位使能时钟乘法器(CLKMUL | = 0x80);d.延时大于5 μs;e.用MULINIT位初始化时钟乘法器(CLKMUL | = 0xC0);f.查询等待MULRDY =>‘1’。
当使用外部振荡器作为4倍时钟乘法器的输入时,外部振荡源必须在乘法器初始化之前被使能并稳定运行。
有9个复位源:上电复位电路(POR)、片内VDD监视器(当电源电压低于VRST时强制复位)、USB控制器(USB总线复位或VBUS状态变化)、看门狗定时器、时钟丢失检测器、由比较器0提供的电压检测器、软件强制复位、外部复位输入引脚和FLASH读/写错误保护电路复位。除了POR、复位输入引脚及FLASH操作错误这三个复位源之外,其他复位源都可以被软件禁止。在一次上电复位之后的MCU初始化期间,WDT可以被永久性使能。
2.存储器
1)程序存储器
内部有可再编程的FLASH存储器,用于程序代码和非易失性数据存储。可以通过C2接口或由软件使用MOVX指令对FLASH存储器进行在系统编程,每次一个字节。可在系统编程,扇区大小为512字节。
64KB的片内FLASH存储器可用作程序存储器或可编程数据存储器,实际使用过程中需注意,程序默认从低地址开始存放,如需使用该空间存放数据,需避开程序代码区。只有未锁定的FLASH页可使用。
2)数据存储器
片上256字节RAM+4KB的XRAM,1KB的USB FIFO也可以被映射到外部数据存储器空间,作为通用数据存储器使用。有用于访问片外存储器和存储器映射器件的外部存储器接口EMIF。
3.通用I/O口
有40/25个I/O口,均耐5V电压,大灌电流。每个端口引脚都可以被配置为模拟输入或数字I/O引脚,被选择为数字I/O的引脚还可以被配置为推挽或漏极开路输出。
数字交叉开关允许将内部数字系统资源映射到端口I/O引脚,交叉开关根据优先权译码表为所选择的内部数字资源分配I/O引脚。寄存器XBR0、XBR1和XBR2用于选择内部数字功能。。PnSKIP寄存器允许软件跳过那些被用作模拟输入、特定功能或GPIO的引脚。
a.用端口输入方式寄存器(PnMDIN)选择所有端口引脚的输入方式(模拟或数字)。
b.用端口输出方式寄存器(PnMDOUT)选择所有端口引脚的输出方式(漏极开路或推挽)。
c.用端口跳过寄存器(PnSKIP)选择应被交叉开关跳过的那些引脚。
d.将引脚分配给要使用的外设(XBR0、XBR1、XBR2)。
e.使能交叉开关(XBARE = 1)。
所有端口引脚都必须被配置为模拟或数字输入。被用作比较器或ADC输入的任何引脚都应被配置为模拟输入。为使端口P0、P1、P2和P3工作在标准端口I/O输出方式,交叉开关必须被使能。当交叉开关被禁止时,端口输出驱动器被禁止。端口4总是作为标准GPIO使用。
未被交叉开关分配的端口引脚和未被模拟外设使用的端口引脚都可以作为通用I/O。通过对应的端口数据寄存器访问端口P3-0,这些寄存器既可以按位寻址也可以按字节寻址。端口P4(仅C8051F340/1/4/5)使用的SFR只能按字节寻址。
4.中断系统
支持16个中断源,每个中断源有两个优先级。中断源在片内外设与外部输入引脚之间的分配随器件的不同而变化。
两个外部中断源/INT0和/INT1可被配置为低电平有效或高电平有效,边沿触发或电平触发。IT01CF寄存器中的IN0PL(/INT0极性)和IN1PL(/INT1极性)位用于选择高电平有效还是低电平有效;TCON中的IT0和IT1用于选择电平或边沿触发。
在FLASH写/擦除操作期间和USB FIFO MOVX访问期间,CPU暂停执行指令。对于在CPU暂停执行指令期间发生的中断,中断服务响应时间将延长。
5.定时器
内部有4个16位计数器/定时器:其中两个与标准8051中的计数器/定时器兼容,另外两个是16位自动重装载定时器,可用于ADC、SMBus、USB(帧测量)、低频振荡器(周期测量)或作为通用定时器使用。这些定时器可以用于测量时间间隔,对外部事件计数或产生周期性的中断请求。
定时器0和定时器1有5个可选择的时钟源,定时器2和定时器3可以使用系统时钟、系统时钟/12或外部振荡器时钟/8作为时钟源。
定时器2,3可以工作在16位自动重装载方式、8位自动重装载方式(两个8位定时器)、USB帧起始(SOF)捕捉方式或低频振荡器(LFO)下降沿捕捉方式。当T2SPLIT =‘0’且T2SOF =‘0’时,定时器2工作在自动重装载的16位定时器方式:
当T2SPLIT =‘1’且T2SOF =‘0’时,定时器2工作双8位定时器方式。两个8位定时器TMR2H和TMR2L都工作在自动重装载方式。TMR2RLL保持TMR2L的重载值,而TMR2RLH保持TMR2H的重载值。TMR2CN中的TR2是TMR2H的运行控制位。当定时器2被配置为8位方式时,TMR2L总是处于运行状态。
TF2H和TF2L标志不能被硬件自动清除,必须通过软件清除。
当T2CE =‘1’时,定时器2工作在两种特殊捕捉方式之一。捕捉事件可以是USB帧起始(SOF)捕捉或低频振荡器(LFO)下降沿捕捉,用T2CSS位选择。
6.串行口
2个全双工串行口,UART0有2种工作方式:提供标准8051串行口的方式1和方式3。
UART0具有增强的波特率发生器电路,有多个时钟源可用于产生标准波特率,接收数据缓冲机制允许UART0在软件尚未读取前一个数据字节的情况下开始接收第二个输入数据字节。UART0波特率由定时器1工作在8位自动重装载方式产生。发送(TX)时钟由TL1产生;接收(RX)时钟由TL1的拷贝寄存器(RX定时器)产生,TX和RX定时器的溢出信号经过二分频后用于产生TX和RX波特率。定时器1的时钟可以在6个时钟源中选择:SYSCLK、SYSCLK/4、SYSCLK/12、SYSCLK/48、外部振荡器时钟/8和外部输入T1。
UART0的波特率=T1clk/(256-T1H)/2
多机通讯:所有从机的RX和TX分别并接到主机的TX和RX上,从机的MCE0位(SCON.5)被置‘1’,只有当UART接收到的第九位为逻辑‘1’ (RB80=1)并收到有效的停止位后UART才会产生中断。当主机要发送数据给一个或多个从机时,它先发送一个用于选择目标的地址字节(地址字节所有从机都接收,对应地址的从机收到该地址后,清MCE0,以便能接收数据)。地址字节与数据字节的区别是:地址字节的第9位为逻辑‘1’;数据字节的第9位总是设置为逻辑‘0’。
UART1包含一个由16位定时器和可编程预分频器构成的专用波特率发生器,能产生很宽范围的波特率。UART1数据传输以起始位(逻辑低电平)开始,其后是数据位(LSB在先),数据位之后是奇偶位或额外位(如果选择),最后是一个或两个停止位(逻辑高电平)。数据长度在5 ~ 8位之间。UART1的工作方式设置与标准51不同。多机通讯时,额外位与UART0的第9位功能类似。
UART1的波特率=Fosc/(65536-(SBRLH1:SBRLL1))/2/预分频值
7.增强型串行外设接口SPI0
增强型串行外设接口(SPI0)提供访问一个全双工同步串行总线的能力。SPI0可以作为主器件或从器件工作,可以使用3线或4线方式,并可在同一总线上支持多个主器件和从器件。
8.SMBus
SMBus I/O接口是一个双线的双向串行总线。与I2C串行总线兼容。在作为主或从器件时,数据传输的最大速率可达系统时钟频率的十分之一(这可能比SMBus的规定速度要快,取决于所使用的系统时钟)。可以采用延长低电平时间的方法协调同一总线上不同速度的器件。。SMBus提供了SDA(串行数据)控制、SCL(串行时钟)产生和同步、仲裁逻辑以及起始/停止的控制和产生电路。
SCL(串行时钟)和SDA(串行数据)线是双向的,必须通过一个上拉电阻或等效电路将它们连到电源电压。连接在总线上的每个器件的SCL和SDA都必须是漏极开路或集电极开路的,因此当总线空闲时,这两条线都被拉到高电平。总线上的最大器件数只受规定的上升和下降时间的限制,上升和下降时间分别不能超过300ns和1000ns。
所有的数据传输都由主器件启动,可以寻址一个或多个目标从器件。主器件产生一个起始条件,然后发送地址和方向位。
一个主器件只能在总线空闲时启动一次传输。在一个停止条件之后或SCL和SDA保持高电平已经超过了指定时间,则总线是空闲的。两个或多个主器件可能在同一时刻启动数据传输,所以使用仲裁机制迫使一个主器件放弃总线。试图发送高电平的主器件将检测到SDA上的低电平而退出竞争。赢得总线的器件继续其数据传输过程,而未赢得总线的器件成为从器件并在后续的传输中接收数据(如果被寻址)。
每次数据字节或从地址传输都产生SMBus中断。发送数据时在ACK周期后产生中断,使软件能读取接收到的ACK值;接收数据时在ACK周期之前产生中断,使软件能确定要发出的ACK值。
SMBus接口可以被配置为工作在主方式和/或从方式。在任一时刻,它将工作在下述4种方式之一:主发送器、主接收器、从发送器或从接收器。
9.可编程计数器阵列(PCA0)
提供增强的定时器功能,与标准8051的计数器/定时器相比,它需要较少的CPU干预。PCA由一个专用的16位计数器/定时器和5个16位捕捉/比较模块组成。每个捕捉/比较模块有其自己的I/O线(CEXn),这些I/O线在被允许时通过交叉开关连到端口I/O。
定时器的时基信号可以在六个时钟源中选择:系统时钟、系统时钟/4、系统时钟/12、外部振荡器时钟/8、定时器0溢出或ECI输入引脚上的外部时钟信号。
PCA的模块4可被用作看门狗定时器(WDT),在系统复位后即被使能为该方式。在看门狗方式被使能时,对某些寄存器的访问受到限制
1)PCA计数器/定时器
16位的PCA计数器/定时器由两个8位的SFR组成:PCA0L和PCA0H。在读PCA0L时,“瞬象寄存器”自动锁存PCA0H的值,随后读PCA0H时将访问这个“瞬象寄存器”;先读PCA0L寄存器可以保证正确读取整个16位PCA计数器的值。
当计数器/定时器溢出时(从0xFFFF到0x0000),PCA0MD中的计数器溢出标志(CF)被置为逻辑‘1’并产生一个中断请求
2)捕捉/比较模块
每个模块都可被配置为独立工作,有六种工作方式:边沿触发捕捉、软件定时器、高速输出、频率输出、8位脉宽调制器和16位脉宽调制器。
a.边沿触发的捕捉方式
CEXn输入信号必须在高电平或低电平期间至少保持两个系统时钟周期,以保证能够被硬件识别。
b.软件定时器方式
在该方式,PCA将计数器/定时器的计数值与模块的16位捕捉/比较寄存器(PCA0CPHn和PCA0CPLn)进行比较。当发生匹配时,PCA0CN中的捕捉/比较标志(CCFn)被置为逻辑‘1’并产生一个中断请求;当向PCA0的捕捉/比较寄存器写入一个16位数值时,应先写低字节。
c.高速输出方式
每当PCA计数器与模块的16位捕捉/比较寄存器(PCA0CPHn和PCA0CPLn)发生匹配时,模块的CEXn引脚上的逻辑电平将发生变化。当向PCA0的捕捉/比较寄存器写入一个16位数值时,应先写低字节。
d.频率输出方式
可在模块的CEXn引脚产生可编程频率的方波。。捕捉/比较模块的低字节与PCA0计数器的低字节比较;两者匹配时,CEXn的电平发生改变,
方波频率=Fpca/(2*PCA0CPHn),PCA0CPHn中的值为0x00时,相当于256。
e.8位脉宽调制器方式
PWM输出的频率取决于PCA计数器/定时器的时基。使用模块的捕捉/比较寄存器PCA0CPLn改变PWM输出信号的占空比。当PCA计数器/定时器的低字节(PCA0L)与PCA0CPLn中的值相等时,CEXn引脚上的输出被置‘1’;当PCA0L中的计数值溢出时,CEXn输出被复位
占空比=(256-PCA0CPHn)/256
f.16位脉宽调制器方式
当PCA计数器与模块的值匹配时,CEXn的输出被置为高电平;当计数器溢出时,CEXn输出被置为低电平。为了输出一个占空比可变的波形,新值的写入应与PCA的CCFn匹配中断同步。
占空比=(65536-PCA0CPn)/65536
3)看门狗定时器
通过PCA的模块4可以实现可编程看门狗定时器(WDT)功能。模块4高字节与PCA计数器的高字节比较;模块4低字节保持执行WDT更新时要使用的偏移值。在系统复位后看门狗被使能。在看门狗被使能时,对某些PCA寄存器的写操作受到限制。
如果在WDT被使能时PCA0CPH4和PCA0H发生匹配,则系统将被复位。为了防止WDT复位,需要通过写PCA0CPH4来更新WDT。在写PCA0CPH4时,PCA0H的值加上PCA0CPL4中保存的偏移值后被装入到PCA0CPH4.
当WDT被使能时:
a.PCA计数器被强制运行。
b.不允许写PCA0L和PCA0H。
c.PCA时钟源选择位(CPS2-CPS0)被冻结。
d.PCA等待控制位(CIDL)被冻结。
e.模块4被强制进入看门狗定时器方式。
f.对模块4方式寄存器(PCA0CPM4)的写操作被禁止。
看门狗定时器偏移值(PCA时钟数)=(256*PCA0CPL4)+(256-PCA0L)
配置WDT的步骤如下:
a.通过向WDTE位写‘0’来禁止WDT。
b.选择PCA时钟源(用CPS2-0位)。
c.向PCA0CPL4装入所希望的WDT更新偏移值。
d.配置PCA的空闲方式位(如果希望在CPU处于空闲方式时WDT停止工作,则应将CIDL位置‘1’)。
e.通过向WDTE位写‘1’来使能WDT。
f.(选项)通过将WDLCK位置‘1’来锁定WDT(防止在下一次系统复位前禁止WDT)。
WDT在任何一次系统复位之后都被设置为使能状态。PCA0计数器的缺省时钟为系统时钟的十二分频(SYSCLK/12)。当WDTE位被置1时,不能改变PCA0MD寄存器的值。若要改变PCA0MD的内容,必须先禁止看门狗定时器。