[elektro] PIC I2C lib

Moczik Gabor pm_levlista at progzmaster.hu
Tue Oct 19 15:40:50 CEST 2010


Hali!

Teljes egészében megszakításos I2C kommunikációt írok. A slave már eleve 
megszakításos volt, a master-ral görcsölök.

Ha kész lesz, publikussá teszem az egészet. :-)

Az elképzelés, hogy a főprogram eldönti hogy írni vagy olvasni akar, 
kiadja a start_read vagy start_write utasítást, az ehhez szükséges 
címet, adatot lepakolja egy bufferbe, és jelzi hogy mehet. Innentől az 
ISR elintézi ami kell.

A write buffer csak 1 byte, mivel I2C-n tetszőlegesen bonyolult 
kombinációban lehet write/read utasításokat küldeni, a buffer írásakor 
az user mondja meg, hogy amint elment az adat vége-e a tranzakciónak 
vagy nem, az előbbi esetben az ISR automatikusan generál egy STOP 
feltételt is, az utóbbiban veszi a következő adatot és küldi.

Azt nem tudom eldönteni, hogy mi legyen akkor, ha nem kértek STOP-ot, 
tehát nincs vége, viszont az adat elment, megérkezett a megszakíás, de 
még a buffer nincs feltöltve az új adattal (késik a főprogram).

A CPU nagyságrenddel gyorsabb mint az I2C busz, ez elvileg nem 
következhet be ha a főprogramban egymás után vannak az utasítások, de jó 
lenne most már atomstabilra írni ezt a kócerájt.

Bújom az adatlapot egy ideje, de nem látom át, hogy master-ként hogyan 
tarthatnám a buszt. Ha az ISR-ben nem töltöm fel új adattal az SSPBUF 
regisztert, akkor nincs kiszolgálva a megszakítás.
Ha itt letiltom a megszakítást az megengedhető? (SSPIE=0)

A másik, hogy mit volna érdemes tenni ha a slave nem fogadja az adatot 
vagy a kiküldött címet (NAK)?
Most úgy írtam meg, hogy a cím küldésnél generál egy STOP-ot, a 
főprogramnak jelzi hogy nincs válasz.
Ha adat küldésnél kapok vissza NAK-et, akkor mi legyen?
Automatikusan lezárjam a kommunikációt az ISR-ben, vagy bízzam a 
főprogramra? Van gyakorlati példa, hogy NAK-ra nem kell megállni?

-- 
((( Móczik Gábor  )))--((( e|mail: pm-01 |@| progzmaster |.| hu )))
((( S.k.y.p.e.: moczik )))



More information about the Elektro mailing list