Instytut Teleinformatyki Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska Mikrokontrolery i Mikroprocesory DMA (Direct Memory Access) laboratorium: 05 autor: mgr inż. Katarzyna Smelcerz Kraków, 2017
05.MiM DMA (Direct Memory Access 2 Spis treści Spis treści... 2 1. Wiadomości wstępne... 3 1.1. Niezbędne wiadomości... 3 1.2. DMA (Direct Memory Access)... 3 1.3. Konfiguracja DMA dla ADC w środowisku Cube... 4 2. Przebieg laboratorium... 6 2.1. Zadanie 1. Na ocenę 3.0 (dst)... 6 2.2. Zadanie 2. Na ocenę 4.0 (db)... 6 2.3. Zadanie 3. Na ocenę 5.0 (bdb)... 6
05.MiM DMA (Direct Memory Access 3 1. Wiadomości wstępne Pierwsza część niniejszej instrukcji zawiera podstawowe wiadomości teoretyczne dotyczące omawianego tematu. Poznanie tych wiadomości umożliwi prawidłowe zrealizowanie praktycznej części laboratorium. 1.1. Niezbędne wiadomości Opis zestawu starter-kit, schemat: http://www.st.com/st-webui/static/active/en/resource/technical/document/user_manual/dm00027954.pdf Kompilator dla rdzenia ARM: https://www.iar.com/iar-embeddedworkbench/arm/ Opis rdzenia ARM STM32L152 RB http://www.st.com/st-webui/static/active/en/resource/technical/document/datasheet/cd00277537.pdf Dokumentacja do środowiska STM32CubeMX: http://www.st.com/st-webui/static/active/en/resource/technical/document/data_brief/dm00103564.pdf 1.2. DMA (Direct Memory Access) Rdzeń ARM STM32L152 RB jest wyposażony w 7 kanałowy układ DMA (Direct Memory Access). Jego zadaniem jest transfer danych w trybach memory to memory (z pamięci do pamięci), peripheral to memory (z peryferii do pamięci) i memory to peripheral. DMA może zapisywać dane do bufora cyrkulacyjnego lub do pojedynczej komórki. Każdy z kanałów DMA jest podpięty do konkretnego zadania. Konfiguracja odbywa się na poziomie kodu, transfer danych między źródłem, a celem odbywa się niezależnie. DMA jest wykorzystywane przede wszystkim przy SPI, I2C, ADC, oraz USART. Przykład : Możemy skonfigurować timer, przetwornik ADC i DMA w taki sposób, że próbki napięcia będą zapisywane do tablicy np. 100 elementów bez udziału procesora, który jest uśpiony i nic nie robi. Konfiguracja timera decyduje o okresie pobierania próbek. Po zapełnieniu tablicy wystąpi przerwanie, które wybudzi procesor i teraz zostanie obliczona wartość średnia pomiarów. Taki tryb pracy pozwala zminimalizować pobór prądu.
05.MiM DMA (Direct Memory Access 4 1.3. Konfiguracja DMA dla ADC w środowisku Cube Sama konfiguracja ADC odbywa się tak samo, jak w przypadku poprzedniego laboratorium, z tą różnicą że, w zakładce włączamy jeszcze opcję Zrzut 1.2 Dodanie obsługi DMA Zrzut 1.3 Ustawienie przerwania od DMA
05.MiM DMA (Direct Memory Access 5 Zrzut 1.4 Standardowa konfiguracja pinów na których są podpięte kanały ADC Aby uruchomić DMA, tak jak w poprzednich laboratoriach, należy dopisać odpowiednią funkcję do wygenerowanego kodu w języku C, jest ona przedstawiona na Listingu 1. UWAGA! Wszystkie dostępne funkcje do obsługi ADC, z bardziej szczegółowymi opisami znajdują się w pliku stm32l1xx_hal_adc.c, dołączonym do projektu w IAR. Ich zastosowanie jest opisane w komentarzach w kodzie. Listing 1 Uruchomienie ADC razem z DMA HAL_StatusTypeDef HAL_ADC_Start_DMA (ADC_HandleTypeDef* hadc, uint32_t* pdata, uint32_t Length)
05.MiM DMA (Direct Memory Access 6 2. Przebieg laboratorium Druga część instrukcji zawiera zadania do praktycznej realizacji, które demonstrują zastosowanie technik z omawianego zagadnienia. 2.1. Zadanie 1. Na ocenę 3.0 (dst) Proszę skonfigurować przetwornik ADC z DMA na podstawie powyższych print screenów. Do wygenerowanego kodu proszę dopisać funkcję uruchamiającą DMA. Proszę nagrać program na płytkę i w podglądzie zmiennych w IAR zaobserwować wartości, jakie są w kanałach ADC. 2.2. Zadanie 2. Na ocenę 4.0 (db) Proszę skonfigurować przetwornik ADC, dla dwóch kanałów oraz DMA obsługujący ADC, na podstawie powyższych print screenów. W związku z tym, że obsługiwane są dwa kanały, wartości powinny być przechowywane w tablicy o rozmiarze równym ilości kanałów. Do wygenerowanego kodu proszę dopisać funkcję uruchamiającą DMA. Jeśli kanał pierwszy ma większą wartość, proszę uruchomić miganie diody LED3, jeśli kanał drugi, miganie diody LED4. 2.3. Zadanie 3. Na ocenę 5.0 (bdb) Proszę skonfigurować przetwornik ADC, dla dwóch kanałów oraz DMA obsługujący ADC, na podstawie powyższych print screenów. Do wygenerowanego kodu proszę dopisać funkcję uruchamiającą DMA. Jeśli kanał pierwszy ma większą wartość, proszę uruchomić miganie diodę LED3 w trybie PWM, gdzie wypełnienie jest równe 0.5. Jeśli kanał drugi jest większy od pierwszego, dioda LED4 ma być obsłużona analogicznie, jak LED3 z wypełnieniem 0.25.