Bootloader dla zestawu FREEboard – wprowadzenie

Prawidłowe funkcjonowanie interfejsów komunikacyjnych, takich jak np. I2C, SPI oraz UART, uzależnione jest od konfiguracji zarówno odpowiednich modułów jak również powiązanych z nimi wyprowadzeń. W większości mikrokontrolerów z rodziny KINETIS konfiguracja modułów peryferyjnych jest podobna, a różnica występuje w zakresie wyprowadzeń, gdzie do poszczególnych linii przypisana jest lista możliwych funkcji alternatywnych. Stąd też w pliku hardware_init_x.c zdefiniowane są wymagane funkcje konfigurujące, m.in. x_pinmux_config(), init_hardware() oraz deinit_hardware() (przykład dla układów z serii KL25Z):

Przykładowa mapa pamięci dla mikrokontrolerów serii KL25Z128 zawarta jest w pliku memory_map_x.c i wygląda jak poniżej:

Tablica deskryptorów, zdefiniowana w pliku peripherals_x.c, zawiera dane o rodzaju i numerze komunikacyjnych układów peryferyjnych dostępnych w mikrokontrolerze, a także wskaźniki na struktury opisujące kolejne warstwy architektury interfejsu peryferia (pod pojęciem interfejsu peryferia należy rozumieć zbiór środków w postaci funkcji, które umożliwiają pracę z układem peryferyjnym na poziomie od pojedynczych bajtów do rozbudowanych pakietów, bez wnikania w szczegóły implementacyjne tego układu) (rysunek 3). Ogólna struktura deskryptora peryferia jest następująca:

Pole typeMask struktury może przyjmować jedną z poniższych wartości wskazujących rodzaj interfejsu komunikacyjnego:

  • kPeripheralType_UART – wartość 1,
  • kPeripheralType_I2CSlave – wartość 2,
  • kPeripheralType_SPISlave – wartość 4,
  • kPeripheralType_CAN – wartość 8,
  • kPeripheralType_USB_HID – wartość 16,
  • kPeripheralType_USB_CDC – wartość 32,
  • kPeripheralType_USB_DFU – wartość 64,
  • kPeripheralType_USB_MSC – wartość 128.

O autorze