首页 | 期刊简介 | 编辑部 | 广告部 | 发行部 | 在线投稿 | 联系我们 | 产品信息索取
2024年4月19日星期五
2011年第01期
 
2010年第12期
 
2010年第11期
2010年第11期
 
2010年第10期
2010年第10期
 
2010年第09期
2010年第09期
 
2010年第09期
2010年第08期
 
2010年第07期
2010年第07期
 
2010年第06期
2010年第06期
 
2010年第05期
2010年第05期
 
2010年第04期
2010年第04期
 
2010年第03期
2010年第03期
 
2010年第02期
2010年第02期
 
2010年第01期
2010年第01期
 
2009年第12期
2009年第12期
 
2009年第11期
2009年第11期
 
2009年第10期
2009年第10期
 
2009年第9期
2009年第9期
 
2009年第8期
2009年第8期
 
2009年第7期
2009年第7期
 
2009年第6期
2009年第6期
 
2009年第5期
2009年第5期
 
2009年第4期
2009年第4期
 
2009年第3期
2009年第3期
 
2009年第2期
2009年第2期
 
2009年第1期
2009年第1期
 
2008年第12期
2008年第12期
 
2008年第11期
2008年第11期
 
2008年第10期
2008年第10期
 
2008年第9期
2008年第9期
 
2008年第8期
2008年第8期
 
2008年第7期
2008年第7期
 
2008年第6期
2008年第6期
 
2008年第5期
2008年第5期
 
2008年第4期
2008年第4期
 
2008年第3期
2008年第3期
 
2008年第2期
2008年第2期
 
2008年第1期
2008年第1期
μPSD3251实时时钟的实现

Realization of Real-time Clock with μPSD3251

大连海事大学控制理论与控制工程系 薄会健 杨承恩


引言

实时时钟已被广泛应用于各种电子产品,为系统监控提供必要的时间信息。利用ST公司提供的多种类RTC芯片,用户可以在设计中方便地针对具体应用选择相应的芯片。本文讨论了实时时钟M41T0在 PSD3251系统中的应用、电路设计以及程序开发。


PSD3251结构和工作原理

PSD3251带有一个8032微控制器,通过总线与PSD模块组合在一起的具有超大存储容量和可编程器件等扩展部件的SOC单片机,具有运算与寻址能力强、存储空间大、片内集成外设丰富、功耗低等优点。下面对其主要功能模块做一简要的介绍。


存储器系统

存储器系统包括256B的RAM、内核中128B的特殊寄存器(SFR)和PSD模块中256B的SFR,SFR包含了片内所有资源的全部内容,通过控制SFR,就可以控制芯片的各个引脚,实现各种功能,简单而方便。

另外还有2K的SRAM,可以用外接电池保持内容。外接电池连接到电压保持脚(VSTBY,PC2),只要电池电压不低于2V,SRAM内容就将一直保持,为用户存储重要数据提供很大方便。

主次2片大容量的FLASH存储器,可分别配置成数据或程序存储器,并且可以分页,以满足64KB的寻址空间。

中断系统

中断系统共有8个中断源,优先级依次为:INT0外部中断、第二异步串口中断、定时器0中断、I2C中断、INT1外部中断、定时器1中断、异步串口中断、定时器2中断。中断源通过中断允许(设定中断允许寄存器IE、IEA)、中断优先级排队(设定中断优先级寄存器IP、IPA)进行响应处理,每一个优先级都可设置为高、低两种优先级,为用户控制提供很大的方便,还可实现中断嵌套。

众多的I/O口

I/O系统共有5个端口,P1口、P3口、P4口、PB口和PC口。除了特殊外围设备接口功能外,P1和P3与标准的8032 MCU的I/O口完全相同。P4是新增加的端口,作为I/O口时,功能与P1和P3相同。这三个端口都是双向I/O口,可以对其直接进行读写。

PB和PC2个可编程I/O端口在PSD模块中。每个端口引脚都可以单独配置,允许为多项功能。端口可以用ST公司专门的PSD模块配置软件PSDsoft Express来配置,也可以通过MCU写CSIOP(Chip-Select I/O Port,是PSD内部寄存器的集合,必须给CSIOP分配足够的地址空间,然后在CSIOP中访问某个寄存器,将数据手册中的偏移加到CSIOP的基地址上)空间的片内寄存器来配置,这就为用户控制端口引脚的输入/输出信号提供了方便。

集成多种功能

除了提供两个功能独立的全双工异步串行通信口之外,还提供了4个8位的A/D转换器和4路8位的PWM通道,可以进行模拟信号的采集和控制。此外,还提供了I2C接口,可与I2C器件进行通信。本文中介绍的M41T0就是采用I2C总线进行数据通信。 PSD3251通过I2C总线对M41T0进行时间设定并实时读取时间。


M41T0结构和工作原理:

M41T0是一款串行实时时钟,计时器RAM是一个低功耗串行计时器,内建32.768KHz振荡器(外部晶体控制)。八个寄存器用于实现时钟/日历的功能,配置了二进制编码的十进制格式。地址和数据的传输通过两线的双向总线连续传输。在每次的读或写数据字节时内建地址寄存器自动增加,引脚图如图4所示。

操作:

M41T0 时钟在串行总线上作为一个被控器件运行。获取访问的开始条件是跟随一个正确的被控地址(D0H),器件可被连续访问的8 个字节依次是:
1.秒寄存器
2.分钟寄存器
3.世纪小时寄存器
4.天寄存器
5.星期寄存器
6.月寄存器
7.年寄存器
8.控制寄存器

读模式:

在读模式下,首先要设置受控地址,MCU才可读取受控M41T0,如图1所示。然后是写模式控制位(R/W= 0) 和应答位,控制地址An被写到芯片内的地址指针。其次进行下一次的开始条件,重复受控地址,然后设置读模式控制位(R/W = 1),此时主控器 PSD3251由发送变成接受,地址内的数据字节将被发送到主控器,接收之后发送一个应答位给受控发射器。地址指针的增加依附于一个应答脉冲的接收,M41T0受控发送的数据字节现放置地址An+1,主控接受器读取和应答这个新字节,同时地址指针增加到An+2,连续读时这些周期地址将连续增加,直到主控接受器给被控发送器发出停止条件,其时序如图2所示。

图1 受控地址位置(略)

图2 读模式时序(略)

写模式:

在写模式中,主控器 PSD3251先发送开始条件,然后设置受控地址、写模式控制位(R/W= 0)、写入芯片的地址指针,接下去将阻止数据命令写入存储器。在接收到一个应答脉冲之后,内部地址指针增加到下一个地址位置,M41T0受控接受器在接受受控地址之后将发送一个应答脉冲给主控发送器,重复地接受命令地址和每一个数据字节,其时序如图3所示。

图3 写模式时序(略)

时钟操作:

8字节时钟寄存器用于双向设置时钟和读取来自时钟的日期和时间,数据表现为二进制码的十进制格式。秒、分钟和小时包含在前三个寄存器。小时寄存器的位D6和位D7包含了世纪使能位 CEB和世纪位 CB,设置世纪使能位CEB为"1",将使世纪位CB锁定,无论从"0"上升到"1"还是从"1"下降到"0",世纪都将反转。若设置世纪使能位CEB为"0",将使世纪位CB不锁定,包含天的寄存器3是从位D0到位D2。寄存器4、 5、 6包含星期、月和年,最后的寄存器是控制寄存器。寄存器0的第7位(D7)含义是停止位,当把这一位设置为"1"时,将使振荡器停止振荡。假如期望该器件废除大量的计时,振荡器可以停止振荡,以减小电流的消耗。复位以后为"0", 振荡器在四秒之内重新启振(典型值为1秒)。
7个时钟寄存器一次可读一个字节或连续整块读取,控制寄存器(地址为7)可以单独访问。7个时钟地址的任意一个的读取在确保时钟更新时不会发生,假如时钟地址正在读取,时钟寄存器的更新将延时250ms,确保读取在更新发生之前完成,可预防在读取期间数据的变动。

时钟电路:

时钟电路如图4所示。

图4 时钟电路(略)


软件设计

应用程序的特点就是通过控制特殊功能寄存器(SFR)以及各种自定义寄存器来实现各种功能。主要包括I2C总线初始化程序、发送时间信息子程序、接收时间信息子程序、中断等待子程序和中断服务程序。程序框图如图5所示。

图5 程序框图(略)

发送时间信息子程序

void i2c_xmit (unsigned char i2c_address, unsigned char start_address, unsigned char data_len)
{
while ((S2STA & BBUSY) != 0); // 等待I2C忙标志清零
i2c_master = 1;
i2c_xmitr = 1;// 设置主机发送模式
S2DAT = i2c_address;// 设置I2C地址
S2CON |= ENI;// 使能I2C
S2CON &= ~STO;// 清I2C停止标志
S2CON |= STA;// 设置I2C起始标志
S2CON &= ~AA;// 清应答使能信号
i2c_wait_for_int();// 等待中断,10ms
S2CON &= ~STA;// 清起始标志
S2DAT = start_address; // 发送首地址
i2c_wait_for_int();S2CON &= ~STA;// 清起始标志
for(i=0; i < (data_len-1); i++){
S2DAT = i2c_xmit_buf[i];
i2c_wait_for_int();S2CON &= ~STA;}
S2CON |= STO;// 设置停止标志
S2DAT = i2c_xmit_buf[i];// 发送最后一个字节
i2c_wait_for_int();
}

接收时间子程序:

void i2c_rcv (unsigned char i2c_address, unsigned char start_address, unsigned char data_len)
{
while ((S2STA & BBUSY) != 0);
i2c_master = 1;
i2c_xmitr = 0;// 设置主机接受模式

S2DAT = i2c_address;// 配置I2C从机地址
S2CON |= ENI;
S2CON |= STA;
S2CON &= ~AA;
i2c_wait_for_int();
S2CON &= ~STA;
S2CON |= STO;
S2DAT = start_address;
i2c_wait_for_int();
S2DAT = 0xFF;// 发送虚假字节,使SDA为高

S2DAT = (i2c_address | 0x01);// 重新发送从机地址 ( R/W 位为1)
S2CON |= ENI;
S2CON &= ~STO;S2CON |= STA;S2CON &= ~AA;
i2c_wait_for_int();
S2CON &= ~STA;S2DAT = 0xFF;// 发送0xFF,使SDA为高
S2CON |= AA;// 设置应答使能标志

i2c_wait_for_int();
for(i=0; i < (data_len-1); i++){
dummybyte = S2STA;// 读取寄存器 S2STA的内容
i2c_rcv_buf[i] = S2DAT;// 读取数据到缓冲
i2c_wait_for_int();
}
S2CON &= ~AA;// 清应答使能标志
i2c_rcv_buf[i] = S2DAT;// 获取最后一个字节
i2c_wait_for_int();
dummybyte = S2STA;
i++;
i2c_rcv_buf[i] = S2DAT;
}

调试中需要注意几个问题:首先在调试发送子程序时,要先发送7个字节,发送完毕后要先设置停止标志,然后再发送第八个字节,发送完毕后总线会自动发送停止标志。若发送完8个字节再设置停止标志,先前发送的数据会受到破坏。其次,调试接收子程序时,在写完首地址和读受控地址后,都需要发送0xFF,释放总线。在接收数据时,也需要在接收最后一个字节之前清应答使能标志,否则在接收到最后一个字节后也会产生应答信号,不符合读模式时序。


结束语

电路中采用了备份电池,即使系统掉电,M41T0也能正常工作,不影响时钟的计时。 PSD3251的电压保持脚PC2(VSTBY)与外接电池相连,在程序中把存储时间信息的寄存器分配在SRAM中,即使发生掉电,存储在SRAM中的内容也将保持。这样就为用户存储重要数据信息提供了极大的方便;

如果供电电压低于电池电压,内部电源将切换到电池电压,能够很好的维持系统的稳定,提高系统的抗干扰性。本系统结构相对简单, PSD3251有很强的可扩展性,可满足用户多方面的需求。时钟芯片M41T0成本较低,且无需考虑供电问题,有较强的稳定性,具有良好的应用前景。

《世界电子元器件》2006.8
         
版权所有《世界电子元器件》杂志社
地址:北京市海淀区上地东路35号颐泉汇 邮编:100085
电话:010-62985649
E-mail:dongmei@eccn.com