;*** Frekvencmeter 1Hz - S53MV 08.05.2014 *** ;*** Konstante mikrokrmilnika LPC2138/01 *** KVARC EQU 19441000 ;frekvenca kristala (Hz) CLK EQU KVARC*3 ;frekvenca jedra ARM (PLL) PCLK EQU CLK ;frekvenca vhodno/izhodnih enot (APBDIV) BAUD EQU PCLK/153600 ;modulo deljenja UART za 9600bps*16 N1US EQU CLK/3000000 ;konstanta cakanja T1US za HD44780 PWMMR0 EQU CLK+20000 ;konstante za PWM PWMMR1 EQU CLK+1000 PWMMR2 EQU 1000 ADC_DIV EQU PCLK / 4000000 ; ADC clock 4 MHz ;*** 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 - ;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 - ;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 - ;P0.26/AD0.5 - ;P0.27/AD0.0/CAP0.1/MAT0.1 - ;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 *** SKLAD EQU 0x40000100 ;sklad raste navzdol -256byte MERITEV EQU 0x40000400 ;dvojiski rezultat meritve (32bit) ;*** Ukazi za delovanje zbirnika ARM *** AREA RESET, CODE, READONLY, ALIGN=9 ENTRY CODE32 ;*** 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 ;*** 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 MOV R1,#0x22 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,=0x0000A005 ; P0.0-1=UART0,P0.6=CAP0.2,P0.7=PWM2 LDR R1,=0x0000A305 ; P0.0-1=UART0,P0.6=CAP0.2,P0.7=PWM2 - biti 9:8 za P0.4: 11 = AD0.6 STR R1,[R0] LDR R0,=0xE002C004 ;PINSEL1 P0.25=AOUT LDR R1,=0x00080000 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 ;FIO0DIR izhodi 0.13-31, vhodi 0.0-12 LDR R1,=0xFFFFE000 STR R1,[R0] LDR R0,=0x3FFFC020 ;FIO1DIR 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 DCB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04 ;0=praznina DCB 0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x04 ;1=enacrtica DCB 0x14,0x14,0x14,0x14,0x14,0x14,0x00,0x04 ;2=dvecrtici DCB 0x15,0x15,0x15,0x15,0x15,0x15,0x00,0x04 ;3=tricrtice DCB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F ;0=praznina podcrtana DCB 0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x1F ;1=enacrtica podcrtana DCB 0x14,0x14,0x14,0x14,0x14,0x14,0x00,0x1F ;2=dvecrtici podcrtana DCB 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 LDR R1,=0x3FFFC016 ;FIO0PIN2 podatek STRB R0,[R1] LDR R1,=0x3FFFC03A ;FIO1SET2 MOV R0,#0x20 ;RS=1 STRB R0,[R1] BL T1US ;zakasnitev 1us LDR R1,=0x3FFFC03B ;FIO1SET3 MOV R0,#0x40 ;vklopi E STRB R0,[R1] BL T1US ;zakasnitev 1us LDR R1,=0x3FFFC03F ;FIO1CLR3 MOV R0,#0x40 ;izklopi E 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 LDR R1,=0x3FFFC016 ;FIO0PIN2 podatek STRB R0,[R1] LDR R1,=0x3FFFC03E ;FIO1CLR2 MOV R0,#0x20 ;RS=0 STRB R0,[R1] BL T1US ;zakasnitev 1us LDR R1,=0x3FFFC03B ;FIO1SET3 MOV R0,#0x40 ;vklopi E STRB R0,[R1] BL T1US ;zakasnitev 1us LDR R1,=0x3FFFC03F ;FIO1CLR3 MOV R0,#0x40 ;izklopi E STRB R0,[R1] BL T100US ;zakasnitev 100us LDR PC,[SP],#4 ;povratek na link ;*** Zakasnitev 1us *** (R0) ALIGN 16 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 BL INIPWM ;inicializiraj PWM 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 MOV R8,#31 ;zacetni stevec zanke MOV R0,#0x01 ;display clear BL UKAZ BL T4MS ;zakasnitev 4ms B ZANKA ;glavna zanka programa LTORG ZACNI5 DCB "Frekv.meter 1Hz",0 ZACNI6 DCB "ANCKA 04.06.2014",0 ALIGN 4 ;*** Glavna zanka programa *** ZANKA ;Inicializacija ADC in zacetek konverzije (R0-1) ADC_INIT 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] ZANKA1 LDR R0,=0x3FFFC014 ;FIO0PIN0 meritev zakljucena? LDRB R1,[R0] TST R1,#0x20 ;vhod P0.5? BEQ ZANKA1 BL T100US ;pocakam 100us LDR R0,=0xE0004008 ;T0TC izpis razlike Timer Counter 0 LDR R3,[R0] MOV R3,R3,LSL#5 LDR R0,=0x3FFFC015 ;FIO0PIN1 LDRB R1,[R0] AND R1,R1,#0x1F ORR R3,R3,R1 MOV R1,R3 SUB R3,R3,R9 MOV R9,R1 BL DECIZP_SP ZANKA2 LDR R0,=0x3FFFC014 ;FIO0PIN0 meritev zacne? LDRB R1,[R0] TST R1,#0x20 ;vhod P0.5? BNE ZANKA2 ;Izpis ADC // 0 V = 0(dec), 3.3 V = 1023(dec) / 0.7 V = 217(dec) = -60 dBm, 2.3 V = 713(dec) = 20 dBm LDR R0,=MERITEV LDR R3,[R0] ;ADC vrednost zadnje meritve CMP R3,#217 ;varovalka: manj kot 0.7 V? MOVCC R3,#217 ;najmanjsa vrednost za nivo LDR R1,=713 CMP R3,R1 ;varovalka: vec kot 2.3 V? MOVCS R3,R1 ;najvecja vrednost za nivo ;Branje stikala/tipke ;Bxx IZPIS_STOLPCEV ;Izpis na LCD IZPIS_dBm 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 MOV R0,#' ' BL ZNAK MOV R0,#' ' BL ZNAK MOV R0,#' ' BL ZNAK MOV R0,#' ' BL ZNAK MOV R0,#' ' BL ZNAK LDR R1,=589 ;589(dec) = 0 dBm = 1.9 V CMP R3,R1 ;preverimo predznak: ADC za 0 dBm BCS DBM_PLUS DBM_MINUS MOV R0,#'-' BL ZNAK ;izpisi - SUB R3,R3,#217 ;odstejemo offset za 0.7 V (-60 dBm) ;* 600 / 372 = * 50 / 31 MOV R2,R3,LSL#1 ;* 2 v R2 MOV R3,R3,LSL#4 ;* 16 v R3 ADD R3,R3,LSL#1 ;* 3 = * 48 v R3 ADD R3,R2 ;* 50 LDR R0,=31 ;/ 31 BL NDELI LDR R1,=600 ;v resnici: 60.0 dBm SUB R1,R3 ;inverzija: 0 - 600 => 600 - 0 MOV R3,R1 B IZPIS_dBm_CIFRE DBM_PLUS MOV R0,#'+' BL ZNAK ;izpisi + LDR R1,=589 SUB R3,R3,R1 ;odstejemo offset za 1.9 V (0 dBm) ; * 200 / 124 = * 50 / 31 MOV R2,R3,LSL#1 ;* 2 v R2 MOV R3,R3,LSL#4 ;* 16 v R3 ADD R3,R3,LSL#1 ;* 3 = * 48 v R3 ADD R3,R2 ;* 50 LDR R0,=31 ;/ 31 BL NDELI 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,#'.' BLEQ ZNAK ;izpisemo piko, klic podprograma pogazi 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 B IZPIS_KONEC ; Izracun in izpis ADC stolpcev IZPIS_STOLPCEV SUB R3,R3,#217 ;odstejemo offset za 0.7 V (-60 dBm) ADD R3,R3,R3,LSL#1 ;* 3 MOV R3,R3,LSL#8 ;* 256 LDR R0,=496 ;ADC vrednost za 2.3 V (+20 dBm) zmanjsana za 0.7 V, ki smo jih odsteli BL NDELI BL STOLP IZPIS_KONEC TST R8,#0x04 ;izmenicno miganje vseh izhodov MOVEQ R0,#0x55 MOVNE R0,#0xAA LDR R1,=0x3FFFC014 ;FIO0PIN0 P0.0-7 STRB R0,[R1] LDR R1,=0x3FFFC015 ;FIO0PIN1 P0.8-15 STRB R0,[R1] LDR R1,=0x3FFFC017 ;FIO0PIN3 P0.24-31 STRB R0,[R1] LDR R0,=0xE000C000 ;U0THR izpis stevca na UART0 STRB R8,[R0] LDR R0,=0xE006C000 ;DACR zaga iz stevca, visok tok AND R1,R8,#0xFF MOV R1,R1,LSL#8 STR R1,[R0] ;;;; BL T100MS ;zakasnitev 100ms ADD R8,R8,#1 ;stevec zanke 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 LDR R0,=MERITEV STR R1,[R0] B ZANKA LTORG ;*** Desetiski izpis z brisanjem vodilnih nicel *** (R0-5, 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 ;zacetek zanke DECIZP1_SP BL DELI10 ;izpisi desetiska mesta na sklad STR R0,[SP,#-4]! ;ostanek (cifro) shrani na sklad SUBS R4,R4,#1 BPL DECIZP1_SP ;cifre s sklada posiljamo na zaslon LDR R0,=0x80 ;nastavi polozaj BL UKAZ MOV R4,#9 ;stevec cifer MOV R5,#' ' ;podremo zastavico za cifro razlicno od 0 z ASCII kodo za presledek SKLAD_BERI CMP R4,#6 ;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,#5 ;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 BL ZNAK ;izpisemo presledek ali cifro kot ASCII znak SUBS R4,R4,#1 ;zmanjsamo stevec cifer BPL SKLAD_BERI MOV R0,#' ' ;izpisemo mersko enoto BL ZNAK MOV R0,#'M' BL ZNAK MOV R0,#'H' BL ZNAK MOV R0,#'z' BL ZNAK LDR PC,[SP],#4 ;*** Deli vsebino R3 z 10, ostanek v R0 in kvocient v R3 *** (R0-4) 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 DELI101 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 DELI101 MOV PC,R14 ;*** Nepredznaceno 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,=0xE001401C ;PWMMR1 LDR R1,=PWMMR1 STR R1,[R0] LDR R0,=0xE0014020 ;PWMMR2 LDR R1,=PWMMR2 STR R1,[R0] LDR R0,=0xE0014004 ;PWMTCR MOV R1,#0x09 STRB R1,[R0] MOV PC,LR LTORG ;*** Konec delovanja zbirnika ARM *** END