Obsługa I2C w trybie Fast-mode Plus w LPC1300
LPC1300 to rodzina mikrokontrolerów ARM opartych na rdzeniu Cortex-M3, przeznaczonych do zastosowań wymagających dużej skali integracji i niskiego poboru mocy. Każdy z mikrokontrolerów LPC1300 posiada kontroler magistrali I2C. W układach tych interfejs I2C został rozszerzony o tryb pracy Fast-mode Plus (FM+) umożliwiający między innymi osiąganie prędkości transferu do 1 Mbit/s, rozpoznawanie wielu adresów i tryb monitora. W przypadku Fast-mode Plus wybrane mogą zostać częstotliwości pracy od 400 kHz do 1 MHz.
Konfiguracja I2C Fast-mode Plus w LPC1300
W rodzinie mikrokontrolerów LPC1300 do realizacji interfejsu I2C wykorzystywane są wyprowadzenia PIO0_4 i PIO0_5. Aby wykorzystać tryb Fast-mode Plus, wyprowadzenia I2C muszą zostać poprawnie skonfigurowane w rejestrze IOCONFIG, jak pokazano w tabeli 1 oraz tabeli 2.
Tab. 1. Opis bitów rejestru IOCON_PIO0_4 (adres 0x4004 4030)
Bit | Symbol | Wartość | Opis | Wartość początkowa |
2:0 | FUNC | Wybór funkcji pinu | 000 | |
000 | Wybór funkcji PIO0_4 | |||
001 | Wybór funkcji I2C SCL | |||
010 do 111 | Niedostępne | |||
7:3 | – | Niedostępne | 00000 | |
9:8 | I2CMODE | Wybór trybu I2C | 00 | |
00 | Standard/Fast-mode IC | |||
01 | Fast-mode Plus I2C | |||
11 | Niedostępne | |||
31:10 | – | – | Niedostępne | – |
Tab. 2. Opis bitów rejestru IOCON_PIO0_5 (adres 0x4004 4034)
Bit | Symbol | Value | Description | Reset value |
2:0 | FUNC | Wybór funkcji pinu | 000 | |
000 | Wybór funkcji PIO0_5 | |||
001 | Wybór funkcji I2C SDA | |||
010 do 111 | Niedostępne | |||
7:3 | – | Niedostępne | 00000 | |
9:8 | I2CMODE | Wybór trybu I2C | 00 | |
00 | Standard/Fast-mode I2C | |||
01 | Fast-mode Plus I2C | |||
11 | Niedostępne | |||
31:10 | – | – | Niedostępne | – |
W trybie Fast-mode Plus, bity FUNC(2:0) powinny przyjmować wartość binarną 001, a I2CMODE (bity 9:8) powinny być równe 01 (również binarnie). Po konfiguracji Fast-mode Plus, piny I2C posiadają aktywny filtr dolnoprzepustowy (wliczając w to wyjście z otwartym drenem zgodnie ze specyfikacją I2C). W tym trybie, wyprowadzenia działają jak źródła prądowe.
Przykład implementacji sprzętowej i programistycznej I2C Fast-mode Plus
Aplikacja demonstracyjna została stworzona w środowisku Keil MDK 3.70 i przetestowana na płytce NXP LPC1300 oraz podrzędnej płytce I2C (slave). Zawarty jest też analogiczny projekt dla środowiska IAR EWARM 5.40.
Środowisko sprzętowe składa się z zestawu z mikrokontrolerem LPC1300 i płytki demonstracyjnej I2C FM+. Płytki połączono ze sobą za pomocą przewodu o długości 30 cm. Schemat płytki I2C FM+ pokazano na rysunku 1.
Rys. 1. Schemat płytki slave I2C
Układy NXP PCA9674 oraz PCA9632 zostały wybrane jako jednostki podrzędne dla układu LPC1300. PCA9674 jest ośmiobitowym ekspanderem wejścia/wyjścia. W tym przykładzie porty P0 do P3 są skonfigurowane jako wejścia, a P4 – P7 zostały skonfigurowane jako wyjścia zasilające diody LED. PCA9632 jest 4-bitowym sterownikiem LED dla FM+ I2C. W tym przykładzie PCA9632 jest używany do zasilania czterech diod LED. Częstotliwość migania jest zmieniania, pokazując, czy magistrala I2C pracuje w trybie FM+ czy w trybie standardowym.
Przykładowy program został napisany w celu demonstracji trybu Fast-mode Plus I2C przy użyciu diod LED. Dostępne są dwa pliki kodów źródłowych, I2C.c i I2Ctest.c. I2C.c zawiera funkcje związane z I2C wywoływane przez główną procedurę programu. I2Ctest.c jest główną procedurą odczytującą i zapisującą dane i komendy I2C do modułów podrzędnych.
Tab. 3. Lista funkcji I2C.c
Funkcje | Opis |
void I2C_IRQHandler(void) uint32_tI2CStart(void) uint32_tI2CStop(void) uint32_tI2CInit(uint32_t I2cMode) uint32_tI2CEngine(void) |
Obsługa przerwań I2C – tylko w trybie master Ustawienie warunku początkowego I2C. Ustawienie warunku zakończenia I2C. Inicjalizacja kontrolera I2C. Wykonaj transakcję I2C od początku do końca. |