Obsah:

ČÁST 2 - SESTAVA GPIO ARM - RGB - FUNKČNÍ HOVORY - Přepínače: 6 kroků
ČÁST 2 - SESTAVA GPIO ARM - RGB - FUNKČNÍ HOVORY - Přepínače: 6 kroků

Video: ČÁST 2 - SESTAVA GPIO ARM - RGB - FUNKČNÍ HOVORY - Přepínače: 6 kroků

Video: ČÁST 2 - SESTAVA GPIO ARM - RGB - FUNKČNÍ HOVORY - Přepínače: 6 kroků
Video: Raspberry Pi Pico for Robotics 2024, Červenec
Anonim
ČÁST 2 - SESTAVA GPIO ARM - RGB - FUNKČNÍ HOVORY - Přepínače
ČÁST 2 - SESTAVA GPIO ARM - RGB - FUNKČNÍ HOVORY - Přepínače

V části 1 jsme se dozvěděli, jak přepnout jednu červenou LED na vývojové desce MSP432 LaunchPad od společnosti Texas Instruments pomocí sestavení namísto C / C ++.

V tomto Instructable uděláme něco podobného - ovládání RGB LED, která je také na stejné desce.

Doufáme, že na cestě budeme dále rozšiřovat naše znalosti o montáži ARM, a nejen se bavit s osvětlováním některých LED diod.

Krok 1: Pojďme skočit přímo dovnitř

Opravdu, první video mluví za vše. Není co dodat.

Hlavním bodem je přinést domů myšlenku, že každý I/O port na MSP432 se skládá z bloku adres „registrů“, které zase sestávají z několika bitů.

Kromě toho jsou bity seskupeny ortogonálně. To znamená, že bit 0 každé adresy registru odkazuje na stejný externí I/O pin.

Zopakovali jsme myšlenku, že pro tento port je zapotřebí několik registračních adres, aby bylo možné něco provést pouze s jedním bitem nebo pinem.

Ale že v tomto případě, protože máme co do činění s RGB LED, musíme se vypořádat se třemi bity pro každou adresu registru.

Zdůraznili jsme, že potřebujeme několik registrů: registr DIR, registr SEL0, registr SEL1 a registr OUTPUT. A pokaždé tři bity.

Krok 2: Vylepšení kódu - přidání funkce

Image
Image

Jak jste viděli ve výše uvedeném kroku, hlavní programová smyčka měla spoustu opakovaného kódu, konkrétně když vypneme LED diody.

Můžeme tedy do programu přidat funkci. Stále musíme volat tuto funkci pokaždé, když chceme vypnout LED diody, ale způsobí to, že se část kódu sbalí do jednoho příkazu.

Kdyby byl náš kód LED vypnut více zapojen s mnoha dalšími pokyny, byl by to skutečný spořič paměti.

Součástí vestavěného programování a mikrořadičů je mnohem větší povědomí o velikosti programu.

Video vysvětluje.

V zásadě přidáme větvení do našeho hlavního kódu a máme další blok kódu, což je funkce, do které se rozvětvujeme. A pak, když jsme hotovi, nebo na konci funkce, odbočíme zpět k dalšímu příkazu v hlavním programu.

Krok 3: Přidejte zpoždění zaneprázdněné smyčky

V části Deklarace kódu přidejte konstantu, aby bylo snadné tweekovat pro požadované načasování:

; jakákoli slova za středníkem (';') spustí komentář.

; kód v této části přiřadí hodnotě hodnotu.; mohli jste také použít '.equ', ale jsou mírně odlišné.; '.equ' (myslím) nelze změnit, zatímco '.set' znamená, že můžete; změňte hodnotu 'DLYCNT' později v kódu, pokud si přejete.; 'DLYCNT' bude použito jako hodnota odpočítávání v podprogramu zpoždění. DLYCNT.set 0x30000

Přidat novou funkci zpoždění:

zpoždění:.asmfunc; spuštění podprogramu nebo funkce „zpoždění“.

MOV R5, #DLYCNT; načtěte registr CPU R5 jádra s hodnotou přiřazenou k 'DLYCNT'. dlyloop; to znamená začátek smyčky zpoždění. assembler určuje adresu. SUB R5, #0x1; odečtěte 1 od aktuální hodnoty v cpu registru R5. CMP R5, #0x0; porovnat aktuální hodnotu v R5 až 0. BGT dlyloop; větev, pokud je hodnota v R5 větší 0, na označení (adresa) 'dlyloop'. BX LR; pokud jsme se dostali sem, znamená to, že hodnota R5 byla 0. návrat z podprogramu..endasmfunc; označuje konec podprogramu.

Potom v hlavním těle v hlavní smyčce vyvolejte nebo zavolejte funkci zpoždění:

; toto je fragment kódu hlavního těla nebo hlavní funkce (viz soubor 'main.asm').

; toto je smyčka v 'main' a ukazuje, jak tuto novou funkci 'delay' voláme nebo používáme.; '#REDON' a '#GRNON' jsou také deklarace (konstanty) (viz začátek 'main.asm').; jsou to jen snadné způsoby, jak nastavit specifikovanou barvu RGB LED. smyčka MOV R0, #REDON; Červená - nastaví registr CPU R0 jádra s hodnotou přiřazenou 'REDON'. STRB R0, [R4]; registr jádra R4 byl dříve nastaven s výstupní adresou GPIO.; napište, co je v R0, na adresu určenou R4. Zpoždění BL; odbočte na novou funkci 'zpoždění'. BL ledsoff; větev na již existující funkci „ledsoff“. Zpoždění BL; podobně MOV R0, #GRNON; Zelená - podobně STRB R0, [R4]; a tak dále. BL zpoždění BL ledsoff BL zpoždění

Video jde do detailů.

Krok 4: ARM Architecture Procedure Call Standard (AAPCS)

Pravděpodobně je na čase něco představit. Je to konvence v jazyce sestavení. Také známý jako standard volání procedur pro architekturu ARM.

Je toho hodně, ale je to jen standard. Nezabrání nám to naučit se programování sestavení a můžeme si osvojit části tohoto standardu za pochodu, jakmile se budeme cítit dobře s některými koncepty, které se učíme.

Jinak bychom mohli mít pocit, že pijeme z obrovské vodní hadice. Příliš mnoho informací.

Základní registry

Protože jsme se seznámili s hlavními registry MSP432, zkusme nyní přijmout některé z těchto standardů. Tomu se přizpůsobíme při psaní další funkce (zapnutí / vypnutí LED).

1) Jako parametr funkce máme použít R0. Pokud chceme předat hodnotu do funkce (podprogram), měli bychom k tomu použít R0.

2) Registr odkazů máme používat k zamýšlenému účelu - obsahuje adresu, která ukazuje, kam se vrátit po dokončení podprogramu.

Uvidíte, jak je použijeme.

Krok 5: Funkce s parametrem - vnořené funkce

Můžeme vyčistit náš kód a snížit množství paměti, kterou zabírá, kombinací opakovaných sekcí do jedné funkce. Jediným rozdílem v těle hlavní smyčky je to, že potřebujeme parametr, abychom mohli předávat různé různé barvy, které chceme vidět na LED diodě RGB.

Podívejte se na video, kde najdete podrobnosti. (omlouvám se za délku)

Krok 6: Vstup GPIO - přidejte přepínače

Pojďme to udělat zajímavější. Je načase přidat do našeho montážního programu nějaké ovládání přepínačů.

This Instructable has images showing how the two on-board buttons are connected to the MSP432.

V zásadě: Přepínač 1 (SW1 nebo S1) je připojen k P1.1 a přepínač 2 (SW2 nebo S2) je připojen k P1.4.

To dělá věci trochu zajímavými nejen proto, že se zabýváme vstupy místo výstupů, ale také proto, že tyto dva přepínače zabírají nebo zabírají dva bity stejného bloku adres registru, stejně jako jediná červená LED, která je výstupem.

V tomto Instructable jsme se zabývali přepínáním jediné červené LED, takže stačí přidat kód, který bude zpracovávat přepínače.

Port 1 Zaregistrujte blok adresy

Pamatujte, že jsme se o nich zmiňovali v předchozím Instructable, ale musíme zahrnout nový:

  • Port 1 Vstupní registrační adresa = 0x40004C00
  • Adresa registru výstupu 1 výstupu = 0x40004C02
  • Port 1 Směr registrace Adresa = 0x40004C04
  • Port 1 Resistor Enable Register address = 0x40004C06
  • Port 1 Vyberte 0 Registrační adresa = 0x40004C0A
  • Port 1 Vyberte 1 Registrační adresa = 0x40004C0C

Při použití portů jako vstupů je dobré použít interní výsuvné nebo stahovací odpory MSP432.

Vzhledem k tomu, že vývojová deska Launchpadu spojila dva přepínače se zemí (NÍZKÉ při stisknutí), znamená to, že bychom měli použít vytahovací odpory, abychom se ujistili, že máme pevný VYSOKÝ, když nejsou stisknuty.

Pull Up / Pull rezistory

Aby bylo možné tyto vstupy spínačů spojit s vytahovacími odpory, jsou zapotřebí dvě různé adresy registru 1.

1) Použijte registr povolující odpor portu 1 (0x40004C06) k označení, že chcete rezistory (pro tyto dva bity), 2) a poté pomocí výstupního registru Port 1 (0x40004C02) nastavte odpory buď jako pull-up nebo pull-down. Může se zdát matoucí, že na vstupech používáme výstupní registr. Výstupní registr má téměř dvojí účel.

Chcete-li znovu uvést jiný způsob, výstupní registr může buď odeslat HIGH nebo LOW na výstup (například jedinou červenou LED) a / nebo se používá k nastavení vytahovacích nebo stahovacích odporů pro vstupy, ALE POUZE pokud byla tato funkce povolena prostřednictvím registru Povolení odporu.

Důležité výše-při odesílání/nastavování LOW nebo HIGH na jakýkoli výstupní bit budete muset současně udržovat stav pull-up/pull-down vstupních bitů.

(video se snaží vysvětlit)

Čtení vstupního bitu portu

  • Nastavte SEL0 / SEL1 pro funkce GPIO
  • Nastavte registr DIR jako vstup pro přepínací bity, ale jako výstup pro LED (současně ve stejném bajtu)
  • Povolte odpory
  • Nastavte je jako pull-up odpory
  • Přečtěte si port
  • Možná budete chtít filtrovat přečtenou hodnotu, abyste izolovali pouze bity, které potřebujete (přepínač 1 a 2)

Doporučuje: