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 <em>slave</em> I2C

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.

Do pobrania

O autorze