255 lines
3.4 KiB
ArmAsm
255 lines
3.4 KiB
ArmAsm
|
|
#include "hw.S"
|
|
|
|
.global _start
|
|
_start:
|
|
/*mov es, #0*/
|
|
movw sp, #0xfed0
|
|
|
|
; IAWCTL = 0 -> none?
|
|
|
|
|
|
call !siniport
|
|
call !siniclk
|
|
;call !sinitau
|
|
;call !siniuart0
|
|
call !main
|
|
|
|
delay_long:
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
delay_data:
|
|
nop
|
|
ret
|
|
|
|
|
|
tx_byte:
|
|
; start condition
|
|
clr1 P0.0
|
|
call !delay_long ;27 cyc = 4 cyc + 16 cyc + 7 cyc
|
|
|
|
; data bits
|
|
mov c, #8 ; 1 cyc
|
|
.Lbitloop:
|
|
|
|
; set 1 bit
|
|
bf a.0, $.Lsetlo ; 3 cyc hi // 5 cyc lo
|
|
.Lsethi:
|
|
nop ; 1 cyc hi //
|
|
nop ; 1 cyc hi //
|
|
set1 P0.0 ; 2 cyc hi //
|
|
br $.Lafterset ; 3 cyc hi //
|
|
.Lsetlo:
|
|
clr1 P0.0 ; // 2 cyc lo
|
|
nop ; // 1 cyc lo
|
|
nop ; // 1 cyc lo
|
|
nop ; // 1 cyc lo
|
|
.Lafterset:
|
|
; delay
|
|
call !delay_data ;12 cyc
|
|
|
|
; next bit
|
|
shr a, 1 ; 1 cyc
|
|
dec c ; 1 cyc
|
|
bnz $.Lbitloop ; 4 cyc
|
|
|
|
; stop condition
|
|
set1 P0.0
|
|
call !delay_long
|
|
call !delay_long
|
|
|
|
ret
|
|
|
|
|
|
main:
|
|
set1 P0.0
|
|
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
|
|
loop:
|
|
mov es, #0xe
|
|
|
|
;movw bc, #0x0200
|
|
mov c, #0
|
|
movw hl, #0xfe00
|
|
innerloop:
|
|
mov a, es:[hl]
|
|
push ax
|
|
push bc
|
|
call !tx_byte
|
|
pop bc
|
|
pop ax
|
|
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
|
|
incw hl
|
|
;decw bc
|
|
;cmpw bc, #0
|
|
dec c
|
|
cmp0 c
|
|
bnz $innerloop
|
|
|
|
;movw bc, #0x0200
|
|
mov c, #0
|
|
;movw hl, #0xfe00
|
|
innerloop2:
|
|
mov a, es:[hl]
|
|
push ax
|
|
push bc
|
|
call !tx_byte
|
|
pop bc
|
|
pop ax
|
|
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
|
|
incw hl
|
|
;decw bc
|
|
;cmpw bc, #0
|
|
dec c
|
|
cmp0 c
|
|
bnz $innerloop2
|
|
|
|
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
|
|
mov a, #'E'
|
|
call !delay_long
|
|
call !delay_long
|
|
mov a, #'N'
|
|
call !delay_long
|
|
call !delay_long
|
|
mov a, #'D'
|
|
call !delay_long
|
|
call !delay_long
|
|
mov a, #' '
|
|
call !delay_long
|
|
call !delay_long
|
|
|
|
br !loop
|
|
|
|
|
|
|
|
|
|
|
|
mov a, #' '
|
|
call !tx_byte
|
|
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
call !delay_long
|
|
;set1 P0.0
|
|
|
|
br !loop
|
|
|
|
|
|
|
|
|
|
|
|
siniport:
|
|
; P00 GPIO
|
|
; P06 TxD0
|
|
mov !PIOR, #0
|
|
|
|
; set P0 as output
|
|
mov !P0, #0
|
|
|
|
; disable pullups
|
|
mov !PU0, #0
|
|
|
|
; push-pull output
|
|
mov !POM0, #0
|
|
|
|
; not analog in
|
|
mov !PMC0, #0x7f
|
|
|
|
; set port modes
|
|
;mov !PM0, #0x0f ; P00 GPIO ; P06 TxD0
|
|
mov !PM0, #0
|
|
|
|
ret
|
|
|
|
|
|
siniclk:
|
|
mov !PER0, #0xe5 ; enable many peripherals
|
|
mov !OSMC, #0x10
|
|
;mov !HOCODIV, #1
|
|
ret
|
|
|