Mikrokontrolery Infineon XMC4500 w praktyce, część 2
Produkowane przez firmę Infineon mikrokontrolery XMC4000 (Cortex-M4) należą do najnowocześniejszych układów tego typu na rynku, a dzięki udostępnieniu przez producenta bezpłatnego, kompletnego pakietu narzędziowego – DAvE 3 – także do jednych z najwygodniejszych w praktycznym stosowaniu.
Z myślą o praktykach chcących poznać mikrokontrolery XMC4000 przygotowaliśmy kilkuodcinkowy kurs, w którym bazujemy na tanim zestawie startowym Relax Kit oraz bezpłatnym środowisku projektowym DAvE, od prezentacji którego zaczynamy.
Poprzedni odcinek kursu jest dostępny tu. Następny odcinek kursu jest dostępny tu. Podstawowe informacje o zestawie Relax Kit firmy Infineon są dostępne tu. Artykuł o zestawie Hexagon firmy Infineon jest dostępny tu. Przegląd rodziny XMC4000 jest dostępny tu. |
DAvE 3 – tworzenie aplikacji w oparciu o gotowe komponenty oprogramowania i generator kodu
Mikrokontrolery to niezwykle dynamicznie rozwijający się segment rynku układów elektronicznych. Ważniejsze czynniki stymulujące taki postęp to między innymi zapotrzebowanie na coraz bardziej zaawansowane urządzenia elektroniczne, rozwój technologii i silna konkurencja. Sprawiają one, że kolejne wprowadzane do sprzedaży rodziny mikrokontrolerów są układami dającymi projektantom coraz większe możliwości. Bardziej rozbudowana struktura wewnętrzna mikrokontrolerów i możliwość realizacji przy ich pomocy bardziej skomplikowanych i zaawansowanych aplikacji powoduje jednak, że poziom trudności tworzenia oprogramowania staje się coraz wyższy. Producenci pakietów do tworzenia oprogramowania dla systemów wbudowanych mają tego świadomość, dlatego w oferowanych przez siebie narzędziach implementują mechanizmy ułatwiające i przyspieszające tworzenie kodu. W przypadku pakietu DAvE 3 dla mikrokontrolerów Infineon XMC4000 z rdzeniem ARM Cortex-M4 wykorzystana została idea tworzenia oprogramowania o nazwie CBP (Component-Based Programming), znana też jako CBSD (Component-Based Software Development) oraz wykorzystujący ją generator kodu.
Idea CBP/CBSD
Idea CBP/CBSD polega na tworzeniu oprogramowania korzystając z gotowych, prefabrykowanych modułów oprogramowania zwanych komponentami. Ważniejsze cechy komponentów [1]:
- każdy komponent ma zdefiniowaną funkcjonalność,
- komponent może mieć postać tak zwanej „czarnej skrzynki”, co oznacza, że użytkownik nie musi wiedzieć w jaki sposób funkcjonalność komponentu została zaimplementowana,
- każdy z komponentów może być wielokrotnie wykorzystywany,
- każdy komponent musi posiadać interfejs pozwalający na komunikowanie się z innymi komponentami i aplikacją użytkownika,
- komponenty są niezależne od siebie.
Więcej informacji o CBP/CBSD można znaleźć w literaturze dotyczącej tej dziedziny [2].
DAvE Apps
Firma Infineon wykorzystała ideę CBP/CBSD w swoim pakiecie do tworzenia oprogramowania DAvE 3 [3]. Zaimplementowane komponenty noszą nazwę DAvE Apps. Pojedynczy komponent DAvE App może reprezentować albo jeden zasób wewnętrzny mikrokontrolera XMC4000 (np. przetwornik A/C), albo też może reprezentować aplikację dla tego mikrokontrolera (np. system plików, serwer www). Aktualne repozytorium dostępnych komponentów DAvE Apps przedstawiono w tabeli 1.
Tab. 1. Nazwy i funkcje komponentów DAvE Apps
Nazwa DAvE App | Rodzaj zasobu/aplikacji | Nazwa DAvE App | Rodzaj zasobu/aplikacji |
adc001…adc003 | Analog to digital converter | ledts001 | LED and touch sense control unit |
adcch001 | Analog to digital converter channel | libs | Library for PWMSP001…PWMSP002 apps |
adccmp001 | Analog to digital comparator | lmm001 | App local memory manager |
adcglob001 | Analog to digital clocks | lval001 | App logical value provider |
adcgroup001 | Analog to digital group specific configurations | nvic001…nvic002 | Interrupt handler |
aes001 | Advanced encryption standard | nvic_dma001 | DMA interrupt handler |
can001 | Controller area network | nvic_scu001 | App specific handling of interrupt events |
canglobal | Controller Area Network module clocks | poshl001 | Motor speed and position detection using hall sensors |
cap001 | Period and duty cycle capture module | posqe001 | Motor speed and position detection with quadrature encoder |
ccu4global | Four Capture/Compare Units for use as general purpose timers | pwmmp001 | Pulse width modulated multi phase signal |
ccu8global | Four Capture/Compare Units for motor control and power conversion | pwmsp001…pwmsp002 | Pulse width modulated single phase signal |
clk001 | SCU module system clocks | pwmsvm001 | Space vector pulse width modulated signal |
cnt001 | CCU4 event counter | reset001 | Reset |
crc001…crc007 | Cyclic redundancy code | rtc001 | Real time clock |
dacwg001…dacwg005 | Digital to analog converter | rtos001 | CMSIS-RTOS API |
dma001…dma004 | Direct memory access | sdmmc001…sdmmc004 | SD & MMC block layer |
dsdglobal | Delta sigma demodulator | sltha001…sltha003 | Wrapper to FAT file system (Newlib) |
dsdif003 | Delta sigma demodulator interface | snmp001 | Simple network management protocol |
dsdrv001 | Delta sigma demodulator resolver | spi001 | Serial peripheral interface |
eru001…eru002 | Event request unit | systm001 | System timer (Systick) |
eth001…eth004 | Ethernet | tmps001 | Die temperature sensor |
fatfs002…fatfs005 | FAT file systems (FatFs) | uart001…uart002 | Universal asynchronous receiver/transmitter |
gmm001 | CPU global memory manager | usbbl001 | USB block layer |
guikb001 | Gui keyboard (emWin) | usbcdc001 | USB CDC device |
guilc001 | GUI OLED display controller (emWin) | usbcore001 | USB core driver (USB OTG host/device) |
guims001 | GUI mouse (emWin) | usbhid001 | USB HID class |
guisl001 | GUI Segger library (emWin) | usbjs001 | USB joystick |
guits001 | GUI touchpad | usbld001 | USB low level driver |
i2c001…I2c002 | I2C | usbms001 | USB mass storage device |
io001…io004 | IO pins | usbvc001 | USB virtual COM device |
iodbg001 | Debugger IO pins | webserver001 | Http webserver |