Piotr
Guest
Sun Jun 18, 2006 8:41 pm
Witam serdecznie.
Chciałbym zrealizować programową obsługę protokołu I2C. Ogólny zarys
pomysłu jest taki, iż linia zegara jest podłączona do pinu ustawionego
jako wyjście, natomiast linia danych połączona jest z pinem który
standardowo ustawiony jest jako wejście. Jeżeli coś się pojawi na SDA,
generowane jest przerwanie w którym to odczytuje bity. Jeśli natomiast
będę chciał coś wysłać, ustawiam pin SDA jako wyjście i wysyłam.
Takie rozwiązanie zamierzam zaimplementować na mikrokontrolerze
MC68HC908GP32 i testować je komunikując się z pamięcią eeprom AT24C32.
Bardzo proszę o porady oraz o ewentualne bardziej profesjonalne sposoby
realizacji programowego I2C.
Z góry dziękuję za pomoc.
--
Piotr
Paweł Cern
Guest
Mon Jun 19, 2006 7:21 am
Quote:
Chciałbym zrealizować programową obsługę protokołu I2C. Ogólny zarys
pomysłu jest taki, iż linia zegara jest podłączona do pinu ustawionego
jako wyjście, natomiast linia danych połączona jest z pinem który
standardowo ustawiony jest jako wejście. Jeżeli coś się pojawi na SDA,
generowane jest przerwanie w którym to odczytuje bity. Jeśli natomiast
będę chciał coś wysłać, ustawiam pin SDA jako wyjście i wysyłam.
Takie rozwiązanie zamierzam zaimplementować na mikrokontrolerze
MC68HC908GP32 i testować je komunikując się z pamięcią eeprom AT24C32.
Moment, jeśli ten MC68HC... będzie masterem, to może nie warto używać
przerwań. Jeśli już to może do śledzenia czy slave nie blokuje SCL (zapis
komórki/grupy komórek w pamięci typu eeprom to czas rzędu kilku ms). Swoją
drogą warto dobrze sprawdzić czy jakiś interfejs nie jest natywnie zgodny z
I2C. Oznaczenie I2C jest własnością Philipsa i zdarza się że producenci go
nie używają. Przykładem jest Atmel i interfejs TWI w MCU AVR.
Paweł
Piotr
Guest
Mon Jun 19, 2006 12:13 pm
Paweł Cern napisał(a):
Quote:
Moment, jeśli ten MC68HC... będzie masterem, to może nie warto używać
przerwań. Jeśli już to może do śledzenia czy slave nie blokuje SCL
(zapis komórki/grupy komórek w pamięci typu eeprom to czas rzędu
kilku ms).
Faktycznie jeśli będzie masterem to teoretycznie będę wiedział kiedy
przełączyć pin na wejście i zczytywać dane. Tylko zastanawia mnie czy
nie lepiej zrobić to na przerwaniu, a nie w jakiejś pętli zczytywać dane.
Quote:
Swoją drogą warto dobrze sprawdzić czy jakiś interfejs nie
jest natywnie zgodny z I2C.
Tak, owszem zdaję sobie z tego sprawę, niestety ten uC nie posiada
żadnego interfejsu I2C. Jeżeli by mnie interesowało sprzętowe
rozwiązanie problemu to bym zamontował jakiś mostek UART <-> I2C,
chociażby SC16IS740 Philips'a.
Dziękuję za zainteresowanie i proszę o dalsze porady.
--
Piotr
Paweł Cern
Guest
Mon Jun 19, 2006 1:37 pm
Quote:
Faktycznie jeśli będzie masterem to teoretycznie będę wiedział kiedy
przełączyć pin na wejście i zczytywać dane. Tylko zastanawia mnie czy nie
lepiej zrobić to na przerwaniu, a nie w jakiejś pętli zczytywać dane.
A jaki będzie narzut czasowy zapamiętania / odtworzenia kontekstu
(rejestrów) wewnątrz obsługi przerwania? Byćmoże gra nie jest warta
świeczki.
Paweł