Výklad k úloze 7 seg. zobrazovač, řešení prog. gener. znaků

Výklad k úloze 7 seg. zobrazovač, řešení prog. gener. znaků
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
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement