Cteni RTC od Ramtronu
RV
vicek.radek@cpost.cz
Pondělí Listopad 20 11:40:51 CET 2006
Pavel_t napsal(a):
> Je to uz > 2 roky co jsem to psal a ted uz to jen kopiruji. Navic ten
> packal se mi nechce lustit ;) Ale pokud porovnam svuj zdrojak s Vasim
> tak ja vzdy kdyz zapisu WR nebo RD flag ukoncim zapis I2C Stop a pak
> zacinam cteni I2C Startem, odeslanim adresy a pak samotnym ctenim. Toto
> je pro pamet (16bit adresa) zobrazeno na Figure 15 v katalogovem liste.
> A plati to pro I2C komunikaci vseobecne. Mam dojem, ze toto Vas program
> nedodrzuje.
>
> Dalsi moznosti chyb, ktere ale u Vas nepredpokladam jsou:
>
> Pamet a RTC maji odlisnou I2C adresu.
> Pamet se adresuje 16bitove a RTC pouze 8bitove.
>
> Pavel
>
Dekuji za odpoved, zkusil jsem to jeste cele prepsat tak ze kazde
vycteni zacinam poslanim adresy a pak prijmu dat (predtim jsem to cetl
sekvencne proto jsem nepouzival I2C Stop). Presto mi to nechodi.
Me prijde ten DS k tomu RTCku dost strohej a myslim ze jsou tam nejasna
mista nebo alespon dosti sporna. Treba to ze je treba adresovat RTC jen
8 bitama z toho primo nikde nevyplyva. Nebo to kdy mam vratit ten bit R
zpatky na nulu pisou jen ze se to ma udelat, ale jestli to muzu udelat
hned nebo az potom co to prectu?
Zkusim ten zdrojak popsat v poznamkach abyste to nemusel lustit:
const
adr_exp_wr= %01000000; //adresa expanderu pro zapis
adr_rtc_rd= %11010001; //adresa RTC pro cteni
adr_rtc_wr= %11010000; //adresa RTC pro zapis
adr_mem_rd= %10100001; //adresa pameti pro cteni
adr_mem_wr= %10100000; //adresa pameti pro zapis
adr_rtc_tmk_on= %00000001; //reg.Flag - povoleni prepisu z jadra
adr_rtc_tmk_off= %00000000; //reg.Flag - ukonceni prepisu z jadra
Procedure RTC;
begin
//zapisu do Flag registru 1 aby se mi prepsalo RTC do registru
I2C_Start; // Issue I2C start signal
I2C_Wr(adr_rtc_wr); // poslu adresu zarizeni pro zapis
I2C_Wr(0); // poslu adresu registru Flag
I2C_Wr(adr_rtc_tmk_on); // poslu data do Flag - R=1
I2C_Stop; // Issue I2C stop signal
//nactu postupne vsech 25 registru z Companion
for k:=0 to 24 do
begin
I2C_Start; // Issue I2C start signal
I2C_Wr(adr_rtc_wr); // poslu adresu zarizeni pro zapis
I2C_Wr(k); // poslu adresu vycitaneho registru
I2C_Repeated_Start; // zopakuji Start sekvenci
I2C_Wr(adr_rtc_rd); // poslu adresu zarizeni pro cteni
a_rtc[k]:= I2C_Rd(0); // prectu registr bez ACK
I2C_Stop; // Issue I2C stop signal
end;
//zapisu do Flag registru 0 - vratim to zpet
I2C_Start; // Issue I2C start signal
I2C_Wr(adr_rtc_wr); // poslu adresu zarizeni pro zapis
I2C_Wr(0); // poslu adresu registru Flag
I2C_Wr(adr_rtc_tmk_off); // poslu data do Flag - R=0
I2C_Stop; // Issue I2C stop signal
end;
--
RadekCX - http://www.cncnet.info
Další informace o konferenci Hw-list