X25045是带有串行E2PROM的CPU监控器1Word文档格式.docx
《X25045是带有串行E2PROM的CPU监控器1Word文档格式.docx》由会员分享,可在线阅读,更多相关《X25045是带有串行E2PROM的CPU监控器1Word文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
表1
7
6
5
4
3
2
1
WD1
WD0
BL1
BL0
WEL
WIP
其中,WD1、WD0是看门狗定时时间设置位;
BL1、BL0是存储单元写保护区设置位;
WEL是只读标志,1表明写使能开关打开;
WIP也是只读标志,1代表芯片内部正处于写周期。
电复位时,各位都被清零。
X25045芯片功能包括以下4种:
(1)上电复位控制。
在对X25045通电时,ERSET引脚输出有效的复位信号,并保持至少200ms,使CPU有效复位。
(2)电源电压监控。
当检测到电源电压低于内部门槛电压VTRIP时,RESET输出复位信号,直至电源电压高于VTRIP并保持至少200ms,复位信号才被撤消。
VTRIP的出厂值根据芯片型号不同共有5个级别的电压范围。
对于需要电源电压精确监控的应用,用户可以搭建编程电路,对芯片内VTRIP电压进行微调。
(3)看门狗定时器。
芯片内部状态寄存器的WD1、WD0是看门狗定时设置位,通过状态寄存器写指令WRSR修改这2个标志位,就能在3种定时间隔中进行选择或关闭定时器。
对看门狗的复位由CS输入电平的下降沿完成。
表2是WD1、WD0组合的含义。
表2
看门狗定时值
1.4s
600ms
200ms
禁止看门狗工作
(4)串行E2PROM。
芯片内含512字节存储单元,10万次可靠写,数据保持时间100年。
XICOR设计了3种保护方式防止误写。
包括:
WP写保护引脚,当引脚被拉低时,内部存储单元状态寄存器都禁止写入;
存储区域写保护模式,通过对状态寄存器的BL1、BL0位的设置,可以选择对不同的存储区域进行写保护;
在进行任何写操作前都必须打开写使能开关,而且在上电初始化写操作完成时,写使能开关自动关闭。
显然,在几方面的保护之下,产生误写的可能性极小,表3是BL1、BL0组合的含义。
表3
写保护的单元地址
没有保护
180H~1FFH
100H~1FFH
000H~1FFH
对X25045的操作是通过4根口线CS、SCK、SI和SO进行同步串行通信来完成的。
SCK是外部输入的同步时钟信号。
在对芯片定改指令或数据时,时钟前沿将SI引脚信号输入;
在读邮数据时,时钟后沿将数据位输出到SO引脚上。
数据的输入/输出都是高位在先。
芯片内部共有6条指令,如表4所列。
表4
命令名称
命令格式
内
容
WREN
00000110
打开写使能开关
WRDI
00000100
关闭写使能开关
RDSR
00000101
读状态寄存器
WRSR
00000001
写状态寄存器
READ
0000A8011
读存储单元
WRITE
0000A8010
写存储单元
(1)WREN和WRDI是写使能开关的开/关指令。
它们都是单字节指令。
(2)RDSR和WRSR是状态寄存器的读/写指令。
在从SI输入指令后,RDSR的执行结果,即状态寄存器内容须从SO读出;
而WRSR需要紧接着输入修改数据。
(3)READ和WEITE是存储单元的读/写指令。
输入指令后(指令码第三代表存储单元地址的最高位),接着输入低八位地址,最后就可以连续读出或写入数据。
其中,读指针和写指针的工作方式完全不同,读指针的全部8位用来计数,0FFH溢出后变成00H;
写指针只用最低两位计数,XXXXXX11B溢出后变成XXXXXX00B,所以连续写的实际结果是在4个单元中反复写入。
另外,由于E2PROM的写入时间长,所以在连续两条写指令之间应读取WIP状态,只有内部写周期结束时才可输入下一条写指令。
AT89C2051内部没有SPI接口硬件,因此本系统利用了单片机的4根口线和软件模拟读写时序的方式与X25045通信。
软件包在文末给出。
四、软件原理
X25045的通信接口软件:
CSBITP3.2
SCKBITP3.3
SIBITP3.4
SOBITP3.5
(1)X25045数据写入程序
功能:
将缓冲区数据写入指定地址开始的单元。
入口:
F0、R3是E2PROM单元地址最高位低八位;
R0是缓冲区首地址;
R2是缓冲区长度。
WRITEX:
LCALLSTAX;
指令启动
MOVA,#06H;
输出WREN
LCALLBYTE_OUT
下一指令启动
MOVA,#02H;
输出WRITE
MOVC,F0;
插入单元地址最高位
MOVACC.3,C
MOVA,R3;
输出单元地址低八位
BYWR:
MOVA,@R0;
从缓冲区取数输出
INCR0;
指针加1
DJNZR2,BYWR;
缓冲区未空则继续输出
LCALLENDX;
指令结束
LCALLWIP_CHK;
等待WIP=0
RET
(2)X25045数据读出程序
把指定地址开始的单元数据读出并放入缓冲区
与写入程序相同。
READX:
LCALLSTAX
MOVA,#03H;
输出READ
MOVC,F0
输出低八位地址
BYRD:
LCALLBYTE_IN;
输入数据送入缓冲区
MOV@R0,A
DJNZR2,BYRD;
缓冲区未满则继续输入
LCALLENDX
(3)X25045状态寄存器写入程序
对状态寄存器进行设置。
ACC是修改值。
WRSR:
PUSHACC
MOVA,#01H;
输出WRSR
POPACC;
输出设置值
(4)X25045状态寄存器读出程序
读出状态寄存器当前值。
出口:
ACC是当前值。
RDSR:
MOVA,#05H
LCALLBYTE_IN
LCALENDX
(5)其他子程序
WIP_CHK:
LCALLRDSR;
等待X25045结束内部写周期
JBACC.0,WIP_CHK
STAX:
SETBCS;
启动X25045指令
NOP;
先拉高CS,再拉你SCK,最后拉低CS
CLRSCK
NOP
CLRCS
ENDX:
CLRSCK;
结束X25045指令
先拉低SCK后拉高CS
BYTE_OUT:
MOVR4,#08H;
向X25045写入一字节数据
BOUT1:
RLCA
MOVSI,C
SETBSCK
DJNZR4,BOUT1
BYTE_IN:
从X25045读出一字节数据
BIN1:
MOVC,SO
DJNZR4,BIN1
RST_DOG:
复位看门狗定时器
SETBCS