Přednáška 3 A4B38NVS - Návrh vestavěných systémů
2014, katedra měření, ČVUT - FEL, Praha J. Fischer,
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
1
Informace
Toto je grafický a heslovitý podkladový materiál určený pouze k přednášce A4B38NVS. Neobsahuje vlastní výklad, ani další informace, které jsou prezentovány při výkladu „křídou“ na tabuli, jeho čtení nenahrazuje účast na přednášce.
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
2
Náplň přednášky Rekapitulace – specifikace bodované úlohy (5 bodů) komentované programy, zpráva, příprava na cvičení – vývojový diagram, strategie programu postup vývoje rozložení vývoje programu, využití simulátoru připojení 74164, případně 74HC595 Adresace paměti RAM Direktivy překladače - LTORG, direktivy – logicke operace,..
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
3
Zadání úlohy: Vestavný systém – schodišťový automat se zobrazením Úkol: Navrhněte a realizujte vestavný systém – řídicí jednotku schodišťového automatu s nastavením délky času sepnutí a jeho číslicovou indikací . Vstup jednotky: paralelně zapojená tlačítka na schodišti (schodišťové tlačítko) Výstup jednotky: ovládací výstup pro sepnutí relé (indikační LED zapnutí) Ovládací servisní část jednotky: tři servisní tlačítka (zvyš, sniž, potvrď) Indikační část jednotky: 7- segmentový zobrazovač + indikační LED stavu Funkce jednotky Funkce jednotky schodišťového automatu vychází z úvodní úlohy. Po zapnutí je jednotka ve stavu připraveno. Na segmentovém zobrazovači je indikace nastavené doby zapnutí tzap . Stiskem schod. tlačítka se aktivuje světlo na po nastavenou dobu tzap. Na servisním seg. zobrazovači se bude indikovat čas zbývající do vypnutí tvyp . Opětovným stiskem schodišťového tlačítka před doběhnutím času se doba svícení od tohoto okamžiku prodlouží opět na nastavenou hodnotu tzap . Na zobrazovači se bude indikovat nový čas zbývající do vypnutí tvyp (Pro zjednodušení lze v prog. vypustit funkci předběžného zhasínání před konečným vypnutím.)
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
4
Zadání úlohy: Vestavný systém – schodišťový automat se zobrazením Funkce – detaily: Po spuštění programu bude časovač používat základní dobu tzap = 5 s. Bude se testovat stav tlačítek. Stiskem schod. tlačítka se přejde do režimu svícení až do jeho „doběhnutí“ Stiskem servisního nastavovacího tlačítka „zvyš“ (+) , nebo „sniž“( -) , se přejde do servisního režimu – nastavování velikosti doby tzap v sekundách. (Servisní tlačítka budou mít funkci „zvyš“ (+) , „sniž“( -) , „potvrdit“, (=). ) Tato hodnota tzap se bude nadále využívat až do jejího přepsání v novém nastavení. Rozsah nastavení bude 5 až 90 sekund. V úloze je nutno programem zajistit, aby se rušivě neprojevovalo působení odskoku tlačítek. Po ukončení nastavení velikosti tzap je možno aktivovat časovač schodišťovým tlačítkem. ( Pozn. V úloze se bude pro jednoduchost vždy řešit pouze jeden proces – buď nastavování nebo běh časovače, případně svícení. V reálném zařízení by nebylo možné, aby se při nastavování času (jeden proces) zablokovala funkce časovače svícení (druhý proces).
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
5
Zadání úlohy: Vestavný systém – schodišťový automat se zobrazením Obvodová realizace: K mikrořadiči STM32 se připojí tři externí servisní nastavovací tlačítka. (V reálném zařízení by byla přímo na jednotce a byla by přístupna pouze servisnímu personálu.)
Jejich uspořádání na kontaktním poli vedle sebe bude v pořadí „sniž“( -) , „potvrdit“, (=) „zvyš“ (+) (zleva doprava) Jako schodišťové tlačítko se může využít uživatelské tlačítko na kitu -PA0. (Schodišťové tlačítko nahrazuje skupinu paralelně zapojených tlačítek na schodišti.)
Indikační LED stavu – červená LED na kitu Indikační LED zapnutí - externí LED na kontaktním poli – (zapojená přes rezistor na GND - zem. Indikační 7- segmentový zobrazovač s LED bude připojen pomocí sério -paralelního posuvného registru (74164, příp. 74HCT595)
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
6
Vysvětlení úlohy V úloze se pro jednoduchost připojí pouze jediný 7-segmentový zobrazovač s využitím posuvného registru 74164 nebo 74HCT595. (Možno i dva zobrazovače, dva registry) Pro rozlišení, který digit hodnoty času se zobrazuje se využije pravá desetinná tečka (rdp). Zhasnutá rdp indikuje desítky, rozsvícená rdp indikuje jednotky. Stisk tlač. + zvyšuje hodnotu od 5 sekund v pořadí 6, 7, 8, 9, 1(0), 2(0), 3(0), 4(0) ....až 9(0). Další stisky tlačítka „+“ výsledek neovlivňují. Stiskem tlač. „-“ snižuje hodnotu , např. 9(0),8(0),… 3(0), 2(0),1(0), 9, 8,…5 Indikace nastavené hodnoty po potvrzení se děje zobrazením digitu s rozlišením desítek zhasnutou pravou desetinnou tečkou rdp. Funkce zobrazení musí být nezávislá na funkci testu tlačítek, tedy není možné, aby se při stisku tlačítka zastavilo zobrazení. Stiskem tlačítka (=) se hodnota potvrdí a uloží do paměti, kde bude k dispouici po celou dobu zapnutí přístroje , až do jejího případného nového nastavení (Zde by bylo vhodné ukládat hodnotu do paměti Flash tak, aby se zařízení chovalo jako reálný přístroj -nastavená hodnota se vždy načte).
Při dalším stisku tlač. „+“ ,“-“ pro nové nastavení se vychází z minule nastavené hodnoty. A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
7
Vysvětlení úlohy /část 2 Stiskem tlačítka PA0 se aktivuje funkce časovacího relé ( schodišťový automat) z minulé úlohy. V době funkce běhu časovače se bude na zobrazovači znázorňovat zbývající čas - nejdříve v desítkách sekund, pak v jednotkách sekund. Při zobrazení desítek sekund bude číslo blikat v rytmu sekund (0,7 svit, 0,3 s tma). Při zobrazení jednotek sekund se rozsvítí pravá desetinná tečka - rdp. Tam, kde by bylo potřeba zadání ještě dále specifikovat, si autor sám stanoví způsob modifikace a implementaci a dohodne se cvičícím. Funkce programu však musí být jednoznačná, detereministická a zachycená v dokumentaci.
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
8
7- segmentový zobrazovač LTS3401, společná anoda Společná anoda, připojit na + Ucc, , katody přes rezistory a spínače (příp. budič)na zem To je obvykle používaný způsob ve vestavných systémech a f
g
e ldp
b c
d
rdp
možné zobrazení znaků
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
9
Připojení zobrazovače posuvným registrem Posuvný registr sério – paralelní
s. data
Sériový vstup, paralelní výstup kaskáda klopných obvodů D posun
UCC R
Sériová data postupují do registru s náběžnou hranou hodinového signálu 74LS164, 74HC164
R QA
R QB
A B CLK CLR s. data posun
QH SR1 74LS164
nul.
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
10
74LS164, 74HC164 posuvný registr - funkce .
s. data
posun
Reset – aktivní v L, nastavit do H A1 vstup seriových . dat, A2 na úroveň H (nebo opačně), příp. A1 a A2 spojit Plnění dat (posuv). dat do registru náběžnou hranou hod. signálu CLOCK (CP) A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
11
Zatemnění výstupu Možné zatemnění výstupu při plnění posuvného reg. Při plnění registru by LED „poblikávaly“ - svítila by krátce ta LED, která má být zhasnuta,
UCC
T1
R2 zatem. displ.
R1
R
R QA
R QB
A B CLK CLR s. data posun
QH SR1 74LS164
R
R QA
R QB
A B CLK CLR
QH SR2 74LS164
nul.
Optimální řešení problému – použití dalšího – záchytného – registru, do kterého se přesunou a na jehož výstupu se tak objeví až správná data.
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
12
Posuvný registr se záchytným registrem ´595 (74HCT595,..) Na výstup posuvného registru je připjen záchytný registr, přepis aktuálních dat z posuvného registru do záchytného reg. Není nutno zatemňovat při plnění Použití posuvných registrů ´595 a jejich variant jako výstupů ve vestavných systémech je velmi časté. /OE output enable (aktivace výstupu) připojit na L (GND) SH_CP – hodinový signál pro posun ST_CP – přepis z pos. reg. do záchyt reg. /MR- reset záchyt. registru Q´H – sériový výstup. pos reg.- pro kaskádní řazení výstupní obvody přepis s. data posun nul.
RCLK SER SRCLK
QA QB
výst. záchytný registr QH
výst. reg. pos. reg. SRCLR
SRR1
QH´
74HC595
pos. registr
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
13
Alternativy struktury ´595, TPIC6C595 Struktura 595, vhodná pro výstupy různé modifikace, např. Texas Instruments TPIC6C595 (dostupný i v GM) Schopnost budit většími proudy předpokládá buzení LED proti napájení – „open drain“, (jako „open colector“ u bipolárních obvodů)
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
14
Ovládání indukční zátěže pomocí TPIC6C595 Příklad řešení ochrany tranzistoru před průrazem zvýšeným napětí při vypínání indukční zátěže (relé, ss motorek, krokový motorek) Rozpínání – pokles proudu IDS – napěťová špička na elektrodě Drain, Ochranný mechanismus – proud Zener. diodou do Gate, zamezení příliš rychlého zavření tranzistoru a rychlého poklesu proudu IDS, důsledek snížení napěťové špičky,
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
15
Použití budiče TPIC6C595 pro ovládání krokového motorku Unipolární krokový motorek - ovládání výstupem s posuvným registrem a zách.reg. vybaveným spínači (výklad – krok. motorek), analogicky – ovládání relé – indukční zátěž
D U1
vinutí relé T
Mproc.
výměnou obvodu 74164 v úloze za obvod TPIC6C595 nebo 74HC595 doplněný spínacími tranzistory a ochrannými diodami by bylo možno v této úloze programově ovládat krokový motorek (místo 7- segmentového zobrazovače by byly připojeny čtyři spínací tranzistory NMOS, příp. NPN s dalšími diodami) A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
16
Připojení tlačítek k STM32 Tlačítko, ošetření odskoků, použití vnitřního „pull up“ rezistoru v STM32 , vypuštění Rp (obsluha – pozor na statickou elektřinu při stisku tlačítka prstem, vhodné se dopředu „vybít“, jinak hrozí nebezpečí přeskoku napětí na vstup a příp. poškození vstupu STM32).
+5V (+ 3,3 V) tlač .
RP vst. brána
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
17
Postup řešení úlohy Rozdělit úlohu na samostatné bloky. Příprava generátoru znaků, tabulka, převod číslo na znak (v simulátoru), Příprava programu pro naplnění posuvného registru Programy pro čítání a převod na dekadické číslo Převod binárního na dekadické číslo Převod číslice na znak Přidání – „ ubrání“ informace o desetinné tečce Uložení znakové informace do paměti SRAM ( příp. registru) Vyslání znakové informace s přepínáním Podprogram zobrazení Je třeba naplánovat celkovou činnost programu, více procesů probíhajících současně Umístění tabulky generátoru znaků pomocí direktivy DCD (32 bitů), případně DCW (16 bitů) Program ve smyčce, zpracování jednotlivých úkolů. ( analogie kuchař)
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
18
Postup řešení úlohy /2 Základní HW test reset 74164 pomocí resetovacího vstupu – rozsvítí se všechny segmenty Program spolupráce STM32 s 74164 funkce 1: - naplnění samé 1 a poslání do 74164 – vše musí zhasnout Naplnění samé 0 a poslání do 74164 vše se rozsvítí Naplnění danou hodnotou – rozsvícení vybraných segmentů podle „0“ generátor znaků, Ochranné rezistory 470 Ohmů do série mezi STM32 a 74164 (kontrola korektnosti napěťových úrovní UILmax pro 74164 výpočtem) Výpočet proudu segmentem, použití rezistorů o odporu 470 Ohmů Připravit kompletní schéma zapojení Připojení tlačítek, test Program, simulátor ( možno zkrátit čekací smyčku – zobrazení výst.průběhů) Dom. příprava - náhrada ovládání pos. registru- simulace ovládání jeho vstupů pomocí LED na PC8, PC9 výstupů pro pos. reg. pomocí LED – zpomalení, jeden výstup . impulsy CLK, druhý data Dobře se rozliší vyslání pro znak 8 a pro 1 A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
19
Poznámky k úloze Ovládání výstupu zobrazovače – optimální přiřazení výstupů brány, posuvného registru segmentům Jak zapojit z hlediska optimálního řešení plošného spoje, příp. drátových propojek LTS3401 a f
g
e ldp
b c
d
rdp
74164
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
20
Programové ovládání posuvného registru - test (Plnění posuvného registru je optimální s využitím rozhraní SPI , které je na čipu STM32F1xxx k dispozici.) Pro jednoduchost se však využijí dva zvolené programově ovládané piny výstupní brány. Označí se jako D – datový a C – jako hodinový. Piny D a C se mohou uvést do výchozího stavu, 0,0 (kontrolní bod programu). Na pin D se přivede informace, která se má dostat až na výstup QH, následně na pin C se přivede 1 (náběžná hrana) a v dalším zápisu pak 0. První hodnota by se měla dostat do posuvného registru. Pro test správnosti funkce obvodu ´164 a jeho oživení je možno do posuvného registru v nekonečném cyklu signálem C zapisovat střídavě data D=1 a následně D = 0. Pokud se použije frekvence zápisu C v řádu jednotek Hz, měly by se na výstupu QH a i dalších (QHA až QF) objevovat střídavě hodnoty 0 a 1, které se projeví jako okem pozorovatelné změny svitu ( svítí – nesvítí) jednotlivých segmentů zobrazovače LED.
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
21
Programové ovládání posuvného registru – test /2 Selektivní nastavování hodnoty na vybraný pin je možno pomocí zápisu s využitím funkce „bit banding“, nebo s využitím funkce „port bit set/reset“ u STM32. Port bit set/reset register (GPIx_BSSRR), např na bráně C (GPIC_BSSRR), je ve výkladu z přednášky 2. Rychlé zopakování: zápis hodnoty 1 do bitů 15 až 0 registru nastavuje příslušný výstupní bit do 0 zápis hodnoty 1 do bitů 31 až 16 registru nastavuje příslušný výstupní bit do 1 (celý 32 – bitový registr tak slouží pro ovládání 16-ti pinů příslušné brány) Návěští generator_znaku bude v programu po překladu představovat adresu začátku tabulky znaků.
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
22
Tabulka přiřazení segmentů bitům výstupu Jednoduchý zápis, přiřazení vývodů zobrazovače výstupům posuvného registru způsobem – „aby to dobře vycházelo“ programově, Bude ale složitější vedení vodičů na kontaktním poli nebo plošném spoji Symbolický popis připojení segmentů, definice symbolu SEG_A,… SEG_A SEG_B SEG_C SEG_D SEG_E SEG_F SEG_G SEG_DP
EQU EQU EQU EQU EQU EQU EQU EQU
2_00000001 ; 1 zde značí připojení seg. k výst. bitu 0 2_00000010 ; 2_00000100 ; 2_00001000 2_00010000 2_00100000 2_01000000 2_10000000 ; gfedcba
forma zápisu binárního čísla např. 2_0011001 A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
23
Generátor znaků – zápis - jednoduchá forma Přímý zápis hodnot generátoru znaků (jednoduché řešení) nula EQU 2_00111111 ; generator znaku jednicka EQU 2_00000110 a dvojka EQU 2_00111011 f trojka EQU 2_01001111 g b ctyrka EQU 2_01100110 e c petka EQU 2_01101101 ldp d rdp sestka EQU 2_01111101 sedmicka EQU 2_00000111 osmicka EQU 2_01111111 devitka EQU 2_00101111 tecka EQU 2_10000000 ; gfedcba ( „1“ znamená aktivaci proudu – např. pomocí spínacího tranzistoru NPN) při změně zapojení – nutná změna generátoru znaků, komlipace A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
24
Umístění tabulky generátoru znaků Umístění hodnot tabulky generátoru znaků pomocí direktivy assembleru DCB (8 bitů), DCW (16 bitů), případně DCD (32 bitů), Binární čísla se zadávají ve formě 2_ a následuje binární číslo, tedy např. 2_001011 binární číslo 0xED hexadecimální číslo 57 dekadické číslo Literatura: ARM DUI 0489C (ID050311), ARM® Compiler toolchain, Version 4.1 Assembler Reference , Chapter 6, část 6.3 Data definition directives www.ARM.COM
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
25
Definice generátoru znaků - přímo Definice konstant generátoru znaků v paměti (Flash) gener_zn DCB nula ; prekladač vlozi hodnotu 2_00111111 DCB jednicka DCB dvojka DCB trojka DCB ctyrka ; a tak dále (zatím se neřeší ovládání desetinné tečky) Pokud by se změnil způsob ovládání zobrazovače, tedy že bude svítit při 0, musel by se změnit generátor znaků. Při tom by pouze stačilo definovat negované hodnoty generátoru znaků.
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
26
Operátor negace Jak zápis negace ?? nejedná se o instrukci procesoru, ale pouze činnost překladače buď ~ :NOT:A nebo A:EOR: 2_1111111 negace jednotlivých bitů (exclusive or s 1) (exclusive or – shoda bitů – dá 0, různost bitů – dá 1) nutný shodný počet bitů v čísle A (nul nebo jednotek) A:EOR: 2_0000000 ponechání jednotlivých bitů možné je i kombinovat, to je vybrané bity negovat, ostaní ponechat A:EOR: 2_1000000 neguje pouze nejvyšší bit např. některé výstupy připojené na zobrazovač přímo, další přes invertor,…. zůstává stále stejný zápis počáteční tabulky generátoru znaků
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
27
Definice generátoru znaků pomocí negace a exclusive or Definice negovaných konstant generátoru znaků v paměti (Flash) gener_zn DCB :NOT: nula ; prekladač misto hod. 2_00111111 ; vlozi negovanou hod. tedy 2_11000000 DCB :NOT: jednicka DCB :NOT: dvojka DCB :NOT: trojka DCB :NOT: ctyrka ; a tak dále Jiný způsob zápisu pomoci direktivy překladače :EOR: exclusive or maska EQU 0x11111111 ; exclusive or s 0x11111111 neguje všechny bity ; definuje se symbol maska gener_zn DCB maska :EOR: nula ; DCB maska :EOR: jednicka ; DCB maska :EOR: dvojka DCB maska :EOR: trojka DCB maska :EOR: ctyrka ; a tak dále
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
28
Definice generátoru s modifikací maskou Maska pro modifikaci (negace či přímo) jednotlivých bitů generátoru znaků se může odvodit z dalšího symbolu – primo , neguj Případně lze pro jednotlivé bity definovat, zda svítí v „0“ nebo „1“ (pokud by segmety byly např. řešeny samostatnými LED. Podle toho se překladačem modifikuje generátor znaků v paměti primo EQU neguj EQU jiné EQU ; (může být, že maska EQU
2_0000000 ; konstanta pro přímá data, svítí při 1 (high) 2_1111111 ; konstanta pro negaci , svítí při 0 (low) 2_0000011 ; dolní dva bity- segmety svítí při „1“, ostaní při“ 0“ některé znaky jsou buzeny přímo, některé přes invertor) neguj ; konkrétní přiřazení do hodnoty masky generace
gener_zn
DCB maska :EOR: nula ; DCB maska :EOR: jednicka ; DCB maska :EOR: dvojka DCB maska :EOR: trojka DCB maska :EOR: ctyrka ; a tak dále
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
29
Výhodnější zapojení zobrazovače Zapojení bez křížení vodičů minimalizace složitosti připojení i na plošném spoji i za cenu „přeházení“ přiřazení segmentů jednotlivým bitům změna zobrazovače ?? změna programu ?? změna generátoru znaků ??? Jak (flexibilně) tvořit generátor znaků, aby bylo možno jej bylo možno jednoduše modifikovat v závislosti na konkrétním zapojení obvodu?
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
30
Úprava tabulky přiřazení pro zjednodušení zapojení Toto se musí změnit podle realizace HW (způsobu připojení) nová tabulka připojení segmentů SEG_A EQU 2_00001000 ; SEG_B EQU 2_00010000 SEG_C EQU 2_01000000 SEG_D EQU 2_10000000 SEG_E EQU 2_00000010 SEG_F EQU 2_00000100 SEG_G EQU 2_01000000 SEG_DP EQU 2_00000001 ; výstup Qx hgfedcba tabulka říká, na který bit (D7 až D0) výstupu pos. reg., je daný seg. připojen) kontrola zápisu - v každém řádku je právě jediná „1“ v každém sloupci je právě jediná „1“ – pak jednoznačné přiřazení Výskyt jedničky ve více řádcích téhož sloupce – chyba Výskyt jedničky ve více pozicích (sloupcích) jednoho řádku – chyba A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
31
Využití operátorů překladače – assembleru Aby se při každé změně zapojení nemusel znovu vytvářet nový generátor znaků, využije se dalších funkčních možností překladače – jeho operátorů Operátory: bitové operace, posuny, aritmetické operace Pro generátor znaků – využití operátorů logického součtu po jednotlivých bitech, případně i posunů nebo rotací.
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
32
Operátory assembleru Operátory lit. DUI 0473C Using the assembler str. 8.21
operátory rotace :ROL: :ROR: :SHL: << :SHR: >>
A :ROL: B A :ROR: B A :SHL: B A :SHR: B
Rotate A left by B bits Rotate A right by B bits Shift A left by B bits Shift A right by B bits
to jsou operátory assembleru, překladače, netýká se to vlastního procesoru, pomocný nástroj pro zjednodušení zápisu konstant a tvorbu a přehlednost programu obecně A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
33
Operátory assembleru operator , alt. zápis. + ……. …… :AND: & …… :EOR: ^ …… :OR: …… :NOT: ~ ……
použití A+B A- B A :AND: B A :EOR: B A :OR: B :NOT: A
Add A to B Subtract B from A Bitwise AND of A and B Bitwise Exclusive OR of A and B Bitwise OR of A and B Bitwise complement of A
str. 8- 26 Using the assembler
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
34
Tabulka přiřazení segmentů , využití operátorů Reprezentace jedné hodnoty generátoru znaků jako logický součet hodnot odpovídajícím symbolů jednotlivých segmentů (SEG_A,…) Změna tvaru znaku – postačí modifikace pouze této tabulky definice hodnoty znaku pro generátor znaků ( asembler „vypočte“ hodnotu generátoru znaků pro dané připojení) gener_zn
a f e ldp
b
g
c d
rdp
nula EQU SEG_A :OR: SEG_B :OR: SEG_C :OR: SEG_D :OR: SEG_E :OR: SEG_F jednicka EQU SEG_B :OR: SEG_C dvojka EQU SEG_A :OR: SEG_B :OR: SEG_G :OR: SEG_D :OR: SEG_E trojka EQU SEG_A :OR: SEG_B :OR: SEG_C :OR: SEG_D :OR: SEG_G sedmicka EQU SEG_A :OR: SEG_B :OR: SEG_C ctyrka EQU SEG_B :OR: SEG_C :OR: SEG_G :OR: SEG_F ; ………………….. a tak dále ( aby zbyl prostor pro samostatnou činnost čtenáře) tecka EQU SEG_DP
to se nemění při změně zapojení, ale pouze při požadavku na změnu tvaru znaků (příklad z praxe - modifikace generátoru – firma J…b..)
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
35
Definice generátoru znaků Zápis generátoru znaků s možností modifikace (potřebná inverze všech nebo vybraných bitů) primo EQU 2_0000000 ; konstanta pro přímá data, svítí při 1 (high) neguj EQU 2_1111111 ; konstanta pro negaci , svítí při 0 (low) jiné EQU 2_0000011 ; D7 až D2 svítí při H, D1, D0 svítí při L maska EQU neguj ; konkrétní volba formy generace ( může být, že ; nekteré znaky jsou buzeny přímo, některé přes invertor) (otázka – buzení LED „proti zemi“ nebo „proti napájení“. Pro LTS3401- . společná anoda, možné buzení pouze proti napájení, svítí při výstupu L (0) ; vlastní generator znaku se zohledněním vlastností obvodu ; umistení hodnot jednotlivých bajtu do pameti s úpravou maskou gener_zn ; zohlednění – svítí ve stavu H (high) nebo L (low) DCB nula :EOR: maska ; zde je kód pro zobrazení znaku 0 DCB jednicka :EOR: maska ; 1 DCB dvojka :EOR: maska ; 2 ; a tak dále (zatím se neřeší ovládání desetinné tečky) A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
36
Adresace RAM Je potřeba zvolit úsek RAM mimo zásobník (pro uložení mezivýsledků) STM32F100RBT6B (v STM32VL Discov.) - 128 kByte FLASH a 8 kByte RAM. Inicializace zásobníku ve vzorovém projektu je na 0x20 00 02 00, Zásobník se při použití plní (instrukcí PUSH) směrem k nižším adresám Adresa 0x20 00 10 00 – daleko od zásobníku, právě uprostřed paměti RAM moje_RAM LDR.W LDR.W STR
EQU 0x20001000 ; adresa RAM, která se bude používat R4, =moje_RAM ; R4 jako ukazatel do RAM R3, =0x11223344 R3, [R4] ; uložení dat z R3 do RAM
(LDR.W – indikuji požadavek, aby překladač přeložil jako 32- bitovou instrukci Thumb 2)
; uloží obsah R3 (0x11223344) do pameti , ; na adrese 0x2000 1000 je Byte 0x44 ; na 0x2000 1001 je Byte 0x33 ; na 0x2000 1002 je Byte 0x22 ; na 0x2000 1003 je Byte 0x11 A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
37
Čtení znaku z generátoru ; získání grafické reperezentace znaku MOV R1, #1 ;ale zde by se jinak predavala hodnota (0 az 9 cislice) LDR.W R2, =gener_zn ; R2 ukazuje na začátek generatoru znaku ADDS R2, R2, R1 ;pricteni posunu o hodnotu cislice , zde 1 LDRB R3, [R2] ;nacteni znaku jako bajt, horni 3 bajty jsou 0 v R3 je obsah pro zobr. číslice „1“ na zobrazovači – pozitivní log. (1 – svítí) je nutno ve znaku následně nastavit, nebo nulovat bit příslušející desetinné tečce Dále použití instrukci (procesoru) Logical Shift Left, nebo Logical Shift Left, které posouvají registr přes příznak Carry, Možné využití příznaku Carry a podle jeho stavu nastavovat výstup D Pro odladění je velmi výhodné použití simulátoru v projekt, „options for target“, „debug“, se místo („Use ST link debugger“) nastaví „Use simulator“
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
38
Adresace RAM Příklad adresace RAM , ukládání hodnot 0x11, 0x12, 0x13, 0x14 do nejnižšího byte slova V reálné aplikaci – ukládání sady hodnot odpovídající zobrazení jednotlivých znaků „video RAM“, zde jen příklad plnění moje_RAM EQU 0x20001000 LDR.W R4, =moje_RAM ; R4 jako ukazatel do RAM LDR.W R3, =0x11 ; do R3 data, která budu ukladat STR R3, [R4] ; uložení dat (word – 32 bitů) z R3 do RAM ADDS R3, R3, #1 ; inkrementace R3 pricteni 1, vR3 bude 0x12 STR R3, [R4, #4] ; ulozeni dat do RAM na adr. dle R4 zvysenou o 4 ADDS R3, R3, #1 ; inkrementace R3 pricteni 1, bude 0x13 STR R3, [R4, #8] ; ulozeni dat do RAM na adr. dle R4 zvysenou o 8 ADDS R3, R3, #1 inkrementace R3 STR R3, [R4, #0xC]; uloz. dat do RAM na adr. dle R4 zvys. o 0xC obsah R4 jako ukazatele zůstává zachován
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
39
Adresace RAM – příklad programu Program uloží (instrukce store Byte) na adresu 0x20001000 adresované pomocí R4 nejnižší Byte z registru R3, inkrementuje obsah R3 a a uloží jej na adresu z R4 +1, příp. R4 +2, R4 +3 pevná volba adresy vzhledem k adrese v R4 moje_RAM LDR.W LDR.W STRB ADDS STRB ADDS STRB ADDS STRB
EQU 0x20001000 R4, =moje_RAM R3, =0x00 R3, [R4] ; uložení byte na adresu 0x2000 1000 R3, R3, #1 R3, [R4, #1] ; uložení byte na adresu 0x2000 1001 R3, R3, #1 R3, [R4, #2] ; uložení byte na adresu 0x2000 1002 R3, R3, #1 R3, [R4, #3] ; uložení byte na adresu 0x2000 1003
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
40
Adresace RAM s autoinkrementací po Byte Program uloží Byte na adresu 0x20001000 adresované pomocí R4 nejnižší Byte z registru R3, následně zvýší obsah R4 o 1 zápis [R4], #1 značí tzv. post index, jedná se o ukládání a autoinkrementaci moje_RAM LDR.W LDR.W STRB ADDS STRB ADDS STRB ADDS STRB ADDS STRB
EQU 0x20001000 R4, =moje_RAM R3, =0x00 R3, [R4], #1 ; uložení byte na adresu 0x2000 1000 R3, R3,#1 R3, [R4], #1 uložení byte na adresu 0x2000 1001 R3, R3,#1 R3, [R4], #1 uložení byte na adresu 0x2000 1002 R3, R3,#1 R3, [R4], #1 uložení byte na adresu 0x2000 1003 R3, R3,#1 R3, [R4], #1 uložení byte na adresu 0x2000 1004
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
41
Adresace RAM s autoinkrementací po slovech STR R3, [R4], #4 uloží celý registr R3 (4 byte) a inkrementuje ukazatel adresy v R4 o potřebný inkrement 4 Obdobně je možno využít instrukcí LDRB a LDR – načtení byte a načtení slova (4 byte) do registru Paměť RAM je možno v úloze využít: - pro ukládání připravených zpráv, která se budou vysílat na zobrazovač - ukládání mezivýsledků Do RAM (zvolená část jako videopaměť) se nejdříve uloží obraz toho, co se bude vysílat na posuvný registr další program pak pouze bere tato data a vysílá je na posuvný registr
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
42
Uložení a čtení ACSII znaků jako textových hlášení
; ; ;
LDR.W R4, =hlaseni ; do R4 adresu pameti, kde je text hlaseni LDRB R2, [R4], #1 ; postindex – inkrementace ukazatele v R4 ……………zde by bylo volání podprogramu posílajícího někam znak LDRB R2, [R4], #1 ; ……………………………. LDRB R2, [R4], #1 ……………………………. LDRB R2, [R4], #1
hlaseni DCB hlaseni2 DCB
„123 Ahoj. start programu“ ; ulozeni ASCII znaků „321 tak to je jiz definitivni konec“
využití v samostatném projektu, výpisy hlášení Pozor taková data ukládat až za program, případně do míst programu, kde se nemohou data špatně vykládat jako programový kód.
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
43
Poznámka k použítí pseudoinstrukce LDR x, = , Literal Pool LDR R2, =brana1 LDR R2, =lokace, ….. 32- bitové hodnoty odpovidající brana1, lokace,… překladač ukládá do tzv. „literal pool“ na konci úseku programu , LDR R0, =GPIOC_CRH přeloží do THUMB 16- bitová instrukce LDR R0, [PC, #84] hodnota je uložena relativně vůči akt. adresovému čítač omezený rozsah možnost v některých případech přetečení LDR.W R0, =GPIOC_CRH; .W zadání požadavku na překlad do THUMB-2 32- bitové instrukce, větší rozsah hodnoty posunu jiná alternativa - použití pseudoinstrukce MOV32 R0, #0xABCDEF12 (její překlad pomocí dvou 32- bitových instrukcí, instrukce MOV a MOVT) MOVT (Mov Top) (32- bitová inst. pro zápis 16 bitů dat do horní části slova) direktiva LTORG – výklad tabule, pokyn k umístění literal pool v daném místě A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
44
Poznámka -direktiva LTORG V instrukcích typu LDR.W R0, =GPIOC_CRH Uložení příslušné 32 bitové hod. za program, adresování relativně vůči PC. Omezená vzdálenost umístění dat do Literal Pool „uložiště konstant“ Zápis krátkého programu- překlad OK, přidáním bezchybných instrukcí – hlášení chyby. Při překročení jisté délky programu – překladač hlásí chybu. Řešení …. …. ; program ….. ; program ….. ; program B dále ; preskoc na dále LTORG ; tak tady si odloz konstanty – uložení bloku dat: Literal pool (analogie úklid sn…, nedokážu odhrnou vše až na konec, vytvořím lokální úložiště. Při pohybu ( běhu programu však musím „ lokální úložište konstant přeskočit, aby sed ata neinterpretovala jako programový kód - musím lokální úložiště přeskočit)
DALE ….. ; program ….. ; program A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
45
Instrukce CMP, TST Instrukce CMP Rn, Operand2 (virtuálně) provádí instrukci SUBS - odečtení s nastavením příznaků N, Z, C , V, ale výsledek se neukládá Použití pro (aritmetické) porovnání velikosti obsahu registru a operandu Instrukce TST Rn, Operand2 (virtuálně) provádí instrukci ANDS – log. AND s nastavením příznaků N, Z, C , V, ale výsledek se neukládá (Použití pro zjištění, zda je na daném místě Rn (určeném polohou 1 v masce – operand 2) hodnota 1 nebo 0, operand 2 obsahuje „masku“ např. 0x01 – s jediným bitem v 1 TST R1, #0x20000 ANDS - log. operace AND po bitech, nastavuje příznaky N a Z N do 1 , když je výsl.operace negativní, jinak nastaveno do 0 Z do 1, když je výsl. operace nulový, jinak nastaveno do 0 C do 1, když je výsl. operace CARRY „přetečení“ z nejvyšš. bitu, jinak nast. do 0 V do 1, když je výsledek operace „overflow“, součet zápor. čísel kladný,.. A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
46
Instrukce CMP, TST TST Rn, Operand2 OPERAND 2 : any constant that can be produced by shifting an 8-bit value left by any number of bits within a 32-bit word Proto je možno zapsat instrukci s velkou hodnotou přímé konstanty překladač vhodně přeloží tak, že se v instrukci využije Barrel Shifter Konstanta bude 1, ale před jejím použitím se posune o patřičný počet míst překlad
instrukce
F411 3F00
TST
R1, #0x20000
F411 1F00
TST
R1, #0x200000
A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha
47