;*** Preizkus mikrokrmilnika - S53MV 04.03.2014 ***

;*** Vhodno/izhodni prikljucki LPC2148 @20MHz (kristal=20MHz) ***
;P0.0-1 - UART0
;P0.16-23 - digitalni izhodi za LCD HD44780 D0-7
;P1.21 - digitalni izhod za LCD HD44780 RS
;P1.30 - digitalni izhod za LCD HD44780 E

SKLAD	EQU	0x40000100

;*** Ukazi za delovanje zbirnika ARM ***
	AREA	RESET, CODE, READONLY, ALIGN=9
	ENTRY
	CODE32

;*** Tabela izjem na zacetnem naslovu 0 ***
IZJEME	B	ZACNI
	B	IZJEME	;Undef
	B	IZJEME	;SWI
	B	IZJEME	;PAbt
	B	IZJEME	;DAbt
	NOP		;Reserved Vector
	B	IZJEME	;IRQ
	B	IZJEME	;FIQ

;*** Inicializiraj MAM in PCLK *** (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]
	LDR	R0,=0xE01FC100	;APBDIV=1 PCLK=CCLK
	MOV	R1,#1
	STR	R1,[R0]
	BX	LR
	LTORG

;*** Inicializiraj GPIO *** (R0-1)
GPIO	LDR	R0,=0xE002C000	;PINSEL0 P0.0-1=UART0
	LDR	R1,=0x00000005
	STR	R1,[R0]
	LDR	R0,=0xE002C014	;PINSEL2 Izklop JATG&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.0-0.31
	LDR	R1,=0xFFFFFFFF
	STR	R1,[R0]
	LDR	R0,=0x3FFFC020	;FIO1DIR izhodi 1.20-1.31
	LDR	R1,=0xFFF00000
	STR	R1,[R0]
	BX	LR
	LTORG

;*** Inicializacija HD44780 *** (R0-3)
INILCD	STR	LR,[SP,#-4]!	;resi link
	BL	T100MS
	MOV	R0,#0x38	;function set 
	BL	UKAZ
	BL	T4MS
	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
	MOV	R0,#0x06	;entry mode set
	BL	UKAZ
	MOV	R0,#0x0C	;display on
	BL	UKAZ

;	MOV	R0,#0x80	;set DDRAM address
;	BL	UKAZ

	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
	STR	R0,[R1]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	LDR	R1,=0x3FFFC019	;FIO0SET1
	MOV	R0,#0x80
	STRB	R0,[R1]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	BL	T1US
	LDR	R1,=0x3FFFC03B	;FIO1SET3
	MOV	R0,#0x40	;vklopi E
	STRB	R0,[R1]
	BL	T1US
	LDR	R1,=0x3FFFC03F	;FIO1CLR3
	MOV	R0,#0x40	;izklopi E
	STRB	R0,[R1]
	BL	T100US
	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]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	LDR	R1,=0x3FFFC01D	;FIO0CLR1
	MOV	R0,#0x80
	STRB	R0,[R1]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	BL	T1US
	LDR	R1,=0x3FFFC03B	;FIO1SET3
	MOV	R0,#0x40	;vklopi E
	STRB	R0,[R1]
	BL	T1US
	LDR	R1,=0x3FFFC03F	;FIO1CLR3
	MOV	R0,#0x40	;izklopi E
	STRB	R0,[R1]
	BL	T100US
	LDR	PC,[SP],#4	;povratek na link

;*** Zakasnitev 1us *** (R0)
	ALIGN	16
T1US	MOV	R0,#5
T1US1	SUBS	R0,R0,#1
	BPL	T1US1
	BX	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 in PCLK
	BL	GPIO	;inicializiraj GPIO
	BL	INILCD	;inicializacija HD44780

	MOV	R0,#0x80	;set DDRAM address
	BL	UKAZ
	B	ZANKA	;glavna zanka programa
	LTORG

;*** Glavna zanka programa ***
ZANKA	ADD	R8,R8,#1
	MOV	R0,R8
	BL	ZNAK
	BL	T4MS	;cakanje 4ms
	BL	T4MS	;cakanje 4ms
	BL	T4MS	;cakanje 4ms
	BL	T4MS	;cakanje 4ms
	B	ZANKA
	LTORG

;*** Konec delovanja zbirnika ARM ***
	END
