@*** Ancka - Frekvencmeter 1GHz (a.s), Ana Tursic 06.09.2014 ***
@ Ancka2: dopolnitve (ana2.s), S53DZ
@ Datum:  21.10.2014 -

@izbira ARM plosce:
.equ	ANA,  1		@ANA = Ancka(LPC2138/01)
.equ	OLI,  0		@OLI = Olimex(LPC-P2148), glej spremembe S53DZ
.equ	BON,  0		@BON = Ancka(LPC2138/01) + TCXO (20/2)MHz + spremembe S53DZ
.equ	LCD,  0		@LCD: 0=16x2, 1=20x2 znakov

@*** TODO: -

@*** Spremenjeno:
@ - dodana izbira OLI(LPC-P2148) in BON(ANA + 10MHz TCXO + OLI spremembe)
@ - dve toggle tipki namesto stirih tipk: T1=graf/dBm, T2=0.1s/1s/10s
@ - (STANJE): bit0=stolp/dBm, bit1=meritev_veljavna, bit2:3:4=0.1s:1s:10s, bit5=mute (8bit)
@ - poskusno zmanjšano povprecenje nivoja v ADC z 2na14 v 2na12 zaradi razlike kazanja pri 0.1s
@ - dodana meritev 10s in 11 mestni prikaz na zaslonu
@ - dodan mute frekvence: pri nivoju "too low" --> frekv=0
@ - (STEVECF) = 64 bitni stevec frekvence (5 H bitov + 32 L bitov TIMER0) ob izteku PWM
@ - 64 bitni izracun in prikaz frekvence: (R9:R3) z DELI10D

@*** Vhodno/izhodni prikljucki LPC2138/01 ***
@/RESET - vhod vezan na /ERROR.LP2951 in na /DTR.FT231XS
@P0.0/TXD0/PWM1       - izhod vezan na RXD.FT231XS
@P0.1/RXD0/PWM3/EINT0 - vhod vezan na TXD.FT231XS
@P0.2.od/SCL0/CAP0.0 - nepovezan
@P0.3.od/SDA0/MAT0.0/EINT1 - nepovezan
@P0.4/SCK0/CAP0.1/AD0.6  - vhod AD0.6 za merjenje jakosti signala
@P0.5/MISO0/MAT0.1/AD0.7 - vhod	P0.5 ki opazuje PWM2 za preprost program
@P0.6/MOSI0/CAP0.2/AD1.0 - vhod CAP0.2 za vhod stevca TIMER0
@P0.7/SSEL0/PWM2/EINT2   - izhod PWM2 za vrata stevca ECL 74ACT32
@P0.8/TXD1/PWM4/AD1.1      - ECL stevec vhod #1
@P0.9/RXD1/PWM6/EINT3      - ECL stevec vhod #2
@P0.10/RTS1/CAP1.0/AD1.2   - ECL stevec vhod #3
@P0.11.od/CTS1/CAP1.1/SCL1 - ECL stevec vhod #4
@P0.12/DSR1/MAT1.0/AD1.3   - ECL stevec vhod #5
@LCD 8-bit data na S-ARM P0.16-23
@P0.16-23 - digitalni izhodi za LCD D0-7.HD44780
@P0.24 - ne obstaja ***
@P1.16 - vhod z vgrajenim PULL-UP, modra tipka levo na maso (dBm/stolpec)
@P1.17 - vhod z vgrajenim PULL-UP, rumena tipka gor na maso (T:1s/10s/0.1s)
@P1.18 - vhod z vgrajenim PULL-UP, rdeca tipka dol na maso
@P1.19 - vhod z vgrajenim PULL-UP, zelena tipka desno na maso
@P1.20 <-- P1.30 (!) - nepovezan / digitalni izhod za LCD E.HD44780 za S-ARM
@P1.21 - digitalni izhod za LCD RS.HD44780
@P1.22-25 - nepovezani ***
@P1.26(!) - nepovezan ***
@P1.27-29 - nepovezani ***
@P1.30 - (digitalni izhod za LCD E.HD44780)
@P1.31 - nepovezan ***

@*** Konstante mikrokrmilnika LPC2138/01 ***

.if ANA
	.equ	KVARC,	19442715	@frekvenca TCXO od Matjaza (Hz)
@@	.equ	KVARC,	19439906	@frekvenca TCXO od Ane (Hz)
	.equ	CLK,	KVARC*3		@frekvenca jedra ARM (PLL) 19.44MHz x 3 = 58.3197MHz
	.equ	PCLK,	CLK			@frekvenca vhodno/izhodnih enot (APBDIV)
	.equ	BAUD,	PCLK/153600	@modulo deljenja UART za 9600bps*16 za 58.3197MHz
.elseif OLI
@@	.equ	KVARC,	12000000	@frekvenca XTAL 12MHz od LPC-P2148 (Hz)
	.equ	KVARC,	11999704	@frekvenca XTAL 12MHz od LPC-P2148 (Hz)
	.equ	CLK,	KVARC*5		@frekvenca jedra ARM (PLL) 12MHz x 5 = 60MHz
	.equ	PCLK,	CLK			@frekvenca vhodno/izhodnih enot (APBDIV)
	.equ	BAUD,	391			@modulo deljenja UART za 9600bps*16 za 48-->60MHz iz proj.vco2
.elseif BON
@@	.equ	KVARC,	10000000	@frekvenca TCXO 20-->10MHz (Hz) ---TODO!
	.equ	KVARC,	10000000	@frekvenca TCXO 20-->10MHz (Hz)
	.equ	CLK,	KVARC*6		@frekvenca jedra ARM (PLL) 10MHz x 6 = 60MHz
	.equ	PCLK,	CLK			@frekvenca vhodno/izhodnih enot (APBDIV)
	.equ	BAUD,	391			@modulo deljenja UART za 9600bps*16
.endif

.equ	N1US,	CLK/3000000	@konstanta cakanja T1US za HD44780
.equ	PWMMR0,	CLK*33		@konstante za PWM
.equ	PWMMR10,CLK*10+1000	@PWM konst za 10s
.equ	PWMMR1,	CLK+1000	@PWM konst za  1s
.equ	PWMMR1A,CLK/10+1000	@PWM konst za  0,1s
.equ	PWMMR2,	1000
.equ	ADC_DIV,PCLK/4000000	@ADC clock 4 MHz
.equ	MINUS60,3550000			@zacetek uporabne skale -60dBm (0.7V, 24bit)
.equ	SKALA80,10400			@skala stolpca 80dBm (768 korakov do 2.3V, 24bit)
.equ	SKALADB,SKALA80*768/800	@skala dBm (80dBm = 800 korakov)
.equ	POPRAVA,3000000			@popravek amplitudnega odziva AD8309

@*** Dodelitev pomnilnika RAM ***
.equ	SKLAD,	0x40000100	@sklad raste navzdol -256byte
.equ	JAKOST,	0x40000400	@dvojiski rezultat meritve (32bit)
@.equ	DELTAF,	0x40000404	@razlika frekvence (32bit)
@.equ	STEVCFL,0x40000404	@64bitni stevec frekvence L (32bit)
@.equ	STEVCFH,0x40000408	@64bitni stevec frekvence H (32bit)
.equ	STEVECF,0x40000404	@64bitni stevec frekvence L:H (64bit)
.equ	FREKVNC,0x4000040C	@izmerjena frekvenca za preracunavanje amplitude (32bit)
@@.equ	STANJE,	0x40000500	@ANA: bit0=stolpec/dBm, bit1=0.1s/1s, bit2=meritev_veljavna (8bit)
.equ	STANJE,	0x40000500	@BON: bit0=stolpec/dBm, bit1=meritev_veljavna, bit2:3:4=0.1s:1s:10s, bit5=mute (8bit)
.equ	STANJE1,0x40000504	@enkrat zakasnjeno STANJE
.equ	STANJE2,0x40000508	@dvakrat zakasnjeno STANJE

@*** Ukazi za delovanje zbirnika ARM ***
@	AREA	RESET, CODE, READONLY, ALIGN=9
@	ENTRY
@	CODE32
.text
.arm
.global _startup

_startup:
@*** Tabela izjem na zacetnem naslovu 0 ***
IZJEME:
	B	ZACNI	@RESET
	B	IZJEME	@Undef
	B	IZJEME	@SWI
	B	IZJEME	@PAbt
	B	IZJEME	@DAbt
	NOP			@Reserved Vector
	B	IZJEME	@IRQ
	B	IZJEME	@FIQ

@*** Onemogoci zascito vsebine FLASH na naslovu 0x000001FC ***
@	.ALIGN	512
@.org	0x200
.balign 512

@*** Inicializiraj MAM *** (R0-1)
MAM:
	LDR	R0,=0xE01FC000	@MAMCR=0
	MOV	R1,#0
	STRB	R1,[R0]
	LDR	R0,=0xE01FC004	@MAMTIM=3
	MOV	R1,#3
	STRB	R1,[R0]
	LDR	R0,=0xE01FC000	@MAMCR=2
	MOV	R1,#2
	STRB	R1,[R0]
	MOV	PC,LR
.ltorg

@*** Nastavi PCONP in APBDIV *** (R0-1)
PWRCLK:
	LDR	R0,=0xE01FC0C4	@PCONP
	LDR	R1,=0x0000102A	@TIM0,UART0,PWM,AD0
	STR	R1,[R0]
	LDR	R0,=0xE01FC100	@APBDIV=1
	MOV	R1,#1
	STRB	R1,[R0]
	MOV	PC,LR
.ltorg

@*** Inicializiraj PLL *** (R0-2)
PLL:
	LDR	R0,=0xE01FC084	@PLLCFG=0x22 P=2,M-1=2
.if ANA
	MOV	R1,#0x22		@ x3: 0x22 za 3x(38.88/2)MHz=58.3197MHz, P=2,M-1=2
.elseif OLI
	MOV	R1,#0x24		@ x5: 0x24 za 5x12MHz=60MHz pri 12MHz XTAL
.elseif BON
	MOV	R1,#0x25		@ x6: 0x25 za 6x10MHz=60MHz pri 10MHz TCXO!
.endif
	STRB	R1,[R0]
	LDR	R0,=0xE01FC080	@PLLCON=0x01 PLL-enable
	MOV	R1,#0x01
	STRB	R1,[R0]
	LDR	R0,=0xE01FC08C	@PLLFEED
	MOV	R1,#0xAA
	MOV	R2,#0x55
	STRB	R1,[R0]
	STRB	R2,[R0]
PLL1:	LDR	R0,=0xE01FC088	@PLLSTAT cakanje uklenitve
	LDR	R1,[R0]
	ANDS	R1,R1,#0x400
	BEQ	PLL1
	LDR	R0,=0xE01FC080	@PLLCON=0x03 PLL-enable&connect
	MOV	R1,#0x03
	STRB	R1,[R0]
	LDR	R0,=0xE01FC08C	@PLLFEED
	MOV	R1,#0xAA
	MOV	R2,#0x55
	STRB	R1,[R0]
	STRB	R2,[R0]
	MOV	PC,LR
.ltorg

@*** Inicializiraj GPIO in DAC *** (R0-1)
GPIO:
	LDR	R0,=0xE002C000	@PINSEL0
	LDR	R1,=0x0000A305	@ P0.0-1=UART0,P0.4=AD0.6,P0.6=CAP0.2,P0.7=PWM2
	STR	R1,[R0]
	LDR	R0,=0xE002C004	@PINSEL1 P0.25=AOUT
	LDR	R1,=0x00080000	@P0.25=AOUT
	STR	R1,[R0]
	LDR	R0,=0xE002C014	@PINSEL2 izklop JTAG&TRACE
	LDR	R1,[R0]
	BIC	R1,R1,#0x0C
	STR	R1,[R0]
	LDR	R0,=0xE01FC1A0	@SCS=0x03 high-speed GPIO 0&1
	MOV	R1,#0x03
	STR	R1,[R0]
	LDR	R0,=0x3FFFC014	@FIO0PIN vsi 1
	MOV	R1,#-1
	STR	R1,[R0]
	LDR	R0,=0x3FFFC034	@FIO1PIN vsi 0
	MOV	R1,#0
	STR	R1,[R0]
	LDR	R0,=0x3FFFC000
.if ANA+BON
	LDR	R1,=0xFFFFE00F	@FIO0DIR izhodi 0.13-31, vhodi 0.4-12, izhodi 0.0-3
	STR	R1,[R0]
	LDR	R0,=0x3FFFC020	@FIO1DIR izhodi 1.20-1.31, vhodi 1.16-19
	LDR	R1,=0xFFF00000
.elseif OLI
	LDR	R1,=0xBFFE000F	@FIO0DIR izhodi 0.17-29, 0.31, vhodi 0.4-16, 0.30, izhodi 0.0-3
	STR	R1,[R0]
	LDR	R0,=0x3FFFC020	@FIO1DIR izhodi 1.16-1.31, vhodi 0
	LDR	R1,=0xFFFF0000
.endif
	STR	R1,[R0]
	LDR	R0,=0xE006C000	@DACR sredina skale, visok tok
	LDR	R1,=0x00008000
	STR	R1,[R0]
	MOV	PC,LR
.ltorg

@*** Inicializiraj UART0 *** (R0-1)
UART0:
	LDR	R0,=0xE000C00C	@U0LCR=0x83 DLAB=1,no-parity,1stop,8bit
	MOV	R1,#0x83
	STRB	R1,[R0]
	LDR	R0,=0xE000C000	@U0DLL
	LDR	R1,=BAUD
	STRB	R1,[R0]
	LDR	R0,=0xE000C004	@U0DLM
	MOV	R1,R1,LSR#8
	STRB	R1,[R0]
	LDR	R0,=0xE000C008	@U0FCR=0xC1 RXtrig=14bit,FIFOenable
	MOV	R1,#0xC1
	STRB	R1,[R0]
	LDR	R0,=0xE000C00C	@U0LCR=0x03 DLAB=0,no-parity,1stop,8bit
	MOV	R1,#0x03
	STRB	R1,[R0]
	MOV	PC,LR
.ltorg
	
@*** Inicializiraj HD44780 5X7,2vrstici,CGRAM *** (R0-3)
INILCD:
	STR	LR,[SP,#-4]!	@resi link
	BL	T100MS		@zakasnitev 100ms
	MOV	R0,#0x38	@function set
	BL	UKAZ
	BL	T4MS		@zakasnitev 4ms
	MOV	R0,#0x38	@function set
	BL	UKAZ
	MOV	R0,#0x38	@function set
	BL	UKAZ
	MOV	R0,#0x08	@display off
	BL	UKAZ
	MOV	R0,#0x01	@display clear
	BL	UKAZ
	BL	T4MS		@zakasnitev 4ms
	MOV	R0,#0x06	@entry mode set
	BL	UKAZ
	MOV	R0,#0x0C	@display on
	BL	UKAZ
	MOV	R0,#0x40	@set CGRAM address
	BL	UKAZ
	MOV	R2,#64		@prepisi 8 znake = 64 bajtov
	LDR	R3,=INILCD2
INILCD1:	LDRB	R0,[R3],#1
	BL	ZNAK
	SUBS	R2,R2,#1
	BNE	INILCD1
	MOV	R0,#0x80	@set DDRAM address zacetek prve vrstice
	BL	UKAZ
	LDR	PC,[SP],#4	@povratek na link
.ltorg
INILCD2:
.byte	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04	@0=praznina
.byte	0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x04	@1=enacrtica
.byte	0x14,0x14,0x14,0x14,0x14,0x14,0x00,0x04	@2=dvecrtici
.byte	0x15,0x15,0x15,0x15,0x15,0x15,0x00,0x04	@3=tricrtice
.byte	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F	@0=praznina podcrtana
.byte	0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x1F	@1=enacrtica podcrtana
.byte	0x14,0x14,0x14,0x14,0x14,0x14,0x00,0x1F	@2=dvecrtici podcrtana
.byte	0x15,0x15,0x15,0x15,0x15,0x15,0x00,0x1F	@3=tricrtice podcrtana
.ALIGN

@*** Podcrtan stolpec v desno v drugi vrstici iz R3 *** (R0-3)
STOLP:
	STR	LR,[SP,#-4]!	@resi link
	MOV	R0,#0xC0	@set DDRAM address druga vrstica
	BL	UKAZ
	MOV	R2,#0
STOLP1:	MOV	R0,#0	@praznina za velike korake po 16
	CMP	R3,#16		@ena crtica?
	MOVCS	R0,#1
	CMP	R3,#32		@dve crtici?
	MOVCS	R0,#2
	CMP	R3,#48		@tri crtice?
	MOVCS	R0,#3
	AND	R1,R3,#15	@podcrtaj pripadajoci znak za male korake po 1
	CMP	R1,R2
	ADDEQ	R0,R0,#4
	BL	ZNAK		@izpisi crtice
	SUBS	R3,R3,#48	@odstej 3 crtice, negativno ustavi?
	ANDMI	R3,R3,#15
	ADD	R2,R2,#1	@zanka 16 znakov
	CMP	R2,#16
	BMI	STOLP1
	LDR	PC,[SP],#4	@povratek na link
.ltorg

@*** Znak iz R0 v HD44780 *** (R0-1)
ZNAK:
	STR	LR,[SP,#-4]!	@resi link
.if ANA+BON
	LDR	R1,=0x3FFFC016	@FIO0PIN2 podatek
	STRB	R0,[R1]
	LDR	R1,=0x3FFFC03A	@FIO1SET2
	MOV	R0,#0x20		@RS=1, P1.21
	STRB	R0,[R1]
	BL	T1US			@zakasnitev 1us
	LDR	R1,=0x3FFFC03B	@FIO1SET3
	MOV	R0,#0x40		@E=1, P1.30
	STRB	R0,[R1]
	BL	T1US			@zakasnitev 1us
	LDR	R1,=0x3FFFC03F	@FIO1CLR3
	MOV	R0,#0x40		@E=0, P1.30
.elseif OLI
	LDR	R1,=0x3FFFC036	@FIO1PIN2 podatek
	STRB	R0,[R1]
	LDR	R1,=0x3FFFC03B	@FIO1SET3
	MOV	R0,#0x01		@RS=1, P1.24
	STRB	R0,[R1]
	BL	T1US			@zakasnitev 1us
	LDR	R1,=0x3FFFC01B	@FIO0SET3
	MOV	R0,#0x10		@E=1, P0.28
	STRB	R0,[R1]
	BL	T1US			@zakasnitev 1us
	LDR	R1,=0x3FFFC01F	@FIO0CLR3
	MOV	R0,#0x10		@E=0, P0.28
.endif
	STRB	R0,[R1]
	BL	T100US			@zakasnitev 100us
	LDR	PC,[SP],#4		@povratek na link
.ltorg

@*** Ukaz iz R0 v HD44780 *** (R0-1)
UKAZ:
	STR	LR,[SP,#-4]!	@resi link
.if ANA+BON
	LDR	R1,=0x3FFFC016	@FIO0PIN2 podatek
	STRB	R0,[R1]
	LDR	R1,=0x3FFFC03E	@FIO1CLR2
	MOV	R0,#0x20		@RS=0, P1.21
	STRB	R0,[R1]
	BL	T1US			@zakasnitev 1us
	LDR	R1,=0x3FFFC03B	@FIO1SET3
	MOV	R0,#0x40		@E=1, P1.30
	STRB	R0,[R1]
	BL	T1US			@zakasnitev 1us
	LDR	R1,=0x3FFFC03F	@FIO1CLR3
	MOV	R0,#0x40		@E=0, P1.30
.elseif OLI
	LDR	R1,=0x3FFFC036	@FIO1PIN2 podatek
	STRB	R0,[R1]
	LDR	R1,=0x3FFFC03F	@FIO1CLR3
	MOV	R0,#0x01		@RS=1, P1.24
	STRB	R0,[R1]
	BL	T1US			@zakasnitev 1us
	LDR	R1,=0x3FFFC01B	@FIO0SET3
	MOV	R0,#0x10		@E=1, P0.28
	STRB	R0,[R1]
	BL	T1US			@zakasnitev 1us
	LDR	R1,=0x3FFFC01F	@FIO0CLR3
	MOV	R0,#0x10		@E=0, P0.28
.endif
	STRB	R0,[R1]
	BL	T100US			@zakasnitev 100us
	LDR	PC,[SP],#4		@povratek na link

@	.ALIGN	16
.balign	16

@*** Zakasnitev 1us *** (R0)
T1US:
	MOV	R0,#N1US
T1US1:	SUBS	R0,R0,#1
	BPL	T1US1
	MOV	PC,LR

@*** Zakasnitev 100us *** (R0-1)
T100US:
	STR	LR,[SP,#-4]!	@resi link
	MOV	R1,#100
T100US1:	BL	T1US
	SUBS	R1,R1,#1
	BPL	T100US1
	LDR	PC,[SP],#4	@povratek na link

@*** Zakasnitev 4ms *** (R0-2)
T4MS:
	STR	LR,[SP,#-4]!	@resi link
	MOV	R2,#40
T4MS1:	BL	T100US
	SUBS	R2,R2,#1
	BPL	T4MS1
	LDR	PC,[SP],#4	@povratek na link

@*** Zakasnitev 100ms *** (R0-3)
T100MS:
	STR	LR,[SP,#-4]!	@resi link
	MOV	R3,#25
T100MS1:	BL	T4MS
	SUBS	R3,R3,#1
	BPL	T100MS1
	LDR	PC,[SP],#4	@povratek na link

@*** Zakasnitev 1s *** (R0-3)
T1S:
	STR	LR,[SP,#-4]!	@resi link
	MOV	R3,#250
T1S1:	BL	T4MS
	SUBS	R3,R3,#1
	BPL	T1S1
	LDR	PC,[SP],#4	@povratek na link

@*** Zacetek programa po resetu ***
ZACNI:
	LDR	SP,=SKLAD	@inicializiraj SP
	BL	MAM		@inicializiraj MAM
	BL	PWRCLK	@nastavi PCONP in APBDIV
	BL	PLL		@inicializiraj PLL
	BL	GPIO	@inicializiraj GPIO in DAC
	BL	UART0	@inicializiraj UART0
	BL	INILCD	@inicializiraj HD44780 5X7,2vrstici,CGRAM
	BL	INITIM0 @inicializiraj TIMER0

	MOV	R1,#0x0B	@zacetno stanje instrumenta 01011: 1s + veljavna + dBm
	LDR	R0,=STANJE
	STRB	R1,[R0]
	MOV	R1,#0x09	@zacetno stanje instrumenta 01001: 1s + neveljavna + dBm
	LDR	R0,=STANJE1	
	STRB	R1,[R0]
	MOV	R1,#0x09	@zacetno stanje instrumenta 01001: 1s + neveljavna + dBm
	LDR	R0,=STANJE2	
	STRB	R1,[R0]
	MOV	R0,#0x80		@prva vrstica besedila
	BL	UKAZ
	LDR	R2,=LOGO1
ZACNI1:	LDRB	R0,[R2],#1
	MOVS	R0,R0
	BEQ	ZACNI2
	BL	ZNAK
	B	ZACNI1
ZACNI2:	MOV	R0,#0xC0	@druga vrstica besedila
	BL	UKAZ
	LDR	R2,=LOGO2
ZACNI3:	LDRB	R0,[R2],#1
	MOVS	R0,R0
	BEQ	ZACNI4
	BL	ZNAK
	B	ZACNI3
ZACNI4:
	B	ZANKA	@v glavno zanko programa
.ltorg

.if LCD
LOGO1:
.asciz	"Frekvencmeter 1GHz  "
LOGO2:
.asciz	"Ancka2   v2014.10.21"
.ALIGN	4
.else
LOGO1:
.asciz	"Frekv.meter 1GHz"
LOGO2:
.asciz	"Ana2 v2014.10.21"
.ALIGN	4
.endif

@*** Glavna zanka programa ***
ZANKA:
	BL		INIPWM		@inicializiraj PWM
ZANKA2:
	LDR		R0,=0x3FFFC014	@FIO0PIN0 meritev zacne?
	LDRB 	R1,[R0]
	TST		R1,#0x20	@vhod P0.5?
	BNE		ZANKA2
ZANKA1:
	BL	ADC		@meritev amplitude z ADC, (JAKOST)=R3=24bitni nivo
	BL	TIPKE	@ukaz s tipk
	BL	RXUART	@ukaz z UART0
@Izbira izpisa dBm ali stolpec
	LDR		R2,=STANJE2	@meritev veljavna?
	LDRB	R0,[R2]
	TST		R0,#0x02
	BEQ		NEVELJAVNA
	LDR		R2,=STANJE	@izpis na LCD v dBm?
	LDRB	R0,[R2]
	TST		R0,#0x01
	BLNE	IZPIS_DBM
	LDR		R2,=STANJE	@izpis stolpca na LCD?
	LDRB	R0,[R2]
	TST		R0,#0x01
	BLEQ	IZPIS_STOLPCEV

NEVELJAVNA:
	LDR		R0,=0x3FFFC014	@FIO0PIN0 meritev zakljucena?
	LDRB	R1,[R0]
	TST		R1,#0x20	@vhod P0.5?
	BEQ		ZANKA1
	BL		T100US		@pocakam 100us
	BL		MERIF		@meritev frekvence, vrne R9:R3=frek

	LDR		R0,=STANJE	@
	LDRB	R2,[R0]
	TST		R2,#0x20	@mute? --> frekv=0
	MOVNE	R9, #0		@ mute H frekv.!
	MOVNE	R3, #0		@ mute L frekv.!

	LDR		R0,=STANJE2	@
	LDRB	R2,[R0]
	TST		R2,#0x04	@0.1s? --> x10 in 10 mestno
	ADDNE	R3,R3,R3,LSL#2	@za 0.1s je dovolj 32bitno!
	MOVNE	R3,R3,LSL#1

	MOV		R6, R9		@zacasno shrani H frekv. --> R6
	MOV		R5, R3		@zacasno shrani L frekv. --> R5
	TST		R2,#0x10	@10s?
	BLNE	DELI10D		@frekv/10 za izracun popravka nivoja(f) pri 10s meritvi (64bit!)
	LDR		R0,=FREKVNC	@
	STR		R3,[R0]		@shranimo izmerjeno vrednost frekvence za popravek amplitude (32bit)
	MOV		R9, R6		@povrni zacasno shranjeno H frekv. <-- R6
	MOV		R3, R5		@povrni zacasno shranjeno L frekv. <-- R5

	LDR		R0,=STANJE1	@zakasnitev za 2 cikla/meritvi
	LDR		R1,=STANJE2
	LDRB	R2,[R0]
	STRB	R2,[R1]
	LDR		R1,=STANJE
	LDRB	R2,[R1]
	STRB	R2,[R0]

	LDR		R0,=STANJE2	@meritev veljavna?
	LDRB	R2,[R0]
	TST		R2,#0x02
	BLNE	DECIZP_SP	@desetiski izpis z brisanjem vodilnih nicel
	BL		RESPWM		@reset PWM
	B		ZANKA
.ltorg

@*** Desetiski izpis z brisanjem vodilnih nicel *** (R0-6, SKLAD-48)
@uporaba sklada: en polozaj (4byte) za LR in 10 polozajev (40byte) za 10 cifer

DECIZP_SP:
	STR		LR,[SP,#-4]!
	MOV 	R4,#9		@stevec zanke za 10 mestno (0.1s in 1s)
	LDR		R0,=STANJE2	@10Hz?
	LDRB	R2,[R0]
	TST		R2,#0x10	@10s?
	MOVNE 	R4,#10		@stevec zanke, za 11 mestno
DECIZP1_SP:
	BL		DELI10D		@izpisi desetiska mesta na sklad - 64bit, pozor R4=index!
	STR		R0,[SP,#-4]!	@R0=ostanek (cifro) --> na sklad! ***isto za 64bit!
	SUBS	R4,R4,#1
	BPL		DECIZP1_SP	@cifre s sklada posiljamo na zaslon
	
	LDR		R0,=0x80	@nastavi polozaj
	BL		UKAZ

	MOV 	R4,#9		@stevec zanke za 10 mestno (0.1s in 1s) - pozor sklad!
	LDR		R0,=STANJE2	@10Hz?
	LDRB	R2,[R0]
	TST		R2,#0x10	@10s?
	MOVNE 	R4,#10		@stevec zanke, za 11 mestno (10s)
	MOV 	R6,#0		@stevec znakov 0..x

	MOV     R5,#' '   	@podremo zastavico za cifro razlicno od 0 z ASCII kodo za presledek
	
SKLAD_BERI:
	CMP     R6,#3		@ali smo na mestu za dec. piko?
	MOVEQ	R5,#'0		@postavimo ASCII znak za '0' v zastavico, da nicel ne brisemo vec

	CMP     R6,#4		@ali smo na mestu za dec. piko?
	MOV		R0,#'.
@@	MOV		R0,#',
	LDR		R1,=0xE000C000	@U0THR izpis decimalne pike! na UART0
	STREQB	R0,[R1]

	MOV		R0,#',
	BLEQ 	ZNAK		@izpisemo decimalno vejico!, klic podprograma pogazi zastavico EQ!
@dodana pika za tisocinke samo na zaslon
	CMP     R6,#7		@ali smo na mestu za dec. piko?
	MOV		R0,#'.
	BLEQ 	ZNAK		@izpisemo piko, klic podprograma pogazi zastavico EQ!
@dodana pika za miljoninke samo na zaslon
	CMP     R6,#10		@ali smo na mestu za dec. piko?
	MOV		R0,#'.
	BLEQ 	ZNAK		@izpisemo piko, klic podprograma pogazi zastavico EQ!

	LDR		R0,[SP],#4	@precitamo cifro iz sklada!
	CMP		R0,#0		@ali je cifra enaka nic?
	MOVEQ	R0,R5		@niclo zamenjamo z vrednostjo zastavice (presledek ali nicla ASCII)
	ADDNE	R0,R0,#'0	@ne-niclo pretvorimo v ASCII znak tako, da pristejemo kodo za niclo
	MOVNE	R5,#'0		@postavimo ASCII znak za '0' v zastavico, da nicel ne brisemo vec

	LDR		R1,=0xE000C000	@U0THR izpis znaka na UART0
	STRB	R0,[R1]

	BL		ZNAK		@izpisemo presledek ali cifro kot ASCII znak
	ADD		R6,R6,#1	@povecamo stevec znakov
	SUBS	R4,R4,#1	@zmanjsamo stevec zanke
	BPL		SKLAD_BERI
	
	LDR		R1,=0xE000C000	@U0THR izpis nove vrste na UART0
	MOV		R0,#13		@<CR>
	STRB	R0,[R1]
	MOV		R0,#10		@<LF>
	STRB	R0,[R1]

	MOV		R0,#0x20	@(potreben presledek za brisanje zadnjega znaka niza logo1)
	BL		ZNAK
	LDR		R0,=STANJE2
	LDRB	R2,[R0]
	TST		R2,#0x10	@10s?
	MOVEQ	R0,#0x20	@izpisemo ' ', ce ni 10s
	BLEQ	ZNAK
	TST		R2,#0x10	@10s?
	MOVEQ	R0,#0x20	@izpisemo ' ', ce ni 10s
	BLEQ	ZNAK
.if LCD
	MOV		R0,#'M		@izpisemo 'MHz', ce je LCD 16x2
	BL		ZNAK
	MOV		R0,#'H
	BL		ZNAK
	MOV		R0,#'z
	BL		ZNAK
.else
	MOV		R0,#'N		@izpisemo 'normal', ce je 1s '|' ali -, ce je LCD 20x2
	LDR		R2,=STANJE	@0.1s, 1s ali 10s?
	LDRB 	R1,[R2]
	TST		R1,#0x10	@preverimo bit4
	MOVNE 	R0,#'H		@izpisemo'high', ce je 10s '/' ali carrot up
	TST		R1,#0x04	@preverimo bit2
	MOVNE 	R0,#'L		@izpisemo'low',  ce je 0,1s '\' ali _
	BL		ZNAK
.endif
	LDR	PC,[SP],#4
.ltorg

@*** Deli 64bitno vsebino R9:R3(H:L)/10, kvocient v R9:R3, ostanek v R0 *** (R0-3,R9)
DELI10D:
	STMFD	SP!, {R5-R8,LR} @
	MOV		R1, R9			@deljenec H  v R1
	MOV		R0, R3			@deljenec L  v R0
	MOV		R6, #0xA0000000	@odstevam od deljenca 10*2^N
	MOV		R5, #0x00000000	@odstevam od deljenca 10*2^N
	MOV		R8, #0x10000000	@pristevam k kvocientu 1*2^N
	MOV		R7, #0x00000000	@pristevam k kvocientu 1*2^N
	MOV		R9, #0			@kvocient H v R9
	MOV		R3, #0			@kvocient L v R3
DELI10D_1:
	SUBS	R0,R0,R5	@odstejem L R0-R5
	SBCS	R1,R1,R6	@odstejem H R1-R6
	BCC		DELI10D_2
	ADDS	R3,R3,R7	@C=1: ni izposoje >>> pristejem kvocientu R9:R3 + R8:R7
	ADC		R9,R9,R8
	B		DELI10D_3
DELI10D_2:
	ADDS	R0,R0,R5	@C=0: je izposoja >>> pristejem prevec odsteto R1:R0 + R6:R5
	ADC		R1,R1,R6
DELI10D_3:
	LSRS	R6,R6,#1	@pomaknem R6:R5 v desno
	LSR		R5,R5,#1
	ORRCS	R5,R5,#0x80000000
	LSRS	R8,R8,#1	@pomaknem R8:R7 v desno, preverim konec zanke!
	LSR		R7,R7,#1
	ORRCS	R7,R7,#0x80000000
	MOVS	R7,R7
	BNE		DELI10D_1	@ce je v R7 enka?
	MOVS	R8,R8
	BNE		DELI10D_1	@ce je v R8 enka?
@@	MOV		PC,R14
	LDMFD	SP!, {R5-R8,PC}	@ return

@*** Deli 32bitno vsebino R3/10, kvocient v R3, ostanek v R0 *** (R0-3)
DELI10:
	MOV	R0,R3			@deljenec v R0
	MOV	R1,#0xA0000000	@odstevam od deljenca 10*2^N
	MOV	R2,#0x10000000	@pristevam k kvocientu	1*2^N
	MOV	R3,#0			@kvocient v R3
DELI10_1:
	SUBS	R0,R0,R1	@odstejem R0-R1
	ADDCS	R3,R3,R2	@ni izposoje >>> pristejem kvocientu R3 + R2
	ADDCC	R0,R0,R1	@je izposoja >>> pristejem prevec odsteto R0 + R1
	MOV		R1,R1,LSR#1	@pomaknem R1 v desno
	MOVS	R2,R2,LSR#1	@pomaknem R2 v desno, preverim konec zanke!
	BNE		DELI10_1
	MOV		PC,R14

@*** Nepredznaceno 32bitno deljenje R3/R0=R3, ostanek v R0 *** (R0-3)
NDELI:
	MOVS	R1,R0		@prepreci deljenje z 0?
	MOVEQ	PC,LR
	MOV		R2,#1
	BMI		NDELI2
NDELI1:	MOV	R2,R2,LSL#1	@enica delitelja v MSB
	MOVS	R1,R1,LSL#1
	BPL		NDELI1
NDELI2:		MOV	R0,R3	@ostanek v R0
	MOV		R3,#0		@kvocient v R3
NDELI3:	CMP	R0,R1
	SUBCS	R0,R0,R1
	ADDCS	R3,R3,R2
	MOV		R1,R1,LSR#1
	MOVS	R2,R2,LSR#1
	BNE		NDELI3
	MOV		PC,LR

@*** Inicializacija TIMER0 *** (R0-1)
INITIM0:
	LDR		R0,=0xE0004070	@T0CTCR
	MOV		R1,#0x0B		@CAP0.2,BOTH
	STRB	R1,[R0]
	LDR		R0,=0xE0004004	@T0TCR
	MOV		R1,#0x01
	STRB	R1,[R0]
	MOV		PC,LR
.ltorg

@*** Inicializacija PWM *** (R0-1)
INIPWM:
	LDR	R0,=0xE0014014	@PWMMCR
	LDR	R1,=0x00000002	@PWMMR0R
	STR	R1,[R0]
	LDR	R0,=0xE001404C	@PWMPCR
	LDR	R1,=0x00000404	@PWMSEL2,PWMENA2
	STR	R1,[R0]
	LDR	R0,=0xE0014050	@PWMLER
	MOV	R1,#0x07		@Enable PWM latch 0,1,2
	STRB	R1,[R0]
	LDR	R0,=0xE0014018	@PWMMR0
	LDR	R1,=PWMMR0
	STR	R1,[R0]
	LDR	R0,=STANJE		@stanje 0.1Hz, 1Hz ali 10Hz?
	LDRB	R2,[R0]

	TST	R2,#0x04
	LDRNE	R1,=PWMMR1A	@0.1s
	TST	R2,#0x08
	LDRNE	R1,=PWMMR1	@1s
	TST	R2,#0x10
	LDRNE	R1,=PWMMR10	@10s

	LDR	R0,=0xE001401C	@PWMMR1
	STR	R1,[R0]
	LDR	R0,=0xE0014020	@PWMMR2
	LDR	R1,=PWMMR2
	STR	R1,[R0]
	LDR	R0,=0xE0014004	@PWMTCR CounterEnable & PWMEnable
	MOV	R1,#0x09
	STRB	R1,[R0]
	MOV	PC,LR
.ltorg

@*** Reset PWM *** (R0-1)
RESPWM:
	LDR	R0,=0xE0014018	@PWMMR0
	LDR	R1,[R0]
	LDR	R0,=0xE0014008	@PWMTC
	STR	R1,[R0]
	MOV	PC,LR
.ltorg

@*** Ukaz s tipk *** (R0-2)
TIPKE:
	STR		LR,[SP,#-4]!	@resi link
.if ANA
	LDR		R0,=0x3FFFC036	@FIO1PIN2 branje tipk
	LDRB	R1,[R0]
	LDR		R2,=STANJE
	LDRB	R0,[R2]
	TST		R1,#0x01		@modra tipka levo?
	BICEQ	R0,R0,#0x01	@izpis stolpec
	TST		R1,#0x02		@rumena tipka gor?
	ORREQ	R0,R0,#0x01	@izpis dBm
	TST		R1,#0x04		@rdeca tipka dol?
	BICEQ	R0,R0,#0x02	@meritev 1Hz
	TST		R1,#0x08		@zelena tipka desno?
	ORREQ	R0,R0,#0x02	@meritev 10Hz
	B		TIPKE2
.elseif OLI
	LDR		R0,=0x3FFFC015	@FIO0PIN1 branje tipk1 za OLI
	LDRB	R1,[R0]
	LDR		R2,=STANJE
	LDRB	R0,[R2]
	TST		R1,#0x80	@ali je tipka B1, P0.15
	EOREQ	R0,R0,#0x01	@toggle izpis dBm/stolpec -
	BEQ		TIPKE1		@debounce T=100ms
	LDR		R0,=0x3FFFC016	@FIO0PIN2 branje tipk2 za OLI
	LDRB	R1,[R0]
	LDR		R2,=STANJE
	LDRB	R0,[R2]
	TST		R1,#0x01	@ali je tipka B2, P0.16
	BNE		TIPKE2		@ce ni tipke B2
	TST		R0,#0x04	@sedaj 0.1s? toggle meritev T 0.1s/1s/10s
	ORRNE	R0,R0,#0x08	@meritev 1s
	BICNE	R0,R0,#0x10	@clr meritev 10s
	BICNE	R0,R0,#0x04	@clr meritev 0.1s
	BNE		TIPKE1
	TST		R0,#0x08	@sedaj 1s?
	ORRNE	R0,R0,#0x10	@meritev 10s
	BICNE	R0,R0,#0x08	@clr meritev 1s
	BICNE	R0,R0,#0x04	@clr meritev 0.1s
	BNE		TIPKE1
	TST		R0,#0x10	@sedaj 10s?
	ORRNE	R0,R0,#0x04	@meritev 0.1s
	BICNE	R0,R0,#0x08	@clr meritev 1s
	BICNE	R0,R0,#0x10	@clr meritev 10s
.elseif BON
	LDR		R0,=0x3FFFC036	@FIO1PIN2 branje tipk
	LDRB	R1,[R0]		@R1=(TIPKE)
	LDR		R2,=STANJE
	LDRB	R0,[R2]		@R0=(STANJE)
	TST		R1,#0x01	@ali je tipka1?
	EOREQ	R0,R0,#0x01	@toggle izpis dBm/stolpec
	BEQ		TIPKE1		@ce je tipka1, debounce in ven
	TST		R1,#0x02	@ali je tipka2?
	BNE		TIPKE2		@ce ni tipke2, brez debounce ven
	TST		R0,#0x04	@sedaj 0.1s? toggle T 0.1s/1s/10s
	ORRNE	R0,R0,#0x08	@meritev 1s
	BICNE	R0,R0,#0x10	@clr meritev 10s
	BICNE	R0,R0,#0x04	@clr meritev 0.1s
	BNE		TIPKE1
	TST		R0,#0x08	@sedaj 1s?
	ORRNE	R0,R0,#0x10	@meritev 10s
	BICNE	R0,R0,#0x08	@clr meritev 1s
	BICNE	R0,R0,#0x04	@clr meritev 0.1s
	BNE		TIPKE1
	TST		R0,#0x10	@sedaj 10s?
	ORRNE	R0,R0,#0x04	@meritev 0.1s
	BICNE	R0,R0,#0x08	@clr meritev 1s
	BICNE	R0,R0,#0x10	@clr meritev 10s
.endif
TIPKE1:
	STRB	R0,[R2]
	BL		T100MS		@debounce T=100ms
	BL		T100MS		@debounce T=100+100ms
TIPKE2:
	LDR		PC,[SP],#4	@povratek na link

@*** Ukaz z UART0: D|d=dBm/stolp, T|t=1s-->10s-->0.1s *** (R0-2)
RXUART:
	LDR	R0,=0xE000C014	@U0LSR ali je kaj prislo v sprejemnik?
	LDRB	R1,[R0]
	TST	R1,#0x01
	MOVEQ	PC,LR
	LDR	R0,=0xE000C000	@U0RBR precitamo sprejeti bajt
	LDRB	R1,[R0]
	AND	R1,R1,#0x7F		@brisemo pariteto za vsak slucaj
	CMP	R1,#0x60		@male crke v velike?
	SUBCS	R1,R1,#0x20
	LDR	R2,=STANJE
	LDRB	R0,[R2]
	CMP		R1,#'D		@ukaz d ali D? (dBm/stolp)
	EOREQ	R0,R0,#0x01	@izpis dBm
	CMP		R1,#'T		@ukaz t ali T? (T=1s-->10s-->0.1s)
	BNE		RXUART_1
	TST		R0,#0x04	@sedaj 0.1s? toggle T 0.1s/1s/10s
	ORRNE	R0,R0,#0x08	@meritev 1s
	BICNE	R0,R0,#0x10	@clr meritev 10s
	BICNE	R0,R0,#0x04	@clr meritev 0.1s
	BNE		RXUART_1
	TST		R0,#0x08	@sedaj 1s?
	ORRNE	R0,R0,#0x10	@meritev 10s
	BICNE	R0,R0,#0x08	@clr meritev 1s
	BICNE	R0,R0,#0x04	@clr meritev 0.1s
	BNE		RXUART_1
	TST		R0,#0x10	@sedaj 10s?
	ORRNE	R0,R0,#0x04	@meritev 0.1s
	BICNE	R0,R0,#0x08	@clr meritev 1s
	BICNE	R0,R0,#0x10	@clr meritev 10s
RXUART_1:
	STRB	R0,[R2]
	MOV	PC,LR
.ltorg

@*** Meritev amplitude preko ADC s povprecenjem *** (R0-3)
ADC:
	MOV	R2,#16384	@16384=2**14 povprecenj! cca 50ms
	MOV	R2, R2, LSR#2	@popravek na 2na12 povprecenj

	MOV	R3,#0			@rezultat povprecenja
ADC_INIT:	@inicializacija ADC in zacetek konverzije
	MOV	R0,#ADC_DIV		@izracunaj deljenje takta ADC0
	LDR	R1,=0x01200040	@START=001,PDN=1,CLKS=11,CLKDIV,SEL=6
	ORR	R1,R1,R0,LSL#8
	LDR	R0,=0xE0034000	@AD0CR
	STR	R1,[R0]	
ADC_MERITEV:
	LDR	R0,=0xE0034004	@AD0GDR cakaj konec pretvorbe-zanka
	LDR	R1,[R0]
	TST	R1,#0x80000000
	BEQ	ADC_MERITEV
	MOV	R1,R1,LSL#16	@pocisti register in postavi bite na zacetek
	MOV	R1,R1,LSR#22
	ADD	R3,R3,R1		@pristejemo povprecenju v R3
	SUBS	R2,R2,#1	@zanka povprecenja
	BNE	ADC_INIT
	LDR	R0,=JAKOST		@shrani 24-bitni rezultat v JAKOST(32bit)

	MOV	R3, R3, LSL#2	@popravek rezultata zaradi 2na12 povprecenj
	STR	R3,[R0]
	MOV	PC,LR
.ltorg

@*** Izracun in izpis ADC stolpcev *** (R0-3)
IZPIS_STOLPCEV:
	STR	LR,[SP,#-4]!
	LDR	R0,=JAKOST
	LDR	R3,[R0]
	LDR	R0,=MINUS60		@odstejemo offset za 0.7 V (-60 dBm)
	SUBS 	R3,R3,R0
	MOVMI	R3,#0
	LDR 	R0,=SKALA80	@ADC vrednost za 2.2 V (+15 dBm) zmanjsana za 0.7 V, ki smo jih odsteli
	BL	NDELI
	BL	STOLP
	LDR	PC,[SP],#4
.ltorg

@*** Izpis na LCD v dBm *** (R0-5)
IZPIS_DBM:
	STR	LR,[SP,#-4]!
	MOV	R0,#0xC0	@set DDRAM address druga vrstica
	BL	UKAZ
	MOV	R0,#' '		@presledki na zacetku za poravnavo merske enote v prvi(MHz) in drugi(dBm) vrstici
	BL	ZNAK				

@Izpis ADC: 0 V = 0(dec), 3.3 V = 1023(dec) / 0.7 V = 217(dec) = -60 dBm, 2.2 V = 682(dec) = 15 dBm
	LDR	R0,=FREKVNC	@izracunam popravek frekvence fs*4096 v R0
	LDR	R3,[R0]
	LDR	R0,=POPRAVA
	BL	NDELI
	ADD	R0,R3,#4096
	LDR	R3,=SKALADB	@izracunam popravek SKALADB v R0 in na sklad
	MOV	R3,R3,LSL#12	@pomnozim s 4096
	BL	NDELI
	MOV	R0,R3
	MOV	R4,R3
	LDR	R1,=JAKOST	@ADC vrednost zadnje meritve v R3
	LDR	R3,[R1]
	BL	NDELI
	MOV	R0,R4		@izracunam popravljeni MINUSDB v R0
	MOV	R4,R3
	LDR	R3,=MINUS60
	BL	NDELI
	MOV	R0,R3		@odstejem MINUSDB
	MOV	R3,R4
	SUBS R3,R3,R0
	
	BMI DBM_LOW		@manjse od -60dBm --> mute

	LDR	R0, =STANJE
	LDR	R1, [R0]
	BIC	R1, R1, #0x20	@mute=0
	STR	R1, [R0]

	LDR	R1,=750		@razpon 75.0 dB
	CMP R3, R1
	BPL DBM_HIGH	@vecje od +15dBm
	
	LDR	R1,=600		@0=-60.0dBm, 600=0.0dBm, 750=+15.0dBm
	SUBS	R3,R3,R1
	BPL	DBM_PLUS
	MOV	R0,#'-		@izpisemo -dBm
	BL	ZNAK		@izpisi -
	RSB	R3,R3,#0
	B 	IZPIS_DBM_CIFRE
DBM_PLUS:			@izpisemo +dBm
	MOV	R0,#'+
	BL	ZNAK		@izpisi +

IZPIS_DBM_CIFRE:
	MOV 	R4,#3		@zacetek zanke, 3 cifre
DBM_CIFRA:
	BL	DELI10			
	STR	R0,[SP,#-4]!	@ostanek (cifro) shrani na sklad
	SUBS 	R4,R4,#1
	BNE	DBM_CIFRA
	
	MOV 	R4,#3		@stevec cifer
	MOV    	R5,#' '   	@podremo zastavico za cifro razlicno od 0 z ASCII kodo za presledek
	
DBM_PISI:
	CMP	R4,#2			@ali smo na mestu enic, ker nicle enic nikoli ne brisemo?
	MOVEQ	R5,#'0		@postavimo ASCII znak za '0' v zastavico, da nicel ne brisemo vec

	CMP     R4,#1		@ali smo na mestu za dec. piko
@	MOV	R0,#'.'
	MOV	R0,#','
	BLEQ 	ZNAK		@izpisemo piko, klic podprograma povozi zastavico EQ!

	LDR	R0,[SP],#4		@nalozimo cifro iz sklada
	
	CMP	R0,#0			@ali je cifra enaka nic?
	MOVEQ	R0,R5		@niclo zamenjamo z vrednostjo zastavice (presledek ali nicla ASCII)
	ADDNE	R0,R0,#'0	@ne-niclo pretvorimo v ASCII znak tako, da pristejemo kodo za niclo
	MOVNE	R5,#'0		@postavimo ASCII znak za '0' v zastavico, da nicel ne brisemo vec

	BL	ZNAK			@izpisemo presledek ali cifro kot ASCII znak
	SUBS	R4,R4,#1	@zmanjsamo stevec cifer
	BNE	DBM_PISI
	MOV	R0,#' '			@izpisemo mersko enoto
	BL	ZNAK
	MOV	R0,#'d
	BL	ZNAK
	MOV	R0,#'B
	BL	ZNAK
	MOV	R0,#'m
	BL	ZNAK
	MOV	R0,#' '
	BL	ZNAK
	MOV	R0,#' '
	BL	ZNAK
	MOV	R0,#' '
	BL	ZNAK

IZPIS_DBM_1:
.if LCD
	MOV	R0,#' '
	BL	ZNAK
	MOV	R0,#' '
	BL	ZNAK
	MOV	R0,#' '		@'XXXs' za 20x2
	BL	ZNAK
	LDR	R2,=STANJE	@0.1Hz, 1Hz ali 10Hz?
	LDRB R3,[R2]	@R1 --> R3, ker ZNAK spremeni R0,R1 in EQ!
	TST	R3,#0x08	@preverimo bit4
	MOVNE R0,#' '	@izpisemo'norm', ce je (1s)
	BLNE	ZNAK
	TST	R3,#0x08	@preverimo bit4
	MOVNE R0,#' '	@izpisemo'norm', ce je (1s)
	BLNE	ZNAK
	TST	R3,#0x08	@preverimo bit4
	MOVNE R0,#'1	@izpisemo'norm', ce je (1s)
	BLNE	ZNAK
	TST	R3,#0x10	@preverimo bit5
	MOVNE R0,#' '	@izpisemo'high', ce je (10s)
	BLNE	ZNAK
	TST	R3,#0x10	@preverimo bit5
	MOVNE R0,#'1	@izpisemo'high', ce je (10s)
	BLNE	ZNAK
	TST	R3,#0x10	@preverimo bit5
	MOVNE R0,#'0	@izpisemo'high', ce je (10s)
	BLNE	ZNAK
	TST	R3,#0x04	@preverimo bit3
	MOVNE R0,#'0	@izpisemo'low',  ce je (0,1s)
	BLNE	ZNAK
	TST	R3,#0x04	@preverimo bit3
	MOVNE R0,#'.	@izpisemo'low',  ce je (0,1s)
	BLNE	ZNAK
	TST	R3,#0x04	@preverimo bit3
	MOVNE R0,#'1	@izpisemo'low',  ce je (0,1s)
	BLNE	ZNAK
	MOV R0,#'s	@izpisemo's' za sekundo
	BL	ZNAK
.else
	MOV	R0,#'M	@izpis MHz za 16x2
	BL	ZNAK
	MOV	R0,#'H
	BL	ZNAK
	MOV	R0,#'z
	BL	ZNAK
.endif
	LDR	PC,[SP],#4
.ltorg
	
DBM_LOW:
	LDR	R0, =STANJE
	LDR	R1, [R0]
	ORR	R1, R1, #0x20	@mute=1
	STR	R1, [R0]
	MOV	R0,#' '	
	BL	ZNAK
	MOV	R0,#'t
	BL	ZNAK
	MOV	R0,#'o
	BL	ZNAK
	MOV	R0,#'o
	BL	ZNAK
	MOV	R0,#' '	
	BL	ZNAK
	MOV	R0,#'l
	BL	ZNAK
	MOV	R0,#'o
	BL	ZNAK
	MOV	R0,#'w
	BL	ZNAK
	MOV	R0,#' '
	BL	ZNAK
	MOV	R0,#' '
	BL	ZNAK
	MOV	R0,#' '
	BL	ZNAK
	MOV	R0,#' '
	BL	ZNAK
@	LDR	PC,[SP],#4
	B	IZPIS_DBM_1
.ltorg

DBM_HIGH:
	MOV	R0,#' '	
	BL	ZNAK
	MOV	R0,#'t
	BL	ZNAK
	MOV	R0,#'o
	BL	ZNAK
	MOV	R0,#'o
	BL	ZNAK
	MOV	R0,#' '	
	BL	ZNAK
	MOV	R0,#'h
	BL	ZNAK
	MOV	R0,#'i
	BL	ZNAK
	MOV	R0,#'g
	BL	ZNAK
	MOV	R0,#'h
	BL	ZNAK
	MOV	R0,#' '
	BL	ZNAK				
	MOV	R0,#' '
	BL	ZNAK
	MOV	R0,#' '
	BL	ZNAK
@	LDR	PC,[SP],#4
	B	IZPIS_DBM_1
.ltorg

@*** Meritev frekvence: vrne R9:R3(H:L)=frekv. in (STEVECF)=novi 37bitni stevec *** (R0-5,R9)
MERIF:
	LDR	R0,=0xE0004008	@T0TC izpis vsebine Timer Counter 0
	LDR	R3,[R0]
	MOV	R5, R3, LSR#27	@shrani zgornjih 5 bitov TIMER0 --> R5
	LDR	R0, =STEVECF
	LDR	R9,[R0, #4]		@iz (STEVECF(H)) --> R9 stara meritev 64bit MSB
	STR	R5,[R0, #4]		@v  (STEVECF(H)) <-- R5 nova  meritev 64bit MSB
	MOV	R3,R3,LSL#5
	LDR	R0,=0x3FFFC015	@FIO0PIN1, P0.8-P0.15
	LDRB	R1,[R0]
	AND	R1,R1,#0x1F		@5 ECL bitov: P0.8-12
	ORR	R3,R3,R1
	MOV	R1,R3			@R1=nova meritev LSB
	LDR	R0,=STEVECF
	LDR	R2,[R0]			@iz (STEVECF(L)) --> R2 stara meritev 64bit LSB
	STR	R1,[R0]			@v  (STEVECF(L)) <-- R1 nova  meritev 64bit LSB
	SUBS	R3,R1,R2	@razlika L do stare meritve
	SBC		R9,R5,R9	@razlika H do stare meritve
	MOV	PC,LR
.ltorg

@*** Konec delovanja zbirnika ARM ***
.END
	
