Spisu treści:

MONTAŻ RAMIENIA GPIO - T.I. ZESTAW DO NAUKI SYSTEMU ROBOTYKI – ĆWICZENIE 6: 3 kroki
MONTAŻ RAMIENIA GPIO - T.I. ZESTAW DO NAUKI SYSTEMU ROBOTYKI – ĆWICZENIE 6: 3 kroki

Wideo: MONTAŻ RAMIENIA GPIO - T.I. ZESTAW DO NAUKI SYSTEMU ROBOTYKI – ĆWICZENIE 6: 3 kroki

Wideo: MONTAŻ RAMIENIA GPIO - T.I. ZESTAW DO NAUKI SYSTEMU ROBOTYKI – ĆWICZENIE 6: 3 kroki
Wideo: Meet the Turing Pi 2 - Mix Pis and NVIDIA Jetsons on a Mini ITX Board! 2024, Lipiec
Anonim
MONTAŻ RAMION GPIO - T. I. ZESTAW DO NAUKI SYSTEMU ROBOTYKI - LAB 6
MONTAŻ RAMION GPIO - T. I. ZESTAW DO NAUKI SYSTEMU ROBOTYKI - LAB 6

Dzień dobry, W poprzedniej Instrukcji o nauce montażu ARM przy użyciu Texas Instruments TI-RSLK (wykorzystuje mikrokontroler MSP432), czyli Lab 3, jeśli robisz T. I. Oczywiście omówiliśmy kilka bardzo podstawowych instrukcji, takich jak zapisywanie do rejestru i warunkowe pętle. Przeszliśmy przez wykonanie przy użyciu środowiska Eclipse IDE.

Malutkie programy, które wykonywaliśmy, nie wpływały na interakcję ze światem zewnętrznym.

Troche nudne.

Spróbujmy dzisiaj to trochę zmienić, dowiadując się trochę o portach wejścia/wyjścia, a konkretnie o cyfrowych pinach GPIO.

Tak się składa, że ten MSP432 jest dostarczany na płytce rozwojowej i ma już dwa przełączniki przyciskowe, diodę LED RGB i czerwoną diodę LED, które są powiązane z niektórymi portami GPIO.

Oznacza to, że gdy nauczymy się ustawiać i manipulować tymi kołkami poprzez montaż, możemy wizualnie zobaczyć te efekty.

O wiele ciekawsze niż samo przechodzenie przez debugger.

(Nadal idziemy krok - to będzie nasza funkcja 'opóźnienia'):-D

Krok 1: Spróbujmy pisać / czytać z pamięci RAM

Zanim przejdziemy do dostępu i sterowania GPIO, powinniśmy zrobić mały krok.

Zacznijmy od odczytu i zapisu do standardowego adresu pamięci. Wiemy z poprzedniego Instructable (zobacz tam obrazy), że pamięć RAM zaczyna się od 0x2000 0000, więc użyjmy tego adresu.

Zamierzamy przenieść dane między rejestrem podstawowym (R0) a 0x2000 0000.

Zaczynamy od podstawowej struktury plików lub zawartości programu asemblera. Zapoznaj się z tą instrukcją, aby utworzyć projekt zespołu za pomocą programu TI Code Composer Studio (CCS) i kilku przykładowych projektów.

.kciuk

.text.align 2.global main.thumbfunc main:.asmfunc;---------------------------------- -----------------------------------------------; (nasz kod trafi tutaj);------------------------------------------ ---------------------------------------.endasmfunc.end

Chcę dodać coś nowego do górnej części, gdzie są jakieś deklaracje (dyrektywy). Później stanie się jaśniejsze.

ACONST.set 0x20000000; użyjemy tego dalej (to stała)

; oczywiście „0x” oznacza, że następująca po nim jest wartość szesnastkowa.

Więc zawartość naszego pliku startowego wygląda teraz tak:

.kciuk

.text.align 2 ACONST.set 0x20000000; użyjemy tego dalej (jest to stała); oczywiście „0x” oznacza, że następująca po nim jest wartość szesnastkowa..globalna główna.thumbfunc główna główna:.asmfunc;--------------------------------------- ------------------------------------------; (nasz kod trafi tutaj);------------------------------------------ ---------------------------------------.endasmfunc.end

Teraz, gdy mamy powyższe, dodajmy kod pomiędzy kreskowanymi liniami.

Zaczynamy od zapisu do lokalizacji RAM. Najpierw ustalimy wzorzec danych, wartość, którą zapiszemy do pamięci RAM. Używamy rejestru podstawowego, aby ustalić tę wartość lub dane.

Uwaga: pamiętaj, że w kodzie każda linia mająca średnik (';') oznacza, że jest to komentarz po tym średniku.

;-----------------------------------------------------------------------------------------------

; PISMO;------------------------------------------------ ----------------------------------------------- MOV R0, #0x55; Rejestr podstawowy R0 będzie zawierał dane, które chcemy zapisać w lokalizacji RAM.; oczywiście „0x” oznacza, że następująca po nim jest wartość szesnastkowa.

Następnie przyjrzyjmy się stwierdzeniom, które NIE działają.

; MOV MOV nie nadaje się do zapisywania danych w lokalizacji RAM.

; MOV dotyczy tylko natychmiastowych danych do rejestru,; lub z jednego rejestru do drugiego; tj. MOV R1, R0.; STR musi używać STR.; STR R0, =KONTA; Zły termin w wyrażeniu ('='); STR R0, 0x20000000; Niedozwolony tryb adresowania instrukcji sklepu; STR R0, KONST; Niedozwolony tryb adresowania instrukcji sklepu

Nie wyjaśniając zbyt wiele, staraliśmy się użyć powyższego „ACONST”. Zasadniczo jest to zastępstwo lub stała, zamiast używać wartości dosłownej, takiej jak 0x20000000.

Nie byliśmy w stanie pisać, aby zapisać do lokalizacji pamięci RAM za pomocą powyższego. Spróbujmy czegoś innego.

; wygląda na to, że musimy użyć innego rejestru zawierającego lokalizację pamięci RAM w

; polecenie zapisania w tej lokalizacji RAM MOV R1, #0x20000000; ustaw lokalizację pamięci RAM (nie jej zawartość, ale lokalizację) na R1.; oczywiście „0x” oznacza, że następująca po nim jest wartość szesnastkowa. STR R0, [R1]; zapisz zawartość R0 (0x55) do pamięci RAM (0x20000000) używając R1.; używamy innego rejestru (R1), który ma adres lokalizacji pamięci RAM; w celu zapisu do tej lokalizacji RAM.

Inny sposób wykonania powyższego, ale za pomocą „ACONST” zamiast dosłownej wartości adresu:

; zróbmy to ponownie, ale użyjmy symbolu zamiast dosłownej wartości lokalizacji pamięci RAM.

; chcemy użyć 'ACONST' jako zastępstwa dla 0x20000000.; nadal musimy wykonać '#', aby oznaczyć natychmiastową wartość,; więc (patrz na górze), musieliśmy użyć dyrektywy '.set'.; aby to udowodnić, zmieńmy wzorzec danych w R0. MOV R0, #0xAA; ok jesteśmy gotowi do zapisu do pamięci RAM używając symbolu zamiast literowej wartości adresu MOV R1, #ACONST STR R0, [R1]

Film zawiera więcej szczegółów, a także przechodzi przez odczyt z lokalizacji pamięci.

Możesz także wyświetlić załączony plik źródłowy.asm.

Krok 2: Niektóre podstawowe informacje o porcie

Image
Image
Niektóre podstawowe informacje o porcie
Niektóre podstawowe informacje o porcie
Niektóre podstawowe informacje o porcie
Niektóre podstawowe informacje o porcie

Teraz, gdy mamy dobry pomysł, jak zapisywać/odczytywać z lokalizacji pamięci RAM, pomoże nam to lepiej zrozumieć, jak kontrolować i używać pinu GPIO

Jak więc wchodzimy w interakcję z pinami GPIO? Z naszego poprzedniego spojrzenia na ten mikrokontroler i jego instrukcje ARM wiemy, jak radzić sobie z jego wewnętrznymi rejestrami i wiemy, jak współdziałać z adresami pamięci (RAM). Ale piny GPIO?

Tak się składa, że te piny są mapowane w pamięci, więc możemy traktować je tak samo jak adresy pamięci.

Oznacza to, że musimy wiedzieć, jakie są te adresy.

Poniżej znajdują się adresy początkowe portów. Nawiasem mówiąc, dla MSP432 "port" to zbiór pinów, a nie tylko jeden pin. Jeśli znasz Raspberry Pi, uważam, że jest inaczej niż tutaj.

Niebieskie kółka na powyższym obrazku pokazują napisy na tablicy dla dwóch przełączników i diod LED. Niebieskie linie wskazują na rzeczywiste diody LED. Nie będziemy musieli dotykać zworek nagłówka.

Pogrubiłem poniżej porty, którymi się zajmujemy.

  • GPIO P1: 0x4000 4C00 + 0 (parzyste adresy)
  • GPIO P2: 0x4000 4C00 + 1 (adresy nieparzyste)
  • GPIO P3: 0x4000 4C00 + 20 (parzyste adresy)
  • GPIO P4: 0x4000 4C00 + 21 (adresy nieparzyste)
  • GPIO P5: 0x4000 4C00 + 40 (parzyste adresy)
  • GPIO P6: 0x4000 4C00 + 41 (adresy nieparzyste)
  • GPIO P7: 0x4000 4C00 + 60 (parzyste adresy)
  • GPIO P8: 0x4000 4C00 + 61 (adresy nieparzyste)
  • GPIO P9: 0x4000 4C00 + 80 (parzyste adresy)
  • GPIO P10: 0x4000 4C00 + 81 (adresy nieparzyste)

Jeszcze nie skończyliśmy. Potrzebujemy więcej informacji.

Aby kontrolować port, potrzebujemy kilku adresów. Dlatego na powyższej liście widzimy „adresy parzyste” lub „adresy nieparzyste”.

Bloki adresów rejestru we/wy

Będziemy potrzebować innych adresów, takich jak:

  • Adres rejestru wejściowego portu 1 = 0x40004C00
  • Adres rejestru wyjściowego portu 1 = 0x40004C02
  • Adres rejestru kierunku portu 1 = 0x40004C04
  • Port 1 Wybierz 0 Adres rejestru = 0x40004C0A
  • Port 1 Wybierz 1 Adres rejestru = 0x40004C0C

I możemy potrzebować innych.

Ok, znamy teraz zakres adresów rejestrów GPIO do sterowania pojedynczą czerwoną diodą LED.

Bardzo ważna uwaga: każdy port I/O na płycie LaunchPad MSP432 jest zbiorem kilku (zwykle 8) pinów lub linii, a każdy z nich może być indywidualnie ustawiony jako wejście lub wyjście.

Oznacza to na przykład, że jeśli ustawiasz wartości dla „Adresu rejestru kierunku portu 1”, musisz się zainteresować tym, który bit (lub bity) jest ustawiany lub zmieniany pod tym adresem. Więcej o tym później.

Sekwencja programowania portu GPIO

Ostatnim elementem, którego potrzebujemy, jest proces lub algorytm do sterowania diodą LED.

Jednorazowa inicjalizacja:

  • Skonfiguruj P1.0 (P1SEL1REG:P1SEL0REG Register) <--- 0x00, 0x00 dla normalnej funkcjonalności GPIO.
  • Ustaw bit 1 rejestru kierunku P1DIRREG jako wyjście lub WYSOKI.

Pętla:

Wpisz HIGH do bitu 0 rejestru P1OUTREG, aby włączyć czerwoną diodę LED

  • Wywołaj funkcję opóźnienia!
  • Wpisz LOW do bitu 0 rejestru P1OUTREG, aby wyłączyć czerwoną diodę LED
  • Wywołaj funkcję opóźnienia!
  • Powtórz pętlę

Która funkcja wejścia / wyjścia (skonfiguruj SEL0 i SEL1)

Wiele pinów na LaunchPadzie ma wiele zastosowań. Na przykład ten sam pin może być standardowym cyfrowym GPIO lub może być również używany w komunikacji szeregowej UART lub I2C.

Aby użyć określonej funkcji dla tego pinu, musisz wybrać tę funkcję. Musisz skonfigurować funkcję pinu.

Powyżej znajduje się obraz dla tego kroku, który próbuje wyjaśnić tę koncepcję w formie wizualnej.

Adresy SEL0 i SEL1 tworzą kombinację par, która działa jako pewien rodzaj wyboru funkcji/funkcji.

Do naszych celów potrzebujemy standardowego cyfrowego GPIO dla bitu 0. Oznacza to, że potrzebujemy bitu 0 dla SEL0 i SEL1, aby był LOW.

Sekwencja programowania portów (ponownie)

1. Wpisz 0x00 do rejestru P1 SEL 0 (adres 0x40004C0A). Ustawia to LOW dla bitu 0

2. Wpisz 0x00 do rejestru P1 SEL 1 (adres 0x40004C0C). Ustawia to LOW dla bitu 0, ustawienie dla GPIO.

3. Wpisz 0x01 do rejestru P1 DIR (adres 0x40004C04). Ustawia to stan WYSOKI dla bitu 0, co oznacza WYJŚCIE.

4. Włącz diodę LED wpisując 0x01 do rejestru P1 OUTPUT (adres 0x40004C02)

5. Zrób jakieś opóźnienie (lub po prostu wykonaj pojedynczy krok podczas debugowania)

6. Wyłącz diodę LED wpisując 0x00 do rejestru P1 OUTPUT (adres 0x40004C02)

7. Zrób jakieś opóźnienie (lub po prostu wykonaj pojedynczy krok podczas debugowania)

8. Powtórz kroki od 4 do 7.

Powiązane wideo z tym krokiem prowadzi nas przez cały proces w wersji demonstracyjnej na żywo, ponieważ krok po kroku i omawiamy każdą instrukcję montażu oraz pokazujemy działanie diody LED. Proszę wybaczyć długość filmu.

Krok 3: Czy zauważyłeś jedyną wadę w filmie?

W filmie, który przedstawia cały proces programowania i zapalania diody LED, był dodatkowy krok w pętli głównej, który można było przenieść do jednorazowej inicjalizacji.

Dziękuję za poświęcenie czasu na zapoznanie się z tą instrukcją.

Kolejny rozwija to, co tutaj zaczęliśmy.

Zalecana: