DS1339

DS1339

    接口:I2C總線

    數據:seconds,minutes,hours,day,date,month,year

    格式:12 or 24-hour format(AM/PM),時間和日期採用BCD格式

 

    寄存器

地址

B7

B6

B5

B4

B3

B2

B1

B0

功能

範圍

00H

0

10秒

0059

 

01H

0

10分

00-59

 

02H

0

12/

/PM

10小時

小時

小時

1-12+AM/PM

00-23

 

10小時

 

03H

0

0

0

0

0

星期

星期

1-7

 

04H

0

0

10天

0-31

 

05H

世紀

0

0

10月

月/世紀

01-12+CENTURY

 

06H

10年

00-99

 

07H

A1M1

10秒

報警1秒

00-59

 

08H

A1M2

10分

報警1分

00-59

 

09H

A1M3

12/

/PM

10小時

小時

報警1小時

1-12+AM/PM00-23

 

10小時

 

0AH

A1M4

DY/DT

10天

星期,天

報警1星期,報警1天

1-7,1-31

 

0BH

A2M2

10分

報警2分

00-59

 

0CH

A2M3

12/

/PM

10小時

小時

報警2小時

1-12+AM/PM00-23

 

10小時

 

0DH

A2M4

DY/

10天

星期,天

報警2星期,報警2天

1-7,1-31

 

0EH

0

BBSQI

RS2

RS1

INTCN

A2IE

A1IE

控制

 

 

0FH

OSF

0

0

0

0

0

A2F

A1F

狀態

 

 

10H

TCS3

TCS2

TCS1

TCS0

DS1

DS0

ROUT1

ROUT0

涓流充電器

 

 

 

說明:

☆ 時間寄存器的B6選擇12或24小時模式,1=12小時模式,0=24小時模式;

☆ 12小時模式時,AM/PM位=1是PM,0=AM

☆ 24小時模式時,小時寄存器的B5是10小時位(20到23時);

☆ 當12/24模式改變時,所有的小時值(包括報警)都必須重新輸入;

☆ 當從99年到00年時,就觸發月寄存器的B7(世紀);

☆ 星期寄存器在午夜遞增,和星期對應的值是可以自定義的,但必須是順序的(如1對應星期天,則2就對應星期一,等等);

☆ 控制寄存器的INTCN位使能報警;

☆ 控制寄存器0EH

    EOSC:晶振使能0=啓動晶振,1=停止晶振,缺省=0;

    BBSQI:1=當沒有VCC使用VBACKUP時輸出方波或中斷,0=當VCC低於VPF時SQW/INT腳變成高阻態。缺省是0;

    RS2:RS1:控制方波輸出頻率,如下表所示,缺省是11

 

SQW/INT輸出

INTCN

RS2

RS1

SQW/ 輸出

A2IE

A1IE

0

0

0

1Hz

X

X

0

0

1

4.096kHz

X

X

0

1

0

8.192kHz

X

X

0

1

1

32.768kHz

X

X

1

X

X

0

1

1

X

X

1

0

1

X

X

+

1

1

 

    INTCN:1=時間寄存器和報警1或報警2之間匹配時激活SQW/INT腳(假設報警使能),0=SQW/INT輸出方波。缺省是0;

    A2IE:1=允許報警2標誌(A2F)激活SQW/INT,0=A2F不能激活中斷,缺省是0;

    A1IE:1=允許報警1標誌(A1F)激活SQW/INT,0=A1F不能激活中斷,缺省是0;

☆ 狀態寄存器

    OSF:晶振停止標誌,1=晶振停止了或者是停止過,開機後應軟件清零;

    A2F:1=表示時間和報警2寄存器匹配,可以軟件清零;

    A1F:1=表示時間和報警1寄存器匹配,可以軟件清零;

☆ 涓流充電器寄存器

   

B7

B6

B5

B4

B3

B2

B1

B0

功能

X

X

X

X

0

0

X

X

禁止

X

X

X

X

1

1

X

X

禁止

X

X

X

X

X

X

0

0

禁止

1

0

1

0

0

1

0

1

沒有二極管,250Ω電阻

1

0

1

0

1

0

0

1

一個二極管,250Ω電阻

1

0

1

0

0

1

1

0

沒有二極管,2kΩ電阻

1

0

1

0

1

0

1

0

一個二極管,2kΩ電阻

1

0

1

0

0

1

1

1

沒有二極管,4kΩ電阻

1

0

1

0

1

0

1

1

一個二極管,4kΩ電阻

0

0

0

0

0

0

0

0

上電初始化值

 

二極管和電阻根據電池的最大充電電流決定,如假設VCC=3.3V,假設選擇了二極管和R2(2KΩ),則:

IMAX=(3.3V-二極管壓降)/R2≈(3.3V-0.7V)/2KΩ≈1.3mA

 

I2C總線:

    SDA和SCL是開漏open-drain輸出;

    在傳輸數據時,當時鍾爲高時,數據線必須保持穩定,如果發生改變,就認爲是控制信號;

    總線狀態:

        ☆ 總線不忙:數據和時鐘線都是高電平;

        ☆ 開始數據傳輸:時鐘爲高電平,數據線有一個下降沿(從高到低);

        ☆ 停止數據傳輸:時鐘爲高電平,數據線有一個上升沿(從低到高);

        ☆ 數據有效:在開始條件後,在時鐘爲高電平期間,數據線一直是穩定的,就表示數據有效,數據線必須在時鐘爲低電平時改變,每個數據位一個時鐘脈衝,每個數據從開始條件開始,由停止條件終止;開始和停止之間所傳輸的數據字節數不限。傳輸按字節響應,接收者在第九位返回一個應答。

        ☆ 應答:每個接收設備在接收到每個字節後必須產生一個應答。主設備必須爲應答送出一個時鐘脈衝;

            在應答時,應答設備在應答時鐘脈衝期間拉低SDA線,這樣在應答時鐘脈衝中,SDA線一直是穩定的低電平;

            主設備通知從設備數據傳輸結束:最後一個字節後主設備不應答;

        ☆ 數據傳輸時先送高位;

 

DS1339作爲從設備(寫模式):

主設備先送地址,地址由1101000(7位)+R/ (方向位,0=寫)組成,在確認地址後,DS1339會給出一個應答;然後主設備可以送寄存器地址給DS1339,同樣DS1339會給一個應答;然後主設備還可以送出0到幾個字節數據,DS1339會對每個字節應答,地址指針每接收到一個字節就遞增一次。

DS1339作爲從設備(讀模式):

    第一個字節和上面一樣,但方向位=1;在應答第一個字節後,DS1339就開始送出寄存器指針所指向的寄存器數據,如果在讀之前沒有寫寄存器指針,這寄存器指針就使用用來的值;每送出一個字節,寄存器指針就遞增,DS1339用“不應答”結束一次讀。

    上面兩個過程如下圖所示:

 

    數據寫

 

從地址

R/W

 

寄存器地址

 

數據

 

 

數據

 

 

S

1101000

0

A

XXXXXXXX

A

XXXXXXXX

A

XXXXXXXX

A

P

S開始,A應答,P停止;

主到從,■從到主;

   

    數據讀

 

從地址

R/W

 

數據

 

數據

 

 

數據

 

 

S

1101000

1

A

XXXXXXXX

A

XXXXXXXX

A

XXXXXXXX

 

P

S開始,A應答,P停止;

主到從,■從到主;

 

    數據讀(寫指針,然後讀)

 

 

從地址

R/W

 

寄存器地址

 

 

從地址

 

R/W

 

 

S

1101000

0

A

XXXXXXXX

A

S

1101000

1

A

 

 

 

 

 

 

 

 

 

 

 

 

 

數據

 

數據

 

 

數據

 

 

 

 

 

XXXXXX

A

XXXXXX

A

XXXXXX

 

P

 

 

 

S開始,A應答,P停止;

主到從,■從到主;

 

 

PIC18F2525 I2C

寄存器

SSPSTAT(狀態寄存器),SSPCON1和SSPCON2(控制寄存器);

 

SPI模式

寄存器

    SSPCON1/SSPSTAT/SSPBUF/SSPSR(不能直接訪問)

    接收時,SSPSR和SSPBUF構成雙緩衝,數據先到SSPSR,然後送到SSPBUF

    發送時,數據同時寫到SSPBUF和SSPSR

 

    SSPSTAT(SPI模式)

B7

 

 

 

 

 

 

B0

SMP

CKE

D/

P

S

R/

UA

BF

SMP:採樣

    SPI主模式:

        1=在數據輸出結尾採樣輸入數據;

        0=在數據輸出中間採樣輸入數據;

    SPI從模式:

        必須=0;

CKE:SPI時鐘選擇位

    1=當時鍾狀態從激活變到空閒時傳輸;

    0=當時鍾狀態從空閒變到激活時傳輸;

    時鐘狀態的極性由CKP位設置。

D/A:地址/數據位

    只用在I2C模式中。

P:停止位

    只用在I2C模式中。

S:開始位

    只用在I2C模式中。

R/W:讀/寫信息位

    只用在I2C模式中。

UA:更新地址位

    只用在I2C模式中。

BF:緩衝區滿狀態位(接收模式)

    1=接收完成,SSPBUF滿;

    0=接收沒有完成,SSPBUF空;

 

SSPCON1:

B7

 

 

 

 

 

 

B0

WCOL

SSPOV

SSPEN

CKP

SSPM3

SSPM2

SSPM1

SSPM0

WCOL:寫衝突檢測位(發送模式)

    1=寫SSPBUF時仍在發送前一個數據(必須軟件清除);

    0=沒有衝突;

SSPOV:接收溢出

    SPI從模式:

    1=接收到一個新數據,但SSPBUF仍保存了前一個數據,這時,SSPSR中的數據就會丟失;

    0=沒有溢出;

SSPEN:同步串行端口使能

    1=使能串行端口,把SCK,SDO,SDI和SS配置爲串行端口腳;

    0=禁止串行端口;

    使能時,這些腳必須正確配置輸入或輸出。

CKP:時鐘極性選擇

    1=時鐘的空閒狀態是高電平;

    0=時鐘的空閒狀態時低電平;

SSPM3:SSPM0:同步串行端口模式選擇

    0101=SPI從模式,時鐘=SCK腳,SS腳控制禁止,SS可以用作I/O腳;

    0100=SPI從模式,時鐘=SCK,SS腳控制允許;

    0011=SPI主模式,時鐘=TMR2輸出/2;

    0010=SPI主模式,時鐘=FOSC/64

    0001=SPI主模式,時鐘=FOSC/16

    0000=SPI主模式,時鐘=FOSC/4

 

操作

    初始化操作:

        4 主(SCK是時鐘輸出)或從(SCK是時鐘輸入)模式

        4 時鐘極性

        4 數據輸入採樣時間

        4 時鐘邊沿(在SCK的上升或下降沿輸出數據)

        4 時鐘速率(只對主模式)

        4 從選擇模式(只對從模式)

       

注意:送出數據時高位在先。

   

I2C模式

寄存器

    SSPSTAT(I2C模式)

B7

 

 

 

 

 

 

B0

SMP

CKE

D/

P

S

R/

UA

BF

SMP:轉換速率控制

    1=標準速度模式,轉換速率控制禁止(100kHz和1MHz);

    0=高速模式,允許轉換速率控制(400kHz);

CKE:SMBus選擇

    1=使能SMBus特定輸入;

    0=禁止SMBus特定輸入;

D/A:數據/地址

    主模式:保留

    從模式:

    1=表示最後一個發送或接收的字節是數據;

    0=表示最後發送或接收到的字節是地址;

P:停止位

    1=表示最後檢測到一個停止位;

    0=最後沒有檢測到停止位;

    注:本位在復位和SSPEN=0時清零;

S:開始

    1=表示最後檢測到了一個開始位;

    0=最後沒有檢測到開始位;

    注:本位在復位和SSPEN=0時清零;

R/W:讀/寫信息位

    在從模式:

    1=讀;

    0=寫;

    注:本位保存了最後一次地址匹配時的R/W信息,本位只在地址匹配到下一個開始位、停止位或無應答位之間有效。

    在主模式:

    1=正在發送;

    0=沒在發送;

    注:本位和SEN、RSEN、PEN、RCEN或ACKEN相或可以指示MSSP是否激活;

UA:更新遞增(只用在10位從模式)

    1=表示用戶需要更新SSPADD寄存器中的地址;

    0=地址不需要更新;

BF:緩衝區滿狀態位

    在發送模式:

    1=SSPBUF滿;

    0=SSPBUF空;

    在接收模式:

    1=SSPBUF滿(不包括ACK和停止位);

    0=SSPBUF空(不包括ACK和停止位);

 

SSPCON1:(I2C模式)

B7

 

 

 

 

 

 

B0

WCOL

SSPOV

SSPEN

CKP

SSPM3

SSPM2

SSPM1

SSPM0

WCOL:寫衝突檢測位(發送模式)

    在主發送模式:

    1=當I2C不具備開始發送條件時寫SSPBUF寄存器(必須軟件清零);

    0=沒有衝突;

    在從發送模式:

    1=還在發送前一個數據時寫SSPBUF寄存器(必須軟件清零);

    0=沒有衝突;

    接收模式:無關位;

SSPOV:接收溢出指示

    在接收模式:

    1=SSPBUF寄存器前一個數據沒有讀走,又接收到新數據(必須軟件清零);

    0=沒有溢出;

    在發送模式:無關位;

SSPEN:同步串口使能

    1=使能串口,SDA和SCL配置爲串口腳;

    0=禁止串口,這些腳配置爲I/O腳;

    注:當使能時,必須正確配置SDA和SCL的方向;

CKP:SCK釋放控制

    在從模式:

    1=釋放時鐘;

    0=保持時鐘爲低電平(時鐘擴展),以保證數據建立時間;

    在主模式:未用;

SSPM3:SSPM0:同步串口模式選擇

    1111=I2C從模式,10位地址,開始和停止位中斷使能;

    1110=I2C從模式,7位遞增,開始和停止位中斷使能;

    1011=I2C軟件控制主模式(從空閒);

    1000=I2C主模式,時鐘=FOSC/(4*(SSPADD+1))

    0111=I2C從模式,10位地址;

    0110=I2C從模式,7位地址;

   

SSPCON2:(I2C模式)

B7

 

 

 

 

 

 

B0

GCEN

ACKSTAT

ACKDT

ACKEN

RCEN

PEN

RSEN

SEN

GCEN:通呼使能(只對從模式)

    1=當SSPSR接收到一個通呼地址(0000H)時中斷使能;

    0=禁止通呼地址;

ACKSTAT:應答狀態(只對主發送模式)

    1=沒有從從設備接收到應答;

    0=從從設備接收到了應答;

ACKDT:應答數據(只對主接收模式)

    1=沒有應答;

    0=應答;

ACKEN:應答序列使能(只對主接收模式)

    1=初始化SDA和SCL腳的應答序列,併發送ACKDT數據位,硬件自動清零;

    0=應答序列無效;

RCEN:接收使能(只對主模式)

    1=使能I2C的接收模式;

    0=接收無效;

PEN:停止條件使能(只對主模式)

    1=初始化SDA和SCL腳的停止條件,硬件自動清零;

    0=停止條件無效;

RSEN:重複開始條件使能(只對主模式)

    1=初始化SDA和SCL腳的重複開始條件,硬件自動清零;

    0=重複開始條件無效;

SEN:開始條件使能/擴展使能

    在主模式:

    1=初始化SDA和SCL腳的開始條件,硬件自動清零;

    0=開始條件無效;

    在從模式:

    1=從發送和接收都使能時鐘擴展(擴展使能);

    0=禁止時鐘擴展;

 

操作

    I2C可以選擇如下模式:

    4 I2C主模式時鐘

    4 I2C從模式(7位地址)

    4 I2C從模式(10位地址)

    4 I2C從模式(7位地址),開始和停止位中斷使能

    4 I2C從模式(10位地址),開始和停止位中斷使能

    4 I2C軟件控制主模式,從模式無效

 

主模式

    一個典型的主模式發送過程可以如下:

    1.用戶設置SEN=1,產生一個開始條件;

    2.硬件SSPIF=1(需要軟件清零),MSSP在開始其他操作前需要等待所需的啓動時間;

    3.從地址加載到SSPBUF

    4.地址從SDA腳送出;

    5.MSSP模塊從從設備讀入ACK位,使SSPCON2寄存器的ACKSTAT=0

    6.MSSP模塊在第九個時鐘週期產生一箇中斷,使SSPIF=1(需要軟件清零);

    7.8位數據加載到SSPBUF

    8.數據從SDA送出;

    9.MSSP模塊從從設備接收ACK信號並寫到SSPCON2寄存器的ACKSTAT位;

    10.MSSP模塊在第九個時鐘週期產生一箇中斷,使SSPIF=1

    11.用戶設置PEN=1,產生一個停止條件;

    12.一旦停止條件完成就會產生一箇中斷。

 

    一個典型的主模式接收過程可以如下:

    1.用戶設置SEN=1,產生一個開始條件;

    2.硬件SSPIF=1(需要軟件清零),MSSP在開始其他操作前需要等待所需的啓動時間;

    3.從地址加載到SSPBUF

    4.地址從SDA腳送出;

    5.MSSP模塊從從設備讀入ACK位,使SSPCON2寄存器的ACKSTAT=0

    6.MSSP模塊在第九個時鐘週期產生一箇中斷,使SSPIF=1(需要軟件清零);

    7.用戶使RCEN1=1,開始一次接收;

    8.MSSP模塊在接收到8位數據後使SSPIF=1(需要軟件清零);

    9.用戶設置ACKDT=0(應答)或1(不應答),並使ACKEN=1(需要軟件清零),使ACKDT從SDA送出;

    10.MSSP模塊在第九個時鐘週期產生一箇中斷,使SSPIF=1(需要軟件清零);

    11.用戶設置PEN=1,產生一個停止條件;

    12.一旦停止條件完成就會產生一箇中斷。

 

波特率

    波特率發生器自動加載SSPADD中的值;

 

I2C主模式發送

    4 ACKSTAT狀態標誌

        當從設備應答時,ACKSTAT=0,沒有應答時,ACKSTAT=1

 

I2C主模式接收

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章