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í t zap. Stiskem schod. tlačítka se aktivuje světlo na po nastavenou dobu t zap. Na servisním seg. zobrazovači se bude indikovat čas zbývající do vypnutí t vyp. 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 t zap. Na zobrazovači se bude indikovat nový čas zbývající do vypnutí t vyp (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 t zap = 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 t zap v sekundách. (Servisní tlačítka budou mít funkci zvyš (+), sniž ( -), potvrdit, (=). ) Tato hodnota t zap 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 t zap 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 -PA 0. (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 + U cc,, 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 b e c možné zobrazení znaků ldp d rdp A4B38NVS, 2014, J.Fischer, kat. měření, ČVUT - FEL, Praha 9
Připojení zobrazovače posuvným registrem Posuvný registr sério paralelní Sériový vstup, paralelní výstup kaskáda klopných obvodů D s. data posun Sériová data postupují do registru s náběžnou hranou hodinového signálu 74LS164, 74HC164 U CC s. data posun nul. R R R Q A Q B Q H A B CLK CLR SR1 74LS164 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 A 1 vstup seriových. dat, A 2 na úroveň H (nebo opačně), příp. A 1 a A 2 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, U CC R2 zatem. displ. s. data posun nul. T1 R1 R R R Q A Q B Q H A B CLK CLR SR1 74LS164 R R R Q A Q B Q H A B CLK CLR SR2 74LS164 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í přepis s. data posun nul. Q A výstupní obvody Q B Q H RCLK výst. reg. SER pos. reg. Q H SRCLK SRCLR SRR1 74HC595 výst. záchytný registr 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 I DS 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 I DS, 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 vinutí relé U 1 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í R p (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). tlač. R P + 5 V (+ 3,3 V) 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í U ILmax 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 a LTS3401 f ldp e d g c b 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 Q H, 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 Q H a i dalších (Q HA až Q F ) 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 EQU 2_00000001 ; 1 zde značí připojení seg. k výst. bitu 0 SEG_B EQU 2_00000010 ; SEG_C EQU 2_00000100 ; SEG_D EQU 2_00001000 SEG_E EQU 2_00010000 SEG_F EQU 2_00100000 SEG_G EQU 2_01000000 SEG_DP EQU 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 dvojka EQU 2_00111011 trojka EQU 2_01001111 ctyrka EQU 2_01100110 petka EQU 2_01101101 sestka EQU 2_01111101 sedmicka EQU 2_00000111 osmicka EQU 2_01111111 devitka EQU 2_00101111 tecka EQU 2_10000000 ; gfedcba ldp a f g e d c b rdp ( 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 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 ; dolní dva bity- segmety svítí při 1, ostaní při 0 ; (může být, že některé znaky jsou buzeny přímo, některé přes invertor) maska EQU 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: A :ROL: B Rotate A left by B bits :ROR: A :ROR: B Rotate A right by B bits :SHL: << A :SHL: B Shift A left by B bits :SHR: >> A :SHR: B 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. použití +. A + B Add A to B - A - B Subtract B from A :AND: & A :AND: B Bitwise AND of A and B :EOR: ^ A :EOR: B Bitwise Exclusive OR of A and B :OR: A :OR: B Bitwise OR of A and B :NOT: ~ :NOT: A 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 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 f ldp e d a g c b rdp 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 EQU 0x20001000 ; adresa RAM, která se bude používat LDR.W R4, =moje_ram ; R4 jako ukazatel do RAM LDR.W R3, =0x11223344 STR 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 EQU 0x20001000 LDR.W R4, =moje_ram LDR.W R3, =0x00 STRB R3, [R4] ; uložení byte na adresu 0x2000 1000 ADDS R3, R3, #1 STRB R3, [R4, #1] ; uložení byte na adresu 0x2000 1001 ADDS R3, R3, #1 STRB R3, [R4, #2] ; uložení byte na adresu 0x2000 1002 ADDS R3, R3, #1 STRB 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 EQU 0x20001000 LDR.W R4, =moje_ram LDR.W R3, =0x00 STRB R3, [R4], #1 ; uložení byte na adresu 0x2000 1000 ADDS R3, R3,#1 STRB R3, [R4], #1 uložení byte na adresu 0x2000 1001 ADDS R3, R3,#1 STRB R3, [R4], #1 uložení byte na adresu 0x2000 1002 ADDS R3, R3,#1 STRB R3, [R4], #1 uložení byte na adresu 0x2000 1003 ADDS R3, R3,#1 STRB 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] omezený rozsah možnost v některých případech přetečení hodnota je uložena relativně vůči akt. adresovému čítač 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