[APLIKACJA] STM32 i monochromatyczny wyświetlacz OLED

Na rysunku 4 pokazano sekwencję zapisywania danych przez mastera do slave.

 

Rys. 4. Sekwencja zapisania danych na magistrali I2C

 

Z zadaniami wykonywanymi przez mastera na magistrali są związane zdarzenia (events, EV):

  • EV5: SB1, zerowana po odczytaniu rejestru SR1 . Po tym jest zapisywany rejestr DR z bajtem adresu slave uzupełnionym o bit R/W=0
  • EV6: ADDR=1, ustawiany w rejestrze SR1, zerowany przez odczytanie rejestru SR2
  • EV8_1: TxE=1, rejestr przesuwny jest pusty, rejestr danych jest pusty, zapisanie danej do rejestru DR
  • EV8: TxE=1, rejestr przesuwny nie jest pusty, rejestr danych jest pusty, zerowany przez zapis rejestru DR
  • EV8_2:, TxE=1, BTF=1 – żądanie sekwencji STOP. TxE i BTF zerowany sprzętowo przez sekwencję STOP

Nota aplikacyjna zawiera procedurę wysyłania przez I2C zawartości bufora z danymi. Jej argumentami są: numer interfejsu (I2C1, lub I2C2) wskaźnik na bufor z danymi, ilość danych do wysłania, tryb pracy i adres slave. Możliwe są 3 tryby pracy: polling, interrupt i DMA, z których zweryfikowano dwa: polling i DMA.

Na listingu 3 pokazano procedurę wysyłania do sterownika wyświetlacza zawartości bufora w trybie polling. W pierwszej kolejności jest inicjowana sekwencja START. Zakończenie tej sekwencji jest sygnalizowane przez wyzerowanie bitu SB (zdarzenie EV5). Jeżeli sekwencja START nie zakończy się w określonym czasie, to procedura kończy działanie i zwraca kod błędu. Po sekwencji START jest wysyłany adres SLAVE przez zapisanie jego wartości do rejestru DR. Wysłanie adresu i odebranie bitu potwierdzenia A jest sygnalizowane ustawieniem bitu ADDR. Jeżeli wszystko przebiega poprawnie, to można zapisywać w pętli kolejne dane do rejestru DR. Wysłanie kompletnej danej jest sygnalizowane ustawieniem bitu TxE.

 

List. 3. Wysyłanie zawartości bufora do kontrolera wyświetlacza w trybie polling

Na listingu 4 pokazano procedurę wysyłania zawartości bufora do kontrolera wyświetlacza z wykorzystaniem kanału DMA.

 

List. 4. Wysyłanie zawartości bufora do kontrolera wyświetlacza w trybie DMA

Do pobrania

O autorze