@*** Lock-In Sprejemnik - S53MV 30.04.2017 ***

@*** Konstante mikrokrmilnika LPC2136 legacy GPIO ***
.equ	KVARC,14745600		@frekvenca kristala (Hz)
.equ	CLK,KVARC*4		@frekvenca jedra ARM (PLL)
.equ	PCLK,CLK		@frekvenca vhodno/izhodnih enot (APBDIV)
.equ	BAUD,PCLK/16/115200	@modulo deljenja UART za 115200bps
.equ	N1US,CLK/3000000	@konstanta cakanja T1US za HD44780
.equ	NTIMER,PCLK/230400	@nastavi frekvenco prekinitev 230400Hz
.equ	MEJA,160000		@meja kvadratni/linearni odziv detektorja

@*** Vhodno/izhodni prikljucki LPC2136 legacy GPIO ***
@/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 -
@P0.3.od/SDA0/MAT0.0/EINT1 -
@P0.4/SCK0/CAP0.1/AD0.6 -
@P0.5/MISO0/MAT0.1/AD0.7 -
@P0.6/MOSI0/CAP0.2/AD1.0 -
@P0.7/SSEL0/PWM2/EINT2 -
@P0.8/TXD1/PWM4/AD1.1 -
@P0.9/RXD1/PWM6/EINT3 -
@P0.10/RTS1/CAP1.0/AD1.2 -
@P0.11.od/CTS1/CAP1.1/SCL1 -
@P0.12/DSR1/MAT1.0/AD1.3 -
@P0.13/DTR1/MAT1.1/AD1.4 - analogni vhod lockin
@P0.14.od/DCD1/EINT1/SDA1/BOOTLOADER(!) - vhod vezan na /RTS.FT231XS 
@P0.15/RI1/EINT2/AD1.5 -
@P0.16-23 - digitalni izhodi za LCD D0-7.HD44780
@P0.24 - ne obstaja ***
@P0.25/AD0.4/AOUT - analogni izhod psevdonaključno tresenje
@P0.26/AD0.5 -
@P0.27/AD0.0/CAP0.1/MAT0.1 - analogni vhod diode
@P0.28/AD0.1/CAP0.2/MAT0.2 -
@P0.29/AD0.2/CAP0.3/MAT0.3 -
@P0.30/AD0.3/EINT3/CAP0.0 -
@P0.31(!) - nepovezan ***
@P1.0-15 - ne obstajajo ***
@P1.16-19 - vhodi z vgrajenim PULL-UP za tipke na maso
@P1.20(!) - nepovezan ***
@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 ***

@*** Dodelitev pomnilnika RAM ***
.equ	SKLAD,0x40000100	@sklad raste navzdol -256byte

@*** Ukazi za delovanje zbirnika Gnu ***
.text
.arm

@*** 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
@*** Prekinitev FIQ *** (R7,R8-13.FIQ)
	ADDS	R13,R13,R13	@PRBS 1+x^28+x^31 v R13
	MOVEQ	R13,#-1
	TST	R13,#0x10000000
	EORNE	R13,R13,#1
	TST	R13,#0x80000000
	EORNE	R13,R13,#1
	MOV	R9,R13,LSR#22	@ocisti 10 bitov za DAC
	MOV	R9,R9,LSL#6
	LDR	R8,=0xE006C000	@DACR
	STR	R9,[R8]
	LDR	R8,=0xE0034004	@AD0GDR dioda
	LDR	R9,[R8]
	ANDS	R8,R9,#0x0000E000	@prekoracitev navzdol v R7.30?
	ORREQ	R7,R7,#0x40000000
	EORS	R8,R8,#0x0000E000	@prekoracitev navzgor v R7.31?
	ORREQ	R7,R7,#0x80000000
	MOV	R9,R9,LSL#16	@ocisti 10 bitov meritve
	MOV	R9,R9,LSR#22
	MOV	R9,R9,LSL#9	@mnozenje s 512
	SUB	R9,R9,R10,LSR#8	@visokoprepustno sito R10.unsigned
	ADD	R10,R10,R9
	LDR	R8,=0xE0060004	@AD1GDR lockin
	LDR	R8,[R8]
	MOVS	R8,R8,LSL#16	@lockin sinhroni usmernik z MSB(AD1)
	RSBPL	R9,R9,#0
	ORRPL	R7,R7,#0x10000000	@prisotnost nizko v R7.28?
	ORRMI	R7,R7,#0x20000000	@prisotnost visoko v R7.29?
	SUB	R9,R9,R11,ASR#12	@nizkoprepustno sito R11.signed
	ADD	R11,R11,R9
	LDR	R8,=0xE0034008	@ADGSR ponovno pozeni pretvorbo AD0 in AD1 hkrati
	LDR	R9,=0x01000000	@BURST=0,START=001,EDGE=0
	STR	R9,[R8]
	MOV	R9,R11,ASR#12	@nadaljevanje nizkoprepustno sito R11.signed
	SUB	R9,R9,R12,ASR#12	@nizkoprepustno sito R12.signed
	ADD	R12,R12,R9
	MOV	R9,R12,ASR#12
	MOVS	R9,R9		@nenegativen rezultat meritve v R7
	MOVMI	R9,#0
	AND	R7,R7,#0xF0000000	@ocisti spodnjih 28 bitov
	ORR	R7,R7,R9
	LDR	R8,=0xE0004000	@T0IR=0xFF reset zahtev TIMER0
	MOV	R9,#-1
	STRB	R9,[R8]
	SUBS	PC,LR,#4	@izhod iz prekinitve FIQ
.ltorg

@*** Pocisti pomnilnik do nevarne lokacije 0x000001FC ***
.balign	512,0

@*** Inicializiraj AD0 in AD1 *** (R0-1)
INIAD:	LDR	R0,=0xE0034000	@AD0CR vhod AD0.0
	LDR	R1,=0x01200B01	@EDGE=0,START=001,PDN=1,CLKS=000,BURST=0,CLKDIV=0x0B,SEL=0x01
	STR	R1,[R0]
	LDR	R0,=0xE0060000	@AD1CR vhod AD1.4
	LDR	R1,=0x01200B10	@EDGE=0,START=001,PDN=1,CLKS=000,BURST=0,CLKDIV=0x0B,SEL=0x10
	STR	R1,[R0]
	MOV	PC,LR
.ltorg

@*** Vkljuci prekinitve FIQ *** (R0-4)
FIQON:	MRS	R0,CPSR		@preberi CPSR
	BIC	R0,R0,#0x40	@vkljuci prekinitve FIQ
	MSR	CPSR_c,R0	@popravi CPSR
	MOV	PC,LR
.ltorg

@*** Nastavi prekinitve TIMER0 *** (R0-1)
TIMER0:	LDR	R0,=0xE0004018	@T0MR0=NTIMER-1
	LDR	R1,=NTIMER
	SUB	R1,R1,#1
	STR	R1,[R0]
	LDR	R0,=0xE0004014	@T0MCR=0x0003 reset in int iz MR0
	MOV	R1,#0x0003
	STR	R1,[R0]
	LDR	R0,=0xE0004004	@T0TCR=0x01 vklop TIMER0
	MOV	R1,#0x01
	STR	R1,[R0]
	MOV	PC,LR
.ltorg

@*** Inicializiraj VIC *** (R0-1)
VIC:	LDR	R0,=0xFFFFF00C	@VICIntSelect=0x00000010 TIMER0=FIQ
	LDR	R1,=0x00000010
	STR	R1,[R0]
	LDR	R0,=0xFFFFF010	@VICIntEnable=0x00000010 TIMER0
	LDR	R1,=0x00000010
	STR	R1,[R0]
	MOV	PC,LR
.ltorg

@*** 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,=0x0010100A	@TIM0,UART0,AD0,AD1
	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=0x24 P=2,M-1=3
	MOV	R1,#0x23
	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 P0.0-1=UART0,P0.13=AD1.4
	LDR	R1,=0x0C000005
	STR	R1,[R0]
	LDR	R0,=0xE002C004	@PINSEL1 P0.25=AOUT,P0.27=AD0.0
	LDR	R1,=0x00480000
	STR	R1,[R0]
	LDR	R0,=0xE002C014	@PINSEL2 izklop JTAG&TRACE
	LDR	R1,[R0]
	BIC	R1,R1,#0x0C
	STR	R1,[R0]
	LDR	R0,=0xE0028000	@IO0PIN vsi 1
	MOV	R1,#-1
	STR	R1,[R0]
	LDR	R0,=0xE0028010	@IO1PIN vsi 0
	MOV	R1,#0
	STR	R1,[R0]
	LDR	R0,=0xE0028008	@IO0DIR izhodi 0.0-0.31
	LDR	R1,=0xFFFFFFFF
	STR	R1,[R0]
	LDR	R0,=0xE0028018	@IO1DIR izhodi 1.20-1.31
	LDR	R1,=0xFFF00000
	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
	MOV	R0,R0,LSL#24	@premakni byte na 16-23
	MOV	R0,R0,LSR#8
	LDR	R1,=0xE0028004	@IO0SET
	STR	R0,[R1]
	LDR	R1,=0x00FF0000	@obrni 16-23
	EOR	R0,R0,R1
	LDR	R1,=0xE002800C	@IO0CLR
	STR	R0,[R1]
	LDR	R1,=0xE0028014	@IO1SET
	MOV	R0,#0x00200000	@RS=1
	STR	R0,[R1]
	BL	T1US		@zakasnitev 1us
	LDR	R1,=0xE0028014	@IO1SET
	MOV	R0,#0x40000000	@vklopi E
	STR	R0,[R1]
	BL	T1US		@zakasnitev 1us
	LDR	R1,=0xE002801C	@IO1CLR
	MOV	R0,#0x40000000	@izklopi E
	STR	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
	MOV	R0,R0,LSL#24	@premakni byte na 16-23
	MOV	R0,R0,LSR#8
	LDR	R1,=0xE0028004	@IO0SET
	STR	R0,[R1]
	LDR	R1,=0x00FF0000	@obrni 16-23
	EOR	R0,R0,R1
	LDR	R1,=0xE002800C	@IO0CLR
	STR	R0,[R1]
	LDR	R1,=0xE002801C	@IO1CLR
	MOV	R0,#0x00200000	@RS=0
	STR	R0,[R1]
	BL	T1US		@zakasnitev 1us
	LDR	R1,=0xE0028014	@IO1SET
	MOV	R0,#0x40000000	@vklopi E
	STR	R0,[R1]
	BL	T1US		@zakasnitev 1us
	LDR	R1,=0xE002801C	@IO1CLR
	MOV	R0,#0x40000000	@izklopi E
	STR	R0,[R1]
	BL	T100US		@zakasnitev 100us
	LDR	PC,[SP],#4	@povratek na link
.ltorg

@*** Zakasnitev 1us *** (R0)
.balign	16,0
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

@*** Nepredznaceno deljenje R3=R3/R0, 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

@*** Izracunaj dvojiski logaritem R4=log2(R3) *** (R0-4)
LOG2:	MOV	R4,#32		@izracunaj celi del logaritma v R4 + resitev log2(0)
	MOVS	R3,R3
	BMI	LOG22
LOG21:	SUBS	R4,R4,#1
	BEQ	LOG22
	ADDS	R3,R3,R3
	BPL	LOG21
LOG22:	MOV	R2,#10		@dodaj 10 dvojiskih mest za dvojisko piko v R4
LOG23:	UMULL	R0,R1,R3,R3
	MOV	R3,R1
	ADDS	R0,R0,R0
	ADCS	R1,R1,R1
	MOVCC	R3,R1
	ADC	R4,R4,R4
	SUBS	R2,R2,#1
	BNE	LOG23
	MOV	PC,LR

@*** 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	INIAD	@inicializiraj AD0 in AD1
	BL	TIMER0	@nastavi prekinitve TIMER0
	BL	VIC	@inicializiraj VIC
	BL	INILCD	@inicializiraj HD44780 5X7,2vrstici,CGRAM
	MOV	R0,#0x80	@prva vrstica besedila
	BL	UKAZ
	LDR	R2,=ZACNI5
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,=ZACNI6
ZACNI3:	LDRB	R0,[R2],#1
	MOVS	R0,R0
	BEQ	ZACNI4
	BL	ZNAK
	B	ZACNI3
ZACNI4:	BL	T1S		@zakasnitev 1s
	BL	FIQON		@vkljuci prekinitve FIQ
	B	ZANKA	@glavna zanka programa
.ltorg
ZACNI5:	.asciz	"LockInSprejemnik"
ZACNI6:	.asciz	"S53MV 30.04.2017"
.align

@*** Glavna zanka programa ***
ZANKA:	MOV	R8,R7		@stanje in rezultat meritve v R8
	MOV	R7,#0		@resetiraj stanje v R7
	MOV	R0,#0x80	@nastavi polozaj v prvo vrstico LCD
	BL	UKAZ
	BL	STANJE		@izpisi stanje iz R8 na LCD
	BL	KOLENO		@popravek kvadratni/linearni odziv R3=LOG(R8)
	BL	DECI		@pretvori v stirimestno desetisko obliko R3>R4
	BL	DBLCD		@izpisi jakost (R4) XX.XXdB na LCD
	BL	ODDAJ		@oddaj jakost (R4) XX.XX<CR><LF> na UART0
	MOV	R8,R7		@stanje in rezultat meritve v R8
	BIC	R3,R8,#0xF0000000	@rastoci stolpec v drugo vrstico LCD
	ADD	R3,R3,R3,LSL#1	@mnozenje s 3
	MOV	R3,R3,LSR#9	@deljenje s 512
	BL	STOLP
	BL	KOLENO		@popravek kvadratni/linearni odziv R3=LOG(R8)
	BL	DECI		@pretvori v stirimestno desetisko obliko R3>R4
	BL	ODDAJ		@oddaj jakost (R4) XX.XX<CR><LF> na UART0
	B	ZANKA
.ltorg

@*** Izpisi stanje iz R8 na LCD *** (R0-3,R8)
STANJE:	STR	LR,[SP,#-4]!	@resi link
	MOV	R3,R8,LSR#30	@izpisi prekoracitev AD?
	MOV	R2,#' '
	CMP	R3,#2		@prekoracitev AD navzgor izpise "^^^^^^"
	MOVEQ	R2,#'^'
	CMP	R3,#1		@prekoracitev AD navzdol izpise "vvvvvv"
	MOVEQ	R2,#'v'
	CMP	R3,#3		@prekoracitev v obe smeri izpise "******"
	MOVEQ	R2,#'*'
	MOV	R0,R2
	BL	ZNAK
	MOV	R0,R2
	BL	ZNAK
	MOV	R0,R2
	BL	ZNAK
	MOV	R0,R2
	BL	ZNAK
	MOV	R0,R2
	BL	ZNAK
	MOV	R0,R2
	BL	ZNAK
	MOV	R0,#' '		@' ' presledek na LCD
	BL	ZNAK
	MOV	R3,R8,LSR#28	@izpisi stanje lock-in?
	AND	R3,R3,#3
	MOV	R0,#' '
	CMP	R3,#2		@visok izpise "H"
	MOVEQ	R0,#'H'
	CMP	R3,#1		@nizek izpise "L"
	MOVEQ	R0,#'L'
	CMP	R3,#3		@preklop izpise "S"
	MOVEQ	R0,#'S'
	BL	ZNAK
	MOV	R0,#' '		@' ' presledek na LCD
	BL	ZNAK
	LDR	PC,[SP],#4	@povaratek na link

@*** Popravek kvadratni/linearni odziv R3=LOG(R8) *** (R0-5,R8)
KOLENO:	STR	LR,[SP,#-4]!	@resi link
	BIC	R3,R8,#0xF0000000	@popravek kolena diode kvadratni/linearni odziv
	BL	LOG2		@izracunaj dvojiski logaritem R4=log2(R3)
	MOV	R5,R4		@log(x)
	BIC	R3,R8,#0xF0000000
	LDR	R0,=MEJA
	ADD	R3,R3,R0
	BL	LOG2		@izracunaj dvojiski logaritem R4=log2(R3)
	ADD	R5,R5,R4	@log(x)+log(x+m)
	LDR	R3,=MEJA
	BL	LOG2		@izracunaj dvojiski logaritem R4=log2(R3)
	SUB	R4,R5,R4	@log(x)+log(x+m)-log(m)
	LDR	R0,=19266	@pretvori rezultat v decibele 19266=65536*1000*log10(2)/1024
	MUL	R3,R4,R0
	MOV	R3,R3,LSR#16
	LDR	PC,[SP],#4	@povaratek na link
.ltorg

@*** Pretvori v sitimestno desetisko obliko R3>R4 *** (R0-4)
DECI:	STR	LR,[SP,#-4]!	@resi link
	MOV	R0,#10
	BL	NDELI
	ADD	R4,R0,#'0'
	MOV	R0,#10
	BL	NDELI
	ADD	R0,R0,#'0'
	ORR	R4,R0,R4,LSL#8	
	MOV	R0,#10
	BL	NDELI
	ADD	R0,R0,#'0'
	ORR	R4,R0,R4,LSL#8
	ADD	R0,R3,#'0'
	ORR	R4,R0,R4,LSL#8
	LDR	PC,[SP],#4	@povaratek na link

@*** Izpisi jakost (R4) XX.XXdB na LCD *** (R0-1,R4)
DBLCD:	STR	LR,[SP,#-4]!	@resi link
	MOV	R0,R4
	BL	ZNAK
	MOV	R0,R4,LSR#8
	BL	ZNAK
	MOV	R0,#'.'		@"."
	BL	ZNAK
	MOV	R0,R4,LSR#16
	BL	ZNAK
	MOV	R0,R4,LSR#24
	BL	ZNAK
	MOV	R0,#'d'		@"dB"
	BL	ZNAK
	MOV	R0,#'B'
	BL	ZNAK
	LDR	PC,[SP],#4	@povaratek na link

@*** Oddaj jakost (R4) XX.XX<CR><LF> na UART0 *** (R0-1,R4)
ODDAJ:	LDR	R1,=0xE000C000	@U0THR naslov UART0
	MOV	R0,R4
	STRB	R0,[R1]
	MOV	R0,R4,LSR#8
	STRB	R0,[R1]
	MOV	R0,#'.'		@"."
	STRB	R0,[R1]
	MOV	R0,R4,LSR#16
	STRB	R0,[R1]
	MOV	R0,R4,LSR#24
	STRB	R0,[R1]
	MOV	R0,#13		@<CR>+<LF>
	STRB	R0,[R1]
	MOV	R0,#10
	STRB	R0,[R1]
	MOV	PC,LR
.ltorg

@*** Konec delovanja zbirnika Gnu ***
.end
